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 cf572240..0ed2dc8f 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 @@ -108,10 +108,12 @@ public class DcSdhsEventController { } } - } else if (exportKey.contains("7")){ + } + if (exportKey.contains("7")){ PoiUtil.createHeading1(newDoc,"天气情况统计"); wordController.weather(newDoc); - } else if (exportKey.contains("8") || exportKey.contains("9")){ + } + if (exportKey.contains("8") || exportKey.contains("9")){ PoiUtil.createHeading1(newDoc,"交通量统计"); for (String trafficIncidentType : exportKey) { if ("8".equals(trafficIncidentType)){ @@ -123,11 +125,14 @@ public class DcSdhsEventController { } } - } else if (exportKey.contains("10")){ + } + if (exportKey.contains("10")){ PoiUtil.createHeading1(newDoc,"交通事故情况"); //交通事故类型统计 + dcSdhsEventService.exportAccidentType(newDoc,dcSdhsEventQuery); - } else if (exportKey.contains("11") || exportKey.contains("12")){ + } + if (exportKey.contains("11") || exportKey.contains("12")){ PoiUtil.createHeading1(newDoc,"交通量统计"); for (String trafficIncidentType : exportKey) { if ("11".equals(trafficIncidentType)){ @@ -182,5 +187,13 @@ public class DcSdhsEventController { return dcSdhsEventService.selectStationAnalysis(dcSdhsEventQuery); } + @ApiOperation("查询交通事故类型统计") + @PostMapping("/selectAccidentType") + public AjaxResult selectAccidentType(@RequestBody DcSdhsEventQuery dcSdhsEventQuery) + { + return dcSdhsEventService.selectAccidentType(dcSdhsEventQuery); + } + + } 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 a2aca0c6..b83c2f80 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 @@ -28,4 +28,8 @@ public interface IDcSdhsEventService AjaxResult selectStationAnalysis(DcSdhsEventQuery dcSdhsEventQuery); void exportStationAnalysis(XWPFDocument doc, DcSdhsEventQuery dcSdhsEventQuery); + + AjaxResult selectAccidentType(DcSdhsEventQuery dcSdhsEventQuery); + + void exportAccidentType(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 358bd2bf..2600d740 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 @@ -616,4 +616,123 @@ public class DcSdhsEventServiceImpl implements IDcSdhsEventService { } + /** + * @Description 查询交通事故类型统计 + * + * @author liuwenge + * @date 2024/8/21 10:56 + * @param dcSdhsEventQuery + * @return com.ruoyi.common.core.domain.AjaxResult + */ + @Override + public AjaxResult selectAccidentType(DcSdhsEventQuery dcSdhsEventQuery){ + List eventList = redisCache.getCacheList(RedisKeyConstants.SDHS_EVENT); + if (eventList == null || eventList.size() == 0){ + return AjaxResult.error("请先导入数据"); + } + + eventList = eventList.stream().filter(item -> item.getStartTime() != null + && item.getStartTime().getTime() >= dcSdhsEventQuery.getStartTime().getTime() + && item.getStartTime().getTime() <= dcSdhsEventQuery.getEndTime().getTime() + && "交通事故".equals(item.getEventType())) + .collect(Collectors.toList()); + List> list = new ArrayList<>(); + + if(eventList.size() > 0){ + //根据详细类型 分组计数 + Map subclass = eventList.stream().collect(Collectors.groupingBy(DcSdhsEvent::getEventSubclass,Collectors.counting())); + subclass.forEach((key,count)->{ + Map map = new HashMap<>(); + map.put("subclassName",key); + map.put("num",count); + list.add(map); + }); + } + + return AjaxResult.success(list); + } + + /** + * @Description 导出交通事故类型统计 + * + * @author liuwenge + * @date 2024/8/21 11:07 + * @param doc + * @param dcSdhsEventQuery + * @return void + */ + @Override + public void exportAccidentType(XWPFDocument doc, DcSdhsEventQuery dcSdhsEventQuery){ + AjaxResult ajaxResult = selectAccidentType(dcSdhsEventQuery); + if (ajaxResult.get("code").equals(UniversalEnum.TWO_HUNDRED.getNumber())) { + + PoiUtil.createHeading2(doc,"事故类型统计"); + List> data = (List>) ajaxResult.get("data"); + if (data != null && data.size() != UniversalEnum.ZERO.getNumber()){ + //插入图表 + try { + // 复制Word模板 + InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream("wordTemplate/sdhsEventChart.docx"); + + XWPFDocument copiedTemplate = new XWPFDocument(inputStream); + + //获取word中所有图表对象 + List charts = copiedTemplate.getCharts(); + XWPFChart chart = charts.get(1); + XSSFWorkbook workbook = chart.getWorkbook(); + XSSFSheet sheet = workbook.getSheetAt(UniversalEnum.ZERO.getNumber()); + + //系列信息 + String[] singleBarSeriesNames = {"数量"}; + //分类信息 + for (int i = UniversalEnum.ZERO.getNumber(); i < data.size(); i++){ + sheet.getRow(i+UniversalEnum.ONE.getNumber()).getCell(UniversalEnum.ZERO.getNumber()).setCellValue(data.get(i).get("subclassName").toString()); + sheet.getRow(i+UniversalEnum.ONE.getNumber()).getCell(UniversalEnum.ONE.getNumber()).setCellValue(Long.parseLong(data.get(i).get("num").toString())); + } + + for (int i = sheet.getLastRowNum(); i > data.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); + + + //插入表格 + XWPFTable table = doc.createTable(data.size()+1, 2); + //列宽自动分割 + 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), "数量"); + + //excel + for (int i = 0; i < data.size(); i++){ + setTableFonts(table.getRow(i+1).getCell(0), data.get(i).get("subclassName").toString()); + setTableFonts(table.getRow(i+1).getCell(1), data.get(i).get("num").toString()); + } + } else { + addDescription(doc,UniversalEnum.NO_DATA_AVAILABLE.getValue()); + } + + } else { + addDescription(doc,UniversalEnum.NO_DATA_AVAILABLE.getValue()); + } + } } diff --git a/zc-business/src/main/resources/wordTemplate/sdhsEventChart.docx b/zc-business/src/main/resources/wordTemplate/sdhsEventChart.docx index a6afb431..bd477e23 100644 Binary files a/zc-business/src/main/resources/wordTemplate/sdhsEventChart.docx and b/zc-business/src/main/resources/wordTemplate/sdhsEventChart.docx differ