From 880621206ae152e69104cabc30200ff3a098eabb Mon Sep 17 00:00:00 2001
From: cl <1442464845@qq.com>
Date: 星期四, 09 四月 2026 21:55:37 +0800
Subject: [PATCH] 调整

---
 rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/ReceiveMsgServiceImpl.java |   72 +++++++++++++++++++++++++++---------
 1 files changed, 54 insertions(+), 18 deletions(-)

diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/ReceiveMsgServiceImpl.java b/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/ReceiveMsgServiceImpl.java
index a1b887c..d250bcf 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/ReceiveMsgServiceImpl.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/ReceiveMsgServiceImpl.java
@@ -118,7 +118,54 @@
     private WarehouseAreasItemService warehouseAreasItemService;
     @Autowired
     private ConfigService configService;
+    @Autowired
+    private TaskItemService taskItemService;
+    @Autowired
+    private TaskService taskService;
 
+    /**
+     * 浜戜粨鏀瑰崟/鍙栨秷鍓嶏細浠诲姟鏄庣粏宸插叧鑱旇鍗曟嵁涓斾富浠诲姟鏈�昏緫鍒犻櫎鍒欎笉鍏佽
+     */
+    private void assertWkOrderNoLinkedTask(Long wkOrderId) {
+        if (wkOrderId == null) {
+            return;
+        }
+        List<TaskItem> links = taskItemService.list(new LambdaQueryWrapper<TaskItem>()
+                .select(TaskItem::getTaskId)
+                .and(w -> w.eq(TaskItem::getOrderId, wkOrderId)
+                        .or(o -> o.eq(TaskItem::getSourceId, wkOrderId)
+                                .eq(TaskItem::getOrderType, OrderType.ORDER_OUT.type))));
+        if (links.isEmpty()) {
+            return;
+        }
+        Set<Long> taskIds = links.stream().map(TaskItem::getTaskId).filter(Objects::nonNull).collect(Collectors.toSet());
+        if (taskIds.isEmpty()) {
+            return;
+        }
+        if (taskService.count(new LambdaQueryWrapper<Task>().in(Task::getId, taskIds)) > 0) {
+            throw new CoolException("璇ュ崟鎹凡鐢熸垚浠诲姟锛屼笉鍙慨鏀广�佸彇娑堟垨鍒犻櫎锛侊紒");
+        }
+    }
+
+    /** 淇敼/鍑哄簱鍙栨秷锛氬叆搴撴湭鎵ц銆佸嚭搴撲换鍔″垵濮嬶紙鍏ュ簱鍙栨秷瑙� assertWkOrderExceStatusForCancel锛� */
+    private static final List<Short> WK_ORDER_UNEXECUTED_EXCE_STATUSES = Collections.unmodifiableList(
+            Arrays.asList(
+                    AsnExceStatus.ASN_EXCE_STATUS_UN_EXCE.val,
+                    AsnExceStatus.OUT_STOCK_STATUS_TASK_INIT.val));
+
+    private void assertWkOrderExceStatusUnexecuted(WkOrder order, String actionVerb) {
+        if (!WK_ORDER_UNEXECUTED_EXCE_STATUSES.contains(order.getExceStatus())) {
+            throw new CoolException("浠呮湭鎵ц鐘舵�佺殑鍗曟嵁鍙�" + actionVerb + "锛侊紒");
+        }
+    }
+
+    /** 鍙栨秷锛氬叆搴撳崟缁勬墭鍓嶅嵆鍙紙缁勬墭鏁板凡鏍¢獙锛夛紱鍑哄簱鍗曚粛椤绘湭鎵ц/鍑哄簱鍒濆 */
+    private void assertWkOrderExceStatusForCancel(WkOrder order) {
+        if (order.getType() != null && order.getType().equals(OrderType.ORDER_IN.type)) {
+            return;
+        }
+        assertWkOrderExceStatusUnexecuted(order, "鍙栨秷");
+    }
 
     /**
      * @author Ryan
@@ -465,14 +512,8 @@
                     WkOrder order = asnOrderService.getOne(new LambdaQueryWrapper<WkOrder>()
                             .eq(WkOrder::getPoCode, syncOrder.getOrderInternalCode()));
                     if (!Objects.isNull(order)) {
-                        // 浠呮湭鎵ц鐘舵�佸彲琚� order/add 淇敼锛堝叆搴撴湭鎵ц銆佸嚭搴撲换鍔″垵濮嬶級
-                        List<Short> editableStatus = Arrays.asList(AsnExceStatus.ASN_EXCE_STATUS_UN_EXCE.val
-                                ,AsnExceStatus.ASN_EXCE_STATUS_UN_EXCE.val
-                                ,AsnExceStatus.ASN_EXCE_STATUS_RECEIPT_DONE.val
-                                , AsnExceStatus.OUT_STOCK_STATUS_TASK_INIT.val);
-                        if (!editableStatus.contains(order.getExceStatus())) {
-                            throw new CoolException("浠呮湭鎵ц鐘舵�佺殑鍗曟嵁鍙慨鏀癸紒锛�");
-                        }
+                        assertWkOrderNoLinkedTask(order.getId());
+                        assertWkOrderExceStatusUnexecuted(order, "淇敼");
                         // 瀛樺湪鍒欎慨鏀癸紙1 鍜� 2 鍧囪蛋姝ゅ锛夛紝缁勬墭鏍¢獙鍦� mergeOrderWithPakin/updateOrderNoPakin 鍐�
                         long pakinCount = waitPakinItemService.count(new LambdaQueryWrapper<WaitPakinItem>()
                                 .eq(WaitPakinItem::getAsnId, order.getId()).eq(WaitPakinItem::getDeleted, 0));
@@ -928,21 +969,20 @@
     /**
      * @author Ryan
      * @date 2025/8/20
-     * @description: 鍗曟嵁淇敼--鏀惰揣閫氱煡鍗�/鍑哄簱鍗�/鐩樼偣鍗�
+     * @description: 鍗曟嵁淇敼--鏀惰揣閫氱煡鍗�/鍑哄簱鍗�/鐩樼偣鍗曪紙瀵瑰鎺ュ彛宸茬敱 syncCheckOrder 鎵挎帴鏃跺彲涓嶈皟鐢級
      * @version 1.0
      */
     @Override
     @Transactional(timeout = 60, rollbackFor = Exception.class)
     public R syncOrderUpdate(List<SyncOrderParams> orders) {
         orders.forEach(order -> {
-            List<Short> list = Arrays.asList(AsnExceStatus.ASN_EXCE_STATUS_UN_EXCE.val,
-                    AsnExceStatus.OUT_STOCK_STATUS_TASK_INIT.val);
             WkOrder wkOrder = asnOrderService.getOne(new LambdaQueryWrapper<WkOrder>()
-                    .in(WkOrder::getExceStatus, list)
                     .eq(WkOrder::getCode, order.getOrderNo()));
             if (Objects.isNull(wkOrder)) {
                 throw new CoolException("璇风‘璁ゅ崟鎹細" + order.getOrderNo() + "鏄惁宸茬粡鎵ц鎴栨槸鍚﹀悓姝ワ紒锛�");
             }
+            assertWkOrderNoLinkedTask(wkOrder.getId());
+            assertWkOrderExceStatusUnexecuted(wkOrder, "淇敼");
             order.getOrderItems().forEach(orderItem -> {
                 WkOrderItem wkOrderItem = asnOrderItemService.getOne(new LambdaUpdateWrapper<WkOrderItem>()
                         .eq(WkOrderItem::getMatnrCode, orderItem.getMatnr())
@@ -1006,18 +1046,14 @@
                 throw new CoolException("鍗曟嵁涓嶅瓨鍦紝鏃犳硶鍙栨秷锛侊紒璇锋彁渚涘崟鎹唴鐮�(orderInternalCode)鎴栧崟鍙�(orderNo)銆�");
             }
             final WkOrder finalWkOrder = wkOrder;
+            assertWkOrderNoLinkedTask(finalWkOrder.getId());
             // 宸茬粍鎵樹笉鍙彇娑�
             long pakinCount = waitPakinItemService.count(new LambdaQueryWrapper<WaitPakinItem>()
                     .eq(WaitPakinItem::getAsnId, finalWkOrder.getId()));
             if (pakinCount > 0) {
                 throw new CoolException("鍗曟嵁宸茬粍鎵橈紝浠呮湭缁勬墭鐘舵�佸彲鍙栨秷锛岃鍏堣В闄ょ粍鎵橈紒锛�");
             }
-            // 浠呮湭鎵ц鐘舵�佸彲鍙栨秷锛堝叆搴撴湭鎵ц銆佸嚭搴撲换鍔″垵濮嬶級
-            List<Short> list = Arrays.asList(AsnExceStatus.ASN_EXCE_STATUS_UN_EXCE.val,
-                    AsnExceStatus.OUT_STOCK_STATUS_TASK_INIT.val);
-            if (!list.contains(finalWkOrder.getExceStatus())) {
-                throw new CoolException("浠呮湭鎵ц鐘舵�佺殑鍗曟嵁鍙彇娑堬紒锛�");
-            }
+            assertWkOrderExceStatusForCancel(finalWkOrder);
             order.getOrderItems().forEach(orderItem -> {
                 if (!asnOrderItemService.remove(new LambdaQueryWrapper<WkOrderItem>()
                         .eq(WkOrderItem::getMatnrCode, orderItem.getMatnr())

--
Gitblit v1.9.1