Commit da8096fc4473e209dc6bfaa28b8c0eaa4a63bfe1

Authored by 胡翰林
1 parent 374fdee6

统计报表需求修改

... ... @@ -195,7 +195,6 @@ public class StatisticsController extends BaseController {
195 195 });
196 196
197 197
198   -
199 198 return JsonResult.ok(OptionStatus.OPT_SUCCESS.getName(), dataList);
200 199 } catch (Exception ex) {
201 200 ex.printStackTrace();
... ... @@ -340,8 +339,8 @@ public class StatisticsController extends BaseController {
340 339 public JsonResult totalLoss(@RequestBody StatisticsParams statisticsParams) {
341 340 try {
342 341 List<Case> dataList = caseService.getCaseLoss(statisticsParams);
343   - int caseTopLoss = caseService.getCaseTopLoss(statisticsParams,500000);
344   - int case100TopLoss = caseService.getCaseTopLoss(statisticsParams,1000000);
  342 + int caseTopLoss = caseService.getCaseTopLoss(statisticsParams, 500000);
  343 + int case100TopLoss = caseService.getCaseTopLoss(statisticsParams, 1000000);
345 344 Double totalLoss = 0d;
346 345 double avgLoss = 0d;
347 346 if (CollectionUtils.isNotEmpty(dataList)) {
... ... @@ -401,6 +400,27 @@ public class StatisticsController extends BaseController {
401 400 JsonResult totalCaseInfo = totalCaseInfo(statisticsParams);
402 401 dataMap.put("totalCaseInfo", totalCaseInfo.getData());
403 402
  403 +
  404 + List<Case> caseList = caseService.getCaseLoss(statisticsParams);
  405 + List<Case> expressCassList = Optional.ofNullable(caseList).map(all -> all.stream()
  406 + .filter(e -> "快递".equals(e.getRainageMethod()))
  407 + .collect(Collectors.toList())).orElse(new ArrayList<>());
  408 +
  409 + Map<String, Object> expressData = new HashMap<>();
  410 + Double expressAmount = 0d;
  411 + int expressCount = expressCassList.size();
  412 + for (Case aCase : expressCassList) {
  413 + expressAmount += aCase.getTotalAmount();
  414 + }
  415 + String expressAvg = "0";
  416 + if (expressCount > 0) {
  417 + expressAvg = String.format("%.1f", expressAmount * 1.0 / expressCount / 10000.0);
  418 + }
  419 + expressData.put("expressAmount", String.format("%.1f", expressAmount / 10000.0));
  420 + expressData.put("expressAvg", expressAvg);
  421 + expressData.put("expressCount", expressCount);
  422 + dataMap.put("expressData", expressData);
  423 +
404 424 //警情各地市分布饼图
405 425 List<PieChartVo> wiAreaData = warningInstanceService.statisticsCountByArea(statisticsParams);
406 426 dataMap.put("wiAreaData", wiAreaData);
... ... @@ -550,70 +570,75 @@ public class StatisticsController extends BaseController {
550 570 dataMap.put("caseSequentialType", caseSequential.contains("-") ? "下降" : "上升");
551 571 }
552 572
  573 + Map<String, Object> expressData = (Map<String, Object>) data.get("expressData");
  574 + dataMap.put("expressAmount", expressData.get("expressAmount"));
  575 + dataMap.put("expressAvg", expressData.get("expressAvg"));
  576 + dataMap.put("expressCount", expressData.get("expressCount"));
  577 +
553 578 //警情各地市分布饼图
554 579 List<PieChartVo> wiAreaDataList = (List<PieChartVo>) data.get("wiAreaData");
555 580 String dailyPicFile = JFChartUtils.createChart(wiAreaDataList, JFChartTypeEnum.PIE, dataRange + "警情分布图", "市", "数量");
556   - dataMap.put("sWIAreaPic", Pictures.ofStream(new FileInputStream(dailyPicFile), PictureType.JPEG).size(600, 200).create());
  581 + dataMap.put("sWIAreaPic", Pictures.ofStream(new FileInputStream(dailyPicFile), PictureType.JPEG).size(660, 220).create());
557 582 tempFilePath.add(dailyPicFile);
558 583
559 584 //警情各地市环比变化柱状图
560 585 List<PieChartVo> wissAreaData = (List<PieChartVo>) data.get("wissAreaData");
561 586 String sWISeqAreaPic = JFChartUtils.createChart(wissAreaData, JFChartTypeEnum.BAR, dataRange + "警情环比情况", "市", "环比");
562   - dataMap.put("sWISeqAreaPic", Pictures.ofStream(new FileInputStream(sWISeqAreaPic), PictureType.JPEG).size(600, 200).create());
  587 + dataMap.put("sWISeqAreaPic", Pictures.ofStream(new FileInputStream(sWISeqAreaPic), PictureType.JPEG).size(660, 220).create());
563 588 tempFilePath.add(sWISeqAreaPic);
564 589
565 590 //警情子类分布
566 591 List<PieChartVo> wiSubTypeData = (List<PieChartVo>) data.get("wiSubTypeData");
567 592 String wiSubTypeDataPic = JFChartUtils.createChart(wiSubTypeData, JFChartTypeEnum.PIE, dataRange + "警情类别分布", "警情类别", "数量");
568   - dataMap.put("wiSubTypeDataPic", Pictures.ofStream(new FileInputStream(wiSubTypeDataPic), PictureType.JPEG).size(600, 200).create());
  593 + dataMap.put("wiSubTypeDataPic", Pictures.ofStream(new FileInputStream(wiSubTypeDataPic), PictureType.JPEG).size(660, 220).create());
569 594 tempFilePath.add(wiSubTypeDataPic);
570 595
571 596 //警情分析
572 597 List<PieChartVo> wisDateData = (List<PieChartVo>) data.get("wisDateData");
573 598 String wisDateDataPic = JFChartUtils.createChart(wisDateData, JFChartTypeEnum.LINE, dataRange + "警情趋势", "市", "数量");
574   - dataMap.put("wisDateDataPic", Pictures.ofStream(new FileInputStream(wisDateDataPic), PictureType.JPEG).size(600, 200).create());
  599 + dataMap.put("wisDateDataPic", Pictures.ofStream(new FileInputStream(wisDateDataPic), PictureType.JPEG).size(660, 220).create());
575 600 tempFilePath.add(wisDateDataPic);
576 601
577 602 //案件各地市分布
578 603 List<PieChartVo> caseAreaData = (List<PieChartVo>) data.get("caseAreaData");
579 604 String caseAreaDataPic = JFChartUtils.createChart(caseAreaData, JFChartTypeEnum.PIE, dataRange + "案件分布图", "市", "数量");
580   - dataMap.put("caseAreaDataPic", Pictures.ofStream(new FileInputStream(caseAreaDataPic), PictureType.JPEG).size(600, 200).create());
  605 + dataMap.put("caseAreaDataPic", Pictures.ofStream(new FileInputStream(caseAreaDataPic), PictureType.JPEG).size(660, 220).create());
581 606 tempFilePath.add(caseAreaDataPic);
582 607
583 608 //电诈案件环比情况
584 609 List<PieChartVo> caseSsAreaData = (List<PieChartVo>) data.get("caseSsAreaData");
585 610 String caseSsAreaDataPic = JFChartUtils.createChart(caseSsAreaData, JFChartTypeEnum.BAR, dataRange + "电诈案件环比情况", "市", "环比");
586   - dataMap.put("caseSsAreaDataPic", Pictures.ofStream(new FileInputStream(caseSsAreaDataPic), PictureType.JPEG).size(600, 200).create());
  611 + dataMap.put("caseSsAreaDataPic", Pictures.ofStream(new FileInputStream(caseSsAreaDataPic), PictureType.JPEG).size(660, 220).create());
587 612 tempFilePath.add(caseSsAreaDataPic);
588 613
589 614 //案件诈骗类型分布
590 615 List<PieChartVo> csfData = (List<PieChartVo>) data.get("csfData");
591 616 String sCsfDataPic = JFChartUtils.createChart(csfData, JFChartTypeEnum.PIE, dataRange + "诈骗类型分布", "诈骗类型", "数量");
592   - dataMap.put("sCsfDataaPic", Pictures.ofStream(new FileInputStream(sCsfDataPic), PictureType.JPEG).size(600, 200).create());
  617 + dataMap.put("sCsfDataaPic", Pictures.ofStream(new FileInputStream(sCsfDataPic), PictureType.JPEG).size(660, 220).create());
593 618 tempFilePath.add(sCsfDataPic);
594 619
595 620 //案件引流方式分布图
596 621 List<PieChartVo> ccrmData = (List<PieChartVo>) data.get("ccrmData");
597 622 String ccrmDataPic = JFChartUtils.createChart(ccrmData, JFChartTypeEnum.PIE, dataRange + "引流方式分布图", "引流方式", "数量");
598   - dataMap.put("ccrmDataPic", Pictures.ofStream(new FileInputStream(ccrmDataPic), PictureType.JPEG).size(600, 200).create());
  623 + dataMap.put("ccrmDataPic", Pictures.ofStream(new FileInputStream(ccrmDataPic), PictureType.JPEG).size(660, 220).create());
599 624 tempFilePath.add(ccrmDataPic);
600 625
601 626 //案件支付方式分布图
602 627 List<PieChartVo> ccpmData = (List<PieChartVo>) data.get("ccpmData");
603 628 String ccpmDataPic = JFChartUtils.createChart(ccpmData, JFChartTypeEnum.PIE, dataRange + "支付方式分布图", "支付方式", "数量");
604   - dataMap.put("ccpmDataPic", Pictures.ofStream(new FileInputStream(ccpmDataPic), PictureType.JPEG).size(600, 200).create());
  629 + dataMap.put("ccpmDataPic", Pictures.ofStream(new FileInputStream(ccpmDataPic), PictureType.JPEG).size(660, 220).create());
605 630 tempFilePath.add(ccpmDataPic);
606 631
607 632 //案件受害人职业分布图
608 633 List<PieChartVo> ccCareerData = (List<PieChartVo>) data.get("ccCareerData");
609 634 String ccCareerDataPic = JFChartUtils.createChart(ccCareerData, JFChartTypeEnum.BAR, dataRange + "受害人职业分布图", "受害人职业", "数量");
610   - dataMap.put("ccCareerDataPic", Pictures.ofStream(new FileInputStream(ccCareerDataPic), PictureType.JPEG).size(600, 200).create());
  635 + dataMap.put("ccCareerDataPic", Pictures.ofStream(new FileInputStream(ccCareerDataPic), PictureType.JPEG).size(660, 220).create());
611 636 tempFilePath.add(ccCareerDataPic);
612 637
613 638 //案损分布
614 639 List<PieChartVo> ccLossData = (List<PieChartVo>) data.get("ccLossData");
615 640 String ccLossDataPic = JFChartUtils.createChart(ccLossData, JFChartTypeEnum.BAR, dataRange + "案损分布", "案损", "数量");
616   - dataMap.put("ccLossDataPic", Pictures.ofStream(new FileInputStream(ccLossDataPic), PictureType.JPEG).size(600, 200).create());
  641 + dataMap.put("ccLossDataPic", Pictures.ofStream(new FileInputStream(ccLossDataPic), PictureType.JPEG).size(660, 220).create());
617 642 tempFilePath.add(ccLossDataPic);
618 643
619 644 int clIndex = 1;
... ... @@ -625,7 +650,7 @@ public class StatisticsController extends BaseController {
625 650 //发案趋势
626 651 List<PieChartVo> ccDateData = (List<PieChartVo>) data.get("ccDateData");
627 652 String ccDateDataPic = JFChartUtils.createChart(ccDateData, JFChartTypeEnum.LINE, dataRange + "发案趋势", "日期", "数量");
628   - dataMap.put("ccDateDataPic", Pictures.ofStream(new FileInputStream(ccDateDataPic), PictureType.JPEG).size(600, 200).create());
  653 + dataMap.put("ccDateDataPic", Pictures.ofStream(new FileInputStream(ccDateDataPic), PictureType.JPEG).size(660, 220).create());
629 654 tempFilePath.add(ccDateDataPic);
630 655
631 656 //案件受害人性别占比
... ... @@ -675,16 +700,19 @@ public class StatisticsController extends BaseController {
675 700 Map<String, String> caseLossAreaMap = new HashMap<>();
676 701 if (CollectionUtils.isNotEmpty(majorCaseData)) {
677 702 for (Case cd : majorCaseData) {
  703 + CaseAnalysis analysis = cd.getAnalysis();
678 704 CaseLossVo clv = new CaseLossVo();
679 705 clv.setCode(cd.getCode());
680 706 clv.setArea(cd.getArea());
681   - clv.setCounty(cd.getAnalysis().getCounty());
682 707 clv.setTotalAmount(String.valueOf(cd.getTotalAmount()));
683   - clv.setFraudType(cd.getAnalysis().getFraudType());
684   - clv.setRainageMethod(cd.getAnalysis().getRainageMethod());
685   - clv.setPayMethod(cd.getAnalysis().getPayMethod());
686   - clv.setSex(cd.getAnalysis().getSex());
687   - clv.setCareer(cd.getAnalysis().getCareer());
  708 + if (analysis != null) {
  709 + clv.setFraudType(analysis.getFraudType());
  710 + clv.setCounty(analysis.getCounty());
  711 + clv.setRainageMethod(analysis.getRainageMethod());
  712 + clv.setPayMethod(analysis.getPayMethod());
  713 + clv.setSex(analysis.getSex());
  714 + clv.setCareer(analysis.getCareer());
  715 + }
688 716 nllDataList.add(clv);
689 717 caseLossAreaMap.put(cd.getArea(), "");
690 718 }
... ... @@ -717,23 +745,27 @@ public class StatisticsController extends BaseController {
717 745 Integer wi100wValue = 0;
718 746 if (CollectionUtils.isNotEmpty(majorWiData)) {
719 747 for (WarningInstance cd : majorWiData) {
  748 + WarningInstanceAnalysis analysis = cd.getAnalysis();
720 749 WiLossVo clv = new WiLossVo();
721 750 clv.setCode(cd.getCode());
722 751 clv.setArea(cd.getArea());
723 752 clv.setCounty(cd.getCounty());
724 753 clv.setAlarmSubType(cd.getAlarmSubType());
725   - clv.setAmount(String.valueOf(cd.getAnalysis().getAmount()));
726   - clv.setRainageMethod(cd.getAnalysis().getRainageMethod());
727   - clv.setPayMethod(cd.getAnalysis().getPayMethod());
728   - clv.setSex(cd.getAnalysis().getSex());
729   - clv.setCareer(cd.getAnalysis().getCareer());
  754 + if (analysis != null) {
  755 + clv.setAmount(String.valueOf(cd.getAnalysis().getAmount()));
  756 + clv.setRainageMethod(cd.getAnalysis().getRainageMethod());
  757 + clv.setPayMethod(cd.getAnalysis().getPayMethod());
  758 + clv.setSex(cd.getAnalysis().getSex());
  759 + clv.setCareer(cd.getAnalysis().getCareer());
  760 + if (cd.getAnalysis().getAmount() < 1000000) {
  761 + wi50wValue++;
  762 + } else {
  763 + wi100wValue++;
  764 + }
  765 + }
730 766 mwiDataList.add(clv);
731 767 caseLossAreaMap.put(cd.getArea(), "");
732   - if (cd.getAnalysis().getAmount() < 1000000) {
733   - wi50wValue++;
734   - } else {
735   - wi100wValue++;
736   - }
  768 +
737 769 }
738 770 }
739 771
... ...
... ... @@ -105,4 +105,8 @@ public class Case extends BaseModel {
105 105
106 106 @Transient
107 107 private transient List<String> exceptIds;
  108 +
  109 + @Transient
  110 + private transient String rainageMethod;
  111 +
108 112 }
... ...
... ... @@ -190,7 +190,7 @@ public class CaseService {
190 190
191 191 public List<Case> getCaseLoss(StatisticsParams params) {
192 192 MPJQueryWrapper<Case> mpjQueryWrapper = new MPJQueryWrapper<Case>();
193   - mpjQueryWrapper.select("t.id,t.total_amount as totalAmount,ca.age")
  193 + mpjQueryWrapper.select("t.id,t.total_amount as totalAmount,ca.age,ca.rainage_method as rainageMethod")
194 194 .leftJoin("t_ash_case_analysis ca on t.id=ca.case_id");
195 195
196 196 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
... ...
... ... @@ -62,8 +62,8 @@ public class JFChartUtils {
62 62 NumberAxis numberaxis = (NumberAxis) plot.getRangeAxis();
63 63 numberaxis.setUpperMargin(0.1);
64 64 numberaxis.setLowerMargin(0.1);
65   - numberaxis.setTickLabelFont(new Font("宋体", Font.BOLD, 12));
66   - numberaxis.setLabelFont(new Font("宋体", Font.BOLD, 12));
  65 + numberaxis.setTickLabelFont(new Font("宋体", Font.BOLD, 16));
  66 + numberaxis.setLabelFont(new Font("宋体", Font.BOLD, 16));
67 67
68 68 // 设置数据点可见性
69 69 LineAndShapeRenderer renderer = (LineAndShapeRenderer) plot.getRenderer();
... ... @@ -109,12 +109,12 @@ public class JFChartUtils {
109 109 NumberAxis numberaxis = (NumberAxis) categoryplot.getRangeAxis();
110 110 numberaxis.setUpperMargin(0.1);//设置最高的一个柱与图片顶端的距离(最高柱的10%)
111 111 numberaxis.setLowerMargin(0.1);
112   - numberaxis.setTickLabelFont(new Font("宋体", Font.BOLD, 12));
113   - numberaxis.setLabelFont(new Font("宋体", Font.BOLD, 12));
  112 + numberaxis.setTickLabelFont(new Font("宋体", Font.BOLD, 16));
  113 + numberaxis.setLabelFont(new Font("宋体", Font.BOLD, 16));
114 114
115 115 //项目轴设置
116 116 CategoryAxis domainAxis = categoryplot.getDomainAxis();
117   - domainAxis.setTickLabelFont(new Font("宋体", Font.BOLD, 15));
  117 + domainAxis.setTickLabelFont(new Font("宋体", Font.BOLD, 16));
118 118
119 119 }
120 120
... ... @@ -125,7 +125,7 @@ public class JFChartUtils {
125 125 chart.setBackgroundPaint(Color.WHITE);
126 126 plot.setBackgroundPaint(Color.WHITE);
127 127 // 设置标签字体
128   - plot.setLabelFont(new Font("宋体", Font.PLAIN, 14));
  128 + plot.setLabelFont(new Font("宋体", Font.PLAIN, 16));
129 129 // 设置无数据信息字体(如果需要)
130 130 plot.setNoDataMessageFont(new Font("宋体", Font.PLAIN, 18));
131 131 plot.setNoDataMessage("暂无数据");
... ... @@ -160,9 +160,9 @@ public class JFChartUtils {
160 160 public static String createChart(List<PieChartVo> dataList, JFChartTypeEnum type, String title, String xAxisLabel, String yAxisLabel) throws IOException {
161 161 // 设置全局字体(支持中文)
162 162 StandardChartTheme chartTheme = new StandardChartTheme("CN");
163   - chartTheme.setExtraLargeFont(new Font("宋体", Font.PLAIN, 14)); // 标题字体
164   - chartTheme.setLargeFont(new Font("宋体", Font.PLAIN, 14)); // 图例字体
165   - chartTheme.setRegularFont(new Font("宋体", Font.PLAIN, 12)); // 轴标签字体
  163 + chartTheme.setExtraLargeFont(new Font("宋体", Font.PLAIN, 16)); // 标题字体
  164 + chartTheme.setLargeFont(new Font("宋体", Font.PLAIN, 16)); // 图例字体
  165 + chartTheme.setRegularFont(new Font("宋体", Font.PLAIN, 16)); // 轴标签字体
166 166 ChartFactory.setChartTheme(chartTheme);
167 167 JFreeChart chart = null;
168 168 switch (type) {
... ...