mirror of
https://gitee.com/ShopeX/OMS
synced 2026-04-05 22:55:32 +08:00
706 lines
28 KiB
PHP
706 lines
28 KiB
PHP
<?php
|
|
/**
|
|
* Copyright 2026 ShopeX (https://www.shopex.cn)
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
|
|
/**
|
|
* 发货通知单推送通知仓库封装类
|
|
*
|
|
* @author xiayuanjun
|
|
* @Time: 2016-04-20
|
|
* @version 0.1
|
|
*/
|
|
|
|
class ome_delivery_notice{
|
|
|
|
/**
|
|
* @description 修改配送信息
|
|
* @access public
|
|
* @param int $delivery_id 发货单ID
|
|
* @return void
|
|
*/
|
|
static public function create($delivery_id) {
|
|
|
|
$operationLogObj = app::get('ome')->model('operation_log');
|
|
$operationLogObj->write_log('delivery_modify@ome',$delivery_id,"发货通知单推送仓库开始");
|
|
|
|
$original_data = kernel::single('ome_event_data_delivery')->generate($delivery_id);
|
|
if (empty($original_data)){
|
|
return true;
|
|
}
|
|
|
|
$consoleDlyLib = kernel::single('console_delivery');
|
|
$consoleDlyLib->update_sync_status($delivery_id, 'send');
|
|
|
|
//根据仓库识别是否门店仓还是电商仓
|
|
$store_id = kernel::single('ome_branch')->isStoreBranch($original_data['branch_id']);
|
|
if($store_id){
|
|
$channel_type = 'store';
|
|
$channel_id = $store_id;
|
|
}else{
|
|
$wms_id = kernel::single('ome_branch')->getWmsIdById($original_data['branch_id']);
|
|
list($rs, $rsData) = self::_get_electron_logi_no($wms_id,$original_data);
|
|
if(!$rs) {
|
|
$consoleDlyLib->update_sync_status($delivery_id, 'send_fail', $rsData['msg']);
|
|
return true;
|
|
}
|
|
|
|
$channel_type = 'wms';
|
|
$channel_id = $wms_id;
|
|
}
|
|
|
|
$dlyTriggerLib = kernel::single('ome_event_trigger_delivery');
|
|
$result = $dlyTriggerLib->create($channel_type,$channel_id,$original_data,false);
|
|
if($result['rsp'] == 'fail'){
|
|
$msg = "失败. 原因:".$result['msg'];
|
|
}else{
|
|
$msg ="成功.";
|
|
|
|
if (isset($result['data']['wms_order_code'])) {
|
|
$dlyExtObj = app::get('console')->model('delivery_extension');
|
|
$ext_data['delivery_bn'] = $original_data['outer_delivery_bn'];
|
|
$ext_data['original_delivery_bn'] = $result['data']['wms_order_code'];
|
|
$dlyExtObj->create($ext_data);
|
|
}
|
|
kernel::single('ome_wms')->notify($original_data['outer_delivery_bn']);
|
|
}
|
|
|
|
if(isset($result['msg_id'])){
|
|
$msg .=" msg_id:".$result['msg_id'];
|
|
}
|
|
|
|
if ($result['rsp'] != 'running') {
|
|
$consoleDlyLib->update_sync_status($delivery_id, $result['rsp'] == 'succ' ? 'send_succ' : 'send_fail');
|
|
}
|
|
|
|
|
|
$operationLogObj->write_log('delivery_modify@ome',$delivery_id,"推送结果:".$msg);
|
|
}
|
|
|
|
static public function isAutoNoticeWms($delivery_id) {
|
|
$orderId = app::get('ome')->model('delivery')->getOrderIdByDeliveryId($delivery_id);
|
|
|
|
$orderMdl = app::get('ome')->model('orders');
|
|
|
|
$order = $orderMdl->db_dump(['order_id' => $orderId], 'order_id,source_status,createway,shop_type');
|
|
|
|
if (!$order) {
|
|
return false;
|
|
}
|
|
|
|
if($order['shop_type'] == 'luban' && $order['createway'] == 'matrix'){
|
|
if (!in_array($order['source_status'], array('SELLER_READY_GOODS', 'SELLER_CONSIGNED_PART', 'TRADE_FINISHED', 'WAIT_BUYER_CONFIRM_GOODS'))) {
|
|
app::get('ome')->model('delivery')->update(['sync_status'=>'6'], ['delivery_id'=>$delivery_id]);
|
|
return false;
|
|
}
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
public function sendAgain($arrDeliveryId)
|
|
{
|
|
//设置发起二次推送的时效
|
|
$syncTime = 30 * 86400;
|
|
$startTime = time() - $syncTime;
|
|
|
|
//list
|
|
$dlyArr = app::get('ome')->model('delivery')->getList('delivery_id,sync_send_succ_times,create_time', ['delivery_id'=>$arrDeliveryId, 'status'=>['ready','progress']]);
|
|
$arrDly = array_column($dlyArr, null, 'delivery_id');
|
|
foreach ($arrDeliveryId as $id) {
|
|
if($arrDly[$id]) {
|
|
if($arrDly[$id]['create_time'] < $startTime) {
|
|
app::get('ome')->model('operation_log')->write_log('delivery_modify@ome',$id,"发货单创建超过7天不再自动发起");
|
|
continue;
|
|
}
|
|
|
|
if(self::isAutoNoticeWms($id)) {
|
|
app::get('ome')->model('operation_log')->write_log('delivery_modify@ome',$id,"二次自动推送发起");
|
|
self::notification($id);
|
|
} else {
|
|
$time = time() + 3600;
|
|
$task = array(
|
|
'obj_id' => $id,
|
|
'obj_type' => 'delivery_send_again',
|
|
'exec_time' => $time,
|
|
);
|
|
app::get('ome')->model('misc_task')->saveMiscTask($task);
|
|
app::get('ome')->model('operation_log')->write_log('delivery_modify@ome',$id,"二次自动推送因订单尚未备货故延时发起:".date('Y-m-d H:i', $time));
|
|
}
|
|
continue;
|
|
}
|
|
app::get('ome')->model('operation_log')->write_log('delivery_modify@ome',$id,"二次自动推送因状态变更不发起");
|
|
}
|
|
}
|
|
|
|
static public function cancel($params, $sync = false){
|
|
|
|
$dly_id = $params['delivery_id'];
|
|
$data = array();
|
|
$data['outer_delivery_id'] = $dly_id;
|
|
$data['outer_delivery_bn'] = $params['delivery_bn'];
|
|
$error_msg = '';
|
|
|
|
$dlyObj = app::get('ome')->model("delivery");
|
|
$branchObj = app::get('ome')->model("branch");
|
|
|
|
//根据仓库识别是否门店仓还是电商仓
|
|
$store_id = kernel::single('ome_branch')->isStoreBranch($params['branch_id']);
|
|
if($store_id){
|
|
$channel_type = 'store';
|
|
$channel_id = $store_id;
|
|
}else{
|
|
//$branch =$branchObj->getList('branch_bn',array('branch_id'=>$params['branch_id']),0,1);
|
|
$branch =$branchObj->db->selectrow("SELECT branch_bn,owner_code FROM sdb_ome_branch WHERE branch_id=".$params['branch_id']);
|
|
$data['branch_bn'] =$branch['branch_bn'];
|
|
$data['owner_code'] =$branch['owner_code'];
|
|
$dlyExtObj = app::get('console')->model('delivery_extension');
|
|
$dlyExtInfo = $dlyExtObj->dump(array('delivery_bn'=>$params['delivery_bn']),'original_delivery_bn');
|
|
|
|
$data['original_delivery_bn'] = $dlyExtInfo['original_delivery_bn'];
|
|
|
|
|
|
$deliveryInfo = $dlyObj->dump(array('delivery_id'=>$dly_id), 'delivery_id,sync_status,wms_channel_id');
|
|
$data['sync_status'] = $deliveryInfo['sync_status'];
|
|
$data['wms_channel_id'] = $deliveryInfo['wms_channel_id'];
|
|
|
|
|
|
|
|
if(isset($params['wms_id'])){
|
|
$wms_id = $params['wms_id'];
|
|
}else{
|
|
$branchLib = kernel::single('ome_branch');
|
|
$wms_id = $branchLib->getWmsIdById($params['branch_id']);
|
|
}
|
|
|
|
$channel_type = 'wms';
|
|
$channel_id = $wms_id;
|
|
}
|
|
|
|
//订单号 店铺
|
|
$deliveryOrderObj = app::get('ome')->model('delivery_order');
|
|
$dly_order = $deliveryOrderObj->dump(array('delivery_id'=>$dly_id),'order_id');
|
|
$order_id = $dly_order['order_id'];
|
|
$orderObj = app::get('ome')->model('orders');
|
|
$order_detail = $orderObj->dump($order_id, 'order_bn,shop_type,shop_id');
|
|
$data['shop_type'] = $order_detail['shop_type'];
|
|
|
|
$data['order_bn'] = $order_detail['order_bn'];
|
|
$shopObj = app::get('ome')->model('shop');
|
|
|
|
|
|
$shopInfo = $shopObj->dump($order_detail['shop_id'],'shop_bn,name');
|
|
|
|
$data['shop_code'] = isset($shopInfo['shop_bn']) ? $shopInfo['shop_bn'] : '';
|
|
$dlyTriggerLib = kernel::single('ome_event_trigger_delivery');
|
|
$rs = $dlyTriggerLib->cancel($channel_type,$channel_id,$data,$sync);
|
|
|
|
if ($rs['rsp'] == 'succ'){
|
|
if(!$store_id && $rs['data']){
|
|
!is_array($rs['data']) && $rs['data'] = @json_decode($rs['data'],true);
|
|
if ($rs['data']['response']['message'] == 'Picked'){
|
|
kernel::single('ome_delivery_freeze')->add($dly_id);
|
|
}
|
|
}
|
|
//取消合单标识
|
|
$label_code = 'SOMS_COMBINE_ORDER';
|
|
$combineLabel = kernel::single('ome_bill_label')->getBillLabelInfo($dly_id, 'ome_delivery', $label_code);
|
|
if ($combineLabel) {
|
|
$labelAll = app::get('omeauto')->model('order_labels')->getList('*', ['label_code' => $label_code]);
|
|
if ($labelAll) {
|
|
$labelAll = array_column($labelAll, 'label_id');
|
|
kernel::single('ome_bill_label')->delLabelFromBillId($dly_id, $labelAll, 'ome_delivery', $error_msg);
|
|
$deliveryOrderList = app::get('ome')->model('delivery_order')->getList('order_id', ['delivery_id' => $dly_id]);
|
|
foreach ($deliveryOrderList as $val) {
|
|
kernel::single('ome_bill_label')->delLabelFromBillId($val['order_id'], $labelAll, 'order', $error_msg);
|
|
}
|
|
}
|
|
}
|
|
} else {
|
|
kernel::single('console_delivery')->update_sync_status($dly_id, 'cancel_fail', $rs['msg']);
|
|
}
|
|
return $rs;
|
|
}
|
|
|
|
static public function cut($params){
|
|
$dly = app::get('ome')->model('delivery')->db_dump(['logi_no'=>$params['logi_no']]);
|
|
if(empty($dly)) {
|
|
return ['rsp'=>'fail', 'msg'=>'未找到物流单:'.$params['logi_no'].'的发货单'];
|
|
}
|
|
$dly_id = $dly['delivery_id'];
|
|
$data = array();
|
|
$data['outer_delivery_id'] = $dly_id;
|
|
$data['outer_delivery_bn'] = $dly['delivery_bn'];
|
|
$data['branch_id'] = $dly['branch_id'];
|
|
|
|
$dlyObj = app::get('ome')->model("delivery");
|
|
$branchObj = app::get('ome')->model("branch");
|
|
|
|
//根据仓库识别是否门店仓还是电商仓
|
|
$store_id = kernel::single('ome_branch')->isStoreBranch($dly['branch_id']);
|
|
if($store_id){
|
|
return ['rsp'=>'succ', 'msg'=>'门店无拦截'];
|
|
}else{
|
|
//$branch =$branchObj->getList('branch_bn',array('branch_id'=>$params['branch_id']),0,1);
|
|
$branch =$branchObj->db->selectrow("SELECT branch_bn FROM sdb_ome_branch WHERE branch_id=".$dly['branch_id']);
|
|
$data['branch_bn'] =$branch['branch_bn'];
|
|
$dlyExtObj = app::get('console')->model('delivery_extension');
|
|
$dlyExtInfo = $dlyExtObj->dump(array('delivery_bn'=>$dly['delivery_bn']),'original_delivery_bn');
|
|
$data['original_delivery_bn'] = $dlyExtInfo['original_delivery_bn'];
|
|
$branchLib = kernel::single('ome_branch');
|
|
$wms_id = $branchLib->getWmsIdById($dly['branch_id']);
|
|
$channel_type = 'wms';
|
|
$channel_id = $wms_id;
|
|
}
|
|
|
|
$wmsMdl = app::get('wmsmgr')->model('wms');
|
|
$wms = $wmsMdl->dump($wms_id, 'channel_id,crop_config,node_type');
|
|
if (isset($wms['crop_config']['saleorder_callback']) && $wms['crop_config']['saleorder_callback'] == '0') {
|
|
return ['rsp'=>'succ', 'msg'=>'配送拦截未开启'];
|
|
}
|
|
|
|
$dlyTriggerLib = kernel::single('ome_event_trigger_delivery');
|
|
$rs = $dlyTriggerLib->cut($channel_type,$channel_id,$data);
|
|
if($rs['msg'] == '接口方法不存在' || strpos($rs['msg'], '重复请求') !== false) {
|
|
$rs['rsp'] = 'succ';
|
|
}
|
|
return $rs;
|
|
}
|
|
|
|
static public function pause($params, $sync = false){
|
|
|
|
$dly_id = $params['delivery_id'];
|
|
$data['outer_delivery_bn'] = $params['delivery_bn'];
|
|
|
|
//根据仓库识别是否门店仓还是电商仓
|
|
$store_id = kernel::single('ome_branch')->isStoreBranch($params['branch_id']);
|
|
if($store_id){
|
|
$channel_type = 'store';
|
|
$channel_id = $store_id;
|
|
}else{
|
|
if(isset($params['wms_id'])){
|
|
$wms_id = $params['wms_id'];
|
|
}else{
|
|
$branchLib = kernel::single('ome_branch');
|
|
$wms_id = $branchLib->getWmsIdById($params['branch_id']);
|
|
}
|
|
|
|
$channel_type = 'wms';
|
|
$channel_id = $wms_id;
|
|
}
|
|
|
|
$dlyTriggerLib = kernel::single('ome_event_trigger_delivery');
|
|
return $dlyTriggerLib->pause($channel_type,$channel_id,$data,$sync);
|
|
}
|
|
|
|
static public function renew($params, $sync = false){
|
|
|
|
$dly_id = $params['delivery_id'];
|
|
$data['outer_delivery_bn'] = $params['delivery_bn'];
|
|
$dlyExtObj = app::get('console')->model('delivery_extension');
|
|
$dlyExtInfo = $dlyExtObj->dump(array('delivery_bn'=>$params['delivery_bn']),'original_delivery_bn');
|
|
|
|
//根据仓库识别是否门店仓还是电商仓
|
|
$store_id = kernel::single('ome_branch')->isStoreBranch($params['branch_id']);
|
|
if($store_id){
|
|
$channel_type = 'store';
|
|
$channel_id = $store_id;
|
|
}else{
|
|
if(isset($params['wms_id'])){
|
|
$wms_id = $params['wms_id'];
|
|
}else{
|
|
$branchLib = kernel::single('ome_branch');
|
|
$wms_id = $branchLib->getWmsIdById($params['branch_id']);
|
|
}
|
|
|
|
$channel_type = 'wms';
|
|
$channel_id = $wms_id;
|
|
}
|
|
|
|
$dlyTriggerLib = kernel::single('ome_event_trigger_delivery');
|
|
return $dlyTriggerLib->renew($channel_type,$channel_id,$data,$sync);
|
|
}
|
|
|
|
/**
|
|
* 查询发货单状态
|
|
*
|
|
* @return void
|
|
* @author
|
|
**/
|
|
public function searchDelivery($delivery_id)
|
|
{
|
|
$delivery = app::get('ome')->model('delivery')->db_dump($delivery_id);
|
|
|
|
return self::search($delivery);
|
|
}
|
|
|
|
static public function search($params, $sync = false){
|
|
|
|
$dly_id = $params['delivery_id'];
|
|
|
|
$dlyExtObj = app::get('console')->model('delivery_extension');
|
|
$dlyExtInfo = $dlyExtObj->dump(array('delivery_bn'=>$params['delivery_bn']),'original_delivery_bn');
|
|
$data = array(
|
|
'delivery_bn'=>$params['delivery_bn'],
|
|
'out_order_code'=>$dlyExtInfo['original_delivery_bn'],
|
|
'obj_id' => $params['obj_id'],
|
|
);
|
|
$branchLib = kernel::single('ome_branch');
|
|
if(isset($params['wms_id'])){
|
|
$wms_id = $params['wms_id'];
|
|
}else{
|
|
|
|
$wms_id = $branchLib->getWmsIdById($params['branch_id']);
|
|
}
|
|
|
|
//订单号 店铺
|
|
$deliveryOrderObj = app::get('ome')->model('delivery_order');
|
|
$dly_order = $deliveryOrderObj->dump(array('delivery_id'=>$dly_id),'order_id');
|
|
$order_id = $dly_order['order_id'];
|
|
|
|
$orderObj = app::get('ome')->model('orders');
|
|
$order_detail = $orderObj->dump($order_id, 'order_bn,shop_type,shop_id');
|
|
|
|
$shopObj = app::get('ome')->model('shop');
|
|
|
|
$shopInfo = $shopObj->dump($order_detail['shop_id'],'shop_type,shop_bn,name');
|
|
|
|
$data['shop_type'] = $shopInfo['shop_type'];
|
|
$data['shop_code'] = isset($shopInfo['shop_bn']) ? $shopInfo['shop_bn'] : '';
|
|
|
|
$data['branch_bn'] = $branchLib->getBranchBnById($params['branch_id']);
|
|
|
|
return kernel::single('erpapi_router_request')->set('wms',$wms_id)->delivery_search($data);
|
|
}
|
|
|
|
static public function _get_electron_logi_no($wms_id,&$original_data){
|
|
|
|
//获取目前支持获取WMS 目前只支持科捷和伊藤忠 境宴和360
|
|
$node_type = array('ilc','kejie','cnss','sku360','mixture', 'qimen');
|
|
|
|
$channel_adapter = app::get('channel')->model('channel');
|
|
|
|
$is_jitx = kernel::single('ome_order_bool_type')->isJITX($original_data['order_bool_type']);
|
|
$is_jdlvmi = kernel::single('ome_order_bool_type')->isJDLVMI($original_data['order_bool_type']);
|
|
|
|
$wms_detail = $channel_adapter->dump(array('channel_id'=>$wms_id,'node_id|noequal'=>''),'config');
|
|
$wms_detail['config'] = $wms_detail['config'] ? @unserialize($wms_detail['config']) : [];
|
|
|
|
if($original_data['shop_type'] == '360buy' && $is_jdlvmi){
|
|
|
|
return [true, ['msg'=>'不需要获取']];
|
|
}
|
|
|
|
if ($is_jitx) {
|
|
$is_logi_no = true;
|
|
// 唯品会合单强制获取一次物流单号,用于更新父发货单和订单上的物流单号为同一个
|
|
if ($original_data['is_vop_merge'] && in_array($wms_detail['node_type'],$node_type)) {
|
|
$original_data['logi_no'] = '';
|
|
}
|
|
}
|
|
|
|
if (kernel::single('ome_security_router',$original_data['shop_type'])->is_encrypt($original_data,'delivery')
|
|
&& is_array($wms_detail['config']['need_encrypt_logistics'])
|
|
&& $wms_detail['config']['need_encrypt_logistics'][$original_data['shop_type']]
|
|
) {
|
|
if (!$original_data['logi_no']) {
|
|
$dlyCorpObj = app::get('ome')->model('dly_corp');
|
|
$dlyCorp = $dlyCorpObj->dump($original_data['logi_id'], 'channel_id');
|
|
app::get('ome')->model('dly_corp_channel')->getChannel($dlyCorp, array($original_data));
|
|
if (!$dlyCorp['channel_id']) {
|
|
return [false, ['msg'=>'没有电子面单来源']];
|
|
}
|
|
$waybill = kernel::single('ome_event_trigger_logistics_electron')->directGetWaybill($original_data['delivery_id'], $dlyCorp['channel_id']);
|
|
if ($waybill['succ']) {
|
|
$original_data['logi_no'] = $waybill['succ'][0]['logi_no'];
|
|
}
|
|
}
|
|
if($original_data['logi_no']) {
|
|
foreach($original_data['consignee'] as $k => $v) {
|
|
if(kernel::single('ome_security_hash')->get_code() == substr($v, -5)) {
|
|
$original_data['consignee'][$k] = kernel::single('ome_view_helper2')->modifier_ciphertext($v, 'order', $k);
|
|
}
|
|
}
|
|
$waybillExMdl = app::get('logisticsmanager')->model('waybill_extend');
|
|
$waybill = app::get('logisticsmanager')->model('waybill')->db_dump(array ('waybill_number' => $original_data['logi_no']), 'id');
|
|
if (!$waybill) {
|
|
return [false, ['msg'=>'电子面单查询失败']];
|
|
}
|
|
$original_data['waybill_extend'] = $waybillExMdl->db_dump(array ('waybill_id' => $waybill['id']));
|
|
} else {
|
|
return [false, ['msg'=>'电子面单获取失败']];
|
|
}
|
|
return [true, ['msg'=>'电子面单获取成功']];
|
|
}
|
|
if($original_data['logi_no'] && $is_jitx){
|
|
$waybillExMdl = app::get('logisticsmanager')->model('waybill_extend');
|
|
|
|
// 判断大头笔
|
|
$waybill = app::get('logisticsmanager')->model('waybill')->dump(array ('waybill_number' => $original_data['logi_no']));
|
|
|
|
if (!$waybill) {
|
|
return [false, ['msg'=>'大头笔获取失败']];
|
|
}
|
|
|
|
$waybillEx = $waybillExMdl->dump(array ('waybill_id' => $waybill['id']));
|
|
if (!$waybillEx) {
|
|
$corp = app::get('ome')->model('dly_corp')->dump($original_data['logi_id'], 'channel_id');
|
|
$data = kernel::single('erpapi_router_request')->set('logistics', $corp['channel_id'])->electron_waybillExtend($original_data);
|
|
|
|
if ($data) {
|
|
$waybillEx = array (
|
|
'waybill_id' => $waybill['id'],
|
|
'position_no' => $data['position_no'],
|
|
'json_packet' => $data['json_packet'],
|
|
);
|
|
|
|
$waybillExMdl->save($waybillEx);
|
|
}
|
|
}
|
|
}
|
|
return [true, ['msg'=>'处理完成']];
|
|
}
|
|
|
|
static public function cancelYJDF($orderId, $bmIds) {
|
|
$rows = app::get('ome')->model('delivery_items_detail')
|
|
->getList('delivery_id', array('order_id'=>$orderId,'product_id'=>$bmIds));
|
|
if(empty($rows)){
|
|
return array(false, '没有发货单');
|
|
}
|
|
$dly = app::get('ome')->model('delivery')->getList('delivery_id,delivery_bn,branch_id', array('delivery_id'=>array_map('current', $rows), 'process'=>'true','parent_id'=>'0'));
|
|
if(empty($dly)) {
|
|
return array(false, '没有已发货的发货单');
|
|
}
|
|
$wmsType = array();
|
|
foreach ($dly as $v) {
|
|
if(!isset($wmsType[$v['branch_id']])) {
|
|
$wmsType[$v['branch_id']] = kernel::single('ome_branch')->getNodetypBybranchId($v['branch_id']);
|
|
$wmsType[$v['branch_id']] || $wmsType[$v['branch_id']] = '';
|
|
}
|
|
if($wmsType[$v['branch_id']] == 'yjdf') {
|
|
ome_delivery_notice::cancel($v, false);
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* [京东云交易]通知提前发货
|
|
*
|
|
* @param int $delivery_id
|
|
* @return boolean
|
|
*/
|
|
static public function notification($delivery_id, &$error_msg=null)
|
|
{
|
|
$deliveryObj = app::get('ome')->model('delivery');
|
|
|
|
$branchLib = kernel::single('ome_branch');
|
|
|
|
//发货单信息
|
|
$deliveryInfo = $deliveryObj->dump(array('delivery_id'=>$delivery_id), 'delivery_id,delivery_bn,branch_id,wms_channel_id');
|
|
if(empty($deliveryInfo)){
|
|
$error_msg = '没有发货单信息';
|
|
return false;
|
|
}
|
|
|
|
if(!self::isAutoNoticeWms($delivery_id)) {
|
|
$error_msg = '订单未备货,不能推送';
|
|
return false;
|
|
}
|
|
|
|
//branch_bn
|
|
$branch_bn = $branchLib->getBranchBnById($deliveryInfo['branch_id']);
|
|
|
|
//channel_id
|
|
$channel_id = $branchLib->getWmsIdById($deliveryInfo['branch_id']);
|
|
|
|
//params
|
|
$params = array(
|
|
'delivery_id' => $deliveryInfo['delivery_id'],
|
|
'delivery_bn' => $deliveryInfo['delivery_bn'],
|
|
'branch_id' => $deliveryInfo['branch_id'],
|
|
'branch_bn' => $branch_bn,
|
|
'wms_channel_id' => $deliveryInfo['wms_channel_id'],
|
|
);
|
|
|
|
//request
|
|
$result = kernel::single('erpapi_router_request')->set('wms', $channel_id)->delivery_makedly($params);
|
|
|
|
return $result;
|
|
}
|
|
|
|
static public function notify($delivery_id) {
|
|
|
|
$deliveryMdl = app::get('ome')->model('delivery');
|
|
$deliverys = $deliveryMdl->db_dump(array('delivery_id'=>$delivery_id),'branch_id,delivery_bn,status,shop_id,shop_type,wms_status,delivery_time,sync_status');
|
|
|
|
if(empty($deliverys)) return true;
|
|
|
|
|
|
$deliveryOrderModel = app::get('ome')->model('delivery_order');
|
|
$deliveryorder = $deliveryOrderModel->getList('order_id',array('delivery_id'=>$delivery_id));
|
|
|
|
$orderIds =array_map('current',$deliveryorder);
|
|
|
|
$orderMdl = app::get('ome')->model('orders');
|
|
|
|
$orders = $orderMdl->getlist('order_bn,shop_id,order_bool_type',array('order_id'=>$orderIds,'createway'=>'matrix','order_bool_type'=>ome_order_bool_type::__JDLVMI_CODE));
|
|
|
|
if(empty($orders)) return true;
|
|
|
|
$status_value = ome_wms::$wms_status;
|
|
$status = $deliverys['status'];
|
|
|
|
if($deliverys['wms_status']=='0' && in_array($deliverys['sync_status'],array('0','1'))){
|
|
// $status = 'unsync';
|
|
}
|
|
$status_value = $status_value[$status];
|
|
|
|
|
|
if(!$status_value) return true;
|
|
|
|
if($deliverys['wms_status'] == end($status_value)) return true; //等于最后一个就不回写了
|
|
|
|
if($deliverys['wms_status']!='0'){
|
|
$key = array_search($deliverys['wms_status'], $status_value);//截取已经回写状态位
|
|
if($key){
|
|
$status_value = array_slice($status_value, $key+1);
|
|
}
|
|
|
|
}
|
|
|
|
|
|
foreach($orders as $v){
|
|
|
|
$order_bool_type = $v['order_bool_type'];
|
|
|
|
$is_jdlvmi = kernel::single('ome_order_bool_type')->isJDLVMI($order_bool_type);
|
|
|
|
if(!$is_jdlvmi) continue;
|
|
$time = time();
|
|
foreach($status_value as $sv){
|
|
$sdf = array(
|
|
'order_bn' => $v['order_bn'],
|
|
'status' => $sv,
|
|
'branch_id' => $deliverys['branch_id'],
|
|
'delivery_time' =>$deliverys['delivery_time'],
|
|
'operatetime' =>$time,
|
|
|
|
);
|
|
|
|
$time=$time+5;
|
|
$rs = kernel::single('erpapi_router_request')->set('shop',$deliverys['shop_id'])->delivery_notify($sdf);
|
|
|
|
if($rs['rsp'] == 'succ'){
|
|
$deliveryMdl->db->exec("UPDATE sdb_ome_delivery set wms_status='".$sv."' WHERE delivery_id=".$delivery_id."");
|
|
}
|
|
|
|
|
|
}
|
|
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 需要判断如果是合单都付尾款才可以通知
|
|
*
|
|
*/
|
|
|
|
static public function notify_presale($order_id, &$error_msg=null){
|
|
$branchLib = kernel::single('ome_branch');
|
|
|
|
$orderObj = app::get('ome')->model('orders');
|
|
$orders = $orderObj->dump(array('order_id'=>$order_id,'pay_status'=>'1','process_status'=>'splited','order_type'=>'presale'), 'order_id,order_bn,payed,total_amount,paytime');
|
|
$logMdl = app::get('ome')->model('operation_log');
|
|
if (!$orders) return false;
|
|
$delivery_list = self::getDeliveryByorderId($order_id);
|
|
if(empty($delivery_list)){
|
|
$error_msg = '没有可操作的发货单';
|
|
return false;
|
|
}
|
|
|
|
$isPrepayed = kernel::single('ome_bill_label_delivery')->isPrepayed($order_id);
|
|
|
|
if(!$isPrepayed){
|
|
return true;
|
|
}
|
|
//delivery
|
|
foreach($delivery_list as $delivery)
|
|
{
|
|
$branch_id = $delivery['branch_id'];
|
|
|
|
$wms_id = $branchLib->getWmsIdById($branch_id);
|
|
//wms_id
|
|
|
|
if(empty($wms_id)){
|
|
continue;
|
|
}
|
|
$delivery_id = $delivery['delivery_id'];
|
|
//没有提前推送的不打
|
|
$isPrepackage = kernel::single('ome_bill_label_delivery')->isPrepackage($delivery_id);
|
|
|
|
if(!$isPrepackage){
|
|
continue;
|
|
}
|
|
|
|
//branch_bn
|
|
$branch_bn = $branchLib->getBranchBnById($branch_id);
|
|
|
|
//request
|
|
$data = array(
|
|
'delivery_bn' => $delivery['delivery_bn'],
|
|
'delivery_id' => $delivery['delivery_id'],
|
|
'branch_bn' => $branch_bn,
|
|
'order_bn' => $orders['order_bn'], //订单号
|
|
'payed' => $orders['payed'], //已付金额
|
|
'total_amount' => $orders['total_amount'], //订单总额
|
|
'paytime' => ($orders['paytime'] ? $orders['paytime'] : time()), //付款时间
|
|
);
|
|
$dlyTriggerLib = kernel::single('ome_event_trigger_delivery');
|
|
$rs = $dlyTriggerLib->notify($wms_id, $data);
|
|
$logMdl->write_log('delivery_modify@ome',$delivery_id,"预售订单付尾款推送");
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
static function getDeliveryByorderId($order_id){
|
|
$deliveryOrderModel = app::get('ome')->model('delivery_order');
|
|
$deliveryorder = $deliveryOrderModel->getList('delivery_id',array('order_id'=>$order_id));
|
|
|
|
|
|
$deliveryIds =array_map('current',$deliveryorder);
|
|
|
|
$SQL= "SELECT d.delivery_id,d.delivery_bn,d.branch_id FROM sdb_ome_delivery as d WHERE d.delivery_id in(".implode(',',$deliveryIds).") AND d.parent_id=0 AND d.status in('succ','ready','progress')";
|
|
|
|
$delivery_list = $deliveryOrderModel->db->select($SQL);
|
|
|
|
|
|
if ($delivery_list){
|
|
|
|
$delivery_ids = array();
|
|
foreach($delivery_list as $v){
|
|
$delivery_ids[] = $v['delivery_id'];
|
|
}
|
|
|
|
|
|
return $delivery_list;
|
|
|
|
|
|
}else{
|
|
return array();
|
|
}
|
|
}
|
|
}
|