From aed8dfd97e8979b138cd858f35c15bec898542b3 Mon Sep 17 00:00:00 2001
From: Junjie <fallin.jie@qq.com>
Date: 星期四, 26 三月 2026 13:17:36 +0800
Subject: [PATCH] #

---
 src/main/java/com/zy/core/utils/CrnOperateProcessUtils.java |  387 ++++++++++++++++++------------------------------------
 1 files changed, 131 insertions(+), 256 deletions(-)

diff --git a/src/main/java/com/zy/core/utils/CrnOperateProcessUtils.java b/src/main/java/com/zy/core/utils/CrnOperateProcessUtils.java
index 3e5a8e6..ec4c22d 100644
--- a/src/main/java/com/zy/core/utils/CrnOperateProcessUtils.java
+++ b/src/main/java/com/zy/core/utils/CrnOperateProcessUtils.java
@@ -8,11 +8,14 @@
 import com.core.exception.CoolException;
 import com.zy.asrs.domain.enums.NotifyMsgType;
 import com.zy.asrs.domain.param.CreateLocMoveTaskParam;
+import com.zy.asrs.entity.BasStation;
 import com.zy.asrs.entity.BasCrnp;
 import com.zy.asrs.entity.LocMast;
 import com.zy.asrs.entity.WrkMast;
 import com.zy.asrs.service.BasCrnpService;
+import com.zy.asrs.service.BasStationService;
 import com.zy.asrs.service.LocMastService;
+import com.zy.asrs.service.WrkAnalysisService;
 import com.zy.asrs.service.WrkMastService;
 import com.zy.asrs.utils.NotifyUtils;
 import com.zy.asrs.utils.Utils;
@@ -50,6 +53,8 @@
     @Autowired
     private LocMastService locMastService;
     @Autowired
+    private BasStationService basStationService;
+    @Autowired
     private RedisUtil redisUtil;
     @Autowired
     private WmsOperateUtils wmsOperateUtils;
@@ -59,6 +64,10 @@
     private NotifyUtils notifyUtils;
     @Autowired
     private StationOperateProcessUtils stationOperateProcessUtils;
+    @Autowired
+    private WrkAnalysisService wrkAnalysisService;
+
+    private static final String CRN_OUT_REQUIRE_STATION_OUT_ENABLE_CONFIG = "crnOutRequireStationOutEnable";
 
     public synchronized void crnIoExecute() {
         Object systemConfigMapObj = redisUtil.get(RedisKeyType.SYSTEM_CONFIG_MAP.key);
@@ -121,7 +130,7 @@
         List<WrkMast> taskQueue = wrkMastService.list(new QueryWrapper<WrkMast>()
                 .in("crn_no", new ArrayList<>(dispatchCrnMap.keySet()))
                 .in("wrk_sts",
-                        WrkStsType.INBOUND_DEVICE_RUN.sts,
+                        WrkStsType.INBOUND_STATION_RUN_COMPLETE.sts,
                         WrkStsType.NEW_OUTBOUND.sts,
                         WrkStsType.NEW_LOC_MOVE.sts));
         taskQueue.sort(Comparator
@@ -144,7 +153,7 @@
                 continue;
             }
 
-            if (wrkMast.getWrkSts() != null && wrkMast.getWrkSts() == WrkStsType.INBOUND_DEVICE_RUN.sts) {
+            if (wrkMast.getWrkSts() != null && wrkMast.getWrkSts() == WrkStsType.INBOUND_STATION_RUN_COMPLETE.sts) {
                 boolean result = this.crnExecuteInPlanner(basCrnp, crnThread, wrkMast);
                 if (result) {
                     crnProtocol.setLastIo("O");
@@ -210,206 +219,6 @@
                 && !Cools.isEmpty(wrkMast.getBatch());
     }
 
-    private synchronized boolean crnExecuteIn(BasCrnp basCrnp, CrnThread crnThread) {
-        CrnProtocol crnProtocol = crnThread.getStatus();
-        if(crnProtocol == null){
-            return false;
-        }
-
-        if(!basCrnp.getInEnable().equals("Y")){
-            News.info("鍫嗗灈鏈�:{} 鍙叆淇″彿涓嶆弧瓒�", basCrnp.getCrnNo());
-            return false;
-        }
-
-        List<StationObjModel> inStationList = basCrnp.getInStationList$();
-        if(inStationList.isEmpty()){
-            News.info("鍫嗗灈鏈�:{} 鍏ュ簱绔欑偣鏈缃�", basCrnp.getCrnNo());
-            return false;
-        }
-
-        Integer crnNo = basCrnp.getCrnNo();
-
-        for (StationObjModel stationObjModel : inStationList) {
-            StationThread stationThread = (StationThread) SlaveConnection.get(SlaveType.Devp, stationObjModel.getDeviceNo());
-            if (stationThread == null) {
-                continue;
-            }
-
-            Map<Integer, StationProtocol> stationProtocolMap = stationThread.getStatusMap();
-            StationProtocol stationProtocol = stationProtocolMap.get(stationObjModel.getStationId());
-            if (stationProtocol == null) {
-                continue;
-            }
-
-            if (!stationProtocol.isAutoing()) {
-                continue;
-            }
-
-            if (!stationProtocol.isLoading()) {
-                continue;
-            }
-
-            if (stationProtocol.getTaskNo() <= 0) {
-                continue;
-            }
-
-            if (!stationProtocol.isInEnable()) {
-                News.taskInfo(stationProtocol.getTaskNo(), "鍙栬揣绔欑偣:{} 娌℃湁鍙叆淇″彿", stationObjModel.getStationId());
-                continue;
-            }
-
-            // 鑾峰彇浠诲姟
-            WrkMast wrkMast = wrkMastService.selectByWorkNo(stationProtocol.getTaskNo());
-            if (null == wrkMast) {
-                News.taskInfo(stationProtocol.getTaskNo(), "宸ヤ綔鍙�:{} 浠诲姟淇℃伅涓嶅瓨鍦�", stationProtocol.getTaskNo());
-                continue;
-            }
-
-            if (!wrkMast.getCrnNo().equals(basCrnp.getCrnNo())) {
-                continue;
-            }
-
-            if(wrkMast.getWrkSts() != WrkStsType.INBOUND_DEVICE_RUN.sts){
-                continue;
-            }
-
-            // 鑾峰彇搴撲綅淇℃伅
-            LocMast locMast = locMastService.getById(wrkMast.getLocNo());
-            if (locMast == null) {
-                News.taskInfo(wrkMast.getWrkNo(), "鐩爣搴撲綅:{} 淇℃伅涓嶅瓨鍦�", wrkMast.getLocNo());
-                continue;
-            }
-
-            if (!locMast.getLocSts().equals("S")) {
-                News.taskInfo(wrkMast.getWrkNo(), "鐩爣搴撲綅:{} 鐘舵�佸紓甯�", wrkMast.getLocNo());
-                continue;
-            }
-
-            //妫�娴嬫祬搴撲綅鐘舵��
-            boolean checkStatus = checkShallowLocStatus(locMast.getLocNo(), wrkMast.getWrkNo());
-            if (!checkStatus) {
-                News.taskInfo(wrkMast.getWrkNo(), "鍥犳祬搴撲綅鍫靛鏃犳硶鎵ц");
-                continue;
-            }
-
-            String sourceLocNo = Utils.getLocNo(stationObjModel.getDeviceRow(), stationObjModel.getDeviceBay(), stationObjModel.getDeviceLev());
-
-            CrnCommand command = crnThread.getPickAndPutCommand(sourceLocNo, wrkMast.getLocNo(), wrkMast.getWrkNo(), crnNo);
-
-            wrkMast.setWrkSts(WrkStsType.INBOUND_RUN.sts);
-            wrkMast.setCrnNo(crnNo);
-            wrkMast.setSystemMsg("");
-            wrkMast.setIoTime(new Date());
-            if (wrkMastService.updateById(wrkMast)) {
-                MessageQueue.offer(SlaveType.Crn, crnNo, new Task(2, command));
-                notifyUtils.notify(String.valueOf(SlaveType.Crn), crnNo, String.valueOf(wrkMast.getWrkNo()), wrkMast.getWmsWrkNo(), NotifyMsgType.CRN_IN_TASK_RUN, null);
-                News.info("鍫嗗灈鏈哄懡浠や笅鍙戞垚鍔燂紝鍫嗗灈鏈哄彿={}锛屼换鍔℃暟鎹�={}", crnNo, JSON.toJSON(command));
-                return true;
-            }
-        }
-        return false;
-    }
-
-    private synchronized boolean crnExecuteOut(BasCrnp basCrnp, CrnThread crnThread) {
-        CrnProtocol crnProtocol = crnThread.getStatus();
-        if(crnProtocol == null){
-            return false;
-        }
-
-        if(!basCrnp.getOutEnable().equals("Y")){
-            News.info("鍫嗗灈鏈�:{} 鍙嚭淇″彿涓嶆弧瓒�", basCrnp.getCrnNo());
-            return false;
-        }
-
-        List<StationObjModel> outStationList = basCrnp.getOutStationList$();
-        if(outStationList.isEmpty()){
-            News.info("鍫嗗灈鏈�:{} 鍑哄簱绔欑偣鏈缃�", basCrnp.getCrnNo());
-            return false;
-        }
-
-        if (isOutboundStationTaskLimitReached()) {
-            return false;
-        }
-
-        Integer crnNo = basCrnp.getCrnNo();
-
-        List<WrkMast> wrkMasts = wrkMastService.list(new QueryWrapper<WrkMast>()
-                .eq("crn_no", crnNo)
-                .eq("wrk_sts", WrkStsType.NEW_OUTBOUND.sts)
-                .orderBy(true, true, "batch_seq")
-        );
-
-        for (WrkMast wrkMast : wrkMasts) {
-            if (!allowBatchOutboundExecute(wrkMast)) {
-                continue;
-            }
-            for (StationObjModel stationObjModel : outStationList) {
-                StationThread stationThread = (StationThread) SlaveConnection.get(SlaveType.Devp, stationObjModel.getDeviceNo());
-                if (stationThread == null) {
-                    continue;
-                }
-
-                Map<Integer, StationProtocol> stationProtocolMap = stationThread.getStatusMap();
-                StationProtocol stationProtocol = stationProtocolMap.get(stationObjModel.getStationId());
-                if (stationProtocol == null) {
-                    continue;
-                }
-
-                if (!stationProtocol.isAutoing()) {
-                    continue;
-                }
-
-                if (stationProtocol.isLoading()) {
-                    continue;
-                }
-
-                if (stationProtocol.getTaskNo() != 0) {
-                    continue;
-                }
-
-                if (!stationProtocol.isOutEnable()) {
-                    News.info("鏀捐揣绔欑偣:{} 娌℃湁鍙嚭淇″彿", stationObjModel.getStationId());
-                    continue;
-                }
-
-                // 鑾峰彇搴撲綅淇℃伅
-                LocMast locMast = locMastService.getById(wrkMast.getSourceLocNo());
-                if (locMast == null) {
-                    News.taskInfo(wrkMast.getWrkNo(), "婧愬簱浣�:{} 淇℃伅涓嶅瓨鍦�", wrkMast.getSourceLocNo());
-                    continue;
-                }
-
-                if (!locMast.getLocSts().equals("R")) {
-                    News.taskInfo(wrkMast.getWrkNo(), "婧愬簱浣�:{} 鐘舵�佸紓甯�", wrkMast.getSourceLocNo());
-                    continue;
-                }
-
-                //妫�娴嬫祬搴撲綅鐘舵��
-                boolean checkStatus = checkShallowLocStatus(locMast.getLocNo(), wrkMast.getWrkNo());
-                if (!checkStatus) {
-                    News.taskInfo(wrkMast.getWrkNo(), "鍥犳祬搴撲綅鍫靛鏃犳硶鎵ц");
-                    continue;
-                }
-
-                String targetLocNo = Utils.getLocNo(stationObjModel.getDeviceRow(), stationObjModel.getDeviceBay(), stationObjModel.getDeviceLev());
-
-                CrnCommand command = crnThread.getPickAndPutCommand(wrkMast.getSourceLocNo(), targetLocNo, wrkMast.getWrkNo(), crnNo);
-
-                wrkMast.setWrkSts(WrkStsType.OUTBOUND_RUN.sts);
-                wrkMast.setCrnNo(crnNo);
-                wrkMast.setSystemMsg("");
-                wrkMast.setIoTime(new Date());
-                if (wrkMastService.updateById(wrkMast)) {
-                    MessageQueue.offer(SlaveType.Crn, crnNo, new Task(2, command));
-                    notifyUtils.notify(String.valueOf(SlaveType.Crn), crnNo, String.valueOf(wrkMast.getWrkNo()), wrkMast.getWmsWrkNo(), NotifyMsgType.CRN_OUT_TASK_RUN, null);
-                    News.info("鍫嗗灈鏈哄懡浠や笅鍙戞垚鍔燂紝鍫嗗灈鏈哄彿={}锛屼换鍔℃暟鎹�={}", crnNo, JSON.toJSON(command));
-                    return true;
-                }
-            }
-        }
-        return false;
-    }
-
     private synchronized boolean crnExecuteInPlanner(BasCrnp basCrnp, CrnThread crnThread, WrkMast wrkMast) {
         CrnProtocol crnProtocol = crnThread.getStatus();
         if (crnProtocol == null) {
@@ -462,7 +271,7 @@
                 continue;
             }
 
-            if (wrkMast.getWrkSts() != WrkStsType.INBOUND_DEVICE_RUN.sts) {
+            if (wrkMast.getWrkSts() != WrkStsType.INBOUND_STATION_RUN_COMPLETE.sts) {
                 continue;
             }
 
@@ -489,11 +298,14 @@
 
             CrnCommand command = crnThread.getPickAndPutCommand(sourceLocNo, wrkMast.getLocNo(), wrkMast.getWrkNo(), crnNo);
 
+            Date now = new Date();
             wrkMast.setWrkSts(WrkStsType.INBOUND_RUN.sts);
             wrkMast.setCrnNo(crnNo);
             wrkMast.setSystemMsg("");
-            wrkMast.setIoTime(new Date());
+            wrkMast.setIoTime(now);
+            wrkMast.setModiTime(now);
             if (wrkMastService.updateById(wrkMast)) {
+                wrkAnalysisService.markCraneStart(wrkMast, now);
                 MessageQueue.offer(SlaveType.Crn, crnNo, new Task(2, command));
                 notifyUtils.notify(String.valueOf(SlaveType.Crn), crnNo, String.valueOf(wrkMast.getWrkNo()), wrkMast.getWmsWrkNo(), NotifyMsgType.CRN_IN_TASK_RUN, null);
                 News.info("鍫嗗灈鏈哄懡浠や笅鍙戞垚鍔燂紝鍫嗗灈鏈哄彿={}锛屼换鍔℃暟鎹�={}", crnNo, JSON.toJSON(command));
@@ -526,6 +338,10 @@
 
         Integer crnNo = basCrnp.getCrnNo();
 
+        if (isOutboundTargetStationTaskLimitReached(wrkMast)) {
+            return false;
+        }
+
         if (!allowBatchOutboundExecute(wrkMast)) {
             return false;
         }
@@ -554,8 +370,8 @@
                 continue;
             }
 
-            if (!stationProtocol.isOutEnable()) {
-                News.info("鏀捐揣绔欑偣:{} 娌℃湁鍙嚭淇″彿", stationObjModel.getStationId());
+            if (isRequireOutboundStationOutEnable() && !stationProtocol.isOutEnable()) {
+                News.taskInfo(wrkMast.getWrkNo(), "鏀捐揣绔欑偣:{} 娌℃湁鍙嚭淇″彿", stationObjModel.getStationId());
                 continue;
             }
 
@@ -582,11 +398,14 @@
 
             CrnCommand command = crnThread.getPickAndPutCommand(wrkMast.getSourceLocNo(), targetLocNo, wrkMast.getWrkNo(), crnNo);
 
+            Date now = new Date();
             wrkMast.setWrkSts(WrkStsType.OUTBOUND_RUN.sts);
             wrkMast.setCrnNo(crnNo);
             wrkMast.setSystemMsg("");
-            wrkMast.setIoTime(new Date());
+            wrkMast.setIoTime(now);
+            wrkMast.setModiTime(now);
             if (wrkMastService.updateById(wrkMast)) {
+                wrkAnalysisService.markCraneStart(wrkMast, now);
                 MessageQueue.offer(SlaveType.Crn, crnNo, new Task(2, command));
                 notifyUtils.notify(String.valueOf(SlaveType.Crn), crnNo, String.valueOf(wrkMast.getWrkNo()), wrkMast.getWmsWrkNo(), NotifyMsgType.CRN_OUT_TASK_RUN, null);
                 News.info("鍫嗗灈鏈哄懡浠や笅鍙戞垚鍔燂紝鍫嗗灈鏈哄彿={}锛屼换鍔℃暟鎹�={}", crnNo, JSON.toJSON(command));
@@ -634,6 +453,24 @@
             return true;
         }
 
+        List<WrkMast> unfinishedBatchWrkMasts = listUnfinishedBatchWrkMasts(wrkMast.getBatch());
+        if (hasMissingBatchSeq(unfinishedBatchWrkMasts)) {
+            News.taskInfo(wrkMast.getWrkNo(), "鎵规:{} 瀛樺湪鏈厤缃壒娆″簭鍙风殑鏈畬鎴愪换鍔★紝鏆備笉鍏佽鍫嗗灈鏈哄嚭搴�", wrkMast.getBatch());
+            return false;
+        }
+
+        if (!isWithinBatchExecuteWindow(wrkMast, unfinishedBatchWrkMasts, batchRunningLimit)) {
+            Integer windowStartSeq = unfinishedBatchWrkMasts.get(0).getBatchSeq();
+            Integer windowEndSeq = unfinishedBatchWrkMasts.get(Math.min(batchRunningLimit, unfinishedBatchWrkMasts.size()) - 1).getBatchSeq();
+            News.taskInfo(wrkMast.getWrkNo(),
+                    "鎵规:{} 褰撳墠涓ユ牸鎵ц绐楀彛搴忓彿涓篬{}-{}]锛屽綋鍓嶅簭鍙�={}锛屾殏涓嶅厑璁稿爢鍨涙満鍑哄簱",
+                    wrkMast.getBatch(),
+                    windowStartSeq,
+                    windowEndSeq,
+                    wrkMast.getBatchSeq());
+            return false;
+        }
+
         long batchRunningCount = wrkMastService.count(new QueryWrapper<WrkMast>()
                 .eq("io_type", WrkIoType.OUT.id)
                 .eq("batch", wrkMast.getBatch())
@@ -649,6 +486,46 @@
         return true;
     }
 
+    private List<WrkMast> listUnfinishedBatchWrkMasts(String batch) {
+        if (Cools.isEmpty(batch)) {
+            return new ArrayList<>();
+        }
+        return wrkMastService.list(new QueryWrapper<WrkMast>()
+                .eq("io_type", WrkIoType.OUT.id)
+                .eq("batch", batch)
+                .notIn("wrk_sts",
+                        WrkStsType.COMPLETE_OUTBOUND.sts,
+                        WrkStsType.SETTLE_OUTBOUND.sts)
+                .orderByAsc("batch_seq")
+                .orderByAsc("wrk_no"));
+    }
+
+    private boolean hasMissingBatchSeq(List<WrkMast> wrkMasts) {
+        if (wrkMasts == null || wrkMasts.isEmpty()) {
+            return false;
+        }
+        for (WrkMast item : wrkMasts) {
+            if (item == null || Cools.isEmpty(item.getBatchSeq())) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    private boolean isWithinBatchExecuteWindow(WrkMast wrkMast, List<WrkMast> unfinishedBatchWrkMasts, int batchRunningLimit) {
+        if (wrkMast == null || unfinishedBatchWrkMasts == null || unfinishedBatchWrkMasts.isEmpty()) {
+            return true;
+        }
+        int windowSize = Math.min(batchRunningLimit, unfinishedBatchWrkMasts.size());
+        for (int i = 0; i < windowSize; i++) {
+            WrkMast current = unfinishedBatchWrkMasts.get(i);
+            if (current != null && wrkMast.getWrkNo().equals(current.getWrkNo())) {
+                return true;
+            }
+        }
+        return false;
+    }
+
     private boolean isOutboundStationTaskLimitReached() {
         int stationMaxTaskCount = getSystemConfigInt("stationMaxTaskCountLimit", 30);
         if (stationMaxTaskCount <= 0) {
@@ -658,6 +535,26 @@
         int currentStationTaskCount = stationOperateProcessUtils.getCurrentStationTaskCount();
         if (currentStationTaskCount >= stationMaxTaskCount) {
             News.warn("杈撻�佺珯鐐逛换鍔℃暟閲忚揪鍒颁笂闄愶紝宸插仠姝换鍔′笅鍙戙�傚綋鍓嶄换鍔℃暟={}锛屼笂闄�={}", currentStationTaskCount, stationMaxTaskCount);
+            return true;
+        }
+        return false;
+    }
+
+    private boolean isOutboundTargetStationTaskLimitReached(WrkMast wrkMast) {
+        if (wrkMast == null || wrkMast.getStaNo() == null) {
+            return false;
+        }
+        BasStation basStation = basStationService.getById(wrkMast.getStaNo());
+        if (basStation == null || basStation.getOutTaskLimit() == null || basStation.getOutTaskLimit() < 0) {
+            return false;
+        }
+        int currentStationTaskCount = stationOperateProcessUtils.getCurrentOutboundTaskCountByTargetStation(wrkMast.getStaNo());
+        if (currentStationTaskCount >= basStation.getOutTaskLimit()) {
+            News.taskInfo(wrkMast.getWrkNo(),
+                    "鐩爣鍑哄簱绔�:{} 宸茶揪鍑哄簱浠诲姟涓婇檺锛屽綋鍓�={}锛屼笂闄�={}",
+                    wrkMast.getStaNo(),
+                    currentStationTaskCount,
+                    basStation.getOutTaskLimit());
             return true;
         }
         return false;
@@ -676,58 +573,30 @@
         }
     }
 
-    private synchronized boolean crnExecuteLocTransfer(BasCrnp basCrnp, CrnThread crnThread) {
-        CrnProtocol crnProtocol = crnThread.getStatus();
-        if(crnProtocol == null){
-            return false;
+    private boolean isRequireOutboundStationOutEnable() {
+        return getSystemConfigBoolean(CRN_OUT_REQUIRE_STATION_OUT_ENABLE_CONFIG, true);
+    }
+
+    private boolean getSystemConfigBoolean(String code, boolean defaultValue) {
+        Object systemConfigMapObj = redisUtil.get(RedisKeyType.SYSTEM_CONFIG_MAP.key);
+        if (!(systemConfigMapObj instanceof Map)) {
+            return defaultValue;
         }
-
-        Integer crnNo = basCrnp.getCrnNo();
-
-        List<WrkMast> wrkMasts = wrkMastService.list(new QueryWrapper<WrkMast>()
-                .eq("crn_no", crnNo)
-                .eq("wrk_sts", WrkStsType.NEW_LOC_MOVE.sts)
-        );
-
-        for (WrkMast wrkMast : wrkMasts) {
-            // 鑾峰彇婧愬簱浣嶄俊鎭�
-            LocMast sourceLocMast = locMastService.getById(wrkMast.getSourceLocNo());
-            if (sourceLocMast == null) {
-                News.taskInfo(wrkMast.getWrkNo(), "婧愬簱浣�:{} 淇℃伅涓嶅瓨鍦�", wrkMast.getSourceLocNo());
-                continue;
+        try {
+            Object value = ((Map<?, ?>) systemConfigMapObj).get(code);
+            if (value == null) {
+                return defaultValue;
             }
-
-            if(!sourceLocMast.getLocSts().equals("R")){
-                News.taskInfo(wrkMast.getWrkNo(), "婧愬簱浣�:{} 鐘舵�佸紓甯革紝涓嶅睘浜庡嚭搴撻绾︾姸鎬�", wrkMast.getSourceLocNo());
-                continue;
-            }
-            
-            // 鑾峰彇搴撲綅淇℃伅
-            LocMast locMast = locMastService.getById(wrkMast.getLocNo());
-            if (locMast == null) {
-                News.taskInfo(wrkMast.getWrkNo(), "搴撲綅:{} 淇℃伅涓嶅瓨鍦�", wrkMast.getLocNo());
-                continue;
-            }
-
-            if (!locMast.getLocSts().equals("S")) {
-                News.taskInfo(wrkMast.getWrkNo(), "搴撲綅:{} 鐘舵�佸紓甯革紝涓嶅睘浜庡叆搴撻绾︾姸鎬�", wrkMast.getLocNo());
-                continue;
-            }
-
-            CrnCommand command = crnThread.getPickAndPutCommand(wrkMast.getSourceLocNo(), wrkMast.getLocNo(), wrkMast.getWrkNo(), crnNo);
-
-            wrkMast.setWrkSts(WrkStsType.LOC_MOVE_RUN.sts);
-            wrkMast.setCrnNo(crnNo);
-            wrkMast.setSystemMsg("");
-            wrkMast.setIoTime(new Date());
-            if (wrkMastService.updateById(wrkMast)) {
-                MessageQueue.offer(SlaveType.Crn, crnNo, new Task(2, command));
-                notifyUtils.notify(String.valueOf(SlaveType.Crn), crnNo, String.valueOf(wrkMast.getWrkNo()), wrkMast.getWmsWrkNo(), NotifyMsgType.CRN_TRANSFER_TASK_RUN, null);
-                News.info("鍫嗗灈鏈哄懡浠や笅鍙戞垚鍔燂紝鍫嗗灈鏈哄彿={}锛屼换鍔℃暟鎹�={}", crnNo, JSON.toJSON(command));
+            String text = String.valueOf(value).trim();
+            if ("Y".equalsIgnoreCase(text) || "true".equalsIgnoreCase(text) || "1".equals(text)) {
                 return true;
             }
+            if ("N".equalsIgnoreCase(text) || "false".equalsIgnoreCase(text) || "0".equals(text)) {
+                return false;
+            }
+        } catch (Exception ignore) {
         }
-        return false;
+        return defaultValue;
     }
 
     //鍫嗗灈鏈轰换鍔℃墽琛屽畬鎴�
@@ -761,6 +630,7 @@
                 }
 
                 Long updateWrkSts = null;
+                Date now = new Date();
                 if(wrkMast.getWrkSts() == WrkStsType.INBOUND_RUN.sts){
                     updateWrkSts = WrkStsType.COMPLETE_INBOUND.sts;
                     notifyUtils.notify(String.valueOf(SlaveType.Crn), crnProtocol.getCrnNo(), String.valueOf(wrkMast.getWrkNo()), wrkMast.getWmsWrkNo(), NotifyMsgType.CRN_IN_TASK_COMPLETE, null);
@@ -792,8 +662,10 @@
 
                 wrkMast.setWrkSts(updateWrkSts);
                 wrkMast.setSystemMsg("");
-                wrkMast.setIoTime(new Date());
+                wrkMast.setIoTime(now);
+                wrkMast.setModiTime(now);
                 if (wrkMastService.updateById(wrkMast)) {
+                    wrkAnalysisService.markCraneComplete(wrkMast, now, updateWrkSts);
                     CrnCommand resetCommand = crnThread.getResetCommand(crnProtocol.getTaskNo(), crnProtocol.getCrnNo());
                     MessageQueue.offer(SlaveType.Crn, crnProtocol.getCrnNo(), new Task(2, resetCommand));
                     News.info("鍫嗗灈鏈轰换鍔$姸鎬佹洿鏂版垚鍔燂紝鍫嗗灈鏈哄彿={}锛屽伐浣滃彿={}", basCrnp.getCrnNo(), crnProtocol.getTaskNo());
@@ -939,11 +811,14 @@
 
         CrnCommand command = crnThread.getPickAndPutCommand(wrkMast.getSourceLocNo(), wrkMast.getLocNo(), wrkMast.getWrkNo(), crnNo);
 
+        Date now = new Date();
         wrkMast.setWrkSts(WrkStsType.LOC_MOVE_RUN.sts);
         wrkMast.setCrnNo(crnNo);
         wrkMast.setSystemMsg("");
-        wrkMast.setIoTime(new Date());
+        wrkMast.setIoTime(now);
+        wrkMast.setModiTime(now);
         if (wrkMastService.updateById(wrkMast)) {
+            wrkAnalysisService.markCraneStart(wrkMast, now);
             MessageQueue.offer(SlaveType.Crn, crnNo, new Task(2, command));
             notifyUtils.notify(String.valueOf(SlaveType.Crn), crnNo, String.valueOf(wrkMast.getWrkNo()), wrkMast.getWmsWrkNo(), NotifyMsgType.CRN_TRANSFER_TASK_RUN, null);
             News.info("鍫嗗灈鏈哄懡浠や笅鍙戞垚鍔燂紝鍫嗗灈鏈哄彿={}锛屼换鍔℃暟鎹�={}", crnNo, JSON.toJSON(command));

--
Gitblit v1.9.1