liu
10 天以前 dd1a51612fcd3c839d31dfa0df83b3d3071c8145
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
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();
    }
 
}