From 41aeff86351d1dd94fe2408175f96475f227c1b9 Mon Sep 17 00:00:00 2001
From: Junjie <fallin.jie@qq.com>
Date: 星期四, 02 四月 2026 17:15:27 +0800
Subject: [PATCH] #执行优化
---
/dev/null | 248 -----------------------------------
src/main/java/com/zy/core/utils/StationOperateProcessUtils.java | 31 +--
src/main/java/com/zy/common/utils/NavigateUtils.java | 4
src/test/java/com/zy/core/utils/StationOperateProcessUtilsReroutePipelineTest.java | 1
src/main/java/com/zy/core/plugin/FakeProcess.java | 4
src/main/java/com/zy/core/utils/station/StationRegularDispatchProcessor.java | 85 ++++-------
6 files changed, 49 insertions(+), 324 deletions(-)
diff --git a/src/main/java/com/zy/common/utils/NavigateUtils.java b/src/main/java/com/zy/common/utils/NavigateUtils.java
index eeb8ad0..211f27c 100644
--- a/src/main/java/com/zy/common/utils/NavigateUtils.java
+++ b/src/main/java/com/zy/common/utils/NavigateUtils.java
@@ -724,7 +724,7 @@
StationPathResolvedPolicy resolvedPolicy) {
BasStation startStation = basStationService.getById(startStationId);
if (startStation == null) {
- throw new CoolException("鏈壘鍒拌 璧风偣 瀵瑰簲鐨勭珯鐐规暟鎹�");
+ throw new CoolException("鏈壘鍒拌 " + startStationId + "璧风偣 瀵瑰簲鐨勭珯鐐规暟鎹�");
}
NavigateSolution navigateSolution = new NavigateSolution();
@@ -732,7 +732,7 @@
NavigateNode startNode = navigateSolution.findStationNavigateNode(stationMap, startStationId);
NavigateNode endNode = navigateSolution.findStationNavigateNode(stationMap, endStationId);
if (startNode == null || endNode == null) {
- throw new CoolException("鏈壘鍒拌 璧风偣 鎴� 缁堢偣 瀵瑰簲鐨勮妭鐐�");
+ throw new CoolException("鏈壘鍒拌 " + startStationId + "璧风偣 鎴� " + endStationId + "缁堢偣 瀵瑰簲鐨勮妭鐐�");
}
DirectStationPathContext context = new DirectStationPathContext();
diff --git a/src/main/java/com/zy/core/plugin/FakeProcess.java b/src/main/java/com/zy/core/plugin/FakeProcess.java
index 962bacd..c28b89f 100644
--- a/src/main/java/com/zy/core/plugin/FakeProcess.java
+++ b/src/main/java/com/zy/core/plugin/FakeProcess.java
@@ -111,6 +111,10 @@
stationOperateProcessUtils.submitInboundStationArrivalTasks(MAIN_DISPATCH_INTERVAL_MS);
// 杈撻�佺嚎鎵ц鍫嗗灈鏈哄嚭搴撳悗鐨勭珯鍙版祦杞�
stationOperateProcessUtils.submitCrnStationOutTasks(MainProcessLane.FAKE_STATION_OUT, MAIN_DISPATCH_INTERVAL_MS);
+ // 妫�娴嬪嚭搴撲换鍔℃槸鍚﹀凡缁忓埌杈剧洰鏍囩珯鍙�
+ stationOperateProcessUtils.submitStationOutExecuteFinishTasks(MAIN_DISPATCH_INTERVAL_MS);
+ // 妫�娴嬬珯鍙拌繍琛屽畬鎴愬悗鐨勪换鍔¤浆瀹屾垚
+ stationOperateProcessUtils.submitCheckTaskToCompleteTasks(MAIN_DISPATCH_INTERVAL_MS);
// 妫�娴嬪苟澶勭悊鍑哄簱鎺掑簭
stationOperateProcessUtils.submitCheckStationOutOrderTasks(MainProcessLane.FAKE_STATION_OUT_ORDER, MAIN_DISPATCH_INTERVAL_MS);
// 鐩戞帶杈撻�佺嚎缁曞湀绔欑偣
diff --git a/src/main/java/com/zy/core/utils/StationOperateProcessUtils.java b/src/main/java/com/zy/core/utils/StationOperateProcessUtils.java
index 2662e7b..247d6ee 100644
--- a/src/main/java/com/zy/core/utils/StationOperateProcessUtils.java
+++ b/src/main/java/com/zy/core/utils/StationOperateProcessUtils.java
@@ -77,14 +77,9 @@
stationOutboundDispatchProcessor.dualCrnStationOutExecute();
}
- //妫�娴嬭緭閫佺珯鐐瑰嚭搴撲换鍔℃墽琛屽畬鎴�
- public synchronized void stationOutExecuteFinish() {
- stationRegularDispatchProcessor.stationOutExecuteFinish();
- }
-
// 妫�娴嬪崟涓嚭搴撲换鍔℃槸鍚﹀埌杈剧洰鏍囩珯鍙�
- public void stationOutExecuteFinish(WrkMast wrkMast) {
- stationRegularDispatchProcessor.stationOutExecuteFinish(wrkMast);
+ public void stationOutExecuteFinish(StationObjModel stationObjModel) {
+ stationRegularDispatchProcessor.stationOutExecuteFinish(stationObjModel);
}
// 妫�娴嬪崟涓叆搴撲换鍔℃槸鍚﹀埌杈剧洰鏍囩珯鍙�
@@ -248,17 +243,17 @@
}
public void submitStationOutExecuteFinishTasks(MainProcessLane lane, long minIntervalMs) {
- List<WrkMast> wrkMasts = wrkMastService.list(new QueryWrapper<WrkMast>()
- .eq("wrk_sts", WrkStsType.STATION_RUN.sts)
- .isNotNull("sta_no"));
- for (WrkMast wrkMast : wrkMasts) {
- mainProcessTaskSubmitter.submitKeyedSerialTask(
- lane,
- wrkMast.getStaNo(),
- "stationOutExecuteFinish",
- minIntervalMs,
- () -> stationOutExecuteFinish(wrkMast)
- );
+ List<BasDevp> basDevps = basDevpService.list(new QueryWrapper<>());
+ for (BasDevp basDevp : basDevps) {
+ for (StationObjModel stationObjModel : basDevp.getOutStationList$()) {
+ mainProcessTaskSubmitter.submitKeyedSerialTask(
+ lane,
+ stationObjModel.getStationId(),
+ "stationOutExecuteFinish",
+ minIntervalMs,
+ () -> stationOutExecuteFinish(stationObjModel)
+ );
+ }
}
}
diff --git a/src/main/java/com/zy/core/utils/station/StationRegularDispatchProcessor.java b/src/main/java/com/zy/core/utils/station/StationRegularDispatchProcessor.java
index e33d401..62db459 100644
--- a/src/main/java/com/zy/core/utils/station/StationRegularDispatchProcessor.java
+++ b/src/main/java/com/zy/core/utils/station/StationRegularDispatchProcessor.java
@@ -77,52 +77,46 @@
}
}
- public void stationOutExecuteFinish() {
+ public void stationOutExecuteFinish(StationObjModel stationObjModel) {
try {
- List<WrkMast> wrkMasts = wrkMastService.list(new QueryWrapper<WrkMast>().eq("wrk_sts", WrkStsType.STATION_RUN.sts));
- for (WrkMast wrkMast : wrkMasts) {
- stationOutExecuteFinish(wrkMast);
+ if (stationObjModel == null) {
+ return;
}
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- public void stationOutExecuteFinish(WrkMast wrkMast) {
- try {
+ StationThread stationThread = (StationThread) SlaveConnection.get(SlaveType.Devp, stationObjModel.getDeviceNo());
+ if (stationThread == null) {
+ return;
+ }
+ Map<Integer, StationProtocol> statusMap = stationThread.getStatusMap();
+ StationProtocol stationProtocol = statusMap == null ? null : statusMap.get(stationObjModel.getStationId());
+ if (stationProtocol == null) {
+ return;
+ }
+ if (stationProtocol.getTaskNo() <= 0) {
+ return;
+ }
+ WrkMast wrkMast = wrkMastService.selectByWorkNo(stationProtocol.getTaskNo());
if (wrkMast == null) {
return;
}
- Integer wrkNo = wrkMast.getWrkNo();
- Integer targetStaNo = wrkMast.getStaNo();
- if (wrkNo == null || targetStaNo == null) {
+
+ if (!wrkMast.getWrkSts().equals(WrkStsType.STATION_RUN.sts)) {
return;
}
+ Integer wrkNo = wrkMast.getWrkNo();
- boolean complete = false;
- Integer targetDeviceNo = null;
- StationThread stationThread = null;
- BasStation basStation = basStationService.getOne(new QueryWrapper<BasStation>().eq("station_id", targetStaNo));
- if (basStation != null) {
- targetDeviceNo = basStation.getDeviceNo();
- stationThread = (StationThread) SlaveConnection.get(SlaveType.Devp, basStation.getDeviceNo());
- if (stationThread != null) {
- Map<Integer, StationProtocol> statusMap = stationThread.getStatusMap();
- StationProtocol stationProtocol = statusMap == null ? null : statusMap.get(basStation.getStationId());
- boolean arrived = stationProtocol != null && wrkNo.equals(stationProtocol.getTaskNo());
- if (arrived || stationThread.hasRecentArrival(basStation.getStationId(), wrkNo)) {
- complete = true;
- if (!arrived) {
- News.info("杈撻�佺珯鐐瑰嚭搴撳埌杈惧垽瀹氫娇鐢ㄦ渶杩戝埌绔欒ˉ鍋匡紝宸ヤ綔鍙�={}锛岀洰鏍囩珯={}", wrkNo, targetStaNo);
- }
- }
- }
+ if (stationMoveCoordinator != null) {
+ stationMoveCoordinator.finishSession(wrkMast.getWrkNo());
}
-
- if (complete) {
- attemptClearTaskPath(stationThread, wrkNo);
- completeStationRunTask(wrkMast, targetDeviceNo);
- }
+ Date now = new Date();
+ wrkMast.setWrkSts(WrkStsType.STATION_RUN_COMPLETE.sts);
+ wrkMast.setIoTime(now);
+ wrkMast.setModiTime(now);
+ wrkMastService.updateById(wrkMast);
+ wrkAnalysisService.markOutboundStationComplete(wrkMast, now);
+ notifyUtils.notify(String.valueOf(SlaveType.Devp), stationObjModel.getDeviceNo(), String.valueOf(wrkMast.getWrkNo()), wrkMast.getWmsWrkNo(), NotifyMsgType.STATION_OUT_TASK_RUN_COMPLETE, null);
+ redisUtil.set(RedisKeyType.STATION_OUT_EXECUTE_COMPLETE_LIMIT.key + wrkMast.getWrkNo(), "lock", 60);
+ attemptClearTaskPath(stationThread, wrkNo);
} catch (Exception e) {
e.printStackTrace();
}
@@ -193,25 +187,6 @@
} catch (Exception e) {
News.error("杈撻�佺珯鐐逛换鍔¤繍琛屽畬鎴愬悗娓呯悊娈嬬暀璺緞寮傚父锛屽伐浣滃彿={}", taskNo, e);
}
- }
-
- private void completeStationRunTask(WrkMast wrkMast, Integer deviceNo) {
- if (wrkMast == null || wrkMast.getWrkNo() == null) {
- return;
- }
- if (stationMoveCoordinator != null) {
- stationMoveCoordinator.finishSession(wrkMast.getWrkNo());
- }
- Date now = new Date();
- wrkMast.setWrkSts(WrkStsType.STATION_RUN_COMPLETE.sts);
- wrkMast.setIoTime(now);
- wrkMast.setModiTime(now);
- wrkMastService.updateById(wrkMast);
- wrkAnalysisService.markOutboundStationComplete(wrkMast, now);
- if (deviceNo != null) {
- notifyUtils.notify(String.valueOf(SlaveType.Devp), deviceNo, String.valueOf(wrkMast.getWrkNo()), wrkMast.getWmsWrkNo(), NotifyMsgType.STATION_OUT_TASK_RUN_COMPLETE, null);
- }
- redisUtil.set(RedisKeyType.STATION_OUT_EXECUTE_COMPLETE_LIMIT.key + wrkMast.getWrkNo(), "lock", 60);
}
private boolean offerDevpCommandWithDedup(Integer deviceNo, StationCommand command, String scene) {
diff --git a/src/test/java/com/zy/asrs/task/WrkAnalysisStationArrivalScannerTest.java b/src/test/java/com/zy/asrs/task/WrkAnalysisStationArrivalScannerTest.java
deleted file mode 100644
index 95f7e18..0000000
--- a/src/test/java/com/zy/asrs/task/WrkAnalysisStationArrivalScannerTest.java
+++ /dev/null
@@ -1,248 +0,0 @@
-package com.zy.asrs.task;
-
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import com.zy.asrs.entity.BasStation;
-import com.zy.asrs.entity.WrkMast;
-import com.zy.asrs.service.BasStationService;
-import com.zy.asrs.service.WrkAnalysisService;
-import com.zy.asrs.service.WrkMastService;
-import com.zy.core.cache.SlaveConnection;
-import com.zy.core.enums.SlaveType;
-import com.zy.core.enums.StationCommandType;
-import com.zy.core.enums.WrkStsType;
-import com.zy.core.model.CommandResponse;
-import com.zy.core.model.command.StationCommand;
-import com.zy.core.model.protocol.StationProtocol;
-import com.zy.core.thread.StationThread;
-import com.zy.core.utils.StationOperateProcessUtils;
-import org.junit.jupiter.api.Test;
-
-import java.util.Collections;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.never;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.when;
-
-class WrkAnalysisStationArrivalScannerTest {
-
- @Test
- void scanInboundStationArrival_completesTaskWhenRecentArrivalWasObserved() {
- WrkMastService wrkMastService = mock(WrkMastService.class);
- BasStationService basStationService = mock(BasStationService.class);
- WrkAnalysisService wrkAnalysisService = mock(WrkAnalysisService.class);
- StationOperateProcessUtils stationOperateProcessUtils = mock(StationOperateProcessUtils.class);
-
- WrkAnalysisStationArrivalScanner scanner = new WrkAnalysisStationArrivalScanner(
- wrkMastService,
- basStationService,
- wrkAnalysisService,
- stationOperateProcessUtils
- );
-
- WrkMast wrkMast = inboundWrkMast(1001, 12);
- BasStation basStation = station(12, 3);
-
- when(wrkMastService.list(any(QueryWrapper.class))).thenReturn(List.of(wrkMast));
- when(basStationService.getOne(any())).thenReturn(basStation);
- when(wrkAnalysisService.completeInboundStationRun(any(WrkMast.class), any(Date.class))).thenReturn(true);
-
- ArrivalAwareStationThread stationThread = new ArrivalAwareStationThread(true);
- StationProtocol stationProtocol = new StationProtocol();
- stationProtocol.setStationId(12);
- stationProtocol.setTaskNo(0);
- stationProtocol.setLoading(false);
- stationThread.putStatus(stationProtocol);
-
- SlaveConnection.put(SlaveType.Devp, 3, stationThread);
- try {
- scanner.scanInboundStationArrival();
- } finally {
- SlaveConnection.remove(SlaveType.Devp, 3);
- }
-
- verify(wrkAnalysisService).completeInboundStationRun(any(WrkMast.class), any(Date.class));
- }
-
- @Test
- void scanInboundStationArrival_completesTaskWhenProtocolMatchesCurrentTask() {
- WrkMastService wrkMastService = mock(WrkMastService.class);
- BasStationService basStationService = mock(BasStationService.class);
- WrkAnalysisService wrkAnalysisService = mock(WrkAnalysisService.class);
- StationOperateProcessUtils stationOperateProcessUtils = mock(StationOperateProcessUtils.class);
-
- WrkAnalysisStationArrivalScanner scanner = new WrkAnalysisStationArrivalScanner(
- wrkMastService,
- basStationService,
- wrkAnalysisService,
- stationOperateProcessUtils
- );
-
- WrkMast wrkMast = inboundWrkMast(1002, 15);
- BasStation basStation = station(15, 5);
-
- when(wrkMastService.list(any(QueryWrapper.class))).thenReturn(List.of(wrkMast));
- when(basStationService.getOne(any())).thenReturn(basStation);
- when(wrkAnalysisService.completeInboundStationRun(any(WrkMast.class), any(Date.class))).thenReturn(true);
-
- ArrivalAwareStationThread stationThread = new ArrivalAwareStationThread(false);
- StationProtocol stationProtocol = new StationProtocol();
- stationProtocol.setStationId(15);
- stationProtocol.setTaskNo(1002);
- stationProtocol.setLoading(true);
- stationThread.putStatus(stationProtocol);
-
- SlaveConnection.put(SlaveType.Devp, 5, stationThread);
- try {
- scanner.scanInboundStationArrival();
- } finally {
- SlaveConnection.remove(SlaveType.Devp, 5);
- }
-
- verify(wrkAnalysisService).completeInboundStationRun(any(WrkMast.class), any(Date.class));
- }
-
- @Test
- void scanInboundStationArrival_skipsWhenArrivalWasNotObserved() {
- WrkMastService wrkMastService = mock(WrkMastService.class);
- BasStationService basStationService = mock(BasStationService.class);
- WrkAnalysisService wrkAnalysisService = mock(WrkAnalysisService.class);
- StationOperateProcessUtils stationOperateProcessUtils = mock(StationOperateProcessUtils.class);
-
- WrkAnalysisStationArrivalScanner scanner = new WrkAnalysisStationArrivalScanner(
- wrkMastService,
- basStationService,
- wrkAnalysisService,
- stationOperateProcessUtils
- );
-
- WrkMast wrkMast = inboundWrkMast(1003, 18);
- BasStation basStation = station(18, 8);
-
- when(wrkMastService.list(any(QueryWrapper.class))).thenReturn(List.of(wrkMast));
- when(basStationService.getOne(any())).thenReturn(basStation);
-
- ArrivalAwareStationThread stationThread = new ArrivalAwareStationThread(false);
- StationProtocol stationProtocol = new StationProtocol();
- stationProtocol.setStationId(18);
- stationProtocol.setTaskNo(9999);
- stationProtocol.setLoading(true);
- stationThread.putStatus(stationProtocol);
-
- SlaveConnection.put(SlaveType.Devp, 8, stationThread);
- try {
- scanner.scanInboundStationArrival();
- } finally {
- SlaveConnection.remove(SlaveType.Devp, 8);
- }
-
- verify(wrkAnalysisService, never()).completeInboundStationRun(any(WrkMast.class), any(Date.class));
- }
-
- @Test
- void scanOutboundStationFlow_triggersStationOperateProcessSteps() {
- WrkMastService wrkMastService = mock(WrkMastService.class);
- BasStationService basStationService = mock(BasStationService.class);
- WrkAnalysisService wrkAnalysisService = mock(WrkAnalysisService.class);
- StationOperateProcessUtils stationOperateProcessUtils = mock(StationOperateProcessUtils.class);
-
- WrkAnalysisStationArrivalScanner scanner = new WrkAnalysisStationArrivalScanner(
- wrkMastService,
- basStationService,
- wrkAnalysisService,
- stationOperateProcessUtils
- );
-
- scanner.scanOutboundStationFlow();
-
- verify(stationOperateProcessUtils).stationOutExecuteFinish();
- verify(stationOperateProcessUtils).checkTaskToComplete();
- }
-
- private WrkMast inboundWrkMast(int wrkNo, int stationId) {
- WrkMast wrkMast = new WrkMast();
- wrkMast.setWrkNo(wrkNo);
- wrkMast.setIoType(1);
- wrkMast.setWrkSts(WrkStsType.INBOUND_STATION_RUN.sts);
- wrkMast.setStaNo(stationId);
- return wrkMast;
- }
-
- private BasStation station(int stationId, int deviceNo) {
- BasStation basStation = new BasStation();
- basStation.setStationId(stationId);
- basStation.setDeviceNo(deviceNo);
- return basStation;
- }
-
- private static class ArrivalAwareStationThread implements StationThread {
-
- private final boolean recentArrival;
- private final Map<Integer, StationProtocol> statusMap = new HashMap<>();
-
- private ArrivalAwareStationThread(boolean recentArrival) {
- this.recentArrival = recentArrival;
- }
-
- private void putStatus(StationProtocol stationProtocol) {
- statusMap.put(stationProtocol.getStationId(), stationProtocol);
- }
-
- @Override
- public List<StationProtocol> getStatus() {
- return Collections.emptyList();
- }
-
- @Override
- public Map<Integer, StationProtocol> getStatusMap() {
- return statusMap;
- }
-
- public boolean hasRecentArrival(Integer stationId, Integer taskNo) {
- return recentArrival;
- }
-
- @Override
- public StationCommand getCommand(StationCommandType commandType, Integer taskNo, Integer stationId, Integer targetStationId, Integer palletSize) {
- return null;
- }
-
- @Override
- public boolean clearPath(Integer taskNo) {
- return false;
- }
-
- @Override
- public CommandResponse sendCommand(StationCommand command) {
- return null;
- }
-
- @Override
- public CommandResponse sendOriginCommand(String address, short[] data) {
- return null;
- }
-
- @Override
- public byte[] readOriginCommand(String address, int length) {
- return new byte[0];
- }
-
- @Override
- public void run() {
- }
-
- @Override
- public boolean connect() {
- return true;
- }
-
- @Override
- public void close() {
- }
- }
-}
diff --git a/src/test/java/com/zy/core/utils/StationOperateProcessUtilsReroutePipelineTest.java b/src/test/java/com/zy/core/utils/StationOperateProcessUtilsReroutePipelineTest.java
index cdc99b8..f5350e2 100644
--- a/src/test/java/com/zy/core/utils/StationOperateProcessUtilsReroutePipelineTest.java
+++ b/src/test/java/com/zy/core/utils/StationOperateProcessUtilsReroutePipelineTest.java
@@ -891,7 +891,6 @@
SlaveConnection.put(SlaveType.Devp, 1, stationThread);
try {
- utils.stationOutExecuteFinish();
verify(stationThread, times(1)).clearPath(10335);
verify(coordinator, times(1)).finishSession(10335);
--
Gitblit v1.9.1