From 6109deda4499cd7ff7d3c3dad185194ec5495196 Mon Sep 17 00:00:00 2001
From: Junjie <fallin.jie@qq.com>
Date: 星期四, 19 三月 2026 16:08:36 +0800
Subject: [PATCH] #
---
src/main/java/com/zy/core/utils/StationOperateProcessUtils.java | 117 +++++++++++++++++++++++++++++++++-------------------------
1 files changed, 67 insertions(+), 50 deletions(-)
diff --git a/src/main/java/com/zy/core/utils/StationOperateProcessUtils.java b/src/main/java/com/zy/core/utils/StationOperateProcessUtils.java
index 3e388d7..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);
@@ -538,6 +528,7 @@
}
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) {
@@ -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;
}
@@ -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