From 0fcd0642efdff8d4e0584fa991aaea2178bc932b Mon Sep 17 00:00:00 2001
From: yeg <1347747024@qq.com>
Date: 星期二, 01 九月 2026 22:48:35 +0800
Subject: [PATCH] 测试控制台持续更新

---
 ruoyi-system/src/main/java/com/ruoyi/system/mapper/TTestMapper.java |  108 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 108 insertions(+), 0 deletions(-)

diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/TTestMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/TTestMapper.java
index 2dd1aeb..25139a7 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/TTestMapper.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/TTestMapper.java
@@ -14,7 +14,13 @@
 import com.ruoyi.system.domain.TTestCollectorSource;
 import com.ruoyi.system.domain.TTestCollectorExceptionInterval;
 import com.ruoyi.system.domain.TTestReceptionInterval;
+import com.ruoyi.system.domain.TTestLogicStepMapping;
+import com.ruoyi.system.domain.TTestBackfillCursor;
+import com.ruoyi.system.domain.TTestIntegrityIssue;
 import com.ruoyi.system.domain.TDetectionChannel;
+import com.ruoyi.system.domain.TTestDataRevisionAction;
+import com.ruoyi.system.domain.TTestConsoleImportRecord;
+import com.ruoyi.system.domain.TTestDataOverride;
 import com.ruoyi.system.domain.vo.TestBatteryOptionVo;
 import com.ruoyi.system.domain.vo.TestChannelOptionVo;
 import com.ruoyi.system.domain.vo.TestCollectorOptionVo;
@@ -52,13 +58,22 @@
     List<TTestWarningThreshold> selectTestThresholds(Long testId);
     /** 按来源和起始边界顺序返回测试接收区间。 */
     List<TTestReceptionInterval> selectTestReceptionIntervals(Long testId);
+    /** 查询当前正在接收的测试,供接收调度绑定测试事实。 */
+    List<Long> selectReceivingTestIds();
+    List<java.util.Map<String, Object>> selectPersistedRecords(@org.apache.ibatis.annotations.Param("testId") Long testId);
+    List<java.util.Map<String, Object>> selectPersistedSteps(@org.apache.ibatis.annotations.Param("testId") Long testId);
+    List<java.util.Map<String, Object>> selectPersistedCycles(@org.apache.ibatis.annotations.Param("testId") Long testId);
     List<TTestResult> selectTestResults(TTestResult result);
+    String selectLogicStepMappingsJson(Long testId);
+    int updateLogicStepMappings(@Param("testId") Long testId, @Param("mappingsJson") String mappingsJson,
+            @Param("updateBy") String updateBy, @Param("updateTime") Date updateTime);
     int countTestTypeEnabled(Long testTypeId);
     int countUserEnabled(Long userId);
     int countBatteryInEnabledGroup(@Param("groupId") Long groupId, @Param("batteryNo") String batteryNo);
     int countRegisteredChannel(Long channelId);
     int countCollectorEnabled(Long collectorId);
     Integer selectCollectorChannelCount(Long collectorId);
+    String selectCollectorCode(Long collectorId);
     List<TestUserOptionVo> selectEnabledUserOptions();
     List<TestTypeOptionVo> selectEnabledTestTypeOptions();
     List<TestBatteryOptionVo> selectEnabledBatteryOptions();
@@ -111,4 +126,97 @@
     int closeCollectorExceptionInterval(@Param("intervalId") Long intervalId,
             @Param("recoveredAtUtc") Date recoveredAtUtc, @Param("missingToUtc") Date missingToUtc);
     List<TTestCollectorExceptionInterval> selectCollectorExceptionIntervals(Long testId);
+
+    /** 查询需要自然结束或继续补采的测试。 */
+    List<TTest> selectTestsForNaturalEnd();
+    List<TTest> selectTestsForBackfill();
+    /** 按稳定来源身份锁定补采游标,避免应用重启重复推进。 */
+    TTestBackfillCursor selectBackfillCursorForUpdate(@Param("testId") Long testId,
+            @Param("bindingId") Long bindingId, @Param("sourceType") String sourceType,
+            @Param("sourceId") Long sourceId, @Param("sourceChannelCode") String sourceChannelCode);
+    int insertBackfillCursor(TTestBackfillCursor cursor);
+    int updateBackfillCursor(TTestBackfillCursor cursor);
+    int updateTestBackfillStarted(@Param("testId") Long testId, @Param("updatedAtUtc") Date updatedAtUtc);
+    int updateTestBackfillWaiting(@Param("testId") Long testId, @Param("updatedAtUtc") Date updatedAtUtc,
+            @Param("error") String error);
+    int updateTestBackfillCompleted(@Param("testId") Long testId, @Param("updatedAtUtc") Date updatedAtUtc);
+    int updateTestCompleted(@Param("testId") Long testId, @Param("updatedAtUtc") Date updatedAtUtc);
+    int updateTestNaturallyEnded(@Param("testId") Long testId, @Param("endedAtUtc") Date endedAtUtc);
+    String selectSampleContentHash(@Param("channelId") Long channelId, @Param("btsTestId") String btsTestId,
+            @Param("sequenceId") Long sequenceId);
+    /** 按测试事实查询通道序号,避免补采重复写入已即时接收的采样。 */
+    String selectTestSampleContentHash(@Param("testId") Long testId, @Param("channelId") Long channelId,
+            @Param("sequenceId") Long sequenceId);
+    int insertBtsSample(@Param("testId") Long testId, @Param("bindingId") Long bindingId,
+            @Param("channelId") Long channelId, @Param("intervalId") Long intervalId,
+            @Param("btsTestId") String btsTestId, @Param("sequenceId") Long sequenceId,
+            @Param("deviceTimeUtc") Date deviceTimeUtc, @Param("deviceTimeRaw") String deviceTimeRaw,
+            @Param("receivedAtUtc") Date receivedAtUtc, @Param("cycleNo") Integer cycleNo,
+            @Param("stepNo") Integer stepNo, @Param("stepType") String stepType, @Param("stepName") String stepName,
+            @Param("testTimeMs") Long testTimeMs, @Param("voltageV") java.math.BigDecimal voltageV,
+            @Param("currentA") java.math.BigDecimal currentA, @Param("capacityAh") java.math.BigDecimal capacityAh,
+            @Param("energyWh") java.math.BigDecimal energyWh, @Param("contentSha256") byte[] contentSha256);
+    int insertBtsMeasurement(@Param("sampleId") Long sampleId, @Param("metricCode") String metricCode,
+            @Param("metricValue") java.math.BigDecimal metricValue, @Param("unit") String unit,
+            @Param("sourceType") String sourceType);
+    Long selectBtsSampleId(@Param("channelId") Long channelId, @Param("btsTestId") String btsTestId,
+            @Param("sequenceId") Long sequenceId);
+    int insertCollectorSample(@Param("testId") Long testId, @Param("bindingId") Long bindingId,
+            @Param("intervalId") Long intervalId,
+            @Param("collectorId") Long collectorId, @Param("channelCode") String channelCode,
+            @Param("sequenceId") Long sequenceId, @Param("deviceTimeUtc") Date deviceTimeUtc,
+            @Param("deviceTimeRaw") String deviceTimeRaw, @Param("receivedAtUtc") Date receivedAtUtc,
+            @Param("metricCode") String metricCode, @Param("metricValue") java.math.BigDecimal metricValue,
+            @Param("unit") String unit, @Param("contentSha256") byte[] contentSha256);
+    Long selectCollectorSampleId(@Param("collectorId") Long collectorId, @Param("channelCode") String channelCode,
+            @Param("sequenceId") Long sequenceId, @Param("metricCode") String metricCode);
+    String selectCollectorSampleContentHash(@Param("collectorId") Long collectorId,
+            @Param("channelCode") String channelCode, @Param("sequenceId") Long sequenceId,
+            @Param("metricCode") String metricCode);
+    int insertBackfillConflict(@Param("testId") Long testId, @Param("channelId") Long channelId,
+            @Param("detail") String detail);
+    List<TTestIntegrityIssue> selectIntegrityIssues(Long testId);
+    List<TTestIntegrityIssue> selectTestExceptionFacts(Long testId);
+    List<Long> selectBtsSequencesByInterval(Long intervalId);
+    List<Long> selectCollectorSequencesByInterval(Long intervalId);
+    TTestIntegrityIssue selectOpenIntegrityIssue(@Param("intervalId") Long intervalId,
+            @Param("sourceType") String sourceType, @Param("sourceId") Long sourceId,
+            @Param("sourceChannelCode") String sourceChannelCode, @Param("missingFrom") Long missingFrom,
+            @Param("missingTo") Long missingTo);
+    List<TTestIntegrityIssue> selectOpenIntegrityIssues(@Param("intervalId") Long intervalId,
+            @Param("sourceType") String sourceType, @Param("sourceId") Long sourceId,
+            @Param("sourceChannelCode") String sourceChannelCode);
+    int insertIntegrityIssue(TTestIntegrityIssue issue);
+    int touchIntegrityIssue(@Param("issueId") Long issueId, @Param("retryCount") Integer retryCount,
+            @Param("detail") String detail, @Param("detectedAtUtc") Date detectedAtUtc);
+    int rewindBackfillCursor(@Param("testId") Long testId, @Param("bindingId") Long bindingId,
+            @Param("sourceType") String sourceType, @Param("sourceId") Long sourceId,
+            @Param("sourceChannelCode") String sourceChannelCode, @Param("nextPosition") Long nextPosition);
+    int resolveIntegrityIssues(@Param("testId") Long testId, @Param("intervalId") Long intervalId,
+            @Param("sourceType") String sourceType, @Param("sourceId") Long sourceId,
+            @Param("sourceChannelCode") String sourceChannelCode, @Param("resolvedAtUtc") Date resolvedAtUtc);
+    int resolveIntegrityIssue(@Param("issueId") Long issueId, @Param("resolvedAtUtc") Date resolvedAtUtc);
+    int countOpenIntegrityIssues(Long testId);
+    int countOpenExceptions(Long testId);
+
+    int insertDataRevisionAction(TTestDataRevisionAction action);
+    List<TTestDataRevisionAction> selectDataRevisionActions(TTestDataRevisionAction query);
+    TTestDataRevisionAction selectDataRevisionActionById(Long actionId);
+    int upsertDataOverride(TTestDataOverride override);
+    List<TTestDataOverride> selectDataOverrides(@Param("testId") Long testId,
+            @Param("dataType") String dataType);
+    int deleteBtsSamplesByIds(@Param("testId") Long testId, @Param("sampleIds") List<Long> sampleIds);
+    int deleteBtsMeasurementsBySampleIds(@Param("sampleIds") List<Long> sampleIds);
+    int deleteCollectorSamplesByIds(@Param("testId") Long testId, @Param("sampleIds") List<Long> sampleIds);
+    Long selectBtsSampleIdByDeviceChannelSequence(@Param("testId") Long testId,
+            @Param("deviceId") Long deviceId, @Param("channelNo") Long channelNo,
+            @Param("sequenceId") Long sequenceId);
+    List<Long> selectBtsSampleIdsByDeviceChannelStep(@Param("testId") Long testId,
+            @Param("deviceId") Long deviceId, @Param("channelNo") Long channelNo,
+            @Param("cycleNo") Integer cycleNo, @Param("stepNo") Integer stepNo);
+    List<Long> selectBtsSampleIdsByDeviceChannelCycle(@Param("testId") Long testId,
+            @Param("deviceId") Long deviceId, @Param("channelNo") Long channelNo,
+            @Param("cycleNo") Integer cycleNo);
+    int insertConsoleImportRecord(TTestConsoleImportRecord record);
+    int countTestBatteryNo(@Param("testId") Long testId, @Param("batteryNo") String batteryNo);
 }

--
Gitblit v1.7.1