From da67d78e98362dadcc30f2851871025089985cc3 Mon Sep 17 00:00:00 2001 From: lau572 <1010031226@qq.com> Date: Sat, 30 Mar 2024 14:36:49 +0800 Subject: [PATCH] =?UTF-8?q?=E9=AB=98=E9=80=9F=E9=80=9A=E8=A1=8C=E6=83=85?= =?UTF-8?q?=E5=86=B5=E5=BF=AB=E6=8A=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- zc-business/pom.xml | 25 + .../business/controller/WordController.java | 1050 +++++++++++++++++ .../mapper/DcTrafficIncidentsMapper.java | 93 ++ .../java/com/zc/business/utils/PoiUtil.java | 369 ++++++ .../business/DcTrafficIncidentsMapper.xml | 229 ++++ .../resources/wordTemplate/chartTemplate.docx | Bin 0 -> 71251 bytes .../wordTemplate/chartTemplate2.docx | Bin 0 -> 28097 bytes .../resources/wordTemplate/wordTemplate.docx | Bin 0 -> 16605 bytes 8 files changed, 1766 insertions(+) create mode 100644 zc-business/src/main/java/com/zc/business/controller/WordController.java create mode 100644 zc-business/src/main/java/com/zc/business/utils/PoiUtil.java create mode 100644 zc-business/src/main/resources/wordTemplate/chartTemplate.docx create mode 100644 zc-business/src/main/resources/wordTemplate/chartTemplate2.docx create mode 100644 zc-business/src/main/resources/wordTemplate/wordTemplate.docx diff --git a/zc-business/pom.xml b/zc-business/pom.xml index c0017e0b..6b870a73 100644 --- a/zc-business/pom.xml +++ b/zc-business/pom.xml @@ -47,6 +47,31 @@ com.ruoyi ruoyi-system + + + org.apache.poi + poi-ooxml + 4.1.2 + + + org.apache.poi + poi-ooxml-schemas + 4.1.2 + + + org.apache.poi + poi + 4.1.2 + + + + + com.deepoove + poi-tl + 1.9.1 + + com.zc 1.0.0 diff --git a/zc-business/src/main/java/com/zc/business/controller/WordController.java b/zc-business/src/main/java/com/zc/business/controller/WordController.java new file mode 100644 index 00000000..b2879914 --- /dev/null +++ b/zc-business/src/main/java/com/zc/business/controller/WordController.java @@ -0,0 +1,1050 @@ +package com.zc.business.controller; + +import com.ruoyi.common.config.RuoYiConfig; +import com.ruoyi.common.core.domain.AjaxResult; +import com.zc.business.mapper.DcTrafficIncidentsMapper; +import com.zc.business.utils.PoiUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +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.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.servlet.http.HttpServletResponse; +import java.io.InputStream; +import java.math.BigInteger; +import java.text.SimpleDateFormat; +import java.time.OffsetDateTime; +import java.time.format.DateTimeFormatter; +import java.util.*; + +import static com.zc.business.utils.PoiUtil.*; + +/** + * @Description 通行情况快报 + * + * @author liuwenge + * @date 2024/3/26 11:13 + */ +@Api(tags = "通行情况快报") +@RestController +@RequestMapping("/business/word") +public class WordController { + + @Autowired + private WeatherForecastController weatherForecastController; + @Autowired + private DcTrafficIncidentsMapper dcTrafficIncidentsMapper; + + + @PostMapping("/trafficSituationReport") + @ApiOperation("导出通行情况快报") + public void trafficSituationReport(HttpServletResponse response){ + try { + SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd"); + String date = df.format(new Date()); + String outputPath = RuoYiConfig.getDownloadPath() +"/济菏高速公路通行情况快报" + date + ".docx"; + // 读取Word模板 + InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream("wordTemplate/wordTemplate.docx"); + XWPFDocument newDoc = new XWPFDocument(inputStream); + + // 创建并插入带超链接的目录 + insertTOC(newDoc); + + + //换页 + XWPFParagraph breakPara = newDoc.createParagraph(); + breakPara.setAlignment(ParagraphAlignment.CENTER); + CTP ctP = breakPara.getCTP(); + CTR ctr = ctP.addNewR(); + CTBr ctBr = ctr.addNewBr(); + ctBr.setType(STBrType.PAGE); + + + + PoiUtil.createHeading1(newDoc,"总体情况"); + /** 天气情况统计 */ + weather(newDoc); + /** 交通管制情况 */ + trafficControl(newDoc); + /** 交通事故 */ + trafficAccident(newDoc); + /** 出入口车流量 */ + trafficFlow(newDoc); + + + + PoiUtil.createHeading1(newDoc,"收费站运行情况"); + /** 封闭原因统计 */ + trafficControlReasons(newDoc); + /** 封闭数量统计 */ + closedQuantity(newDoc); + PoiUtil.createHeading1(newDoc,"交通事故情况"); + /** 交通事故统计 */ + accidentType(newDoc); + + + PoiUtil.createHeading1(newDoc,"拥堵情况"); + /** 拥堵地点 */ + congestionLocation(newDoc); + /** 拥堵时长 */ + congestionDuration(newDoc); + /** 拥堵长度 */ + congestionMileage(newDoc); + + + + // 保存新生成的Word文件 +// FileOutputStream out = new FileOutputStream(outputPath); +// out.close(); + + // 不保存直接返回文件流 + newDoc.write(response.getOutputStream()); + + + // 关闭文档 + newDoc.close(); + System.out.println("生成通行情况快报成功!"); + } catch (Exception e) { + e.printStackTrace(); + } + } + + /** + * @Description 天气情况统计 + * + * @author liuwenge + * @date 2024/3/26 15:39 + * @param + * @return void + */ + + public void weather(XWPFDocument doc) { + + PoiUtil.createHeading2(doc,"天气情况统计"); + + XWPFTable table = doc.createTable(9, 25); + //列宽自动分割 + CTTblWidth infoTableWidth = table.getCTTbl().addNewTblPr().addNewTblW(); + infoTableWidth.setType(STTblWidth.DXA); + infoTableWidth.setW(BigInteger.valueOf(9072)); + + AjaxResult ajaxResult = weatherForecastController.hourlyWeather(); + if (ajaxResult.get("code").equals(200)) { + Map>> data = (Map>>) ajaxResult.get("data"); + data.keySet().forEach(key ->{ + if ("hourlyWeather1".equals(key)){ + setTableFonts(table.getRow(1).getCell(0), "长清区"); + List> weatherList = data.get(key); + for (int i = 0; i < weatherList.size(); i++) { + OffsetDateTime offsetDateTime = OffsetDateTime.parse(weatherList.get(i).get("fxTime").toString()); + setTableFonts(table.getRow(0).getCell(i+1),offsetDateTime.format(DateTimeFormatter.ofPattern("dd日HH时"))); + setTableFonts(table.getRow(1).getCell(i+1), weatherList.get(i).get("text").toString()); + } + } else if ("hourlyWeather2".equals(key)){ + setTableFonts(table.getRow(2).getCell(0), "平阴县"); + List> weatherList = data.get(key); + for (int i = 0; i < weatherList.size(); i++) { + setTableFonts(table.getRow(2).getCell(i+1), weatherList.get(i).get("text").toString()); + } + } else if ("hourlyWeather3".equals(key)){ + setTableFonts(table.getRow(3).getCell(0), "东平县"); + List> weatherList = data.get(key); + for (int i = 0; i < weatherList.size(); i++) { + setTableFonts(table.getRow(3).getCell(i+1), weatherList.get(i).get("text").toString()); + } + } else if ("hourlyWeather4".equals(key)){ + setTableFonts(table.getRow(4).getCell(0), "汶上县"); + List> weatherList = data.get(key); + for (int i = 0; i < weatherList.size(); i++) { + setTableFonts(table.getRow(4).getCell(i+1), weatherList.get(i).get("text").toString()); + } + } else if ("hourlyWeather5".equals(key)){ + setTableFonts(table.getRow(5).getCell(0), "梁山县"); + List> weatherList = data.get(key); + for (int i = 0; i < weatherList.size(); i++) { + setTableFonts(table.getRow(5).getCell(i+1), weatherList.get(i).get("text").toString()); + } + } else if ("hourlyWeather6".equals(key)){ + setTableFonts(table.getRow(6).getCell(0), "嘉祥县"); + List> weatherList = data.get(key); + for (int i = 0; i < weatherList.size(); i++) { + setTableFonts(table.getRow(6).getCell(i+1), weatherList.get(i).get("text").toString()); + } + } else if ("hourlyWeather7".equals(key)){ + setTableFonts(table.getRow(7).getCell(0), "巨野县"); + List> weatherList = data.get(key); + for (int i = 0; i < weatherList.size(); i++) { + setTableFonts(table.getRow(7).getCell(i+1), weatherList.get(i).get("text").toString()); + } + } else if ("hourlyWeather8".equals(key)){ + setTableFonts(table.getRow(8).getCell(0), "郓城县"); + List> weatherList = data.get(key); + for (int i = 0; i < weatherList.size(); i++) { + setTableFonts(table.getRow(8).getCell(i+1), weatherList.get(i).get("text").toString()); + } + } + }); + } + + //换行 + createLineBreak(doc); + + + } + + + /** + * @Description 交通管制情况 + * + * @author liuwenge + * @date 2024/3/26 17:36 + * @param doc + * @return void + */ + public void trafficControl(XWPFDocument doc) { + PoiUtil.createHeading2(doc, "交通管制情况"); + + + SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + + + Calendar calendar = Calendar.getInstance(); + //将天至1 + calendar.set(Calendar.DAY_OF_MONTH, 1); + //将小时至0 + calendar.set(Calendar.HOUR_OF_DAY, 0); + //将分钟至0 + calendar.set(Calendar.MINUTE, 0); + //将秒至0 + calendar.set(Calendar.SECOND,0); + //将毫秒至0 + calendar.set(Calendar.MILLISECOND, 0); + //获得当前月第一天 + Date date = calendar.getTime(); + String startDate = dateFormat.format(date); + String endDate = dateFormat.format(new Date()); + + + List> tollStationAnalysisList = dcTrafficIncidentsMapper.selectTollStationAnalysisByFacility(null,startDate,endDate); + if (tollStationAnalysisList != null && tollStationAnalysisList.size() > 0) { + + XWPFTable table = doc.createTable(11, 4); + //列宽自动分割 + CTTblWidth infoTableWidth = table.getCTTbl().addNewTblPr().addNewTblW(); + infoTableWidth.setType(STTblWidth.DXA); + infoTableWidth.setW(BigInteger.valueOf(9072)); + + setTableFonts(table.getRow(0).getCell(1), "封闭"); + setTableFonts(table.getRow(0).getCell(2), "限行"); + setTableFonts(table.getRow(0).getCell(3), "间隔放行"); + + //excel + for (int i = 0; i < tollStationAnalysisList.size(); i++){ + setTableFonts(table.getRow(i+1).getCell(0), tollStationAnalysisList.get(i).get("facilityName").toString()); + setTableFonts(table.getRow(i+1).getCell(1), tollStationAnalysisList.get(i).get("facilityClose").toString()); + setTableFonts(table.getRow(i+1).getCell(2), tollStationAnalysisList.get(i).get("facilityRestriction").toString()); + setTableFonts(table.getRow(i+1).getCell(3), tollStationAnalysisList.get(i).get("facilityInterval").toString()); + } + + try { + + + // 复制Word模板 + InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream("wordTemplate/chartTemplate.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 = {"封闭","限行","间隔放行"}; + //分类信息 + for (int i = 0; i < tollStationAnalysisList.size(); i++){ + sheet.getRow(i+1).getCell(0).setCellValue(tollStationAnalysisList.get(i).get("facilityName").toString()); + sheet.getRow(i+1).getCell(1).setCellValue(Long.parseLong(tollStationAnalysisList.get(i).get("facilityClose").toString())); + sheet.getRow(i+1).getCell(2).setCellValue(Long.parseLong(tollStationAnalysisList.get(i).get("facilityRestriction").toString())); + sheet.getRow(i+1).getCell(3).setCellValue(Long.parseLong(tollStationAnalysisList.get(i).get("facilityInterval").toString())); + + } + PoiUtil.wordExportChar(chart, "交通管制情况", singleBarSeriesNames,sheet ); + + + // 追加到同一个Word文档中 + mergeChart(chart,doc); +// PoiUtil.mergeDoc(copiedTemplate, doc); + + + // 关闭复制的模板文档 + copiedTemplate.close(); + + } catch (Exception e){ + e.printStackTrace(); + } + + } + + //换行 + createLineBreak(doc); + + + List> trafficControlAnalysisList = dcTrafficIncidentsMapper.selectTrafficControlAnalysis(startDate,endDate); + if (trafficControlAnalysisList != null && trafficControlAnalysisList.size() > 0) { + + XWPFTable table = doc.createTable(7, 4); + //列宽自动分割 + CTTblWidth infoTableWidth = table.getCTTbl().addNewTblPr().addNewTblW(); + infoTableWidth.setType(STTblWidth.DXA); + infoTableWidth.setW(BigInteger.valueOf(9072)); + + setTableFonts(table.getRow(0).getCell(1), "封闭"); + setTableFonts(table.getRow(0).getCell(2), "限行"); + setTableFonts(table.getRow(0).getCell(3), "间隔放行"); + + //excel + for (int i = 0; i < trafficControlAnalysisList.size(); i++){ + setTableFonts(table.getRow(i+1).getCell(0), trafficControlAnalysisList.get(i).get("controlCauseName").toString()); + setTableFonts(table.getRow(i+1).getCell(1), trafficControlAnalysisList.get(i).get("facilityClose").toString()); + setTableFonts(table.getRow(i+1).getCell(2), trafficControlAnalysisList.get(i).get("facilityRestriction").toString()); + setTableFonts(table.getRow(i+1).getCell(3), trafficControlAnalysisList.get(i).get("facilityInterval").toString()); + } + + try { + + + // 复制Word模板 + InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream("wordTemplate/chartTemplate.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 = {"封闭","限行","间隔放行"}; + //分类信息 + for (int i = 0; i < trafficControlAnalysisList.size(); i++){ + sheet.getRow(i+1).getCell(0).setCellValue(trafficControlAnalysisList.get(i).get("controlCauseName").toString()); + sheet.getRow(i+1).getCell(1).setCellValue(Long.parseLong(trafficControlAnalysisList.get(i).get("facilityClose").toString())); + sheet.getRow(i+1).getCell(2).setCellValue(Long.parseLong(trafficControlAnalysisList.get(i).get("facilityRestriction").toString())); + sheet.getRow(i+1).getCell(3).setCellValue(Long.parseLong(trafficControlAnalysisList.get(i).get("facilityInterval").toString())); + } + for (int i = sheet.getLastRowNum(); i > trafficControlAnalysisList.size();i--){ + sheet.removeRow(sheet.getRow(i)); + } + + PoiUtil.wordExportChar(chart, "交通管制情况", singleBarSeriesNames,sheet ); + + // 追加到同一个Word文档中 + mergeChart(chart,doc); +// PoiUtil.mergeDoc(copiedTemplate, doc); + + + // 关闭复制的模板文档 + copiedTemplate.close(); + + } catch (Exception e){ + e.printStackTrace(); + } + + } + + //换行 + createLineBreak(doc); + + } + + + /** + * @Description 交通事故 + * + * @author liuwenge + * @date 2024/3/27 20:06 + * @param doc + * @return void + */ + public void trafficAccident(XWPFDocument doc) { + PoiUtil.createHeading2(doc, "交通事故"); + + + List> trafficAccidentList = dcTrafficIncidentsMapper.selectTrafficAccidentAnalysis(); + if (trafficAccidentList != null && trafficAccidentList.size() > 0) { + + XWPFTable table = doc.createTable(2, 4); + //列宽自动分割 + CTTblWidth infoTableWidth = table.getCTTbl().addNewTblPr().addNewTblW(); + infoTableWidth.setType(STTblWidth.DXA); + infoTableWidth.setW(BigInteger.valueOf(9072)); + + + //表格插入总数 + setTableFonts(table.getRow(0).getCell(0), "事故数量"); + Long allNum = 0L; + for (Map map : trafficAccidentList) { + allNum += Long.parseLong(map.get("num").toString()); + } + setTableFonts(table.getRow(1).getCell(0), allNum.toString()); + + //excel + for (int i = 0; i < trafficAccidentList.size(); i++){ + setTableFonts(table.getRow(0).getCell(i+1), trafficAccidentList.get(i).get("eventStateLabel").toString()); + setTableFonts(table.getRow(1).getCell(i+1), trafficAccidentList.get(i).get("num").toString()); + } + + try { + + + // 复制Word模板 + InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream("wordTemplate/chartTemplate.docx"); + XWPFDocument copiedTemplate = new XWPFDocument(inputStream); + + //获取word中所有图表对象 + List charts = copiedTemplate.getCharts(); + XWPFChart chart = charts.get(1); + XSSFWorkbook workbook = chart.getWorkbook(); + XSSFSheet sheet = workbook.getSheetAt(0); + //系列信息 + String[] singleBarSeriesNames = {"数量"}; + //分类信息 + for (int i = 0; i < trafficAccidentList.size(); i++){ + sheet.getRow(i+1).getCell(0).setCellValue(trafficAccidentList.get(i).get("eventStateLabel").toString()); + sheet.getRow(i+1).getCell(1).setCellValue(Long.parseLong(trafficAccidentList.get(i).get("num").toString())); + + } + for (int i = sheet.getLastRowNum(); i > trafficAccidentList.size();i--){ + sheet.removeRow(sheet.getRow(i)); + } + PoiUtil.wordExportChar(chart, "交通事故", singleBarSeriesNames,sheet ); + + // 追加到同一个Word文档中 + mergeChart(chart,doc); +// PoiUtil.mergeDoc(copiedTemplate, doc); + // 关闭复制的模板文档 + copiedTemplate.close(); + + } catch (Exception e){ + e.printStackTrace(); + } + + } + + //换行 + createLineBreak(doc); + + + + } + + + /** + * @Description 出入口车流量 + * + * @author liuwenge + * @date 2024/3/28 9:14 + * @param doc + * @return void + */ + public void trafficFlow(XWPFDocument doc) { + PoiUtil.createHeading2(doc, "出入口车流量"); + + + List> trafficFlowList = new ArrayList<>(); + Map trafficFlow = new HashMap<>(); + trafficFlow.put("label","入口"); + trafficFlow.put("num","0"); + trafficFlowList.add(trafficFlow); + + trafficFlow = new HashMap<>(); + trafficFlow.put("label","出口"); + trafficFlow.put("num","0"); + trafficFlowList.add(trafficFlow); + + if (trafficFlowList != null && trafficFlowList.size() > 0) { + + XWPFTable table = doc.createTable(2, 3); + //列宽自动分割 + CTTblWidth infoTableWidth = table.getCTTbl().addNewTblPr().addNewTblW(); + infoTableWidth.setType(STTblWidth.DXA); + infoTableWidth.setW(BigInteger.valueOf(9072)); + + + //表格插入总数 + setTableFonts(table.getRow(0).getCell(0), "合计"); + Long allNum = 0L; + for (Map map : trafficFlowList) { + allNum += Long.parseLong(map.get("num").toString()); + } + setTableFonts(table.getRow(1).getCell(0), allNum.toString()); + + //excel + for (int i = 0; i < trafficFlowList.size(); i++){ + setTableFonts(table.getRow(0).getCell(i+1), trafficFlowList.get(i).get("label").toString()); + setTableFonts(table.getRow(1).getCell(i+1), trafficFlowList.get(i).get("num").toString()); + } + + try { + + + // 复制Word模板 + InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream("wordTemplate/chartTemplate.docx"); + XWPFDocument copiedTemplate = new XWPFDocument(inputStream); + + //获取word中所有图表对象 + List charts = copiedTemplate.getCharts(); + XWPFChart chart = charts.get(1); + XSSFWorkbook workbook = chart.getWorkbook(); + XSSFSheet sheet = workbook.getSheetAt(0); + + //系列信息 + String[] singleBarSeriesNames = {"数量"}; + //分类信息 + for (int i = 0; i < trafficFlowList.size(); i++){ + sheet.getRow(i+1).getCell(0).setCellValue(trafficFlowList.get(i).get("label").toString()); + sheet.getRow(i+1).getCell(1).setCellValue(Long.parseLong(trafficFlowList.get(i).get("num").toString())); + + } + for (int i = sheet.getLastRowNum(); i > trafficFlowList.size();i--){ + sheet.removeRow(sheet.getRow(i)); + } + PoiUtil.wordExportChar(chart, "出入口车流量", singleBarSeriesNames,sheet ); + + // 追加到同一个Word文档中 + mergeChart(chart,doc); +// PoiUtil.mergeDoc(copiedTemplate, doc); + + // 关闭复制的模板文档 + copiedTemplate.close(); + + } catch (Exception e){ + e.printStackTrace(); + } + + } + + //换行 + createLineBreak(doc); + + + } + + + /** + * @Description 封闭原因统计 + * + * @author liuwenge + * @date 2024/3/28 11:29 + * @param doc + * @return void + */ + public void trafficControlReasons(XWPFDocument doc) { + PoiUtil.createHeading2(doc, "封闭原因统计"); + + SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + Calendar calendar = Calendar.getInstance(); + //将天至1 + calendar.set(Calendar.DAY_OF_MONTH, 1); + //将小时至0 + calendar.set(Calendar.HOUR_OF_DAY, 0); + //将分钟至0 + calendar.set(Calendar.MINUTE, 0); + //将秒至0 + calendar.set(Calendar.SECOND,0); + //将毫秒至0 + calendar.set(Calendar.MILLISECOND, 0); + //获得当前月第一天 + Date date = calendar.getTime(); + String startDate = dateFormat.format(date); + String endDate = dateFormat.format(new Date()); + + + //封闭 + List> closeList = dcTrafficIncidentsMapper.selectTrafficControlReasons("1",startDate,endDate); + //限行 + List> restrictionList = dcTrafficIncidentsMapper.selectTrafficControlReasons("2",startDate,endDate); + + + + if (closeList != null && closeList.size() > 0 && restrictionList != null && restrictionList.size() > 0 ) { + + XWPFTable table = doc.createTable(13, 3); + //列宽自动分割 + CTTblWidth infoTableWidth = table.getCTTbl().addNewTblPr().addNewTblW(); + infoTableWidth.setType(STTblWidth.DXA); + infoTableWidth.setW(BigInteger.valueOf(9072)); + + setTableFonts(table.getRow(0).getCell(1), "封闭"); + setTableFonts(table.getRow(0).getCell(2), "限行"); + + //excel + for (int i = 0; i < closeList.size(); i++){ + setTableFonts(table.getRow(i+1).getCell(0), closeList.get(i).get("causeTypeName").toString()); + setTableFonts(table.getRow(i+1).getCell(1), closeList.get(i).get("num").toString()); + setTableFonts(table.getRow(i+1).getCell(2), restrictionList.get(i).get("num").toString()); + } + + try { + + + // 复制Word模板 + InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream("wordTemplate/chartTemplate.docx"); + XWPFDocument copiedTemplate = new XWPFDocument(inputStream); + + //获取word中所有图表对象 + List charts = copiedTemplate.getCharts(); + XWPFChart chart = charts.get(2); + XSSFWorkbook workbook = chart.getWorkbook(); + XSSFSheet sheet = workbook.getSheetAt(0); + + //系列信息 + String[] singleBarSeriesNames = {"封闭","限行"}; + //分类信息 + for (int i = 0; i < closeList.size(); i++){ + sheet.getRow(i+1).getCell(0).setCellValue(closeList.get(i).get("causeTypeName").toString()); + sheet.getRow(i+1).getCell(1).setCellValue(Long.parseLong(closeList.get(i).get("num").toString())); + sheet.getRow(i+1).getCell(2).setCellValue(Long.parseLong(restrictionList.get(i).get("num").toString())); + + } + PoiUtil.wordExportChar(chart, "封闭原因统计", singleBarSeriesNames,sheet ); + + + // 追加到同一个Word文档中 + mergeChart(chart,doc); +// PoiUtil.mergeDoc(copiedTemplate, doc); + + + // 关闭复制的模板文档 + copiedTemplate.close(); + + } catch (Exception e){ + e.printStackTrace(); + } + } + + //换行 + createLineBreak(doc); + } + + + /** + * @Description 封闭数量统计 + * + * @author liuwenge + * @date 2024/3/28 11:29 + * @param doc + * @return void + */ + public void closedQuantity(XWPFDocument doc) { + PoiUtil.createHeading2(doc, "封闭数量统计"); + + List> closedQuantityList = dcTrafficIncidentsMapper.selectClosedQuantity(); + + if (closedQuantityList != null && closedQuantityList.size() > 0) { + + XWPFTable table = doc.createTable(25, 2); + //列宽自动分割 + CTTblWidth infoTableWidth = table.getCTTbl().addNewTblPr().addNewTblW(); + infoTableWidth.setType(STTblWidth.DXA); + infoTableWidth.setW(BigInteger.valueOf(9072)); + + setTableFonts(table.getRow(0).getCell(0), "时间"); + setTableFonts(table.getRow(0).getCell(1), "数量"); + + //excel + for (int i = 0; i < closedQuantityList.size(); i++){ + setTableFonts(table.getRow(i+1).getCell(0), closedQuantityList.get(i).get("hours").toString()); + setTableFonts(table.getRow(i+1).getCell(1), closedQuantityList.get(i).get("num").toString()); + } + + try { + + + // 复制Word模板 + InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream("wordTemplate/chartTemplate.docx"); + XWPFDocument copiedTemplate = new XWPFDocument(inputStream); + + //获取word中所有图表对象 + List charts = copiedTemplate.getCharts(); + XWPFChart chart = charts.get(3); + XSSFWorkbook workbook = chart.getWorkbook(); + XSSFSheet sheet = workbook.getSheetAt(0); + + //系列信息 + String[] singleBarSeriesNames = {"数量"}; + //分类信息 + for (int i = 0; i < closedQuantityList.size(); i++){ + sheet.getRow(i+1).getCell(0).setCellValue(closedQuantityList.get(i).get("hours").toString()); + sheet.getRow(i+1).getCell(1).setCellValue(Long.parseLong(closedQuantityList.get(i).get("num").toString())); + + } + PoiUtil.wordExportChar(chart, "封闭数量统计", singleBarSeriesNames,sheet ); + + + // 追加到同一个Word文档中 + mergeChart(chart,doc); +// PoiUtil.mergeDoc(copiedTemplate, doc); + + + // 关闭复制的模板文档 + copiedTemplate.close(); + + } catch (Exception e){ + e.printStackTrace(); + } + } + + //换行 + createLineBreak(doc); + } + + + /** + * @Description 事故类型统计 + * + * @author liuwenge + * @date 2024/3/28 11:29 + * @param doc + * @return void + */ + public void accidentType(XWPFDocument doc) { + PoiUtil.createHeading2(doc, "事故类型统计"); + + List> accidentTypeList = dcTrafficIncidentsMapper.selectAccidentTypeStatistics(); + + if (accidentTypeList != null && accidentTypeList.size() > 0) { + + XWPFTable table = doc.createTable(6, 2); + //列宽自动分割 + CTTblWidth infoTableWidth = table.getCTTbl().addNewTblPr().addNewTblW(); + infoTableWidth.setType(STTblWidth.DXA); + infoTableWidth.setW(BigInteger.valueOf(9072)); + + setTableFonts(table.getRow(0).getCell(0), "事故类型"); + setTableFonts(table.getRow(0).getCell(1), "数量"); + + //excel + for (int i = 0; i < accidentTypeList.size(); i++){ + setTableFonts(table.getRow(i+1).getCell(0), accidentTypeList.get(i).get("eventSubclassName").toString()); + setTableFonts(table.getRow(i+1).getCell(1), accidentTypeList.get(i).get("num").toString()); + } + + try { + + + // 复制Word模板 + InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream("wordTemplate/chartTemplate2.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 = {"数量"}; + //分类信息 + for (int i = 0; i < accidentTypeList.size(); i++){ + sheet.getRow(i+1).getCell(0).setCellValue(accidentTypeList.get(i).get("eventSubclassName").toString()); + sheet.getRow(i+1).getCell(1).setCellValue(Long.parseLong(accidentTypeList.get(i).get("num").toString())); + + } + PoiUtil.wordExportChar(chart, "事故类型统计", singleBarSeriesNames,sheet ); + + + // 追加到同一个Word文档中 + mergeChart(chart,doc); +// PoiUtil.mergeDoc(copiedTemplate, doc); + + + // 关闭复制的模板文档 + copiedTemplate.close(); + + } catch (Exception e){ + e.printStackTrace(); + } + } + + //换行 + createLineBreak(doc); + + List> trafficAccidentsList = dcTrafficIncidentsMapper.selectTrafficAccidents(); + + if (trafficAccidentsList != null && trafficAccidentsList.size() > 0) { + + XWPFTable table = doc.createTable(25, 2); + //列宽自动分割 + CTTblWidth infoTableWidth = table.getCTTbl().addNewTblPr().addNewTblW(); + infoTableWidth.setType(STTblWidth.DXA); + infoTableWidth.setW(BigInteger.valueOf(9072)); + + setTableFonts(table.getRow(0).getCell(0), "时间"); + setTableFonts(table.getRow(0).getCell(1), "数量"); + + //excel + for (int i = 0; i < trafficAccidentsList.size(); i++){ + setTableFonts(table.getRow(i+1).getCell(0), trafficAccidentsList.get(i).get("hours").toString()); + setTableFonts(table.getRow(i+1).getCell(1), trafficAccidentsList.get(i).get("num").toString()); + } + + try { + + + // 复制Word模板 + InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream("wordTemplate/chartTemplate.docx"); + XWPFDocument copiedTemplate = new XWPFDocument(inputStream); + + //获取word中所有图表对象 + List charts = copiedTemplate.getCharts(); + XWPFChart chart = charts.get(3); + XSSFWorkbook workbook = chart.getWorkbook(); + XSSFSheet sheet = workbook.getSheetAt(0); + + //系列信息 + String[] singleBarSeriesNames = {"数量"}; + //分类信息 + for (int i = 0; i < trafficAccidentsList.size(); i++){ + sheet.getRow(i+1).getCell(0).setCellValue(trafficAccidentsList.get(i).get("hours").toString()); + sheet.getRow(i+1).getCell(1).setCellValue(Long.parseLong(trafficAccidentsList.get(i).get("num").toString())); + + } + PoiUtil.wordExportChar(chart, "事故时间统计", singleBarSeriesNames,sheet ); + + + // 追加到同一个Word文档中 + mergeChart(chart,doc); +// PoiUtil.mergeDoc(copiedTemplate, doc); + + + // 关闭复制的模板文档 + copiedTemplate.close(); + + } catch (Exception e){ + e.printStackTrace(); + } + } + + //换行 + createLineBreak(doc); + } + + + + + /** + * @Description 拥堵地点 + * + * @author liuwenge + * @date 2024/3/28 16:56 + * @param doc + * @return void + */ + public void congestionLocation(XWPFDocument doc) { + PoiUtil.createHeading2(doc, "拥堵地点"); + + List> congestionLocationList = dcTrafficIncidentsMapper.selectCongestionLocation(); + + if (congestionLocationList != null && congestionLocationList.size() > 0) { + + XWPFTable table = doc.createTable(2, 5); + //列宽自动分割 + CTTblWidth infoTableWidth = table.getCTTbl().addNewTblPr().addNewTblW(); + infoTableWidth.setType(STTblWidth.DXA); + infoTableWidth.setW(BigInteger.valueOf(9072)); + + //表格插入总数 + setTableFonts(table.getRow(0).getCell(0), "合计"); + Long allNum = 0L; + for (Map map : congestionLocationList) { + allNum += Long.parseLong(map.get("num").toString()); + } + setTableFonts(table.getRow(1).getCell(0), allNum.toString()); + + //excel + for (int i = 0; i < congestionLocationList.size(); i++){ + setTableFonts(table.getRow(0).getCell(i+1), congestionLocationList.get(i).get("eventSubclassLabel").toString()); + setTableFonts(table.getRow(1).getCell(i+1), congestionLocationList.get(i).get("num").toString()); + } + + + + try { + + + // 复制Word模板 + InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream("wordTemplate/chartTemplate.docx"); + XWPFDocument copiedTemplate = new XWPFDocument(inputStream); + + //获取word中所有图表对象 + List charts = copiedTemplate.getCharts(); + XWPFChart chart = charts.get(1); + XSSFWorkbook workbook = chart.getWorkbook(); + XSSFSheet sheet = workbook.getSheetAt(0); + + //系列信息 + String[] singleBarSeriesNames = {"数量"}; + //分类信息 + for (int i = 0; i < congestionLocationList.size(); i++){ + sheet.getRow(i+1).getCell(0).setCellValue(congestionLocationList.get(i).get("eventSubclassLabel").toString()); + sheet.getRow(i+1).getCell(1).setCellValue(Long.parseLong(congestionLocationList.get(i).get("num").toString())); + + } + for (int i = sheet.getLastRowNum(); i > congestionLocationList.size();i--){ + sheet.removeRow(sheet.getRow(i)); + } + PoiUtil.wordExportChar(chart, "拥堵地点", singleBarSeriesNames,sheet ); + + + // 追加到同一个Word文档中 + mergeChart(chart,doc); +// PoiUtil.mergeDoc(copiedTemplate, doc); + + + // 关闭复制的模板文档 + copiedTemplate.close(); + + } catch (Exception e){ + e.printStackTrace(); + } + } + + //换行 + createLineBreak(doc); + } + + /** + * @Description 拥堵时长 + * + * @author liuwenge + * @date 2024/3/28 17:27 + * @param doc + * @return void + */ + public void congestionDuration(XWPFDocument doc) { + PoiUtil.createHeading2(doc, "拥堵时长"); + + SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + Calendar calendar = Calendar.getInstance(); + //将天至1 + calendar.set(Calendar.DAY_OF_MONTH, 1); + //将小时至0 + calendar.set(Calendar.HOUR_OF_DAY, 0); + //将分钟至0 + calendar.set(Calendar.MINUTE, 0); + //将秒至0 + calendar.set(Calendar.SECOND,0); + //将毫秒至0 + calendar.set(Calendar.MILLISECOND, 0); + //获得当前月第一天 + Date date = calendar.getTime(); + String startDate = dateFormat.format(date); + String endDate = dateFormat.format(new Date()); + + List> congestionDurationList = dcTrafficIncidentsMapper.selectCongestionDuration(startDate,endDate); + + if (congestionDurationList != null && congestionDurationList.size() > 0) { + + XWPFTable table = doc.createTable(2, 1); + //列宽自动分割 + CTTblWidth infoTableWidth = table.getCTTbl().addNewTblPr().addNewTblW(); + infoTableWidth.setType(STTblWidth.DXA); + infoTableWidth.setW(BigInteger.valueOf(9072)); + + setTableFonts(table.getRow(0).getCell(0), "合计"); + setTableFonts(table.getRow(1).getCell(0), congestionDurationList.get(0).get("minuteTime").toString()); + } + + //换行 + createLineBreak(doc); + } + + /** + * @Description 拥堵长度 + * + * @author liuwenge + * @date 2024/3/28 19:31 + * @param doc + * @return void + */ + public void congestionMileage(XWPFDocument doc) { + PoiUtil.createHeading2(doc, "拥堵长度"); + + List> congestionMileageList = dcTrafficIncidentsMapper.selectCongestionMileage(); + + if (congestionMileageList != null && congestionMileageList.size() > 0) { + + XWPFTable table = doc.createTable(2, 6); + //列宽自动分割 + CTTblWidth infoTableWidth = table.getCTTbl().addNewTblPr().addNewTblW(); + infoTableWidth.setType(STTblWidth.DXA); + infoTableWidth.setW(BigInteger.valueOf(9072)); + + //表格插入总数 + setTableFonts(table.getRow(0).getCell(0), "合计"); + Long allNum = 0L; + for (Map map : congestionMileageList) { + allNum += Long.parseLong(map.get("num").toString()); + } + setTableFonts(table.getRow(1).getCell(0), allNum.toString()); + + //excel + for (int i = 0; i < congestionMileageList.size(); i++){ + setTableFonts(table.getRow(0).getCell(i+1), congestionMileageList.get(i).get("mileageType").toString()); + setTableFonts(table.getRow(1).getCell(i+1), congestionMileageList.get(i).get("num").toString()); + } + + + try { + + + // 复制Word模板 + InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream("wordTemplate/chartTemplate.docx"); + XWPFDocument copiedTemplate = new XWPFDocument(inputStream); + + //获取word中所有图表对象 + List charts = copiedTemplate.getCharts(); + XWPFChart chart = charts.get(1); + XSSFWorkbook workbook = chart.getWorkbook(); + XSSFSheet sheet = workbook.getSheetAt(0); + + //系列信息 + String[] singleBarSeriesNames = {"数量"}; + //分类信息 + for (int i = 0; i < congestionMileageList.size(); i++){ + sheet.getRow(i+1).getCell(0).setCellValue(congestionMileageList.get(i).get("mileageType").toString()); + sheet.getRow(i+1).getCell(1).setCellValue(Long.parseLong(congestionMileageList.get(i).get("num").toString())); + + } + for (int i = sheet.getLastRowNum(); i > congestionMileageList.size();i--){ + sheet.removeRow(sheet.getRow(i)); + } + PoiUtil.wordExportChar(chart, "拥堵长度", singleBarSeriesNames,sheet ); + + + // 追加到同一个Word文档中 + mergeChart(chart,doc); +// PoiUtil.mergeDoc(copiedTemplate, doc); + + + // 关闭复制的模板文档 + copiedTemplate.close(); + + } catch (Exception e){ + e.printStackTrace(); + } + } + + //换行 + createLineBreak(doc); + } + +} diff --git a/zc-business/src/main/java/com/zc/business/mapper/DcTrafficIncidentsMapper.java b/zc-business/src/main/java/com/zc/business/mapper/DcTrafficIncidentsMapper.java index d01d8a09..dfaf12ee 100644 --- a/zc-business/src/main/java/com/zc/business/mapper/DcTrafficIncidentsMapper.java +++ b/zc-business/src/main/java/com/zc/business/mapper/DcTrafficIncidentsMapper.java @@ -236,4 +236,97 @@ public interface DcTrafficIncidentsMapper { */ List> selectEventTypeAnalysis(@Param("direction") String direction,@Param("type") String type,@Param("startTime") String startTime); + /** + * @Description 交通管制情况 + * + * @author liuwenge + * @date 2024/3/27 18:32 + * @param startTime + * @param endTime + * @return java.util.List> + */ + List> selectTrafficControlAnalysis(@Param("startTime") String startTime,@Param("endTime") String endTime); + + /** + * @Description 交通事故统计 + * + * @author liuwenge + * @date 2024/3/27 20:04 + * @param + * @return java.util.List> + */ + List> selectTrafficAccidentAnalysis(); + + /** + * @Description 封闭原因统计 + * + * @author liuwenge + * @date 2024/3/28 14:47 + * @param controlType + * @param startTime + * @param endTime + * @return java.util.List> + */ + List> selectTrafficControlReasons(@Param("controlType") String controlType,@Param("startTime") String startTime,@Param("endTime") String endTime); + + + /** + * @Description 封闭数量统计 + * + * @author liuwenge + * @date 2024/3/28 14:51 + * @param + * @return java.util.List> + */ + List> selectClosedQuantity(); + + /** + * @Description 事故类型统计--当月按类型 + * + * @author liuwenge + * @date 2024/3/28 15:19 + * @param + * @return java.util.List> + */ + List> selectAccidentTypeStatistics(); + + /** + * @Description 事故类型统计--当天按小时 + * + * @author liuwenge + * @date 2024/3/28 16:28 + * @param + * @return java.util.List> + */ + List> selectTrafficAccidents(); + + /** + * @Description 拥堵地点 + * + * @author liuwenge + * @date 2024/3/28 16:55 + * @param + * @return java.util.List> + */ + List> selectCongestionLocation(); + + /** + * @Description 拥堵时长 + * + * @author liuwenge + * @date 2024/3/28 17:23 + * @param + * @return java.util.List> + */ + List> selectCongestionDuration(@Param("startTime") String startTime,@Param("endTime") String endTime); + + /** + * @Description 拥堵长度 + * + * @author liuwenge + * @date 2024/3/28 19:30 + * @return java.util.List> + */ + List> selectCongestionMileage(); + } 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 new file mode 100644 index 00000000..e799f2ef --- /dev/null +++ b/zc-business/src/main/java/com/zc/business/utils/PoiUtil.java @@ -0,0 +1,369 @@ +package com.zc.business.utils; + +import com.aliyuncs.utils.IOUtils; +import com.google.common.base.Strings; +import org.apache.poi.openxml4j.opc.OPCPackage; +import org.apache.poi.ss.util.CellRangeAddress; +import org.apache.poi.ss.util.CellReference; +import org.apache.poi.xddf.usermodel.chart.XDDFChartData; +import org.apache.poi.xddf.usermodel.chart.XDDFDataSource; +import org.apache.poi.xddf.usermodel.chart.XDDFDataSourcesFactory; +import org.apache.poi.xddf.usermodel.chart.XDDFNumericalDataSource; +import org.apache.poi.xssf.usermodel.XSSFSheet; +import org.apache.poi.xwpf.usermodel.*; +import org.apache.xmlbeans.XmlOptions; +import org.openxmlformats.schemas.drawingml.x2006.chart.CTPlotArea; +import org.openxmlformats.schemas.wordprocessingml.x2006.main.*; +import org.springframework.util.StringUtils; + +import java.io.*; +import java.math.BigInteger; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * @author : LCheng + * @date : 2020-12-10 10:03 + * description : poi工具 + */ +public class PoiUtil { + + public static int headingCount1 = 1; + public static int headingCount2 = 1; + + /** + * 根据word模板导出 针对图表(柱状图,折线图,饼图等)的处理 + * + * @param docChart 图表对象 + * @param title 图表标题 + * @param seriesNames 系列名称数组 + * @return {@link XWPFChart} + * @author LCheng + * @date 2020/12/10 11:08 + */ + public static XWPFChart wordExportChar(XWPFChart docChart, String title, String[] seriesNames, XSSFSheet sheet) { + //获取图表数据对象 + XDDFChartData chartData = docChart.getChartSeries().get(0); + + //word图表均对应一个内置的excel,用于保存图表对应的数据 + //excel中 第一列第二行开始的数据为分类信息 + //CellRangeAddress(1, categories.size(), 0, 0) 四个参数依次为 起始行 截止行 起始列 截止列。 + //根据分类信息的范围创建分类信息的数据源 + XDDFDataSource catDataSource = XDDFDataSourcesFactory.fromStringCellRange(sheet, new CellRangeAddress(1,sheet.getLastRowNum(),0,0)); + //更新数据 + for (int i = 0; i < seriesNames.length; i++) { + //excel中各系列对应的数据的范围 + //根据数据的范围创建值的数据源 + XDDFNumericalDataSource valDataSource = XDDFDataSourcesFactory.fromNumericCellRange(sheet, new CellRangeAddress(1,sheet.getLastRowNum(),i+1,i+1)); + //获取图表系列的数据对象 + XDDFChartData.Series series = chartData.getSeries().get(i); + //替换系列数据对象中的分类和值 + series.replaceData(catDataSource, valDataSource); + //修改系列数据对象中的标题 + CellReference cellReference = docChart.setSheetTitle(seriesNames[i], 1); + series.setTitle(seriesNames[i], cellReference); + } + //更新图表数据对象 + docChart.plot(chartData); + //图表整体的标题 传空值则不替换标题 + if (!Strings.isNullOrEmpty(title)) { + docChart.setTitleText(title); + docChart.setTitleOverlay(false); + } + return docChart; + } + + /** + * 合并docx文件 + * @param srcDocxs 需要合并的目标docx文件 + * @param destDocx 合并后的docx输出文件 + */ + public static void mergeDoc(XWPFDocument srcDocxs, XWPFDocument destDocx) { + + + try { + + //获取目标文件的CTDocument1对象 + CTDocument1 ctDocument1 = srcDocxs.getDocument(); + //获取第一个目标文件的CTBody对象 + CTBody src1Body = ctDocument1.getBody(); + + + //获取目标文件中的图表 + List relations = srcDocxs.getCharts(); + //判断是否有图表,没有图表的话,追加到之前的目标文件后面 + if (relations.size() <= 0) { + CTBody src2Body = srcDocxs.getDocument().getBody(); + //获取目标文件中的图片 + List allPictures = srcDocxs.getAllPictures(); + // 记录图片合并前及合并后的ID + Map map = new HashMap(); + //遍历图片 + for (XWPFPictureData picture : allPictures) { + String before = srcDocxs.getRelationId(picture); + //将原文档中的图片加入到目标文档中 + String after = destDocx.addPictureData(picture.getData(), Document.PICTURE_TYPE_PNG); + map.put(before, after); + } + //将当前文件的内容追加到之前的目标文件中 + appendBody(src1Body, src2Body,map); + } + //遍历图表, + for (XWPFChart chart1 : relations) { + //是否是word中自带图表 + if (chart1 instanceof XWPFChart) { // 如果是图表元素 + XWPFChart chart = destDocx.createChart(5774310, 3076575); + CTPlotArea plotArea = chart1.getCTChart().getPlotArea(); + chart.getCTChart().setPlotArea(plotArea); + chart.getCTChart().setLegend(chart1.getCTChart().getLegend()); + } + } + //关闭流 + srcDocxs.close(); + + } catch (Exception e) { + e.printStackTrace(); + } + } + + + + /** + * 合并chart + * @param chart 需要合并的目标chart + * @param destDocx 合并后的docx输出文件 + */ + public static void mergeChart(XWPFChart chart, XWPFDocument destDocx) { + try { + + XWPFChart docxChart = destDocx.createChart(5774310, 3076575); + CTPlotArea plotArea = chart.getCTChart().getPlotArea(); + docxChart.getCTChart().setPlotArea(plotArea); + docxChart.getCTChart().setLegend(chart.getCTChart().getLegend()); + + } catch (Exception e) { + e.printStackTrace(); + } + } + + /** + * 插入换行符 + * @param destDocx 合并后的docx输出文件 + */ + public static void createLineBreak(XWPFDocument destDocx) { + try { + + XWPFParagraph paragraph = destDocx.createParagraph(); + XWPFRun run = paragraph.createRun(); + run.addBreak(); + + } catch (Exception e) { + e.printStackTrace(); + } + } + + + + /** + * 合并文档内容 + * + * @param src 目标文档 + * @param append 要合并的文档 + * @throws Exception + */ + private static void appendBody(CTBody src, CTBody append,Map map) throws Exception { + XmlOptions optionsOuter = new XmlOptions(); + optionsOuter.setSaveOuter(); + //获取目标文件的字符内容 + String srcString = src.xmlText(); + //获取目标文件字符的开头 + String prefix = srcString.substring(0, srcString.indexOf(">") + 1); + //获取目标文件字符的内容 + String mainPart = srcString.substring(srcString.indexOf(">") + 1, + srcString.lastIndexOf("<")); + //获取目标文件字符的结尾 + String sufix = srcString.substring(srcString.lastIndexOf("<")); + //获取需要追加的文件 + String appendString = append.xmlText(optionsOuter); + //获取需要追加的文件内容(除去头和尾) + String addPart = appendString.substring(appendString.indexOf(">") + 1, + appendString.lastIndexOf("<")); + if (map != null && !map.isEmpty()) { + //对xml字符串中图片ID进行替换 + for (Map.Entry set : map.entrySet()) { + addPart = addPart.replace(set.getKey(), set.getValue()); + } + } + //将获取到的文件内容合并成为新的CTBody + CTBody makeBody = CTBody.Factory.parse(prefix + mainPart + addPart + + sufix); + //将新的CTBody重新设置到目标文件中 + src.set(makeBody); + } + + public static XWPFParagraph createHeading(XWPFDocument doc, String title) { + //段落 + XWPFParagraph paragraph = doc.createParagraph(); + XWPFRun run = paragraph.createRun(); + run.setText(title); +// run.setColor("696969"); + run.setFontSize(18); + run.setBold(true);//标题加粗 + return paragraph; + } + + /** + * 创建标题1 + * + * @param doc + * @param title + */ + public static void createHeading1(XWPFDocument doc, String title) { + //段落 + XWPFParagraph paragraph = doc.createParagraph(); + XWPFRun run = paragraph.createRun(); + run.setText(title); +// run.setColor("696969"); + run.setFontSize(16); + run.setBold(true);//标题加粗 + paragraph.setStyle("Heading1"); + } + + /** + * 创建标题2 + * + * @param doc + * @param title + */ + public static void createHeading2(XWPFDocument doc, String title) { + XWPFParagraph paragraph = doc.createParagraph(); + XWPFRun run = paragraph.createRun(); + run.setText(title); + run.setFontSize(14); + run.setBold(true);//标题加粗 + paragraph.setStyle("Heading2"); + } + + public static void createTable(XWPFDocument doc) { + XWPFTable table = doc.createTable(3, 3); + //列宽自动分割 + CTTblWidth infoTableWidth = table.getCTTbl().addNewTblPr().addNewTblW(); + infoTableWidth.setType(STTblWidth.DXA); + infoTableWidth.setW(BigInteger.valueOf(9072)); + + setTableFonts(table.getRow(0).getCell(0), "编号"); + setTableFonts(table.getRow(0).getCell(1), "问题"); + setTableFonts(table.getRow(0).getCell(2), "应答"); + setTableFonts(table.getRow(1).getCell(0), "1"); + setTableFonts(table.getRow(1).getCell(1), "陈述日期"); + setTableFonts(table.getRow(1).getCell(2), "2017年02月17日"); + setTableFonts(table.getRow(2).getCell(0), "2"); + setTableFonts(table.getRow(2).getCell(1), "PICS序列号"); + setTableFonts(table.getRow(2).getCell(2), "121313132131"); + + } + + // word跨列合并单元格 + public static void mergeCellsHorizontal(XWPFTable table, int row, int fromCell, int toCell) { + for (int cellIndex = fromCell; cellIndex <= toCell; cellIndex++) { + XWPFTableCell cell = table.getRow(row).getCell(cellIndex); + if (cellIndex == fromCell) { + // The first merged cell is set with RESTART merge value + cell.getCTTc().addNewTcPr().addNewHMerge().setVal(STMerge.RESTART); + } else { + // Cells which join (merge) the first one, are set with CONTINUE + cell.getCTTc().addNewTcPr().addNewHMerge().setVal(STMerge.CONTINUE); + } + } + } + + // word跨行并单元格 + public static void mergeCellsVertically(XWPFTable table, int col, int fromRow, int toRow) { + for (int rowIndex = fromRow; rowIndex <= toRow; rowIndex++) { + XWPFTableCell cell = table.getRow(rowIndex).getCell(col); + if (rowIndex == fromRow) { + // The first merged cell is set with RESTART merge value + cell.getCTTc().addNewTcPr().addNewVMerge().setVal(STMerge.RESTART); + } else { + // Cells which join (merge) the first one, are set with CONTINUE + cell.getCTTc().addNewTcPr().addNewVMerge().setVal(STMerge.CONTINUE); + } + } + } + + /** + * 设置表格中字体 + * + * @param cell + * @param cellText + */ + public static void setTableFonts(XWPFTableCell cell, String cellText) { + CTP ctp = CTP.Factory.newInstance(); + XWPFParagraph p = new XWPFParagraph(ctp, cell); + p.setAlignment(ParagraphAlignment.CENTER); + XWPFRun run = p.createRun(); + run.setFontSize(8); + run.setText(cellText); + CTRPr rpr = run.getCTR().isSetRPr() ? run.getCTR().getRPr() : run.getCTR().addNewRPr(); + CTFonts fonts = rpr.isSetRFonts() ? rpr.getRFonts() : rpr.addNewRFonts(); + fonts.setAscii("仿宋"); + fonts.setEastAsia("仿宋"); + fonts.setHAnsi("仿宋"); + cell.setParagraph(p); + } + + /** + * 添加描述信息 + * + * @param doc + * @param description + */ + public static void addDescription(XWPFDocument doc, String description) { + if (StringUtils.isEmpty(description)) { + return; + } + XWPFParagraph title = doc.createParagraph(); + XWPFRun run = title.createRun(); + run.setText(description); + run.setBold(true); + title.setAlignment(ParagraphAlignment.CENTER); + } + + /** + * 创建目录 + * 创建并插入带超链接的目录 + * @param document + */ + public static void insertTOC2(XWPFDocument document) { + // 定义 TOC 字段属性 + CTSimpleField tocField = CTSimpleField.Factory.newInstance(); + tocField.setInstr("TOC \\h \\z \\t \"Heading1,Heading2\""); // 包含 Heading1 和 Heading2 样式的目录 + + // 创建包含 TOC 字段的段落 + XWPFParagraph tocPara = document.createParagraph(); + tocPara.getCTP().addNewFldSimple().set(tocField); + + // 更新文档字段以计算目录 + document.enforceUpdateFields(); + } + + /** + * 创建目录 + * 创建并插入带超链接的目录 + * @param document + */ + public static void insertTOC(XWPFDocument document) { + // 创建目录所在的段落 + XWPFParagraph tocPara = document.createParagraph(); + + + // 添加 TOC 域代码 + String tocFieldCode = "TOC \\o \"1-3\" \\h \\z \\u"; + CTSimpleField tocField = tocPara.getCTP().addNewFldSimple(); + tocField.setInstr(tocFieldCode); + tocField.setDirty(STOnOff.TRUE); + } +} + diff --git a/zc-business/src/main/resources/mapper/business/DcTrafficIncidentsMapper.xml b/zc-business/src/main/resources/mapper/business/DcTrafficIncidentsMapper.xml index 46746935..ce150537 100644 --- a/zc-business/src/main/resources/mapper/business/DcTrafficIncidentsMapper.xml +++ b/zc-business/src/main/resources/mapper/business/DcTrafficIncidentsMapper.xml @@ -398,4 +398,233 @@ group by event_subclass) t3 on t1.eventSubclass = t3.event_subclass + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/zc-business/src/main/resources/wordTemplate/chartTemplate.docx b/zc-business/src/main/resources/wordTemplate/chartTemplate.docx new file mode 100644 index 0000000000000000000000000000000000000000..2f9a8f6510de6f4a5c7f790c4b888573ade6fe8f GIT binary patch literal 71251 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 literal 0 HcmV?d00001 diff --git a/zc-business/src/main/resources/wordTemplate/chartTemplate2.docx b/zc-business/src/main/resources/wordTemplate/chartTemplate2.docx new file mode 100644 index 0000000000000000000000000000000000000000..c0a398ea1337f0caef0ac34a06baf44ac98acbcb GIT binary patch literal 28097 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 Xczg+tqB6XJJfEmV+K%p7pCkScqOE;K literal 0 HcmV?d00001 diff --git a/zc-business/src/main/resources/wordTemplate/wordTemplate.docx b/zc-business/src/main/resources/wordTemplate/wordTemplate.docx new file mode 100644 index 0000000000000000000000000000000000000000..5c48a30b7e1253872a38144bb66ee52689f23431 GIT binary patch literal 16605 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 literal 0 HcmV?d00001