Przeglądaj źródła

Merge branch 'master' into dev

shish 3 dni temu
rodzic
commit
311c03b52c

+ 2 - 2
app-ghs/controllers/OrderController.php

@@ -1699,7 +1699,7 @@ class OrderController extends BaseController
             // 底层在发货和收货扣减库存时,使用商品 ID 升序排序加锁(SELECT FOR UPDATE)策略,100% 杜绝交叉死锁,因此这里无需再做重试。
             $transaction = $connection->beginTransaction();
             try {
-                $return = OrderService::createNewOrder($post, $custom, $hasPay);
+                $return = OrderService::createSaleOrder($post, $custom, $hasPay);
                 $transaction->commit();
             } catch (\Exception $exception) {
                 if ($transaction->isActive) {
@@ -3670,7 +3670,7 @@ class OrderController extends BaseController
                 // 底层在发货和收货扣减库存时,使用商品 ID 升序排序加锁(SELECT FOR UPDATE)策略,100% 杜绝交叉死锁,因此这里无需再做重试。
                 $transaction = $connection->beginTransaction();
                 try {
-                    OrderService::createNewOrder($post, $custom, $hasPay);
+                    OrderService::createSaleOrder($post, $custom, $hasPay);
                     $transaction->commit();
                 } catch (\Exception $exception) {
                     if ($transaction->isActive) {

+ 1 - 1
app-pt/views/main/app.php

@@ -235,7 +235,7 @@
             }
             // 这里可以根据appType跳转到对应的下载链接
             const downloadUrls = {
-                'xiaohuabao': 'https://api.shop.hzghd.com/1326.apk', // 销花宝APP下载链接
+                'xiaohuabao': 'https://api.shop.hzghd.com/1328.apk', // 销花宝APP下载链接
                 'huazhanggui': 'https://api.shop.hzghd.com/246.apk', // 花掌柜APP下载链接
                 'huazhanggui_cashier': 'https://api.shop.hzghd.com/220.apk', // 花掌柜收银下载链接
                 'xiaohuabao_cashier': 'https://api.shop.hzghd.com/178.apk' // 销花宝收银下载链接

+ 27 - 4
biz-ghs/clear/classes/OrderCgClearClass.php

@@ -206,15 +206,19 @@ class OrderCgClearClass extends BaseClass
 
     /**
      * 采购单关联的已销结账单(只认本采购单 cgId,绝不回退到 saleId)
-     * 说明:若按 saleId 查,会把该关联销售单的客户结账一并带出,采购详情「结账信息」会错混销售结账。
+     * 说明1:若按 saleId 查,会把该关联销售单的客户结账一并带出,采购详情「结账信息」会错混销售结账。
+     * 说明2:xhOrderCgClear.cgId 在不同结账场景下可能指向不同表的主键(如供货商自身采购
+     *       bizGhs\order\classes\PurchaseOrderClass 与花店采购 bizHd\purchase\classes\PurchaseClass),
+     *       两边自增 id 存在撞号可能。仅按 cgId 过滤仍可能混入其它业务线的结账记录,
+     *       必须再按 xhClear.clearStyle 精确限定属于哪种结账方式,才能确认是「同一个」采购单。
      *
+     * @param int $purchaseId 采购单/cgId
+     * @param int|null $clearStyle 限定的结账方式(dict clearStyle),传 null 则不按结账方式过滤
      * @return array<int, array{clearId:int, clearSn:string, amount:string}>
      */
-    public static function listPaidClearRecordsForPurchase($purchaseId, $saleOrderId = 0)
+    public static function listPaidClearRecordsForPurchase($purchaseId, $clearStyle = null)
     {
         $purchaseId = intval($purchaseId);
-        // $saleOrderId 保留入参兼容旧调用,采购结账列表不再使用,避免混入销售单结账
-        unset($saleOrderId);
 
         if ($purchaseId <= 0) {
             return [];
@@ -225,6 +229,25 @@ class OrderCgClearClass extends BaseClass
             'status' => self::STATUS_HAS_PAY,
         ], 'id asc', '*', null, true);
 
+        if (empty($cgList)) {
+            return [];
+        }
+
+        if ($clearStyle !== null) {
+            $clearIds = array_values(array_unique(array_filter(array_map(function ($item) {
+                return intval(is_object($item) ? ($item->clearId ?? 0) : ($item['clearId'] ?? 0));
+            }, $cgList))));
+            $allowedClearIds = empty($clearIds) ? [] : ClearClass::getAllByCondition([
+                'id' => ['in', $clearIds],
+                'clearStyle' => intval($clearStyle),
+            ], null, 'id', null);
+            $allowedClearIds = array_flip(array_map('intval', array_column($allowedClearIds, 'id')));
+            $cgList = array_values(array_filter($cgList, function ($item) use ($allowedClearIds) {
+                $clearId = intval(is_object($item) ? ($item->clearId ?? 0) : ($item['clearId'] ?? 0));
+                return isset($allowedClearIds[$clearId]);
+            }));
+        }
+
         return self::mapPaidClearRecordRows($cgList);
     }
 

+ 6 - 2
biz-ghs/order/classes/PurchaseOrderClass.php

@@ -1791,9 +1791,13 @@ class PurchaseOrderClass extends BaseClass
         }
         $orderData['needRemindRefreshSeat'] = $needRemindRefreshSeat;
         $orderData['inBooking'] = $inBooking;
-        // 结账信息:仅本采购单 cgId 下的已销结账单,不含关联销售单的客户结账
+        // 结账信息:仅本采购单 cgId 下、且结账方式为「供货商向昆明供货商结账」(clearStyle=3) 的记录,
+        // 避免 xhOrderCgClear.cgId 与花店采购(bizHd\purchase\classes\PurchaseClass) 的 id 撞号,混入销售单结账
         $cgId = intval($orderData['id'] ?? 0);
-        $orderData['orderClearList'] = OrderCgClearClass::listPaidClearRecordsForPurchase($cgId);
+        $orderData['orderClearList'] = OrderCgClearClass::listPaidClearRecordsForPurchase(
+            $cgId,
+            dict::getDict('clearStyle', 'gys2KmGys')
+        );
         return $orderData;
     }
 

+ 5 - 3
biz-ghs/order/services/OrderService.php

@@ -152,7 +152,7 @@ class OrderService extends BaseService
     }
 
     //添加订单
-    public static function createNewOrder($data, $custom, $hasPay = 1)
+    public static function createSaleOrder($data, $custom, $hasPay = 1)
     {
         //有unitType数据,说明是收银台传过来的数据,转换成和手机端结构一致
         $hasUnitType = array_column($data['product'], 'unitType');
@@ -197,6 +197,10 @@ class OrderService extends BaseService
             $data['sendTime'] = $sendTimeInput;
         }
 
+        //小票打印用到这个
+        $sendTimeWant = date('Y-m-d', strtotime($data['sendTime']));
+        $data['sendTimeWant'] = $sendTimeWant;
+
         //供货商销售单
         $returnOrder = OrderClass::addOrder($data, $custom);
         $saleId = $returnOrder->id ?? 0;
@@ -241,8 +245,6 @@ class OrderService extends BaseService
             }
         }
 
-        $sendTimeWant = !empty($data['sendTimeWant']) ? $data['sendTimeWant'] : date("Y-m-d");
-
         $remark = $data['remark'] ?? '';
         $xj = $data['xj'] ?? '';
         $treeData = $data['treeData'] ?? [];

+ 1 - 1
common/components/dict.php

@@ -445,7 +445,7 @@ class dict
             'hd2Gys' => 1,//零售主动供货商结帐
             'gys2Hd' => 2,//供货商要求花店结帐
             'gys2KmGys' => 3,//供货商向昆明供货商结帐
-            'kmGys2gys' => 4,//昆明供货商向供货商结账
+            'kmGys2gys' => 4,//昆明供货商向供货商结账,这个没有用了,要废弃
         ],
 
         'merchantStatus' => ['checking' => 0, 'pass' => 1, 'noPass' => 2, 'freeze' => 3, 'unfreeze' => 4, 'shut' => 5],

+ 1 - 1
console/controllers/LiveOrderController.php

@@ -154,7 +154,7 @@ class LiveOrderController extends Controller
 
                     $post['historyDate'] = $historyDate;
                     //多处有用到此方法,需要同步修改,搜索关键词create_new_order
-                    $order = OrderService::createNewOrder($post, $custom, $hasPay);
+                    $order = OrderService::createSaleOrder($post, $custom, $hasPay);
 
                     //清掉一天多单的汇总
                     $sameDate = date("Y_m_d");