* @version $Id: Z */ class erpapi_shop_response_qianniu extends erpapi_shop_response_abstract { /** * ERP订单 * * @var string * */ public $_order_detail= array(); /** * 订单接收格式 * * @var string * */ public $_qnordersdf = array(); /** * 改地址消息 * @var array */ public $_notifysdf = array(); /** * 是否接收订单 * * @return void * @author * */ protected function _canModify() { $orderModel = app::get('ome')->model('orders'); $filter = array('order_bn'=>$this->_qnordersdf['bizOrderId'],'shop_id'=>$this->__channelObj->channel['shop_id']); $this->_order_detail = $orderModel->dump($filter,'*',array("order_objects"=>array("*",array("order_items"=>array('*'))))); if (!$this->_order_detail){ $shopId = $this->__channelObj->channel['shop_id']; $orderRsp = kernel::single('erpapi_router_request')->set('shop',$shopId)->order_get_order_detial($this->_qnordersdf['bizOrderId']); if ($orderRsp['rsp'] == 'succ') { $msg = ''; $rs = kernel::single('ome_syncorder')->get_order_log($orderRsp['data']['trade'],$shopId,$msg); if ($rs) { $this->_order_detail = $orderModel->dump($filter,'*',array("order_objects"=>array("*",array("order_items"=>array('*'))))); } } if(!$this->_order_detail) { return true; } } //只针对未发货 部分发货也不可以修改 if (!in_array($this->_order_detail['status'],array('active')) || !in_array($this->_order_detail['ship_status'],array('0')) || !in_array($this->_order_detail['process_status'],array('unconfirmed','confirmed','splitting','splited'))){ $this->__apilog['result']['msg'] = '对应状态不可以 编辑订单'; $this->__apilog['result']['msg_code'] = '200006'; return false; } return true; } protected function _formatSdf(){} /** * 添加ress_modify * @param mixed $sdf sdf * @return mixed 返回值 */ public function address_modify($sdf) { $this->_qnordersdf = $sdf; $this->__apilog['result']['data'] = array('tid'=>$this->_qnordersdf['bizOrderId']); $this->__apilog['original_bn'] = $this->_qnordersdf['bizOrderId']; $this->__apilog['title'] = '千牛/平台修改订单地址['.$this->_qnordersdf['bizOrderId'].']'; $this->_order_detail=array(); $accept = $this->_canModify(); //本地作配置开启判断 if ($accept === false) { return array(); } $this->_formatSdf(); if (!$this->_qnordersdf['consignee']){ $this->__apilog['result']['msg'] = '地区格式有误'; $this->__apilog['result']['msg_code'] = '100002'; return array(); } //地址是否发生变化 $oldconsignee = array( 'name' => $this->_order_detail['consignee']['name'], 'area' => $this->_order_detail['consignee']['area'], 'addr' => $this->_order_detail['consignee']['addr'], 'zip' => $this->_order_detail['consignee']['zip'], 'mobile' => $this->_order_detail['consignee']['mobile'], ); $newconsignee = $this->_qnordersdf['consignee']; $diff_consignee = array_diff_assoc($newconsignee,$oldconsignee); if (!$diff_consignee){ $this->__apilog['result']['msg'] = '地址没有变化'; return array(); } $new_order = array(); $new_order['order_id'] = $this->_order_detail['order_id']; $new_order['consignee'] = $newconsignee; //暂停成功 $new_order['confirm'] = 'N'; $new_order['process_status'] = 'unconfirmed'; $new_order['pause'] = 'false'; $convert_order = array( 'new_order' => $new_order, 'order_detail' => $this->_order_detail, ); return $convert_order; } protected function _formatModifysku($sdf) { $params = [ 'order_bn' => $sdf['bizOrderId'], 'old_sale_bn' => $sdf['oldOuterId'] ? : $sdf['outer_sku_id_from'], 'sale_bn' => $sdf['outerId'] ? : $sdf['outer_sku_id_to'], ]; return $params; } /** * 换货 sku * @param $sdf */ public function modifysku($sdf) { $orders_obj = app::get('ome')->model('orders'); $order_objects_obj = app::get('ome')->model('order_objects'); $delivery_order_obj = app::get('ome')->model('delivery_order'); $delivery_obj = app::get('ome')->model('delivery'); $shop_obj = app::get('ome')->model('shop'); $ome_branch_product = app::get('ome')->model('branch_product'); $basic_material_obj = app::get('material')->model('basic_material'); $sales_material_obj = app::get('material')->model('sales_material'); $material_sales_basic_material_obj = app::get('material')->model('sales_basic_material'); $basicMStockFreezeLib = kernel::single('material_basic_material_stock_freeze'); $sdf = $this->_formatModifysku($sdf); $order_filter = array('order_bn'=>$sdf['order_bn'],'shop_id'=>$this->__channelObj->channel['shop_id']); $this->__apilog['original_bn'] = $sdf['order_bn']; $this->__apilog['title'] = '更换sku校验'; $orders_info = $orders_obj->dump($order_filter); if (!$orders_info) { //如果没有找到,先去拉取订单 $shopId = $this->__channelObj->channel['shop_id']; $orderRsp = kernel::single('erpapi_router_request')->set('shop', $shopId)->order_get_order_detial($sdf['order_bn']); if ($orderRsp['rsp'] == 'succ') { $msg = ''; $rs = kernel::single('ome_syncorder')->get_order_log($orderRsp['data']['trade'], $shopId, $msg); if ($rs) { $orders_info = $orders_obj->dump($order_filter, '*'); } } if (!$orders_info) { $this->__apilog['result']['msg'] = '订单不存在'; $this->__apilog['result']['msg_code'] = '2001'; return false; } } if($orders_info['is_modify'] == 'true') { $this->__apilog['result']['msg'] = '订单已被修改'; $this->__apilog['result']['msg_code'] = '3003'; return false; } //获得店铺对应的仓库的库存 $shop_info = $shop_obj->dump(['shop_id' => $orders_info['shop_id']]); $shop_bn = $shop_info['shop_bn']; $branches = app::get('ome')->getConf('shop.branch.relationship'); $shop_branch = $branches[$shop_bn]; $skuId = $sdf['sale_bn']; $sales_material_info = $sales_material_obj->dump(['sales_material_bn'=>$skuId],'sm_id'); if(!$sales_material_info) { $this->__apilog['result']['msg'] = '没有找到对应销售物料!'; $this->__apilog['result']['msg_code'] = '3003'; return false; } $sm_id = $sales_material_info['sm_id']; $sales_basic_material_info = $material_sales_basic_material_obj->getList('*', ['sm_id'=>$sm_id]); if(!$sales_basic_material_info){ $this->__apilog['result']['msg'] = '没有找到对应基础物料!'; $this->__apilog['result']['msg_code'] = '3003'; return false; } $bm_id = array_column($sales_basic_material_info, 'bm_id'); $shop_branch_ids = array_keys($shop_branch); $branch_product = $ome_branch_product->getList('product_id,store_freeze,store', ['product_id' => $bm_id, 'branch_id' => $shop_branch_ids]); $sum_store = []; foreach($branch_product as $bp) { $sum_store[$bp['product_id']] += $bp['store'] - $bp['store_freeze']; } $salesBasic = array_column($sales_basic_material_info, null, 'bm_id'); foreach($sum_store as $bmId => $num) { $sum_store[$bmId] = bcdiv($num, $salesBasic[$bmId]['number'], 1); } $minStore = min($sum_store); //订单商品表里购买的数量 $order_objects_info = $order_objects_obj->dump(['bn' => $sdf['old_sale_bn'], 'order_id'=>$orders_info['order_id'], 'shop_goods_id|noequal'=>'-1'], 'goods_id,quantity'); if (!$order_objects_info) { $this->__apilog['result']['msg'] = '订单对应的销售物料不存在'; $this->__apilog['result']['msg_code'] = '2001'; return false; } if ($minStore < $order_objects_info['quantity']) { $this->__apilog['result']['msg'] = '库存不足'; $this->__apilog['result']['msg_code'] = '1030'; return false; } if($orders_info['ship_status'] != 0) { $this->__apilog['result']['msg'] = '订单已发货或者已退货无法修改sku'; $this->__apilog['result']['msg_code'] = '1015'; return false; } if(in_array($orders_info['pay_status'],[4,5,6,7])) { $this->__apilog['result']['msg'] = '退款或者退款中无法修改sku'; $this->__apilog['result']['msg_code'] = '1015'; return false; } //查看发货单状态 $delivery_ids = $delivery_obj->getDeliverIdByOrderId($orders_info['order_id'], true); //如有有发货单 foreach ($delivery_ids as $delivery_id) { $delivery_info = $delivery_obj->dump(['delivery_id' => $delivery_id]); //取消发货单 if (in_array($delivery_info['status'], ['ready', 'progress']) && ( $delivery_info['is_bind'] == 'true' || $delivery_info['parent_id'] == 0 )) { $memo = 'sku换货取消发货单'; $result = $delivery_obj->rebackDelivery($delivery_id, $memo); if (!$result) { $this->__apilog['result']['msg'] = '撤销发货单失败'; $this->__apilog['result']['msg_code'] = '3003'; return false; } if ($delivery_info['is_bind'] == 'true') { $child_ids = $delivery_obj->getItemsByParentId($delivery_id, 'array'); foreach($child_ids as $id){ $delivery_obj->rebackDelivery($id, '合并发货单叫回'); } } } } $params = [ 'order_id' => $orders_info['order_id'], 'old_sale_bn' => $sdf['old_sale_bn'], 'sale_bn' => $sdf['sale_bn'], ]; return $params; } /** * order_addr_modify * @param mixed $sdf sdf * @return mixed 返回值 */ public function order_addr_modify($sdf) { $this->_notifysdf = $sdf; $this->__apilog['result']['data'] = array('tid' => $this->_notifysdf['orderId']); $this->__apilog['original_bn'] = $this->_notifysdf['orderId']; $this->__apilog['title'] = '平台修改订单地址[' . $this->_notifysdf['orderId'] . ']'; $convert_order = array( 'order_bn' => $this->_notifysdf['orderId'], 'shop_id' => $this->__channelObj->channel['shop_id'], ); return $convert_order; } }