From f522c9ffa487e3710d691e8b98df8c4f0cfafd43 Mon Sep 17 00:00:00 2001
From: yeg <1347747024@qq.com>
Date: 星期六, 05 九月 2026 20:07:26 +0800
Subject: [PATCH] 支持模拟器逐通道参数与工步方案配置

---
 ruoyi-admin/src/test/java/com/battery/business/web/device/BtsDevelopmentSimulatorControllerTest.java |   56 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 56 insertions(+), 0 deletions(-)

diff --git a/ruoyi-admin/src/test/java/com/battery/business/web/device/BtsDevelopmentSimulatorControllerTest.java b/ruoyi-admin/src/test/java/com/battery/business/web/device/BtsDevelopmentSimulatorControllerTest.java
index 91d10a9..aa11c90 100644
--- a/ruoyi-admin/src/test/java/com/battery/business/web/device/BtsDevelopmentSimulatorControllerTest.java
+++ b/ruoyi-admin/src/test/java/com/battery/business/web/device/BtsDevelopmentSimulatorControllerTest.java
@@ -30,6 +30,62 @@
 class BtsDevelopmentSimulatorControllerTest
 {
     @Test
+    void invalidChannelConfigurationDoesNotReplaceSavedValues() throws Exception
+    {
+        try (var simulator = new BtsDevelopmentSimulator(0)) {
+            var mvc = org.springframework.test.web.servlet.setup.MockMvcBuilders.standaloneSetup(controller(simulator)).build();
+            var before = simulator.snapshot().devices().get(0).channels().get(0).configuration();
+            String valid = com.alibaba.fastjson2.JSON.toJSONString(before);
+            for (String property : List.of("stepNo", "cycleNo", "currentA", "steps")) {
+                var invalid = com.alibaba.fastjson2.JSON.parseObject(valid);
+                invalid.put(property, switch (property) {
+                    case "stepNo" -> 2;
+                    case "cycleNo" -> 0;
+                    case "steps" -> List.of();
+                    default -> null;
+                });
+                mvc.perform(org.springframework.test.web.servlet.request.MockMvcRequestBuilders.put(
+                        "/dev/bts-simulator/devices/1/channels/1/configuration")
+                        .contentType("application/json").content(invalid.toJSONString()))
+                        .andExpect(org.springframework.test.web.servlet.result.MockMvcResultMatchers.status().isBadRequest());
+                assertEquals(before, simulator.snapshot().devices().get(0).channels().get(0).configuration());
+            }
+        }
+    }
+
+    @Test
+    void channelConfigurationChangesMeasurementsAndPlanOnlyForSelectedChannel() throws Exception
+    {
+        try (var simulator = new BtsDevelopmentSimulator(0)) {
+            var mvc = org.springframework.test.web.servlet.setup.MockMvcBuilders.standaloneSetup(controller(simulator)).build();
+            mvc.perform(org.springframework.test.web.servlet.request.MockMvcRequestBuilders.put(
+                    "/dev/bts-simulator/devices/1/channels/1/configuration")
+                    .contentType("application/json").content("""
+                    {"currentA":-2.5,"voltageV":4.125,"capacityAh":8.2,"energyWh":33.8,
+                     "cycleNo":2,"stepNo":2,"plannedCycleCount":3,"totalTimeSeconds":120,"relativeTimeSeconds":30,
+                     "steps":[{"name":"充电","stepType":"cc","durationSeconds":60,"voltageV":4.2},
+                              {"name":"放电","stepType":"dc","durationSeconds":90,"voltageV":3.0}]}
+                    """))
+                    .andExpect(org.springframework.test.web.servlet.result.MockMvcResultMatchers.status().isOk());
+            var identity = simulator.discoverChannels().get(0).identity();
+            var actual = simulator.latestCabinet(identity);
+            assertEquals(-2.5, actual.currentA());
+            assertEquals(4.125, actual.voltageV());
+            assertEquals(8.2, actual.capacityAh());
+            assertEquals(33.8, actual.energyWh());
+            assertEquals(2, actual.cycleNo());
+            assertEquals(2, actual.stepNo());
+            assertEquals("dc", actual.stepType());
+            assertEquals("放电", actual.stepName());
+            assertEquals(2, simulator.testPlan(identity).rows().size());
+            assertEquals(3, simulator.testPlan(identity).plannedCycleCount());
+            var other = simulator.discoverChannels().get(1).identity();
+            assertEquals(1, simulator.testPlan(other).rows().size());
+            assertEquals(1, simulator.latestCabinet(other).stepNo());
+        }
+    }
+
+    @Test
     void restChangesSoftwareAndCollectorChannelFactsAndRetiresPlayback() throws Exception
     {
         try (BtsDevelopmentSimulator simulator = new BtsDevelopmentSimulator(0))

--
Gitblit v1.7.1