shish 1 lună în urmă
părinte
comite
10a762d969
1 a modificat fișierele cu 19 adăugiri și 4 ștergeri
  1. 19 4
      biz-ghs/order/services/OrderService.php

+ 19 - 4
biz-ghs/order/services/OrderService.php

@@ -30,6 +30,7 @@ use bizGhs\shop\classes\ShopMoneyChangeClass;
 use bizGhs\stat\classes\StatYjClass;
 use biz\stat\classes\StatOrderCountClass;
 use bizGhs\stock\classes\StockRecordClass;
+use bizHd\cg\classes\CgRefundClass;
 use bizHd\cg\services\CgRefundService;
 use bizHd\purchase\classes\PurchaseItemClass;
 use bizHd\purchase\services\PurchaseService;
@@ -1365,20 +1366,34 @@ class OrderService extends BaseService
 
         //售后申请审核转冲销单:这条售后申请本身并没有走老的 passRefund 流程(没有原路退款/没有改原订单actPrice等),
         //真正的退款/退货/返余额是由上面新生成的这张冲销单完成的,所以不能标"已通过"(会让人误以为是走了老流程原路退款)。
-        //这里标"已取消",并把冲销单号写进 hdRemark 备注,方便后续排查这条售后申请最终去了哪。ssh 冲销单功能
+        //这里标"已取消",并把冲销单号写进 hdRemark 备注,同时用 forwardOrderId 结构化记录对应的冲销单id,
+        //方便后续排查/统计这条售后申请最终去了哪(forwardOrderId=0表示常规售后,未转冲销单)。ssh 冲销单功能
         if (!empty($refundOrder)) {
             $refundOrder->status = RefundOrderClass::STATUS_CANCEL;
+            $refundOrder->forwardOrderId = $order->id;
             $refundOrder->hdRemark = '已转为冲销单处理,退款/退货/返余额流程详见冲销单:' . $orderSn;
             $refundOrder->shopAdminId = $shopAdminId;
             $refundOrder->shopAdminName = $shopAdminName;
-            $refundOrder->save(false, ['status', 'hdRemark', 'shopAdminId', 'shopAdminName']);
+            $refundOrder->save(false, ['status', 'forwardOrderId', 'hdRemark', 'shopAdminId', 'shopAdminName']);
 
-            //明细项同步标记为已处理,避免和"待处理"的正常售后混在一起统计
+            //明细项同步标记为"已取消",与父级售后申请的status保持一致(不再是"已处理",因为并没有走老的passRefund流程去处理它)
             $refundItemModels = RefundOrderItemClass::getAllByCondition(['orderSn' => $refundOrder->orderSn], null, '*', null, true);
             foreach ($refundItemModels as $refundItemModel) {
-                $refundItemModel->status = 1;
+                $refundItemModel->status = RefundOrderClass::STATUS_CANCEL;
                 $refundItemModel->save(false, ['status']);
             }
+
+            //同步花店端(hdApp)对应的售后记录(xhCgRefund):一条售后在GHS/HD两端各有一条记录(通过cgRefundId关联),
+            //两端都要能看出"这条售后已转冲销单",HD侧记录的是花店视角的冲销采购单id(xhCg.id)
+            $cgRefundId = $refundOrder->cgRefundId ?? 0;
+            if (!empty($cgRefundId)) {
+                $cgRefund = CgRefundClass::getLockById($cgRefundId);
+                if (!empty($cgRefund)) {
+                    $cgRefund->forwardCgId = $cg->id ?? 0;
+                    $cgRefund->hdRemark = '已转为冲销单处理,退款/退货/返余额流程详见冲销单:' . $cgSn;
+                    $cgRefund->save(false, ['forwardCgId', 'hdRemark']);
+                }
+            }
         }
 
         return ['order' => $order, 'customBalance' => $customBalance];