From 9c5b9144ed8ed3190a21c4cb66b80e1ed9b7c954 Mon Sep 17 00:00:00 2001
From: Junjie <fallin.jie@qq.com>
Date: 星期五, 03 四月 2026 15:19:06 +0800
Subject: [PATCH] #预调度优化
---
src/main/java/com/zy/core/utils/CrnOperateProcessUtils.java | 144 +++++++++++++++--------------------------------
1 files changed, 47 insertions(+), 97 deletions(-)
diff --git a/src/main/java/com/zy/core/utils/CrnOperateProcessUtils.java b/src/main/java/com/zy/core/utils/CrnOperateProcessUtils.java
index 889589e..4be2698 100644
--- a/src/main/java/com/zy/core/utils/CrnOperateProcessUtils.java
+++ b/src/main/java/com/zy/core/utils/CrnOperateProcessUtils.java
@@ -77,14 +77,13 @@
private static final String CRN_OUT_REQUIRE_STATION_OUT_ENABLE_CONFIG = "crnOutRequireStationOutEnable";
public synchronized void crnIoExecute() {
- Set<Integer> crnMoveBlockedCrnNos = executeCrnMoveTask();
List<BasCrnp> basCrnps = basCrnpService.list(new QueryWrapper<>());
for (BasCrnp basCrnp : basCrnps) {
- crnIoExecute(basCrnp, crnMoveBlockedCrnNos);
+ crnIoExecute(basCrnp);
}
}
- public void crnIoExecute(BasCrnp basCrnp, Set<Integer> crnMoveBlockedCrnNos) {
+ public void crnIoExecute(BasCrnp basCrnp) {
if (basCrnp == null || basCrnp.getCrnNo() == null) {
return;
}
@@ -92,16 +91,16 @@
if (systemConfigMapObj != null) {
HashMap<String, String> systemConfigMap = (HashMap<String, String>) systemConfigMapObj;
if (systemConfigMap.get("crnRunMethod").equals("solver")) {
- plannerExecute(basCrnp, crnMoveBlockedCrnNos);
+ plannerExecute(basCrnp);
}else {
- crnIoExecuteNormal(basCrnp, crnMoveBlockedCrnNos);
+ crnIoExecuteNormal(basCrnp);
}
}
}
//鍏ュ嚭搴� ===>> 鍫嗗灈鏈哄叆鍑哄簱浣滀笟涓嬪彂
- private void crnIoExecuteNormal(BasCrnp currentCrn, Set<Integer> crnMoveBlockedCrnNos) {
- if (currentCrn == null || currentCrn.getCrnNo() == null || crnMoveBlockedCrnNos.contains(currentCrn.getCrnNo())) {
+ private void crnIoExecuteNormal(BasCrnp currentCrn) {
+ if (currentCrn == null || currentCrn.getCrnNo() == null) {
return;
}
@@ -118,7 +117,12 @@
long runningCount = wrkMastService.count(new QueryWrapper<WrkMast>()
.eq("crn_no", crnNo)
- .in("wrk_sts", WrkStsType.INBOUND_RUN.sts, WrkStsType.OUTBOUND_RUN.sts, WrkStsType.LOC_MOVE_RUN.sts, WrkStsType.CRN_MOVE_RUN.sts));
+ .in("wrk_sts",
+ WrkStsType.INBOUND_RUN.sts
+ , WrkStsType.OUTBOUND_RUN.sts
+ , WrkStsType.LOC_MOVE_RUN.sts
+ , WrkStsType.CRN_MOVE_RUN.sts
+ ));
if (runningCount > 0) {
return;
}
@@ -135,6 +139,12 @@
Object clearLock = redisUtil.get(RedisKeyType.CLEAR_CRN_TASK_LIMIT.key + crnNo);
if (clearLock != null) {
+ return;
+ }
+
+ //鎵ц绉诲姩浠诲姟
+ boolean executed = executeCrnMoveTask(crnThread, crnProtocol);
+ if (executed) {
return;
}
@@ -745,16 +755,15 @@
}
public synchronized void plannerExecute() {
- Set<Integer> crnMoveBlockedCrnNos = executeCrnMoveTask();
List<BasCrnp> basCrnps = basCrnpService.list(new QueryWrapper<>());
for (BasCrnp basCrnp : basCrnps) {
- plannerExecute(basCrnp, crnMoveBlockedCrnNos);
+ plannerExecute(basCrnp);
}
}
- private void plannerExecute(BasCrnp basCrnp, Set<Integer> crnMoveBlockedCrnNos) {
+ private void plannerExecute(BasCrnp basCrnp) {
int nowSec = (int) (System.currentTimeMillis() / 1000);
- if (basCrnp == null || basCrnp.getCrnNo() == null || crnMoveBlockedCrnNos.contains(basCrnp.getCrnNo())) {
+ if (basCrnp == null || basCrnp.getCrnNo() == null) {
return;
}
String key = RedisKeyType.PLANNER_SCHEDULE.key + "CRN-" + basCrnp.getCrnNo();
@@ -903,76 +912,20 @@
return false;
}
- private Set<Integer> executeCrnMoveTask() {
- List<WrkMast> pendingTaskQueue = wrkMastService.list(new QueryWrapper<WrkMast>()
- .eq("io_type", WrkIoType.CRN_MOVE.id)
- .eq("wrk_sts", WrkStsType.NEW_CRN_MOVE.sts)
- .orderByAsc("appe_time")
- .orderByAsc("wrk_no"));
- Set<Integer> blockedCrnNoSet = new HashSet<>();
- for (WrkMast wrkMast : pendingTaskQueue) {
- if (wrkMast != null && wrkMast.getCrnNo() != null) {
- blockedCrnNoSet.add(wrkMast.getCrnNo());
- }
- }
- if (blockedCrnNoSet.isEmpty()) {
- return blockedCrnNoSet;
- }
-
- List<BasCrnp> basCrnps = basCrnpService.list(new QueryWrapper<>());
- Map<Integer, CrnThread> dispatchThreadMap = new HashMap<>();
- Map<Integer, CrnProtocol> dispatchProtocolMap = new HashMap<>();
- for (BasCrnp basCrnp : basCrnps) {
- if (basCrnp == null || basCrnp.getCrnNo() == null) {
- continue;
- }
-
- Integer crnNo = basCrnp.getCrnNo();
- CrnThread crnThread = (CrnThread) SlaveConnection.get(SlaveType.Crn, crnNo);
- if (crnThread == null) {
- continue;
- }
-
- CrnProtocol crnProtocol = crnThread.getStatus();
- if (crnProtocol == null) {
- continue;
- }
-
- long runningCount = wrkMastService.count(new QueryWrapper<WrkMast>()
- .eq("crn_no", crnNo)
- .in("wrk_sts",
- WrkStsType.INBOUND_RUN.sts,
- WrkStsType.OUTBOUND_RUN.sts,
- WrkStsType.LOC_MOVE_RUN.sts,
- WrkStsType.CRN_MOVE_RUN.sts));
- if (runningCount > 0) {
- continue;
- }
-
- if (!Objects.equals(crnProtocol.getMode(), CrnModeType.AUTO.id)
- || !Objects.equals(crnProtocol.getTaskNo(), 0)
- || !Objects.equals(crnProtocol.getStatus(), CrnStatusType.IDLE.id)
- || !Objects.equals(crnProtocol.getLoaded(), 0)
- || !Objects.equals(crnProtocol.getForkPos(), 0)
- || !Objects.equals(crnProtocol.getAlarm(), 0)) {
- continue;
- }
-
- Object clearLock = redisUtil.get(RedisKeyType.CLEAR_CRN_TASK_LIMIT.key + crnNo);
- if (clearLock != null) {
- continue;
- }
-
- dispatchThreadMap.put(crnNo, crnThread);
- dispatchProtocolMap.put(crnNo, crnProtocol);
- }
-
- if (dispatchThreadMap.isEmpty()) {
- return blockedCrnNoSet;
+ private boolean executeCrnMoveTask(CrnThread crnThread, CrnProtocol crnProtocol) {
+ long runningCount = wrkMastService.count(new QueryWrapper<WrkMast>()
+ .eq("crn_no", crnProtocol.getCrnNo())
+ .in("wrk_sts",
+ WrkStsType.INBOUND_RUN.sts,
+ WrkStsType.OUTBOUND_RUN.sts,
+ WrkStsType.LOC_MOVE_RUN.sts,
+ WrkStsType.CRN_MOVE_RUN.sts));
+ if (runningCount > 0) {
+ return false;
}
List<WrkMast> taskQueue = wrkMastService.list(new QueryWrapper<WrkMast>()
- .in("crn_no", new ArrayList<>(dispatchThreadMap.keySet()))
+ .eq("crn_no", crnProtocol.getCrnNo())
.eq("io_type", WrkIoType.CRN_MOVE.id)
.eq("wrk_sts", WrkStsType.NEW_CRN_MOVE.sts)
.orderByAsc("appe_time")
@@ -983,36 +936,38 @@
continue;
}
- Integer crnNo = wrkMast.getCrnNo();
- CrnThread crnThread = dispatchThreadMap.get(crnNo);
- if (crnThread == null || dispatchProtocolMap.get(crnNo) == null) {
+ if (crnProtocol.getBay() == Utils.getBay(wrkMast.getLocNo())) {
+ Date now = new Date();
+ wrkMast.setWrkSts(WrkStsType.COMPLETE_CRN_MOVE.sts);
+ wrkMast.setSystemMsg("鍫嗗灈鏈哄凡鍦ㄧ洰鏍囩偣锛屼换鍔$洿鎺ュ畬鎴�");
+ wrkMast.setIoTime(now);
+ wrkMast.setModiTime(now);
+ if (wrkMastService.updateById(wrkMast)) {
+ wrkAnalysisService.markCraneStart(wrkMast, now);
+ }
continue;
}
- CrnCommand moveCommand = crnThread.getMoveCommand(wrkMast.getLocNo(), wrkMast.getWrkNo(), crnNo);
+ CrnCommand moveCommand = crnThread.getMoveCommand(wrkMast.getLocNo(), wrkMast.getWrkNo(), crnProtocol.getCrnNo());
if (moveCommand == null) {
continue;
}
Date now = new Date();
wrkMast.setWrkSts(WrkStsType.CRN_MOVE_RUN.sts);
- wrkMast.setCrnNo(crnNo);
wrkMast.setSystemMsg("");
wrkMast.setIoTime(now);
wrkMast.setModiTime(now);
if (wrkMastService.updateById(wrkMast)) {
wrkAnalysisService.markCraneStart(wrkMast, now);
- MessageQueue.offer(SlaveType.Crn, crnNo, new Task(2, moveCommand));
+ MessageQueue.offer(SlaveType.Crn, crnProtocol.getCrnNo(), new Task(2, moveCommand));
News.info("鍫嗗灈鏈虹Щ鍔ㄥ懡浠や笅鍙戞垚鍔燂紝鍫嗗灈鏈哄彿={}锛屽伐浣滃彿={}锛岀洰鏍囦綅={}锛屼换鍔℃暟鎹�={}",
- crnNo, wrkMast.getWrkNo(), wrkMast.getLocNo(), JSON.toJSON(moveCommand));
- return blockedCrnNoSet;
+ crnProtocol.getCrnNo(), wrkMast.getWrkNo(), wrkMast.getLocNo(), JSON.toJSON(moveCommand));
+ return true;
}
}
- return blockedCrnNoSet;
- }
- public Set<Integer> executeCrnMoveTaskAndGetBlockedCrnNos() {
- return executeCrnMoveTask();
+ return false;
}
public void submitCrnIoTasks(long minIntervalMs) {
@@ -1020,7 +975,6 @@
}
public void submitCrnIoTasks(MainProcessLane lane, long minIntervalMs) {
- Set<Integer> blockedCrnNos = executeCrnMoveTaskAndGetBlockedCrnNos();
List<BasCrnp> basCrnps = basCrnpService.list(new QueryWrapper<>());
for (BasCrnp basCrnp : basCrnps) {
Integer crnNo = basCrnp == null ? null : basCrnp.getCrnNo();
@@ -1032,7 +986,7 @@
crnNo,
"crnIoExecute",
minIntervalMs,
- () -> crnIoExecute(basCrnp, blockedCrnNos)
+ () -> crnIoExecute(basCrnp)
);
}
}
@@ -1153,10 +1107,6 @@
}
if (crnProtocol.getBay() == targetBay) {
- return false;
- }
-
- if (crnProtocol.getLevel() == targetLev) {
return false;
}
--
Gitblit v1.9.1