From a2ef34a807b1f88ac9b18dae51adbf61ce821595 Mon Sep 17 00:00:00 2001
From: chen.lin <1442464845@qq.com>
Date: 星期四, 05 三月 2026 11:31:40 +0800
Subject: [PATCH] RCS对接优化

---
 rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/TaskSchedules.java |  156 ++++++++++++++++++++++++++--------------------------
 1 files changed, 78 insertions(+), 78 deletions(-)

diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/TaskSchedules.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/TaskSchedules.java
index 6ce0261..84c2299 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/TaskSchedules.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/TaskSchedules.java
@@ -104,10 +104,11 @@
 
 
     /**
-     * @param
-     * @return
+     * 瀹屾垚鍏ュ簱锛屾洿鏂板簱浣嶆槑缁嗐�佺粍鎵樼姸鎬侊紝骞跺湪姝ょ粺涓�鎵ц 9.1 鍏�/鍑哄簱缁撴灉涓婃姤浜戜粨銆�
+     * 涓� RCS 鍥炶皟褰㈡垚闂幆锛歊CS 涓婃姤浠诲姟缁撴潫鍚庝粎灏嗕换鍔$姸鎬佺疆涓� COMPLETE_IN锛堣 WcsServiceImpl.receiveExMsg锛夛紝
+     * 鏈畾鏃朵换鍔℃壂鎻� COMPLETE_IN 骞舵墽琛� complateInTask锛堝簱浣嶃�佺粍鎵樸��9.1 涓婃姤浜戜粨锛夈��
+     *
      * @author Ryan
-     * @description 瀹屾垚鍏ュ簱锛屾洿鏂板簱瀛�
      * @time 2025/4/2 12:37
      */
     @Scheduled(cron = "0/3 * * * * ?")
@@ -122,10 +123,12 @@
     }
 
     /**
+     * 瀹屾垚鍑哄簱浠诲姟锛屾洿鏂板簱浣�/鍑哄簱鍗曪紝骞跺湪姝ょ粺涓�鎵ц 9.1 鍏�/鍑哄簱缁撴灉涓婃姤浜戜粨銆�
+     * 涓� RCS 鍥炶皟褰㈡垚闂幆锛歊CS 涓婃姤 END 鍚庝粎灏嗗嚭搴撲换鍔$姸鎬佺疆涓� COMPLETE_OUT锛堣 WcsServiceImpl.receiveExMsg锛夛紝
+     * 鏈畾鏃朵换鍔℃壂鎻� COMPLETE_OUT 骞舵墽琛� completeTask锛堟墸搴撲綅銆佹洿鏂板嚭搴撳崟銆�9.1 涓婃姤浜戜粨锛夈��
+     *
      * @author Ryan
      * @date 2025/5/20
-     * @description: 瀹屾垚鍑哄簱浠诲姟锛屾洿鏂板簱瀛�
-     * @version 1.0
      */
     @Scheduled(cron = "0/5 * * * * ?  ")
     @Transactional(rollbackFor = Exception.class)
@@ -251,7 +254,7 @@
     @Scheduled(cron = "0/35 * * * * ?  ")
     @Transactional(rollbackFor = Exception.class)
     public void pubTaskToWcs() {
-        log.info("瀹氭椂浠诲姟寮�濮嬫墽琛岋細浠诲姟涓嬪彂鍒癛CS");
+        log.debug("瀹氭椂浠诲姟寮�濮嬫墽琛岋細浠诲姟涓嬪彂鍒癛CS");
         Long loginUserId = SystemAuthUtils.getLoginUserId();
         List<Integer> list = Arrays.asList(
                  TaskType.TASK_TYPE_LOC_MOVE.type
@@ -271,7 +274,7 @@
                 .in(Task::getTaskType, list)
                 .in(Task::getTaskStatus, integers)
                 .orderByDesc(Task::getSort));
-        log.info("鏌ヨ鍒板緟涓嬪彂浠诲姟鏁伴噺锛歿}", tasks.size());
+        log.debug("鏌ヨ鍒板緟涓嬪彂浠诲姟鏁伴噺锛歿}", tasks.size());
         if (tasks.isEmpty()) {
             log.debug("娌℃湁寰呬笅鍙戠殑浠诲姟锛屽畾鏃朵换鍔$粨鏉�");
             return;
@@ -295,9 +298,9 @@
 //            }
 //        }
         /**涓嬪彂鏅�氱珯鐐逛换鍔★紝鎶ラ敊鍥炴粴锛屼笉鍐嶅線涓嬫墽琛�*/
-        log.info("寮�濮嬩笅鍙憑}涓换鍔″埌RCS", tasks.size());
+        log.debug("寮�濮嬩笅鍙憑}涓换鍔″埌RCS", tasks.size());
         taskService.pubTaskToWcs(tasks);
-        log.info("瀹氭椂浠诲姟鎵ц瀹屾垚锛氫换鍔′笅鍙戝埌RCS");
+        log.debug("瀹氭椂浠诲姟鎵ц瀹屾垚锛氫换鍔′笅鍙戝埌RCS");
     }
 
     /**
@@ -595,87 +598,84 @@
             }
             List<TaskItem> taskItems = taskItemService.list(new LambdaQueryWrapper<TaskItem>().eq(TaskItem::getTaskId, task.getId()));
 
+            // 涓婃姤ERP鏆傛椂娉ㄩ噴锛�/rsf-open-api/erp/report/order锛�
+            // if (task.getTaskType().equals(TaskType.TASK_TYPE_IN.type)) {
+            //     for (TaskItem taskItem : taskItems) {
+            //         if (Objects.isNull(taskItem.getOrderId())) {
+            //             continue;
+            //         }
+            //         WkOrder order = asnOrderService.getById(taskItem.getOrderId());
+            //         if (Objects.isNull(order)) {
+            //             continue;
+            //         }
+            //         // 鍏ュ簱鍗曚换鍔℃槑缁嗕笂鎶ワ細浼樺厛鎸� orderItemId锛堝崟鎹槑缁咺D锛夋煡锛屽惁鍒欐寜 orderId+matnrId(+fieldsIndex) 鏌ワ紝纭繚鑳芥壘鍒板崟鎹槑缁�
+            //         WkOrderItem wkOrderItem = null;
+            //         if (taskItem.getOrderItemId() != null) {
+            //             wkOrderItem = asnOrderItemService.getById(taskItem.getOrderItemId());
+            //         }
+            //         if (wkOrderItem == null) {
+            //             LambdaQueryWrapper<WkOrderItem> qw = new LambdaQueryWrapper<WkOrderItem>()
+            //                     .eq(WkOrderItem::getOrderId, order.getId())
+            //                     .eq(WkOrderItem::getMatnrId, taskItem.getMatnrId());
+            //             if (StringUtils.isNotBlank(taskItem.getFieldsIndex())) {
+            //                 qw.eq(WkOrderItem::getFieldsIndex, taskItem.getFieldsIndex());
+            //             }
+            //             wkOrderItem = asnOrderItemService.getOne(qw);
+            //         }
+            //         if (Objects.isNull(wkOrderItem)) {
+            //             logger.warn("浠诲姟鍘嗗彶妗e鐞嗭細鍗曟嵁鏄庣粏涓嶅瓨鍦ㄦ垨宸插畬鎴愶紝璺宠繃涓婃姤 - taskId={}, orderId={}, orderItemId={}, matnrId={}, fieldsIndex={}", task.getId(), order.getId(), taskItem.getOrderItemId(), taskItem.getMatnrId(), taskItem.getFieldsIndex());
+            //             continue;
+            //         }
+            //         /**鍏ュ簱鍗曟槑缁嗕笂鎶�*/
+            //         reportMsgService.reportOrderItem(wkOrderItem);
+            //     }
+            // } else
             if (task.getTaskType().equals(TaskType.TASK_TYPE_IN.type)) {
-                for (TaskItem taskItem : taskItems) {
-                    if (Objects.isNull(taskItem.getOrderId())) {
-                        continue;
-                    }
-                    WkOrder order = asnOrderService.getById(taskItem.getOrderId());
-                    if (Objects.isNull(order)) {
-                        continue;
-                    }
-                    //鍏ュ簱鍗曚换鍔℃槑缁嗕笂鎶�
-                    WkOrderItem wkOrderItem = asnOrderItemService.getOne(new LambdaQueryWrapper<WkOrderItem>()
-                            .eq(WkOrderItem::getOrderId, order.getId())
-                            .eq(WkOrderItem::getFieldsIndex, taskItem.getFieldsIndex()));
-                    if (Objects.isNull(wkOrderItem)) {
-                        throw new CoolException("鏁版嵁閿欒锛屽崟鎹槑缁嗕笉瀛樺湪鎴栧凡瀹屾垚锛侊紒");
-                    }
-                    /**鍏ュ簱鍗曟槑缁嗕笂鎶�*/
-                    reportMsgService.reportOrderItem(wkOrderItem);
-                }
+                // 鍏ュ簱绫诲瀷浠呰浆鍘嗗彶锛屼笉涓婃姤ERP锛堝凡娉ㄩ噴锛�
             } else if ((task.getTaskType() >= TaskType.TASK_TYPE_OUT.type && task.getTaskType() <= TaskType.TASK_TYPE_EMPITY_OUT.type)
                     || task.getTaskType().equals(TaskType.TASK_TYPE_PICK_IN.type)) {
-                /**鍒ゆ柇鍗曟嵁鏄惁瀹屾垚**/
-                // 鍙湁娉㈡绫诲瀷鐨勪换鍔℃墠闇�瑕佹煡璇㈡尝娆″叧鑱斿崟
+                /**鍒ゆ柇鍗曟嵁鏄惁瀹屾垚锛氭尝娆′笅鍙戙�佹寜鍗曚笅鍙戯紙鐐瑰嚮涓嬪彂浠诲姟锛夊畬鎴愬悗鍧囧皢鍑哄簱鍗曠疆涓哄畬缁�*/
+                Set<Long> orderIdsToDone = new HashSet<>();
                 if (task.getResource() != null && task.getResource().equals(TaskResouceType.TASK_RESOUCE_WAVE_TYPE.val)) {
                     Set<Long> longSet = taskItems.stream()
                             .map(TaskItem::getSourceId)
                             .filter(Objects::nonNull)
                             .collect(Collectors.toSet());
-                    
-                    if (longSet.isEmpty()) {
-                        logger.warn("浠诲姟{}鐨勪换鍔℃槑缁嗕腑娌℃湁鏈夋晥鐨剆ourceId锛岃烦杩囨尝娆″叧鑱斿崟鏌ヨ銆備换鍔$紪鐮侊細{}锛屼换鍔$被鍨嬶細{}", 
-                                task.getId(), task.getTaskCode(), task.getTaskType());
-                    } else {
+                    if (!longSet.isEmpty()) {
                         List<WaveOrderRela> waveOrderRelas = waveOrderRelaService.list(new LambdaQueryWrapper<WaveOrderRela>()
                                 .in(WaveOrderRela::getWaveId, longSet));
-                        if (Cools.isEmpty(waveOrderRelas)) {
-                            logger.warn("浠诲姟{}鐨勬尝娆″搴斿叧鑱斿崟鏈壘鍒帮紝鍙兘鏄暟鎹笉涓�鑷存垨浠诲姟涓嶆槸閫氳繃娉㈡鍒涘缓鐨勩�備换鍔$紪鐮侊細{}锛宻ourceIds锛歿}", 
-                                    task.getId(), task.getTaskCode(), longSet);
-                        } else {
-                            Set<Long> orderIds = waveOrderRelas.stream().map(WaveOrderRela::getOrderId).collect(Collectors.toSet());
-                            List<WkOrder> wkOrders = asnOrderService.listByIds(orderIds);
-                            if (wkOrders.isEmpty()) {
-                                logger.warn("浠诲姟{}鐨勫叧鑱斿崟鎹笉瀛樺湪銆備换鍔$紪鐮侊細{}锛宱rderIds锛歿}", 
-                                        task.getId(), task.getTaskCode(), orderIds);
-                            } else {
-                                Config allowChang = configService.getOne(new LambdaQueryWrapper<Config>().eq(Config::getFlag, GlobalConfigCode.ALLOW_OVER_CHANGE));
-
-                                wkOrders.forEach(order -> {
-                                    //鍒ゆ柇鏄惁鍏佽瓒呮敹锛屼笉鍏佽瓒呮敹娣诲姞鎷掓敹鍒ゆ柇
-                                    if (!Objects.isNull(allowChang)) {
-                                        if (!Boolean.parseBoolean(allowChang.getVal())) {
-                                            if (order.getAnfme().compareTo(order.getQty()) == 0) {
-                                                order.setExceStatus(AsnExceStatus.OUT_STOCK_STATUS_TASK_DONE.val);
-                                                if (order.getQty() == null || order.getQty().compareTo(0.0) == 0) {
-                                                    order.setQty(order.getWorkQty() != null ? order.getWorkQty() : 0.0);
-                                                }
-                                                if (!asnOrderService.updateById(order)) {
-                                                    logger.error("鍑哄簱鍗曟洿鏂扮姸鎬佸け璐ャ�傝鍗旾D锛歿}锛岃鍗曠紪鐮侊細{}", order.getId(), order.getCode());
-                                                }
-                                            }
-                                        } else {
-                                            if (order.getAnfme().compareTo(order.getQty()) <= 0) {
-                                                order.setExceStatus(AsnExceStatus.OUT_STOCK_STATUS_TASK_DONE.val);
-                                                if (order.getQty() == null || order.getQty().compareTo(0.0) == 0) {
-                                                    order.setQty(order.getWorkQty() != null ? order.getWorkQty() : 0.0);
-                                                }
-                                                if (!asnOrderService.updateById(order)) {
-                                                    logger.error("鍑哄簱鍗曟洿鏂扮姸鎬佸け璐ャ�傝鍗旾D锛歿}锛岃鍗曠紪鐮侊細{}", order.getId(), order.getCode());
-                                                }
-                                            }
-                                        }
-                                    }
-                                    //妫�鏌ュ崟鎹槸鍚﹀畬鎴�
-
-                                });
-                            }
+                        if (!Cools.isEmpty(waveOrderRelas)) {
+                            orderIdsToDone.addAll(waveOrderRelas.stream().map(WaveOrderRela::getOrderId).collect(Collectors.toSet()));
                         }
                     }
-                } else {
-                    logger.debug("浠诲姟{}涓嶆槸娉㈡绫诲瀷浠诲姟锛堣祫婧愮被鍨嬶細{}锛夛紝璺宠繃娉㈡鍏宠仈鍗曟煡璇€�備换鍔$紪鐮侊細{}", 
-                            task.getId(), task.getResource(), task.getTaskCode());
+                } else if (task.getResource() != null && task.getResource().equals(TaskResouceType.TASK_RESOUCE_ORDER_TYPE.val)) {
+                    // 鎸夊崟涓嬪彂锛氫换鍔℃槑缁� sourceId 涓哄嚭搴撳崟ID
+                    Set<Long> ids = taskItems.stream()
+                            .map(TaskItem::getSourceId)
+                            .filter(Objects::nonNull)
+                            .collect(Collectors.toSet());
+                    orderIdsToDone.addAll(ids);
+                }
+                if (!orderIdsToDone.isEmpty()) {
+                    List<WkOrder> wkOrders = asnOrderService.listByIds(orderIdsToDone);
+                    if (!wkOrders.isEmpty()) {
+                        Config allowChang = configService.getOne(new LambdaQueryWrapper<Config>().eq(Config::getFlag, GlobalConfigCode.ALLOW_OVER_CHANGE));
+                        wkOrders.forEach(order -> {
+                            if (order.getAnfme() == null) return;
+                            boolean canDone = Boolean.TRUE.equals(allowChang != null && Boolean.parseBoolean(allowChang.getVal()))
+                                    ? (order.getQty() != null && order.getAnfme().compareTo(order.getQty()) <= 0)
+                                    : (order.getQty() != null && order.getAnfme().compareTo(order.getQty()) == 0);
+                            if (canDone) {
+                                order.setExceStatus(AsnExceStatus.OUT_STOCK_STATUS_TASK_DONE.val);
+                                if (order.getQty() == null || order.getQty().compareTo(0.0) == 0) {
+                                    order.setQty(order.getWorkQty() != null ? order.getWorkQty() : 0.0);
+                                }
+                                if (!asnOrderService.updateById(order)) {
+                                    logger.error("鍑哄簱鍗曟洿鏂扮姸鎬佸け璐ャ�傝鍗旾D锛歿}锛岃鍗曠紪鐮侊細{}", order.getId(), order.getCode());
+                                }
+                            }
+                        });
+                    }
                 }
                 
                 //鍑哄簱鍗曚笂鎶CS淇敼搴撲綅鐘舵��

--
Gitblit v1.9.1