package com.ruoyi.web; import com.ruoyi.common.annotation.Anonymous; import com.ruoyi.common.annotation.Log; import com.ruoyi.common.core.controller.BaseController; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.page.TableDataInfo; import com.ruoyi.common.enums.BusinessType; import com.ruoyi.common.utils.bean.BeanUtils; import com.ruoyi.domain.Task; import com.ruoyi.domain.TaskSampleRelation; import com.ruoyi.domain.TaskUserRelation; import com.ruoyi.service.TaskSampleRelationService; import com.ruoyi.service.TaskService; import com.ruoyi.service.TaskUserRelationService; import com.ruoyi.web.request.*; import com.ruoyi.web.response.*; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.apache.poi.ss.usermodel.*; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.apache.skywalking.apm.toolkit.trace.Tag; import org.apache.skywalking.apm.toolkit.trace.Tags; import org.apache.skywalking.apm.toolkit.trace.Trace; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import java.io.IOException; import java.util.*; @Api(tags = "总任务") @RestController @RequestMapping("/task") public class TaskController extends BaseController { @Autowired private TaskService taskService; @Autowired private TaskUserRelationService taskUserRelationService; @Autowired private TaskSampleRelationService taskSampleRelationService; @ApiOperation("查询任务列表") @Trace @Tags({@Tag(key = "param", value = "arg[0]"), @Tag(key = "result", value = "returnedObj")}) @RequestMapping(method = RequestMethod.POST, value = "/findList") public TableDataInfo<Task> findList(@Validated @RequestBody TaskListRequest request) { startPage(request); return getDataTable(taskService.findList(request)); } @ApiOperation("创建任务") @Trace @Tags({@Tag(key = "param", value = "arg[0]"), @Tag(key = "result", value = "returnedObj")}) @Log(title = "总任务", businessType = BusinessType.INSERT) @RequestMapping(method = RequestMethod.POST, value = "/add") public R<String> createTask(@Validated @RequestBody TaskCreateRequest request) { taskService.createTask(request); return R.ok(); } @ApiOperation("暂存任务") @Trace @Tags({@Tag(key = "param", value = "arg[0]"), @Tag(key = "result", value = "returnedObj")}) @Log(title = "总任务", businessType = BusinessType.INSERT) @RequestMapping(method = RequestMethod.POST, value = "/temporaryStorage") public R<String> temporaryStorage(@Validated @RequestBody TaskCreateRequest request) { taskService.temporaryStorageTask(request); return R.ok(); } @ApiOperation("查看暂存任务详情") @Trace @Tags({@Tag(key = "param", value = "arg[0]"), @Tag(key = "result", value = "returnedObj")}) @RequestMapping(method = RequestMethod.POST, value = "/getTemporaryStorage") public R<TaskGetInfoResponse> getTemporaryStorage() { TaskGetInfoResponse response = taskService.getByUserId(getUserId()); return R.ok(response); } @ApiOperation("查看任务详情") @Trace @Tags({@Tag(key = "param", value = "arg[0]"), @Tag(key = "result", value = "returnedObj")}) @RequestMapping(method = RequestMethod.POST, value = "/getById") public R<TaskGetInfoResponse> getInfo(@Validated @RequestBody TaskGetInfoRequest request) { TaskGetInfoResponse response = taskService.getInfo(request); return R.ok(response); } @ApiOperation("根据子任务id查看任务详情") @Trace @Tags({@Tag(key = "param", value = "arg[0]"), @Tag(key = "result", value = "returnedObj")}) @RequestMapping(method = RequestMethod.POST, value = "/getBySubtaskId") public R<TaskGetInfoResponse> getBySubtaskId(@Validated @RequestBody TaskSubGetInfoRequest request) { TaskGetInfoResponse response = taskService.getBySubtaskId(request); return R.ok(response); } @ApiOperation("用户发布的任务") @Trace @Tags({@Tag(key = "param", value = "arg[0]"), @Tag(key = "result", value = "returnedObj")}) @RequestMapping(method = RequestMethod.POST, value = "/findCreate") public TableDataInfo<TaskFindResponse> findCreate(@Validated @RequestBody TaskFindRequest request) { startPage(request); return getDataTable(taskService.findCreate(request,getUserId())); } @ApiOperation("查询处理中的任 务") @Trace @Tags({@Tag(key = "param", value = "arg[0]"), @Tag(key = "result", value = "returnedObj")}) @RequestMapping(method = RequestMethod.POST, value = "/findPending") public TableDataInfo<TaskFindResponse> findPending(@Validated @RequestBody TaskFindPendingRequest request) { startPage(request); return getDataTable(taskService.findPending(request,getUserId())); } @ApiOperation("查询已归档任务") @Trace @Tags({@Tag(key = "param", value = "arg[0]"), @Tag(key = "result", value = "returnedObj")}) @RequestMapping(method = RequestMethod.POST, value = "/findFinish") public TableDataInfo<Task> findFinish(@Validated @RequestBody TaskFindFinishRequest request) { startPage(request); return getDataTable(taskService.findFinish(request)); } @ApiOperation("查询已办任务") @Trace @Tags({@Tag(key = "param", value = "arg[0]"), @Tag(key = "result", value = "returnedObj")}) @RequestMapping(method = RequestMethod.POST, value = "/findUserFinish") public TableDataInfo<Task> findUserFinish(@Validated @RequestBody TaskFindFinishRequest request) { startPage(request); return getDataTable(taskService.findUserFinish(request,getUserId())); } @ApiOperation("编辑任务") @Trace @Tags({@Tag(key = "param", value = "arg[0]"), @Tag(key = "result", value = "returnedObj")}) @Log(title = "编辑任务", businessType = BusinessType.UPDATE) @RequestMapping(method = RequestMethod.POST, value = "/edit") public R<String> editTask(@Validated @RequestBody TaskEditRequest request) { taskService.editTask(request); return R.ok(); } @ApiOperation("编辑暂存任务") @Trace @Tags({@Tag(key = "param", value = "arg[0]"), @Tag(key = "result", value = "returnedObj")}) @Log(title = "编辑暂存任务", businessType = BusinessType.UPDATE) @RequestMapping(method = RequestMethod.POST, value = "/editTemporaryStorage") public R<String> editTemporaryStorage(@Validated @RequestBody TaskEditRequest request) { taskService.editTemporaryStorageTask(request); return R.ok(); } @ApiOperation("删除任务") @Trace @Tags({@Tag(key = "param", value = "arg[0]"), @Tag(key = "result", value = "returnedObj")}) @Log(title = "删除任务", businessType = BusinessType.DELETE) @RequestMapping(method = RequestMethod.POST, value = "/remove") public R<String> deleteTask(@Validated @RequestBody TaskDeleteRequest request) { taskService.deleteTask(request); return R.ok(); } @ApiOperation("开始任务") @Trace @Tags({@Tag(key = "param", value = "arg[0]"), @Tag(key = "result", value = "returnedObj")}) @Log(title = "开始任务", businessType = BusinessType.UPDATE) @RequestMapping(method = RequestMethod.POST, value = "/startTask") public R<String> startTask(@Validated @RequestBody TaskStartRequest request) { taskService.startTask(request); return R.ok(); } @ApiOperation("查看任务数据统计") @Trace @Tags({@Tag(key = "param", value = "arg[0]"), @Tag(key = "result", value = "returnedObj")}) @RequestMapping(method = RequestMethod.POST, value = "/dataStatistics") public R<DataStatisticsResponse> dataStatistics(@Validated @RequestBody TaskGetInfoRequest request) { DataStatisticsResponse response = taskService.dataStatistics(request); return R.ok(response); } /* * 开启车型实验任务时-上传文件 * */ @ApiOperation("开启车型实验任务时-上传文件") @Trace @Tags({@Tag(key = "param", value = "arg[0]"), @Tag(key = "result", value = "returnedObj")}) @PostMapping("/uploadExcel") public R<Map<String, Object>> uploadExcel(@RequestParam("file") MultipartFile file) throws IOException { // 确保文件类型是Excel if (!file.getOriginalFilename().endsWith(".xlsx") && !file.getOriginalFilename().endsWith(".xls")) { throw new IllegalArgumentException("Please upload an Excel file."); } // 解析Excel文件 Workbook workbook = WorkbookFactory.create(file.getInputStream()); Sheet sheet = workbook.getSheetAt(3); // 获取第4个工作表 Map<String, Object> result = new HashMap<>(); List<Map<String, String>> duplicatedUseCaseList = new ArrayList<>(); // 获取第一行并查找“用例编号”所在的列 Row headerRow = sheet.getRow(0); int targetColumnIndex = -1; if (headerRow != null) { for (int i = 0; i < headerRow.getLastCellNum(); i++) { Cell headerCell = headerRow.getCell(i); if (headerCell != null && "用例编号".equals(headerCell.toString().trim())) { targetColumnIndex = i; // 找到“用例编号”所在的列索引 break; } } } if (targetColumnIndex == -1) { workbook.close(); return R.fail("没找到测试用例列"); } // 设置 "name" 为 "用例编号" result.put("name", "用例编号"); // 遍历行,提取“用例编号”列的数据并构造新格式 for (int i = 1; i <= sheet.getLastRowNum(); i++) { Row row = sheet.getRow(i); if (row != null) { Cell cell = row.getCell(targetColumnIndex); // 获取“用例编号”列的单元格 if (cell != null && !cell.toString().trim().isEmpty()) { Map<String, String> useCaseMap = new HashMap<>(); useCaseMap.put("useCaseDisplayOrCustomizedID", cell.toString().trim()); // 将用例编号作为新的Map的值 duplicatedUseCaseList.add(useCaseMap); // 添加到列表 } } } if (duplicatedUseCaseList.isEmpty()) { workbook.close(); return R.fail("测试用例id不能为空"); } result.put("duplicatedUseCaseList", duplicatedUseCaseList); // 使用新的格式存储数据 workbook.close(); return R.ok(result); } /** * 快速创建检测项目 * @param request * @return * @throws IOException */ @ApiOperation("快速创建检测项目(科恩)") @Trace @Tags({@Tag(key = "param", value = "arg[0]"), @Tag(key = "result", value = "returnedObj")}) @Log(title = "快速创建检测项目(科恩)", businessType = BusinessType.UPDATE) @RequestMapping(method = RequestMethod.POST, value = "/createProject", produces="application/json;charset=UTF-8") public R<String> createProject(@Validated @RequestBody String request) throws IOException { return R.ok(taskService.createProject(request)); } @ApiOperation("查询车辆原始记录图片") @RequestMapping(method = RequestMethod.POST, value = "/getPicture") public R<String> getPicture(@Validated @RequestBody TaskPictureRequest request) throws IOException { return R.ok(taskService.getPicture(request)); } @Anonymous @ApiOperation("根据状态查看任务数据统计") @Trace @Tags({@Tag(key = "param", value = "arg[0]"), @Tag(key = "result", value = "returnedObj")}) @RequestMapping(method = RequestMethod.POST, value = "/taskStateDistribution") public TableDataInfo<TaskStateDistributionResponse> taskStateDistribution() { return getDataTable(taskService.taskStateDistribution()); } @Anonymous @ApiOperation("委托单位任务分布") @Trace @Tags({@Tag(key = "param", value = "arg[0]"), @Tag(key = "result", value = "returnedObj")}) @RequestMapping(method = RequestMethod.POST, value = "/entrustedUnitDistribution") public TableDataInfo<EntrustedUnitResponse> entrustedUnitDistribution() { return getDataTable(taskService.entrustedUnitDistribution()); } }