liu
10 天以前 dd1a51612fcd3c839d31dfa0df83b3d3071c8145
src/main/java/com/ruoyi/inspectiontask/controller/InspectionTaskController.java
@@ -2,9 +2,11 @@
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;
@@ -13,6 +15,9 @@
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
@@ -36,6 +41,20 @@
        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(), "导出定时任务记录");
    }
    /**
     * 巡检任务表新增修改
     */
@@ -56,4 +75,69 @@
        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();
    }
}