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
package com.ruoyi.envaccess.service.impl;
 
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.common.exception.base.BaseException;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.envaccess.mapper.EnvInspectionMapper;
import com.ruoyi.envaccess.pojo.EnvInspection;
import com.ruoyi.envaccess.service.IEnvInspectionService;
import lombok.AllArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
 
import javax.servlet.http.HttpServletResponse;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.List;
 
@Service
@AllArgsConstructor
@Transactional(rollbackFor = Exception.class)
public class EnvInspectionServiceImpl extends ServiceImpl<EnvInspectionMapper, EnvInspection> implements IEnvInspectionService {
 
    private EnvInspectionMapper envInspectionMapper;
 
    @Override
    public IPage<EnvInspection> listPage(Page page, EnvInspection req) {
        return envInspectionMapper.listPage(page, req);
    }
 
    @Override
    public void export(HttpServletResponse response, EnvInspection req) {
        List<EnvInspection> list = envInspectionMapper.list(req);
        ExcelUtil<EnvInspection> util = new ExcelUtil<EnvInspection>(EnvInspection.class);
        util.exportExcel(response, list, "智能巡检台账");
    }
 
    /**
     * 根据巡检记录自动生成巡检报告(HTML),并写回 report_path
     */
    @Override
    public String generateReport(Long id) {
        EnvInspection it = getById(id);
        if (it == null) {
            throw new BaseException("巡检记录不存在");
        }
        String typeText = it.getInspectionType() == null ? "" :
                (it.getInspectionType() == 1 ? "定期巡检" : it.getInspectionType() == 2 ? "临时巡检" :
                        it.getInspectionType() == 3 ? "故障巡检" : "");
        String statusText = it.getStatus() == null ? "" :
                (it.getStatus() == 0 ? "待执行" : it.getStatus() == 1 ? "执行中" :
                        it.getStatus() == 2 ? "已完成" : it.getStatus() == 3 ? "已取消" : "");
        String now = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
 
        StringBuilder sb = new StringBuilder();
        sb.append("<html xmlns:o='urn:schemas-microsoft-com:office:office' xmlns:w='urn:schemas-microsoft-com:office:word'>")
          .append("<head><meta charset='utf-8'><title>智能巡检报告</title></head><body>");
        sb.append("<h2 style='text-align:center;'>智能巡检报告</h2>");
        sb.append("<p style='text-align:right;'>报告生成时间:").append(now).append("</p>");
        sb.append("<table border='1' cellspacing='0' cellpadding='6' style='border-collapse:collapse;width:100%;font-size:14px;'>");
        row(sb, "巡检名称", it.getInspectionName());
        row(sb, "巡检类型", typeText);
        row(sb, "巡检区域", it.getArea());
        row(sb, "巡检路径规划", it.getRoutePlan());
        row(sb, "计划时间", fmt(it.getPlanStartTime()) + " ~ " + fmt(it.getPlanEndTime()));
        row(sb, "实际时间", fmt(it.getActualStartTime()) + " ~ " + fmt(it.getActualEndTime()));
        row(sb, "巡检人员", it.getInspector());
        row(sb, "巡检状态", statusText);
        row(sb, "巡检结果/记录", it.getInspectionResult());
        row(sb, "AI视频分析结果", it.getAiAnalysis());
        row(sb, "无人机/机器人数据", it.getUavData());
        row(sb, "备注", it.getRemark());
        sb.append("</table>");
        sb.append("<p style='margin-top:30px;'>巡检人签字:________________&nbsp;&nbsp;&nbsp;&nbsp;审批人签字:________________</p>");
        sb.append("</body></html>");
 
        String content = sb.toString();
        EnvInspection upd = new EnvInspection();
        upd.setId(id);
        upd.setReportPath(content);
        updateById(upd);
        return content;
    }
 
    private static String fmt(java.util.Date d) {
        if (d == null) {
            return "";
        }
        return new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(d);
    }
 
    private static void row(StringBuilder sb, String label, Object value) {
        sb.append("<tr><td style='background:#f0f1f5;width:180px;'>").append(label)
          .append("</td><td>").append(value == null ? "" : String.valueOf(value).replace("\n", "<br/>"))
          .append("</td></tr>");
    }
}