From 5fe33ab438b57cab2c03e0c8f63acef7f39ca494 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E5=85=B4=E7=90=B3?= <1911390090@qq.com> Date: Wed, 21 Aug 2024 11:37:13 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BA=8B=E6=95=85=E8=BD=A6=E5=9E=8B=E5=88=86?= =?UTF-8?q?=E6=9E=90=20=E4=BA=8B=E6=95=85=E6=97=B6=E9=97=B4=E5=88=86?= =?UTF-8?q?=E6=9E=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/DcSdhsEventController.java | 45 ++- .../zc/business/domain/DcSdhsEventQuery.java | 9 +- .../business/service/IDcSdhsEventService.java | 33 ++ .../service/impl/DcSdhsEventServiceImpl.java | 361 +++++++++++++++++- .../service/impl/DcWarningServiceImpl.java | 4 +- .../wordTemplate/accidentModelAnalysis.docx | Bin 0 -> 23722 bytes .../wordTemplate/accidentTimeAnalysis.docx | Bin 0 -> 24243 bytes 7 files changed, 442 insertions(+), 10 deletions(-) create mode 100644 zc-business/src/main/resources/wordTemplate/accidentModelAnalysis.docx create mode 100644 zc-business/src/main/resources/wordTemplate/accidentTimeAnalysis.docx diff --git a/zc-business/src/main/java/com/zc/business/controller/DcSdhsEventController.java b/zc-business/src/main/java/com/zc/business/controller/DcSdhsEventController.java index 0ed2dc8f..93c74109 100644 --- a/zc-business/src/main/java/com/zc/business/controller/DcSdhsEventController.java +++ b/zc-business/src/main/java/com/zc/business/controller/DcSdhsEventController.java @@ -4,6 +4,10 @@ import com.ruoyi.common.config.RuoYiConfig; import com.ruoyi.common.core.domain.AjaxResult; import com.zc.business.domain.DcSdhsEventQuery; import com.zc.business.enums.UniversalEnum; +import com.ruoyi.common.utils.SecurityUtils; +import com.zc.business.domain.DcSdhsEvent; +import com.zc.business.domain.DcSdhsEventQuery; +import com.zc.business.enums.UniversalEnum; import com.zc.business.service.IDcSdhsEventService; import com.zc.business.utils.PoiUtil; import io.swagger.annotations.Api; @@ -16,6 +20,11 @@ import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTBr; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTP; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTR; import org.openxmlformats.schemas.wordprocessingml.x2006.main.STBrType; +import org.apache.catalina.security.SecurityUtil; +import org.apache.poi.xssf.usermodel.XSSFSheet; +import org.apache.poi.xssf.usermodel.XSSFWorkbook; +import org.apache.poi.xwpf.usermodel.*; +import org.openxmlformats.schemas.wordprocessingml.x2006.main.*; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; @@ -30,6 +39,17 @@ import java.util.Map; import static com.zc.business.utils.PoiUtil.insertTOC; +import javax.servlet.http.HttpServletResponse; +import java.io.InputStream; +import java.math.BigInteger; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.List; +import java.util.Map; + +import static com.zc.business.utils.PoiUtil.*; +import static com.zc.business.utils.PoiUtil.createLineBreak; + /** * @Description 高速云事件分析Controller * @@ -96,8 +116,12 @@ public class DcSdhsEventController { } else if ("2".equals(trafficIncidentType)){ } else if ("3".equals(trafficIncidentType)){ + //事故车型 + dcSdhsEventService.exportAccidentModelAnalysis(newDoc, dcSdhsEventQuery); } else if ("4".equals(trafficIncidentType)){ + //事故时间 + dcSdhsEventService.exportAccidentTimeAnalysis(newDoc, dcSdhsEventQuery); } else if ("5".equals(trafficIncidentType)){ //事故地市分布 @@ -179,7 +203,26 @@ public class DcSdhsEventController { return dcSdhsEventService.selectRegionAnalysis(dcSdhsEventQuery); } - + /** + * 事故时间分析 + * @param dcSdhsEventQuery + * @return + */ + @GetMapping("/accidentTimeAnalysis") + @ApiOperation("事故时间分析") + public AjaxResult accidentTimeAnalysis(DcSdhsEventQuery dcSdhsEventQuery){ + return AjaxResult.success( dcSdhsEventService.accidentTimeAnalysis(dcSdhsEventQuery)); + } + /** + * 事故车型分析 + * @param dcSdhsEventQuery + * @return + */ + @GetMapping("/accidentModelAnalysis") + @ApiOperation("事故车型分析") + public AjaxResult accidentModelAnalysis(DcSdhsEventQuery dcSdhsEventQuery){ + return AjaxResult.success( dcSdhsEventService.accidentModelAnalysis(dcSdhsEventQuery)); + } @ApiOperation("查询交通管制情况分析") @PostMapping("/selectStationAnalysis") public AjaxResult selectStationAnalysis(@RequestBody DcSdhsEventQuery dcSdhsEventQuery) diff --git a/zc-business/src/main/java/com/zc/business/domain/DcSdhsEventQuery.java b/zc-business/src/main/java/com/zc/business/domain/DcSdhsEventQuery.java index 93ebaebd..d67b01e9 100644 --- a/zc-business/src/main/java/com/zc/business/domain/DcSdhsEventQuery.java +++ b/zc-business/src/main/java/com/zc/business/domain/DcSdhsEventQuery.java @@ -4,6 +4,7 @@ import com.fasterxml.jackson.annotation.JsonFormat; import com.ruoyi.common.annotation.Excel; import com.ruoyi.common.core.domain.BaseEntity; import org.apache.commons.lang3.builder.ToStringBuilder; +import org.springframework.format.annotation.DateTimeFormat; import java.util.Date; import java.util.List; @@ -26,11 +27,15 @@ public class DcSdhsEventQuery private String type; /** 开始时间 */ - @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8") + @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone = "GMT+8") + @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") //接收时间类型 + private Date startTime; /** 结束时间 */ - @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8") + @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone = "GMT+8") + @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") //接收时间类型 + private Date endTime; /** 需要导出的键 */ diff --git a/zc-business/src/main/java/com/zc/business/service/IDcSdhsEventService.java b/zc-business/src/main/java/com/zc/business/service/IDcSdhsEventService.java index b83c2f80..77affdcf 100644 --- a/zc-business/src/main/java/com/zc/business/service/IDcSdhsEventService.java +++ b/zc-business/src/main/java/com/zc/business/service/IDcSdhsEventService.java @@ -1,11 +1,17 @@ package com.zc.business.service; import com.ruoyi.common.core.domain.AjaxResult; +import com.zc.business.domain.DcSdhsEvent; +import com.zc.business.domain.DcSdhsEventQuery; +import org.apache.poi.xwpf.usermodel.XWPFDocument; import com.zc.business.domain.DcSdhsEventQuery; import org.apache.poi.xwpf.usermodel.XWPFDocument; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.multipart.MultipartFile; +import java.util.List; +import java.util.Map; + import javax.servlet.http.HttpServletResponse; /** @@ -25,6 +31,33 @@ public interface IDcSdhsEventService void exportRegionAnalysis(XWPFDocument doc, DcSdhsEventQuery dcSdhsEventQuery); + /** + * 事故车型 + * @param newDoc + * @param dcSdhsEventQuery + */ + void exportAccidentModelAnalysis(XWPFDocument newDoc,DcSdhsEventQuery dcSdhsEventQuery); + + /** + * 事故车型分析 + * @param dcSdhsEventQuery + * @return + */ + Map> accidentModelAnalysis(DcSdhsEventQuery dcSdhsEventQuery); + + /** + * 事故时间分析 + * @param dcSdhsEventQuery + * @return + */ + Map accidentTimeAnalysis(DcSdhsEventQuery dcSdhsEventQuery); + + /** + * 事故时间 + * @param newDoc + * @param dcSdhsEventQuery + */ + void exportAccidentTimeAnalysis(XWPFDocument newDoc,DcSdhsEventQuery dcSdhsEventQuery); AjaxResult selectStationAnalysis(DcSdhsEventQuery dcSdhsEventQuery); void exportStationAnalysis(XWPFDocument doc, DcSdhsEventQuery dcSdhsEventQuery); diff --git a/zc-business/src/main/java/com/zc/business/service/impl/DcSdhsEventServiceImpl.java b/zc-business/src/main/java/com/zc/business/service/impl/DcSdhsEventServiceImpl.java index 2600d740..083ab74a 100644 --- a/zc-business/src/main/java/com/zc/business/service/impl/DcSdhsEventServiceImpl.java +++ b/zc-business/src/main/java/com/zc/business/service/impl/DcSdhsEventServiceImpl.java @@ -15,26 +15,30 @@ import com.zc.business.utils.PoiUtil; import org.apache.poi.xssf.usermodel.XSSFSheet; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.apache.poi.xwpf.usermodel.*; -import org.openxmlformats.schemas.wordprocessingml.x2006.main.*; +import org.apache.poi.ss.usermodel.Cell; +import org.apache.poi.ss.usermodel.CellType; +import org.apache.poi.ss.usermodel.Row; +import org.apache.poi.xssf.usermodel.XSSFCell; +import org.apache.poi.xssf.usermodel.XSSFRow; +import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTblWidth; +import org.openxmlformats.schemas.wordprocessingml.x2006.main.STTblWidth; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; -import org.springframework.web.multipart.MultipartFile; -import javax.servlet.http.HttpServletResponse; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; -import java.lang.reflect.Array; import java.math.BigInteger; import java.text.SimpleDateFormat; import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; import java.util.*; +import java.time.ZoneId; import java.util.regex.Matcher; import java.util.regex.Pattern; import java.util.stream.Collectors; import static com.zc.business.utils.PoiUtil.*; + import static com.zc.business.utils.PoiUtil.addDescription; /** @@ -223,6 +227,353 @@ public class DcSdhsEventServiceImpl implements IDcSdhsEventService { return AjaxResult.success("导入成功"); }*/ + /** + * 事故车型分析 导出 + * @param doc + * @param dcSdhsEventQuery + */ + @Override + public void exportAccidentModelAnalysis(XWPFDocument doc,DcSdhsEventQuery dcSdhsEventQuery) { + // 初始化一个空的结果映射 + Map> result = accidentModelAnalysis(dcSdhsEventQuery); + +// 计算最大车辆类型数量 + int maxVehicleTypes = 5; +// 创建一个具有最大车辆类型数量的列的表格 + XWPFTable table = doc.createTable(result.size() + 1, maxVehicleTypes ); + +// 提取所有不同的车辆类型作为列标题 + Set vehicleTypes = new HashSet<>(); + vehicleTypes.add("货车"); + vehicleTypes.add("小型车"); + vehicleTypes.add("客车"); + vehicleTypes.add("罐车"); + +// 设置表头 + XWPFTableRow headerRow = table.getRow(0); + setTableFonts(headerRow.getCell(0), ""); // 第一列是事件类型 + int colIdx = 1; + for (String vehicleType : vehicleTypes) { + table.getRow(0).getCell(colIdx++).setText(vehicleType); + } + +// 填充表格内容 + int rowIdx = 1; + for (Map.Entry> entry : result.entrySet()) { + XWPFTableRow row = table.getRow(rowIdx++); + setTableFonts(row.getCell(0), entry.getKey()); // 事件类型 + + int cellIdx = 1; + for (String vehicleType : vehicleTypes) { + Integer count = entry.getValue().get(vehicleType); + XWPFTableCell cell = row.getCell(cellIdx++); + XWPFRun run = cell.getParagraphs().get(0).createRun(); + run.setText(String.valueOf(count != null ?count : 0)); // 如果该事件没有这种车辆类型,则设为0 + } + } + +// 创建柱状图 + try { + // 复制Word模板 + InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream("wordTemplate/accidentModelAnalysis.docx"); + XWPFDocument copiedTemplate = new XWPFDocument(inputStream); + // 获取word中所有图表对象 + List charts = copiedTemplate.getCharts(); + + XWPFChart chart = charts.get(0); + XSSFWorkbook workbook = chart.getWorkbook(); + XSSFSheet sheet = workbook.getSheetAt(0); +// 系列信息 + String[] singleBarSeriesNames = vehicleTypes.toArray(new String[0]); + +// 填充表格内容 + int rowId = 1; // 开始填充数据的行号 + for (Map.Entry> entry : result.entrySet()) { + + XSSFRow row = sheet.getRow(rowId); + if (row == null) { + row = sheet.createRow(rowId); // 如果行不存在,则创建新行 + } + +// 获取当前行的第一个单元格 + Cell cell1 = row.getCell(0); + +// 如果单元格为 null,则创建一个新的单元格 + if (cell1 == null) { + cell1 = row.createCell(0); + } + +// 设置单元格的值 + cell1.setCellValue(entry.getKey()); + row.getCell(0).setCellValue(entry.getKey()); // 设置事件类型 + int cellIdx = 1; + for (String vehicleType : vehicleTypes) { + Integer count = entry.getValue().get(vehicleType); + XSSFCell cell = row.getCell(cellIdx); // 获取或创建单元格 + if (cell == null) { + cell = row.createCell(cellIdx); // 如果单元格不存在,则创建新单元格 + } + cell.setCellValue(count != null ? count : 0); // 设置单元格值 + cellIdx++; + } + rowId++; // 移动到下一行 + } + for (int i=sheet.getLastRowNum();i> result.size();i--){ + sheet.removeRow(sheet.getRow(i)); + } + + // 创建柱状图 + PoiUtil.wordExportChar(chart, "事故车型分析", singleBarSeriesNames, sheet); + + // 追加到同一个Word文档中 + mergeChart(chart, doc); + // 关闭复制的模板文档 + copiedTemplate.close(); + + + } catch (Exception e) { + e.printStackTrace(); + } + +// 换行 + createLineBreak(doc); + + + } + + /** + * 事故车型分析 查询 + * @param dcSdhsEventQuery + * @return + */ + @Override + public Map>accidentModelAnalysis(DcSdhsEventQuery dcSdhsEventQuery) { + List cacheList = redisCache.getCacheList(RedisKeyConstants.SDHS_EVENT); + +// 将查询开始时间和结束时间转换为 LocalDateTime + ZoneId zoneId = ZoneId.systemDefault(); // 获取系统默认时区 + LocalDateTime queryStart = dcSdhsEventQuery.getStartTime().toInstant().atZone(zoneId).toLocalDateTime(); + LocalDateTime queryEnd = dcSdhsEventQuery.getEndTime().toInstant().atZone(zoneId).toLocalDateTime(); + +// 在指定时间范围内的事件 + String direction = dcSdhsEventQuery.getDirection(); // 获取方向查询参数 + + List filteredEvents = cacheList.stream() + .filter(event -> { + LocalDateTime eventTime = event.getStartTime().toInstant().atZone(zoneId).toLocalDateTime(); + boolean timeCondition = + (eventTime.isAfter(queryStart) || eventTime.isEqual(queryStart)) && + (eventTime.isBefore(queryEnd) || eventTime.isEqual(queryEnd)); + + // 如果 direction 不为空,则添加方向过滤条件 + if (direction != null && !direction.isEmpty()) { + return timeCondition && direction.equals(event.getDirection()); + } else { + return timeCondition; + } + }) + .collect(Collectors.toList()); + // 初始化一个空的结果映射 + Map> result = new HashMap<>(); + + for (DcSdhsEvent event : filteredEvents) { + String eventType = event.getEventType(); + if ("交通事故".equals(eventType)) { + String eventSubclass = event.getEventSubclass(); + String carNums = event.getCarNum(); + + // 分割字符串,得到每种类型的车辆数量 + List carNumList = Arrays.asList(carNums.split(",")); + + // 如果结果映射中还没有这个事件子类,就初始化一个新的映射 + if (!result.containsKey(eventSubclass)) { + result.put(eventSubclass, new HashMap<>()); + } + + // 统计每种类型的车辆数量 + Map carNumCount = result.get(eventSubclass); + + for (String carNum : carNumList) { + // 检查字符串格式是否正确 + int index = carNum.indexOf("辆"); + if (index > 0) { // 确保 "辆" 的索引大于 0,表示字符串中包含 "辆" 且前面有字符 + // 提取车辆类型和数量 + String carType = carNum.substring(0, index-1); // 车辆类型 + int carCount = Integer.parseInt(carNum.substring(index - 1, index)); // 数量 + + // 在映射中累加数量 + carNumCount.merge(carType, carCount, Integer::sum); + } + } + } + } + + return result; + } + + /** + * 事故时间分析查询 + * @param dcSdhsEventQuery + * @return + */ + @Override + public Map accidentTimeAnalysis(DcSdhsEventQuery dcSdhsEventQuery) { + List cacheList = redisCache.getCacheList(RedisKeyConstants.SDHS_EVENT); +// 将查询开始时间和结束时间转换为 LocalDateTime + ZoneId zoneId = ZoneId.systemDefault(); // 获取系统默认时区 + LocalDateTime queryStart = dcSdhsEventQuery.getStartTime().toInstant().atZone(zoneId).toLocalDateTime(); + LocalDateTime queryEnd = dcSdhsEventQuery.getEndTime().toInstant().atZone(zoneId).toLocalDateTime(); + +// 在指定时间范围内的事件 + String direction = dcSdhsEventQuery.getDirection(); // 获取方向查询参数 + + List filteredEvents = cacheList.stream() + .filter(event -> { + LocalDateTime eventTime = event.getStartTime().toInstant().atZone(zoneId).toLocalDateTime(); + boolean timeCondition = + (eventTime.isAfter(queryStart) || eventTime.isEqual(queryStart)) && + (eventTime.isBefore(queryEnd) || eventTime.isEqual(queryEnd)); + + // 如果 direction 不为空,则添加方向过滤条件 + if (direction != null && !direction.isEmpty()) { + return timeCondition && direction.equals(event.getDirection()); + } else { + return timeCondition; + } + }) + .collect(Collectors.toList()); + +// 按小时分组并统计每个小时内的事件数量 + Map hourlyCounts = filteredEvents.stream() + .collect( + Collectors.groupingBy( + event -> event.getStartTime().toInstant().atZone(zoneId).toLocalDateTime().getHour(), + Collectors.counting() + ) + ); + +// 小时都出现在结果中,如果不存在设为 0 + for (int hour = 0; hour <= 23; hour++) { + hourlyCounts.merge(hour, 0L, Long::sum); + } + + return hourlyCounts; + } + + /** + * 事故时间分析导出 + * @param doc + * @param dcSdhsEventQuery + */ + @Override + public void exportAccidentTimeAnalysis(XWPFDocument doc,DcSdhsEventQuery dcSdhsEventQuery) { + + Map currentYearData = accidentTimeAnalysis(dcSdhsEventQuery); + // 获取一年前的日期 + Date startTime = dcSdhsEventQuery.getStartTime(); + Date endTime = dcSdhsEventQuery.getEndTime(); + // 使用 Calendar 计算一年前的时间 + Calendar calendar = Calendar.getInstance(); + calendar.setTime(startTime); // 设置当前时间为 startTime + calendar.add(Calendar.YEAR, -1); // 减去一年 + Date oneYearAgoStart = calendar.getTime(); // 一年前的开始时间 + calendar.setTime(endTime); // 设置当前时间为 endTime + calendar.add(Calendar.YEAR, -1); // 减去一年 + Date oneYearAgoEnd = calendar.getTime(); // 一年前的结束时间 + dcSdhsEventQuery.setStartTime(oneYearAgoStart); + dcSdhsEventQuery.setEndTime(oneYearAgoEnd); + Map lastYearData = accidentTimeAnalysis(dcSdhsEventQuery); + +// 创建表格 + XWPFTable table = doc.createTable(25,3); + CTTblWidth infoTableWidth = table.getCTTbl().addNewTblPr().addNewTblW(); + infoTableWidth.setType(STTblWidth.DXA); + infoTableWidth.setW(BigInteger.valueOf(UniversalEnum.NINE_THOUSAND_AND_SEVENTY_TWO.getNumber())); + +// 表头 + setTableFonts(table.getRow(0).getCell(0), "时段"); + setTableFonts(table.getRow(0).getCell(1), "今年同期"); + setTableFonts(table.getRow(0).getCell(2), "去年同期"); + +// 填充表格数据 + for (int i = 0; i < 24; i++) { + setTableFonts(table.getRow(i + 1).getCell(0), (i ) + "点"); + Long currentYearValue = currentYearData.getOrDefault(i, 0L); + setTableFonts(table.getRow(i + 1).getCell(1), String.valueOf(currentYearValue)); + Long lastYearValue = lastYearData.getOrDefault(i, 0L); + setTableFonts(table.getRow(i + 1).getCell(2), String.valueOf(lastYearValue)); + } + +// 图表部分 + try { + InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream("wordTemplate/accidentTimeAnalysis.docx"); + XWPFDocument copiedTemplate = new XWPFDocument(inputStream); + + List charts = copiedTemplate.getCharts(); + XWPFChart chart = charts.get(0); + XSSFWorkbook workbook = chart.getWorkbook(); + XSSFSheet sheet = workbook.getSheetAt(UniversalEnum.ZERO.getNumber()); + // 更新图表数据 + for (int i = UniversalEnum.ZERO.getNumber(); i < 24; i++){ + sheet.getRow(i + 1).getCell(0).setCellValue((i) + "点"); + int rowIndex = i + UniversalEnum.ONE.getNumber(); // 计算行索引 + Row row = sheet.getRow(rowIndex); + if (row == null) { + // 如果行不存在,则创建新行 + row = sheet.createRow(rowIndex); + } + + // 现在可以安全地访问或创建单元格了 + Cell cell = row.getCell(UniversalEnum.ONE.getNumber()); + if (cell == null) { + // 通常情况下,getCell 会创建新的单元格,但这里我们显式地检查以防万一 + cell = row.createCell(UniversalEnum.ONE.getNumber(), CellType.NUMERIC); + } + + // 设置单元格的值 + sheet.getRow(i + 1).getCell(1).setCellValue(currentYearData.get(i)); + int rowIndexTwo = i +1+ UniversalEnum.ONE.getNumber(); // 计算行索引 + Row rowTwo = sheet.getRow(rowIndexTwo); + if (rowTwo == null) { + // 如果行不存在,则创建新行 + rowTwo = sheet.createRow(rowIndexTwo); + } + + // 现在可以安全地访问或创建单元格了 + Cell cellTwo = row.getCell(UniversalEnum.TWO.getNumber()); + if (cellTwo == null) { + // 通常情况下,getCell 会创建新的单元格,但这里我们显式地检查以防万一 + cell = row.createCell(UniversalEnum.TWO.getNumber(), CellType.NUMERIC); + } + sheet.getRow(i + 1).getCell(2).setCellValue(lastYearData.get(i)); + //sheet.getRow(i+UniversalEnum.ONE.getNumber()).getCell(UniversalEnum.ONE.getNumber()).setCellValue(Long.parseLong(entries.get(i).getValue().toString())); + } +/* for (int i = 0; i < 24; i++) { + + sheet.getRow(i + 1).getCell(0).setCellValue((i) + "点"); + sheet.getRow(i + 1).getCell(1).setCellValue(currentYearData.get(i)); + sheet.getRow(i + 1).getCell(2).setCellValue(lastYearData.get(i)); + }*/ + + // 更新图表 + PoiUtil.wordExportChar(chart, "事故时间分析", new String[]{"今年同期", "去年同期"}, sheet); + + // 合并图表到Word文档 + mergeChart(chart, doc); + + // 关闭模板文档 + copiedTemplate.close(); + } catch (Exception e){ + e.printStackTrace(); + } + //换行 + createLineBreak(doc); + + + + } + + /** * @Description 提取文字中的数字 * diff --git a/zc-business/src/main/java/com/zc/business/service/impl/DcWarningServiceImpl.java b/zc-business/src/main/java/com/zc/business/service/impl/DcWarningServiceImpl.java index 3d8b547e..e0b5b92c 100644 --- a/zc-business/src/main/java/com/zc/business/service/impl/DcWarningServiceImpl.java +++ b/zc-business/src/main/java/com/zc/business/service/impl/DcWarningServiceImpl.java @@ -308,9 +308,9 @@ public class DcWarningServiceImpl implements IDcWarningService { } contentMap.put("event", dcWarning); if (dcWarning.getWarningSource()==UniversalEnum.FIVE.getNumber()){ - WebSocketService.broadcast(WebSocketEvent.EVENT, contentMap); //推送事件消息 0是交通事件 + WebSocketService.broadcast(UniversalEnum.TWO.getValue(), contentMap); //推送事件消息 2是扫码报警 }else { - WebSocketService.broadcast(WebSocketEvent.WARNING, contentMap); //推送事件消息 0不是感知事件 + WebSocketService.broadcast(WebSocketEvent.WARNING, contentMap); //推送事件消息 1感知事件 } dcEventService.getCountNum(); diff --git a/zc-business/src/main/resources/wordTemplate/accidentModelAnalysis.docx b/zc-business/src/main/resources/wordTemplate/accidentModelAnalysis.docx new file mode 100644 index 0000000000000000000000000000000000000000..7948e80015055ae1f81105f4ac47632e8cea0c14 GIT binary patch literal 23722 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 H7oh(G_Tp+P literal 0 HcmV?d00001 diff --git a/zc-business/src/main/resources/wordTemplate/accidentTimeAnalysis.docx b/zc-business/src/main/resources/wordTemplate/accidentTimeAnalysis.docx new file mode 100644 index 0000000000000000000000000000000000000000..0b895bc082313b301eb5440abe0157dd0f357c8a GIT binary patch literal 24243 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