Commit 11c835ead1546b4973b8488b5e3410d72933bc31

Authored by 胡翰林
2 parents 4bd36a55 17140252

Merge remote-tracking branch 'origin/0730_word'

# Conflicts:
#	src/main/java/com/ash/util/JFChartUtils.java
@@ -28,6 +28,9 @@ import javax.annotation.Resource; @@ -28,6 +28,9 @@ import javax.annotation.Resource;
28 import javax.servlet.http.HttpServletResponse; 28 import javax.servlet.http.HttpServletResponse;
29 import java.io.*; 29 import java.io.*;
30 import java.nio.charset.StandardCharsets; 30 import java.nio.charset.StandardCharsets;
  31 +import java.nio.file.Files;
  32 +import java.nio.file.Path;
  33 +import java.nio.file.StandardCopyOption;
31 import java.text.ParseException; 34 import java.text.ParseException;
32 import java.text.SimpleDateFormat; 35 import java.text.SimpleDateFormat;
33 import java.util.*; 36 import java.util.*;
@@ -471,8 +474,8 @@ public class StatisticsController extends BaseController { @@ -471,8 +474,8 @@ public class StatisticsController extends BaseController {
471 String filePath = JFChartUtils.OUTPUT_DIR + fileName; 474 String filePath = JFChartUtils.OUTPUT_DIR + fileName;
472 475
473 String dataRange = "【" + (startTime.equals(endTime) ? startTime : startTime + "~" + endTime) + "】"; 476 String dataRange = "【" + (startTime.equals(endTime) ? startTime : startTime + "~" + endTime) + "】";
474 -  
475 - buildWord(dataMap, dataRange, filePath); 477 + List<String> tempFilePath = new ArrayList<>();
  478 + buildWord(dataMap, dataRange, filePath, tempFilePath);
476 try { 479 try {
477 response.setContentType("application/octet-stream"); 480 response.setContentType("application/octet-stream");
478 response.setCharacterEncoding("utf-8"); 481 response.setCharacterEncoding("utf-8");
@@ -491,15 +494,29 @@ public class StatisticsController extends BaseController { @@ -491,15 +494,29 @@ public class StatisticsController extends BaseController {
491 outputStream.close(); 494 outputStream.close();
492 } catch (Exception e) { 495 } catch (Exception e) {
493 e.printStackTrace(); 496 e.printStackTrace();
  497 + } finally {
  498 + tempFilePath.add(filePath);
  499 + for (String tp : tempFilePath) {
  500 + File t = new File(tp);
  501 + if (t.exists()) {
  502 + if (!t.delete()) {
  503 + log.error("delete tempfile error!" + tp);
  504 + }
  505 + }
  506 + }
494 } 507 }
495 508
496 } 509 }
497 510
498 @SuppressWarnings("unchecked") 511 @SuppressWarnings("unchecked")
499 - public void buildWord(Map<String, Object> data, String dataRange, String filePath) throws IOException { 512 + public void buildWord(Map<String, Object> data, String dataRange, String filePath, List<String> tempFilePath) throws IOException {
500 513
501 ClassPathResource resource = new ClassPathResource("/template/statisticsReport.docx"); 514 ClassPathResource resource = new ClassPathResource("/template/statisticsReport.docx");
502 - File file = new File(resource.getFile().toPath().toString()); 515 + Path tempFile = Files.createTempFile("custTemp", ".docx");
  516 + try (InputStream inputStream = resource.getInputStream()) {
  517 + Files.copy(inputStream, tempFile, StandardCopyOption.REPLACE_EXISTING);
  518 + }
  519 +
503 520
504 Map<String, Object> dataMap = new HashMap<>(); 521 Map<String, Object> dataMap = new HashMap<>();
505 522
@@ -533,57 +550,67 @@ public class StatisticsController extends BaseController { @@ -533,57 +550,67 @@ public class StatisticsController extends BaseController {
533 List<PieChartVo> wiAreaDataList = (List<PieChartVo>) data.get("wiAreaData"); 550 List<PieChartVo> wiAreaDataList = (List<PieChartVo>) data.get("wiAreaData");
534 String dailyPicFile = JFChartUtils.createChart(wiAreaDataList, JFChartTypeEnum.PIE, dataRange + "警情分布图", "市", "数量"); 551 String dailyPicFile = JFChartUtils.createChart(wiAreaDataList, JFChartTypeEnum.PIE, dataRange + "警情分布图", "市", "数量");
535 dataMap.put("sWIAreaPic", Pictures.ofStream(new FileInputStream(dailyPicFile), PictureType.JPEG).size(600, 200).create()); 552 dataMap.put("sWIAreaPic", Pictures.ofStream(new FileInputStream(dailyPicFile), PictureType.JPEG).size(600, 200).create());
  553 + tempFilePath.add(dailyPicFile);
536 554
537 //警情各地市环比变化柱状图 555 //警情各地市环比变化柱状图
538 List<PieChartVo> wissAreaData = (List<PieChartVo>) data.get("wissAreaData"); 556 List<PieChartVo> wissAreaData = (List<PieChartVo>) data.get("wissAreaData");
539 String sWISeqAreaPic = JFChartUtils.createChart(wissAreaData, JFChartTypeEnum.BAR, dataRange + "警情环比情况", "市", "环比"); 557 String sWISeqAreaPic = JFChartUtils.createChart(wissAreaData, JFChartTypeEnum.BAR, dataRange + "警情环比情况", "市", "环比");
540 dataMap.put("sWISeqAreaPic", Pictures.ofStream(new FileInputStream(sWISeqAreaPic), PictureType.JPEG).size(600, 200).create()); 558 dataMap.put("sWISeqAreaPic", Pictures.ofStream(new FileInputStream(sWISeqAreaPic), PictureType.JPEG).size(600, 200).create());
  559 + tempFilePath.add(sWISeqAreaPic);
541 560
542 //警情子类分布 561 //警情子类分布
543 List<PieChartVo> wiSubTypeData = (List<PieChartVo>) data.get("wiSubTypeData"); 562 List<PieChartVo> wiSubTypeData = (List<PieChartVo>) data.get("wiSubTypeData");
544 String wiSubTypeDataPic = JFChartUtils.createChart(wiSubTypeData, JFChartTypeEnum.PIE, dataRange + "警情类别分布", "警情类别", "数量"); 563 String wiSubTypeDataPic = JFChartUtils.createChart(wiSubTypeData, JFChartTypeEnum.PIE, dataRange + "警情类别分布", "警情类别", "数量");
545 dataMap.put("wiSubTypeDataPic", Pictures.ofStream(new FileInputStream(wiSubTypeDataPic), PictureType.JPEG).size(600, 200).create()); 564 dataMap.put("wiSubTypeDataPic", Pictures.ofStream(new FileInputStream(wiSubTypeDataPic), PictureType.JPEG).size(600, 200).create());
546 - 565 + tempFilePath.add(wiSubTypeDataPic);
547 566
548 //警情分析 567 //警情分析
549 List<PieChartVo> wisDateData = (List<PieChartVo>) data.get("wisDateData"); 568 List<PieChartVo> wisDateData = (List<PieChartVo>) data.get("wisDateData");
550 String wisDateDataPic = JFChartUtils.createChart(wisDateData, JFChartTypeEnum.LINE, dataRange + "警情趋势", "市", "数量"); 569 String wisDateDataPic = JFChartUtils.createChart(wisDateData, JFChartTypeEnum.LINE, dataRange + "警情趋势", "市", "数量");
551 dataMap.put("wisDateDataPic", Pictures.ofStream(new FileInputStream(wisDateDataPic), PictureType.JPEG).size(600, 200).create()); 570 dataMap.put("wisDateDataPic", Pictures.ofStream(new FileInputStream(wisDateDataPic), PictureType.JPEG).size(600, 200).create());
  571 + tempFilePath.add(wisDateDataPic);
552 572
553 //案件各地市分布 573 //案件各地市分布
554 List<PieChartVo> caseAreaData = (List<PieChartVo>) data.get("caseAreaData"); 574 List<PieChartVo> caseAreaData = (List<PieChartVo>) data.get("caseAreaData");
555 String caseAreaDataPic = JFChartUtils.createChart(caseAreaData, JFChartTypeEnum.PIE, dataRange + "案件分布图", "市", "数量"); 575 String caseAreaDataPic = JFChartUtils.createChart(caseAreaData, JFChartTypeEnum.PIE, dataRange + "案件分布图", "市", "数量");
556 dataMap.put("caseAreaDataPic", Pictures.ofStream(new FileInputStream(caseAreaDataPic), PictureType.JPEG).size(600, 200).create()); 576 dataMap.put("caseAreaDataPic", Pictures.ofStream(new FileInputStream(caseAreaDataPic), PictureType.JPEG).size(600, 200).create());
  577 + tempFilePath.add(caseAreaDataPic);
557 578
558 //电诈案件环比情况 579 //电诈案件环比情况
559 List<PieChartVo> caseSsAreaData = (List<PieChartVo>) data.get("caseSsAreaData"); 580 List<PieChartVo> caseSsAreaData = (List<PieChartVo>) data.get("caseSsAreaData");
560 String caseSsAreaDataPic = JFChartUtils.createChart(caseSsAreaData, JFChartTypeEnum.BAR, dataRange + "电诈案件环比情况", "市", "环比"); 581 String caseSsAreaDataPic = JFChartUtils.createChart(caseSsAreaData, JFChartTypeEnum.BAR, dataRange + "电诈案件环比情况", "市", "环比");
561 dataMap.put("caseSsAreaDataPic", Pictures.ofStream(new FileInputStream(caseSsAreaDataPic), PictureType.JPEG).size(600, 200).create()); 582 dataMap.put("caseSsAreaDataPic", Pictures.ofStream(new FileInputStream(caseSsAreaDataPic), PictureType.JPEG).size(600, 200).create());
  583 + tempFilePath.add(caseSsAreaDataPic);
562 584
563 //案件诈骗类型分布 585 //案件诈骗类型分布
564 List<PieChartVo> csfData = (List<PieChartVo>) data.get("csfData"); 586 List<PieChartVo> csfData = (List<PieChartVo>) data.get("csfData");
565 String sCsfDataPic = JFChartUtils.createChart(csfData, JFChartTypeEnum.PIE, dataRange + "诈骗类型分布", "诈骗类型", "数量"); 587 String sCsfDataPic = JFChartUtils.createChart(csfData, JFChartTypeEnum.PIE, dataRange + "诈骗类型分布", "诈骗类型", "数量");
566 dataMap.put("sCsfDataaPic", Pictures.ofStream(new FileInputStream(sCsfDataPic), PictureType.JPEG).size(600, 200).create()); 588 dataMap.put("sCsfDataaPic", Pictures.ofStream(new FileInputStream(sCsfDataPic), PictureType.JPEG).size(600, 200).create());
  589 + tempFilePath.add(sCsfDataPic);
567 590
568 //案件引流方式分布图 591 //案件引流方式分布图
569 List<PieChartVo> ccrmData = (List<PieChartVo>) data.get("ccrmData"); 592 List<PieChartVo> ccrmData = (List<PieChartVo>) data.get("ccrmData");
570 String ccrmDataPic = JFChartUtils.createChart(ccrmData, JFChartTypeEnum.PIE, dataRange + "引流方式分布图", "引流方式", "数量"); 593 String ccrmDataPic = JFChartUtils.createChart(ccrmData, JFChartTypeEnum.PIE, dataRange + "引流方式分布图", "引流方式", "数量");
571 dataMap.put("ccrmDataPic", Pictures.ofStream(new FileInputStream(ccrmDataPic), PictureType.JPEG).size(600, 200).create()); 594 dataMap.put("ccrmDataPic", Pictures.ofStream(new FileInputStream(ccrmDataPic), PictureType.JPEG).size(600, 200).create());
  595 + tempFilePath.add(ccrmDataPic);
572 596
573 //案件支付方式分布图 597 //案件支付方式分布图
574 List<PieChartVo> ccpmData = (List<PieChartVo>) data.get("ccpmData"); 598 List<PieChartVo> ccpmData = (List<PieChartVo>) data.get("ccpmData");
575 String ccpmDataPic = JFChartUtils.createChart(ccpmData, JFChartTypeEnum.PIE, dataRange + "支付方式分布图", "支付方式", "数量"); 599 String ccpmDataPic = JFChartUtils.createChart(ccpmData, JFChartTypeEnum.PIE, dataRange + "支付方式分布图", "支付方式", "数量");
576 dataMap.put("ccpmDataPic", Pictures.ofStream(new FileInputStream(ccpmDataPic), PictureType.JPEG).size(600, 200).create()); 600 dataMap.put("ccpmDataPic", Pictures.ofStream(new FileInputStream(ccpmDataPic), PictureType.JPEG).size(600, 200).create());
  601 + tempFilePath.add(ccpmDataPic);
577 602
578 //案件受害人职业分布图 603 //案件受害人职业分布图
579 List<PieChartVo> ccCareerData = (List<PieChartVo>) data.get("ccCareerData"); 604 List<PieChartVo> ccCareerData = (List<PieChartVo>) data.get("ccCareerData");
580 String ccCareerDataPic = JFChartUtils.createChart(ccCareerData, JFChartTypeEnum.BAR, dataRange + "受害人职业分布图", "受害人职业", "数量"); 605 String ccCareerDataPic = JFChartUtils.createChart(ccCareerData, JFChartTypeEnum.BAR, dataRange + "受害人职业分布图", "受害人职业", "数量");
581 dataMap.put("ccCareerDataPic", Pictures.ofStream(new FileInputStream(ccCareerDataPic), PictureType.JPEG).size(600, 200).create()); 606 dataMap.put("ccCareerDataPic", Pictures.ofStream(new FileInputStream(ccCareerDataPic), PictureType.JPEG).size(600, 200).create());
  607 + tempFilePath.add(ccCareerDataPic);
582 608
583 //案损分布 609 //案损分布
584 List<PieChartVo> ccLossData = (List<PieChartVo>) data.get("ccLossData"); 610 List<PieChartVo> ccLossData = (List<PieChartVo>) data.get("ccLossData");
585 String ccLossDataPic = JFChartUtils.createChart(ccLossData, JFChartTypeEnum.BAR, dataRange + "案损分布", "案损", "数量"); 611 String ccLossDataPic = JFChartUtils.createChart(ccLossData, JFChartTypeEnum.BAR, dataRange + "案损分布", "案损", "数量");
586 dataMap.put("ccLossDataPic", Pictures.ofStream(new FileInputStream(ccLossDataPic), PictureType.JPEG).size(600, 200).create()); 612 dataMap.put("ccLossDataPic", Pictures.ofStream(new FileInputStream(ccLossDataPic), PictureType.JPEG).size(600, 200).create());
  613 + tempFilePath.add(ccLossDataPic);
587 614
588 int clIndex = 1; 615 int clIndex = 1;
589 for (PieChartVo clData : ccLossData) { 616 for (PieChartVo clData : ccLossData) {
@@ -595,7 +622,7 @@ public class StatisticsController extends BaseController { @@ -595,7 +622,7 @@ public class StatisticsController extends BaseController {
595 List<PieChartVo> ccDateData = (List<PieChartVo>) data.get("ccDateData"); 622 List<PieChartVo> ccDateData = (List<PieChartVo>) data.get("ccDateData");
596 String ccDateDataPic = JFChartUtils.createChart(ccDateData, JFChartTypeEnum.LINE, dataRange + "发案趋势", "日期", "数量"); 623 String ccDateDataPic = JFChartUtils.createChart(ccDateData, JFChartTypeEnum.LINE, dataRange + "发案趋势", "日期", "数量");
597 dataMap.put("ccDateDataPic", Pictures.ofStream(new FileInputStream(ccDateDataPic), PictureType.JPEG).size(600, 200).create()); 624 dataMap.put("ccDateDataPic", Pictures.ofStream(new FileInputStream(ccDateDataPic), PictureType.JPEG).size(600, 200).create());
598 - 625 + tempFilePath.add(ccDateDataPic);
599 626
600 //案件受害人性别占比 627 //案件受害人性别占比
601 List<PieChartVo> sexData = (List<PieChartVo>) data.get("sexData"); 628 List<PieChartVo> sexData = (List<PieChartVo>) data.get("sexData");
@@ -724,11 +751,15 @@ public class StatisticsController extends BaseController { @@ -724,11 +751,15 @@ public class StatisticsController extends BaseController {
724 dataMap.put("caseLossAreas", caseLossAreas); 751 dataMap.put("caseLossAreas", caseLossAreas);
725 752
726 753
727 - try (XWPFTemplate template = XWPFTemplate.compile(file, Configure.newBuilder().buildGramer("${", "}").build()) 754 + try (XWPFTemplate template = XWPFTemplate.compile(tempFile.toFile(), Configure.newBuilder().buildGramer("${", "}").build())
728 .render(dataMap)) { 755 .render(dataMap)) {
729 template.writeToFile(filePath); 756 template.writeToFile(filePath);
730 } 757 }
731 758
  759 + //清理临时文件
  760 + File tf = tempFile.toFile();
  761 + tf.deleteOnExit();
  762 +
732 } 763 }
733 764
734 } 765 }
@@ -29,7 +29,7 @@ import java.util.List; @@ -29,7 +29,7 @@ import java.util.List;
29 @Component 29 @Component
30 public class JFChartUtils { 30 public class JFChartUtils {
31 31
32 - public static final String OUTPUT_DIR = "/web/report/analysis/"; 32 + public static final String OUTPUT_DIR = "/tmp/report/analysis/";
33 private static final String PIC_DIR = OUTPUT_DIR + "pic/"; 33 private static final String PIC_DIR = OUTPUT_DIR + "pic/";
34 34
35 public static List<Color> colorList = new ArrayList<>(); 35 public static List<Color> colorList = new ArrayList<>();
@@ -138,4 +138,6 @@ create table `t_ash_user` @@ -138,4 +138,6 @@ create table `t_ash_user`
138 ) comment = '用户表' ENGINE = InnoDB; 138 ) comment = '用户表' ENGINE = InnoDB;
139 139
140 create index i_user_l on t_ash_user(login_name); 140 create index i_user_l on t_ash_user(login_name);
141 -create unique index u_user_login_name on t_ash_user (login_name);  
  141 +create unique index u_user_login_name on t_ash_user (login_name);
  142 +
  143 +ALTER TABLE t_ash_warning_instance_analysis ADD COLUMN county VARCHAR(50) NULL;