From 45bd9159e53ca4f4b365a470634633397a8589b7 Mon Sep 17 00:00:00 2001
From: yeg <1347747024@qq.com>
Date: 星期二, 01 九月 2026 13:54:12 +0800
Subject: [PATCH] 按当前循环返回检测柜工步
---
ruoyi-device/src/main/java/com/ruoyi/device/bts/BtsDevelopmentSimulator.java | 23 +++++++++++++++++------
ruoyi-device/src/test/java/com/ruoyi/device/bts/BtsDevelopmentSimulatorRecordStepCycleTest.java | 7 +++++++
2 files changed, 24 insertions(+), 6 deletions(-)
diff --git a/ruoyi-device/src/main/java/com/ruoyi/device/bts/BtsDevelopmentSimulator.java b/ruoyi-device/src/main/java/com/ruoyi/device/bts/BtsDevelopmentSimulator.java
index 3ffb9d8..7e23e1b 100644
--- a/ruoyi-device/src/main/java/com/ruoyi/device/bts/BtsDevelopmentSimulator.java
+++ b/ruoyi-device/src/main/java/com/ruoyi/device/bts/BtsDevelopmentSimulator.java
@@ -434,15 +434,26 @@
DeviceState device = requireDevice(deviceId);
requireChannel(device, channelId);
BtsPlaybackState playback = playbackState(btsKey(device, channelId), Instant.now());
+ int requestedCycleNo = playback.cycleNo();
+ int currentCycleNo = requestedCycleNo;
+ List<BtsExcelFixture.FixtureRecord> currentCycleRecords = BtsExcelFixture.records().stream()
+ .filter(item -> item.cycleNo() == requestedCycleNo).toList();
+ if (currentCycleRecords.isEmpty())
+ {
+ int fallbackCycleNo = BtsExcelFixture.records().get(0).cycleNo();
+ currentCycleNo = fallbackCycleNo;
+ currentCycleRecords = BtsExcelFixture.records().stream()
+ .filter(item -> item.cycleNo() == fallbackCycleNo).toList();
+ }
java.util.Map<Integer, BtsExcelFixture.FixtureRecord> firstByStep = new java.util.LinkedHashMap<>();
- for (BtsExcelFixture.FixtureRecord item : BtsExcelFixture.records())
+ for (BtsExcelFixture.FixtureRecord item : currentCycleRecords)
firstByStep.putIfAbsent(item.stepNo(), item);
List<BtsTestPlanRow> rows = new ArrayList<>();
for (BtsExcelFixture.FixtureRecord first : firstByStep.values())
{
- List<BtsExcelFixture.FixtureRecord> sameCycle = BtsExcelFixture.records().stream()
- .filter(item -> item.cycleNo() == first.cycleNo() && item.stepNo() == first.stepNo()).toList();
+ List<BtsExcelFixture.FixtureRecord> sameCycle = currentCycleRecords.stream()
+ .filter(item -> item.stepNo() == first.stepNo()).toList();
BtsExcelFixture.FixtureRecord last = sameCycle.get(sameCycle.size() - 1);
// step 号在每个循环内重复,跨循环时必须按当前循环的工步位置判断,不能把上一循环的同号工步当成当前状态。
String status = playback.naturallyFinished() ? "已完成"
@@ -454,11 +465,11 @@
}
int firstStepNo = firstByStep.values().stream().findFirst().map(BtsExcelFixture.FixtureRecord::stepNo).orElse(0);
rows.add(new BtsTestPlanRow("CYCLE", firstStepNo, "循环", 0d, null,
- playback.naturallyFinished() ? "已完成" : "待执行", BtsExcelFixture.cycleCount(),
- (long) BtsExcelFixture.recordCount()));
+ playback.naturallyFinished() ? "已完成" : "进行中", currentCycleNo,
+ (long) currentCycleRecords.size()));
rows.add(new BtsTestPlanRow("END", 0, "结束", 0d, null,
playback.naturallyFinished() ? "已完成" : "待执行", null, (long) BtsExcelFixture.recordCount()));
- return new BtsTestSnapshot(playback.cycleNo(), playback.stepNo(), BtsExcelFixture.cycleCount(), rows);
+ return new BtsTestSnapshot(currentCycleNo, playback.stepNo(), BtsExcelFixture.cycleCount(), rows);
}
/** 返回采集器最新实时快照;快照与分页历史保持不同读取路径。 */
diff --git a/ruoyi-device/src/test/java/com/ruoyi/device/bts/BtsDevelopmentSimulatorRecordStepCycleTest.java b/ruoyi-device/src/test/java/com/ruoyi/device/bts/BtsDevelopmentSimulatorRecordStepCycleTest.java
index dcc3877..9b24a0d 100644
--- a/ruoyi-device/src/test/java/com/ruoyi/device/bts/BtsDevelopmentSimulatorRecordStepCycleTest.java
+++ b/ruoyi-device/src/test/java/com/ruoyi/device/bts/BtsDevelopmentSimulatorRecordStepCycleTest.java
@@ -61,8 +61,15 @@
simulator.updateChannel(1, 1, true, DeviceWorkStatus.WORKING);
simulator.nextBtsCycle(1, 1);
var snapshot = simulator.btsTest(1, 1);
+ var expectedSteps = BtsExcelFixture.recordsForCycle(2).stream()
+ .map(BtsExcelFixture.FixtureRecord::stepNo).distinct().toList();
+ var actualSteps = snapshot.rows().stream().filter(row -> "STEP".equals(row.rowType()))
+ .map(BtsDevelopmentSimulator.BtsTestPlanRow::stepNo).toList();
+ assertEquals(expectedSteps, actualSteps);
assertTrue(snapshot.rows().stream().anyMatch(row -> "STEP".equals(row.rowType()) && "进行中".equals(row.executionStatus())));
assertTrue(snapshot.rows().stream().anyMatch(row -> "STEP".equals(row.rowType()) && "待执行".equals(row.executionStatus())));
+ var cycleRow = snapshot.rows().stream().filter(row -> "CYCLE".equals(row.rowType())).findFirst().orElseThrow();
+ assertEquals(2, cycleRow.cycleCount());
}
}
--
Gitblit v1.7.1