if($request->isPost()){
$file =input('post.avatar');
if(!$file){
$this->error('請上傳需要導(dǎo)入的表格!支持csv,xls,xlsx格式!');
}
$filePath = ROOT_PATH . DS . 'public' . DS . $file;
if (!is_file($filePath)) {
$this->error('上傳的表格不存在,請核實');
}
$PHPReader = new \PHPExcel_Reader_Excel2007();
if (!$PHPReader->canRead($filePath)) {
$PHPReader = new \PHPExcel_Reader_Excel5();
if (!$PHPReader->canRead($filePath)) {
$PHPReader = new \PHPExcel_Reader_CSV();
$PHPReader->setInputEncoding('GBK');
if (!$PHPReader->canRead($filePath)) {
$this->error(__('Unknown data format'));
}
}
}
$uptime = time();//用于判斷插入記錄的唯一時間戳
$num = input('post.num');//獲取商品數(shù)量
$id = input('post.gid');//獲取商品id
$uid = $this->auth->id;//獲取用戶id
$uname = $this->auth->username;
$yu_money = $this->auth->money;//獲取用戶余額
$level = $this->auth->level;//獲取用戶會員等級
$store_id = input('post.store_id');//獲取倉庫編號
$store_info = Db::name('send_store')->where('id',$store_id)->find();//獲取倉庫記錄
$is_multiple = $store_info['is_multiple'];
if($is_multiple==0){
$num = 1;
}
$express_id = $store_info['express_id'];//快遞編號
$express_price = get_price($level,$express_id);//獲取快遞價格
$goods_info = Db::name('goods')->where('id',$id)->find();
$weight = $goods_info['weight'];
$goods_price = $goods_info['price'];//獲取商品單價
$total_fee = $num*$goods_price+$express_price;//計算總價
$send_store = $store_info['send_code'];//獲取發(fā)貨倉編號
$store_name = $store_info['store_name'];//獲取發(fā)貨倉name
$father_code = trim(get_father_code($id,$express_id));//獲取主站商品編號
$PHPExcel = $PHPReader->load($filePath); //加載文件
$currentSheet = $PHPExcel->getSheet(0); //讀取文件中的第一個工作表
$allRow = $currentSheet->getHighestRow(); //取得一共有多少行
$pttype = $currentSheet->getCell("A1")->getValue();//是什么平臺表格
$leijia = '';
$continue_num = 0;
for($i=2;$i<=$allRow;$i++){
if($yu_money < $total_fee){
$upinfo=Db::name('upinfo');
$info['user_id'] = $uid;
$info['exnum'] = $allRow-1;//要插入數(shù)據(jù)庫的總記錄數(shù)
$info['oknum'] = $i-2;//成功插入的數(shù)量
$info['tableid'] = $uptime;//此次任務(wù)的id
$info['expressid'] = $express_id;
$info['vars'] = '余額不足';
$upinfo->insert($info);
$this->error("余額不足,成功發(fā)布了".($i-2)."條記錄",url('Express/tblist'));
}
if($pttype=='訂單編號'){//淘寶
$out_order_no = $currentSheet->getCell("A".$i)->getValue();//訂單號
$address_ren = $currentSheet->getCell("O".$i)->getValue();//收件人
$address_array = preg_replace('/(,)|(,)/','',$currentSheet->getCell("P".$i)->getValue());//收貨地址
$address_hao = preg_replace('/\W/','',$currentSheet->getCell("S".$i)->getValue());//號碼
}else if($pttype=='商品'){//拼多多
$out_order_no = $currentSheet->getCell("B".$i)->getValue();
$address_ren = $currentSheet->getCell("O".$i)->getValue();//收件人
$address_hao = preg_replace('/\W/','',$currentSheet->getCell("P".$i)->getValue());//收件號碼
$add_s = $currentSheet->getCell("Q".$i)->getValue();//省
$add_c = $currentSheet->getCell("R".$i)->getValue();//市
$add_a = $currentSheet->getCell("S".$i)->getValue();//區(qū)
$add_d = $currentSheet->getCell("T".$i)->getValue();//地址
$address_array = $add_s.' '.$add_c.' '.$add_a.' '.$add_d;//收件地址
}else if($pttype=='訂單號'){//模板
$out_order_no = $currentSheet->getCell("A".$i)->getValue();
$address_array = preg_replace('/(,)|(,)/','',$currentSheet->getCell("B".$i)->getValue());//收件地址
$address_ren = $currentSheet->getCell("C".$i)->getValue();//收件人
$address_hao = preg_replace('/\W/','',$currentSheet->getCell("D".$i)->getValue());//收件號碼
}else{
$this->error('提交的表格格式錯誤,請按照導(dǎo)入說明操作!');
}
$out_order_no = preg_replace('# #','',$out_order_no);//訂單號
$address_hao = preg_replace('# #','',$address_hao);//收件人手機號
$address_ren = preg_replace('# #','',$address_ren);//收件人
//驗證訂單號是否為空
if(empty($out_order_no)){
$leijia = $leijia.'第'.$i.'行訂單號為空,';
continue;
}
$isorder = Db::name('express')->where('out_order_no',trim($out_order_no))->find();
//驗證訂單是否重復(fù)提交
if ($isorder)
{
$leijia = $leijia.'第'.$i.'行地址訂單號'.$isorder['out_order_no'].'重復(fù),';
continue;
}
//驗證收件人手機號是否為空
if(empty($address_hao)){
$leijia = $leijia.'第'.$i.'行收件人手機號為空,';
continue;
}
//驗證收貨地址是否為空
if(empty(preg_replace('# #','',$address_array))){
$leijia = $leijia.'第'.($i).'行收件地址為空,';
continue;
}
//驗證收件人是否為空
if(empty($address_ren)){
$leijia = $leijia.'第'.$i.'行收件人為空,';
continue;
}
//驗證收貨地址是否合理
$addrlist = explode(" ",$address_array);
$addrlist = array_filter($addrlist);
$addrlist = array_values($addrlist);
if(count($addrlist)<4)
{
$leijia = $leijia.'第'.$i.'行收貨地址不合理,';
continue;
}
// ini_set("display_errors","On");
// error_reporting(E_ALL);
switch ($express_id) {
case 1:
//接口請求參數(shù)
$post_info = [
'accessToken'=>config('get_yto_config.token'),
'storehouseCode'=>$send_store,'goodsCode'=>$father_code,
'receiver'=>$address_ren,'receiverPhone'=>$address_hao,
'receiverProvinceName'=>$addrlist[0],'receiverCityName'=>$addrlist[1],
'receiverAreaName'=>$addrlist[2],'receiverAddress'=>$addrlist[3],
'thirdOrderNo'=>$out_order_no,'goodsNum'=>$num,'shipperName'=>$uname
];
//請求接口
$json = sendRequest('',$post_info,'POST');
$return = json_decode($json,1);
$code = $return['code'];
if($code==0){
$return_data = $return['data'];
$taskid = $return_data['recordId'];
//處理成功時的業(yè)務(wù)邏輯
$result = [];
$result[$i] = [
'user_id'=>$uid,
'express_no'=>'0',
'out_order_no'=>$out_order_no,
'expressid'=>$express_id,
'weight'=>$weight,
'price'=>$total_fee,
'num'=>$num,
'goods'=>$id,
'addressee'=>$address_ren,
'a_mphone'=>$address_hao,
'all_address'=>$address_array,
'taskid'=>$taskid,
'sender'=>$store_name,
'tableid' => $uptime,
'from' => 1
];
//更新用戶信息
$retu = model('express')->saveAll($result);
$yu_money = $yu_money-$total_fee;
\app\common\model\User::score($score=0,'-'.$total_fee,$uid,'購買禮品,編號'.$retu[$i]['id']);
$continue_num = $continue_num+1;
}else{
$this->error($return['msg']);
}
break;
case 4:
//接口請求數(shù)據(jù)
$orderParams = [];
$orderParams[0] = [
'apiOrderId'=>$out_order_no,//訂單唯一標識
'buyerName' =>$address_ren,//收件人
'buyerMobile'=>$address_hao,//收件人手機號
'buyerAddr'=>$address_array,//收件地址
'storeType'=>$send_store,//發(fā)貨倉編號
'kuaidiName'=>get_express_name($express_id)
];
$orderParams = json_encode($orderParams);
$post_info = [
'partnerId' =>'',//合作商ID
'itemId' =>$father_code,//韻達禮品對應(yīng)商品編號
'orderParams' =>$orderParams,//訂單信息
'validation' =>md5($father_code.$orderParams.''.'')
];
$json = sendRequest('',$post_info,'post');
$return = json_decode($json,1);
if($return['result']===1){
$return_info = $return['orders'][0];
$out_order_no = $return_info['apiOrderId'];//訂單唯一標識
$express_no = $return_info['expressNo'];//快遞面單號
//處理成功時的業(yè)務(wù)邏輯
$result = [];
$result[$i] = [
'user_id'=>$uid,
'express_no'=>$express_no,
'out_order_no'=>$out_order_no,
'expressid'=>$express_id,
'weight'=>$weight,
'price'=>$total_fee,
'num'=>$num,
'goods'=>$id,
'addressee'=>$address_ren,
'a_mphone'=>$address_hao,
'all_address'=>$address_array,
'sender'=>$store_name,
'tableid' => $uptime,
'from' => 1
];
//更新用戶信息
$retu = model('express')->saveAll($result);
$yu_money = $yu_money-$total_fee;
\app\common\model\User::score($score=0,'-'.$total_fee,$uid,'購買禮品,編號'.$retu[$i]['id']);
$continue_num = $continue_num+1;
}else{
$this->error($return['message']);
}
break;
default:
# code...
break;
}
}
$upinfo=Db::name('upinfo');
$info['user_id'] = $uid;
$info['exnum'] = $allRow-1;//要插入數(shù)據(jù)庫的總記錄數(shù)
$info['oknum'] = $continue_num;//成功插入的數(shù)量
$info['tableid'] = $uptime;//此次任務(wù)的id
$info['expressid'] = $express_id;
$info['vars'] = $leijia=='' ?'全部導(dǎo)入成功':$leijia;
$upinfo->insert($info);
$this->success("發(fā)布成功".($continue_num)."條",url('Express/exlist'));
}
上面是我處理業(yè)務(wù)邏輯的代碼 對方接口一次最多只接受5條數(shù)據(jù)我讀取表格后 通過for循環(huán) 一條一條讀取表格的記錄 在循環(huán)體內(nèi)一次一次請求外部接口 今天有一個客戶上傳的表格太大 導(dǎo)致整個循環(huán)體循環(huán)時間太長 服務(wù)器超時 請問這種問題我改怎么解決 拜托各位大佬幫忙給我個建議
- 3 回答
- 0 關(guān)注
- 851 瀏覽
添加回答
舉報
0/150
提交
取消