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

---
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/TTestController.java |  117 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 117 insertions(+), 0 deletions(-)

diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/TTestController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/TTestController.java
index c1cd2e5..5594c72 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/TTestController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/TTestController.java
@@ -20,7 +20,12 @@
 import com.ruoyi.common.enums.BusinessType;
 import com.ruoyi.system.domain.TTest;
 import com.ruoyi.system.domain.TTestResult;
+import com.ruoyi.system.domain.TTestLogicStepMapping;
+import com.ruoyi.system.domain.TTestDataRevisionAction;
+import com.ruoyi.system.domain.TTestDataOverride;
 import com.ruoyi.system.service.ITTestService;
+import com.ruoyi.system.service.ITestConsoleDataService;
+import com.ruoyi.system.service.ITestDataQueryService;
 
 /** 测试管理 Controller。 */
 @RestController
@@ -29,6 +34,12 @@
 {
     @Autowired
     private ITTestService testService;
+
+    @Autowired
+    private ITestConsoleDataService consoleDataService;
+
+    @Autowired
+    private ITestDataQueryService testDataQueryService;
 
     @PreAuthorize("@ss.hasAnyPermi('system:test:add,system:test:edit')")
     @GetMapping("/options")
@@ -95,6 +106,111 @@
         return success(testService.selectTestById(testId));
     }
 
+    /** 独立暂停接收动作;停止该测试数据请求,不向设备发送控制命令。 */
+    @PreAuthorize("@ss.hasPermi('system:test:pause')")
+    @Log(title = "测试数据接收", businessType = BusinessType.UPDATE)
+    @PostMapping("/{testId}/reception/pause")
+    public AjaxResult pauseReception(@PathVariable Long testId)
+    {
+        testService.pauseReception(testId, getUserId(), getUsername());
+        return success(testService.selectTestById(testId));
+    }
+
+    /** 独立继续接收动作;恢复该测试数据请求,不向设备发送控制命令。 */
+    @PreAuthorize("@ss.hasPermi('system:test:resume')")
+    @Log(title = "测试数据接收", businessType = BusinessType.UPDATE)
+    @PostMapping("/{testId}/reception/resume")
+    public AjaxResult resumeReception(@PathVariable Long testId)
+    {
+        testService.resumeReception(testId, getUserId(), getUsername());
+        return success(testService.selectTestById(testId));
+    }
+
+    /** 独立停止测试动作;进入不可恢复终态且不向设备发送控制命令。 */
+    @PreAuthorize("@ss.hasPermi('system:test:stop')")
+    @Log(title = "停止测试", businessType = BusinessType.UPDATE)
+    @PostMapping("/{testId}/stop")
+    public AjaxResult stopTest(@PathVariable Long testId)
+    {
+        testService.stopTest(testId, getUserId(), getUsername());
+        return success(testService.selectTestById(testId));
+    }
+
+    /** 人工结束接收动作别名;与停止测试共用原子关闭区间和释放租约事务。 */
+    @PreAuthorize("@ss.hasPermi('system:test:stop')")
+    @Log(title = "人工结束接收", businessType = BusinessType.UPDATE)
+    @PostMapping("/{testId}/reception/end")
+    public AjaxResult endReception(@PathVariable Long testId)
+    {
+        testService.stopTest(testId, getUserId(), getUsername());
+        return success(testService.selectTestById(testId));
+    }
+
+    /** 保存当前测试的逻辑工步合并规则,不改写检测柜原始工步。 */
+    @PreAuthorize("@ss.hasPermi('system:test:edit')")
+    @Log(title = "测试工步设置", businessType = BusinessType.UPDATE)
+    @PutMapping("/{testId}/logic-step-mappings")
+    public AjaxResult saveLogicStepMappings(@PathVariable Long testId,
+            @RequestBody List<TTestLogicStepMapping> mappings)
+    {
+        testService.saveLogicStepMappings(testId, mappings, getUserId(), getUsername());
+        return success(testService.selectTestById(testId));
+    }
+
+    /** 返回当前测试某类数据的人工覆盖和删除状态,供刷新后恢复展示。 */
+    @PreAuthorize("@ss.hasPermi('system:test:query')")
+    @GetMapping("/{testId}/console-data/{dataType}/overrides")
+    public AjaxResult dataOverrides(@PathVariable Long testId, @PathVariable String dataType)
+    {
+        return success(consoleDataService.selectOverrides(testId, dataType));
+    }
+
+    /** 只查询已归属并持久化到当前测试的检测柜 record。 */
+    @PreAuthorize("@ss.hasPermi('system:test:query')")
+    @GetMapping("/{testId}/data/records")
+    public AjaxResult persistedRecords(@PathVariable Long testId)
+    {
+        return success(testDataQueryService.records(testId));
+    }
+
+    /** 只查询当前测试持久化采样汇总出的工步事实。 */
+    @PreAuthorize("@ss.hasPermi('system:test:query')")
+    @GetMapping("/{testId}/data/steps")
+    public AjaxResult persistedSteps(@PathVariable Long testId)
+    {
+        return success(testDataQueryService.steps(testId));
+    }
+
+    /** 只查询当前测试持久化采样汇总出的循环事实。 */
+    @PreAuthorize("@ss.hasPermi('system:test:query')")
+    @GetMapping("/{testId}/data/cycles")
+    public AjaxResult persistedCycles(@PathVariable Long testId)
+    {
+        return success(testDataQueryService.cycles(testId));
+    }
+
+    /** 一次提交编辑、导入或删除;服务端只追加一条修订行为。 */
+    @PreAuthorize("@ss.hasPermi('system:test:edit')")
+    @Log(title = "测试控制台数据修订", businessType = BusinessType.UPDATE)
+    @PostMapping("/{testId}/console-data/actions")
+    public AjaxResult dataAction(@PathVariable Long testId, @RequestBody ConsoleDataActionRequest request)
+    {
+        if (request == null) return error("数据操作不能为空");
+        TTestDataRevisionAction action = new TTestDataRevisionAction();
+        action.setTestId(testId); action.setDataType(request.dataType()); action.setOperationType(request.operationType());
+        action.setScopeSummary(request.scopeSummary()); action.setIdentitySummary(request.identitySummary());
+        action.setChangesSummary(request.changesSummary()); action.setReason(request.reason());
+        action.setOperatorId(getUserId()); action.setOperatorName(getUsername());
+        Long actionId = consoleDataService.submitAction(action,
+                request.overrides() == null ? java.util.Collections.emptyList() : request.overrides(),
+                request.btsSampleIds(), request.collectorSampleIds());
+        return success().put("actionId", actionId);
+    }
+
+    public record ConsoleDataActionRequest(String dataType, String operationType, String scopeSummary,
+            String identitySummary, String changesSummary, String reason, List<TTestDataOverride> overrides,
+            List<Long> btsSampleIds, List<Long> collectorSampleIds) { }
+
     @PreAuthorize("@ss.hasPermi('system:test:remove')")
     @Log(title = "测试管理", businessType = BusinessType.DELETE)
     @DeleteMapping("/{testIds}")
@@ -111,4 +227,5 @@
         startPage();
         return getDataTable(testService.selectTestResults(result));
     }
+
 }

--
Gitblit v1.7.1