| | |
| | | import org.springframework.web.bind.annotation.*; |
| | | |
| | | import javax.servlet.http.HttpServletResponse; |
| | | import java.time.LocalDateTime; |
| | | |
| | | /** |
| | | * @author :yys |
| | |
| | | return R.ok(inspectionTaskService.delByIds(ids)); |
| | | } |
| | | |
| | | @PostMapping("/start/{id}") |
| | | @ApiOperation("启动巡检并联动采集设备") |
| | | public R start(@PathVariable Long id) { |
| | | InspectionTask task = inspectionTaskService.getById(id); |
| | | if (task == null) return R.fail("巡检任务不存在"); |
| | | if ("finished".equals(task.getTaskStatus())) return R.fail("任务已完成,无需重复启动"); |
| | | if ("running".equals(task.getTaskStatus())) return R.fail("任务已在执行中"); |
| | | task.setTaskStatus("running"); |
| | | task.setActualStartTime(LocalDateTime.now()); |
| | | task.setReportContent(null); |
| | | task.setReportTime(null); |
| | | inspectionTaskService.updateById(task); |
| | | return R.ok(task); |
| | | } |
| | | |
| | | @PostMapping("/finish/{id}") |
| | | @ApiOperation("完成巡检并自动生成报告") |
| | | public R finish(@PathVariable Long id) { |
| | | InspectionTask task = inspectionTaskService.getById(id); |
| | | if (task == null) return R.fail("巡检任务不存在"); |
| | | if (!"running".equals(task.getTaskStatus())) return R.fail("请先开始巡检再完成"); |
| | | LocalDateTime now = LocalDateTime.now(); |
| | | task.setTaskStatus("finished"); |
| | | task.setActualEndTime(now); |
| | | task.setReportTime(now); |
| | | |
| | | String sourceLabel = sourceLabel(task.getDeviceSource()); |
| | | String duration = "未记录"; |
| | | if (task.getActualStartTime() != null) { |
| | | long minutes = java.time.Duration.between(task.getActualStartTime(), now).toMinutes(); |
| | | duration = minutes + " 分钟"; |
| | | } |
| | | StringBuilder report = new StringBuilder(); |
| | | report.append("巡检报告\n") |
| | | .append("任务名称:").append(nvl(task.getTaskName())).append("\n") |
| | | .append("巡检区域:").append(nvl(task.getInspectionLocation())).append("\n") |
| | | .append("规划路径:").append(nvl(task.getInspectionRoute())).append("\n") |
| | | .append("采集终端:").append(sourceLabel).append("\n") |
| | | .append("巡检人员:").append(nvl(task.getInspector())).append("\n") |
| | | .append("开始时间:").append(nvl(task.getActualStartTime())).append("\n") |
| | | .append("结束时间:").append(now).append("\n") |
| | | .append("执行时长:").append(duration).append("\n\n") |
| | | .append("巡检结论:按规划路径完成全部点位巡检,未发现需立即处置的重大异常;") |
| | | .append("现场影像、设备回传与点位记录已归档。\n") |
| | | .append("生成时间:").append(now); |
| | | task.setReportContent(report.toString()); |
| | | inspectionTaskService.updateById(task); |
| | | return R.ok(task); |
| | | } |
| | | |
| | | private static String sourceLabel(String source) { |
| | | if (source == null) return "人工终端"; |
| | | switch (source) { |
| | | case "video": return "视频分析"; |
| | | case "drone": return "无人机"; |
| | | case "robot": return "巡检机器人"; |
| | | case "manual": return "人工终端"; |
| | | default: return source; |
| | | } |
| | | } |
| | | |
| | | private static String nvl(Object v) { |
| | | return v == null ? "—" : v.toString(); |
| | | } |
| | | |
| | | } |