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

---
 src/main/java/com/zy/core/utils/CrnOperateProcessUtils.java |  134 ++++++++++++++++++++++++++++++++++++--------
 1 files changed, 108 insertions(+), 26 deletions(-)

diff --git a/src/main/java/com/zy/core/utils/CrnOperateProcessUtils.java b/src/main/java/com/zy/core/utils/CrnOperateProcessUtils.java
index 89f2361..2bd254b 100644
--- a/src/main/java/com/zy/core/utils/CrnOperateProcessUtils.java
+++ b/src/main/java/com/zy/core/utils/CrnOperateProcessUtils.java
@@ -4,6 +4,7 @@
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.mapper.EntityWrapper;
 import com.core.exception.CoolException;
+import com.zy.asrs.domain.enums.NotifyMsgType;
 import com.zy.asrs.domain.param.CreateLocMoveTaskParam;
 import com.zy.asrs.entity.BasCrnp;
 import com.zy.asrs.entity.LocMast;
@@ -11,6 +12,7 @@
 import com.zy.asrs.service.BasCrnpService;
 import com.zy.asrs.service.LocMastService;
 import com.zy.asrs.service.WrkMastService;
+import com.zy.asrs.utils.NotifyUtils;
 import com.zy.asrs.utils.Utils;
 import com.zy.common.model.StartupDto;
 import com.zy.common.service.CommonService;
@@ -26,13 +28,11 @@
 import com.zy.core.model.protocol.StationProtocol;
 import com.zy.core.thread.CrnThread;
 import com.zy.core.thread.StationThread;
+import lombok.Synchronized;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
-import java.util.Date;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 
 @Component
 public class CrnOperateProcessUtils {
@@ -49,6 +49,8 @@
     private WmsOperateUtils wmsOperateUtils;
     @Autowired
     private CommonService commonService;
+    @Autowired
+    private NotifyUtils notifyUtils;
 
     public synchronized void crnIoExecute() {
         Object systemConfigMapObj = redisUtil.get(RedisKeyType.SYSTEM_CONFIG_MAP.key);
@@ -78,7 +80,11 @@
 
             List<WrkMast> wrkMasts = wrkMastService.selectList(new EntityWrapper<WrkMast>()
                     .eq("crn_no", basCrnp.getCrnNo())
-                    .in("wrk_sts", WrkStsType.INBOUND_RUN.sts, WrkStsType.OUTBOUND_RUN.sts)
+                    .in("wrk_sts",
+                            WrkStsType.INBOUND_RUN.sts
+                            , WrkStsType.OUTBOUND_RUN.sts
+                            , WrkStsType.LOC_MOVE_RUN.sts
+                    )
             );
             if(!wrkMasts.isEmpty()){
                 continue;
@@ -95,45 +101,61 @@
                 // 濡傛灉鏈�杩戜竴娆℃槸鍏ュ簱妯″紡
                 if (crnProtocol.getLastIo().equals("I")) {
                     if (basCrnp.getInEnable().equals("Y")) {
-                        this.crnExecuteIn(basCrnp, crnThread); //  鍏ュ簱
+                        boolean result = this.crnExecuteIn(basCrnp, crnThread);//  鍏ュ簱
                         crnProtocol.setLastIo("O");
+                        if (result) {
+                            break;
+                        }
                     } else if (basCrnp.getOutEnable().equals("Y")) {
-                        this.crnExecuteOut(basCrnp, crnThread); //  鍑哄簱
+                        boolean result = this.crnExecuteOut(basCrnp, crnThread);//  鍑哄簱
                         crnProtocol.setLastIo("I");
+                        if(result) {
+                            break;
+                        }
                     }
                 }
                 // 濡傛灉鏈�杩戜竴娆℃槸鍑哄簱妯″紡
                 else if (crnProtocol.getLastIo().equals("O")) {
                     if (basCrnp.getOutEnable().equals("Y")) {
-                        this.crnExecuteOut(basCrnp, crnThread); //  鍑哄簱
+                        boolean result = this.crnExecuteOut(basCrnp, crnThread);//  鍑哄簱
                         crnProtocol.setLastIo("I");
+                        if (result) {
+                            break;
+                        }
                     } else if (basCrnp.getInEnable().equals("Y")) {
-                        this.crnExecuteIn(basCrnp, crnThread); //  鍏ュ簱
+                        boolean result = this.crnExecuteIn(basCrnp, crnThread);//  鍏ュ簱
                         crnProtocol.setLastIo("O");
+                        if (result) {
+                            break;
+                        }
                     }
                 }
 
                 //搴撲綅绉昏浆
-                this.crnExecuteLocTransfer(basCrnp, crnThread);
+                boolean result = this.crnExecuteLocTransfer(basCrnp, crnThread);
+                if(result) {
+                    break;
+                }
             }
         }
     }
 
-    private synchronized void crnExecuteIn(BasCrnp basCrnp, CrnThread crnThread) {
+    @Synchronized
+    private boolean crnExecuteIn(BasCrnp basCrnp, CrnThread crnThread) {
         CrnProtocol crnProtocol = crnThread.getStatus();
         if(crnProtocol == null){
-            return;
+            return false;
         }
 
         if(!basCrnp.getInEnable().equals("Y")){
             News.info("鍫嗗灈鏈�:{} 鍙叆淇″彿涓嶆弧瓒�", basCrnp.getCrnNo());
-            return;
+            return false;
         }
 
         List<StationObjModel> inStationList = basCrnp.getInStationList$();
         if(inStationList.isEmpty()){
             News.info("鍫嗗灈鏈�:{} 鍏ュ簱绔欑偣鏈缃�", basCrnp.getCrnNo());
-            return;
+            return false;
         }
 
         Integer crnNo = basCrnp.getCrnNo();
@@ -200,33 +222,43 @@
             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());
+            //缁欏簱浣嶇櫧鑹叉寚绀虹伅浜伅
+            String[] split = basCrnp.getArr().split(",");
+            int i = Arrays.asList(split).indexOf(wrkMast.getLocNo());
             if (wrkMastService.updateById(wrkMast)) {
+                if (i>-1){
+                    command.setLocNo(wrkMast.getLocNo());
+                    command.setIndex(i);
+                    command.setValue((short)1);
+                }
                 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 void crnExecuteOut(BasCrnp basCrnp, CrnThread crnThread) {
+    private synchronized boolean crnExecuteOut(BasCrnp basCrnp, CrnThread crnThread) {
         CrnProtocol crnProtocol = crnThread.getStatus();
         if(crnProtocol == null){
-            return;
+            return false;
         }
 
         if(!basCrnp.getOutEnable().equals("Y")){
             News.info("鍫嗗灈鏈�:{} 鍙嚭淇″彿涓嶆弧瓒�", basCrnp.getCrnNo());
-            return;
+            return false;
         }
 
         List<StationObjModel> outStationList = basCrnp.getOutStationList$();
         if(outStationList.isEmpty()){
             News.info("鍫嗗灈鏈�:{} 鍑哄簱绔欑偣鏈缃�", basCrnp.getCrnNo());
-            return;
+            return false;
         }
 
         Integer crnNo = basCrnp.getCrnNo();
@@ -293,13 +325,23 @@
                 wrkMast.setCrnNo(crnNo);
                 wrkMast.setSystemMsg("");
                 wrkMast.setIoTime(new Date());
+                //缁欏簱浣嶇櫧鑹叉寚绀虹伅浜伅
+                String[] split = basCrnp.getArr().split(",");
+                int i = Arrays.asList(split).indexOf(wrkMast.getSourceLocNo());
                 if (wrkMastService.updateById(wrkMast)) {
+                    if (i>-1){
+                        command.setLocNo(wrkMast.getSourceLocNo());
+                        command.setIndex(i);
+                        command.setValue((short)1);
+                    }
                     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;
+                    return true;
                 }
             }
         }
+        return false;
     }
 
     private synchronized boolean crnExecuteInPlanner(BasCrnp basCrnp, CrnThread crnThread, WrkMast wrkMast) {
@@ -387,6 +429,7 @@
             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;
             }
@@ -471,6 +514,7 @@
             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;
             }
@@ -478,10 +522,10 @@
         return false;
     }
 
-    private synchronized void crnExecuteLocTransfer(BasCrnp basCrnp, CrnThread crnThread) {
+    private synchronized boolean crnExecuteLocTransfer(BasCrnp basCrnp, CrnThread crnThread) {
         CrnProtocol crnProtocol = crnThread.getStatus();
         if(crnProtocol == null){
-            return;
+            return false;
         }
 
         Integer crnNo = basCrnp.getCrnNo();
@@ -522,12 +566,27 @@
             wrkMast.setCrnNo(crnNo);
             wrkMast.setSystemMsg("");
             wrkMast.setIoTime(new Date());
+            //缁欏簱浣嶇櫧鑹叉寚绀虹伅浜伅
+            String[] split = basCrnp.getArr().split(",");
+            int i = Arrays.asList(split).indexOf(wrkMast.getLocNo());
+            String locNo = wrkMast.getLocNo();
+            if (i == -1) {
+                i = Arrays.asList(split).indexOf(wrkMast.getSourceLocNo());
+                locNo = wrkMast.getSourceLocNo();
+            }
             if (wrkMastService.updateById(wrkMast)) {
+                if (i>-1){
+                    command.setLocNo(locNo);
+                    command.setIndex(i);
+                    command.setValue((short)1);
+                }
                 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));
-                return;
+                return true;
             }
         }
+        return false;
     }
 
     //鍫嗗灈鏈轰换鍔℃墽琛屽畬鎴�
@@ -559,14 +618,30 @@
                     News.error("鍫嗗灈鏈哄浜庣瓑寰呯‘璁や笖浠诲姟瀹屾垚鐘舵�侊紝浣嗘湭鎵惧埌宸ヤ綔妗c�傚爢鍨涙満鍙�={}锛屽伐浣滃彿={}", basCrnp.getCrnNo(), crnProtocol.getTaskNo());
                     continue;
                 }
-
+                //缁欏簱浣嶇櫧鑹叉寚绀虹伅浜伅
+                String[] split = basCrnp.getArr().split(",");
+                int i = -1;
+                String locNo = "";
                 Long updateWrkSts = null;
                 if(wrkMast.getWrkSts() == WrkStsType.INBOUND_RUN.sts){
                     updateWrkSts = WrkStsType.COMPLETE_INBOUND.sts;
+                    i = Arrays.asList(split).indexOf(wrkMast.getLocNo());
+                    locNo = wrkMast.getLocNo();
+                    notifyUtils.notify(String.valueOf(SlaveType.Crn), crnProtocol.getCrnNo(), String.valueOf(wrkMast.getWrkNo()), wrkMast.getWmsWrkNo(), NotifyMsgType.CRN_IN_TASK_COMPLETE, null);
                 }else if(wrkMast.getWrkSts() == WrkStsType.OUTBOUND_RUN.sts){
                     updateWrkSts = WrkStsType.OUTBOUND_RUN_COMPLETE.sts;
+                    i = Arrays.asList(split).indexOf(wrkMast.getSourceLocNo());
+                    locNo = wrkMast.getSourceLocNo();
+                    notifyUtils.notify(String.valueOf(SlaveType.Crn), crnProtocol.getCrnNo(), String.valueOf(wrkMast.getWrkNo()), wrkMast.getWmsWrkNo(), NotifyMsgType.CRN_OUT_TASK_COMPLETE, null);
                 }else if(wrkMast.getWrkSts() == WrkStsType.LOC_MOVE_RUN.sts){
                     updateWrkSts = WrkStsType.COMPLETE_LOC_MOVE.sts;
+                    i = Arrays.asList(split).indexOf(wrkMast.getLocNo());
+                    locNo = wrkMast.getLocNo();
+                    if(i==-1){
+                        i = Arrays.asList(split).indexOf(wrkMast.getSourceLocNo());
+                        locNo = wrkMast.getSourceLocNo();
+                    }
+                    notifyUtils.notify(String.valueOf(SlaveType.Crn), crnProtocol.getCrnNo(), String.valueOf(wrkMast.getWrkNo()), wrkMast.getWmsWrkNo(), NotifyMsgType.CRN_TRANSFER_TASK_COMPLETE, null);
                 }else{
                     News.error("鍫嗗灈鏈哄浜庣瓑寰呯‘璁や笖浠诲姟瀹屾垚鐘舵�侊紝浣嗗伐浣滅姸鎬佸紓甯搞�傚爢鍨涙満鍙�={}锛屽伐浣滃彿={}", basCrnp.getCrnNo(), crnProtocol.getTaskNo());
                     continue;
@@ -575,9 +650,15 @@
                 wrkMast.setWrkSts(updateWrkSts);
                 wrkMast.setSystemMsg("");
                 wrkMast.setIoTime(new Date());
+                wrkMast.setWeight(crnProtocol.getWeight());
                 if (wrkMastService.updateById(wrkMast)) {
                     CrnCommand resetCommand = crnThread.getResetCommand(crnProtocol.getCrnNo());
-                    MessageQueue.offer(SlaveType.Crn, crnProtocol.getCrnNo(), new Task(2, resetCommand));
+                    if (i>-1){
+                        resetCommand.setLocNo(locNo);
+                        resetCommand.setIndex(i);
+                        resetCommand.setValue((short)0);
+                    }
+                    MessageQueue.offer(SlaveType.Crn, crnProtocol.getCrnNo(), new Task(3, resetCommand));
                     News.info("鍫嗗灈鏈轰换鍔$姸鎬佹洿鏂版垚鍔燂紝鍫嗗灈鏈哄彿={}锛屽伐浣滃彿={}", basCrnp.getCrnNo(), crnProtocol.getTaskNo());
                 }
 
@@ -727,6 +808,7 @@
         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));
             return true;
         }
@@ -781,7 +863,7 @@
                 String moveLocNo = dto.getLocNo();
 
                 CreateLocMoveTaskParam moveTaskParam = new CreateLocMoveTaskParam();
-                moveTaskParam.setTaskNo(dto.getTaskNo());
+                moveTaskParam.setTaskNo(String.valueOf(dto.getTaskNo()));
                 moveTaskParam.setSourceLocNo(shallowLocNo);
                 moveTaskParam.setLocNo(moveLocNo);
                 try {

--
Gitblit v1.9.1