From 6d99081f3f6e0363b0bd28053e545a8e4589b979 Mon Sep 17 00:00:00 2001
From: Junjie <DELL@qq.com>
Date: 星期五, 09 一月 2026 08:50:11 +0800
Subject: [PATCH] #

---
 src/main/java/com/zy/core/utils/StationOperateProcessUtils.java |   74 +++++++++++++++++++++++++-----------
 1 files changed, 51 insertions(+), 23 deletions(-)

diff --git a/src/main/java/com/zy/core/utils/StationOperateProcessUtils.java b/src/main/java/com/zy/core/utils/StationOperateProcessUtils.java
index 14c4277..239fd2d 100644
--- a/src/main/java/com/zy/core/utils/StationOperateProcessUtils.java
+++ b/src/main/java/com/zy/core/utils/StationOperateProcessUtils.java
@@ -3,8 +3,10 @@
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.mapper.EntityWrapper;
+import com.core.exception.CoolException;
 import com.zy.asrs.entity.*;
 import com.zy.asrs.service.*;
+import com.zy.common.entity.FindCrnNoResult;
 import com.zy.common.model.StartupDto;
 import com.zy.common.service.CommonService;
 import com.zy.common.utils.RedisUtil;
@@ -13,6 +15,7 @@
 import com.zy.core.cache.SlaveConnection;
 import com.zy.core.enums.RedisKeyType;
 import com.zy.core.enums.SlaveType;
+import com.zy.core.enums.StationCommandType;
 import com.zy.core.enums.WrkStsType;
 import com.zy.core.model.StationObjModel;
 import com.zy.core.model.Task;
@@ -35,6 +38,8 @@
     private CommonService commonService;
     @Autowired
     private BasCrnpService basCrnpService;
+    @Autowired
+    private BasDualCrnpService basDualCrnpService;
     @Autowired
     private RedisUtil redisUtil;
     @Autowired
@@ -85,25 +90,20 @@
                         continue;
                     }
 
-                    if (!wrkMast.getWrkNo().equals(stationProtocol.getTaskNo())) {
-                        News.taskInfo(stationProtocol.getStationId(), "杈撻�佺珯鐐瑰伐浣滃彿:{}涓庢潯鐮佹悳绱㈠埌鐨勪换鍔″伐浣滃彿:{}涓嶄竴鑷�", stationProtocol.getTaskNo(), wrkMast.getWrkNo());
-                        continue;
-                    }
-
                     String locNo = wrkMast.getLocNo();
-                    Integer crnNo = commonService.findCrnNoByLocNo(locNo);
-                    if (crnNo == null) {
+                    FindCrnNoResult findCrnNoResult = commonService.findCrnNoByLocNo(locNo);
+                    if (findCrnNoResult == null) {
                         News.taskInfo(wrkMast.getWrkNo(), "鏈尮閰嶅埌鍫嗗灈鏈�");
                         continue;
                     }
 
-                    Integer targetStationId = commonService.findInStationId(crnNo, stationId);
+                    Integer targetStationId = commonService.findInStationId(findCrnNoResult, stationId);
                     if (targetStationId == null) {
                         News.taskInfo(wrkMast.getWrkNo(), "鎼滅储鍏ュ簱绔欑偣澶辫触");
                         continue;
                     }
 
-                    StationCommand command = stationThread.getMoveCommand(wrkMast.getWrkNo(), stationId, targetStationId, 0);
+                    StationCommand command = stationThread.getCommand(StationCommandType.MOVE, wrkMast.getWrkNo(), stationId, targetStationId, 0);
                     if(command == null){
                         News.taskInfo(wrkMast.getWrkNo(), "鑾峰彇杈撻�佺嚎鍛戒护澶辫触");
                         continue;
@@ -128,15 +128,24 @@
     public synchronized void stationOutExecute() {
         List<WrkMast> wrkMasts = wrkMastService.selectList(new EntityWrapper<WrkMast>().eq("wrk_sts", WrkStsType.OUTBOUND_RUN_COMPLETE.sts));
         for (WrkMast wrkMast : wrkMasts) {
+            List<StationObjModel> outStationList = new ArrayList<>();
+
             BasCrnp basCrnp = basCrnpService.selectOne(new EntityWrapper<BasCrnp>().eq("crn_no", wrkMast.getCrnNo()));
-            if (basCrnp == null) {
-                continue;
+            if (basCrnp != null) {
+                outStationList = basCrnp.getOutStationList$();
+                if(outStationList.isEmpty()){
+                    News.info("鍫嗗灈鏈�:{} 鍑哄簱绔欑偣鏈缃�", basCrnp.getCrnNo());
+                    continue;
+                }
             }
 
-            List<StationObjModel> outStationList = basCrnp.getOutStationList$();
-            if(outStationList.isEmpty()){
-                News.info("鍫嗗灈鏈�:{} 鍑哄簱绔欑偣鏈缃�", basCrnp.getCrnNo());
-                continue;
+            BasDualCrnp basDualCrnp = basDualCrnpService.selectOne(new EntityWrapper<BasDualCrnp>().eq("crn_no", wrkMast.getDualCrnNo()));
+            if (basDualCrnp != null) {
+                outStationList = basDualCrnp.getOutStationList$();
+                if(outStationList.isEmpty()){
+                    News.info("鍙屽伐浣嶅爢鍨涙満:{} 鍑哄簱绔欑偣鏈缃�", basDualCrnp.getCrnNo());
+                    continue;
+                }
             }
 
             for (StationObjModel stationObjModel : outStationList) {
@@ -161,7 +170,7 @@
                         && stationProtocol.isLoading()
                         && stationProtocol.getTaskNo() == 0
                 ) {
-                    StationCommand command = stationThread.getMoveCommand(wrkMast.getWrkNo(), stationProtocol.getStationId(), wrkMast.getStaNo(), 0);
+                    StationCommand command = stationThread.getCommand(StationCommandType.MOVE, wrkMast.getWrkNo(), stationProtocol.getStationId(), wrkMast.getStaNo(), 0);
                     if(command == null){
                         News.taskInfo(wrkMast.getWrkNo(), "鑾峰彇杈撻�佺嚎鍛戒护澶辫触");
                         continue;
@@ -174,6 +183,7 @@
                         MessageQueue.offer(SlaveType.Devp, stationObjModel.getDeviceNo(), new Task(2, command));
                         News.info("杈撻�佺珯鐐瑰嚭搴撳懡浠や笅鍙戞垚鍔燂紝绔欑偣鍙�={}锛屽伐浣滃彿={}锛屽懡浠ゆ暟鎹�={}", stationProtocol.getStationId(), wrkMast.getWrkNo(), JSON.toJSONString(command));
                         redisUtil.set(RedisKeyType.STATION_OUT_EXECUTE_LIMIT.key + stationProtocol.getStationId(), "lock", 5);
+                        redisUtil.set(RedisKeyType.STATION_OUT_EXECUTE_COMPLETE_LIMIT.key + wrkMast.getWrkNo(), "lock", 60 * 5);
                     }
                 }
             }
@@ -185,6 +195,11 @@
         List<WrkMast> wrkMasts = wrkMastService.selectList(new EntityWrapper<WrkMast>().eq("wrk_sts", WrkStsType.STATION_RUN.sts));
         for (WrkMast wrkMast : wrkMasts) {
             Integer wrkNo = wrkMast.getWrkNo();
+
+            Object lock = redisUtil.get(RedisKeyType.STATION_OUT_EXECUTE_COMPLETE_LIMIT.key + wrkNo);
+            if (lock != null) {
+                continue;
+            }
 
             boolean complete = true;
             List<BasDevp> basDevps = basDevpService.selectList(new EntityWrapper<>());
@@ -246,7 +261,11 @@
                     if (runBlockReassignLocStationList.contains(stationProtocol.getStationId())) {
                         //绔欑偣澶勪簬閲嶆柊鍒嗛厤搴撲綅鍖哄煙
                         //杩愯鍫靛锛岄噸鏂扮敵璇蜂换鍔�
-                        String response = wmsOperateUtils.applyReassignTaskLocNo(wrkMast.getWrkNo());
+                        String response = wmsOperateUtils.applyReassignTaskLocNo(wrkMast.getWrkNo(), stationProtocol.getStationId());
+                        if (response == null) {
+                            News.taskError(wrkMast.getWrkNo(), "璇锋眰WMS閲嶆柊鍒嗛厤搴撲綅鎺ュ彛澶辫触锛屾帴鍙f湭鍝嶅簲锛侊紒锛乺esponse锛歿}", response);
+                            continue;
+                        }
                         JSONObject jsonObject = JSON.parseObject(response);
                         if (jsonObject.getInteger("code").equals(200)) {
                             StartupDto dto = jsonObject.getObject("data", StartupDto.class);
@@ -276,19 +295,20 @@
                                 continue;
                             }
 
-                            Integer crnNo = commonService.findCrnNoByLocNo(locNo);
-                            if (crnNo == null) {
+                            FindCrnNoResult findCrnNoResult = commonService.findCrnNoByLocNo(locNo);
+                            if (findCrnNoResult == null) {
                                 News.taskInfo(wrkMast.getWrkNo(), "鏈尮閰嶅埌鍫嗗灈鏈�");
                                 continue;
                             }
+                            Integer crnNo = findCrnNoResult.getCrnNo();
 
-                            Integer targetStationId = commonService.findInStationId(crnNo, stationProtocol.getStationId());
+                            Integer targetStationId = commonService.findInStationId(findCrnNoResult, stationProtocol.getStationId());
                             if (targetStationId == null) {
                                 News.taskInfo(wrkMast.getWrkNo(), "鎼滅储鍏ュ簱绔欑偣澶辫触");
                                 continue;
                             }
 
-                            StationCommand command = stationThread.getMoveCommand(wrkMast.getWrkNo(), stationProtocol.getStationId(), targetStationId, 0);
+                            StationCommand command = stationThread.getCommand(StationCommandType.MOVE, wrkMast.getWrkNo(), stationProtocol.getStationId(), targetStationId, 0);
                             if(command == null){
                                 News.taskInfo(wrkMast.getWrkNo(), "鑾峰彇杈撻�佺嚎鍛戒护澶辫触");
                                 continue;
@@ -306,8 +326,16 @@
 
                             //鏇存柊宸ヤ綔妗f暟鎹�
                             wrkMast.setLocNo(locNo);
-                            wrkMast.setCrnNo(crnNo);
                             wrkMast.setStaNo(targetStationId);
+
+                            if (findCrnNoResult.getCrnType().equals(SlaveType.Crn)) {
+                                wrkMast.setCrnNo(crnNo);
+                            } else if (findCrnNoResult.getCrnType().equals(SlaveType.DualCrn)) {
+                                wrkMast.setDualCrnNo(crnNo);
+                            }else {
+                                throw new CoolException("鏈煡璁惧绫诲瀷");
+                            }
+
                             if (wrkMastService.updateById(wrkMast)) {
                                 MessageQueue.offer(SlaveType.Devp, basDevp.getDevpNo(), new Task(2, command));
                             }
@@ -316,7 +344,7 @@
                         }
                     }else {
                         //杩愯鍫靛锛岄噸鏂拌绠楄矾绾�
-                        StationCommand command = stationThread.getMoveCommand(wrkMast.getWrkNo(), stationProtocol.getStationId(), wrkMast.getStaNo(), 0);
+                        StationCommand command = stationThread.getCommand(StationCommandType.MOVE, wrkMast.getWrkNo(), stationProtocol.getStationId(), wrkMast.getStaNo(), 0);
                         if(command == null){
                             News.taskInfo(wrkMast.getWrkNo(), "鑾峰彇杈撻�佺嚎鍛戒护澶辫触");
                             continue;

--
Gitblit v1.9.1