mirror of
https://gitee.com/ShopeX/OMS
synced 2026-04-21 20:35:31 +08:00
1. 【新增】售后单售后原因类型支持搜索
2. 【新增】手工创建订单折扣可输入正数 3. 【优化】盘点申请单确认 4. 【修复】采购退货单模拟出库失败问题 5. 【新增】订单金额客户实付与结算金额 6. 【优化】仓库发货统计报表物料名称显示 7. 【优化】自有仓储虚拟发货逻辑 8. 【修复】基础物料分类管理问题
This commit is contained in:
@@ -64,6 +64,7 @@ class erpapi_shop_response_process_aftersalev2 {
|
||||
switch($sdf['status']) {
|
||||
case '0':
|
||||
$upData = $this->_refundApplySdfToData($sdf);
|
||||
unset($upData['bool_type']); // 退款金额、原因或版本变化更新为未审核时不更改 bool_type,保留原值
|
||||
$memo = '(退款金额、原因或版本变化)退款申请单更新为未审核';
|
||||
break;
|
||||
default :
|
||||
@@ -71,6 +72,7 @@ class erpapi_shop_response_process_aftersalev2 {
|
||||
'status' => $sdf['status'],
|
||||
'source_status' => $sdf['source_status'], //平台状态
|
||||
'outer_lastmodify'=> $sdf['modified'],
|
||||
'cs_status' => $sdf['cs_status'],
|
||||
);
|
||||
if($sdf['refund_version_change']) {
|
||||
$upData['memo'] = $sdf['reason'];
|
||||
@@ -105,6 +107,10 @@ class erpapi_shop_response_process_aftersalev2 {
|
||||
if ($sdf['status'] == '3') {
|
||||
//延迟5分钟自动重新路由审核订单
|
||||
$sdf = array('op_type'=>'timing_confirm', 'timing_time'=>strtotime('5 minutes'), 'memo'=>'退款申请拒绝后重新路由');
|
||||
|
||||
//@todo:当系统设置里未开启[是否开启系统自动审核]时,未调用延迟自动审核;
|
||||
$sdf['cnAuto'] = 'true';
|
||||
|
||||
kernel::single('ome_order')->auto_order_combine($sdf['order']['order_id'], $sdf);
|
||||
}
|
||||
} else {
|
||||
@@ -123,7 +129,7 @@ class erpapi_shop_response_process_aftersalev2 {
|
||||
return array('rsp'=>'fail', 'msg'=>'退款申请单生成失败');
|
||||
}
|
||||
kernel::database()->commit($trans);
|
||||
|
||||
kernel::single('monitor_notice_refund_apply')->erpapi_create($insertData['apply_id']);
|
||||
$idBn = array(
|
||||
'apply_id' => $insertData['apply_id'],
|
||||
'refund_apply_bn' => $insertData['refund_apply_bn']
|
||||
@@ -140,7 +146,8 @@ class erpapi_shop_response_process_aftersalev2 {
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
kernel::single('ome_refund_apply')->updateOrderObjectsPayStatusByItemIds($insertData['apply_id']);
|
||||
|
||||
//识别是否天猫退款触发AG接口
|
||||
$noticeParams = array_merge($sdf, $idBn);
|
||||
$this->_noticeAg($noticeParams);
|
||||
@@ -148,8 +155,7 @@ class erpapi_shop_response_process_aftersalev2 {
|
||||
return array('rsp'=>'succ', 'msg'=>$memo);
|
||||
}
|
||||
|
||||
private function _refundApplySdfToData($sdf)
|
||||
{
|
||||
private function _getRefundRefer($sdf) {
|
||||
//退款来源(normal:普通退款,aftersale:售后仅退款,不退货;)
|
||||
if($sdf['refund_refer'] == 'aftersale'){
|
||||
$refund_refer = '1';
|
||||
@@ -161,6 +167,12 @@ class erpapi_shop_response_process_aftersalev2 {
|
||||
if($sdf['refund_to_returnProduct']) {
|
||||
$refund_refer = '0';
|
||||
}
|
||||
return $refund_refer;
|
||||
}
|
||||
|
||||
private function _refundApplySdfToData($sdf)
|
||||
{
|
||||
$refund_refer = $this->_getRefundRefer($sdf);
|
||||
|
||||
//oid子单过滤掉重复的oid
|
||||
//@todo:之前代码中--PKG组合商品退款时会保存多个oid; 本次只是过滤了重复的oid子单;
|
||||
@@ -195,6 +207,7 @@ class erpapi_shop_response_process_aftersalev2 {
|
||||
'source_status' => kernel::single('ome_refund_func')->get_source_status($sdf['source_status']),
|
||||
'tag_type' => ($sdf['tag_type'] ? $sdf['tag_type'] : '0'), //退款类型
|
||||
'jsrefund_flag' => ($sdf['jsrefund_flag'] ? $sdf['jsrefund_flag'] : '0'), //极速退款标识
|
||||
'cs_status' => $sdf['cs_status'],
|
||||
);
|
||||
|
||||
// 经销店铺的单据,delivery_mode冗余到退款单申请表
|
||||
@@ -298,11 +311,13 @@ class erpapi_shop_response_process_aftersalev2 {
|
||||
return array('rsp'=>'fail', 'msg'=>'退款单创建失败');
|
||||
}
|
||||
if ($refundApply) {
|
||||
$refund_refer = $this->_getRefundRefer($sdf);
|
||||
$filter = array(
|
||||
'apply_id' => $refundApply['apply_id'],
|
||||
);
|
||||
$updateData = array('status' => '4','refunded' => $sdf['refund_fee']);
|
||||
$updateData = array('status' => '4','refunded' => $sdf['refund_fee'], 'refund_refer' => $refund_refer, 'cs_status' => $sdf['cs_status']);
|
||||
app::get('ome')->model('refund_apply')->update($updateData,$filter);
|
||||
$refundApply = array_merge($refundApply, $updateData);
|
||||
app::get('ome')->model('operation_log')->write_log('refund_apply@ome', $refundApply['apply_id'], '退款成功');
|
||||
$msg .= " 更新退款申请单[{$refundApply['refund_apply_bn']}]为已退款";
|
||||
if ($refundApply['addon']) {
|
||||
@@ -345,7 +360,6 @@ class erpapi_shop_response_process_aftersalev2 {
|
||||
if($this->_updateOrderPayed($sdf['order']['order_id'],$sdf['refund_fee'],$must_pause)) {
|
||||
$msg .= ' 更新订单支付状态';
|
||||
}
|
||||
|
||||
//扣除原单的运费 要在原单退款单上加日志
|
||||
if($sdf['shop_type'] == 'website'){
|
||||
$this->_upOriginalOrder($sdf,$refundApply);
|
||||
@@ -397,7 +411,18 @@ class erpapi_shop_response_process_aftersalev2 {
|
||||
}
|
||||
//退款未退货
|
||||
$this->_refundNoreturn($sdf,$refundApply);
|
||||
|
||||
kernel::single('monitor_notice_refund_apply')->erpapi_refund($refundApply['apply_id']);
|
||||
|
||||
kernel::single('ome_refund_apply')->updateOrderObjectsPayStatusByItemIds($refundApply['apply_id']);
|
||||
// 增加service扩展点,允许外部service在退款成功后做自定义处理
|
||||
$services = kernel::servicelist('ome.service.refund.apply.accept.refund.after');
|
||||
if ($services) {
|
||||
foreach ($services as $service) {
|
||||
if (method_exists($service, 'after_refund')) {
|
||||
$service->after_refund($refundApply['apply_id']);
|
||||
}
|
||||
}
|
||||
}
|
||||
return array('rsp'=>'succ', 'msg'=>$msg);
|
||||
}
|
||||
|
||||
@@ -461,7 +486,7 @@ class erpapi_shop_response_process_aftersalev2 {
|
||||
$filter = array(
|
||||
'apply_id' => $refundApply['apply_id'],
|
||||
);
|
||||
$updateData = array('status' => '4','refunded' => $sdf['refund_fee']);
|
||||
$updateData = array('status' => '4','refunded' => $sdf['refund_fee'], 'cs_status' => $sdf['cs_status']);
|
||||
app::get('ome')->model('refund_apply')->update($updateData, $filter);
|
||||
|
||||
//logs
|
||||
@@ -498,6 +523,17 @@ class erpapi_shop_response_process_aftersalev2 {
|
||||
}
|
||||
kernel::single('ome_order_refund')->lanjieDelivery($refundApply['apply_id']);
|
||||
}
|
||||
kernel::single('monitor_notice_refund_apply')->erpapi_refund($refundApply['apply_id']);
|
||||
kernel::single('ome_refund_apply')->updateOrderObjectsPayStatusByItemIds($refundApply['apply_id']);
|
||||
// 增加service扩展点,允许外部service在退款成功后做自定义处理
|
||||
$services = kernel::servicelist('ome.service.refund.apply.accept.refund.after');
|
||||
if ($services) {
|
||||
foreach ($services as $service) {
|
||||
if (method_exists($service, 'after_refund')) {
|
||||
$service->after_refund($refundApply['apply_id']);
|
||||
}
|
||||
}
|
||||
}
|
||||
return array('rsp'=>'succ', 'msg'=>$msg);
|
||||
}
|
||||
|
||||
@@ -774,7 +810,7 @@ class erpapi_shop_response_process_aftersalev2 {
|
||||
$data['return_product_items'][] = array(
|
||||
'product_id' => $val['product_id'] ? $val['product_id'] : 0,
|
||||
'bn' => $val['bn'],
|
||||
'name' => $val['title'] ? $val['title']: $val['name'],
|
||||
'name' => $val['name'],
|
||||
'num' => $val['num'],
|
||||
'price' => $val['price'],
|
||||
'amount' => $val['amount'],
|
||||
@@ -1072,6 +1108,12 @@ class erpapi_shop_response_process_aftersalev2 {
|
||||
);
|
||||
$reshipObj->update($updateSdf, array('reship_id'=>$reship['reship_id']));
|
||||
kernel::single('console_reship')->releaseChangeFreeze($reship['reship_id']);
|
||||
// 退货单取消后的service扩展点
|
||||
foreach(kernel::servicelist('console.service.reship.cancel.after') as $object) {
|
||||
if(method_exists($object, 'cancel_reship_after')) {
|
||||
$object->cancel_reship_after($reship['reship_id']);
|
||||
}
|
||||
}
|
||||
}elseif($is_update_platform_status){
|
||||
//更新平台售后单状态(并标记异常)
|
||||
$updateSdf = array(
|
||||
@@ -1101,7 +1143,8 @@ class erpapi_shop_response_process_aftersalev2 {
|
||||
//自动审核标记
|
||||
if($sdf['reship']['is_check'] == '0'){
|
||||
$is_auto_confirm = true;
|
||||
}elseif($updateLogiResult && $sdf['reship']['reship_id']){
|
||||
}
|
||||
if($sdf['reship']['return_logi_name'] != $sdf['logistics_company'] || $sdf['reship']['return_logi_no'] != $sdf['logistics_no']) {
|
||||
//请求WMS更新最新物流单号
|
||||
$error_msg = '';
|
||||
kernel::single('ome_reship')->request_wms_returnorder($sdf['reship']['reship_id'], $error_msg);
|
||||
@@ -1192,6 +1235,10 @@ class erpapi_shop_response_process_aftersalev2 {
|
||||
$upData['platform_status'] = $sdf['platform_status'];
|
||||
$upData['is_modify'] = 'true';
|
||||
}
|
||||
if($reship['return_logi_no'] && $reship['return_logi_no'] == $sdf['delivery_logistics_no'] && $logisticsNo != $sdf['delivery_logistics_no']){
|
||||
$upData['flag_type'] = $reship['flag_type'] & (~ome_reship_const::__LANJIE_RUKU);
|
||||
$memo .= ',拦截入库标识已移除。';
|
||||
}
|
||||
//换货转退货更新类型
|
||||
if (isset($sdf['exchange_to_return']) && $sdf['exchange_to_return'] && $sdf['reship']['return_type'] == 'change') {
|
||||
$upData['return_type'] = 'return';
|
||||
@@ -1212,6 +1259,16 @@ class erpapi_shop_response_process_aftersalev2 {
|
||||
$operateLog = app::get('ome')->model('operation_log');
|
||||
$operateLog->write_log('reship@ome',$reship['reship_id'],$memo);
|
||||
$this->_updateReturnProductLogistics($reship['return_id'], $logisticsCompany, $logisticsNo,$sdf);
|
||||
// 物流单号重复检测打标(flag_type 位)
|
||||
if ($reship['reship_id']) {
|
||||
kernel::single('ome_reship')->markDuplicateReturnLogiNo($reship['reship_id'], $logisticsNo);
|
||||
}
|
||||
|
||||
foreach(kernel::servicelist('erpapi.service.aftersale.update.reship.logistics.after') as $object) {
|
||||
if(method_exists($object, 'after_update_logistics')){
|
||||
$object->after_update_logistics($reship['reship_id']);
|
||||
}
|
||||
}
|
||||
|
||||
return $rs;
|
||||
}
|
||||
@@ -1233,7 +1290,7 @@ class erpapi_shop_response_process_aftersalev2 {
|
||||
$is_update_platform_status = false;
|
||||
|
||||
$msg = '仅处理未审核、拒绝状态和物流信息';
|
||||
if($sdf['reship']['shipcompany'] != $sdf['logistics_company'] || $sdf['reship']['return_logi_no'] != $sdf['logistics_no']) {
|
||||
if($sdf['reship']['return_logi_name'] != $sdf['logistics_company'] || $sdf['reship']['return_logi_no'] != $sdf['logistics_no']) {
|
||||
if($this->_updateReshipLogistics($sdf)) {
|
||||
$msg = '更新物流信息成功';
|
||||
|
||||
@@ -1279,6 +1336,12 @@ class erpapi_shop_response_process_aftersalev2 {
|
||||
}
|
||||
|
||||
kernel::single('console_reship')->releaseChangeFreeze($sdf['reship']['reship_id']);
|
||||
// 退货单取消后的service扩展点
|
||||
foreach(kernel::servicelist('console.service.reship.cancel.after') as $object) {
|
||||
if(method_exists($object, 'cancel_reship_after')) {
|
||||
$object->cancel_reship_after($sdf['reship']['reship_id']);
|
||||
}
|
||||
}
|
||||
if ($sdf['return_product']) {
|
||||
$returnId = $sdf['return_product']['return_id'];
|
||||
$rpData = array('status' => '5', 'last_modified' => time());
|
||||
@@ -1376,6 +1439,11 @@ class erpapi_shop_response_process_aftersalev2 {
|
||||
$this->_insertReshipItems($reshipItems, $insertData['reship_id']);
|
||||
|
||||
$operateLog->write_log('reship@ome',$insertData['reship_id'], '新建退货单');
|
||||
foreach(kernel::servicelist('ome.service.reship.create.after') as $object) {
|
||||
if(method_exists($object, 'after_create')){
|
||||
$object->after_create($insertData['reship_id']);
|
||||
}
|
||||
}
|
||||
if ($sdf['return_product']['return_type']=='jdchange') {
|
||||
kernel::single('ome_return_product')->releaseChangeFreeze($insertData['return_id']);
|
||||
|
||||
@@ -1592,13 +1660,30 @@ class erpapi_shop_response_process_aftersalev2 {
|
||||
public function cleanReturnStatus($reship){
|
||||
$return_id = (int) $reship['return_id'];
|
||||
$reship_id = (int) $reship['reship_id'];
|
||||
$reship_bn = $reship['reship_bn'];
|
||||
$oReship = app::get('ome')->model('reship');
|
||||
$oOperation_log = app::get('ome')->model('operation_log');//写日志
|
||||
$oReship->db->exec('DELETE FROM sdb_ome_reship WHERE reship_id='.$reship_id);
|
||||
$oReship->db->exec('DELETE FROM sdb_ome_reship_items WHERE reship_id='.$reship_id);
|
||||
$oReship->db->exec('DELETE FROM sdb_ome_return_process WHERE reship_id='.$reship_id);
|
||||
$oReship->db->exec('DELETE FROM sdb_ome_return_process_items WHERE reship_id='.$reship_id);
|
||||
$memo = '退款原因、金额或版本变化,已生成退货单' . $reship['reship_bn'] . '清除';
|
||||
if($reship_id) {
|
||||
// 在作废 reship 数据之前,先释放库存冻结
|
||||
list($rs, $rsData) = kernel::single('console_reship')->releaseChangeFreeze($reship_id);
|
||||
if($rs == false){
|
||||
// 释放失败记录日志,但不影响作废操作
|
||||
$oOperation_log->write_log('reship@ome', $reship_id, '释放库存冻结失败:'.($rsData['msg'] ? $rsData['msg'] : ''));
|
||||
}
|
||||
$updateData = array(
|
||||
'return_id' => 0,
|
||||
'is_check' => 5,
|
||||
'reship_bn' => $reship_bn . '_' . $reship_id
|
||||
);
|
||||
$oReship->update($updateData, array('reship_id'=>$reship_id));
|
||||
}
|
||||
$memo = '退款原因、金额或版本变化,已生成退货单' . $reship['reship_bn'] . '作废处理';
|
||||
// 增加调用所有 cleanReturnStatus 扩展 service
|
||||
foreach(kernel::servicelist('erpapi.service.aftersale.clean.return.status.after') as $object) {
|
||||
if (method_exists($object, 'cleanReturnStatusAfter')) {
|
||||
$object->cleanReturnStatusAfter($reship);
|
||||
}
|
||||
}
|
||||
$oOperation_log->write_log('return@ome',$return_id,$memo);
|
||||
}
|
||||
|
||||
@@ -1707,7 +1792,6 @@ class erpapi_shop_response_process_aftersalev2 {
|
||||
*/
|
||||
public function _autoEditorder($sdf, &$error_msg=null, &$is_abnormal=false)
|
||||
{
|
||||
|
||||
$orderObj = app::get('ome')->model('orders');
|
||||
$orderObjMdl = app::get('ome')->model('order_objects');
|
||||
$orderItemObj = app::get('ome')->model("order_items");
|
||||
@@ -1721,7 +1805,7 @@ class erpapi_shop_response_process_aftersalev2 {
|
||||
$order_detail = $orderObj->dump($order_filter, '*');
|
||||
|
||||
//check支持的平台
|
||||
if(!in_array($order_detail['shop_type'], array('taobao','tmall','luban','website_d1m','website','weimobv','youzan','website_v2','pinduoduo','wxshipin','meituan4sg'))){
|
||||
if(!in_array($order_detail['shop_type'], array('taobao','tmall','luban','website_d1m','website','weimobv','weimobr','youzan','website_v2','pinduoduo','wxshipin','meituan4sg'))){
|
||||
$error_msg = $order_detail['shop_type'] . '平台订单不支持编辑';
|
||||
return false;
|
||||
}
|
||||
@@ -1797,13 +1881,11 @@ class erpapi_shop_response_process_aftersalev2 {
|
||||
{
|
||||
foreach($items as $item)
|
||||
{
|
||||
|
||||
$refund_items = $refund_item_list[$item['oid']] ? $refund_item_list[$item['oid']] : array();
|
||||
if($item['oid'] != $sdf['oid'] && !$refund_items){
|
||||
continue;
|
||||
}
|
||||
|
||||
|
||||
//天猫权益金
|
||||
if ($sdf['refund_fee'] != $item['divide_order_fee'] && $sdf['tmall_mcard_pz_sp']){
|
||||
$sdf['refund_fee'] = $sdf['refund_fee'] + $sdf['tmall_mcard_pz_sp'];
|
||||
@@ -1813,7 +1895,7 @@ class erpapi_shop_response_process_aftersalev2 {
|
||||
if ($sdf['refund_fee'] != $item['divide_order_fee'] && $sdf['isPriceProtect'] !== true && $item['refund_money']){
|
||||
$sdf['refund_fee'] = $sdf['refund_fee'] + $item['refund_money'];
|
||||
}
|
||||
|
||||
|
||||
if ($sdf['shop_type'] == 'website' && $refund_items) {
|
||||
$refund_fee = array_sum(array_column($refund_items,'amount'));
|
||||
$sdf['refund_fee'] = number_format($refund_fee, 3, '.', '');
|
||||
@@ -1828,9 +1910,8 @@ class erpapi_shop_response_process_aftersalev2 {
|
||||
if($oObjRow && $oObjRow['pay_status'] != 5) {
|
||||
$update_sql = "UPDATE sdb_ome_order_objects SET pay_status='5' WHERE order_id=". $order_id ." AND obj_id=". $item['obj_id'];
|
||||
$orderObj->db->exec($update_sql);
|
||||
$order_sql = "UPDATE sdb_ome_orders SET pmt_goods=pmt_goods-".$item['pmt_price'].", pmt_order=pmt_order-".($item['part_mjz_discount']?:0).", cost_item=cost_item-".$item['amount'];
|
||||
$order_sql .= ", total_amount=total_amount-".$sdf['refund_fee'].", final_amount=final_amount-".$sdf['refund_fee']." WHERE order_id=". $order_id;
|
||||
$orderObj->db->exec($order_sql);
|
||||
//退款单先下来,订单单拉商品优惠在矩阵已经处理过了
|
||||
kernel::single('ome_order_object_amount')->recalculateOrderAmount($order_id, [$item], false);
|
||||
$edit_flag = true;
|
||||
}
|
||||
continue;
|
||||
@@ -1956,10 +2037,7 @@ class erpapi_shop_response_process_aftersalev2 {
|
||||
|
||||
|
||||
//更新订单金额
|
||||
$order_sql = "UPDATE sdb_ome_orders SET pmt_goods=pmt_goods-".$item['pmt_price'].", pmt_order=pmt_order-".($item['part_mjz_discount']?:0).", cost_item=cost_item-".$item['amount'];
|
||||
$order_sql .= ", total_amount=total_amount-".$sdf['refund_fee'].", final_amount=final_amount-".$sdf['refund_fee']." WHERE order_id=". $order_id;
|
||||
|
||||
$orderObj->db->exec($order_sql);
|
||||
kernel::single('ome_order_object_amount')->recalculateOrderAmount($order_id, [$item]);
|
||||
|
||||
// custom 根据子订单id查询是否有关联赠品
|
||||
$this->__deletePlatformGift($item['oid'], $order_id, $needChangeFreezeItem);
|
||||
@@ -2038,8 +2116,15 @@ class erpapi_shop_response_process_aftersalev2 {
|
||||
//编辑订单删除退款商品后,重新调用赠品规则
|
||||
$this->_dealCrmGift($order_id);
|
||||
|
||||
// [大家电订单]商品被修改,订单需要重新预约时间
|
||||
kernel::single('ome_order_reservation')->againReservation($order_id, 'goods_change');
|
||||
|
||||
//延迟5分钟自动重新路由审核订单
|
||||
$sdf = array('op_type'=>'timing_confirm', 'timing_time'=>strtotime('5 minutes'), 'memo'=>'退款完成编辑订单后重新路由');
|
||||
|
||||
//@todo:当系统设置里未开启[是否开启系统自动审核]时,未调用延迟自动审核;
|
||||
$sdf['cnAuto'] = 'true';
|
||||
|
||||
kernel::single('ome_order')->auto_order_combine($order_id, $sdf);
|
||||
}else{
|
||||
//订单退款商品无法删除,如有CRM赠品则打标记
|
||||
@@ -2346,14 +2431,6 @@ class erpapi_shop_response_process_aftersalev2 {
|
||||
$needChangeFreezeItem[] = $giftOrderObjItem;
|
||||
}
|
||||
|
||||
// 订单金额处理
|
||||
$giftOrderObject['part_mjz_discount'] = $giftOrderObject['part_mjz_discount'] ? $giftOrderObject['part_mjz_discount'] : 0;
|
||||
$giftOrderObject['divide_order_fee'] = $giftOrderObject['divide_order_fee'] ? $giftOrderObject['divide_order_fee'] : 0;
|
||||
$giftOrderObject['amount'] = $giftOrderObject['amount'] ? $giftOrderObject['amount'] : 0;
|
||||
$giftOrderObject['pmt_price'] = $giftOrderObject['pmt_price'] ? $giftOrderObject['pmt_price'] : 0;
|
||||
|
||||
$sql = "update sdb_ome_orders set pmt_goods=pmt_goods-" . $giftOrderObject['pmt_price'] . ",pmt_order=pmt_order-" .($giftOrderObject['part_mjz_discount']?:0). ",cost_item=cost_item-" . $giftOrderObject['amount'] . ",total_amount=total_amount-" . $giftOrderObject['divide_order_fee'] . ",final_amount=final_amount-" . $giftOrderObject['divide_order_fee'] . " where order_id=" . $order_id;
|
||||
kernel::database()->exec($sql);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -37,6 +37,7 @@ class erpapi_shop_response_process_bookingrefund{
|
||||
return array('rsp'=>'succ', 'msg'=>'订单暂停成功');
|
||||
}
|
||||
}
|
||||
|
||||
//发起暂停订单
|
||||
$pause_status = false;
|
||||
if ($orderInfo["status"] == "active" && $orderInfo["ship_status"] == "0"){
|
||||
@@ -82,6 +83,26 @@ class erpapi_shop_response_process_bookingrefund{
|
||||
}
|
||||
}
|
||||
|
||||
public function fxordermsg($params){
|
||||
// shopbee供销供应商订单信息同步
|
||||
$order_bn = $params['order_bn'];
|
||||
$orderModel = app::get('ome')->model('orders');
|
||||
$orderInfo = $orderModel->dump(array('order_bn' => $order_bn, 'shop_id'=>$params['shop_id']), 'order_id,order_bn,shop_id,status,ship_status,order_bool_type,payed,org_id');
|
||||
if(!$orderInfo || !$orderInfo['order_id']){
|
||||
return array('rsp'=>'fail', 'msg'=>'订单不存在');
|
||||
}
|
||||
|
||||
// 暂时只处理sellerComments添加到订单备注
|
||||
if (!empty($params['sellerComments'])) {
|
||||
list($success, $message) = kernel::single('ome_order_marktext')->add($orderInfo['order_id'], $params['sellerComments'], '供销供应商');
|
||||
if (!$success) {
|
||||
return array('rsp' => 'fail', 'msg' => $message);
|
||||
}
|
||||
}
|
||||
|
||||
return array('rsp' => 'succ', 'msg' => '订单信息同步成功');
|
||||
}
|
||||
|
||||
protected function ordermsg_back($orderInfo, $params) {
|
||||
$orderExtend = app::get('ome')->model('order_extend')->db_dump($orderInfo['order_id'], 'extend_field');
|
||||
$sdf = [
|
||||
@@ -107,10 +128,10 @@ class erpapi_shop_response_process_bookingrefund{
|
||||
'memo' => '平台已经完成退款且关闭了交易订单',
|
||||
'trade_no' => $sdf['order_bn'],
|
||||
'modifiey' => time(),
|
||||
'payment' => '',
|
||||
'payment' => 0,
|
||||
't_ready' => time(),
|
||||
't_sent' => time(),
|
||||
't_received' => '',
|
||||
't_received' => 0,
|
||||
'org_id' => $sdf['org_id'],
|
||||
'refund_refer' => '0', //退款来源
|
||||
);
|
||||
@@ -146,4 +167,6 @@ class erpapi_shop_response_process_bookingrefund{
|
||||
|
||||
return $rsp;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -563,11 +563,6 @@ class erpapi_shop_response_process_exchange {
|
||||
'return_logi_no'=>$logisticsNo,
|
||||
'outer_lastmodify'=>$sdf['modified'],
|
||||
);
|
||||
//退换货自动审批(系统-->退换货自动审核设置-->是否启用退换货自动审批)
|
||||
$is_auto_approve = app::get('ome')->getConf('return.auto_approve');
|
||||
if($is_auto_approve == 'on'){
|
||||
kernel::single('ome_reship')->batch_reship_queue($sdf['reship']['reship_id']);
|
||||
}
|
||||
|
||||
//flag
|
||||
$is_update_logi = true;
|
||||
@@ -587,6 +582,10 @@ class erpapi_shop_response_process_exchange {
|
||||
$rs = app::get('ome')->model('reship')->update($upData,array('reship_id'=>$reship['reship_id']));
|
||||
$operateLog = app::get('ome')->model('operation_log');
|
||||
$operateLog->write_log('reship@ome',$reship['reship_id'],$memo);
|
||||
// 物流单号重复检测打标(flag_type 位)
|
||||
if ($reship['reship_id']) {
|
||||
kernel::single('ome_reship')->markDuplicateReturnLogiNo($reship['reship_id'], $logisticsNo);
|
||||
}
|
||||
if ($returnData){
|
||||
app::get('ome')->model('return_product')->update($returnData,array('return_id'=>$sdf['return_product']['return_id']));
|
||||
$operateLog->write_log('return@ome', $sdf['return_product']['return_id'],'版本变化更新成接受申请状态');
|
||||
@@ -594,6 +593,16 @@ class erpapi_shop_response_process_exchange {
|
||||
|
||||
//请求WMS更新最新物流单号
|
||||
if($is_update_logi){
|
||||
//退换货自动审批(系统-->退换货自动审核设置-->是否启用退换货自动审批)
|
||||
$is_auto_approve = app::get('ome')->getConf('return.auto_approve');
|
||||
if($is_auto_approve == 'on'){
|
||||
kernel::single('ome_reship')->batch_reship_queue($sdf['reship']['reship_id']);
|
||||
}
|
||||
foreach(kernel::servicelist('erpapi.service.aftersale.update.reship.logistics.after') as $object) {
|
||||
if(method_exists($object, 'after_update_logistics')){
|
||||
$object->after_update_logistics($reship['reship_id']);
|
||||
}
|
||||
}
|
||||
$error_msg = '';
|
||||
kernel::single('ome_reship')->request_wms_returnorder($reship['reship_id'], $error_msg);
|
||||
}
|
||||
|
||||
@@ -27,6 +27,9 @@ class erpapi_shop_response_process_order
|
||||
//店铺ID
|
||||
public $_shop_id = null;
|
||||
|
||||
// 是否更新订单中的商品
|
||||
protected $_is_update_change_goods = false;
|
||||
|
||||
/**
|
||||
* undocumented function
|
||||
*
|
||||
@@ -75,7 +78,6 @@ class erpapi_shop_response_process_order
|
||||
|
||||
$errorinfo = '';
|
||||
$rs = app::get('ome')->model('orders')->create_order($ordersdf, $errorinfo);
|
||||
|
||||
if (!$rs) {
|
||||
if (!$errorinfo) {
|
||||
$errorinfo = kernel::database()->errorinfo();
|
||||
@@ -102,7 +104,7 @@ class erpapi_shop_response_process_order
|
||||
// 更新订单下载时间
|
||||
$shopModel = app::get('ome')->model('shop');
|
||||
$shopModel->update(array('last_download_time'=>time()), array('shop_id'=>$ordersdf['shop_id']));
|
||||
|
||||
|
||||
if($service = kernel::servicelist('service.order')){
|
||||
foreach ($service as $instance){
|
||||
if (method_exists($instance, 'after_add_order')){
|
||||
@@ -110,8 +112,16 @@ class erpapi_shop_response_process_order
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#抖音全链路 已转单
|
||||
|
||||
//[SAP创建]调用service进行SAP创建
|
||||
foreach(kernel::servicelist('ome.service.order.create.after') as $object)
|
||||
{
|
||||
if(method_exists($object, 'after_create')){
|
||||
$object->after_create($ordersdf);
|
||||
}
|
||||
}
|
||||
|
||||
// 抖音全链路 已转单
|
||||
kernel::single('ome_event_trigger_shop_order')->order_message_produce($ordersdf['order_id'],'build');
|
||||
|
||||
# 闪购订单确认
|
||||
@@ -163,7 +173,23 @@ class erpapi_shop_response_process_order
|
||||
$ordersdf['shop_id'] = $this->_shop_id;
|
||||
}
|
||||
|
||||
// [更新]预约订单的相关状态
|
||||
$error_msg = '';
|
||||
kernel::single('ome_order_reservation')->operateReservationOrder($ordersdf, $error_msg);
|
||||
|
||||
// 是否订单商品被修改
|
||||
$is_change_order_goods = false;
|
||||
if($this->_is_update_change_goods){
|
||||
$is_change_order_goods = true;
|
||||
}
|
||||
|
||||
//[SAP更新]调用service进行SAP更新
|
||||
foreach(kernel::servicelist('ome.service.order.update.after') as $object)
|
||||
{
|
||||
if(method_exists($object, 'afterUpdateOrder')){
|
||||
$object->afterUpdateOrder($ordersdf['order_id'], $is_change_order_goods);
|
||||
}
|
||||
}
|
||||
return array('rsp' => 'succ','msg'=>$msg,);
|
||||
}
|
||||
|
||||
@@ -174,7 +200,7 @@ class erpapi_shop_response_process_order
|
||||
* @author
|
||||
* */
|
||||
private function _afterUpdate($ordersdf)
|
||||
{
|
||||
{
|
||||
$orderModel = app::get('ome')->model('orders');
|
||||
|
||||
// 如果订单已经拆分
|
||||
@@ -189,10 +215,47 @@ class erpapi_shop_response_process_order
|
||||
|
||||
//shop_id
|
||||
$this->_shop_id = $tgorder['shop_id'];
|
||||
|
||||
//检测source_status变化,如果从WAIT_SELLER_SEND_GOODS变为其他状态,触发重新审单
|
||||
// 注意:在luban/response/order.php的_operationSel()中,source_status已经被更新到数据库
|
||||
// 所以这里需要从$ordersdf中获取更新前的old_source_status和更新后的new_source_status进行比较
|
||||
if (isset($ordersdf['old_source_status']) && isset($ordersdf['new_source_status'])) {
|
||||
$oldSourceStatus = $ordersdf['old_source_status'];
|
||||
$newSourceStatus = $ordersdf['new_source_status'];
|
||||
|
||||
// 只处理 Luban 订单
|
||||
if ($tgorder['shop_type'] == 'luban' && $tgorder['createway'] == 'matrix') {
|
||||
// 如果从 WAIT_SELLER_SEND_GOODS 变为其他状态
|
||||
if ($oldSourceStatus == 'WAIT_SELLER_SEND_GOODS'
|
||||
&& $newSourceStatus != 'WAIT_SELLER_SEND_GOODS') {
|
||||
|
||||
// 触发重新审单(延迟5分钟)
|
||||
if ($tgorder['status'] == 'active'
|
||||
&& in_array($tgorder['process_status'], array('unconfirmed', 'confirmed'))
|
||||
&& $tgorder['pay_status'] == '1'
|
||||
&& $tgorder['ship_status'] == '0') {
|
||||
|
||||
//订单恢复暂停状态
|
||||
$orderModel->renewOrder($tgorder['order_id'], '平台订单状态更新自动');
|
||||
|
||||
//延迟5分钟自动重新路由审核订单
|
||||
$sdf = array(
|
||||
'op_type' => 'timing_confirm',
|
||||
'timing_time' => strtotime('5 minutes'),
|
||||
'memo' => '平台订单状态从WAIT_SELLER_SEND_GOODS更新为'.$newSourceStatus.',触发重新路由',
|
||||
'is_check_last_time' => true
|
||||
);
|
||||
kernel::single('ome_order')->auto_order_combine($tgorder['order_id'], $sdf);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//是否允许自动审核订单
|
||||
$is_review_order = false;
|
||||
$cnAuto = 'false'; // 未开启自动审单的情况下是否允许自动审核订单
|
||||
$renewMemo = '';
|
||||
|
||||
// 写一下日志
|
||||
$write_log = array();
|
||||
if ($ordersdf['consignee']) {
|
||||
@@ -204,7 +267,9 @@ class erpapi_shop_response_process_order
|
||||
);
|
||||
|
||||
$is_review_order = true;
|
||||
$is_change_address = true;
|
||||
$renewMemo .= '地址变更';
|
||||
$cnAuto = 'true';
|
||||
}
|
||||
|
||||
if ($ordersdf['mark_text']) {
|
||||
@@ -238,6 +303,9 @@ class erpapi_shop_response_process_order
|
||||
);
|
||||
|
||||
$is_review_order = false;
|
||||
|
||||
// 订单商品信息修改
|
||||
$this->_is_update_change_goods = true;
|
||||
}
|
||||
|
||||
if ($ordersdf['order_bool_type'] & ome_order_bool_type::__UPDATEITEM_CODE) {
|
||||
@@ -249,6 +317,7 @@ class erpapi_shop_response_process_order
|
||||
);
|
||||
|
||||
$is_review_order = true;
|
||||
$is_change_goods = true;
|
||||
$renewMemo .= 'sku替换';
|
||||
}
|
||||
|
||||
@@ -325,11 +394,12 @@ class erpapi_shop_response_process_order
|
||||
$orderModel->rebackDeliveryByOrderId($tgorder['order_id']);
|
||||
|
||||
//订单恢复暂停状态
|
||||
$orderModel->renewOrder($tgorder['order_id']);
|
||||
$orderModel->renewOrder($tgorder['order_id'], '平台更新订单,撤消发货单成功');
|
||||
|
||||
//延迟5分钟自动重新路由审核订单
|
||||
//@todo:防止有退款,并发导致明细未删除生成了发货单;
|
||||
$sdf = array('op_type'=>'timing_confirm', 'timing_time'=>strtotime('5 minutes'), 'memo'=>'更新订单撤销发货单后重新路由', 'is_check_last_time'=>true);
|
||||
$cnAuto == 'true' && $sdf['cnAuto'] = 'true';
|
||||
kernel::single('ome_order')->auto_order_combine($tgorder['order_id'], $sdf);
|
||||
|
||||
return true;
|
||||
@@ -354,11 +424,22 @@ class erpapi_shop_response_process_order
|
||||
//延迟5分钟自动重新路由审核订单
|
||||
//@todo:防止有退款,并发导致明细未删除生成了发货单;
|
||||
$sdf = array('op_type'=>'timing_confirm', 'timing_time'=>strtotime('5 minutes'), 'memo'=>'订单更新后重新路由', 'is_check_last_time'=>true);
|
||||
|
||||
//@todo:当系统设置里未开启[是否开启系统自动审核]时,未调用延迟自动审核;
|
||||
$sdf['cnAuto'] = 'true';
|
||||
|
||||
kernel::single('ome_order')->auto_order_combine($tgorder['order_id'], $sdf);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// [大家电]收货人信息或SKU商品变更,重新进行预约
|
||||
if($is_change_address){
|
||||
kernel::single('ome_order_reservation')->againReservation($tgorder['order_id'], 'address_change');
|
||||
}elseif($is_change_goods){
|
||||
kernel::single('ome_order_reservation')->againReservation($tgorder['order_id'], 'goods_change');
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -581,6 +662,9 @@ class erpapi_shop_response_process_order
|
||||
|
||||
kernel::single('ome_batch_order')->create_refund($sdf['order_id']);
|
||||
|
||||
// [更新]预约订单取消状态
|
||||
$error_msg = '';
|
||||
kernel::single('ome_order_reservation')->operateReservationOrder($sdf, $error_msg);
|
||||
|
||||
$msg = '订单取消成功';
|
||||
|
||||
|
||||
@@ -90,8 +90,10 @@ class erpapi_shop_response_process_qianniu extends erpapi_shop_response_abstract
|
||||
}
|
||||
}
|
||||
|
||||
// [大家电]收货人信息变更后,重新进行预约
|
||||
kernel::single('ome_order_reservation')->againReservation($order_id, 'address_change');
|
||||
|
||||
return array('rsp'=>'succ','msg'=>'千牛/平台改地址成功');
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
439
app/erpapi/lib/shop/response/process/reshipping.php
Normal file
439
app/erpapi/lib/shop/response/process/reshipping.php
Normal file
@@ -0,0 +1,439 @@
|
||||
<?php
|
||||
/**
|
||||
* 补寄申请业务处理
|
||||
*
|
||||
* @category
|
||||
* @package
|
||||
* @author
|
||||
* @version $Id: Z
|
||||
*/
|
||||
class erpapi_shop_response_process_reshipping
|
||||
{
|
||||
/**
|
||||
* 补寄申请业务处理
|
||||
*
|
||||
* @param array $sdf 格式化后的补寄申请数据(已经过参数验证)
|
||||
* @return array
|
||||
*/
|
||||
public function add($sdf)
|
||||
{
|
||||
try {
|
||||
// 获取店铺ID
|
||||
$shop_id = $sdf['shop_id'];
|
||||
if (empty($shop_id)) {
|
||||
return array('rsp' => 'fail', 'msg' => '店铺ID不能为空');
|
||||
}
|
||||
|
||||
// 查找关联订单
|
||||
$order_id = $this->_getOrderId($sdf, $shop_id);
|
||||
if (empty($order_id)) {
|
||||
return array('rsp' => 'fail', 'msg' => '未找到关联订单,订单号:' . ($sdf['alipay_no'] ?: $sdf['biz_order_id']));
|
||||
}
|
||||
|
||||
// 状态值映射
|
||||
$status = $this->_mapStatus($sdf['status']);
|
||||
if ($status === false) {
|
||||
return array('rsp' => 'fail', 'msg' => '未知的状态值:' . $sdf['status']);
|
||||
}
|
||||
|
||||
$reshippingData = $this->_formatReshippingData($sdf, $order_id);
|
||||
// 保存或更新补寄申请单
|
||||
$reshippingModel = app::get('ome')->model('return_reshipping');
|
||||
$existingReshipping = $reshippingModel->dump(array(
|
||||
'reshipping_bn' => $sdf['dispute_id'],
|
||||
'shop_id' => $shop_id,
|
||||
));
|
||||
|
||||
if (!$existingReshipping) {
|
||||
$existingReshipping = $reshippingData;
|
||||
$existingReshipping['status'] = '0';
|
||||
$rsTran = kernel::database()->beginTransaction();
|
||||
$reshipping_id = $reshippingModel->insert($existingReshipping);
|
||||
if (!$reshipping_id) {
|
||||
kernel::database()->rollBack();
|
||||
return array('rsp' => 'fail', 'msg' => '保存补寄申请单失败');
|
||||
}
|
||||
// 处理商品信息
|
||||
if (!empty($sdf['bought_sku']) || !empty($sdf['new_bought_sku'])) {
|
||||
$this->_saveItems($reshipping_id, $sdf);
|
||||
}
|
||||
kernel::database()->commit($rsTran);
|
||||
$memo = '创建补寄申请单';
|
||||
// 记录操作日志
|
||||
$operationLog = app::get('ome')->model('operation_log');
|
||||
$operationLog->write_log('return_reshipping@ome', $reshipping_id, $memo);
|
||||
|
||||
// 如果状态为0,直接返回结果
|
||||
if ($status == '0') {
|
||||
return array('rsp' => 'succ', 'msg' => $memo, 'data' => array('reshipping_id' => $reshipping_id, 'reshipping_bn' => $sdf['dispute_id']));
|
||||
}
|
||||
}
|
||||
$reshippingData['status'] = $status;
|
||||
$reshippingData['bought_sku'] = $sdf['bought_sku'];
|
||||
$reshippingData['new_bought_sku'] = $sdf['new_bought_sku'];
|
||||
return $this->_reshippingUpdateStatus($reshippingData, $existingReshipping);
|
||||
|
||||
} catch (Exception $e) {
|
||||
return array('rsp' => 'fail', 'msg' => '处理补寄申请失败:' . $e->getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 查找关联订单ID
|
||||
*
|
||||
* @param array $sdf
|
||||
* @param int $shop_id
|
||||
* @return int|false
|
||||
*/
|
||||
private function _getOrderId($sdf, $shop_id)
|
||||
{
|
||||
$orderModel = app::get('ome')->model('orders');
|
||||
|
||||
// 优先使用alipay_no(主订单号)
|
||||
if (!empty($sdf['alipay_no'])) {
|
||||
$order = $orderModel->dump(array(
|
||||
'order_bn' => $sdf['alipay_no'],
|
||||
'shop_id' => $shop_id,
|
||||
), 'order_id');
|
||||
|
||||
if ($order && $order['order_id']) {
|
||||
return $order['order_id'];
|
||||
}
|
||||
}
|
||||
|
||||
// 使用biz_order_id(子订单号)查找
|
||||
if (!empty($sdf['biz_order_id'])) {
|
||||
// 先通过order_objects表查找
|
||||
$orderObjectsModel = app::get('ome')->model('order_objects');
|
||||
$obj = $orderObjectsModel->dump(array(
|
||||
'oid' => $sdf['biz_order_id'],
|
||||
'shop_id' => $shop_id,
|
||||
), 'order_id');
|
||||
|
||||
if ($obj && $obj['order_id']) {
|
||||
return $obj['order_id'];
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* 状态值映射
|
||||
*
|
||||
* @param string $platformStatus 平台状态字符串
|
||||
* @return string|false 数据库状态值
|
||||
*/
|
||||
private function _mapStatus($platformStatus)
|
||||
{
|
||||
if (empty($platformStatus)) {
|
||||
return '0'; // 默认补寄待处理
|
||||
}
|
||||
|
||||
$status_mapping = array(
|
||||
'WAIT_SELLER_AGREE' => '0', // 补寄待处理
|
||||
'WAIT_SELLER_SEND_GOODS' => '1', // 等待卖家发货
|
||||
'WAIT_BUYER_CONFIRM_REDO_SEND_GOODS' => '2', // 等待买家收货
|
||||
'SUCCESS' => '3', // 补寄成功
|
||||
'SELLER_REFUSE_BUYER' => '4', // 卖家拒绝补寄
|
||||
'CLOSED' => '5', // 补寄关闭
|
||||
'EXCHANGE_TRANSFORM_TO_REFUND' => '6', // 转退款
|
||||
);
|
||||
|
||||
return isset($status_mapping[$platformStatus]) ? $status_mapping[$platformStatus] : false;
|
||||
}
|
||||
|
||||
/**
|
||||
* 格式化补寄申请单数据(不包含状态)
|
||||
*
|
||||
* @param array $sdf
|
||||
* @param int $order_id
|
||||
* @return array
|
||||
*/
|
||||
private function _formatReshippingData($sdf, $order_id)
|
||||
{
|
||||
$orderModel = app::get('ome')->model('orders');
|
||||
$order = $orderModel->dump(array('order_id' => $order_id), 'order_bn,platform_order_bn');
|
||||
|
||||
$data = array(
|
||||
'reshipping_bn' => $sdf['dispute_id'],
|
||||
'shop_id' => $sdf['shop_id'],
|
||||
'shop_type' => $sdf['shop_type'],
|
||||
'order_id' => $order_id,
|
||||
'order_bn' => $order['order_bn'] ?: '',
|
||||
'platform_order_bn' => $order['platform_order_bn'] ?: $sdf['alipay_no'],
|
||||
'source' => 'matrix',
|
||||
'buyer_address' => $sdf['buyer_address'] ?: '',
|
||||
'buyer_province' => $sdf['buyer_province'] ?: '',
|
||||
'buyer_city' => $sdf['buyer_city'] ?: '',
|
||||
'buyer_district' => $sdf['buyer_district'] ?: '',
|
||||
'buyer_town' => $sdf['buyer_town'] ?: '',
|
||||
'buyer_phone' => $sdf['buyer_phone'] ?: '',
|
||||
'buyer_name' => $sdf['buyer_name'] ?: '',
|
||||
'buyer_open_uid' => $sdf['buyer_open_uid'] ?: '',
|
||||
'oaid' => $sdf['oaid'] ?: '',
|
||||
'real_receiver_open_id' => $sdf['real_receiver_open_id'] ?: '',
|
||||
'real_receiver_display_nick' => $sdf['real_receiver_display_nick'] ?: '',
|
||||
'reason' => $sdf['reason'] ?: '',
|
||||
'desc' => $sdf['desc'] ?: '',
|
||||
'refund_phase' => $sdf['refund_phase'] ?: '',
|
||||
'cs_status' => $sdf['cs_status'] ?: '',
|
||||
'advance_status' => $sdf['advance_status'] ?: '',
|
||||
'operation_contraint' => $sdf['operation_contraint'] ?: '',
|
||||
'logi_name' => $sdf['logi_name'] ?: '',
|
||||
'logi_no' => $sdf['logi_no'] ?: '',
|
||||
'refuse_reason' => $sdf['refuse_reason'] ?: '',
|
||||
'refuse_reason_id' => $sdf['refuse_reason_id'] ?: '',
|
||||
'extend_field' => $sdf['extend_field'] ?: '',
|
||||
);
|
||||
|
||||
// 时间信息
|
||||
if ($sdf['created']) {
|
||||
$data['outer_create_time'] = kernel::single('ome_func')->date2time($sdf['created']);
|
||||
}
|
||||
if ($sdf['modified']) {
|
||||
$data['outer_modified_time'] = kernel::single('ome_func')->date2time($sdf['modified']);
|
||||
}
|
||||
if ($sdf['time_out']) {
|
||||
$data['time_out'] = kernel::single('ome_func')->date2time($sdf['time_out']);
|
||||
}
|
||||
|
||||
return $data;
|
||||
}
|
||||
|
||||
/**
|
||||
* 更新补寄申请单状态
|
||||
*
|
||||
* @param array $reshippingData 格式化后的补寄申请数据
|
||||
* @param array $existingReshipping 已存在的补寄申请数据
|
||||
* @return array
|
||||
*/
|
||||
private function _reshippingUpdateStatus($reshippingData, $existingReshipping)
|
||||
{
|
||||
$status = $reshippingData['status'];
|
||||
if($status != 0){
|
||||
if($status == $existingReshipping['status']){
|
||||
return ['rsp' => 'fail', 'msg' => '状态未发生变化'];
|
||||
}
|
||||
}
|
||||
$outerModifiedTime = $reshippingData['outer_modified_time'];
|
||||
$reshippingModel = app::get('ome')->model('return_reshipping');
|
||||
$reshipping_id = $existingReshipping['reshipping_id'];
|
||||
$operateLog = app::get('ome')->model('operation_log');
|
||||
switch($status) {
|
||||
case '0':
|
||||
if($existingReshipping['status'] > 0){
|
||||
return ['rsp' => 'fail', 'msg' => '已存在补寄申请单不能更改,状态为:' . $existingReshipping['status']];
|
||||
}
|
||||
if($reshippingData['outer_modified_time'] <= $existingReshipping['outer_modified_time']){
|
||||
return ['rsp' => 'fail', 'msg' => '更新时间未变化'];
|
||||
}
|
||||
$rsTran = kernel::database()->beginTransaction();
|
||||
$rs = $reshippingModel->update($reshippingData, array('reshipping_id' => $reshipping_id, 'status' => $status));
|
||||
// 防并发:检查更新影响行数
|
||||
if(is_bool($rs) || (is_numeric($rs) && $rs <= 0)) {
|
||||
kernel::database()->rollBack();
|
||||
if(is_numeric($rs) && $rs == 0) {
|
||||
return ['rsp' => 'fail', 'msg' => '补寄申请单状态已被其他进程更新,更新失败'];
|
||||
}
|
||||
return ['rsp' => 'fail', 'msg' => '更新补寄申请单失败'];
|
||||
}
|
||||
$this->_saveItems($reshipping_id, $reshippingData);
|
||||
kernel::database()->commit($rsTran);
|
||||
$memo = '变更补寄单信息成功';
|
||||
$operateLog->write_log('return_reshipping@ome', $reshipping_id, $memo);
|
||||
return ['rsp' => 'succ', 'msg' => $memo];
|
||||
|
||||
case '1':
|
||||
if($existingReshipping['status'] != 0){
|
||||
return ['rsp' => 'fail', 'msg' => '已存在补寄申请单不能更改,状态为:' . $existingReshipping['status']];
|
||||
}
|
||||
// 等待卖家发货
|
||||
$upData = array(
|
||||
'status' => $status,
|
||||
'outer_modified_time' => $outerModifiedTime,
|
||||
);
|
||||
$rs = $reshippingModel->update($upData, array('reshipping_id' => $reshipping_id, 'status|noequal' => $status));
|
||||
// 防并发:检查更新影响行数
|
||||
if(is_bool($rs) || (is_numeric($rs) && $rs <= 0)) {
|
||||
if(is_numeric($rs) && $rs == 0) {
|
||||
return ['rsp' => 'fail', 'msg' => '补寄申请单状态已被其他进程更新,更新失败'];
|
||||
}
|
||||
return ['rsp' => 'fail', 'msg' => '更新补寄申请单状态失败'];
|
||||
}
|
||||
$memo = '状态更新为:等待卖家发货';
|
||||
$operateLog->write_log('return_reshipping@ome', $reshipping_id, $memo);
|
||||
return ['rsp' => 'succ', 'msg' => $memo];
|
||||
|
||||
case '2':
|
||||
if($existingReshipping['status'] != 1){
|
||||
return ['rsp' => 'fail', 'msg' => '已存在补寄申请单不能更改,状态为:' . $existingReshipping['status']];
|
||||
}
|
||||
// 等待买家收货
|
||||
$upData = array(
|
||||
'status' => $status,
|
||||
'outer_modified_time' => $outerModifiedTime,
|
||||
);
|
||||
$rs = $reshippingModel->update($upData, array('reshipping_id' => $reshipping_id, 'status|noequal' => $status));
|
||||
// 防并发:检查更新影响行数
|
||||
if(is_bool($rs) || (is_numeric($rs) && $rs <= 0)) {
|
||||
if(is_numeric($rs) && $rs == 0) {
|
||||
return ['rsp' => 'fail', 'msg' => '补寄申请单状态已被其他进程更新,更新失败'];
|
||||
}
|
||||
return ['rsp' => 'fail', 'msg' => '更新补寄申请单状态失败'];
|
||||
}
|
||||
$memo = '状态更新为:等待买家收货';
|
||||
$operateLog->write_log('return_reshipping@ome', $reshipping_id, $memo);
|
||||
return ['rsp' => 'succ', 'msg' => $memo];
|
||||
|
||||
case '3':
|
||||
if(!in_array($existingReshipping['status'], [1, 2])){
|
||||
return ['rsp' => 'fail', 'msg' => '已存在补寄申请单不能更改,状态为:' . $existingReshipping['status']];
|
||||
}
|
||||
// 补寄成功
|
||||
$upData = array(
|
||||
'status' => $status,
|
||||
'outer_modified_time' => $outerModifiedTime,
|
||||
);
|
||||
$rs = $reshippingModel->update($upData, array('reshipping_id' => $reshipping_id, 'status|noequal' => $status));
|
||||
// 防并发:检查更新影响行数
|
||||
if(is_bool($rs) || (is_numeric($rs) && $rs <= 0)) {
|
||||
if(is_numeric($rs) && $rs == 0) {
|
||||
return ['rsp' => 'fail', 'msg' => '补寄申请单状态已被其他进程更新,更新失败'];
|
||||
}
|
||||
return ['rsp' => 'fail', 'msg' => '更新补寄申请单状态失败'];
|
||||
}
|
||||
$memo = '状态更新为:补寄成功';
|
||||
$operateLog->write_log('return_reshipping@ome', $reshipping_id, $memo);
|
||||
return ['rsp' => 'succ', 'msg' => $memo];
|
||||
|
||||
case '4':
|
||||
if(!in_array($existingReshipping['status'], [0])){
|
||||
return ['rsp' => 'fail', 'msg' => '已存在补寄申请单不能更改,状态为:' . $existingReshipping['status']];
|
||||
}
|
||||
// 卖家拒绝补寄
|
||||
$upData = array(
|
||||
'status' => $status,
|
||||
'outer_modified_time' => $outerModifiedTime,
|
||||
);
|
||||
if($reshippingData['refuse_reason']){
|
||||
$upData['refuse_reason'] = $reshippingData['refuse_reason'];
|
||||
}
|
||||
if($reshippingData['refuse_reason_id']){
|
||||
$upData['refuse_reason_id'] = $reshippingData['refuse_reason_id'];
|
||||
}
|
||||
$rs = $reshippingModel->update($upData, array('reshipping_id' => $reshipping_id, 'status|noequal' => $status));
|
||||
// 防并发:检查更新影响行数
|
||||
if(is_bool($rs) || (is_numeric($rs) && $rs <= 0)) {
|
||||
if(is_numeric($rs) && $rs == 0) {
|
||||
return ['rsp' => 'fail', 'msg' => '补寄申请单状态已被其他进程更新,更新失败'];
|
||||
}
|
||||
return ['rsp' => 'fail', 'msg' => '更新补寄申请单状态失败'];
|
||||
}
|
||||
$memo = '状态更新为:卖家拒绝补寄';
|
||||
$operateLog->write_log('return_reshipping@ome', $reshipping_id, $memo);
|
||||
return ['rsp' => 'succ', 'msg' => $memo];
|
||||
|
||||
case '5':
|
||||
if(!in_array($existingReshipping['status'], [0,4])){
|
||||
return ['rsp' => 'fail', 'msg' => '已存在补寄申请单不能更改,状态为:' . $existingReshipping['status']];
|
||||
}
|
||||
// 补寄关闭
|
||||
$upData = array(
|
||||
'status' => $status,
|
||||
'outer_modified_time' => $outerModifiedTime,
|
||||
);
|
||||
$rs = $reshippingModel->update($upData, array('reshipping_id' => $reshipping_id, 'status|noequal' => $status));
|
||||
// 防并发:检查更新影响行数
|
||||
if(is_bool($rs) || (is_numeric($rs) && $rs <= 0)) {
|
||||
if(is_numeric($rs) && $rs == 0) {
|
||||
return ['rsp' => 'fail', 'msg' => '补寄申请单状态已被其他进程更新,更新失败'];
|
||||
}
|
||||
return ['rsp' => 'fail', 'msg' => '更新补寄申请单状态失败'];
|
||||
}
|
||||
$memo = '状态更新为:补寄关闭';
|
||||
$operateLog->write_log('return_reshipping@ome', $reshipping_id, $memo);
|
||||
return ['rsp' => 'succ', 'msg' => $memo];
|
||||
|
||||
case '6':
|
||||
if(!in_array($existingReshipping['status'], [0,1,4])){
|
||||
return ['rsp' => 'fail', 'msg' => '已存在补寄申请单不能更改,状态为:' . $existingReshipping['status']];
|
||||
}
|
||||
// 转退款
|
||||
$upData = array(
|
||||
'status' => $status,
|
||||
'outer_modified_time' => $outerModifiedTime,
|
||||
);
|
||||
$rs = $reshippingModel->update($upData, array('reshipping_id' => $reshipping_id, 'status|noequal' => $status));
|
||||
// 防并发:检查更新影响行数
|
||||
if(is_bool($rs) || (is_numeric($rs) && $rs <= 0)) {
|
||||
if(is_numeric($rs) && $rs == 0) {
|
||||
return ['rsp' => 'fail', 'msg' => '补寄申请单状态已被其他进程更新,更新失败'];
|
||||
}
|
||||
return ['rsp' => 'fail', 'msg' => '更新补寄申请单状态失败'];
|
||||
}
|
||||
$reshippingLib = kernel::single('ome_reshipping');
|
||||
// 处理转退款逻辑
|
||||
$transformResult = $reshippingLib->handleTransformToRefund($reshipping_id);
|
||||
if ($transformResult['rsp'] == 'fail') {
|
||||
// 记录错误日志,但不影响主流程
|
||||
$operateLog->write_log('return_reshipping@ome', $reshipping_id, '转退款处理失败:' . $transformResult['msg']);
|
||||
return ['rsp' => 'fail', 'msg' => '状态更新为:转退款(处理失败)'];
|
||||
} else {
|
||||
$memo = '状态更新为:转退款';
|
||||
$operateLog->write_log('return_reshipping@ome', $reshipping_id, $memo);
|
||||
return ['rsp' => 'succ', 'msg' => $memo];
|
||||
}
|
||||
|
||||
default:
|
||||
return ['rsp' => 'fail', 'msg' => '未知状态:' . $status];
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 保存商品信息
|
||||
*
|
||||
* @param int $reshipping_id
|
||||
* @param array $sdf
|
||||
* @return void
|
||||
*/
|
||||
private function _saveItems($reshipping_id, $sdf)
|
||||
{
|
||||
$itemsModel = app::get('ome')->model('return_reshipping_items');
|
||||
|
||||
// 使用new_bought_sku优先,如果没有则使用bought_sku
|
||||
$sku = !empty($sdf['new_bought_sku']) ? $sdf['new_bought_sku'] : $sdf['bought_sku'];
|
||||
|
||||
if (empty($sku)) {
|
||||
return;
|
||||
}
|
||||
|
||||
// 查找销售物料信息
|
||||
$salesMaterialModel = app::get('material')->model('sales_material');
|
||||
$salesMaterial = $salesMaterialModel->db_dump(array('sales_material_bn' => $sku), 'sm_id,sales_material_bn');
|
||||
|
||||
// 查找是否已存在该商品记录
|
||||
$existingItem = $itemsModel->db_dump(array(
|
||||
'reshipping_id' => $reshipping_id,
|
||||
), 'item_id');
|
||||
|
||||
$itemData = array(
|
||||
'reshipping_id' => $reshipping_id,
|
||||
'oid' => $sdf['biz_order_id'] ?: '',
|
||||
'sku_uuid' => '',
|
||||
'goods_id' => $salesMaterial ? $salesMaterial['sm_id'] : 0,
|
||||
'bn' => $sku,
|
||||
'nums' => isset($sdf['num']) ? intval($sdf['num']) : 1,
|
||||
'price' => isset($sdf['price']) ? floatval($sdf['price']) : 0,
|
||||
);
|
||||
|
||||
if ($existingItem && $existingItem['item_id']) {
|
||||
// 更新已存在的商品信息
|
||||
$itemsModel->update($itemData, array('item_id' => $existingItem['item_id']));
|
||||
} else {
|
||||
// 插入新的商品信息
|
||||
$itemsModel->insert($itemData);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user