From d4e6820f6cc65ab6d7315abeff8360dbf5fd4a91 Mon Sep 17 00:00:00 2001
From: Junjie <fallin.jie@qq.com>
Date: 星期四, 19 三月 2026 16:32:08 +0800
Subject: [PATCH] #
---
src/main/java/com/zy/core/utils/StationOperateProcessUtils.java | 123 +++++++++++++++++++++++-----------------
1 files changed, 70 insertions(+), 53 deletions(-)
diff --git a/src/main/java/com/zy/core/utils/StationOperateProcessUtils.java b/src/main/java/com/zy/core/utils/StationOperateProcessUtils.java
index f31ab82..92201af 100644
--- a/src/main/java/com/zy/core/utils/StationOperateProcessUtils.java
+++ b/src/main/java/com/zy/core/utils/StationOperateProcessUtils.java
@@ -192,22 +192,12 @@
&& stationProtocol.isLoading()
&& stationProtocol.getTaskNo() == 0
) {
- Integer moveStaNo = wrkMast.getStaNo();
-
- if (!outOrderList.isEmpty()) {
- List<NavigateNode> nodes = navigateUtils.calcByStationId(stationProtocol.getStationId(), wrkMast.getStaNo());
- for (int i = nodes.size() - 1; i >= 0; i--) {
- NavigateNode node = nodes.get(i);
- JSONObject v = JSONObject.parseObject(node.getNodeValue());
- if (v != null) {
- Integer stationId = v.getInteger("stationId");
- if (outOrderList.contains(stationId)) {
- moveStaNo = stationId;
- break;
- }
- }
- }
- }
+ Integer moveStaNo = resolveDispatchOutOrderTarget(
+ stationProtocol.getStationId(),
+ wrkMast.getStaNo(),
+ outOrderList,
+ true
+ );
LoopHitResult loopHitResult = findPathLoopHit(limitConfig, stationProtocol.getStationId(), moveStaNo, loadGuardState);
@@ -532,12 +522,13 @@
public synchronized void checkStationOutOrder() {
List<BasDevp> basDevps = basDevpService.list(new QueryWrapper<BasDevp>());
for (BasDevp basDevp : basDevps) {
- StationThread stationThread = (StationThread) SlaveConnection.get(SlaveType.Devp, basDevp.getId());
+ StationThread stationThread = (StationThread) SlaveConnection.get(SlaveType.Devp, basDevp.getDevpNo());
if (stationThread == null) {
continue;
}
Map<Integer, StationProtocol> statusMap = stationThread.getStatusMap();
List<StationObjModel> orderList = basDevp.getOutOrderList$();
+ List<Integer> outOrderStationIds = basDevp.getOutOrderIntList();
for (StationObjModel stationObjModel : orderList) {
StationProtocol stationProtocol = statusMap.get(stationObjModel.getStationId());
if (stationProtocol == null) {
@@ -576,7 +567,7 @@
List<WrkMast> batchWrkList = wrkMastService.list(new QueryWrapper<WrkMast>()
.notIn("wrk_sts", WrkStsType.STATION_RUN_COMPLETE.sts, WrkStsType.COMPLETE_OUTBOUND.sts)
.eq("batch", wrkMast.getBatch())
- .orderBy(true, true, "batch")
+ .orderBy(true, true, "batch_seq")
);
if (batchWrkList.isEmpty()) {
continue;
@@ -612,26 +603,10 @@
MessageQueue.offer(SlaveType.Devp, stationObjModel.getDeviceNo(), new Task(2, command));
News.info("{}浠诲姟鐩存帴鍘荤洰鏍囩偣", wrkMast.getWrkNo());
} else if (commandType.equals("toCircle")) {
- Integer circleTarget = null;
- for (NavigateNode node : initPath) {
- JSONObject v = JSONObject.parseObject(node.getNodeValue());
- if (v != null) {
- Integer stationId = v.getInteger("stationId");
- try {
- List<NavigateNode> enableMovePath = navigateUtils.calcByStationId(stationProtocol.getStationId(), stationId);
- if (enableMovePath.isEmpty()) {
- continue;
- }
- } catch (Exception e) {
- continue;
- }
-
- circleTarget = stationId;
- break;
- }
- }
+ Integer circleTarget = resolveNextCircleOrderTarget(stationProtocol.getStationId(), outOrderStationIds);
if (circleTarget == null) {
+ News.taskInfo(wrkMast.getWrkNo(), "鏈壘鍒板彲鎵ц鐨勪笅涓�鎺掑簭妫�娴嬬偣锛屽綋鍓嶇珯鐐�={}", stationProtocol.getStationId());
continue;
}
@@ -652,7 +627,7 @@
public synchronized void watchCircleStation() {
List<BasDevp> basDevps = basDevpService.list(new QueryWrapper<BasDevp>());
for (BasDevp basDevp : basDevps) {
- StationThread stationThread = (StationThread) SlaveConnection.get(SlaveType.Devp, basDevp.getId());
+ StationThread stationThread = (StationThread) SlaveConnection.get(SlaveType.Devp, basDevp.getDevpNo());
if (stationThread == null) {
continue;
}
@@ -687,22 +662,12 @@
continue;
}
- Integer moveStaNo = wrkMast.getStaNo();
-
- if (!outOrderList.isEmpty()) {
- List<NavigateNode> nodes = navigateUtils.calcByStationId(stationProtocol.getStationId(), wrkMast.getStaNo());
- for (int i = nodes.size() - 1; i >= 0; i--) {
- NavigateNode node = nodes.get(i);
- JSONObject v = JSONObject.parseObject(node.getNodeValue());
- if (v != null) {
- Integer stationId = v.getInteger("stationId");
- if (outOrderList.contains(stationId)) {
- moveStaNo = stationId;
- break;
- }
- }
- }
- }
+ Integer moveStaNo = resolveDispatchOutOrderTarget(
+ stationProtocol.getStationId(),
+ wrkMast.getStaNo(),
+ outOrderList,
+ true
+ );
StationCommand command = stationThread.getCommand(StationCommandType.MOVE, wrkMast.getWrkNo(), stationProtocol.getStationId(), moveStaNo, 0);
if (command == null) {
@@ -724,6 +689,58 @@
return list;
}
+ private Integer resolveDispatchOutOrderTarget(Integer currentStationId,
+ Integer finalTargetStationId,
+ List<Integer> outOrderList,
+ boolean skipCurrentStation) {
+ if (finalTargetStationId == null) {
+ return null;
+ }
+ if (currentStationId == null || outOrderList == null || outOrderList.isEmpty()) {
+ return finalTargetStationId;
+ }
+
+ try {
+ List<NavigateNode> nodes = navigateUtils.calcByStationId(currentStationId, finalTargetStationId);
+ for (int i = nodes.size() - 1; i >= 0; i--) {
+ Integer stationId = getStationIdFromNode(nodes.get(i));
+ if (stationId == null) {
+ continue;
+ }
+ if (skipCurrentStation && currentStationId.equals(stationId)) {
+ continue;
+ }
+ if (outOrderList.contains(stationId)) {
+ return stationId;
+ }
+ }
+ } catch (Exception ignore) {}
+ return finalTargetStationId;
+ }
+
+ private Integer resolveNextCircleOrderTarget(Integer currentStationId, List<Integer> orderedOutStationList) {
+ if (currentStationId == null || orderedOutStationList == null || orderedOutStationList.size() <= 1) {
+ return null;
+ }
+
+ int startIndex = orderedOutStationList.indexOf(currentStationId);
+ int total = orderedOutStationList.size();
+ for (int offset = 1; offset < total; offset++) {
+ int candidateIndex = (startIndex + offset + total) % total;
+ Integer candidateStationId = orderedOutStationList.get(candidateIndex);
+ if (candidateStationId == null || currentStationId.equals(candidateStationId)) {
+ continue;
+ }
+ try {
+ List<NavigateNode> path = navigateUtils.calcByStationId(currentStationId, candidateStationId);
+ if (path != null && !path.isEmpty()) {
+ return candidateStationId;
+ }
+ } catch (Exception ignore) {}
+ }
+ return null;
+ }
+
public Integer getOutStationBatchSeq(List<NavigateNode> pathList, Integer searchStationId, String searchBatch) {
List<Integer> checkList = new ArrayList<>();
for (int i = pathList.size() - 1; i >= 0; i--) {
--
Gitblit v1.9.1