Files
OMS/app/erpapi/lib/autotask/task/retryapi.php
2025-12-28 23:13:25 +08:00

252 lines
12 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?php
/**
* Copyright © ShopeX http://www.shopex.cn. All rights reserved.
* See LICENSE file for license details.
*/
@include_once(dirname(__FILE__).'/../../apiname.php');
class erpapi_autotask_task_retryapi{
/**
* 处理
* @param mixed $params 参数
* @param mixed $error_msg error_msg
* @return mixed 返回值
*/
public function process($params, &$error_msg)
{
$apiModel = app::get('erpapi')->model('api_fail');
$apilog = $apiModel->dump(array('id'=>$params['id']),'status,obj_type,params,fail_times');
if ($apilog['status'] != 'fail') {
$error_msg = $params['obj_bn'].'已经重试,不允许发起';
return false;
}
$apiModel->update(array('status'=>'running'),array('id'=>$params['id']));
//[兼容]发货单之前没有保存method方法名(后面需要删除掉此兼容)
if(empty($params['method'])){
$params['method'] = $params['obj_type'];
}
//dispose
try {
switch ($params['method']) {
case WMS_INORDER_CREATE:
// 入库
if ($apilog['obj_type'] == 'purchase') {
$iso = app::get('purchase')->model('po')->dump(array('po_bn'=>$params['obj_bn'],'check_status'=>'2','eo_status'=>'1'));
if (!$iso) {
$error_msg = $params['obj_bn'].'状态(check_status:'.$iso['check_status'].'、eo_status:'.$iso['eo_status'].')不允许发起';
return false;
}
kernel::single('console_event_trigger_purchase')->create(array('po_id'=>$iso['po_id']), false);
} else {
$iso = app::get('taoguaniostockorder')->model('iso')->dump(array('iso_bn'=>$params['obj_bn'],'check_status'=>'2','iso_status'=>'1'),'iso_id,check_status,iso_status');
if (!$iso) {
$error_msg = $params['obj_bn'].'状态(check_status:'.$iso['check_status'].'、iso_status:'.$iso['iso_status'].')不允许发起';
return false;
}
kernel::single('console_event_trigger_otherstockin')->create(array('iso_id'=>$iso['iso_id']),false);
}
break;
case WMS_OUTORDER_CREATE:
// 出库
if ($apilog['obj_type'] == 'purchase_return') {
$iso = app::get('purchase')->model('returned_purchase')->dump(array('rp_bn'=>$params['obj_bn'],'check_status'=>'2'));
if (!$iso) {
$error_msg = $params['obj_bn'].'状态(check_status:'.$iso['check_status'].'不允许发起';
return false;
}
kernel::single('console_event_trigger_purchasereturn')->create(array('rp_id'=>$iso['rp_id']), false);
} else {
$iso = app::get('taoguaniostockorder')->model('iso')->dump(array('iso_bn'=>$params['obj_bn'],'check_status'=>'2','iso_status'=>'1'),'iso_id,check_status,iso_status');
if (!$iso) {
$error_msg = $params['obj_bn'].'状态(check_status:'.$iso['check_status'].'、iso_status:'.$iso['iso_status'].')不允许发起';
return false;
}
kernel::single('console_event_trigger_otherstockout')->create(array('iso_id'=>$iso['iso_id']),false);
}
break;
case WMS_SALEORDER_CREATE:
// 销售出库
$delivery = app::get('ome')->model('delivery')->dump(array('delivery_bn'=>$params['obj_bn']),'delivery_id,status,pause,process');
if (in_array($delivery['status'],array('succ','cancel','back'))){
//删除此记录
$id = $params['id'];
$apiModel->db->exec("DELETE FROM sdb_erpapi_api_fail WHERE id=".$id);
return false;
}
if(in_array($delivery['status'],array('progress','ready')) && $delivery['pause'] == 'false' && $delivery['process'] == 'false'){
//发货单通知单推送仓库
ome_delivery_notice::create($delivery['delivery_id']);
}
break;
case WMS_RETURNORDER_CREATE:
// 退货入库
$reship = app::get('ome')->model('reship')->dump(array('reship_bn'=>$params['obj_bn'],'is_check'=>1),'reship_id,is_check');
if (!$reship) {
$error_msg = $params['obj_bn'].'状态(is_check:'.$reship['is_check'].')不允许发起';
return false;
}
$reship_data = kernel::single('ome_receipt_reship')->reship_create(array('reship_id'=>$reship['reship_id']));
$wms_id = kernel::single('ome_branch')->getWmsIdById($reship_data['branch_id']);
kernel::single('console_event_trigger_reship')->create($wms_id, $reship_data, false);
break;
case 'wms.delivery.status_update':
$data = $apilog['params'] ? json_decode($apilog['params'],true) : array();
if($data){
$data['status'] = 'delivery';
$result = kernel::single('ome_event_receive_delivery')->update($data);
if($result['rsp'] == 'succ'){
$apiModel->db->exec("DELETE FROM sdb_erpapi_api_fail WHERE id=".$params['id']);
}else{
$apiModel->update(array('status'=>'fail','fail_times'=>$apilog['fail_times']+1),array('id'=>$params['id']));
}
}
break;
case 'deliveryBack':
case SHOP_LOGISTICS_OFFLINE_SEND:
//回传平台发货状态
$deliveryObj = app::get('ome')->model('delivery');
//发货单信息
$delivery_bn = $params['obj_bn'];
$deliveryInfo = $deliveryObj->dump(array('delivery_bn'=>$delivery_bn, 'process'=>'true', 'parent_id'=>'0'), 'delivery_id,logi_no,status');
if(empty($deliveryInfo)){
//已回写成功,删除失败记录
$apiModel->db->exec("DELETE FROM sdb_erpapi_api_fail WHERE id=".$params['id']);
$error_msg = '没有获取到发货单信息';
return false;
}
//check
if(!in_array($deliveryInfo['status'], array('succ','progress','ready','failed'))){
//已回写成功,删除失败记录
$apiModel->db->exec("DELETE FROM sdb_erpapi_api_fail WHERE id=".$params['id']);
$error_msg = '发货单状态不允许推送发货状态';
return false;
}
//关联订单信息
$sql = "SELECT b.order_id,b.order_bn,b.ship_status FROM sdb_ome_delivery_order AS a LEFT JOIN sdb_ome_orders AS b ON a.order_id=b.order_id WHERE a.delivery_id=". $deliveryInfo['delivery_id'];
$orderInfo = $deliveryObj->db->selectrow($sql);
//check
if(!in_array($orderInfo['ship_status'], array('1','2'))){
//已回写成功,删除失败记录
$apiModel->db->exec("DELETE FROM sdb_erpapi_api_fail WHERE id=".$params['id']);
$error_msg = '订单不是发货状态';
return false;
}
//前端回写日志
$sql = "SELECT log_id,status FROM sdb_ome_shipment_log WHERE orderBn='". $orderInfo['order_bn'] ."' AND deliveryCode='". $deliveryInfo['logi_no'] ."'";
$shipmentInfo = $deliveryObj->db->selectrow($sql);
if($shipmentInfo['status'] == 'succ'){
//已回写成功,删除失败记录
$apiModel->db->exec("DELETE FROM sdb_erpapi_api_fail WHERE id=".$params['id']);
return true;
}elseif($shipmentInfo){
//删除前端回写日志(不能删除失败的记录,否则重试未请求,失败记录也被删除掉了)
//$apiModel->db->exec("DELETE FROM sdb_ome_shipment_log WHERE log_id='". $shipmentInfo['log_id'] ."'");
}
//重新推送发货状态给平台
$delieryLib = kernel::single('ome_event_trigger_shop_delivery');
$result = $delieryLib->delivery_confirm_send($deliveryInfo['delivery_id']);
break;
case SHOP_AFTERSALE_EXCHANGE_AGREE:
case SHOP_AGREE_RETURN_GOOD:
//同意退货、换货请求
$returnObj = app::get('ome')->model('return_product');
$obj_bn = $params['obj_bn'];
//售后申请单信息
$returnInfo = $returnObj->dump(array('return_bn'=>$obj_bn), '*');
if(empty($returnInfo)){
//已回写成功,删除失败记录
$apiModel->db->exec("DELETE FROM sdb_erpapi_api_fail WHERE id=".$params['id']);
$error_msg = '没有获取到售后申请单信息';
return false;
}
//check
if(!in_array($returnInfo['status'], array('3','4','6','7','8','9'))){
//单据已完成或已拒绝,删除失败记录
$apiModel->db->exec("DELETE FROM sdb_erpapi_api_fail WHERE id=".$params['id']);
$error_msg = '售后申请单状态不允许重试推送';
return false;
}
//重新推送发货状态给平台(无返回结果)
$result = kernel::single('ome_service_aftersale')->update_status($returnInfo['return_id']);
break;
case SHOP_REFUSE_RETURN_GOOD:
case SHOP_AFTERSALE_EXCHANGE_REFUSE:
//拒绝退货、换货状态
$returnObj = app::get('ome')->model('return_product');
$obj_bn = $params['obj_bn'];
//售后申请单信息
$returnInfo = $returnObj->dump(array('return_bn'=>$obj_bn), '*');
if(empty($returnInfo)){
//已回写成功,删除失败记录
$apiModel->db->exec("DELETE FROM sdb_erpapi_api_fail WHERE id=".$params['id']);
$error_msg = '没有获取到售后申请单信息';
return false;
}
//check
if(!in_array($returnInfo['status'], array('5'))){
//单据不是拒绝状态,删除失败记录
$apiModel->db->exec("DELETE FROM sdb_erpapi_api_fail WHERE id=".$params['id']);
$error_msg = '售后申请单状态不允许重试推送';
return false;
}
//重新推送发货状态给平台(无返回结果)
$result = kernel::single('ome_service_aftersale')->update_status($returnInfo['return_id'], '5');
break;
default:
# code...
break;
}
} catch (Exception $e) {
}
return true;
}
}