From d61c013599a1a4e09cadfe80cdf872f263737c9c Mon Sep 17 00:00:00 2001
From: yeg <1347747024@qq.com>
Date: 星期二, 01 九月 2026 13:19:16 +0800
Subject: [PATCH] 修正检测柜测试方案实时事实
---
ruoyi-device/src/main/java/com/ruoyi/device/bts/BtsDevelopmentSimulator.java | 40 ++++++++++++++++++++++++++++++++++++++++
1 files changed, 40 insertions(+), 0 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 ac3b00e..87641ff 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
@@ -428,6 +428,40 @@
}).toList();
}
+ /** 返回检测柜测试方案事实;方案行来自 Excel 夹具,当前状态来自该通道播放状态。 */
+ public synchronized BtsTestSnapshot btsTest(int deviceId, int channelId)
+ {
+ DeviceState device = requireDevice(deviceId);
+ requireChannel(device, channelId);
+ BtsPlaybackState playback = playbackState(btsKey(device, channelId), Instant.now());
+ java.util.Map<Integer, BtsExcelFixture.FixtureRecord> firstByStep = new java.util.LinkedHashMap<>();
+ for (BtsExcelFixture.FixtureRecord item : BtsExcelFixture.records())
+ 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();
+ BtsExcelFixture.FixtureRecord last = sameCycle.get(sameCycle.size() - 1);
+ String status = playback.naturallyFinished() || playback.cycleNo() > first.cycleNo()
+ || (playback.cycleNo() == first.cycleNo() && playback.stepNo() > first.stepNo())
+ ? "已完成"
+ : playback.cycleNo() == first.cycleNo() && playback.stepNo() == first.stepNo()
+ ? "进行中" : "待执行";
+ rows.add(new BtsTestPlanRow("STEP", first.stepNo(), first.stepName(),
+ Math.max(0d, last.offsetSeconds() - first.offsetSeconds()), first.voltageV(), status,
+ null, null));
+ }
+ 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()));
+ rows.add(new BtsTestPlanRow("END", 0, "结束", 0d, null,
+ playback.naturallyFinished() ? "已完成" : "待执行", null, (long) BtsExcelFixture.recordCount()));
+ return new BtsTestSnapshot(playback.cycleNo(), playback.stepNo(), BtsExcelFixture.cycleCount(), rows);
+ }
+
/** 返回采集器最新实时快照;快照与分页历史保持不同读取路径。 */
public synchronized CollectorRealtimeSnapshot collectorRealtime(int collectorId)
{
@@ -856,6 +890,12 @@
double chargeCapacityAh, double dischargeCapacityAh, double chargeEnergyWh, double dischargeEnergyWh,
double efficiency) { }
+ public record BtsTestPlanRow(String rowType, int stepNo, String stepName, double durationSeconds,
+ Double voltageV, String executionStatus, Integer cycleCount, Long recordCount) { }
+
+ public record BtsTestSnapshot(int currentCycleNo, int currentStepNo, int plannedCycleCount,
+ List<BtsTestPlanRow> rows) { }
+
private static double efficiency(double chargeCapacityAh, double dischargeCapacityAh)
{
return chargeCapacityAh > 0d ? dischargeCapacityAh / chargeCapacityAh * 100d : 0d;
--
Gitblit v1.7.1