From a19b1025890eb0f71b44a9d1bb948cb084d4106a Mon Sep 17 00:00:00 2001
From: Junjie <DELL@qq.com>
Date: 星期五, 12 十二月 2025 16:50:44 +0800
Subject: [PATCH] #

---
 src/main/java/com/zy/core/utils/CrnOperateProcessUtils.java |   71 +++++++++++++++++++++++++++++++++--
 1 files changed, 67 insertions(+), 4 deletions(-)

diff --git a/src/main/java/com/zy/core/utils/CrnOperateProcessUtils.java b/src/main/java/com/zy/core/utils/CrnOperateProcessUtils.java
index c8b5024..4bfb1ff 100644
--- a/src/main/java/com/zy/core/utils/CrnOperateProcessUtils.java
+++ b/src/main/java/com/zy/core/utils/CrnOperateProcessUtils.java
@@ -9,13 +9,11 @@
 import com.zy.asrs.service.LocMastService;
 import com.zy.asrs.service.WrkMastService;
 import com.zy.asrs.utils.Utils;
+import com.zy.common.utils.RedisUtil;
 import com.zy.core.News;
 import com.zy.core.cache.MessageQueue;
 import com.zy.core.cache.SlaveConnection;
-import com.zy.core.enums.CrnModeType;
-import com.zy.core.enums.CrnStatusType;
-import com.zy.core.enums.SlaveType;
-import com.zy.core.enums.WrkStsType;
+import com.zy.core.enums.*;
 import com.zy.core.model.StationObjModel;
 import com.zy.core.model.Task;
 import com.zy.core.model.command.CrnCommand;
@@ -40,6 +38,8 @@
     private BasCrnpService basCrnpService;
     @Autowired
     private LocMastService locMastService;
+    @Autowired
+    private RedisUtil redisUtil;
 
     //鍏ュ嚭搴�  ===>>  鍫嗗灈鏈哄叆鍑哄簱浣滀笟涓嬪彂
     public synchronized void crnIoExecute() {
@@ -91,6 +91,9 @@
                         crnProtocol.setLastIo("O");
                     }
                 }
+
+                //搴撲綅绉昏浆
+                this.crnExecuteLocTransfer(basCrnp, crnThread);
             }
         }
     }
@@ -265,6 +268,58 @@
         }
     }
 
+    private synchronized void crnExecuteLocTransfer(BasCrnp basCrnp, CrnThread crnThread) {
+        CrnProtocol crnProtocol = crnThread.getStatus();
+        if(crnProtocol == null){
+            return;
+        }
+
+        Integer crnNo = basCrnp.getCrnNo();
+
+        List<WrkMast> wrkMasts = wrkMastService.selectList(new EntityWrapper<WrkMast>()
+                .eq("crn_no", crnNo)
+                .eq("wrk_sts", WrkStsType.NEW_LOC_MOVE.sts)
+        );
+
+        for (WrkMast wrkMast : wrkMasts) {
+            // 鑾峰彇婧愬簱浣嶄俊鎭�
+            LocMast sourceLocMast = locMastService.selectById(wrkMast.getSourceLocNo());
+            if (sourceLocMast == null) {
+                News.taskInfo(wrkMast.getWrkNo(), "婧愬簱浣�:{} 淇℃伅涓嶅瓨鍦�", wrkMast.getSourceLocNo());
+                continue;
+            }
+
+            if(!sourceLocMast.getLocSts().equals("R")){
+                News.taskInfo(wrkMast.getWrkNo(), "婧愬簱浣�:{} 鐘舵�佸紓甯革紝涓嶅睘浜庡嚭搴撻绾︾姸鎬�", wrkMast.getSourceLocNo());
+                continue;
+            }
+            
+            // 鑾峰彇搴撲綅淇℃伅
+            LocMast locMast = locMastService.selectById(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));
+                News.info("鍫嗗灈鏈哄懡浠や笅鍙戞垚鍔燂紝鍫嗗灈鏈哄彿={}锛屼换鍔℃暟鎹�={}", crnNo, JSON.toJSON(command));
+                return;
+            }
+        }
+    }
+
     //鍫嗗灈鏈轰换鍔℃墽琛屽畬鎴�
     public synchronized void crnIoExecuteFinish() {
         List<BasCrnp> basCrnps = basCrnpService.selectList(new EntityWrapper<>());
@@ -283,6 +338,10 @@
                     && crnProtocol.getTaskNo() > 0
                     && crnProtocol.getStatus() == CrnStatusType.WAITING.id
             ) {
+                Object lock = redisUtil.get(RedisKeyType.CRN_IO_EXECUTE_FINISH_LIMIT.key + basCrnp.getCrnNo());
+                if(lock != null){
+                    continue;
+                }
 
                 // 鑾峰彇寰呯‘璁ゅ伐浣滄。
                 WrkMast wrkMast = wrkMastService.selectByWorkNo(crnProtocol.getTaskNo());
@@ -296,6 +355,8 @@
                     updateWrkSts = WrkStsType.COMPLETE_INBOUND.sts;
                 }else if(wrkMast.getWrkSts() == WrkStsType.OUTBOUND_RUN.sts){
                     updateWrkSts = WrkStsType.OUTBOUND_RUN_COMPLETE.sts;
+                }else if(wrkMast.getWrkSts() == WrkStsType.LOC_MOVE_RUN.sts){
+                    updateWrkSts = WrkStsType.COMPLETE_LOC_MOVE.sts;
                 }else{
                     News.error("鍫嗗灈鏈哄浜庣瓑寰呯‘璁や笖浠诲姟瀹屾垚鐘舵�侊紝浣嗗伐浣滅姸鎬佸紓甯搞�傚爢鍨涙満鍙�={}锛屽伐浣滃彿={}", basCrnp.getCrnNo(), crnProtocol.getTaskNo());
                     continue;
@@ -309,6 +370,8 @@
                     MessageQueue.offer(SlaveType.Crn, crnProtocol.getCrnNo(), new Task(2, resetCommand));
                     News.info("鍫嗗灈鏈轰换鍔$姸鎬佹洿鏂版垚鍔燂紝鍫嗗灈鏈哄彿={}锛屽伐浣滃彿={}", basCrnp.getCrnNo(), crnProtocol.getTaskNo());
                 }
+
+                redisUtil.set(RedisKeyType.CRN_IO_EXECUTE_FINISH_LIMIT.key + basCrnp.getCrnNo(), "lock",10);
             }
         }
     }

--
Gitblit v1.9.1