Kaynağa Gözat

Merge branch 'moreShare' into dev

shish 3 ay önce
ebeveyn
işleme
851ff013eb

+ 41 - 3
biz-ghs/order/classes/OrderClass.php

@@ -1388,10 +1388,20 @@ class OrderClass extends BaseClass
 
                 //同个人同地址当天订单数
                 $sameTimeIds = $val['sameTimeIds'] ?? '';
-                $sameNum = 0;
                 if (!empty($sameTimeIds)) {
                     $sameIds = explode(',', $sameTimeIds);
                     $sameNum = count($sameIds);
+                } else {
+                    $sameNum = $val['mergeNum'];
+                    if ($sameNum > 0) {
+                        $mergeId = $val['mergeId'] ?? 0;
+                        if (!empty($mergeId)) {
+                            $mergeList = OrderMergeClass::getAllByCondition(['mergeId' => $mergeId], null, 'orderId');
+                            $ids = array_column($mergeList, 'orderId');
+                            $sameTimeIds = implode(',', $ids);
+                            $data['list'][$key]['sameTimeIds'] = $sameTimeIds;
+                        }
+                    }
                 }
                 $data['list'][$key]['sameTimeIdsNum'] = $sameNum;
 
@@ -3202,6 +3212,7 @@ XL;
                 $order->mergeId = $hasMergeId;
                 $order->save();
                 OrderMergeClass::add(['mergeId' => $hasMergeId, 'orderId' => $orderId, 'mergeDate' => $date, 'customId' => $customId, 'mainId' => $mainId]);
+                self::syncOrderMergeNumForMergeId($hasMergeId);
             } else {
                 self::rebuildOrderMergeGroupForDay($ids, $date, $customId, $mainId);
             }
@@ -3213,6 +3224,7 @@ XL;
                 if (empty($oldMergeSn)) {
                     // 订单仍挂着 mergeId,但主档已不存在,避免后续报错并清理脏数据
                     $order->mergeId = 0;
+                    $order->mergeNum = 0;
                     $order->save();
                 } else {
                     $oldDate = $oldMergeSn->mergeDate ?? '';
@@ -3229,11 +3241,13 @@ XL;
                             $del[] = $mergeRow->orderId;
                             $mergeRow->delete();
                         }
-                        self::updateByIds($del, ['mergeId' => 0]);
+                        self::updateByIds($del, ['mergeId' => 0, 'mergeNum' => 0]);
                     } else {
                         $order->mergeId = 0;
+                        $order->mergeNum = 0;
                         $order->save();
                         OrderMergeClass::deleteByCondition(['mergeId' => $oldMergeId, 'orderId' => $orderId]);
+                        self::syncOrderMergeNumForMergeId($oldMergeId);
                     }
                 }
             }
@@ -3243,6 +3257,7 @@ XL;
                 $order->mergeId = $newMergeId;
                 $order->save();
                 OrderMergeClass::add(['mergeId' => $newMergeId, 'orderId' => $orderId, 'mergeDate' => $date, 'customId' => $customId, 'mainId' => $mainId]);
+                self::syncOrderMergeNumForMergeId($newMergeId);
             } else {
                 self::rebuildOrderMergeGroupForDay($ids, $date, $customId, $mainId);
             }
@@ -3260,7 +3275,8 @@ XL;
     {
         $mergeData = ['mergeDate' => $date, 'customId' => $customId, 'mainId' => $mainId];
         $mergeId = orderSn::getGhsOrderMergeId($mergeData);
-        self::updateByIds($ids, ['mergeId' => $mergeId]);
+        $mergeNum = count($ids);
+        self::updateByIds($ids, ['mergeId' => $mergeId, 'mergeNum' => $mergeNum]);
         $addData = [];
         foreach ($ids as $currentId) {
             $addData[] = ['mergeId' => $mergeId, 'orderId' => $currentId, 'mergeDate' => $date, 'customId' => $customId, 'mainId' => $mainId];
@@ -3268,6 +3284,28 @@ XL;
         OrderMergeClass::batchAdd($addData);
     }
 
+    /** 按 xhGhsOrderMerge 明细数量,回写该合并组内所有订单的 mergeNum */
+    private static function syncOrderMergeNumForMergeId($mergeId)
+    {
+        $mergeId = (int)$mergeId;
+        if ($mergeId <= 0) {
+            return;
+        }
+        $rows = OrderMergeClass::getAllByCondition(['mergeId' => $mergeId], null, 'orderId', null, true);
+        $mergeNum = count($rows);
+        if ($mergeNum === 0) {
+            return;
+        }
+        $orderIds = [];
+        foreach ($rows as $row) {
+            $orderIds[] = (int)(is_object($row) ? ($row->orderId ?? 0) : ($row['orderId'] ?? 0));
+        }
+        $orderIds = array_values(array_filter($orderIds));
+        if (!empty($orderIds)) {
+            self::updateByIds($orderIds, ['mergeNum' => $mergeNum]);
+        }
+    }
+
     // 更新同天内的所有订单的 sameTimeIds
     public static function updateSameTimeIds($order, $date)
     {

+ 30 - 2
biz-hd/purchase/classes/PurchaseClass.php

@@ -99,6 +99,7 @@ class PurchaseClass extends BaseClass
                 $cg->mergeId = $hasMergeId;
                 $cg->save();
                 CgMergeClass::add(['mergeId' => $hasMergeId, 'cgId' => $cgId, 'mergeDate' => $date, 'ghsId' => $ghsId, 'mainId' => $mainId]);
+                self::syncCgMergeNumForMergeId($hasMergeId);
             } else {
                 self::rebuildCgMergeGroupForDay($ids, $date, $ghsId, $mainId);
             }
@@ -109,6 +110,7 @@ class PurchaseClass extends BaseClass
                 $oldMergeSn = CgMergeSnClass::getById($oldMergeId, true);
                 if (empty($oldMergeSn)) {
                     $cg->mergeId = 0;
+                    $cg->mergeNum = 0;
                     $cg->save();
                 } else {
                     $oldDate = $oldMergeSn->mergeDate ?? '';
@@ -123,11 +125,13 @@ class PurchaseClass extends BaseClass
                             $del[] = $mergeRow->cgId;
                             $mergeRow->delete();
                         }
-                        self::updateByIds($del, ['mergeId' => 0]);
+                        self::updateByIds($del, ['mergeId' => 0, 'mergeNum' => 0]);
                     } else {
                         $cg->mergeId = 0;
+                        $cg->mergeNum = 0;
                         $cg->save();
                         CgMergeClass::deleteByCondition(['mergeId' => $oldMergeId, 'cgId' => $cgId]);
+                        self::syncCgMergeNumForMergeId($oldMergeId);
                     }
                 }
             }
@@ -137,6 +141,7 @@ class PurchaseClass extends BaseClass
                 $cg->mergeId = $newMergeId;
                 $cg->save();
                 CgMergeClass::add(['mergeId' => $newMergeId, 'cgId' => $cgId, 'mergeDate' => $date, 'ghsId' => $ghsId, 'mainId' => $mainId]);
+                self::syncCgMergeNumForMergeId($newMergeId);
             } else {
                 self::rebuildCgMergeGroupForDay($ids, $date, $ghsId, $mainId);
             }
@@ -157,7 +162,8 @@ class PurchaseClass extends BaseClass
         }
         $mergeData = ['mergeDate' => $date, 'ghsId' => $ghsId, 'mainId' => $mainId];
         $mergeId = orderSn::getCgMergeId($mergeData);
-        self::updateByIds($ids, ['mergeId' => $mergeId]);
+        $mergeNum = count($ids);
+        self::updateByIds($ids, ['mergeId' => $mergeId, 'mergeNum' => $mergeNum]);
         $addData = [];
         foreach ($ids as $currentId) {
             $addData[] = ['mergeId' => $mergeId, 'cgId' => $currentId, 'mergeDate' => $date, 'ghsId' => $ghsId, 'mainId' => $mainId];
@@ -165,6 +171,28 @@ class PurchaseClass extends BaseClass
         CgMergeClass::batchAdd($addData);
     }
 
+    /** 按 xhCgMerge 明细数量,回写该合并组内所有采购单的 mergeNum */
+    private static function syncCgMergeNumForMergeId($mergeId)
+    {
+        $mergeId = (int)$mergeId;
+        if ($mergeId <= 0) {
+            return;
+        }
+        $rows = CgMergeClass::getAllByCondition(['mergeId' => $mergeId], null, 'cgId', null, true);
+        $mergeNum = count($rows);
+        if ($mergeNum === 0) {
+            return;
+        }
+        $cgIds = [];
+        foreach ($rows as $row) {
+            $cgIds[] = (int)(is_object($row) ? ($row->cgId ?? 0) : ($row['cgId'] ?? 0));
+        }
+        $cgIds = array_values(array_filter($cgIds));
+        if (!empty($cgIds)) {
+            self::updateByIds($cgIds, ['mergeNum' => $mergeNum]);
+        }
+    }
+
     //获取打包费
     public static function getKmPackCost($mainId)
     {