package com.ruoyi.web.controller.system; import java.util.List; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PutMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import com.ruoyi.common.annotation.Log; import com.ruoyi.common.core.controller.BaseController; import com.ruoyi.common.core.domain.AjaxResult; import com.ruoyi.common.core.page.TableDataInfo; 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.TTestConsoleDetail; 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 @RequestMapping("/system/test") public class TTestController extends BaseController { @Autowired private ITTestService testService; @Autowired private ITestConsoleDataService consoleDataService; @Autowired private ITestDataQueryService testDataQueryService; @PreAuthorize("@ss.hasAnyPermi('system:test:add,system:test:edit')") @GetMapping("/options") public AjaxResult options() { return success(testService.selectConfigurationOptions()); } @PreAuthorize("@ss.hasPermi('system:test:list')") @GetMapping("/list") public TableDataInfo list(TTest test) { startPage(); List list = testService.selectTestList(test); return getDataTable(list); } @PreAuthorize("@ss.hasPermi('system:test:query')") @GetMapping("/{testId}") public AjaxResult getInfo(@PathVariable Long testId) { return success(testService.selectTestById(testId)); } @PreAuthorize("@ss.hasPermi('system:test:add')") @Log(title = "测试管理", businessType = BusinessType.INSERT) @PostMapping public AjaxResult add(@Validated @RequestBody TTest test) { test.setOperatorId(getUserId()); test.setCreatorId(getUserId()); test.setCreateBy(getUsername()); Long testId = testService.createTest(test); return success(testService.selectTestById(testId)); } @PreAuthorize("@ss.hasPermi('system:test:edit')") @Log(title = "测试管理", businessType = BusinessType.UPDATE) @PutMapping public AjaxResult edit(@Validated @RequestBody TTest test) { test.setOperatorId(getUserId()); test.setUpdateBy(getUsername()); testService.updateTest(test); return success(testService.selectTestById(test.getTestId())); } @PreAuthorize("@ss.hasPermi('system:test:start')") @Log(title = "测试管理", businessType = BusinessType.UPDATE) @PutMapping("/start") public AjaxResult start(@RequestParam Long testId) { testService.startReception(testId, getUserId(), getUsername()); return success(testService.selectTestById(testId)); } /** 独立的开始接收动作;只改变系统数据归属,不向设备发送控制命令。 */ @PreAuthorize("@ss.hasPermi('system:test:start')") @Log(title = "测试数据接收", businessType = BusinessType.UPDATE) @PostMapping("/{testId}/reception/start") public AjaxResult startReception(@PathVariable Long testId) { testService.startReception(testId, getUserId(), getUsername()); 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 mappings) { testService.saveLogicStepMappings(testId, mappings, getUserId(), getUsername()); return success(testService.selectTestById(testId)); } /** 保存工步图表测试详情当前最新版,不参与测试配置、统计或审计。 */ @PreAuthorize("@ss.hasPermi('system:test:edit')") @PutMapping("/{testId}/console-detail") public AjaxResult saveConsoleDetail(@PathVariable Long testId, @RequestBody TTestConsoleDetail detail) { testService.saveConsoleDetail(testId, detail, 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)); } /** 查询当前测试成功接收的检测柜与采集器实时观测。 */ @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 overrides, List btsSampleIds, List collectorSampleIds) { } @PreAuthorize("@ss.hasPermi('system:test:remove')") @Log(title = "测试管理", businessType = BusinessType.DELETE) @DeleteMapping("/{testIds}") public AjaxResult remove(@PathVariable Long[] testIds) { return toAjax(testService.deleteTestByIds(testIds, getUserId(), getUsername())); } @PreAuthorize("@ss.hasPermi('system:test:query')") @GetMapping("/{testId}/results") public TableDataInfo results(@PathVariable Long testId, TTestResult result) { result.setTestId(testId); startPage(); return getDataTable(testService.selectTestResults(result)); } }