From 8dc960dd9fda130ff19faaafed6b1234e622610b Mon Sep 17 00:00:00 2001
From: Junjie <DELL@qq.com>
Date: 星期五, 19 十二月 2025 15:23:05 +0800
Subject: [PATCH] #
---
src/main/java/com/zy/core/utils/CrnOperateProcessUtils.java | 143 ++++++++++++++++++++++++++++++++++++++++++++++-
1 files changed, 138 insertions(+), 5 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..26954d7 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,17 +12,16 @@
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;
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;
-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;
@@ -40,6 +42,12 @@
private BasCrnpService basCrnpService;
@Autowired
private LocMastService locMastService;
+ @Autowired
+ private RedisUtil redisUtil;
+ @Autowired
+ private WmsOperateUtils wmsOperateUtils;
+ @Autowired
+ private CommonService commonService;
//鍏ュ嚭搴� ===>> 鍫嗗灈鏈哄叆鍑哄簱浣滀笟涓嬪彂
public synchronized void crnIoExecute() {
@@ -91,6 +99,9 @@
crnProtocol.setLastIo("O");
}
}
+
+ //搴撲綅绉昏浆
+ this.crnExecuteLocTransfer(basCrnp, crnThread);
}
}
}
@@ -164,6 +175,13 @@
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;
}
@@ -248,6 +266,13 @@
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);
@@ -261,6 +286,58 @@
News.info("鍫嗗灈鏈哄懡浠や笅鍙戞垚鍔燂紝鍫嗗灈鏈哄彿={}锛屼换鍔℃暟鎹�={}", crnNo, JSON.toJSON(command));
return;
}
+ }
+ }
+ }
+
+ 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;
}
}
}
@@ -283,6 +360,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 +377,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,8 +392,58 @@
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);
}
}
}
+ //妫�娴嬫祬搴撲綅鐘舵��
+ public synchronized boolean checkShallowLocStatus(String locNo, Integer taskNo) {
+ 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);
+ 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