From f1bb341dab32e6ca83b453efa60fff729a89639d Mon Sep 17 00:00:00 2001
From: dubin <bindu_bean@163.com>
Date: 星期六, 10 一月 2026 15:11:50 +0800
Subject: [PATCH] #1

---
 src/main/java/com/zy/core/utils/CrnOperateProcessUtils.java |  100 +++++++++++++++++++++++++++++++++++++++++++++++---
 1 files changed, 94 insertions(+), 6 deletions(-)

diff --git a/src/main/java/com/zy/core/utils/CrnOperateProcessUtils.java b/src/main/java/com/zy/core/utils/CrnOperateProcessUtils.java
index 4bfb1ff..83cc786 100644
--- a/src/main/java/com/zy/core/utils/CrnOperateProcessUtils.java
+++ b/src/main/java/com/zy/core/utils/CrnOperateProcessUtils.java
@@ -1,7 +1,10 @@
 package com.zy.core.utils;
 
 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.domain.param.CreateLocMoveTaskParam;
 import com.zy.asrs.entity.BasCrnp;
 import com.zy.asrs.entity.LocMast;
 import com.zy.asrs.entity.WrkMast;
@@ -9,6 +12,8 @@
 import com.zy.asrs.service.LocMastService;
 import com.zy.asrs.service.WrkMastService;
 import com.zy.asrs.utils.Utils;
+import com.zy.common.model.StartupDto;
+import com.zy.common.service.CommonService;
 import com.zy.common.utils.RedisUtil;
 import com.zy.core.News;
 import com.zy.core.cache.MessageQueue;
@@ -17,7 +22,6 @@
 import com.zy.core.model.StationObjModel;
 import com.zy.core.model.Task;
 import com.zy.core.model.command.CrnCommand;
-import com.zy.core.model.command.StationCommand;
 import com.zy.core.model.protocol.CrnProtocol;
 import com.zy.core.model.protocol.StationProtocol;
 import com.zy.core.thread.CrnThread;
@@ -26,6 +30,7 @@
 import org.springframework.stereotype.Component;
 
 import java.util.Date;
+import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
@@ -40,6 +45,10 @@
     private LocMastService locMastService;
     @Autowired
     private RedisUtil redisUtil;
+    @Autowired
+    private WmsOperateUtils wmsOperateUtils;
+    @Autowired
+    private CommonService commonService;
 
     //鍏ュ嚭搴�  ===>>  鍫嗗灈鏈哄叆鍑哄簱浣滀笟涓嬪彂
     public synchronized void crnIoExecute() {
@@ -142,19 +151,18 @@
             }
 
             if (!stationProtocol.isInEnable()) {
-                News.taskInfo(stationProtocol.getTaskNo(), "鍙栬揣绔欑偣:{} 娌℃湁鍙叆淇″彿", stationObjModel.getStationId());
+//                News.taskInfo(stationProtocol.getTaskNo(), "鍙栬揣绔欑偣:{} 娌℃湁鍙叆淇″彿", stationObjModel.getStationId());
                 continue;
             }
 
             // 鑾峰彇浠诲姟
             WrkMast wrkMast = wrkMastService.selectByWorkNo(stationProtocol.getTaskNo());
             if (null == wrkMast) {
-                News.taskInfo(stationProtocol.getTaskNo(), "宸ヤ綔鍙�:{} 浠诲姟淇℃伅涓嶅瓨鍦�", stationProtocol.getTaskNo());
+//                News.taskInfo(stationProtocol.getTaskNo(), "宸ヤ綔鍙�:{} 浠诲姟淇℃伅涓嶅瓨鍦�", stationProtocol.getTaskNo());
                 continue;
             }
 
             if(wrkMast.getWrkSts() != WrkStsType.INBOUND_DEVICE_RUN.sts){
-                News.taskInfo(stationProtocol.getTaskNo(), "宸ヤ綔鍙�:{} 浠诲姟鐘舵�佸紓甯�", stationProtocol.getTaskNo());
                 continue;
             }
 
@@ -170,9 +178,18 @@
                 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);
+//            CrnCommand command = crnThread.getPickAndPutCommand(sourceLocNo, wrkMast.getLocNo(), wrkMast.getWrkNo(), crnNo);
+            CrnCommand command = crnThread.getPickCommand(sourceLocNo, wrkMast.getLocNo(), wrkMast.getWrkNo(), crnNo);
+
 
             wrkMast.setWrkSts(WrkStsType.INBOUND_RUN.sts);
             wrkMast.setCrnNo(crnNo);
@@ -251,9 +268,17 @@
                     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);
+//                CrnCommand command = crnThread.getPickAndPutCommand(wrkMast.getSourceLocNo(), targetLocNo, wrkMast.getWrkNo(), crnNo);
+                CrnCommand command = crnThread.getPutCommand(wrkMast.getSourceLocNo(), targetLocNo, wrkMast.getWrkNo(), crnNo);
 
                 wrkMast.setWrkSts(WrkStsType.OUTBOUND_RUN.sts);
                 wrkMast.setCrnNo(crnNo);
@@ -376,4 +401,67 @@
         }
     }
 
+    //妫�娴嬫祬搴撲綅鐘舵��
+    public synchronized boolean checkShallowLocStatus(String locNo, Integer taskNo) {
+        String checkDeepLocOutTaskBlockReport = "Y";
+        Object systemConfigMapObj = redisUtil.get(RedisKeyType.SYSTEM_CONFIG_MAP.key);
+        if (systemConfigMapObj != null) {
+            HashMap<String, String> systemConfigMap = (HashMap<String, String>) systemConfigMapObj;
+            checkDeepLocOutTaskBlockReport = systemConfigMap.get("checkDeepLocOutTaskBlockReport");
+        }
+
+        if (!checkDeepLocOutTaskBlockReport.equals("Y")) {
+            return true;
+        }
+
+        Object lock = redisUtil.get(RedisKeyType.CHECK_SHALLOW_LOC_STATUS_LIMIT.key + taskNo);
+        if (lock != null) {
+            return false;
+        }
+        redisUtil.set(RedisKeyType.CHECK_SHALLOW_LOC_STATUS_LIMIT.key + taskNo, "lock", 5);
+
+        Integer shallowRow = Utils.getShallowRowByDeepRow(Utils.getRow(locNo));
+        if (shallowRow == null) {
+            return true;
+        }
+
+        String shallowLocNo = Utils.getLocNo(shallowRow, Utils.getBay(locNo), Utils.getLev(locNo));
+        LocMast shallowLocMast = locMastService.queryByLoc(shallowLocNo);
+        if (shallowLocMast == null) {
+            News.taskInfo(taskNo, "娴呭簱浣�:{} 鏁版嵁涓嶅瓨鍦�", shallowLocNo);
+            return false;
+        }
+
+        if (shallowLocMast.getLocSts().equals("O")) {
+            return true;
+        }
+
+        if (shallowLocMast.getLocSts().equals("F")) {
+            //娴呭簱浣嶇姸鎬佹湁璐�,鐢宠鏇存崲搴撲綅
+            String response = wmsOperateUtils.applyChangeLocNo(shallowLocNo);
+            if (response == null) {
+                News.taskError(taskNo, "WCS鐢宠鍦ㄥ簱搴撲綅鏇存崲搴撲綅澶辫触锛學MS鎺ュ彛鏈搷搴旓紒锛侊紒response锛歿}", response);
+                return false;
+            }
+            JSONObject jsonObject = JSON.parseObject(response);
+            if (jsonObject.getInteger("code").equals(200)) {
+                StartupDto dto = jsonObject.getObject("data", StartupDto.class);
+                String moveLocNo = dto.getLocNo();
+
+                CreateLocMoveTaskParam moveTaskParam = new CreateLocMoveTaskParam();
+                moveTaskParam.setTaskNo(dto.getTaskNo());
+                moveTaskParam.setSourceLocNo(shallowLocNo);
+                moveTaskParam.setLocNo(moveLocNo);
+                try {
+                    boolean result = commonService.createLocMoveTask(moveTaskParam);
+                } catch (CoolException e) {
+                    News.taskInfo(taskNo, e.getMessage());
+                }
+            } else {
+                News.error("璇锋眰WMS鐢宠鏇存崲搴撲綅鎺ュ彛澶辫触锛侊紒锛乺esponse锛歿}", response);
+            }
+        }
+        return false;
+    }
+
 }

--
Gitblit v1.9.1