From 007ee7bc1b63aa381b3a414952bbf41aeebed60e Mon Sep 17 00:00:00 2001
From: Administrator <XS@163.COM>
Date: 星期一, 27 四月 2026 16:32:19 +0800
Subject: [PATCH] #
---
src/main/java/com/zy/core/utils/DualCrnOperateProcessUtils.java | 273 +++++++++++++++++++++++++++++++++++++++++-------------
1 files changed, 208 insertions(+), 65 deletions(-)
diff --git a/src/main/java/com/zy/core/utils/DualCrnOperateProcessUtils.java b/src/main/java/com/zy/core/utils/DualCrnOperateProcessUtils.java
index ba6a2f0..ec2f975 100644
--- a/src/main/java/com/zy/core/utils/DualCrnOperateProcessUtils.java
+++ b/src/main/java/com/zy/core/utils/DualCrnOperateProcessUtils.java
@@ -29,6 +29,8 @@
import com.zy.core.model.param.SendDualCrnCommandParam;
import com.zy.core.model.protocol.DualCrnProtocol;
import com.zy.core.model.protocol.StationProtocol;
+import com.zy.core.task.MainProcessLane;
+import com.zy.core.task.MainProcessTaskSubmitter;
import com.zy.core.thread.DualCrnThread;
import com.zy.core.thread.StationThread;
import org.springframework.beans.factory.annotation.Autowired;
@@ -60,53 +62,73 @@
private CommonService commonService;
@Autowired
private NotifyUtils notifyUtils;
+ @Autowired
+ private MainProcessTaskSubmitter mainProcessTaskSubmitter;
//鍏ュ嚭搴� ===>> 鍙屽伐浣嶅爢鍨涙満鍏ュ嚭搴撲綔涓氫笅鍙�
- public synchronized void dualCrnIoExecute() {
+ public void dualCrnIoExecute() {
List<BasDualCrnp> basDualCrnps = basDualCrnpService.selectList(new EntityWrapper<>());
for (BasDualCrnp basDualCrnp : basDualCrnps) {
- DualCrnThread dualCrnThread = (DualCrnThread) SlaveConnection.get(SlaveType.DualCrn, basDualCrnp.getCrnNo());
- if(dualCrnThread == null){
- continue;
- }
-
- DualCrnProtocol dualCrnProtocol = dualCrnThread.getStatus();
- if(dualCrnProtocol == null){
- continue;
- }
-
- List<WrkMast> wrkMasts = wrkMastService.selectList(new EntityWrapper<WrkMast>()
- .eq("dual_crn_no", basDualCrnp.getCrnNo())
- .in("wrk_sts", WrkStsType.INBOUND_RUN.sts, WrkStsType.OUTBOUND_RUN.sts)
- );
- if(wrkMasts.size() >= 2){
- continue;
- }
-
- if(dualCrnProtocol.getMode() != DualCrnModeType.AUTO.id) {
- continue;
- }
-
- if(dualCrnProtocol.getAlarm() != 0) {
- continue;
- }
-
- this.crnExecute(basDualCrnp, dualCrnThread);
+ dualCrnIoExecute(basDualCrnp);
}
}
- private synchronized void crnExecute(BasDualCrnp basDualCrnp, DualCrnThread dualCrnThread) {
+ public void dualCrnIoExecute(BasDualCrnp basDualCrnp) {
+ if (basDualCrnp == null || basDualCrnp.getCrnNo() == null) {
+ return;
+ }
+ DualCrnThread dualCrnThread = (DualCrnThread) SlaveConnection.get(SlaveType.DualCrn, basDualCrnp.getCrnNo());
+ if(dualCrnThread == null){
+ return;
+ }
+
DualCrnProtocol dualCrnProtocol = dualCrnThread.getStatus();
if(dualCrnProtocol == null){
return;
}
- if (!(dualCrnProtocol.getStatusType().equals(DualCrnStatusType.IDLE) && dualCrnProtocol.getStatusTypeTwo().equals(DualCrnStatusType.IDLE))) {
+ List<WrkMast> wrkMasts = wrkMastService.selectList(new EntityWrapper<WrkMast>()
+ .eq("dual_crn_no", basDualCrnp.getCrnNo())
+ .in("wrk_sts", WrkStsType.INBOUND_RUN.sts, WrkStsType.OUTBOUND_RUN.sts)
+ );
+ if(wrkMasts == null || wrkMasts.size() >= 2){
+ return;
+ }
+
+ if(!DualCrnModeType.AUTO.id.equals(dualCrnProtocol.getMode())) {
+ return;
+ }
+
+ if(dualCrnProtocol.getAlarm() == null || dualCrnProtocol.getAlarm() != 0) {
+ return;
+ }
+
+ if((dualCrnProtocol.getTaskSend() != null && dualCrnProtocol.getTaskSend() != 0)
+ || (dualCrnProtocol.getTaskSendTwo() != null && dualCrnProtocol.getTaskSendTwo() != 0)) {
+ return;
+ }
+
+ this.crnExecute(basDualCrnp, dualCrnThread);
+ }
+
+ private void crnExecute(BasDualCrnp basDualCrnp, DualCrnThread dualCrnThread) {
+ DualCrnProtocol dualCrnProtocol = dualCrnThread.getStatus();
+ if(dualCrnProtocol == null){
+ return;
+ }
+
+ if (!(DualCrnStatusType.IDLE.equals(dualCrnProtocol.getStatusType())
+ && DualCrnStatusType.IDLE.equals(dualCrnProtocol.getStatusTypeTwo()))) {
+ return;
+ }
+
+ Object clearLock = redisUtil.get(RedisKeyType.CLEAR_DUAL_CRN_TASK_LIMIT.key + basDualCrnp.getCrnNo());
+ if (clearLock != null) {
return;
}
// 濡傛灉鏈�杩戜竴娆℃槸鍑哄簱妯″紡
- if (dualCrnProtocol.getLastIo().equals("O")) {
+ if ("O".equals(dualCrnProtocol.getLastIo())) {
boolean executeResult1 = processLoveMove(basDualCrnp, dualCrnThread);
if (executeResult1) {
return;
@@ -121,7 +143,7 @@
}
}
// 濡傛灉鏈�杩戜竴娆℃槸鍏ュ簱妯″紡
- else if (dualCrnProtocol.getLastIo().equals("I")) {
+ else if ("I".equals(dualCrnProtocol.getLastIo())) {
boolean executeResult1 = processLoveMove(basDualCrnp, dualCrnThread);
if (executeResult1) {
return;
@@ -190,18 +212,19 @@
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;
}
@@ -371,7 +394,7 @@
return list;
}
- private synchronized SendDualCrnCommandParam crnExecuteIn(BasDualCrnp basDualCrnp, DualCrnThread dualCrnThread, WrkMast wrkMast) {
+ private SendDualCrnCommandParam crnExecuteIn(BasDualCrnp basDualCrnp, DualCrnThread dualCrnThread, WrkMast wrkMast) {
DualCrnProtocol dualCrnProtocol = dualCrnThread.getStatus();
if (dualCrnProtocol == null) {
return null;
@@ -456,6 +479,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()))) {
//绂佹鏀捐揣鍒楋紝鐢宠閲嶆柊鍒嗛厤
@@ -463,6 +490,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()))) {
//绂佹鏀捐揣鍒楋紝鐢宠閲嶆柊鍒嗛厤
@@ -496,7 +527,7 @@
return null;
}
- private synchronized SendDualCrnCommandParam crnExecuteOut(BasDualCrnp basDualCrnp, DualCrnThread dualCrnThread, WrkMast wrkMast, int station) {
+ private SendDualCrnCommandParam crnExecuteOut(BasDualCrnp basDualCrnp, DualCrnThread dualCrnThread, WrkMast wrkMast, int station) {
DualCrnProtocol dualCrnProtocol = dualCrnThread.getStatus();
if (dualCrnProtocol == null) {
return null;
@@ -511,6 +542,18 @@
if (outStationList.isEmpty()) {
News.info("鍙屽伐浣嶅爢鍨涙満:{} 鍑哄簱绔欑偣鏈缃�", basDualCrnp.getCrnNo());
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();
@@ -595,7 +638,7 @@
return null;
}
- private synchronized SendDualCrnCommandParam crnExecuteLocMove(BasDualCrnp basDualCrnp, DualCrnThread dualCrnThread, WrkMast wrkMast, int station) {
+ private SendDualCrnCommandParam crnExecuteLocMove(BasDualCrnp basDualCrnp, DualCrnThread dualCrnThread, WrkMast wrkMast, int station) {
DualCrnProtocol dualCrnProtocol = dualCrnThread.getStatus();
if (dualCrnProtocol == null) {
return null;
@@ -658,34 +701,128 @@
}
//鍙屽伐浣嶅爢鍨涙満浠诲姟鎵ц瀹屾垚
- public synchronized void dualCrnIoExecuteFinish() {
+ public void dualCrnIoExecuteFinish() {
List<BasDualCrnp> basDualCrnps = basDualCrnpService.selectList(new EntityWrapper<>());
for (BasDualCrnp basDualCrnp : basDualCrnps) {
- DualCrnThread dualCrnThread = (DualCrnThread) SlaveConnection.get(SlaveType.DualCrn, basDualCrnp.getCrnNo());
- if(dualCrnThread == null){
+ dualCrnIoExecuteFinish(basDualCrnp);
+ }
+ }
+
+ public void dualCrnIoExecuteFinish(BasDualCrnp basDualCrnp) {
+ if (basDualCrnp == null || basDualCrnp.getCrnNo() == null) {
+ return;
+ }
+ DualCrnThread dualCrnThread = (DualCrnThread) SlaveConnection.get(SlaveType.DualCrn, basDualCrnp.getCrnNo());
+ if(dualCrnThread == null){
+ return;
+ }
+
+ DualCrnProtocol dualCrnProtocol = dualCrnThread.getStatus();
+ if(dualCrnProtocol == null){
+ return;
+ }
+
+ if(!DualCrnModeType.AUTO.id.equals(dualCrnProtocol.getMode())) {
+ return;
+ }
+
+ if(dualCrnProtocol.getAlarm() == null || dualCrnProtocol.getAlarm() != 0) {
+ return;
+ }
+
+ if((dualCrnProtocol.getTaskNo() != null && dualCrnProtocol.getTaskNo() > 0
+ && dualCrnProtocol.getDeviceTaskNo() != null && dualCrnProtocol.getDeviceTaskNo() > 0)
+ && (dualCrnProtocol.getTaskSend() == null || dualCrnProtocol.getTaskSend() == 0)
+ && DualCrnStatusType.WAITING.id.equals(dualCrnProtocol.getStatus())) {
+ executeFinish(basDualCrnp, dualCrnThread, dualCrnProtocol, dualCrnProtocol.getTaskNo(), 1);
+ return;
+ }
+
+ if((dualCrnProtocol.getTaskNoTwo() != null && dualCrnProtocol.getTaskNoTwo() > 0
+ && dualCrnProtocol.getDeviceTaskNoTwo() != null && dualCrnProtocol.getDeviceTaskNoTwo() > 0)
+ && (dualCrnProtocol.getTaskSendTwo() == null || dualCrnProtocol.getTaskSendTwo() == 0)
+ && DualCrnStatusType.WAITING.id.equals(dualCrnProtocol.getStatusTwo())) {
+ executeFinish(basDualCrnp, dualCrnThread, dualCrnProtocol, dualCrnProtocol.getTaskNoTwo(), 2);
+ }
+ }
+
+ public void submitDualCrnIoTasks(long minIntervalMs) {
+ submitDualCrnIoTasks(MainProcessLane.DUAL_CRN_IO, minIntervalMs);
+ }
+
+ public void submitDualCrnIoTasks(MainProcessLane lane, long minIntervalMs) {
+ mainProcessTaskSubmitter.submitSerialTask(
+ MainProcessLane.DUAL_CRN_SCAN,
+ "submitDualCrnIoTasks",
+ minIntervalMs,
+ new Runnable() {
+ @Override
+ public void run() {
+ submitDualCrnIoTasksInternal(lane, minIntervalMs);
+ }
+ }
+ );
+ }
+
+ private void submitDualCrnIoTasksInternal(MainProcessLane lane, long minIntervalMs) {
+ List<BasDualCrnp> basDualCrnps = basDualCrnpService.selectList(new EntityWrapper<>());
+ for (final BasDualCrnp basDualCrnp : basDualCrnps) {
+ Integer crnNo = basDualCrnp == null ? null : basDualCrnp.getCrnNo();
+ if (crnNo == null) {
continue;
}
+ mainProcessTaskSubmitter.submitKeyedSerialTask(
+ lane,
+ crnNo,
+ "dualCrnIoExecute",
+ minIntervalMs,
+ new Runnable() {
+ @Override
+ public void run() {
+ dualCrnIoExecute(basDualCrnp);
+ }
+ }
+ );
+ }
+ }
- DualCrnProtocol dualCrnProtocol = dualCrnThread.getStatus();
- if(dualCrnProtocol == null){
+ public void submitDualCrnIoExecuteFinishTasks(long minIntervalMs) {
+ submitDualCrnIoExecuteFinishTasks(MainProcessLane.DUAL_CRN_IO_FINISH, minIntervalMs);
+ }
+
+ public void submitDualCrnIoExecuteFinishTasks(MainProcessLane lane, long minIntervalMs) {
+ mainProcessTaskSubmitter.submitSerialTask(
+ MainProcessLane.DUAL_CRN_SCAN,
+ "submitDualCrnIoExecuteFinishTasks",
+ minIntervalMs,
+ new Runnable() {
+ @Override
+ public void run() {
+ submitDualCrnIoExecuteFinishTasksInternal(lane, minIntervalMs);
+ }
+ }
+ );
+ }
+
+ private void submitDualCrnIoExecuteFinishTasksInternal(MainProcessLane lane, long minIntervalMs) {
+ List<BasDualCrnp> basDualCrnps = basDualCrnpService.selectList(new EntityWrapper<>());
+ for (final BasDualCrnp basDualCrnp : basDualCrnps) {
+ Integer crnNo = basDualCrnp == null ? null : basDualCrnp.getCrnNo();
+ if (crnNo == null) {
continue;
}
-
- if(dualCrnProtocol.getMode() != DualCrnModeType.AUTO.id) {
- continue;
- }
-
- if(dualCrnProtocol.getAlarm() != 0) {
- continue;
- }
-
- if(dualCrnProtocol.getTaskNo() > 0 && dualCrnProtocol.getStatus() == DualCrnStatusType.WAITING.id) {
- executeFinish(basDualCrnp, dualCrnThread, dualCrnProtocol, dualCrnProtocol.getTaskNo(), 1);
- }
-
- if(dualCrnProtocol.getTaskNoTwo() > 0 && dualCrnProtocol.getStatusTwo() == DualCrnStatusType.WAITING.id) {
- executeFinish(basDualCrnp, dualCrnThread, dualCrnProtocol, dualCrnProtocol.getTaskNoTwo(), 2);
- }
+ mainProcessTaskSubmitter.submitKeyedSerialTask(
+ lane,
+ crnNo,
+ "dualCrnIoExecuteFinish",
+ minIntervalMs,
+ new Runnable() {
+ @Override
+ public void run() {
+ dualCrnIoExecuteFinish(basDualCrnp);
+ }
+ }
+ );
}
}
@@ -748,26 +885,33 @@
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());
if (wrkMastService.updateById(wrkMast)) {
News.info("鍙屽伐浣嶅爢鍨涙満浠诲姟鐘舵�佹洿鏂版垚鍔燂紝鍫嗗灈鏈哄彿={}锛屽伐浣滃彿={}", basDualCrnp.getCrnNo(), taskNo);
}
- redisUtil.set(RedisKeyType.DUAL_CRN_IO_EXECUTE_FINISH_LIMIT.key + basDualCrnp.getCrnNo() + "_" + taskNo, "lock", 10);
+ redisUtil.set(RedisKeyType.DUAL_CRN_IO_EXECUTE_FINISH_LIMIT.key + basDualCrnp.getCrnNo() + "_" + taskNo, "lock", 3);
}
}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", 3);
}
}
//妫�娴嬫祬搴撲綅鐘舵��
- public synchronized boolean checkShallowLocStatus(String locNo, Integer taskNo) {
+ public boolean checkShallowLocStatus(String locNo, Integer taskNo) {
String checkDeepLocOutTaskBlockReport = "Y";
Object systemConfigMapObj = redisUtil.get(RedisKeyType.SYSTEM_CONFIG_MAP.key);
if (systemConfigMapObj != null) {
@@ -793,8 +937,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