From c1742f5798ee8b0bad260b19760c3c43df4dd9d0 Mon Sep 17 00:00:00 2001
From: yeg <1347747024@qq.com>
Date: 星期三, 09 九月 2026 11:06:11 +0800
Subject: [PATCH] 修正工步中值电压的保存查询与修订

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

diff --git a/ruoyi-admin/src/test/java/com/battery/business/web/ConsoleSingleSheetImportDatabaseTest.java b/ruoyi-admin/src/test/java/com/battery/business/web/ConsoleSingleSheetImportDatabaseTest.java
index a82596b..fd609aa 100644
--- a/ruoyi-admin/src/test/java/com/battery/business/web/ConsoleSingleSheetImportDatabaseTest.java
+++ b/ruoyi-admin/src/test/java/com/battery/business/web/ConsoleSingleSheetImportDatabaseTest.java
@@ -106,6 +106,37 @@
         assertTrue(service.selectActions(new TTestDataRevisionAction()).isEmpty());
     }
 
+    @Test void stepMedianVoltagesPersistAndRemainIndependentOfLegacyPeaks()
+    {
+        var imported = row();
+        imported.put("chargeMedianVoltage", 0);
+        imported.put("dischargeMedianVoltage", 1.1709);
+        submit("STEP", List.of(imported));
+        var stored = mapper.selectImportDataRecords(1L, "STEP").get(0);
+        var extension = JSON.parseObject(stored.get("extension_measurements_json").toString());
+        assertNotNull(extension.getBigDecimal("chargeMedianVoltage"));
+        assertEquals(0, extension.getBigDecimal("chargeMedianVoltage").signum());
+        assertEquals(new java.math.BigDecimal("1.1709"), extension.getBigDecimal("dischargeMedianVoltage"));
+        assertEquals(1, submit("STEP", List.of(imported)).get("skippedCount"));
+
+        // 旧峰谷值仍是独立事实;不能在查询时作为缺失中值的回退来源。
+        var queryMapper = org.mockito.Mockito.mock(TTestMapper.class);
+        var query = new com.battery.business.service.impl.TestDataQueryServiceImpl(queryMapper,
+                org.mockito.Mockito.mock(com.battery.business.service.ITTestService.class));
+        var current = new LinkedHashMap<String, Object>(Map.of("extensionMeasurementsJson", extension.toJSONString()));
+        var legacy = new LinkedHashMap<String, Object>(Map.of("extensionMeasurementsJson", "{\"chargePeakVoltage\":1.8,\"dischargeValleyVoltage\":0.8}"));
+        org.mockito.Mockito.when(queryMapper.selectPersistedFinalStepRecords(1L)).thenReturn(List.of(current, legacy));
+        var result = query.steps(1L);
+        assertEquals(new java.math.BigDecimal("1.1709"), result.get(0).get("dischargeMedianVoltage"));
+        assertEquals(0.0, ((Number) result.get(0).get("chargeMedianVoltage")).doubleValue());
+        assertNull(result.get(1).get("chargeMedianVoltage"));
+        assertNull(result.get(1).get("dischargeMedianVoltage"));
+
+        imported.put("dischargeMedianVoltage", 1.2);
+        assertTrue(assertThrows(RuntimeException.class, () -> submit("STEP", List.of(imported))).getMessage().contains("冲突拒绝"));
+        assertEquals(1, service.selectActions(new TTestDataRevisionAction()).size());
+    }
+
     @Test void workbookImportsThreeSheetsWithOneRevisionAndSkipsRetry()
     {
         var sheets = Map.of("REALTIME", List.of(row(), row()), "STEP", List.of(row()), "CYCLE", List.of(row()));
@@ -238,6 +269,18 @@
             assertEquals(count, submit(type, rows).get("importedCount"));
             assertEquals(count, mapper.selectImportDataRecords(1L, type).size());
             assertEquals(count, submit(type, rows).get("skippedCount"));
+            if ("STEP".equals(type))
+            {
+                var persisted = mapper.selectImportDataRecords(1L, type).stream().collect(java.util.stream.Collectors.toMap(
+                        record -> record.get("source_record_id").toString(), record -> record));
+                for (var input : rows)
+                {
+                    var stored = JSON.parseObject(persisted.get(input.get("recordNo").toString()).get("extension_measurements_json").toString());
+                    for (String field : List.of("chargeMedianVoltage", "dischargeMedianVoltage"))
+                        if (input.get(field) == null) assertNull(stored.get(field));
+                        else assertEquals(0, new java.math.BigDecimal(input.get(field).toString()).compareTo(stored.getBigDecimal(field)), field);
+                }
+            }
         }
         assertEquals(3, service.selectActions(new TTestDataRevisionAction()).size());
     }

--
Gitblit v1.7.1