'SUCC', 'failed'=>'FAILED', 'cancel'=>'CANCEL', 'lost'=>'LOST', 'progress'=>'PROGRESS', 'timeout'=>'TIMEOUT', 'ready'=>'READY', 'stop'=>'STOP', 'back'=>'BACK', 'verify' => 'VERIFY',//TODO:新增加的校验 ); //货品类型 var $item_type = array( 'product'=>'product', 'gift'=>'gift', 'adjunct'=>'adjunct', 'pkg'=>'pkg' ); //发货类型 var $delivery_type = array( 'Y' => 'delivery_needed', 'N' => 'virtual_goods', ); /** * 添加交易发货单 * @access public * @param int $delivery_id 发货单ID * @return boolean */ public function add($delivery_id){ if(!empty($delivery_id)){ //通过内部会员id找到外部会员id $deliveryObj = app::get('ome')->model('delivery'); $orderObj = app::get('ome')->model('orders'); $shopObj = app::get('ome')->model('shop'); $delivery_orderObj = app::get('ome')->model('delivery_order'); $delivery_detail = $deliveryObj->dump($delivery_id, 'is_bind,parent_id'); $delivery_order = $delivery_orderObj->dump(array('delivery_id'=>$delivery_id)); $order_detail = $orderObj->dump($delivery_order['order_id'], 'ship_status,shop_id,self_delivery,createway'); $shop_detail = $shopObj->dump($order_detail['shop_id'], 'node_type,node_id'); $node_type = $shop_detail['node_type']; //判断是否发起添加发货单请求同步 $is_request = 'true'; if ($delivery_add_service = kernel::service('service.delivery.'.$node_type)){ if (method_exists($delivery_add_service, 'add')){ $delivery_add_data = $delivery_add_service->add($delivery_id, $is_request); } } if ($is_request == 'false'){ return false; } $c2c_shop_list = ome_shop_type::shop_list(); if (in_array($shop_detail['node_type'], $c2c_shop_list)){ //如果是合并的发货单,则向所有合并后的订单发货通知 if($delivery_detail['is_bind']=='true'){ $delivery_order_list = $delivery_orderObj->getList('order_id',array('delivery_id'=>$delivery_id),0,-1); if ($delivery_order_list) { foreach ($delivery_order_list as $k=>$v){ $deliveryorder = $orderObj->dump($v['order_id'],'ship_status,self_delivery,shop_type'); //判断此订单是否是已发货状态 if ($deliveryorder['ship_status']!=1 || ($deliveryorder['self_delivery'] == 'false' && $deliveryorder['shop_type'] == 'amazon') ) continue; $this->_get_shipping_params($delivery_id,$v['order_id'],'',$shop_detail['node_type'],$addon,'normal'); } } }else{ //判断此订单是否是已发货状态 if ($order_detail['ship_status']!=1 || ($order_detail['self_delivery'] == 'false' && $shop_detail['node_type'] == 'amazon') ) return false; $this->_get_shipping_params($delivery_id,'','',$shop_detail['node_type'],$addon,'normal'); } }else{ if( $order_detail['self_delivery'] == 'false' && $shop_detail['node_type'] == 'amazon' ) return false; $this->_get_shipping_params($delivery_id,'',$delivery_detail['parent_id'],$shop_detail['node_type'],$addon,'normal'); } }else{ return false; } } function shipping_add_callback($result){ //更新订单发货成功后的回传时间 $status = $result->get_status(); if ($status == 'succ'){ $oOrder = app::get('ome')->model('orders'); $oApi_log = app::get('ome')->model('api_log'); $callback_params = $result->get_callback_params(); $request_params = $result->get_request_params(); /* $log_id = $callback_params['log_id']; $apilog_detail = $oApi_log->dump(array('log_id'=>$log_id), 'params'); $apilog_detail = unserialize($apilog_detail['params']); $order_bn = $apilog_detail[1]['tid']; $shop_id = $apilog_detail[1]['shop_id']; */ $order_bn = $request_params['tid']; $shop_id = $callback_params['shop_id']; $oOrder->update(array('up_time'=>time()), array('order_bn'=>$order_bn,'shop_id'=>$shop_id)); } $msg = json_decode($result->get_result(), true); if($msg){ $msg = serialize($msg); }else{ $msg = $result->get_result(); } # 返回结果中文提示 $err_msg = $result->get_err_msg(); if ($err_msg) { $msg .= ':'.$err_msg; } $ret = $this->callback($result); //增加订单状态回写 $callback_params = $result->get_callback_params(); $log_id = $callback_params['log_id']; $log = array('log_id' => $log_id, 'status' => $result->get_status(), 'updateTime' => time(), 'message' => $msg); $shipment_log = app::get('ome')->model('shipment_log'); $shipment_log->save($log); $res = $shipment_log->dump(array('log_id' => $log_id), '*'); if ($res) { $orderMdl = app::get('ome')->model('orders'); $order = $orderMdl->dump(array('order_bn' => $res['orderBn'], 'shop_id' => $res['shopId']), '*'); if ($order) { $order_id = $order['order_id']; if (trim($order['sync']) <> 'succ') { $status = $result->get_status(); } else { $status = 'succ'; } $sdf = array('order_id' => $order_id, 'sync' => $status, 'up_time' => time()); //增加同步失败类型 if($status != 'succ') { $sync_code = $result->get_result(); $sync_code = trim($sync_code); switch ($sync_code) { case 'W90010': case 'W90012': $sdf['sync_fail_type'] = 'shipped'; break; case 'W90011': case 'W90013': case 'W90014': $sdf['sync_fail_type'] = 'params'; break; default: $sdf['sync_fail_type'] = 'none'; break; } } $orderMdl->save($sdf); } } return $ret; } /** * 根据店铺类型输入不同的参数 * @access public * @param $delivery_id 发货单BN * @param $shop_type 店铺类型 * @param $order_id 订单ID * @param $parent_id 合并后的发货单ID * @param $delivery_type 发货类型 normal:正常发货, aftersale:售后补差订单发货 * @return boolean */ public function _get_shipping_params($delivery_id='', $order_id='', $parent_id='', $shop_type='',$addon=array(),$delivery_type='normal'){ $orderObj = app::get('ome')->model('orders'); $shopObj = app::get('ome')->model('shop'); $b2b_list = ome_shop_type::b2b_shop_list(); $c2c_shop_list = ome_shop_type::shop_list(); $is_modify_title = false;//是否自定义日志标题 switch ($delivery_type) { case 'aftersale'://暂时只针对C2C店铺做处理 if (!in_array($shop_type, $c2c_shop_list)) { return false; } $orderinfo = $orderObj->dump(array('order_id'=>$order_id),'order_bn,shop_id,is_delivery,mark_text,sync,ship_area,createway'); $shop_id = $orderinfo['shop_id']; $shop_detail = $shopObj->dump($shop_id,'*'); if ($shop_type=='ecos.b2c'){ $consignee_area = $orderinfo['consignee']['area']; }else{ $consignee_area = $shop_detail['area']; } kernel::single('eccommon_regions')->split_area($consignee_area); $receiver_state = ome_func::strip_bom(trim($consignee_area[0])); $receiver_city = ome_func::strip_bom(trim($consignee_area[1])); $receiver_district = ome_func::strip_bom(trim($consignee_area[2])); $dly_detail['type'] = 'OTHER'; $delivery_detail['logi_no'] = $orderinfo['order_bn']; $delivery_detail['logi_name'] = $dly_detail['name'] = '其他物流公司'; $is_modify_title = true; $modify_title = '店铺('.$shop_detail['name'].')添加[交易发货单](补差价订单号:' .$orderinfo['order_bn'].')'; break; default: $deliveryObj = app::get('ome')->model('delivery'); $order_delivery = app::get('ome')->model('delivery_order'); $memberObj = app::get('ome')->model('members'); $dly_corpObj = app::get('ome')->model('dly_corp'); $delivery_detail = $deliveryObj->dump($delivery_id, '*'); if ($parent_id){ $parent_delivery_detail = $deliveryObj->dump(array('delivery_id'=>$parent_id), '*'); $delivery_detail['status'] = $parent_delivery_detail['status']; $delivery_detail['logi_id'] = $parent_delivery_detail['logi_id']; $delivery_detail['logi_name'] = $parent_delivery_detail['logi_name']; $delivery_detail['logi_no'] = $parent_delivery_detail['logi_no']; $delivery_detail['logi_code'] = $parent_delivery_detail['logi_code']; } $ord_delivery_info = $order_delivery->dump(array('delivery_id'=>$delivery_id)); //去除物流单号存在bom字符 $pattrn = chr(239).chr(187).chr(191); $delivery_detail['logi_no'] = str_replace($pattrn, '', $delivery_detail['logi_no']); $delivery_detail['logi_no'] = trim($delivery_detail['logi_no']); if (!$order_id) $order_id = $ord_delivery_info['order_id']; $orderinfo = $orderObj->dump($order_id,'order_bn,shop_id,is_delivery,mark_text,sync,createway'); $shop_id = $orderinfo['shop_id']; $shop_detail = $shopObj->dump($shop_id,'*'); if ($shop_type=='ecos.b2c'){ $consignee_area = $delivery_detail['consignee']['area']; }else{ $consignee_area = $shop_detail['area']; } kernel::single('eccommon_regions')->split_area($consignee_area); $receiver_state = ome_func::strip_bom(trim($consignee_area[0])); $receiver_city = ome_func::strip_bom(trim($consignee_area[1])); $receiver_district = ome_func::strip_bom(trim($consignee_area[2])); // 物流公司信息 $dly_detail = $dly_corpObj->dump(array('corp_id'=>$delivery_detail['logi_id']),'type,name'); $is_normal_product = true; $is_deliveryitem = ome_shop_type::is_shop_deliveryitem($shop_type); #是否需要发货明细 if($is_deliveryitem == 'on'){ $smemberObj = app::get('ome')->model('shop_members'); if($shop_type == 'shopex_b2b'){ #针对B2B 同一货号 前端是普通商品,淘管是捆绑商品 发货处理 #如果存在捆绑商品 发货时取订单obj上的bn 回写前端,但有个缺陷 如果以后出现捆绑商品支持部分发货 就不行了。目前只是临时解决办法 $delivery_items_detailObj = app::get('ome')->model('delivery_items_detail'); $order_objectsObj = app::get('ome')->model('order_objects'); $delivery_items_details = $delivery_items_detailObj->getList('order_id',array('delivery_id'=>$delivery_id),0,1); $order_objects = $order_objectsObj->getList('count(order_id) as _count',array('order_id'=>$delivery_items_details[0]['order_id'],'obj_type'=>'pkg')); if($order_objects[0]['_count'] > 0){ $orders = $order_objectsObj->db->select('select oo.obj_id,oo.quantity as obj_number,oo.bn as obj_bn,oo.name as obj_name,oo.obj_type as obj_type,oi.bn as item_bn,oi.name as item_name,oi.sendnum as item_number from sdb_ome_order_items oi left join sdb_ome_order_objects oo on oi.obj_id = oo.obj_id where oi.delete = "false" and oo.order_id = '.$delivery_items_details[0]['order_id']); $i = 0; $is_pkg = array(); foreach((array)$orders as $k=>$v){ if($v['obj_type'] == 'pkg'){ if(!isset($is_pkg[$v['obj_id']])){ $develiyitems[$i]['number'] = $v['obj_number']; $develiyitems[$i]['name'] = trim($v['obj_name']); $develiyitems[$i]['bn'] = trim($v['obj_bn']); $is_pkg[$v['obj_id']] = true; $i++; } }else{ $develiyitems[$i]['number'] = $v['item_number']; $develiyitems[$i]['name'] = trim($v['item_name']); $develiyitems[$i]['bn'] = trim($v['item_bn']); $i++; } } unset($is_pkg); $is_normal_product = false; } } if($is_normal_product){ $delivery_itemsObj = app::get('ome')->model('delivery_items'); $develiyitems = $delivery_itemsObj->getList('product_name as name,bn,number',array("delivery_id"=>$delivery_id),0,-1); //$develiyitems['sku_type'] = 'goods'; // 过滤发货单明细中的空格 foreach((array)$develiyitems as $k=>$v){ foreach($v as $kk=>$vv){ $v[$kk] = trim($vv); } $develiyitems[$k] = $v; } } $memberinfo = $memberObj->dump($delivery_detail['member_id'],'uname,name'); if ($delivery_detail['last_modified']){ $modify = $delivery_detail['last_modified']; }else{ $modify = time(); } } break; } //平台获取的订单如果回写时店铺解绑,直接将订单设为回写失败 if(!$shop_detail['node_id'] && $orderinfo['createway']=='matrix'){ $orderObj->update(array('sync'=>'fail','sync_fail_type'=>'unbind','up_time' => time()), array('order_id'=>$order_id)); } switch ($shop_type){ case 'shopex_b2b'://分销王b2b case 'shopex_b2c'://485 case 'ecos.b2c'://ec store case 'ecos.dzg'://店掌柜 $params = array( 'tid' => $orderinfo['order_bn'], 'shop_id' => $shop_id, 'shipping_fee' => $delivery_detail['delivery_cost_actual'] ? $delivery_detail['delivery_cost_actual'] :'', 'shipping_id' => $delivery_detail['delivery_bn'], 'create_time' => date("Y-m-d H:i:s",$delivery_detail['create_time']), 'is_protect' => $delivery_detail['is_protect'], 'is_cod' => $delivery_detail['is_cod'], 'buyer_id' => $memberinfo['account']['uname'], 'status' => $this->ship_status[$delivery_detail['status']], 'shipping_type' => $delivery_detail['delivery'] ? $delivery_detail['delivery'] : '', 'logistics_id' => $delivery_detail['logi_id'] ? $delivery_detail['logi_id'] : '', 'logistics_company' => $delivery_detail['logi_name'] ? $delivery_detail['logi_name'] : '', 'logistics_no' => $delivery_detail['logi_no'] ? $delivery_detail['logi_no'] : '', 'logistics_code' => $dly_detail['type'], 'receiver_name' => $delivery_detail['consignee']['name'] ? $delivery_detail['consignee']['name'] : '', 'receiver_state' => $receiver_state ? $receiver_state : '', 'receiver_city' => $receiver_city ? $receiver_city : '', 'receiver_district' => $receiver_district ? $receiver_district : '', 'receiver_address' => $delivery_detail['consignee']['addr'] ? $delivery_detail['consignee']['addr'] :'', 'receiver_zip' => $delivery_detail['consignee']['zip']?$delivery_detail['consignee']['zip']:'', 'receiver_email' => $delivery_detail['consignee']['email']?$delivery_detail['consignee']['email']:'', 'receiver_mobile' => $delivery_detail['consignee']['mobile']?$delivery_detail['consignee']['mobile']:'', 'receiver_phone' => $delivery_detail['consignee']['telephone']?$delivery_detail['consignee']['telephone']:'', 'memo' => $delivery_detail['memo']?$delivery_detail['memo']:'', 't_begin' => date("Y-m-d H:i:s",$delivery_detail['create_time']), 'refund_operator' => kernel::single('desktop_user')->get_login_name(), 'shipping_items' => json_encode($develiyitems), 'ship_type' => 'delivery', 'modify' => date('Y-m-d H:i:s',$delivery_detail['last_modified']), ); if($shop_type == 'shopex_b2b'){ $params['t_begin'] = $params['t_end'] = $params['modify'] = date('Y-m-d H:i:s',$delivery_detail['last_modified']); } if ( (!trim($delivery_detail['logi_no']) && !$parent_id) || in_array($shop_type, $b2b_list)){ $api_name = 'store.trade.shipping.add'; } else{ //更新物流信息 foreach(kernel::servicelist('service.delivery') as $object=>$instance){ if(method_exists($instance,'update_logistics_info')){ $instance->update_logistics_info($delivery_id, $parent_id, true); } } return false; } break; case 'paipai'://拍拍 //订单备注 $oldmemo = unserialize($orderinfo['mark_text']); if ($oldmemo) foreach($oldmemo as $k=>$v){ $memo = $v['op_content']."
"; } if ($receiver_district){ $receiver_district = '_'.$receiver_district; } $params = array( 'tid' => $orderinfo['order_bn'], 'shop_id' => $shop_id, 'send_type' => $this->delivery_type[$orderinfo['is_delivery']], 'logistics_code' => trim($dly_detail['type']), 'logistics_company' => $dly_detail['name']?$dly_detail['name']:'', 'logistics_no' => $delivery_detail['logi_no'] ? $delivery_detail['logi_no'] : '', 'seller_name' => $shop_detail['default_sender'] ? $shop_detail['default_sender'] : '', 'seller_area_id' => $receiver_state.'_'.$receiver_city.$receiver_district, 'seller_address' => $shop_detail['addr'] ? $shop_detail['addr'] : '', 'seller_zip' => $shop_detail['zip'] ? $shop_detail['zip'] : '', 'seller_mobile' => $shop_detail['mobile'] ? $shop_detail['mobile'] : '', 'seller_phone' => $shop_detail['tel'] ? $shop_detail['tel'] : '', 'memo' => $memo ? $memo : '', ); $api_name = 'store.trade.delivery.send'; break; case 'qq_buy'://qq网购 #发货 $params = array( 'tid' => $orderinfo['order_bn'], 'company_code' => $dly_detail['type'], 'company_name' => $delivery_detail['logi_name'] ? $delivery_detail['logi_name'] : '', 'logistics_no' => $delivery_detail['logi_no'] ? $delivery_detail['logi_no'] : '', 'send_type' => $dly_detail['type'] == 'EMS' ? 3 : 1, ); $api_name = 'store.logistics.offline.send'; break; case 'youa'://有啊 case 'taobao'://淘宝 $params = array( 'tid' => $orderinfo['order_bn'], 'company_code' => trim($dly_detail['type']), 'logistics_no' => $delivery_detail['logi_no'] ? $delivery_detail['logi_no'] : '', ); //$api_name = 'store.logistics.offline.send'; if(((app::get('ome')->getConf('ome.delivery.method'))=='on')&&($orderinfo['sync']=='none')){ $api_name = 'store.logistics.online.send'; }else{ if($delivery_detail['is_cod'] == 'true'){ $api_name = 'store.logistics.online.send'; }else{ $api_name = 'store.logistics.offline.send'; } } break; case 'yintai': $params = array( 'tid' => $orderinfo['order_bn'], 'company_name' => $delivery_detail['logi_name'] ? $delivery_detail['logi_name'] : '', 'company_code' => trim($dly_detail['type']), 'logistics_no' => $delivery_detail['logi_no'] ? $delivery_detail['logi_no'] : '', ); $api_name = 'store.logistics.offline.send'; break; case '360buy'://京东 #发货 $params = array( 'tid' => $orderinfo['order_bn'], //'shop_id' => $shop_id, 'company_code' => $dly_detail['type'], 'company_name' => $delivery_detail['logi_name'] ? $delivery_detail['logi_name'] : '', 'logistics_no' => $delivery_detail['logi_no'] ? $delivery_detail['logi_no'] : '', ); $api_name = 'store.logistics.offline.send'; //$this->deliveryGoods($delivery_id, $order_id); break; case 'yihaodian': //订单备注 $oldmemo = unserialize($orderinfo['mark_text']); if ($oldmemo) foreach($oldmemo as $k=>$v){ $memo = $v['op_content']."
"; } if ($receiver_district){ $receiver_district = '_'.$receiver_district; } $params = array( 'tid' => $orderinfo['order_bn'], //'shop_id' => $shop_id, 'company_code' => $dly_detail['type'], 'logistics_company' => $delivery_detail['logi_name'] ? $delivery_detail['logi_name'] : '', 'logistics_no' => $delivery_detail['logi_no'] ? $delivery_detail['logi_no'] : '', ); $api_name = 'store.logistics.offline.send'; break; case 'dangdang': $item_list = array(); $Oorder_items = app::get('ome')->model('order_items'); $orderitems = $Oorder_items->getList('shop_goods_id,bn',array('order_id'=>$order_id)); foreach ($orderitems as $v) { $orderitem[$v['bn']] = $v['shop_goods_id']; } foreach ($develiyitems as $k=>$v) { $item_list[$k]['oid'] = $orderinfo['order_bn']; $item_list[$k]['itemId'] = $orderitem[$v['bn']];//取order_items上的商品ID $item_list[$k]['num'] = $v['number']; } $params = array( 'tid' => $orderinfo['order_bn'], 'logisticstel' => '13612345678',//物流电话 - 当当物流电话固定写死 'company_name' => $delivery_detail['logi_name'] ? $delivery_detail['logi_name'] : '',//物流公司 'logistics_no' => $delivery_detail['logi_no'] ? $delivery_detail['logi_no'] : '',//物流单号 'ship_date' => date('Y-m-d H:i:s',$delivery_detail['last_modified']),//发货时间 'item_list' => json_encode($item_list),//发货明细 ); $api_name = 'store.logistics.offline.send'; break; case 'amazon': $item_list = array(); $Oorder_items = app::get('ome')->model('order_items'); $orderitems = $Oorder_items->getList('shop_goods_id,bn',array('order_id'=>$order_id)); foreach ($orderitems as $v) { $orderitem[$v['bn']] = $v['shop_goods_id']; } foreach ($develiyitems as $k=>$v) { $item_list[$k]['oid'] = $orderinfo['order_bn']; $item_list[$k]['itemId'] = $orderitem[$v['bn']];//取order_items上的商品ID $item_list[$k]['num'] = $v['number']; } $params = array( 'tid' => $orderinfo['order_bn'], 'company_code' => $dly_detail['type'], 'logistics_company' => $delivery_detail['logi_name'] ? $delivery_detail['logi_name'] : '', 'logistics_no' => $delivery_detail['logi_no'] ? $delivery_detail['logi_no'] : '', 'item_list' => json_encode($item_list),//发货明细 ); $api_name = 'store.logistics.offline.send'; break; } if($shop_id){ $shop_info = $shopObj->dump($shop_id,'name'); if ($is_modify_title) { $title = $modify_title; }else{ $title = '店铺('.$shop_info['name'].')添加[交易发货单](订单号:' .$orderinfo['order_bn'].',发货单号:'.$delivery_detail['delivery_bn'].')'; } }else{ return false; } $opInfo = kernel::single('ome_func')->getDesktopUser(); //增加更新发货状态日志 $log = array( 'shopId' => $shop_id, 'ownerId' => $opInfo['op_id'], 'orderBn' => $orderinfo['order_bn'], 'deliveryCode' => $delivery_detail['logi_no'], 'deliveryCropCode' => $dly_detail['type'], 'deliveryCropName' => $delivery_detail['logi_name'], 'receiveTime' => time(), 'status' => 'send', 'updateTime' => '0', 'message' => ''); if ($shop_type == '360buy') { if ($is_modify_title) { $title = $modify_title; }else{ $title = '店铺('.$shop_info['name'].')[京东360BUY]添加[交易发货单](订单号:' .$orderinfo['order_bn'].',发货单号:'.$delivery_detail['delivery_bn'].')'; } //京东临时使用实时接口 $result = kernel::single('ome_rpc_request')->call($api_name, $params, $shop_id); //接口日志生成 $oApi_log = app::get('ome')->model('api_log'); $log_id = $oApi_log->gen_id(); $callback = array( 'class' => 'ome_rpc_request_shipping', 'method' => 'add', '2' => array( 'log_id' => $log_id, 'shop_id' => $shop_id, ), ); $oApi_log->write_log($log_id,$title,'ome_rpc_request','rpc_request',array($api_name, $params, $callback),'','request','running','','','api.store.trade.delivery',$orderinfo['order_bn']); if($result){ if($result->rsp == 'succ'){ //发货日志记录 $log['status'] = 'succ'; $log['updateTime'] = time(); $log['message'] = $result->data; //api日志记录 $api_status = 'success'; $msg = '发货成功
'; $oApi_log->update(array('msg_id'=>$result->msg_id,'msg'=>$msg,'status'=>$api_status),array('log_id'=>$log_id)); //订单回写状态 $status = 'succ'; }elseif($result->rsp == 'fail'){ if($result->res =='w06105'){ //发货日志记录 $log['status'] = 'succ'; $log['updateTime'] = time(); $log['message'] = ''; //api日志记录 $api_status = 'success'; $msg = '发货成功('.$this->jdErrorMsg($result->res).')
'; $oApi_log->update(array('msg_id'=>$result->msg_id,'msg'=>$msg,'status'=>$api_status),array('log_id'=>$log_id)); //订单回写状态 $status = 'succ'; }else{ //发货日志记录 $log['status'] = 'fail'; $log['updateTime'] = time(); $log['message'] = $result->data; //api日志记录 $api_status = 'fail'; $err_msg = $result->err_msg ? $result->err_msg : $this->jdErrorMsg($result->res); $msg = '发货失败('.$err_msg.')
'; $oApi_log->update(array('msg_id'=>$result->msg_id,'msg'=>$msg,'status'=>$api_status),array('log_id'=>$log_id)); //订单回写状态 $status = 'fail'; } } }else{ return false; } } else { $callback = array( 'class' => 'ome_rpc_request_shipping', 'method' => 'shipping_add_callback', ); $addon['bn'] = $delivery_detail['delivery_bn']; $log_id = $this->request($api_name,$params,$callback,$title,$shop_id,10,false,$addon); if (empty($log_id) || $log_id['rsp'] == 'fail') { return ; } $status = 'run'; } $log['log_id'] = $log_id; //保存日志 $shipment_log = app::get('ome')->model('shipment_log'); $result = $shipment_log->save($log); //更新订单状态 $sdf = array('order_id'=>$order_id, 'sync' => $status); app::get('ome')->model('orders')->save($sdf); } /** * 更新交易发货状态 * 注意:发货单打回也需要更新状态 * @param $delivery_id * @param $status * @param boolean $queue true:进队列 false:立即发起 */ function status_update($delivery_id,$status='',$queue=false){ if(!empty($delivery_id)){ $deliveryObj = app::get('ome')->model('delivery'); $delivery_oObj = app::get('ome')->model('delivery_order'); $orderObj = app::get('ome')->model('orders'); $delivery_detail = $deliveryObj->dump(array('delivery_id'=>$delivery_id), 'delivery_bn,shop_id,is_bind,status,parent_id'); if($delivery_detail['is_bind'] == 'true'){ $delivery_ids = $deliveryObj->getItemsByParentId($delivery_id,'array'); if ($delivery_ids) foreach($delivery_ids as $v){ $this->status_update($v); } }else{ $dlyOrder = $delivery_oObj->dump(array('delivery_id'=>$delivery_id), 'order_id'); $order = $orderObj->dump($dlyOrder['order_id'], 'order_bn'); if (!$status){ //如果是合并后的发货单,发货单状态为合并后的发货单状态 if($delivery_detail['parent_id']>0) { $parent_delivery_detail = $deliveryObj->dump(array('delivery_id'=>$delivery_detail['parent_id']), 'status'); $delivery_detail['status'] = $parent_delivery_detail['status']; } }else{ $delivery_detail['status'] = $status; } $params['tid'] = $order['order_bn']; $params['shipping_id'] = $delivery_detail['delivery_bn']; $params['status'] = $this->ship_status[$delivery_detail['status']]; $callback = array( 'class' => 'ome_rpc_request_shipping', 'method' => 'shipping_status_update_callback', ); $shop_id = $delivery_detail['shop_id']; if($shop_id){ $shop_info = app::get('ome')->model('shop')->dump($shop_id,'name'); $title = '店铺('.$shop_info['name'].')更新交易发货单状态['.$params['status'].'],订单号:'.$order['order_bn'].'发货单号:'.$delivery_detail['delivery_bn'].')'; }else{ return false; } $api_name = 'store.trade.shipping.status.update'; if ($params['status']){ $addon['bn'] = $delivery_detail['delivery_bn']; $this->request($api_name,$params,$callback,$title,$shop_id,10,false,$addon); } } }else{ return false; } } function shipping_status_update_callback($result){ return $this->callback($result); } /** * 更改发货物流信息 * @access public * @param int $delivery_id 发货单主键ID * @param int $parent_id 支付单主键ID * @param boolean $queue true:进队列 false:立即发起 * @return boolean */ public function logistics_update($delivery_id,$parent_id='',$queue=false){ if(!empty($delivery_id)){ $deliveryObj = app::get('ome')->model('delivery'); $delivery_oObj = app::get('ome')->model('delivery_order'); $orderObj = app::get('ome')->model('orders'); $shopObj = app::get('ome')->model('shop'); $dly_corpObj = app::get('ome')->model('dly_corp'); $delivery_detail = $deliveryObj->dump(array('delivery_id'=>$delivery_id), '*'); //如果发现当前请求是合并后的发货单编辑详情后触发的,直接返回,因为前端没有合并后的发货单。 if($delivery_detail['is_bind'] == 'true'){ return false; } $dlyOrder = $delivery_oObj->dump(array('delivery_id'=>$delivery_id)); $order = $orderObj->dump($dlyOrder['order_id'], 'order_bn'); $params['tid'] = $order['order_bn']; $params['shipping_id'] = $delivery_detail['delivery_bn']; $parent_id = $delivery_detail['parent_id']; //如果是合并后的发货单,发货单状态为合并后的发货单状态 if($parent_id>0) { $parent_delivery_detail = $deliveryObj->dump(array('delivery_id'=>$parent_id), 'logi_name,logi_no,logi_id'); $delivery_detail['logi_name'] = $parent_delivery_detail['logi_name']; $delivery_detail['logi_no'] = $parent_delivery_detail['logi_no']; $delivery_detail['logi_id'] = $parent_delivery_detail['logi_id']; } // 物流公司信息 $dly_detail = $dly_corpObj->dump(array('corp_id'=>$delivery_detail['logi_id']),'type,name'); $params['logistics_code'] = $dly_detail['type']?$dly_detail['type']:''; $params['logistics_company'] = $delivery_detail['logi_name']?$delivery_detail['logi_name']:''; $params['logistics_no'] = $delivery_detail['logi_no']?$delivery_detail['logi_no']:''; $callback = array( 'class' => 'ome_rpc_request_shipping', 'method' => 'logistics_update_callback', ); $shop_id = $delivery_detail['shop_id']; //排除发送给网店端 $shop_detail = $shopObj->dump($shop_id, 'node_type'); $foreground_shop_list = ome_shop_type::shop_list(); if (in_array($shop_detail['node_type'],$foreground_shop_list)) return false; if($shop_id){ $shop_info = app::get('ome')->model('shop')->dump($shop_id,'name'); $title = '店铺('.$shop_info['name'].')更改[发货物流信息](订单号:'.$order['order_bn'].',物流单号:'.$params['logistics_no'].',发货单号:'.$delivery_detail['delivery_bn'].')'; }else{ return false; } $addon['bn'] = $delivery_detail['delivery_bn']; $this->request('store.trade.shipping.update',$params,$callback,$title,$shop_id,10,false,$addon); }else{ return false; } } function logistics_update_callback($result){ // 更新运单号 //$oApi_log = app::get('ome')->model('api_log'); $callback_params = $result->get_callback_params(); $request_params = $result->get_request_params(); //$log_id = $callback_params['log_id']; //$apilog_detail = $oApi_log->dump(array('log_id'=>$log_id), 'params'); //$apilog_detail = unserialize($apilog_detail['params']); //$apilog_detail = $request_params; $order_bn = $request_params['tid']; $shop_id = $callback_params['shop_id']; $shipment_log = app::get('ome')->model('shipment_log'); $filter = array( 'shopId' => $shop_id, 'orderBn' => $order_bn, ); $data = array( 'deliveryCode' => $request_params['logistics_no'], 'deliveryCropName' => $request_params['logistics_company'], 'deliveryCropCode' => $request_params['logistics_code'], ); $shipment_log->update($data,$filter); return $this->callback($result); } /** * @根据矩阵返回的错误码,表述具体京东请求的返回消息内容 * @access public * @param void * @return void */ public function jdErrorMsg($code) { $errormsgs = array( 'w06000'=>'成功', 'w06001'=>'其他', 'w06101'=>'已经出库', 'w06102'=>'出库订单不存在或已被删除', 'w06104'=>'订单状态不为等待发货', 'w06105'=>'订单已经发货', 'w06106'=>'正在出库中', ); return isset($errormsgs[$code]) ? $errormsgs[$code] : '其他'; } }