yeg
2026-09-03 8e13d5a26f6cb6f981b31799e43330f40c791192
停止后隐藏实时预警并补充完成态测试
2个文件已修改
41 ■■■■■ 已修改文件
ruoyi-admin/src/test/java/com/ruoyi/system/service/impl/TTestLiveServiceImplTest.java 38 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TTestLiveServiceImpl.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/test/java/com/ruoyi/system/service/impl/TTestLiveServiceImplTest.java
@@ -6,6 +6,8 @@
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import java.io.IOException;
@@ -25,6 +27,8 @@
import com.ruoyi.system.domain.TTest;
import com.ruoyi.system.domain.TTestBattery;
import com.ruoyi.system.domain.TTestChannelBinding;
import com.ruoyi.system.domain.TTestWarningException;
import com.ruoyi.system.mapper.TTestMapper;
import com.ruoyi.system.service.ITTestService;
import com.ruoyi.system.service.ITestLiveService.LiveState;
@@ -85,6 +89,28 @@
        assertTrue(state.exceptions().isEmpty());
    }
    @Test
    void completedTestShouldNotExposeOpenWarningInLiveAlarm()
    {
        Instant now = Instant.parse("2026-09-02T06:00:00Z");
        TTestMapper mapper = mock(TTestMapper.class);
        TTestWarningException warning = new TTestWarningException();
        warning.setExceptionId(1L);
        warning.setSourceType("COLLECTOR");
        warning.setMetricCode("TEMPERATURE");
        warning.setAbnormalValue(new BigDecimal("25.3"));
        warning.setUnit("℃");
        warning.setExceptionStatus("OPEN");
        when(mapper.selectWarningExceptions(10L, "OPEN")).thenReturn(List.of(warning));
        TTestLiveServiceImpl service = liveService(test("ENDED"), now, true, DeviceWorkStatus.STOPPED, mapper);
        LiveState state = service.current(10L);
        assertTrue(state.exceptions().isEmpty());
        verify(mapper, never()).selectWarningExceptions(10L, "OPEN");
    }
    private static TTest test(String receptionStatus)
    {
        TTest test = new TTest();
@@ -118,6 +144,12 @@
    private static TTestLiveServiceImpl liveService(TTest test, Instant now, boolean online,
            DeviceWorkStatus workStatus)
    {
        return liveService(test, now, online, workStatus, null);
    }
    private static TTestLiveServiceImpl liveService(TTest test, Instant now, boolean online,
            DeviceWorkStatus workStatus, TTestMapper mapper)
    {
        DeviceDiscoveryCandidateStore candidates = mock(DeviceDiscoveryCandidateStore.class);
        BtsDevelopmentSimulator simulator = mock(BtsDevelopmentSimulator.class);
        ITTestService tests = mock(ITTestService.class);
@@ -137,7 +169,7 @@
        var plan = new BtsDevelopmentSimulator.BtsTestSnapshot(1, 1, 1, List.of());
        when(simulator.btsTest(anyInt(), anyInt())).thenReturn(plan);
        when(simulator.btsTest(anyInt(), anyInt(), anyInt())).thenReturn(plan);
        return new CurrentLiveService(tests, candidates, simulator);
        return new CurrentLiveService(tests, candidates, simulator, mapper);
    }
    @Test
@@ -205,9 +237,9 @@
    private static final class CurrentLiveService extends TTestLiveServiceImpl
    {
        private CurrentLiveService(ITTestService tests, DeviceDiscoveryCandidateStore candidates,
                BtsDevelopmentSimulator simulator)
                BtsDevelopmentSimulator simulator, TTestMapper mapper)
        {
            super(tests, candidates, simulator);
            super(tests, candidates, simulator, mapper);
        }
    }
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TTestLiveServiceImpl.java
@@ -68,7 +68,8 @@
                    .map(source -> Map.<String, Object>of("sourceType", source.sourceType(), "sourceId", source.sourceId(),
                            "batteryNo", source.batteryNo(), "status", source.deviceStatus(), "message", "数据来源当前不可观测"))
                    .toList());
        if (mapper != null) {
        // 完成或暂停后只保留历史异常事实,实时控制台不再展示开放预警。
        if (receiving && mapper != null) {
            mapper.selectWarningExceptions(testId, "OPEN").forEach(item -> exceptions.add(Map.of(
                    "exceptionId", item.getExceptionId(), "sourceType", item.getSourceType(),
                    "metricCode", item.getMetricCode(), "value", item.getAbnormalValue(), "unit", item.getUnit(),