diff --git a/zc-business/src/main/java/com/zc/business/controller/DcEventImportantFileController.java b/zc-business/src/main/java/com/zc/business/controller/DcEventImportantFileController.java index 2ea37c94..29d8cf4a 100644 --- a/zc-business/src/main/java/com/zc/business/controller/DcEventImportantFileController.java +++ b/zc-business/src/main/java/com/zc/business/controller/DcEventImportantFileController.java @@ -9,16 +9,10 @@ import javax.servlet.http.HttpServletResponse; import com.zc.business.utils.PoiUtil; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; import org.apache.poi.xwpf.usermodel.XWPFDocument; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.PutMapping; -import org.springframework.web.bind.annotation.DeleteMapping; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; import com.ruoyi.common.annotation.Log; import com.ruoyi.common.core.controller.BaseController; import com.ruoyi.common.core.domain.AjaxResult; @@ -86,7 +80,7 @@ public class DcEventImportantFileController extends BaseController { InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream("wordTemplate/importantTemplate.docx"); - XWPFDocument document = null; + XWPFDocument document = null; try { @@ -171,4 +165,12 @@ public class DcEventImportantFileController extends BaseController public AjaxResult getImportantFileStatus(@PathVariable("eventId") String eventId){ return dcEventImportantFileService.getImportantFileStatus(eventId); } + + @ApiOperation("生成重要事件文件内容") + @PostMapping("/generate") + public AjaxResult generate(@ApiParam(value="事件id", name="eventId", required=true) @RequestParam("eventId") String eventId, + @ApiParam(value="类型 1:初报,2续报,3终报", name="type", required=true) @RequestParam("type") String type){ + return dcEventImportantFileService.generate(eventId,type); + } + } diff --git a/zc-business/src/main/java/com/zc/business/service/IDcEventImportantFileService.java b/zc-business/src/main/java/com/zc/business/service/IDcEventImportantFileService.java index 223b11de..bc862eb3 100644 --- a/zc-business/src/main/java/com/zc/business/service/IDcEventImportantFileService.java +++ b/zc-business/src/main/java/com/zc/business/service/IDcEventImportantFileService.java @@ -68,4 +68,15 @@ public interface IDcEventImportantFileService * @return 结果 */ AjaxResult getImportantFileStatus(String eventId); + + /** + * @Description 生成重要事件文件内容 + * + * @author liuwenge + * @date 2024/5/8 15:50 + * @param eventId 事件id + * @param type 类型 1:初报,2续报,3终报 + * @return com.ruoyi.common.core.domain.AjaxResult + */ + AjaxResult generate(String eventId,String type); } diff --git a/zc-business/src/main/java/com/zc/business/service/impl/DcEventImportantFileServiceImpl.java b/zc-business/src/main/java/com/zc/business/service/impl/DcEventImportantFileServiceImpl.java index 12513d6c..a9e2ed1d 100644 --- a/zc-business/src/main/java/com/zc/business/service/impl/DcEventImportantFileServiceImpl.java +++ b/zc-business/src/main/java/com/zc/business/service/impl/DcEventImportantFileServiceImpl.java @@ -1,17 +1,20 @@ package com.zc.business.service.impl; +import java.text.SimpleDateFormat; +import java.util.Arrays; import java.util.Date; +import java.util.HashSet; import java.util.List; import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.core.domain.entity.SysUser; import com.ruoyi.common.utils.DateUtils; import com.ruoyi.common.utils.SecurityUtils; import com.ruoyi.common.utils.StringUtils; -import com.zc.business.domain.DcEventProcess; +import com.zc.business.domain.*; +import com.zc.business.mapper.*; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; -import com.zc.business.mapper.DcEventImportantFileMapper; -import com.zc.business.domain.DcEventImportantFile; import com.zc.business.service.IDcEventImportantFileService; /** @@ -27,6 +30,16 @@ public class DcEventImportantFileServiceImpl implements IDcEventImportantFileSer private DcEventImportantFileMapper dcEventImportantFileMapper; @Autowired private DcEventProcessServiceImpl dcEventProcessService; + @Autowired + private DcEventServiceImpl dcEventService; + @Autowired + private DcEventMapper dcEventMapper; + @Autowired + private DcEventAccidentMapper dcEventAccidentMapper; + @Autowired + private DcEventTrafficCongestionMapper dcEventTrafficCongestionMapper; + @Autowired + private DcEventImportantMapper dcEventImportantMapper; /** * 查询重要事件文件内容 @@ -153,4 +166,225 @@ public class DcEventImportantFileServiceImpl implements IDcEventImportantFileSer return AjaxResult.success(num); } + /** + * @Description 生成重要事件文件内容 + * + * @author liuwenge + * @date 2024/5/8 15:51 + * @param eventId 事件id + * @param type 类型 1:初报,2续报,3终报 + * @return com.ruoyi.common.core.domain.AjaxResult + */ + @Override + public AjaxResult generate(String eventId,String type){ + + if (StringUtils.isEmpty(eventId) || StringUtils.isEmpty(type)){ + return AjaxResult.error("参数错误!"); + } + DcEvent dcEvent = dcEventMapper.selectDcEventById(eventId); + if (dcEvent == null){ + return AjaxResult.error("事件查询失败,请检查事件id是否正确!"); + } + String eventType = dcEvent.getEventType().toString(); + if ("1".equals(eventType) && "4".equals(eventType)){ + return AjaxResult.error("事件类型错误!"); + } + + DcEventImportantFile dcEventImportantFile = new DcEventImportantFile(); + dcEventImportantFile.setFromDept("齐鲁高速股份有限公司"); + SimpleDateFormat df = new SimpleDateFormat("yyyy年MM月dd日 HH时mm分"); + String createTime = df.format(new Date()); + dcEventImportantFile.setCreateTime(createTime); + + String title = "关于G35济菏高速" + dcEvent.getStakeMark() + "交通事故"; + if ("1".equals(type)){ + title += "的初报"; + } else if ("2".equals(type)){ + title += "的续报"; + } else if ("3".equals(type)){ + title += "的终报"; + } + dcEventImportantFile.setTitle(title); + + dcEventImportantFile.setToDept("智慧管理中心:"); + + String content = "\t" + df.format(dcEvent.getOccurrenceTime()) + ",G35济菏高速" + dcEvent.getStakeMark(); + if ("1".equals(dcEvent.getDirection()) || "菏泽方向".equals(dcEvent.getDirection())) { + content += "菏泽方向"; + } else if ("3".equals(dcEvent.getDirection()) || "济南方向".equals(dcEvent.getDirection())) { + content += "济南方向"; + } + content += "发生"; + if ("1-1".equals(dcEvent.getEventSubclass()) || "追尾".equals(dcEvent.getEventSubclass())) { + content += "追尾"; + } else if ("1-2".equals(dcEvent.getEventSubclass()) || "侧翻".equals(dcEvent.getEventSubclass())) { + content += "侧翻"; + } else if ("1-3".equals(dcEvent.getEventSubclass()) || "撞护栏".equals(dcEvent.getEventSubclass())) { + content += "撞护栏"; + } else if ("1-4".equals(dcEvent.getEventSubclass()) || "自燃".equals(dcEvent.getEventSubclass())) { + content += "自燃"; + } else if ("1-5".equals(dcEvent.getEventSubclass()) || "其他".equals(dcEvent.getEventSubclass())){ + content += "其他"; + } else if ("4-1".equals(dcEvent.getEventSubclass()) || "道路拥堵".equals(dcEvent.getEventSubclass())){ + content += "道路拥堵"; + } else if ("4-2".equals(dcEvent.getEventSubclass()) || "立交拥堵".equals(dcEvent.getEventSubclass())){ + content += "立交拥堵"; + } else if ("4-3".equals(dcEvent.getEventSubclass()) || "收费站拥堵".equals(dcEvent.getEventSubclass())){ + content += "收费站拥堵"; + } else if ("4-4".equals(dcEvent.getEventSubclass()) || "服务区拥堵".equals(dcEvent.getEventSubclass())){ + content += "服务区拥堵"; + } + content += "事故。"; + + if ("1".equals(type) || "2".equals(type)) { + + //占用车道 + if (StringUtils.isNotEmpty(dcEvent.getLang())) { + String[] langArr = dcEvent.getLang().split(","); + content += "事故占用"; + for (String lang : langArr) { + if ("0".equals(lang)) { + content += "应急车道、"; + } else if ("1".equals(lang)) { + content += "行1车道、"; + } else if ("2".equals(lang)) { + content += "行2车道、"; + } else if ("3".equals(lang)) { + content += "行3车道、"; + } else if ("4".equals(lang)) { + content += "行4车道、"; + } + } + content = content.substring(0, content.length() - 1); + content += ","; + + String[] langAll = {"1", "2", "3", "4", "0"}; + HashSet diff = new HashSet<>(Arrays.asList(langAll)); + diff.removeAll(Arrays.asList(langArr)); + for (String s : diff) { + if ("0".equals(s)) { + content += "应急车道、"; + } else if ("1".equals(s)) { + content += "行1车道、"; + } else if ("2".equals(s)) { + content += "行2车道、"; + } else if ("3".equals(s)) { + content += "行3车道、"; + } else if ("4".equals(s)) { + content += "行4车道、"; + } + } + content = content.substring(0, content.length() - 1); + content += "正常通行,"; + + + } else { + content += "行1车道、行2车道、行3车道、行4车道、应急车道正常通行,"; + } + + //压车情况 + if ("1".equals(eventType)) { + DcEventAccident dcEventAccident = dcEventAccidentMapper.selectDcEventAccidentById(eventId); + if (dcEventAccident != null && dcEventAccident.getTrafficJam() != null && dcEventAccident.getTrafficJam() > 0f) { + content += "压车" + dcEventAccident.getTrafficJam() + "公里。\n\t"; + } else { + content += "无压车。\n\t"; + } + } else if ("4".equals(eventType)){ + DcEventTrafficCongestion dcEventTrafficCongestion = dcEventTrafficCongestionMapper.selectDcEventTrafficCongestionById(eventId); + if (dcEventTrafficCongestion != null && dcEventTrafficCongestion.getCongestionMileage() != null && dcEventTrafficCongestion.getCongestionMileage() > 0f) { + content += "压车" + dcEventTrafficCongestion.getCongestionMileage() + "公里。\n\t"; + } else { + content += "无压车。\n\t"; + } + } + + //到达现场情况 + DcEventImportant dcEventImportant = dcEventImportantMapper.selectDcEventImportantByEventId(eventId); + if (dcEventImportant == null){ + dcEventImportant = new DcEventImportant(); + dcEventImportant.setEventId(eventId); + dcEventImportant.setTrafficPoliceStatus(0); + dcEventImportant.setMedicalStatus(0); + dcEventImportant.setFireStatus(0); + dcEventImportant.setBoardStatus(0); + dcEventImportantMapper.insertDcEventImportant(dcEventImportant); + } + if (StringUtils.isNotEmpty(dcEventImportant.getPlateNumber())) { + content += "现场事故车辆及车牌号信息:" + dcEventImportant.getPlateNumber() + "。"; + } + + String arrived = ""; + String notArrived = "路管、"; + if (dcEventImportant.getTrafficPoliceStatus() == 1) { + arrived += "交警、"; + } else { + notArrived += "交警、"; + } + if (dcEventImportant.getMedicalStatus() == 1) { + arrived += "医疗、"; + } else { + notArrived += "医疗、"; + } + if (dcEventImportant.getFireStatus() == 1) { + arrived += "消防、"; + } else { + notArrived += "消防、"; + } + if (arrived.length() > 0) { + arrived = arrived.substring(0, arrived.length() - 1); + content += arrived + "等单位已到达现场。"; + } + + + if (StringUtils.isNotEmpty(dcEventImportant.getCurrentProgress())) { + content += "事故目前处置进度为" + dcEventImportant.getCurrentProgress() + "。"; + } + if (StringUtils.isNotEmpty(dcEventImportant.getTakeSteps())) { + content += "已采取的措施:" + dcEventImportant.getTakeSteps() + "。"; + } + if (StringUtils.isNotEmpty(dcEventImportant.getTakeSteps())) { + content += "在" + dcEventImportant.getTakeSteps() + "进行分流。"; + } + + if (dcEventImportant.getBoardStatus() == 1) { + content += "事故点后方情报板已经做好信息提示。"; + } + content += "\n"; + + notArrived = notArrived.substring(0, notArrived.length() - 1); + content += "\t" + notArrived + "等单位正在赶往现场。"; + + if ("1".equals(type)) { + content += "具体情况稍后报告。"; + } else if ("2".equals(type)) { + if (dcEvent.getEstimatedEndTime() != null) { + SimpleDateFormat dateFormat = new SimpleDateFormat("HH时mm分"); + content += "预计结束时间为" + dateFormat.format(dcEvent.getEstimatedEndTime()) + "。"; + } + } + + dcEventImportantFile.setContent(content); + + + } else if ("3".equals(type)){ + content += "\n\t"; + SimpleDateFormat dateFormat = new SimpleDateFormat("HH时mm分"); + content += dateFormat.format(new Date()) + ",事故处理完毕,道路恢复畅通。"; + dcEventImportantFile.setContent(content); + + } else { + return AjaxResult.error("文件类型错误!"); + } + + + SysUser user = SecurityUtils.getLoginUser().getUser(); + dcEventImportantFile.setCreateName(user.getNickName()); + dcEventImportantFile.setPhoneNumber(user.getPhonenumber()); + dcEventImportantFile.setType(type); + dcEventImportantFile.setStatus("0"); + + return AjaxResult.success(dcEventImportantFile); + } + } diff --git a/zc-business/src/main/java/com/zc/business/utils/PoiUtil.java b/zc-business/src/main/java/com/zc/business/utils/PoiUtil.java index 5727021c..768f44ae 100644 --- a/zc-business/src/main/java/com/zc/business/utils/PoiUtil.java +++ b/zc-business/src/main/java/com/zc/business/utils/PoiUtil.java @@ -516,7 +516,17 @@ public class PoiUtil { //判断key在Map中是否存在 if (textMap.containsKey(runsText)) { if (value != null) { - run.setText(value.toString(), 0); + String valueStr = value.toString().replaceAll("\\\\t"," "); + String[] valueArr = valueStr.split("\\\\n"); + if (valueArr.length > 1) { + for (int index = 0; index < valueArr.length; index++) { + run.setText(valueArr[index], index); + run.addBreak(); + } + } else { + run.setText(valueStr,0); + } + } else { run.setText("", 0); }