From fc80e4040d6bf39b8657f94df1f957732bae26fe Mon Sep 17 00:00:00 2001
From: zwl <1051256694@qq.com>
Date: 星期三, 22 四月 2026 22:02:31 +0800
Subject: [PATCH] 电视机入库出库显示耗时、托数功能修改: 1.入库耗时改成当前订单第一托入库任务创建时间到后续入库的创建时间相减转换成分钟 2.出库耗时改成当前订订单任务创建时间减去到达出库口的耗时时间 3.入库托数改成当前入库订单号累计入库数量

---
 src/main/java/com/zy/asrs/task/WorkMastScheduler.java |   93 ++++++++++++++++++++++------------------------
 1 files changed, 44 insertions(+), 49 deletions(-)

diff --git a/src/main/java/com/zy/asrs/task/WorkMastScheduler.java b/src/main/java/com/zy/asrs/task/WorkMastScheduler.java
index 2ce6486..d594701 100644
--- a/src/main/java/com/zy/asrs/task/WorkMastScheduler.java
+++ b/src/main/java/com/zy/asrs/task/WorkMastScheduler.java
@@ -9,6 +9,7 @@
 import com.zy.asrs.service.WrkMastService;
 import com.zy.asrs.task.core.ReturnT;
 import com.zy.asrs.task.handler.WorkMastHandler;
+import com.zy.asrs.task.support.OutboundBatchSeqReleaseGuard;
 import com.zy.asrs.utils.Utils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -39,6 +40,8 @@
     private WrkMastService wrkMastService;
     @Autowired
     private WorkMastHandler workMastHandler;
+    @Autowired
+    private OutboundBatchSeqReleaseGuard outboundBatchSeqReleaseGuard;
 
     @Scheduled(cron = "0/3 * * * * ? ")
     private void execute(){
@@ -91,8 +94,13 @@
                 continue;
             }
 
-            WorkTaskParams params = buildWorkTaskParams(wrkMast);
             if (isOutboundPublishTask(wrkMast)) {
+                if (Cools.isEmpty(wrkMast.getBatchSeq())) {
+                    log.warn("鍑哄簱杩涗粨缂栧彿(batchSeq)涓虹┖锛岃烦杩囦笅鍙�, wrkNo={}, userNo={}",
+                            wrkMast.getWrkNo(), wrkMast.getUserNo());
+                    continue;
+                }
+                WorkTaskParams params = buildWorkTaskParams(wrkMast);
                 String userNo = normalizeGroupKey(wrkMast.getUserNo());
                 String batchSeq = normalizeGroupKey(wrkMast.getBatchSeq());
                 outboundTasksByUserNo
@@ -100,7 +108,7 @@
                         .computeIfAbsent(batchSeq, key -> new ArrayList<>())
                         .add(params);
             } else {
-                paramsList.add(params);
+                paramsList.add(buildWorkTaskParams(wrkMast));
             }
         }
 
@@ -121,10 +129,9 @@
             batchSeqs.sort(this::compareBatchSeqNatural);
 
             for (String batchSeq : batchSeqs) {
-                String blockingBatchSeq = findFirstUnfinishedOutboundBatchSeq(userNo);
-                if (!Objects.equals(batchSeq, blockingBatchSeq)) {
-                    log.info("鍑哄簱鎵规鏈畬鎴愶紝鏆傚仠鍚庣画涓嬪彂, userNo={}, blockingBatchSeq={}, nextBatchSeq={}",
-                            userNo, blockingBatchSeq, batchSeq);
+                String blockMsg = outboundBatchSeqReleaseGuard.validateReady(userNo, batchSeq);
+                if (!Cools.isEmpty(blockMsg)) {
+                    log.info(blockMsg);
                     break;
                 }
 
@@ -157,7 +164,7 @@
                     .setTaskPri(wrkMast.getIoPri().intValue())
                     .setBarcode(wrkMast.getBarcode());
             if (wrkMast.getPltType() != null && wrkMast.getPltType() > 0) {
-                params.setBatch(wrkMast.getUserNo())
+                params.setBatch(wrkMast.getBatchSeq())
                         .setBatchSeq(wrkMast.getPltType());
             }
         // 2: 鍏ュ簱銆傚叆搴撴帴鍙d娇鐢� sourceStaNo + 鐩爣搴撲綅銆�
@@ -183,55 +190,43 @@
         return wrkMast != null && Objects.equals(wrkMast.getIoType(), 101);
     }
 
-    private String findFirstUnfinishedOutboundBatchSeq(String userNo) {
-        EntityWrapper<WrkMast> wrapper = new EntityWrapper<>();
-        if (Cools.isEmpty(userNo)) {
-            wrapper.isNull("user_no");
-        } else {
-            wrapper.eq("user_no", userNo);
-        }
-        wrapper.eq("io_type", 101);
-        wrapper.lt("wrk_sts", 14);
-        List<WrkMast> rows = wrkMastService.selectList(wrapper);
-        if (rows == null || rows.isEmpty()) {
-            return null;
-        }
-        String firstBatchSeq = null;
-        for (WrkMast row : rows) {
-            String batchSeq = normalizeGroupKey(row.getBatchSeq());
-            if (firstBatchSeq == null || compareBatchSeqNatural(batchSeq, firstBatchSeq) < 0) {
-                firstBatchSeq = batchSeq;
-            }
-        }
-        return firstBatchSeq;
-    }
-
     private int compareBatchSeqNatural(String left, String right) {
         String safeLeft = Cools.isEmpty(left) ? "" : left;
         String safeRight = Cools.isEmpty(right) ? "" : right;
-        boolean leftNumeric = isDigits(safeLeft);
-        boolean rightNumeric = isDigits(safeRight);
-        if (leftNumeric && rightNumeric) {
-            BigInteger leftValue = new BigInteger(safeLeft);
-            BigInteger rightValue = new BigInteger(safeRight);
-            int compare = leftValue.compareTo(rightValue);
+        int leftIndex = 0;
+        int rightIndex = 0;
+        while (leftIndex < safeLeft.length() && rightIndex < safeRight.length()) {
+            char leftChar = safeLeft.charAt(leftIndex);
+            char rightChar = safeRight.charAt(rightIndex);
+            if (Character.isDigit(leftChar) && Character.isDigit(rightChar)) {
+                int leftStart = leftIndex;
+                int rightStart = rightIndex;
+                while (leftIndex < safeLeft.length() && Character.isDigit(safeLeft.charAt(leftIndex))) {
+                    leftIndex++;
+                }
+                while (rightIndex < safeRight.length() && Character.isDigit(safeRight.charAt(rightIndex))) {
+                    rightIndex++;
+                }
+                String leftNumber = safeLeft.substring(leftStart, leftIndex);
+                String rightNumber = safeRight.substring(rightStart, rightIndex);
+                int compare = new BigInteger(leftNumber).compareTo(new BigInteger(rightNumber));
+                if (compare != 0) {
+                    return compare;
+                }
+                compare = Integer.compare(leftNumber.length(), rightNumber.length());
+                if (compare != 0) {
+                    return compare;
+                }
+                continue;
+            }
+            int compare = Character.compare(leftChar, rightChar);
             if (compare != 0) {
                 return compare;
             }
+            leftIndex++;
+            rightIndex++;
         }
-        return safeLeft.compareTo(safeRight);
-    }
-
-    private boolean isDigits(String value) {
-        if (Cools.isEmpty(value)) {
-            return false;
-        }
-        for (int i = 0; i < value.length(); i++) {
-            if (!Character.isDigit(value.charAt(i))) {
-                return false;
-            }
-        }
-        return true;
+        return Integer.compare(safeLeft.length(), safeRight.length());
     }
 
     private String normalizeGroupKey(String value) {

--
Gitblit v1.9.1