* @version $Id: Z */ class erpapi_wms_response_process_delivery { /** * 发货单 * @param Array $params=array( * 'status'=>@状态@ delivery * 'delivery_bn'=>@发货单号@ * 'out_delivery_bn'=>@外部发货单号@ * 'logi_no'=>@运单号@ * 'delivery_time'=>@发货时间@ * 'weight'=>@重量@ * 'delivery_cost_actual'=>@物流费@ * 'logi_id'=>@物流公司编码@ * =================================== * 'status'=>print, * 'delivery_bn'=>@发货单号@ * 'stock_status'=>@备货单打印状态@ * 'deliv_status'=>@发货单打印状态@ * 'expre_status'=>@快递单打印状态@ * =================================== * 'status'=>check * 'delivery_bn'=>@发货单号@ * =================================== * 'status'=>cancel * 'delivery_bn'=>@发货单号@ * 'memo'=>@备注@ * =================================== * 'status'=>update * 'delivery_bn'=>@发货单号@ * 'action'=>updateDetail|addLogiNo * * * ) * @return void * @author **/ public function status_update($params) { // 如果包裹追回,退货入库自动完成 BEGIN ----------------8< if ($params['status'] == 'return_back') { // 触发AG $this->delivery_refundAg($params['delivery_bn'], $params['status']); return kernel::single('erpapi_wms_response_process_reship')->add_complete($params); }elseif($params['status'] == 'payed'){ //京东子订单已支付 return array('rsp'=>'succ', 'msg'=>'京东子订单已支付'); } // 如果包裹追回,退货入库自动完成 END ----------------8< if ($params['operate_time']) { $params['delivery_time'] = $params['operate_time']; } if (!empty($params['bill_logi_no']) && is_array($params['bill_logi_no'])) { $dliBill = app::get('ome')->model('delivery_bill'); foreach ($params['bill_logi_no'] as $val) { $bill = array(); $bill['status'] = $params['status'] == 'delivery' ? 1 : ($params['status'] == 'cancel' ? 2 : 0); $bill['logi_no'] = $val; $delivery_data = app::get('ome')->model('delivery')->dump(array('delivery_bn' => $params['delivery_bn']), 'status,delivery_id,delivery_bn'); $bill['delivery_id'] = $delivery_data['delivery_id']; $bill['delivery_bn'] = $delivery_data['delivery_bn']; $hadBill = $dliBill->dump(array('delivery_id' => $bill['delivery_id'], 'logi_no' => $bill['logi_no']), 'log_id'); if (empty($hadBill)) { $bill['create_time'] = strtotime($params['operate_time']); } else { $bill['log_id'] = $hadBill['log_id']; } $bill['delivery_time'] = strtotime($params['operate_time']); $dliBill->save($bill); } } // 如果发货提前触发AG if ($params['status'] == 'delivery' && $params['node_type'] == 'yjdf') { $this->delivery_refundAg($params['delivery_bn'], $params['status']); } $result = kernel::single('ome_event_receive_delivery')->update($params); // 报警 if($result['rsp'] == 'fail' && $params['status'] == 'delivery') { kernel::single('monitor_event_notify')->addNotify('wms_delivery_consign', [ 'delivery_bn' => $params['delivery_bn'], 'errmsg' => $result['msg'], ]); } /**** //发货失败 if ($result['rsp'] == 'fail') { //[京东一件代发]发货失败,删除WMS仓库赠送的赠品 if ($params['status'] == 'delivery' && $params['gift_list']) { $deliveryLib = kernel::single('console_delivery'); $isDelete = $deliveryLib->deleteWmsGifts($params, $error_msg); if (!$isDelete) { $operLogObj = app::get('ome')->model('operation_log'); $operLogObj->write_log('delivery_modify@ome', $params['delivery_id'], '发货失败,删除赠品失败:' . $error_msg); } } } ****/ // 一件代发取消成功触发AG if ($result['rsp'] == 'succ' && in_array($params['status'],['cancel','cancel_fail']) && $params['node_type'] == 'yjdf') { $agrs = $this->delivery_refundAg($params['delivery_bn'], $params['status']); // 如果没有退款,重新路由 if (!$agrs && $params['status'] == 'cancel' && $params['delivery_id']) { $orderModel = app::get('ome')->model('orders'); $deliveryObj = app::get('ome')->model('delivery'); //订单信息 $sql = "SELECT a.order_id,a.order_bn,a.pay_status,a.ship_name,a.ship_area,a.ship_addr,a.ship_mobile FROM sdb_ome_orders AS a LEFT JOIN sdb_ome_delivery_order AS b ON a.order_id=b.order_id WHERE b.delivery_id=". $params['delivery_id']; $orderInfo = $orderModel->db->selectrow($sql); if ($orderInfo['order_id']) { //发货单信息 $sql = "SELECT delivery_id,ship_name,ship_area,ship_addr,ship_mobile FROM sdb_ome_delivery WHERE delivery_id=". $params['delivery_id']; $dlyInfo = $orderModel->db->selectrow($sql); //订单收货人信息有变化时,才会重新路由自动审单 $order_str = $orderInfo['ship_name'].'-'.$orderInfo['ship_mobile'].'-'.$orderInfo['ship_area'].'-'.$orderInfo['ship_addr']; $order_str = str_replace(array(" "," ","\n","\r","\t"), '', $order_str); $delivery_str = $dlyInfo['ship_name'].'-'.$dlyInfo['ship_mobile'].'-'.$dlyInfo['ship_area'].'-'.$dlyInfo['ship_addr']; $delivery_str = str_replace(array(" "," ","\n","\r","\t"), '', $delivery_str); if($order_str != $delivery_str){ $orderModel->renewOrder($orderInfo['order_id']); kernel::single('ome_order')->auto_order_combine($orderInfo['order_id']); } } } } return $result; } /** * 一件代发取消成功触发AG * * @return void * @author **/ public function delivery_refundAg($delivery_bn, $status='') { $orderItemMdl = app::get('ome')->model('order_items'); $orderObjectMdl = app::get('ome')->model('order_objects'); $itemDetailMdl = app::get('ome')->model('delivery_items_detail'); $packageMdl = app::get('ome')->model('delivery_package'); $refundApplyMdl = app::get('ome')->model('refund_apply'); $deliveryMdl = app::get('ome')->model('delivery'); $delivery = $deliveryMdl->db_dump(['delivery_bn' => $delivery_bn], 'delivery_id'); if (!$delivery) { return false; } $delivery_id = $delivery['delivery_id']; $items_detail = $itemDetailMdl->getList('order_obj_id,order_id,bn', ['delivery_id' => $delivery_id]); if (!$items_detail) { return false; } $order_id_arr = array_column($items_detail, 'order_id'); $bn_arr = array_column($items_detail, 'bn'); // 判断是否有退款单 $refund_list = $refundApplyMdl->getList('refund_apply_bn,oid,order_id,bn', ['order_id' => $order_id_arr, 'status' => '0']); if (!$refund_list) { return false; } foreach ($refund_list as $refund) { if (!in_array($refund['bn'], $bn_arr)) { continue; } $logi = ['trigger_event' => $status]; if (in_array($status, ['delivery', 'cancel_fail'])) { // 发货单发货/取消失败,拒绝退款 $logi['cancel_dly_status'] = 'FAIL'; } elseif (in_array($status, ['return_back', 'cancel'])) { // 发货单拦截成功|取消成功,同意退款 $logi['cancel_dly_status'] = 'SUCCESS'; } $package_list = $packageMdl->getList('logi_bn,logi_no,status', ['delivery_id' => $delivery_id, 'bn' => $refund['bn'], 'status|notin' => ['cancel', 'return_back'] ]); foreach ($package_list as $package) { if ($package['status'] == 'delivery') { $logi['company_code'] = $package['logi_bn']; $logi['logistics_no'] = $package['logi_no']; } } // 如果是同意退款, if ($logi['cancel_dly_status'] == 'SUCCESS' && count($package_list) > 0) { $logi['cancel_dly_status'] == 'FAIL'; } $order_item = $orderItemMdl->db_dump(['order_id' => $refund['order_id'], 'bn' => $refund['bn']]); if ($logi['cancel_dly_status'] == 'SUCCESS' && $order_item['split_num'] != $order_item['return_num'] ) { $logi['cancel_dly_status'] == 'FAIL'; } kernel::single('ome_refund_apply')->refund_ag($refund['refund_apply_bn'], $logi); } return true; } }