package com.mes.controller;
import com.mes.service.PlcAutoTestService;
import com.mes.service.PlcTestWriteService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
import java.util.*;
import java.util.concurrent.ConcurrentHashMap;
/**
* PLC测试任务控制器
* 提供PLC测试任务管理相关的API接口
*
* 实现前端Test.vue组件所需的所有API接口
*
* @author huang
* @date 2025/10/30
*/
@Slf4j
@RestController
@RequestMapping("/api/plc/test")
@Api(tags = "PLC测试任务管理")
public class PlcTestController {
@Resource
private PlcTestWriteService plcTestWriteService;
@Resource
private PlcAutoTestService plcAutoTestService;
// 模拟任务数据存储
private final Map> taskMap = new ConcurrentHashMap<>();
private final Map> moduleStatusMap = new ConcurrentHashMap<>();
/**
* 执行指定模块的测试任务
* 对应前端:submitTest
*/
@PostMapping("/execute/{module}")
@ApiOperation("执行指定模块的测试任务")
public Map executeTest(@ApiParam("模块名称") @PathVariable String module) {
log.info("执行测试任务,模块: {}", module);
Map result = new HashMap<>();
try {
// 模拟执行测试任务
boolean success = plcTestWriteService.simulatePlcRequest(module);
// 创建任务记录
String taskId = UUID.randomUUID().toString();
Map task = new HashMap<>();
task.put("id", taskId);
task.put("module", module);
task.put("status", success ? "running" : "failed");
task.put("createTime", new Date());
task.put("message", success ? "测试任务已启动" : "测试任务启动失败");
taskMap.put(taskId, task);
// 更新模块状态
updateModuleStatus(module, "running");
result.put("success", success);
result.put("data", taskId);
result.put("message", success ? "测试任务已启动" : "测试任务启动失败");
} catch (Exception e) {
log.error("执行测试任务异常,模块: {}", module, e);
result.put("success", false);
result.put("message", "执行测试任务异常: " + e.getMessage());
}
return result;
}
/**
* 获取指定模块的任务状态
* 对应前端:getTaskStatus
*/
@GetMapping("/status/{module}")
@ApiOperation("获取指定模块的任务状态")
public Map getTaskStatus(@ApiParam("模块名称") @PathVariable String module) {
log.info("获取任务状态,模块: {}", module);
Map result = new HashMap<>();
try {
// 查找该模块的最新任务
Optional>> latestTask =
taskMap.entrySet().stream()
.filter(entry -> module.equals(entry.getValue().get("module")))
.max(Map.Entry.comparingByKey());
if (latestTask.isPresent()) {
Map task = latestTask.get().getValue();
// 模拟任务状态变化
String status = (String) task.get("status");
if ("running".equals(status)) {
// 随机决定任务是否完成
if (Math.random() > 0.5) {
task.put("status", "success");
task.put("message", "测试任务执行成功");
updateModuleStatus(module, "idle");
}
}
result.put("success", true);
result.put("data", task);
} else {
result.put("success", false);
result.put("message", "未找到模块的任务记录");
}
} catch (Exception e) {
log.error("获取任务状态异常,模块: {}", module, e);
result.put("success", false);
result.put("message", "获取任务状态异常: " + e.getMessage());
}
return result;
}
/**
* 批量测试
* 对应前端:batchTest
*/
@PostMapping("/batch")
@ApiOperation("批量测试")
public Map batchTest(@ApiParam("批量测试请求") @RequestBody Map request) {
List modules = (List) request.get("modules");
log.info("执行批量测试,模块列表: {}", modules);
Map result = new HashMap<>();
List