客户的旧版运输单信息接口不能满足运营渐渐出现的问题,因此对该接口进行版本改造,获得的新结构是
而且为解决运营与第三方快递公司对excel导入的快递单订单商品等规格等问题,最后将格式重组的工作交给后台技术处理,因此尝试了不同的方式,最终决定加入数据库操作。以下兼贴上成功与尝试的方式代码。每行也同样有解析
附上运营用excel格式及最后的json实现结果
function foxTest(){
if ($_FILES["execl"]["error"] > 0)
{
echo "Error: " . $_FILES["execl"]["error"] . "<br />";
}
else
{
if (file_exists("upload/" . $_FILES["execl"]["name"]))
{
echo $_FILES["execl"]["name"] . " already exists. ";
}
else
{
move_uploaded_file($_FILES["execl"]["tmp_name"],
"./uploads/source/" . $_FILES["execl"]["name"]);
$file="./uploads/source/" . $_FILES["execl"]["name"];
include_once('reader.php');
$data = new Spreadsheet_Excel_Reader(); // 实例化解析类Spreadsheet_Excel_Reader
$data->setOutputEncoding("utf-8"); // 设置编码方式
$data->read($file);
error_reporting(E_ALL ^ E_NOTICE);
$one = array();
for ($i = 2; $i <= $data->sheets[0]['numRows']; $i++) {
$expressCompanyName=$data->sheets[0]['cells'][$i][1];//expressCompanyName
$expressCompanyNo=$data->sheets[0]['cells'][$i][2];//expressCompanyNo
$expressNo=$data->sheets[0]['cells'][$i][3];//expressNo
$orderId=$data->sheets[0]['cells'][$i][4];//orderId
$productIds=$data->sheets[0]['cells'][$i][5];//productIds
$two = array('expressCompanyName' =>$expressCompanyName ,'expressCompanyNo' =>$expressCompanyNo ,'expressNo' =>$expressNo ,'orderId' =>$orderId , 'productIds'=>$productIds);
$one[]=$two;//将信息组成数组后交到大数组中
}
//print_r($one);
foreach ($one as $value) {
$productIds=$value['productIds'];//取出商品id
$expressNo=$value['expressNo'];//取出快递单号
$expressNo_arr[$expressNo][] = $productIds;//组成以快递单号为key,商品id为value的二维数组
//$giftExpriessInfos = array('expressCompanyName' => $value['expressCompanyName'],'expressCompanyNo' => $value['expressCompanyNo'],'expressNo' => $value['expressNo'],'productIds' => $value['productIds']);
}
/*
foreach ($one as $value) {
$ids_arr= explode("、", $value['productIds']);
$providerCode="www.xxxxxxxx";
$deliverStatus=true;
$deliverFailMsg=null;
$expressNo=$value['expressNo'];
$fox=$expressNo_arr[$expressNo];
$giftExpriessInfos = array('expressCompanyName' => $value['expressCompanyName'],'expressCompanyNo' => $value['expressCompanyNo'],'expressNo' => $value['expressNo'],'deliverStatus' => $deliverStatus,'deliverFailMsg' => $deliverFailMsg,'productIds' => $fox);
$kdorder=$arrayName = array('orderId' =>$value['orderId'] ,'providerCode'=>$providerCode,'giftExpriessInfos'=>[$giftExpriessInfos] );
echo json_encode($kdorder);
//$data=$value;
//$info = $this->order_model->add_kdorder($data);
//echo $info;
}
*/
$xxx = array();//开个数组
foreach ($one as $value) {
$ids_arr= explode("、", $value['productIds']);//将字符串打散为数组,excel的规格是、来区分
$providerCode="www.xxxxxxxx";
$deliverStatus=true;
$deliverFailMsg=null;
$giftExpriessInfos = array('expressCompanyName' => $value['expressCompanyName'],'expressCompanyNo' => $value['expressCompanyNo'],'expressNo' => $value['expressNo'],'deliverStatus' => $deliverStatus,'deliverFailMsg' => $deliverFailMsg,'productIds' => $ids_arr);//productIds这个字段客户需要的是数组类型
$kdorder = array('orderId' =>$value['orderId'] ,'providerCode'=>$providerCode,'giftExpriessInfos'=>[$giftExpriessInfos] );//客户需求的格式
$xxx[]=$kdorder;//加入去大数组带出去
}
$keys = array_keys($xxx); //key数组化
$keys =max($keys);//拿key的最后一位
for ($i=0; $i <=$keys ; $i++) { //把key拿出来打数组
$orderId=$xxx[$i]['orderId'];//取出订单号
$sc[]= $orderId;//将订单号放进数组中
}
//print_r($sc);
$axc=array_count_values($sc);//统计出现次数
foreach ($axc as $key => $value) {
if ($value > 1) {//拿key,就是订单号在excel中是否出现多次,是出现多次就重新组成一个拿去发送
$where = array('orderId' =>$key);//条件:订单号
$providerCode="www.xxxxxxxx";
$deliverStatus=true;
$deliverFailMsg=null;
$info = $this->order_model->diaohai_order($where);//数据库操作找出expressCompanyName, expressCompanyNo, expressNo,productIds在重复订单号中是什么内容
//$ids_arr= explode("、", $info['productIds']);
$keysd = array_keys($info); //key数组化
$keysd =max($keysd);//拿key的最后一位
for ($i=0; $i <=$keysd ; $i++) { //通过循环来组装最终的结果
//echo $info[$i]['productIds'];
$ids_arr= explode("、", $info[$i]['productIds']);
$info[$i]['productIds']=$ids_arr;
$info[$i]['deliverStatus']=$deliverStatus;
$info[$i]['deliverFailMsg']=$deliverFailMsg;
}
$weqwe = array('orderId' =>$key ,'providerCode'=>$providerCode,'giftExpriessInfos'=>$info );//最终结果
//$info=array_merge_recursive($info[0],$info[1]);
//echo json_encode($info);
//print_r($weqwe);
$weqwe=json_encode($weqwe,JSON_UNESCAPED_UNICODE);//打成json格式,记得JSON_UNESCAPED_UNICODE来处理中文
//echo $weqwe;
$url = "http://xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
//$url = "xxxxxxxxxxxxx";
$curl = curl_init();
curl_setopt($curl, CURLOPT_HTTPHEADER, array("Content-Type: application/json; charset=utf-8"));
curl_setopt($curl, CURLOPT_URL, $url);
//$data = array('name' =>"lijunsheng");
//$data=json_encode($data);
//$data_one=array('newlyIncrease'=>$newlyIncrease);
//print_r($data_one);
curl_setopt($curl, CURLOPT_POSTFIELDS, $weqwe);
//curl_setopt($curl, CURLOPT_COOKIEFILE, $cookie_file);
curl_setopt($curl, CURLOPT_HEADER, 0);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
$ret = curl_exec($curl);
echo $ret; // 返回的数据在这里
curl_close($curl);
}else{//订单号没出现多次的情况
$deliverStatus=true;
$deliverFailMsg=null;
$where = array('orderId' =>$key);
$info = $this->order_model->diaohai_order($where);
$info[0]['deliverStatus']=$deliverStatus;
$info[0]['deliverFailMsg']=$deliverFailMsg;
$ids_arr= explode("、", $info[0]['productIds']);
$info[0]['productIds']=$ids_arr;
$weqwe = array('orderId' =>$key ,'providerCode'=>$providerCode,'giftExpriessInfos'=>$info );
//$info=array_merge_recursive($info[0],$info[1]);
//echo json_encode($info);
//print_r($weqwe);
$weqwe=json_encode($weqwe,JSON_UNESCAPED_UNICODE);
echo $weqwe;
$url = "http://xxxxxxxxxxxxxxxxxxxx";
//$url = "xxxxxxxxxxxxxxxxxxxxxx";
$curl = curl_init();
curl_setopt($curl, CURLOPT_HTTPHEADER, array("Content-Type: application/json; charset=utf-8"));
curl_setopt($curl, CURLOPT_URL, $url);
//$data = array('name' =>"lijunsheng");
//$data=json_encode($data);
//$data_one=array('newlyIncrease'=>$newlyIncrease);
//print_r($data_one);
curl_setopt($curl, CURLOPT_POSTFIELDS, $weqwe);
//curl_setopt($curl, CURLOPT_COOKIEFILE, $cookie_file);
curl_setopt($curl, CURLOPT_HEADER, 0);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
$ret = curl_exec($curl);
echo $ret; // 返回的数据在这里
curl_close($curl);
}
}
//print_r($xxx);
// $sss=array_merge_recursive($xxx[0],$xxx[1]);
//echo json_encode($sss);
/*
foreach ($one as $value) {
$ids_arr= explode("、", $value['productIds']);
$providerCode="www.xxxxxxxxxx";
$deliverStatus=true;
$deliverFailMsg=null;
$giftExpriessInfos = array('expressCompanyName' => $value['expressCompanyName'],'expressCompanyNo' => $value['expressCompanyNo'],'expressNo' => $value['expressNo'],'deliverStatus' => $deliverStatus,'deliverFailMsg' => $deliverFailMsg,'productIds' => $ids_arr);
$kdorder=$arrayName = array('orderId' =>$value['orderId'] ,'providerCode'=>$providerCode,'giftExpriessInfos'=>[$giftExpriessInfos] );
echo json_encode($kdorder);
//$data=$value;
//$info = $this->order_model->add_kdorder($data);
//echo $info;
}
*/
/*
$last = array();
foreach ($two as $key => $value) {
echo $expressCompanyName;
$orderId=$key;
$providerCode="www.xxxxxx";
$giftExpriessInfos= array();
foreach ($value as $key => $value) {
$deliverStatus=true;
$deliverFailMsg=null;
$ids_arr= explode("、", $value);
$smallText = array('expressNo' =>$key,'productIds'=>$ids_arr,'deliverStatus'=>$deliverStatus,'deliverFailMsg'=>$deliverFailMsg);
$giftExpriessInfos[]=$smallText;
$last=array(
"orderId"=>$orderId,
"giftExpriessInfos"=>$giftExpriessInfos
);
echo json_encode($last);
}
}
//print_r($last);
*/
//print_r($item);
//print_r(array_unique($last));
//echo json_encode($last);
//$giftExpriessInfos= array();
/*
foreach ($two as $key => $value) {
$ids=implode("",$value);
$ids_arr= explode("、", $ids);
$smallText = array('expressCompanyNo' => $key,'productIds' => $ids_arr);
$giftExpriessInfos[]=$smallText;
}
print_r($giftExpriessInfos);
//echo json_encode($giftExpriessInfos);
*/
}
}
}
可能还有更好的方式,可日后在空闲的时间再进行抽象化的操作