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