Browse Source

高速云事件分析

develop
lau572 6 months ago
parent
commit
de03fbb8c8
  1. 109
      zc-business/src/main/java/com/zc/business/controller/DcSdhsEventController.java
  2. 12
      zc-business/src/main/java/com/zc/business/domain/DcSdhsEventQuery.java
  3. 12
      zc-business/src/main/java/com/zc/business/service/IDcSdhsEventService.java
  4. 417
      zc-business/src/main/java/com/zc/business/service/impl/DcSdhsEventServiceImpl.java
  5. BIN
      zc-business/src/main/resources/wordTemplate/sdhsEventChart.docx
  6. BIN
      zc-business/src/main/resources/wordTemplate/wordTemplate2.docx

109
zc-business/src/main/java/com/zc/business/controller/DcSdhsEventController.java

@ -1,15 +1,34 @@
package com.zc.business.controller;
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.zc.business.service.IDcSdhsEventService;
import com.zc.business.utils.PoiUtil;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.apache.poi.xwpf.usermodel.ParagraphAlignment;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.apache.poi.xwpf.usermodel.XWPFParagraph;
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.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 org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.Map;
import static com.zc.business.utils.PoiUtil.insertTOC;
/**
* @Description 高速云事件分析Controller
*
@ -32,4 +51,88 @@ public class DcSdhsEventController {
return dcSdhsEventService.importData(file);
}
@PostMapping("/export")
@ApiOperation("导出")
public void trafficSituationReport(HttpServletResponse response,DcSdhsEventQuery dcSdhsEventQuery) throws Exception {
try {
SimpleDateFormat df = new SimpleDateFormat(UniversalEnum.TIME_FORMAT_YEARS_MONTH_DAY.getValue());
String date = df.format(new Date());
String outputPath = RuoYiConfig.getDownloadPath() +"/高速云事件分析报告" + date + ".docx";
// 读取Word模板
InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream("wordTemplate/wordTemplate2.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);
List<String> exportKey = dcSdhsEventQuery.getExportKey();
if (exportKey != null && exportKey.size() > 0){
//交通事件
if (exportKey.contains("1") || exportKey.contains("2") || exportKey.contains("3")
|| exportKey.contains("4") || exportKey.contains("5") || exportKey.contains("6")){
PoiUtil.createHeading1(newDoc,"交通事件");
for (String trafficIncidentType : exportKey) {
if ("1".equals(trafficIncidentType)){
} else if ("2".equals(trafficIncidentType)){
} else if ("3".equals(trafficIncidentType)){
} else if ("4".equals(trafficIncidentType)){
} else if ("5".equals(trafficIncidentType)){
//事故地市分布
dcSdhsEventService.exportRegionAnalysis(newDoc,dcSdhsEventQuery);
} else if ("6".equals(trafficIncidentType)){
//交通管制情况统计
dcSdhsEventService.exportStationAnalysis(newDoc,dcSdhsEventQuery);
}
}
}
}
// 保存新生成的Word文件
/*FileOutputStream out = new FileOutputStream(outputPath);
newDoc.write(out);
out.close();*/
// 不保存直接返回文件流
newDoc.write(response.getOutputStream());
// 关闭文档
newDoc.close();
} catch (Exception e) {
e.printStackTrace();
}
}
@ApiOperation("查询事故地市分布")
@PostMapping("/selectRegionAnalysis")
public AjaxResult selectRegionAnalysis(@RequestBody DcSdhsEventQuery dcSdhsEventQuery)
{
return dcSdhsEventService.selectRegionAnalysis(dcSdhsEventQuery);
}
@ApiOperation("查询交通管制情况分析")
@PostMapping("/selectStationAnalysis")
public AjaxResult selectStationAnalysis(@RequestBody DcSdhsEventQuery dcSdhsEventQuery)
{
return dcSdhsEventService.selectStationAnalysis(dcSdhsEventQuery);
}
}

12
zc-business/src/main/java/com/zc/business/domain/DcSdhsEventQuery.java

@ -15,7 +15,7 @@ import java.util.Map;
* @author ruoyi
* @date 2024-08-19
*/
public class DcSdhsEventQuery extends BaseEntity
public class DcSdhsEventQuery
{
private static final long serialVersionUID = 1L;
@ -26,15 +26,15 @@ public class DcSdhsEventQuery extends BaseEntity
private String type;
/** 开始时间 */
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
private Date startTime;
/** 结束时间 */
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
private Date endTime;
/** 需要导出的键 */
private Map<String,Object> exportKey;
private List<String> exportKey;
public String getDirection() {
return direction;
@ -68,11 +68,11 @@ public class DcSdhsEventQuery extends BaseEntity
this.endTime = endTime;
}
public Map<String, Object> getExportKey() {
public List<String> getExportKey() {
return exportKey;
}
public void setExportKey(Map<String, Object> exportKey) {
public void setExportKey(List<String> exportKey) {
this.exportKey = exportKey;
}

12
zc-business/src/main/java/com/zc/business/service/IDcSdhsEventService.java

@ -1,8 +1,13 @@
package com.zc.business.service;
import com.ruoyi.common.core.domain.AjaxResult;
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 javax.servlet.http.HttpServletResponse;
/**
* 高速云事件分析Service接口
*
@ -13,4 +18,11 @@ public interface IDcSdhsEventService
{
AjaxResult importData(MultipartFile file) throws Exception;
AjaxResult selectRegionAnalysis(DcSdhsEventQuery dcSdhsEventQuery);
void exportRegionAnalysis(XWPFDocument doc, DcSdhsEventQuery dcSdhsEventQuery);
AjaxResult selectStationAnalysis(DcSdhsEventQuery dcSdhsEventQuery);
void exportStationAnalysis(XWPFDocument doc, DcSdhsEventQuery dcSdhsEventQuery);
}

417
zc-business/src/main/java/com/zc/business/service/impl/DcSdhsEventServiceImpl.java

@ -1,22 +1,40 @@
package com.zc.business.service.impl;
import com.ruoyi.common.config.RuoYiConfig;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.domain.entity.SysUser;
import com.ruoyi.common.core.redis.RedisCache;
import com.ruoyi.common.utils.StakeMarkUtils;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.zc.business.constant.RedisKeyConstants;
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 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.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
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.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;
/**
* 高速云事件分析Service业务层处理
@ -33,19 +51,21 @@ public class DcSdhsEventServiceImpl implements IDcSdhsEventService {
@Override
public AjaxResult importData(MultipartFile file) throws IOException {
List<DcSdhsEvent> eventList = new ArrayList<>();
List<DcSdhsEvent> importData = new ArrayList<>();
try {
ExcelUtil<DcSdhsEvent> util = new ExcelUtil<DcSdhsEvent>(DcSdhsEvent.class);
eventList = util.importExcel(file.getInputStream());
importData = util.importExcel(file.getInputStream());
} catch (Exception e){
e.printStackTrace();
return AjaxResult.error("导入失败,请检查数据是否有误");
}
redisCache.deleteObject(RedisKeyConstants.SDHS_EVENT);
if (eventList != null && eventList.size() > 0){
List<DcSdhsEvent> eventList = new ArrayList<>();
if (importData != null && importData.size() > 0){
int id = 1;
for (DcSdhsEvent dcSdhsEvent : eventList) {
for (DcSdhsEvent dcSdhsEvent : importData) {
//插入id备用
dcSdhsEvent.setId(id);
@ -68,6 +88,36 @@ public class DcSdhsEventServiceImpl implements IDcSdhsEventService {
dcSdhsEvent.setMultiVehicle("否");
}
String stakeMark = dcSdhsEvent.getStakeMark();
if (StringUtils.isNotEmpty(stakeMark) && !"无".equals(stakeMark) && !StakeMarkUtils.checkStakeMark(stakeMark)){
//尝试桩号补零
List<String> numbers = new ArrayList<>();
// 匹配大小桩号数字
Pattern pattern = Pattern.compile("\\d+");
Matcher matcher = pattern.matcher(stakeMark);
while (matcher.find()) {
numbers.add(matcher.group()); // 将匹配到的数字字符串添加到列表中
}
List<String> formattedNumbers = new ArrayList<>();
for (String number : numbers) {
while (number.length() < 3) {
number = "0" + number;
}
formattedNumbers.add(number);
}
stakeMark = "K" + String.join("+",formattedNumbers);
//如果还验证不通过 则此条信息作废
if (!StakeMarkUtils.checkStakeMark(stakeMark)){
continue;
}
dcSdhsEvent.setStakeMark(stakeMark);
}
eventList.add(dcSdhsEvent);
id++;
}
@ -99,4 +149,357 @@ public class DcSdhsEventServiceImpl implements IDcSdhsEventService {
return numbers;
}
/**
* @Description 事故地市分布
*
* @author liuwenge
* @date 2024/8/20 9:13
* @param dcSdhsEventQuery
* @return com.ruoyi.common.core.domain.AjaxResult
*/
@Override
public AjaxResult selectRegionAnalysis(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()
&& item.getEventType().equals("交通事故"))
.collect(Collectors.toList());
//筛选方向
if (StringUtils.isNotEmpty(dcSdhsEventQuery.getDirection())){
if (dcSdhsEventQuery.getDirection().equals("1")){
//菏泽方向
eventList = eventList.stream()
.filter(item -> item.getDirection().equals("广州方向") || item.getDirection().equals("双向"))
.collect(Collectors.toList());
} else if (dcSdhsEventQuery.getDirection().equals("3")){
//济南方向
eventList = eventList.stream()
.filter(item -> item.getDirection().equals("济南方向") || item.getDirection().equals("双向"))
.collect(Collectors.toList());
}
}
//地市统计
Map<String, Long> region = eventList.stream()
.collect(Collectors.groupingBy(item -> getRange(item.getStakeMark()), Collectors.counting()));
List<Map<String,Object>> list = new ArrayList<>();
region.forEach((key,count)->{
Map<String,Object> map = new HashMap<>();
map.put("regionName",key);
map.put("num",count);
list.add(map);
});
return AjaxResult.success(list);
}
private static String getRange(String stakeMark) {
Long stakeMarkMetre = StakeMarkUtils.formatMetreLong(stakeMark);
if (stakeMarkMetre == null){
return "其他";
}
if (stakeMarkMetre >= 0 && stakeMarkMetre <= 132469) {
return "济南";
} else if (stakeMarkMetre > 132469 && stakeMarkMetre <= 160708) {
return "泰安";
} else if (stakeMarkMetre > 160708 && stakeMarkMetre <= 200752) {
return "济宁";
} else if (stakeMarkMetre > 200752) {
return "菏泽";
} else {
return "其他";
}
}
/**
* @Description 导出事故地市分布
*
* @author liuwenge
* @date 2024/8/20 9:17
* @param doc
* @param dcSdhsEventQuery
* @return void
*/
@Override
public void exportRegionAnalysis(XWPFDocument doc, DcSdhsEventQuery dcSdhsEventQuery){
AjaxResult ajaxResult = selectRegionAnalysis(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(UniversalEnum.ZERO.getNumber());
XSSFWorkbook workbook = chart.getWorkbook();
XSSFSheet sheet = workbook.getSheetAt(UniversalEnum.ZERO.getNumber());
//系列信息
String[] singleBarSeriesNames = {"数量"};
//分类信息
for (int i = 0; i < data.size(); i++) {
sheet.getRow(i+UniversalEnum.ONE.getNumber()).getCell(UniversalEnum.ZERO.getNumber()).setCellValue(data.get(i).get("regionName").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), "数量");
for (int i = 0; i < data.size(); i++) {
setTableFonts(table.getRow(i+1).getCell(0), data.get(i).get("regionName").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());
}
}
/**
* @Description 查询交通管制情况统计
*
* @author liuwenge
* @date 2024/8/20 11:06
* @param dcSdhsEventQuery
* @return com.ruoyi.common.core.domain.AjaxResult
*/
@Override
public AjaxResult selectStationAnalysis(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())
.collect(Collectors.toList());
//筛选方向
if (StringUtils.isNotEmpty(dcSdhsEventQuery.getDirection())){
if (dcSdhsEventQuery.getDirection().equals("1")){
//菏泽方向
eventList = eventList.stream()
.filter(item -> item.getDirection().equals("广州方向")
|| item.getDirection().equals("双向"))
.collect(Collectors.toList());
} else if (dcSdhsEventQuery.getDirection().equals("3")){
//济南方向
eventList = eventList.stream()
.filter(item -> item.getDirection().equals("济南方向") || item.getDirection().equals("双向"))
.collect(Collectors.toList());
}
}
//封闭
List<DcSdhsEvent> closeList = eventList.stream()
.filter(item -> item.getEventType().equals("交通管制") && item.getEventSubclass().equals("收费站封闭"))
.collect(Collectors.toList());
//分割站点名称, 然后分组
Map<String, Long> closeStation = closeList.stream().collect(Collectors.groupingBy(item -> getStationName(item.getTitle()),
Collectors.counting()));
//限行
List<DcSdhsEvent> restrictionList = eventList.stream()
.filter(item -> item.getEventType().equals("交通管制") && item.getEventSubclass().equals("收费站限行"))
.collect(Collectors.toList());
//分割站点名称, 然后分组
Map<String, Long> restrictionStation = restrictionList.stream().collect(Collectors.groupingBy(item -> getStationName(item.getTitle()),
Collectors.counting()));
//合并 站点名称
Set<String> stationSet = new HashSet<>();
stationSet.addAll(closeStation.keySet());
stationSet.addAll(restrictionStation.keySet());
//收费站统
List<Map<String,Object>> list = new ArrayList<>();
for (String stationName : stationSet) {
Map<String,Object> map = new HashMap<>();
map.put("stationName",stationName);
if (closeStation.containsKey(stationName)){
map.put("close",closeStation.get(stationName));
} else {
map.put("close",0);
}
if (restrictionStation.containsKey(stationName)){
map.put("restriction",restrictionStation.get(stationName));
} else {
map.put("restriction",0);
}
list.add(map);
}
return AjaxResult.success(list);
}
/**
* @Description 从标题中截取收费站名称
*
* @author liuwenge
* @date 2024/8/19 15:32
* @param title
* @return java.lang.String
*/
private static String getStationName(String title) {
String[] titleStr = title.split(",山东");
if (titleStr.length > 1){
String[] stationStr = titleStr[1].split("发生");
if (stationStr.length > 0){
return stationStr[0];
} else {
return "其他";
}
} else {
return "其他";
}
}
/**
* @Description 导出交通管制情况统计
*
* @author liuwenge
* @date 2024/8/20 11:05
* @param doc
* @param dcSdhsEventQuery
* @return com.ruoyi.common.core.domain.AjaxResult
*/
@Override
public void exportStationAnalysis(XWPFDocument doc, DcSdhsEventQuery dcSdhsEventQuery){
AjaxResult ajaxResult = selectStationAnalysis(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(UniversalEnum.DRAWING_TEMPLATE.getValue());
XWPFDocument copiedTemplate = new XWPFDocument(inputStream);
//获取word中所有图表对象
List<XWPFChart> charts = copiedTemplate.getCharts();
XWPFChart chart = charts.get(UniversalEnum.ZERO.getNumber());
XSSFWorkbook workbook = chart.getWorkbook();
XSSFSheet sheet = workbook.getSheetAt(UniversalEnum.ZERO.getNumber());
//系列信息
String[] singleBarSeriesNames = {UniversalEnum.CLOSE.getValue(),UniversalEnum.TRAFFIC_RESTRICTION.getValue()};
//分类信息
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("stationName").toString());
sheet.getRow(i+UniversalEnum.ONE.getNumber()).getCell(UniversalEnum.ONE.getNumber()).setCellValue(Long.parseLong(data.get(i).get("close").toString()));
sheet.getRow(i+UniversalEnum.ONE.getNumber()).getCell(UniversalEnum.TWO.getNumber()).setCellValue(Long.parseLong(data.get(i).get("restriction").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, 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(1), "封闭");
setTableFonts(table.getRow(0).getCell(2), "限行");
//excel
for (int i = 0; i < data.size(); i++){
setTableFonts(table.getRow(i+1).getCell(0), data.get(i).get("stationName").toString());
setTableFonts(table.getRow(i+1).getCell(1), data.get(i).get("close").toString());
setTableFonts(table.getRow(i+1).getCell(2), data.get(i).get("restriction").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.

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

Binary file not shown.
Loading…
Cancel
Save