yeg
2026-09-02 74f55db1acd945f4860b2d0b4bae48e2b918b32b
ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/TTestController.java
@@ -20,8 +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.TTestReceptionInterval;
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
@@ -30,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")
@@ -96,7 +106,7 @@
        return success(testService.selectTestById(testId));
    }
    /** 独立暂停接收动作;只关闭系统接收区间,不向设备发送控制命令。 */
    /** 独立暂停接收动作;停止该测试数据请求,不向设备发送控制命令。 */
    @PreAuthorize("@ss.hasPermi('system:test:pause')")
    @Log(title = "测试数据接收", businessType = BusinessType.UPDATE)
    @PostMapping("/{testId}/reception/pause")
@@ -106,7 +116,7 @@
        return success(testService.selectTestById(testId));
    }
    /** 独立继续接收动作;从新的成功观测边界打开区间,不向设备发送控制命令。 */
    /** 独立继续接收动作;恢复该测试数据请求,不向设备发送控制命令。 */
    @PreAuthorize("@ss.hasPermi('system:test:resume')")
    @Log(title = "测试数据接收", businessType = BusinessType.UPDATE)
    @PostMapping("/{testId}/reception/resume")
@@ -116,14 +126,90 @@
        return success(testService.selectTestById(testId));
    }
    /** 返回测试各来源的接收区间、动作时间和实际采样边界。 */
    @PreAuthorize("@ss.hasPermi('system:test:query')")
    @GetMapping("/{testId}/reception/intervals")
    public AjaxResult receptionIntervals(@PathVariable Long testId)
    /** 独立停止测试动作;进入不可恢复终态且不向设备发送控制命令。 */
    @PreAuthorize("@ss.hasPermi('system:test:stop')")
    @Log(title = "停止测试", businessType = BusinessType.UPDATE)
    @PostMapping("/{testId}/stop")
    public AjaxResult stopTest(@PathVariable Long testId)
    {
        List<TTestReceptionInterval> intervals = testService.selectReceptionIntervals(testId);
        return success(intervals);
        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)
@@ -141,4 +227,5 @@
        startPage();
        return getDataTable(testService.selectTestResults(result));
    }
}