package com.ruoyi.inspectiontask.controller;
|
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import com.ruoyi.common.utils.poi.ExcelUtil;
|
import com.ruoyi.framework.web.controller.BaseController;
|
import com.ruoyi.framework.web.domain.R;
|
import com.ruoyi.inspectiontask.dto.InspectionTaskDto;
|
import com.ruoyi.inspectiontask.dto.TimingTaskDto;
|
import com.ruoyi.inspectiontask.pojo.InspectionTask;
|
import com.ruoyi.inspectiontask.service.InspectionTaskService;
|
import io.swagger.annotations.Api;
|
import io.swagger.annotations.ApiOperation;
|
import lombok.AllArgsConstructor;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.web.bind.annotation.*;
|
|
import javax.servlet.http.HttpServletResponse;
|
import java.time.LocalDateTime;
|
|
/**
|
* @author :yys
|
* @date : 2025/9/19 10:52
|
*/
|
@RestController
|
@Api(tags = "巡检任务管理")
|
@RequestMapping("/inspectionTask")
|
public class InspectionTaskController extends BaseController {
|
|
@Autowired
|
private InspectionTaskService inspectionTaskService;
|
|
/**
|
* 巡检任务表表查询
|
*/
|
@GetMapping("/list")
|
@ApiOperation("巡检任务表表查询")
|
public R<IPage<InspectionTaskDto>> list(Page<InspectionTask> page, InspectionTaskDto inspectionTaskDto) {
|
IPage<InspectionTaskDto> list = inspectionTaskService.selectInspectionTaskList(page,inspectionTaskDto);
|
return R.ok(list);
|
}
|
|
|
/**
|
* 导出
|
*/
|
@PostMapping("/export")
|
@ApiOperation(value = "导出定时任务记录")
|
public void export(HttpServletResponse response) {
|
Page page = new Page<>(-1,-1);
|
InspectionTaskDto timingTask = new InspectionTaskDto();
|
IPage<InspectionTaskDto> list = inspectionTaskService.selectInspectionTaskList(page,timingTask);
|
ExcelUtil<InspectionTaskDto> util = new ExcelUtil<>(InspectionTaskDto.class);
|
util.exportExcel(response, list.getRecords(), "导出定时任务记录");
|
}
|
|
/**
|
* 巡检任务表新增修改
|
*/
|
@PostMapping("/addOrEditInspectionTask")
|
@ApiOperation("巡检任务表新增修改")
|
@Transactional(rollbackFor = Exception.class)
|
public R addOrEditInspectionTask(@RequestBody InspectionTaskDto inspectionTaskDto) {
|
return R.ok(inspectionTaskService.addOrEditInspectionTask(inspectionTaskDto));
|
}
|
|
/**
|
* 巡检任务表删除
|
*/
|
@DeleteMapping("/delInspectionTask")
|
@ApiOperation("巡检任务表删除")
|
@Transactional(rollbackFor = Exception.class)
|
public R remove(@RequestBody Long[] ids) {
|
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();
|
}
|
|
}
|