* @version $Id: Z */ class erpapi_wms_response_process_reship { /** * @param Array $params=array( * 'status'=>@状态@ PARTIN|FINISH|DENY|CLOSE|FAILED|ACCEPT * 'reship_bn'=>@退货单号@ * 'items'=>array( * 'bn'=>@货号@ * 'normal_num"=>@良品@ * 'defective_num'=>@不良品@ * ) * ) * * @return void * @author **/ public function status_update($params) { if($params['act'] == 'lanjiereship'){ $result = $this->lanjieReship($params); return $result; } $result = kernel::single('console_event_receive_iostock')->reship_result($params); // 报警 if($result['rsp'] == 'fail' && $params['status'] == 'FINISH') { kernel::single('monitor_event_notify')->addNotify('wms_reship_finish', [ 'reship_bn' => $params['reship_bn'], 'errmsg' => $result['msg'], ]); } return $result; } public function add_complete($params) { $orderBn = array(); $bn = array(); $bnProduct = array(); $bnProductCC = array(); foreach ($params['items'] as $val) { $bnProduct[$val['order_bn'] . '|' . $val['bn']] += $val['num']; $bnProductCC[$val['order_bn'] . '|' . $val['bn']] += $val['ccnum']; $orderBn[] = $val['order_bn']; $bn[] = $val['bn']; } $orderObj = app::get('ome')->model('orders'); $field = 'order_id,order_bn,status,process_status,ship_status,pay_status,shop_id,member_id,logi_id,logi_no,ship_name,ship_area,ship_addr,ship_zip,ship_tel,ship_email,ship_mobile,order_bool_type,order_type'; $orderList = $orderObj->getList($field, array('order_bn' => $orderBn)); if (empty($orderList)) { return array('rsp' => 'fail', 'msg' => '没有该订单' . $params['items'][0]['order_bn']); } $orderData = array(); $strReshipBn = $params['reship_bn'] . '_' . $params['branch']['branch_id'] . '_'; $arrReshipBn = array(); foreach ($orderList as $val) { $orderData[$val['order_id']] = $val; $arrReshipBn[] = $strReshipBn . $val['order_id']; } $modelReship = app::get('ome')->model('reship'); $oldReship = $modelReship->getList('order_id', array('reship_bn' => $arrReshipBn)); foreach ($oldReship as $val) { if ($orderData[$val['order_id']]) { unset($orderData[$val['order_id']]); } } if (empty($orderData)) { return array('rsp' => 'fail', 'msg' => '该退货单已经生成' . $params['reship_bn']); } $itemFilter = array('order_id' => array_keys($orderData), 'bn' => $bn, 'delete' => 'false'); $orderItems = app::get('ome')->model('order_items')->getList('*', $itemFilter); $orderBnItems = []; foreach ($orderItems as $val) { $orderBnItems[$val['order_id'] . '|' . $val['bn']]['order_id'] = $val['order_id']; $orderBnItems[$val['order_id'] . '|' . $val['bn']]['product_id'] = $val['product_id']; $orderBnItems[$val['order_id'] . '|' . $val['bn']]['item_id'] = $val['item_id']; $orderBnItems[$val['order_id'] . '|' . $val['bn']]['bn'] = $val['bn']; $orderBnItems[$val['order_id'] . '|' . $val['bn']]['name'] = $val['name']; $orderBnItems[$val['order_id'] . '|' . $val['bn']]['sendnum'] += $val['sendnum']; $orderBnItems[$val['order_id'] . '|' . $val['bn']]['return_num'] += $val['return_num']; } $items = array(); foreach ($orderBnItems as $val) { $key = $orderData[$val['order_id']]['order_bn'] . '|' . $val['bn']; $val['number'] = ($bnProduct ? $bnProduct[$key] : 1); $val['defective_num'] = ($bnProductCC ? $bnProductCC[$key] : 0); if ($val['number'] > ($val['sendnum'] - $val['return_num'])) { return array('rsp' => 'fail', 'msg' => $val['bn'] . '超过发货数量'); } $items[$val['order_id']][] = $val; } if (empty($items)) { return array('rsp' => 'fail', 'msg' => '没有找到退货的明细'); } $msg = ''; foreach ($items as $orderId => $val) { $rs = $this->dealOneReship($val, $orderData[$orderId], $params); $msg .= '订单' . $orderData[$orderId]['order_bn'] . '退货单处理:' . $rs['msg'] . '
'; } return array('rsp' => 'succ', 'msg' => $msg); } /** * 生成退货单,款和货分开,款在平台退同步到ERP * @param array $items 明细 * @param array $tgOrder 订单 * @param array $params api传参 * @return array [description] */ private function dealOneReship($items, $tgOrder, $params) { $opInfo = kernel::single('ome_func')->get_system(); $insertData = array( 'reship_bn' => $params['reship_bn'] . '_' . $params['branch']['branch_id'] . '_' . $tgOrder['order_id'], 'shop_id' => $tgOrder['shop_id'], 'order_id' => $tgOrder['order_id'], 'member_id' => $tgOrder['member_id'], 'logi_name' => $tgOrder['logi_name'], 'logi_no' => $tgOrder['logi_no'], 'logi_id' => $tgOrder['logi_id'], 'ship_name' => $tgOrder['ship_name'], 'ship_area' => $tgOrder['ship_area'], 'delivery' => $tgOrder['shipping'], 'ship_addr' => $tgOrder['ship_addr'], 'ship_zip' => $tgOrder['ship_zip'], 'ship_tel' => $tgOrder['ship_tel'], 'ship_email' => $tgOrder['ship_email'], 'ship_mobile' => $tgOrder['ship_mobile'], 'is_protect' => $tgOrder['is_protect'], 'branch_id' => $params['branch']['branch_id'], 'return_logi_name' => $params['logi_name'], 'return_logi_no' => $params['logi_no'], 'outer_lastmodify' => strtotime($params['operate_time']), 'source' => 'matrix', 't_begin' => time(), 'op_id' => $opInfo['op_id'], 'is_check' => '1', ); if($params['flag_type']){ $insertData['flag_type'] = $params['flag_type']; $insertData['reship_bn'] = $params['reship_bn']; } $shop_info = app::get('ome')->model('shop')->getShopInfo($insertData['shop_id']); // 经销店铺的单据,delivery_mode冗余到售后申请表 if ($shop_info['delivery_mode'] == 'jingxiao') { $insertData['delivery_mode'] = $shop_info['delivery_mode']; } $shop_type = $shop_info['shop_type']; $insertData['shop_type'] = $shop_type; $delivery = $this->_getOrderDelivery($tgOrder['order_id'], $items); $insertData['delivery_id'] = $delivery['delivery_id']; $modelReship = app::get('ome')->model('reship'); $rs = $modelReship->insert($insertData); if (!$rs) { return array('rsp' => 'succ', 'msg' => '退货单新建失败'); } $reshipItems = array(); $paramsItems = array(); foreach ($items as $item) { $reshipItems[] = array( 'reship_id' => $insertData['reship_id'], 'op_id' => $opInfo['op_id'], 'bn' => $item['bn'], 'num' => $item['number'], 'branch_id' => $params['branch']['branch_id'], 'product_name' => $item['name'], 'product_id' => $item['product_id'], 'order_item_id' => $item['item_id'], ); $paramsItems[] = array( 'bn' => $item['bn'], 'normal_num' => $item['number'] - $item['defective_num'], 'defective_num' => $item['defective_num'], ); } $modelItem = app::get('ome')->model('reship_items'); $sql = ome_func::get_insert_sql($modelItem, $reshipItems); $modelItem->db->exec($sql); # 操作日志 $oOperation_log = app::get('ome')->model('operation_log'); $memo = '销退接口新建退换货单'; $oOperation_log->write_log('reship@ome', $insertData['reship_id'], $memo); return $this->status_update(array('status' => 'FINISH', 'auto_confirm' => true, 'reship_bn' => $insertData['reship_bn'], 'items' => $paramsItems)); } protected function _getOrderDelivery($orderId, $items) { //获取订单关联的发货单(支持return_back追回状态) $sql = "SELECT dord.delivery_id, d.branch_id, d.logi_no, d.logi_name FROM sdb_ome_delivery_order AS dord LEFT JOIN sdb_ome_delivery AS d ON(dord.delivery_id=d.delivery_id) WHERE dord.order_id='".$orderId."' AND (d.parent_id=0 OR d.is_bind='true') AND d.disabled='false' AND d.status IN('succ','return_back')"; $result = kernel::database()->select($sql); if(count($result) > 1 && !empty($items)) { $arrDelivery = array(); foreach ($result as $key => $val) { $arrDelivery[$val['delivery_id']] = $val; } $productId = ''; foreach($items as $iVal) { if($iVal['product_id']) { $productId = $iVal['product_id']; break; } } $deliItemModel = app::get('ome')->model('delivery_items'); $itemData = $deliItemModel->getList('delivery_id', array('delivery_id'=>array_keys($arrDelivery), 'product_id'=>$productId), 0, 1); } return $itemData ? $arrDelivery[$itemData[0]['delivery_id']] : $result[0]; } /** * WMS京东云交易订单退款成功MQ消息 * * @param array $params * @return array */ public function service_refund($params) { return kernel::single('console_event_receive_reship')->service_refund($params); } public function lanjieReship($params){ $orderBn = array(); $oids = array(); $bnProduct = array(); $bnProductCC = array(); foreach ($params['items'] as $val) { $bnProduct[$val['order_bn'] . '|' . $val['oid']] += $val['num']; $bnProductCC[$val['order_bn'] . '|' . $val['oid']] += $val['ccnum']; $orderBn[] = $val['order_bn']; $oids[] = $val['oid']; } $orderObj = app::get('ome')->model('orders'); $field = 'order_id,order_bn,status,process_status,ship_status,pay_status,shop_id,member_id,logi_id,logi_no,ship_name,ship_area,ship_addr,ship_zip,ship_tel,ship_email,ship_mobile,order_bool_type,order_type'; $orderList = $orderObj->getList($field, array('order_bn' => $orderBn)); if (empty($orderList)) { return array('rsp' => 'fail', 'msg' => '没有该订单' . $params['items'][0]['order_bn']); } $orderData = array(); $strReshipBn = $params['reship_bn'] . '_' . $params['branch']['branch_id'] . '_'; $arrReshipBn = array(); foreach ($orderList as $val) { $orderData[$val['order_id']] = $val; $arrReshipBn[] = $strReshipBn . $val['order_id']; } $modelReship = app::get('ome')->model('reship'); $oldReship = $modelReship->getList('order_id', array('reship_bn' => $arrReshipBn)); foreach ($oldReship as $val) { if ($orderData[$val['order_id']]) { unset($orderData[$val['order_id']]); } } if (empty($orderData)) { return array('rsp' => 'fail', 'msg' => '该退货单已经生成' . $params['reship_bn']); } $objfilter = array('order_id' => array_keys($orderData), 'oid' => $oids,'delete' => 'false'); $object = app::get('ome')->model('order_objects')->getList('oid,order_id,bn, obj_id, quantity,`delete`', $objfilter); $orderBnItems = []; foreach($object as $ov){ $itemFilter = array('order_id' => $ov['order_id'], 'obj_id' => $ov['obj_id'], 'delete' => 'false'); $orderItems = app::get('ome')->model('order_items')->getList('*', $itemFilter); foreach ($orderItems as $val) { $radio = $val['nums']/$ov['quantity']; $orderBnItems[$val['order_id'] . '|' .$ov['oid'].'|'.$val['bn']]['order_id'] = $val['order_id']; $orderBnItems[$val['order_id'] . '|' .$ov['oid'].'|'.$val['bn']]['oid'] = $ov['oid']; $orderBnItems[$val['order_id'] . '|' .$ov['oid'].'|'.$val['bn']]['product_id'] = $val['product_id']; $orderBnItems[$val['order_id'] . '|' .$ov['oid'].'|'.$val['bn']]['item_id'] = $val['item_id']; $orderBnItems[$val['order_id'] . '|' .$ov['oid'].'|'. $val['bn']]['bn'] = $val['bn']; $orderBnItems[$val['order_id'] . '|' .$ov['oid'].'|'. $val['bn']]['name'] = $val['name']; $orderBnItems[$val['order_id'] . '|' .$ov['oid'].'|'. $val['bn']]['sendnum'] += $val['sendnum']; $orderBnItems[$val['order_id'] . '|' .$ov['oid'].'|'. $val['bn']]['return_num'] += $val['return_num']; $orderBnItems[$val['order_id'] . '|' .$ov['oid'].'|'. $val['bn']]['radio']= $radio; $orderBnItems[$val['order_id'] . '|' .$ov['oid'].'|'. $val['bn']]['nums']= $val['nums']; } } $items = array(); foreach ($orderBnItems as $val) { $key = $orderData[$val['order_id']]['order_bn'] . '|' . $val['oid']; $normalnumber = ($bnProduct ? $bnProduct[$key] : 0); $ccnumber = ($bnProductCC ? $bnProductCC[$key] : 0); $number = $normalnumber*$val['radio']; $val['number'] = $number; $val['defective_num'] = $ccnumber*$val['radio']; if ($val['number'] > ($val['sendnum'] - $val['return_num'])) { return array('rsp' => 'fail', 'msg' => $val['bn'] . '超过发货数量'); } $items[$val['order_id']][] = $val; } if (empty($items)) { return array('rsp' => 'fail', 'msg' => '没有找到退货的明细'); } $msg = ''; foreach ($items as $orderId => $val) { $params['from'] = 'lanjie'; $params['flag_type'] = ome_reship_const::__YUANDANTUI; $rs = $this->dealOneReship($val, $orderData[$orderId], $params); $msg .= '订单' . $orderData[$orderId]['order_bn'] . '退货单处理:' . $rs['msg'] . '
'; } return array('rsp' => 'succ', 'msg' => $msg); } }