Browse Source

高速云事件导出

develop
lau572 6 months ago
parent
commit
545c6cd380
  1. 21
      zc-business/src/main/java/com/zc/business/controller/DcSdhsEventController.java
  2. 4
      zc-business/src/main/java/com/zc/business/service/IDcSdhsEventService.java
  3. 119
      zc-business/src/main/java/com/zc/business/service/impl/DcSdhsEventServiceImpl.java
  4. BIN
      zc-business/src/main/resources/wordTemplate/sdhsEventChart.docx

21
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);
}
}

4
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);
}

119
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<DcSdhsEvent> 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<Map<String,Object>> list = new ArrayList<>();
if(eventList.size() > 0){
//根据详细类型 分组计数
Map<String, Long> subclass = eventList.stream().collect(Collectors.groupingBy(DcSdhsEvent::getEventSubclass,Collectors.counting()));
subclass.forEach((key,count)->{
Map<String,Object> 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<Map<String,Object>> data = (List<Map<String,Object>>) 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<XWPFChart> 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());
}
}
}

BIN
zc-business/src/main/resources/wordTemplate/sdhsEventChart.docx

Binary file not shown.
Loading…
Cancel
Save