From d16d730f80f856150bf7a186037cadd99dce3274 Mon Sep 17 00:00:00 2001
From: zwl <1051256694@qq.com>
Date: 星期二, 28 四月 2026 21:39:39 +0800
Subject: [PATCH] 双伸出库改成订单出库

---
 src/main/java/com/zy/asrs/controller/OpenController.java |   78 +++++++++++++++++++++++++++++++++++----
 1 files changed, 70 insertions(+), 8 deletions(-)

diff --git a/src/main/java/com/zy/asrs/controller/OpenController.java b/src/main/java/com/zy/asrs/controller/OpenController.java
index 51aae33..40d535e 100644
--- a/src/main/java/com/zy/asrs/controller/OpenController.java
+++ b/src/main/java/com/zy/asrs/controller/OpenController.java
@@ -524,17 +524,32 @@
     }
 
     /**
-     * 7.11 鍑哄簱閫氱煡鍗曪紙浼犻�掓湁搴忔棤搴忚鍒欙級
+     * 7.11 鍑哄簱閫氱煡鍗曪紙浼犻�掓湁搴忔棤搴忚鍒欙級銆�
+     *
+     * stationId <= 600锛氭部鐢ㄥ師瀹炴椂浠诲姟妯″紡锛屾帴鍙f牎楠岄�氳繃鍚庣洿鎺ョ敓鎴� WrkMast/WrkDetl銆�
+     * stationId > 600锛氳繘鍏モ�滃厛寤哄嚭搴撹鍗曘�佸悗缁畾鏃剁敓鎴愪换鍔♀�濈殑寤惰繜妯″紡銆�
+     *
+     * 寤惰繜妯″紡鐨勫叧閿偣锛�
+     * 1. orderId 浣滀负鍑哄簱璁㈠崟鍙疯惤鍒� man_order_pakout.order_no銆�
+     * 2. entryWmsCode 浣滀负杩涗粨缂栧彿淇濆瓨鍒拌鍗曟槑缁嗭紝鍚庣画鐢熸垚浠诲姟鏃跺己鍒朵綔涓� WrkMast.batchSeq銆�
+     * 3. 寤哄崟闃舵鍙牎楠屽簱瀛樺拰婊″簱浣嶏紝涓嶉攣搴撲綅銆佷笉鏀� loc_sts锛岄伩鍏嶆彁鍓嶅崰鐢ㄨ澶囦换鍔¤祫婧愩��
      */
     @PostMapping("/outOrder")
     public synchronized R outOrder(@RequestBody ArrayList<OutTaskParam> params, HttpServletRequest request) {
-        int count = params.size();
         if (Cools.isEmpty(params)) {
             return R.error("璇锋眰鍙傛暟涓嶈兘涓虹┖");
         }
+        int count = params.size();
         log.info("[outOrder] cache: {}", JSON.toJSONString(params));
         request.setAttribute("cache", params);
+        // stationId <= 600 鐨勫師濮嬪疄鏃跺嚭搴撲换鍔″垎缁勶紝鍚庨潰鐩存帴浼犵粰 outOrderBatch銆�
         Map<String, List<OutTaskParam>> linesByBatchSeq = new LinkedHashMap<>();
+        // 缁熶竴鍋氭湁搴�/鏃犲簭鏍¢獙鐨勫垎缁勶細
+        // 浣庣珯鐐规寜 orderId + batchSeq锛涢珮绔欑偣鎸� orderId + entryWmsCode銆�
+        // 楂樼珯鐐瑰悗缁細鎶� entryWmsCode 杞垚浠诲姟 batchSeq锛屽洜姝よ繖閲屽厛鎸夊悓涓�缁村害鏍¢獙 seq銆�
+        Map<String, List<OutTaskParam>> linesByValidateKey = new LinkedHashMap<>();
+        // stationId > 600 鐨勫弬鏁板彧寤哄嚭搴撹鍗曪紝瀹氭椂鍣ㄥ啀鎸夎繘浠撶紪鍙烽�愭壒鐢熸垚浠诲姟銆�
+        List<OutTaskParam> pendingOrderParams = new ArrayList<>();
         for (OutTaskParam outTaskParam : params) {
             if (Cools.isEmpty(outTaskParam) || Cools.isEmpty(outTaskParam.getOrderId())) {
                 return R.error("鍑哄簱鍗曞彿涓嶈兘涓虹┖");
@@ -545,14 +560,33 @@
             if (Cools.isEmpty(outTaskParam.getStationId())) {
                 return R.error("鎵樼洏銆�" + outTaskParam.getPalletId() + "銆嶅嚭搴撳彛缂栫爜涓嶈兘涓虹┖");
             }
-            linesByBatchSeq.computeIfAbsent(outTaskParam.getBatchSeq(), k -> new ArrayList<>()).add(outTaskParam);
+            Integer stationId;
+            try {
+                stationId = Integer.valueOf(outTaskParam.getStationId());
+            } catch (NumberFormatException ex) {
+                return R.error("鎵樼洏銆�" + outTaskParam.getPalletId() + "銆嶅嚭搴撳彛缂栫爜鏍煎紡閿欒锛�" + outTaskParam.getStationId());
+            }
+            if (stationId > 600) {
+                // 楂樼珯鐐逛换鍔″繀椤诲甫杩涗粨缂栧彿锛涜繖鏄畾鏃剁敓鎴愪换鍔℃椂鐨勬壒娆¤竟鐣岋紝
+                // 涔熸槸 OutboundBatchSeqReleaseGuard 鍒ゆ柇鑳藉惁鏀捐涓嬩竴杩涗粨缂栧彿鐨勪緷鎹��
+                if (Cools.isEmpty(outTaskParam.getEntryWmsCode())) {
+                    return R.error("鎵樼洏銆�" + outTaskParam.getPalletId() + "銆嶈繘浠撶紪鍙蜂笉鑳戒负绌�");
+                }
+                pendingOrderParams.add(outTaskParam);
+                linesByValidateKey.computeIfAbsent(outTaskParam.getOrderId() + "#" + outTaskParam.getEntryWmsCode(), k -> new ArrayList<>()).add(outTaskParam);
+            } else {
+                linesByBatchSeq.computeIfAbsent(outTaskParam.getBatchSeq(), k -> new ArrayList<>()).add(outTaskParam);
+                linesByValidateKey.computeIfAbsent(buildOutOrderBatchKey(outTaskParam), k -> new ArrayList<>()).add(outTaskParam);
+            }
         }
 
-        for (Map.Entry<String, List<OutTaskParam>> entry : linesByBatchSeq.entrySet()) {
+        // 浠嶄繚鐣欏師鎺ュ彛鐨勬湁搴�/鏃犲簭瑙勫垯銆傞珮绔欑偣铏界劧鏆備笉鐢熸垚浠诲姟锛屼篃瑕佸湪寤哄崟鍓嶄繚璇�
+        // 鍚屼竴杩涗粨缂栧彿鍐呯殑鏄庣粏椤哄簭鍚堟硶锛屽惁鍒欏悗缁畾鏃剁敓鎴愪换鍔℃椂鎵嶅け璐ヤ細鏇撮毦杩芥函銆�
+        for (Map.Entry<String, List<OutTaskParam>> entry : linesByValidateKey.entrySet()) {
             List<OutTaskParam> lines = entry.getValue();
             OutTaskParam head = lines.get(0);
             String oid = head.getOrderId();
-            String batchSeq = head.getBatchSeq();
+            String batchSeq = isPendingOutOrderStation(head.getStationId()) ? head.getEntryWmsCode() : head.getBatchSeq();
             boolean hasZero = false;
             boolean hasPositive = false;
             List<Integer> orderedSeqs = new ArrayList<>(lines.size());
@@ -583,8 +617,9 @@
             }
         }
 
+        // 閲嶆柊鎸夋牎楠屽垎缁勯『搴忓睍寮�锛屼繚璇侀噸澶嶆墭鐩樸�佸簱瀛樸�佸簱浣嶆牎楠屼笌涓婇潰鐨勬壒娆℃牎楠岀湅鍒板悓涓�鎵规暟鎹��
         List<OutTaskParam> groupedParams = new ArrayList<>(params.size());
-        for (List<OutTaskParam> lines : linesByBatchSeq.values()) {
+        for (List<OutTaskParam> lines : linesByValidateKey.values()) {
             groupedParams.addAll(lines);
         }
 
@@ -616,6 +651,8 @@
 //            }
 //        }
 
+        // 寤惰繜寤哄崟妯″紡涔熷繀椤荤‘璁ゆ墭鐩樻湁搴撳瓨涓斿綋鍓嶅簱浣嶄负婊″簱浣嶃��
+        // 杩欓噷鍙仛鍑嗗叆鏍¢獙锛屼笉鍦� controller 灞傛彁鍓嶉攣搴撲綅锛涚湡姝i攣搴撲綅浠嶇敱鍚庣画 outOrderBatch 鐢熸垚浠诲姟鏃跺鐞嗐��
         List<OutTaskParam> missingStock = Lists.newArrayList();
         List<OutTaskParam> missingLoc = Lists.newArrayList();
         for (OutTaskParam outTaskParam : groupedParams) {
@@ -645,8 +682,25 @@
             }
             return R.error("娌℃湁鎵惧埌鎵樼洏鐮佸搴斿簱浣嶏細" + String.join("锛�", badPalletIds)).add(missingLoc);
         }
-
-        return openService.outOrderBatch(linesByBatchSeq,count);
+        // 娣峰悎璇锋眰涓嬪厛鍒涘缓楂樼珯鐐瑰嚭搴撹鍗曪紝鍐嶅垱寤轰綆绔欑偣瀹炴椂浠诲姟銆�
+        // 杩欐牱鍚屼竴涓� orderId 鍚屾椂鍖呭惈楂樸�佷綆绔欑偣鏃讹紝楂樼珯鐐瑰缓鍗曚笉浼氳浣庣珯鐐瑰垰鐢熸垚鐨勪换鍔¤鍒や负鈥滃凡鏈変换鍔♀�濄��
+        R orderResult = R.ok();
+        if (!pendingOrderParams.isEmpty()) {
+            orderResult = openService.outOrderCreatePakoutOrder(pendingOrderParams);
+        }
+        R directResult = R.ok();
+        if (!linesByBatchSeq.isEmpty()) {
+            directResult = openService.outOrderBatch(linesByBatchSeq, count - pendingOrderParams.size());
+        }
+        if (!linesByBatchSeq.isEmpty() && !pendingOrderParams.isEmpty()) {
+            Map<String, Object> result = new LinkedHashMap<>();
+            result.put("directTaskCount", count - pendingOrderParams.size());
+            result.put("pendingOrderCount", pendingOrderParams.size());
+            result.put("directResult", directResult);
+            result.put("orderResult", orderResult);
+            return R.ok().add(result);
+        }
+        return pendingOrderParams.isEmpty() ? directResult : orderResult;
     }
 
     /**
@@ -698,6 +752,14 @@
         return param.getOrderId() + "#" + param.getBatchSeq();
     }
 
+    private boolean isPendingOutOrderStation(String stationId) {
+        try {
+            return Integer.valueOf(stationId) > 600;
+        } catch (Exception ignored) {
+            return false;
+        }
+    }
+
     /**
      * 鎺ㄨ崘鍑哄簱绔欑偣
      */

--
Gitblit v1.9.1