From a637cdb04ab7e0954196ad0d8e7cc24ae22ee93a Mon Sep 17 00:00:00 2001
From: Junjie <fallin.jie@qq.com>
Date: 星期二, 10 三月 2026 13:22:22 +0800
Subject: [PATCH] #
---
src/main/java/com/zy/core/utils/DualCrnOperateProcessUtils.java | 157 ++++++++++++++++++++++++++++++++++-----------------
1 files changed, 104 insertions(+), 53 deletions(-)
diff --git a/src/main/java/com/zy/core/utils/DualCrnOperateProcessUtils.java b/src/main/java/com/zy/core/utils/DualCrnOperateProcessUtils.java
index 3d66a89..d697601 100644
--- a/src/main/java/com/zy/core/utils/DualCrnOperateProcessUtils.java
+++ b/src/main/java/com/zy/core/utils/DualCrnOperateProcessUtils.java
@@ -3,7 +3,7 @@
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.serializer.SerializerFeature;
-import com.baomidou.mybatisplus.mapper.EntityWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.core.exception.CoolException;
import com.zy.asrs.domain.enums.NotifyMsgType;
import com.zy.asrs.domain.param.CreateLocMoveTaskParam;
@@ -63,7 +63,7 @@
//鍏ュ嚭搴� ===>> 鍙屽伐浣嶅爢鍨涙満鍏ュ嚭搴撲綔涓氫笅鍙�
public synchronized void dualCrnIoExecute() {
- List<BasDualCrnp> basDualCrnps = basDualCrnpService.selectList(new EntityWrapper<>());
+ List<BasDualCrnp> basDualCrnps = basDualCrnpService.list(new QueryWrapper<>());
for (BasDualCrnp basDualCrnp : basDualCrnps) {
DualCrnThread dualCrnThread = (DualCrnThread) SlaveConnection.get(SlaveType.DualCrn, basDualCrnp.getCrnNo());
if(dualCrnThread == null){
@@ -75,9 +75,9 @@
continue;
}
- List<WrkMast> wrkMasts = wrkMastService.selectList(new EntityWrapper<WrkMast>()
+ List<WrkMast> wrkMasts = wrkMastService.list(new QueryWrapper<WrkMast>()
.eq("dual_crn_no", basDualCrnp.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.size() >= 2){
continue;
@@ -88,6 +88,10 @@
}
if(dualCrnProtocol.getAlarm() != 0) {
+ continue;
+ }
+
+ if(dualCrnProtocol.getTaskSend() != 0 || dualCrnProtocol.getTaskSendTwo() != 0) {
continue;
}
@@ -105,24 +109,47 @@
return;
}
+ Object clearLock = redisUtil.get(RedisKeyType.CLEAR_DUAL_CRN_TASK_LIMIT.key + basDualCrnp.getCrnNo());
+ if (clearLock != null) {
+ return;
+ }
+
// 濡傛灉鏈�杩戜竴娆℃槸鍑哄簱妯″紡
if (dualCrnProtocol.getLastIo().equals("O")) {
- processLoveMove(basDualCrnp, dualCrnThread);
- processIn(basDualCrnp, dualCrnThread);
- processOut(basDualCrnp, dualCrnThread);
+ boolean executeResult1 = processLoveMove(basDualCrnp, dualCrnThread);
+ if (executeResult1) {
+ return;
+ }
+ boolean executeResult2 = processIn(basDualCrnp, dualCrnThread);
+ if (executeResult2) {
+ return;
+ }
+ boolean executeResult3 = processOut(basDualCrnp, dualCrnThread);
+ if (executeResult3) {
+ return;
+ }
}
// 濡傛灉鏈�杩戜竴娆℃槸鍏ュ簱妯″紡
else if (dualCrnProtocol.getLastIo().equals("I")) {
- processLoveMove(basDualCrnp, dualCrnThread);
- processOut(basDualCrnp, dualCrnThread);
- processIn(basDualCrnp, dualCrnThread);
+ boolean executeResult1 = processLoveMove(basDualCrnp, dualCrnThread);
+ if (executeResult1) {
+ return;
+ }
+ boolean executeResult2 = processOut(basDualCrnp, dualCrnThread);
+ if (executeResult2) {
+ return;
+ }
+ boolean executeResult3 = processIn(basDualCrnp, dualCrnThread);
+ if (executeResult3) {
+ return;
+ }
}
}
- private void processIn(BasDualCrnp basDualCrnp, DualCrnThread dualCrnThread) {
+ private boolean processIn(BasDualCrnp basDualCrnp, DualCrnThread dualCrnThread) {
List<WrkMast> inTaskList = getInTaskList(basDualCrnp);
if (inTaskList.isEmpty()) {
- return;
+ return false;
}
WrkMast stationOneWrkMast = inTaskList.get(0);
@@ -158,30 +185,33 @@
MessageQueue.offer(SlaveType.DualCrn, crnNo, new Task(2, list));
News.info("鍙屽伐浣嶅爢鍨涙満鍛戒护涓嬪彂鎴愬姛锛屽爢鍨涙満鍙�={}锛屼换鍔℃暟鎹�={}", crnNo, JSON.toJSON(list));
dualCrnProtocol.setLastIo("I");
+ return true;
}
+ return false;
}
- private void processOut(BasDualCrnp basDualCrnp, DualCrnThread dualCrnThread) {
+ private boolean processOut(BasDualCrnp basDualCrnp, DualCrnThread dualCrnThread) {
List<WrkMast> outTaskList = getOutTaskList(basDualCrnp);
if (outTaskList.isEmpty()) {
- return;
+ return false;
}
WrkMast stationOneWrkMast = null;
WrkMast stationTwoWrkMast = null;
- List<Integer> disableList = basDualCrnp.getDisableStationOneBays$();
+ List<Integer> disableOneList = basDualCrnp.getDisableStationOneBays$();
+ List<Integer> disableTwoList = basDualCrnp.getDisableStationTwoBays$();
for (WrkMast wrkMast : outTaskList) {
if (stationOneWrkMast == null) {
- if (!disableList.contains(Utils.getBay(wrkMast.getSourceLocNo()))) {
+ if (!disableOneList.contains(Utils.getBay(wrkMast.getSourceLocNo()))) {
stationOneWrkMast = wrkMast;
continue;
}
}
if (stationTwoWrkMast == null) {
- if (!disableList.contains(Utils.getBay(wrkMast.getSourceLocNo()))) {
+ if (!disableTwoList.contains(Utils.getBay(wrkMast.getSourceLocNo()))) {
stationTwoWrkMast = wrkMast;
continue;
}
@@ -214,13 +244,15 @@
MessageQueue.offer(SlaveType.DualCrn, crnNo, new Task(2, list));
News.info("鍙屽伐浣嶅爢鍨涙満鍛戒护涓嬪彂鎴愬姛锛屽爢鍨涙満鍙�={}锛屼换鍔℃暟鎹�={}", crnNo, JSON.toJSON(list));
dualCrnProtocol.setLastIo("O");
+ return true;
}
+ return false;
}
- private void processLoveMove(BasDualCrnp basDualCrnp, DualCrnThread dualCrnThread) {
+ private boolean processLoveMove(BasDualCrnp basDualCrnp, DualCrnThread dualCrnThread) {
List<WrkMast> locMoveTaskList = getLocMoveTaskList(basDualCrnp);
if (locMoveTaskList.isEmpty()) {
- return;
+ return false;
}
WrkMast stationOneWrkMast = null;
@@ -270,7 +302,9 @@
MessageQueue.offer(SlaveType.DualCrn, crnNo, new Task(2, list));
News.info("鍙屽伐浣嶅爢鍨涙満鍛戒护涓嬪彂鎴愬姛锛屽爢鍨涙満鍙�={}锛屼换鍔℃暟鎹�={}", crnNo, JSON.toJSON(list));
dualCrnProtocol.setLastIo("O");
+ return true;
}
+ return false;
}
private List<WrkMast> getInTaskList(BasDualCrnp basDualCrnp) {
@@ -302,8 +336,12 @@
}
}
+ if (taskList.isEmpty()) {
+ return list;
+ }
+
// 鑾峰彇浠诲姟
- List<WrkMast> wrkMasts = wrkMastService.selectList(new EntityWrapper<WrkMast>()
+ List<WrkMast> wrkMasts = wrkMastService.list(new QueryWrapper<WrkMast>()
.eq("dual_crn_no", basDualCrnp.getCrnNo())
.in("wrk_no", taskList)
);
@@ -329,7 +367,7 @@
return list;
}
- List<WrkMast> wrkMasts = wrkMastService.selectList(new EntityWrapper<WrkMast>()
+ List<WrkMast> wrkMasts = wrkMastService.list(new QueryWrapper<WrkMast>()
.eq("dual_crn_no", basDualCrnp.getCrnNo())
.eq("wrk_sts", WrkStsType.NEW_OUTBOUND.sts)
);
@@ -339,7 +377,7 @@
private List<WrkMast> getLocMoveTaskList(BasDualCrnp basDualCrnp) {
List<WrkMast> list = new ArrayList<>();
- List<WrkMast> wrkMasts = wrkMastService.selectList(new EntityWrapper<WrkMast>()
+ List<WrkMast> wrkMasts = wrkMastService.list(new QueryWrapper<WrkMast>()
.eq("dual_crn_no", basDualCrnp.getCrnNo())
.eq("wrk_sts", WrkStsType.NEW_LOC_MOVE.sts)
);
@@ -371,7 +409,7 @@
}
// 鑾峰彇搴撲綅淇℃伅
- LocMast locMast = locMastService.selectById(wrkMast.getLocNo());
+ LocMast locMast = locMastService.getById(wrkMast.getLocNo());
if (locMast == null) {
News.taskInfo(wrkMast.getWrkNo(), "鐩爣搴撲綅:{} 淇℃伅涓嶅瓨鍦�", wrkMast.getLocNo());
return null;
@@ -432,6 +470,10 @@
Integer station = inStationObjModel.getDualCrnExecuteStation();
if (station == 1) {
+ if (dualCrnProtocol.getTaskNo() > 0) {
+ News.taskInfo(wrkMast.getWrkNo(), "宸ヤ綅1绯荤粺鍐呴儴璁板綍鏈変换鍔�");
+ return null;
+ }
List<Integer> basList = basDualCrnp.getDisableStationOneBays$();
if (basList.contains(Utils.getBay(wrkMast.getLocNo()))) {
//绂佹鏀捐揣鍒楋紝鐢宠閲嶆柊鍒嗛厤
@@ -439,6 +481,10 @@
return null;
}
}else {
+ if (dualCrnProtocol.getTaskNoTwo() > 0) {
+ News.taskInfo(wrkMast.getWrkNo(), "宸ヤ綅2绯荤粺鍐呴儴璁板綍鏈変换鍔�");
+ return null;
+ }
List<Integer> basList = basDualCrnp.getDisableStationTwoBays$();
if (basList.contains(Utils.getBay(wrkMast.getLocNo()))) {
//绂佹鏀捐揣鍒楋紝鐢宠閲嶆柊鍒嗛厤
@@ -489,6 +535,18 @@
return null;
}
+ if (station == 1) {
+ if (dualCrnProtocol.getTaskNo() > 0) {
+ News.taskInfo(wrkMast.getWrkNo(), "宸ヤ綅1绯荤粺鍐呴儴璁板綍鏈変换鍔�");
+ return null;
+ }
+ }else {
+ if (dualCrnProtocol.getTaskNoTwo() > 0) {
+ News.taskInfo(wrkMast.getWrkNo(), "宸ヤ綅2绯荤粺鍐呴儴璁板綍鏈変换鍔�");
+ return null;
+ }
+ }
+
Integer crnNo = basDualCrnp.getCrnNo();
for (StationObjModel stationObjModel : outStationList) {
@@ -525,7 +583,7 @@
}
// 鑾峰彇搴撲綅淇℃伅
- LocMast locMast = locMastService.selectById(wrkMast.getSourceLocNo());
+ LocMast locMast = locMastService.getById(wrkMast.getSourceLocNo());
if (locMast == null) {
News.taskInfo(wrkMast.getWrkNo(), "婧愬簱浣�:{} 淇℃伅涓嶅瓨鍦�", wrkMast.getSourceLocNo());
continue;
@@ -580,7 +638,7 @@
Integer crnNo = basDualCrnp.getCrnNo();
// 鑾峰彇婧愬簱浣嶄俊鎭�
- LocMast sourceLocMast = locMastService.selectById(wrkMast.getSourceLocNo());
+ LocMast sourceLocMast = locMastService.getById(wrkMast.getSourceLocNo());
if (sourceLocMast == null) {
News.taskInfo(wrkMast.getWrkNo(), "婧愬簱浣�:{} 淇℃伅涓嶅瓨鍦�", wrkMast.getSourceLocNo());
return null;
@@ -592,7 +650,7 @@
}
// 鑾峰彇搴撲綅淇℃伅
- LocMast locMast = locMastService.selectById(wrkMast.getLocNo());
+ LocMast locMast = locMastService.getById(wrkMast.getLocNo());
if (locMast == null) {
News.taskInfo(wrkMast.getWrkNo(), "搴撲綅:{} 淇℃伅涓嶅瓨鍦�", wrkMast.getLocNo());
return null;
@@ -635,7 +693,7 @@
//鍙屽伐浣嶅爢鍨涙満浠诲姟鎵ц瀹屾垚
public synchronized void dualCrnIoExecuteFinish() {
- List<BasDualCrnp> basDualCrnps = basDualCrnpService.selectList(new EntityWrapper<>());
+ List<BasDualCrnp> basDualCrnps = basDualCrnpService.list(new QueryWrapper<>());
for (BasDualCrnp basDualCrnp : basDualCrnps) {
DualCrnThread dualCrnThread = (DualCrnThread) SlaveConnection.get(SlaveType.DualCrn, basDualCrnp.getCrnNo());
if(dualCrnThread == null){
@@ -655,12 +713,14 @@
continue;
}
- if(dualCrnProtocol.getTaskNo() > 0 && dualCrnProtocol.getStatus() == DualCrnStatusType.WAITING.id) {
+ if((dualCrnProtocol.getTaskNo() > 0 && dualCrnProtocol.getDeviceTaskNo() > 0) && dualCrnProtocol.getTaskSend() == 0 && dualCrnProtocol.getStatus().equals(DualCrnStatusType.WAITING.id)) {
executeFinish(basDualCrnp, dualCrnThread, dualCrnProtocol, dualCrnProtocol.getTaskNo(), 1);
+ continue;
}
- if(dualCrnProtocol.getTaskNoTwo() > 0 && dualCrnProtocol.getStatusTwo() == DualCrnStatusType.WAITING.id) {
+ if((dualCrnProtocol.getTaskNoTwo() > 0 && dualCrnProtocol.getDeviceTaskNoTwo() > 0) && dualCrnProtocol.getTaskSendTwo() == 0 && dualCrnProtocol.getStatusTwo().equals(DualCrnStatusType.WAITING.id)) {
executeFinish(basDualCrnp, dualCrnThread, dualCrnProtocol, dualCrnProtocol.getTaskNoTwo(), 2);
+ continue;
}
}
}
@@ -678,28 +738,13 @@
return;
}
- Object commandListObj = redisUtil.get(RedisKeyType.DUAL_CRN_COMMAND_.key + basDualCrnp.getCrnNo());
- if (commandListObj == null) {
- News.error("鍙屽伐浣嶅爢鍨涙満澶勪簬绛夊緟纭涓斾换鍔″畬鎴愮姸鎬侊紝浣嗘湭鎵惧埌鍛戒护銆傚爢鍨涙満鍙�={}锛屽伐浣滃彿={}", basDualCrnp.getCrnNo(), taskNo);
- return;
- }
- List<SendDualCrnCommandParam> dualCrnCommandParamList = JSON.parseArray(commandListObj.toString(), SendDualCrnCommandParam.class);
- SendDualCrnCommandParam taskCommand = null;
- for (SendDualCrnCommandParam sendDualCrnCommandParam : dualCrnCommandParamList) {
- DualCrnCommand dualCrnCommand = sendDualCrnCommandParam.getCommands().get(0);
- if(dualCrnCommand.getTaskNo() == taskNo){
- taskCommand = sendDualCrnCommandParam;
- break;
- }
- }
- if (taskCommand == null) {
- News.error("鍙屽伐浣嶅爢鍨涙満澶勪簬绛夊緟纭涓斾换鍔″畬鎴愮姸鎬侊紝浣嗘湭鎵惧埌鍛戒护銆傚爢鍨涙満鍙�={}锛屽伐浣滃彿={}", basDualCrnp.getCrnNo(), taskNo);
- return;
+ int idx = 10;
+ Object idxObj = redisUtil.get(RedisKeyType.DUAL_CRN_COMMAND_IDX.key + wrkMast.getWrkNo());
+ if(idxObj != null) {
+ idx = (Integer) idxObj;
}
- Integer idx = taskCommand.getCommandIdx();
- List<DualCrnCommand> commandList = taskCommand.getCommands();
- if (idx >= commandList.size()) {
+ if (idx >= 2) {
Long updateWrkSts = null;
if (wrkMast.getWrkSts() == WrkStsType.INBOUND_RUN.sts) {
updateWrkSts = WrkStsType.COMPLETE_INBOUND.sts;
@@ -739,9 +784,15 @@
return;
}
- DualCrnCommand resetCommand = dualCrnThread.getResetCommand(dualCrnProtocol.getCrnNo(), station);
+ DualCrnCommand resetCommand = dualCrnThread.getResetCommand(taskNo, dualCrnProtocol.getCrnNo(), station);
boolean offer = MessageQueue.offer(SlaveType.DualCrn, dualCrnProtocol.getCrnNo(), new Task(3, resetCommand));
if (offer) {
+ if (station == 1) {
+ redisUtil.set(RedisKeyType.DUAL_CRN_STATION1_FLAG.key + basDualCrnp.getCrnNo(), 0, 60 * 60 * 24);
+ }else {
+ redisUtil.set(RedisKeyType.DUAL_CRN_STATION2_FLAG.key + basDualCrnp.getCrnNo(), 0, 60 * 60 * 24);
+ }
+
wrkMast.setWrkSts(updateWrkSts);
wrkMast.setSystemMsg("");
wrkMast.setIoTime(new Date());
@@ -751,9 +802,10 @@
redisUtil.set(RedisKeyType.DUAL_CRN_IO_EXECUTE_FINISH_LIMIT.key + basDualCrnp.getCrnNo() + "_" + taskNo, "lock", 10);
}
}else {
- DualCrnCommand resetCommand = dualCrnThread.getResetCommand(dualCrnProtocol.getCrnNo(), station);
+ DualCrnCommand resetCommand = dualCrnThread.getResetCommand(taskNo, dualCrnProtocol.getCrnNo(), station);
MessageQueue.offer(SlaveType.DualCrn, dualCrnProtocol.getCrnNo(), new Task(3, resetCommand));
News.info("鍙屽伐浣嶅爢鍨涙満鍛戒护瀹屾垚纭鎴愬姛锛屽爢鍨涙満鍙�={}锛屽伐浣滃彿={}", basDualCrnp.getCrnNo(), taskNo);
+ redisUtil.set(RedisKeyType.DUAL_CRN_IO_EXECUTE_FINISH_LIMIT.key + basDualCrnp.getCrnNo() + "_" + taskNo, "lock", 10);
}
}
@@ -784,8 +836,7 @@
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;
+ return true;
}
if (shallowLocMast.getLocSts().equals("O")) {
--
Gitblit v1.9.1