yeg
2026-09-29 b78295e8da96c3e5e76befeef9582ce5273dbb74
ruoyi-admin/src/test/java/com/battery/business/web/ConsoleWorkbookImportMysqlTest.java
@@ -12,6 +12,8 @@
import com.battery.business.mapper.TTestMapper;
import com.battery.business.service.ITestConsoleDataService;
import com.battery.business.service.impl.TestConsoleDataServiceImpl;
import com.battery.business.service.impl.TTestServiceImpl;
import com.battery.business.service.impl.TestDataQueryServiceImpl;
import org.apache.ibatis.datasource.unpooled.UnpooledDataSource;
import org.flywaydb.core.Flyway;
import org.junit.jupiter.api.Test;
@@ -67,6 +69,9 @@
                    @Override public String getUsername() { return "验收操作员"; }
                };
                ReflectionTestUtils.setField(controller, "consoleDataService", service);
                var tests = new TTestServiceImpl();
                ReflectionTestUtils.setField(tests, "testMapper", mapper);
                ReflectionTestUtils.setField(controller, "testDataQueryService", new TestDataQueryServiceImpl(mapper, tests));
                var sample = JSON.parseObject(Files.readString(Path.of(System.getenv("TICKET03_SAMPLE_JSON"))));
                Map<String, List<Map<String, Object>>> sheets = new LinkedHashMap<>();
                for (String type : List.of("REALTIME", "STEP", "CYCLE")) sheets.put(type, (List) sample.getJSONArray(type).toJavaList(Map.class));
@@ -83,16 +88,34 @@
                assertEquals(7605, mapper.selectPersistedFinalRealtimeRecords(1L).size());
                assertEquals(129, mapper.selectPersistedFinalStepRecords(1L).size());
                assertEquals(33, mapper.selectPersistedFinalCycleRecords(1L).size());
                // 通过正式查询入口验证真实 JDBC 时间类型,避免内存库时间类型掩盖接口偏差。
                var json = tools.jackson.databind.json.JsonMapper.builder().findAndAddModules().build();
                for (var result : List.of(controller.persistedRecords(1L), controller.persistedSteps(1L), controller.persistedCycles(1L)))
                {
                    var rows = json.readTree(json.writeValueAsString(result)).get("data");
                    for (var row : rows) for (String field : List.of("deviceTime", "recordedAt", "absoluteTime", "serverReceivedAt"))
                    {
                        var value = row.get(field);
                        if (value != null && !value.isNull()) assertTrue(value.isIntegralNumber(), field + ": " + value);
                    }
                }
                var firstRecord = json.readTree(json.writeValueAsString(controller.persistedRecords(1L))).get("data").get(7604);
                assertEquals(1683517331000L, firstRecord.get("deviceTime").longValue());
                var actions = service.selectActions(new TTestDataRevisionAction());
                assertEquals(1, actions.size());
                var revision = service.selectActionById(actions.get(0).getActionId());
                assertEquals(imported.get("actionId"), revision.getActionId());
                assertEquals("三 Sheet 共用原因", revision.getReason());
                var changes = JSON.parseArray(revision.getChangesSummary());
                assertEquals(7767, changes.size());
                assertEquals("REALTIME", changes.getJSONObject(0).getString("dataType"));
                assertEquals("STEP", changes.getJSONObject(7605).getString("dataType"));
                assertEquals("CYCLE", changes.getJSONObject(7734).getString("dataType"));
                assertEquals(3, actions.size());
                assertEquals(3, ((List<?>) imported.get("actionIds")).size());
                for (var item : actions) {
                    var revision = service.selectActionById(item.getActionId());
                    assertEquals("三 Sheet 共用原因", revision.getReason());
                    int expected = switch (revision.getDataType()) { case "REALTIME" -> 7605; case "STEP" -> 129; default -> 33; };
                    assertEquals((long) expected, revision.getAffectedRecordCount());
                    assertNull(revision.getIdentitySummary());
                    assertNull(revision.getChangesSummary());
                    assertNull(revision.getBeforeContentJson());
                    // 页面只返回各类摘要,数据库仍保留该类全部导入明细。
                    var changes = JSON.parseArray(jdbc.queryForObject("select cast(changes_summary as char) from t_test_data_revision_action where action_id=?", String.class, revision.getActionId()));
                    assertEquals(expected, changes.size());
                }
                for (String type : sheets.keySet()) {
                    var query = new TTestDataRevisionAction(); query.setTestId(1L); query.setDataType(type);
                    assertEquals(1, service.selectActions(query).size());
@@ -101,7 +124,7 @@
                assertEquals(0, retry.get("importedCount")); assertEquals(7767, retry.get("skippedCount")); assertNull(retry.get("actionId"));
                sheets.get("CYCLE").get(32).put("dischargeCapacity", 99);
                assertThrows(RuntimeException.class, () -> submit(controller, sheets));
                assertEquals(1, service.selectActions(new TTestDataRevisionAction()).size());
                assertEquals(3, service.selectActions(new TTestDataRevisionAction()).size());
                assertTrue(mapper.selectWarningExceptions(1L, null).isEmpty());
                assertEquals("COMPLETED", mapper.selectTestById(1L).getTestStatus());
                assertEquals("ENDED", mapper.selectTestById(1L).getReceptionStatus());