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;'>巡检人签字:________________ 审批人签字:________________</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>");
|
}
|
}
|