Commit 63fd6ad4e7f337c7a2b2ccecfba5854cd9ccfc8a

Authored by baohanddd
1 parent 32e86897f0

add statistics(map) common index (area data)

Showing 1 changed file with 175 additions and 2 deletions

platform-operate-api/src/main/java/com/lyms/platform/operate/web/controller/StatisticsController.java View file @ 63fd6ad
... ... @@ -9,6 +9,7 @@
9 9 import com.lymsh.platform.reportdata.model.AreaDataQuery;
10 10 import com.lymsh.platform.reportdata.model.echarts.*;
11 11 import com.lymsh.platform.reportdata.service.StatisticsService;
  12 +import org.apache.commons.beanutils.BeanUtils;
12 13 import org.apache.commons.lang.StringUtils;
13 14 import org.joda.time.DateTime;
14 15 import org.springframework.beans.factory.annotation.Autowired;
... ... @@ -520,6 +521,14 @@
520 521 String cityName = null;
521 522 AreaDataQuery query = new AreaDataQuery();
522 523 query.setCityId(pid);
  524 +
  525 + //区县数据
  526 + Map<String, Option> groupRiskOptionMap = new HashMap<>();
  527 + Map<String, Option> patientMonthOptionMap = new HashMap<>();
  528 + Map<String, Option> reportMonthOptionMap = new HashMap<>();
  529 + Map<String, Option> groupRiskMonthOptionMap = new HashMap<>();
  530 +
  531 +
523 532 // 地图数据
524 533 List<AreaData> provinceRiskList = statisticsService.queryRisksByCity(query);
525 534 List<AreaData> provincePatientList = statisticsService.queryPatientsByCity(query);
526 535  
... ... @@ -599,13 +608,14 @@
599 608 Series series = new Series();
600 609 series.setName("建档及高危数");
601 610 series.setType("map");
602   - series.setMapType(cityPinyinMap.get(cityName.replace("市","").replace("省","")));
  611 + series.setMapType(cityPinyinMap.get(cityName.replace("市", "").replace("省", "")));
603 612 series.setRoam(false);
604 613 series.setData(dataList);
605 614 series.setLabel(label);
606 615 seriesList.add(series);
607 616 option.setSeries(seriesList);
608 617  
  618 + Map<String, Map<String, Integer>> subMapsData = new HashMap<>();
609 619  
610 620 // 高危数据
611 621 List<AreaData> currentRiskList = statisticsService.queryRisks(query);
... ... @@ -618,6 +628,19 @@
618 628 mapsData.clear();
619 629 for (AreaData areaData:currentRiskList) {
620 630 String groupName = areaData.getGroupName().replace("预警", "");
  631 +
  632 + Map<String, Integer> areaMap = subMapsData.get(areaData.getAreaName());
  633 + if (areaMap == null) {
  634 + areaMap = new HashMap<>();
  635 + subMapsData.put(areaData.getAreaName(), areaMap);
  636 + }
  637 +
  638 + if (areaMap.get(areaData.getRiskName()) == null) {
  639 + areaMap.put(areaData.getRiskName(),areaData.getVal());
  640 + } else {
  641 + areaMap.put(areaData.getRiskName(), areaMap.get(areaData.getRiskName()) + areaData.getVal());
  642 + }
  643 +
621 644 if (mapsData.get(areaData.getRiskName()) == null) {
622 645 mapsData.put(areaData.getRiskName(),areaData.getVal());
623 646 if (colormap.get(groupName) != null) {
624 647  
625 648  
626 649  
... ... @@ -657,17 +680,84 @@
657 680 groupRiskDataList.add(entry.getValue());
658 681 }
659 682 }
  683 +
660 684 groupRiskSeries.setData(groupRiskDataList);
661 685 groupRiskSeriesList.add(groupRiskSeries);
662 686 groupRiskOption.setSeries(groupRiskSeriesList);
663 687  
  688 + for (String areaName:subMapsData.keySet()) {
  689 + try {
  690 + Option subGroupRiskOption = (Option)BeanUtils.cloneBean(groupRiskOption);
  691 + subGroupRiskOption.getTitle().setText(areaName + subGroupRiskOption.getTitle().getText());
  692 + subGroupRiskOption.getyAxis().getData().clear();
  693 + // 按MAP的value排序
  694 + List<Map.Entry<String, Integer>> subListData = new ArrayList<Map.Entry<String, Integer>>(subMapsData.get(areaName).entrySet());
  695 + Collections.sort(subListData, new Comparator<Map.Entry<String, Integer>>() {
  696 + public int compare(Map.Entry<String, Integer> o1, Map.Entry<String, Integer> o2) {
  697 + if (o2.getValue() != null && o1.getValue() != null && o2.getValue().compareTo(o1.getValue()) > 0) {
  698 + return -1;
  699 + } else {
  700 + return 1;
  701 + }
  702 + }
  703 + });
  704 +
  705 + List<Object> subGroupRiskDataList = new ArrayList<>();
  706 + n = listData.size();
  707 + for (Map.Entry<String, Integer> entry:subListData) {
  708 + n--;
  709 + if (n>28) {
  710 + continue;
  711 + }
  712 + subGroupRiskOption.getyAxis().getData().add(entry.getKey());
  713 + if (riskColorMap.containsKey(entry.getKey())) {
  714 + Data data = new Data();
  715 + data.setValue(entry.getValue());
  716 + data.setItemStyle(new ItemStyle(new Normal(true,riskColorMap.get(entry.getKey())),null));
  717 + subGroupRiskDataList.add(data);
  718 + } else {
  719 + subGroupRiskDataList.add(entry.getValue());
  720 + }
  721 + }
  722 +
  723 + Series subgroupRiskSeries = new Series();
  724 + subgroupRiskSeries.setName("高危人数");
  725 + subgroupRiskSeries.setType("bar");
  726 + subgroupRiskSeries.setData(subGroupRiskDataList);
  727 + subGroupRiskOption.getSeries().clear();
  728 + subGroupRiskOption.getSeries().add(subgroupRiskSeries);
  729 + } catch (Exception e) {
  730 + e.printStackTrace();
  731 + }
  732 + }
  733 +
  734 +
664 735 Map<String, Map<String, Integer>> patientMonthMap = new HashMap<>();
  736 + Map<String, Map<String, Map<String, Integer>>> subPatientMonthMap = new HashMap<>();
665 737 // 6. 按省或市或地区查询区域内近12个自然月每月产检中历史高危人数(按颜色分组)
666 738 query.setDays(12);
667 739 List<AreaData> riskMonthList = statisticsService.queryHrefYearRisks(query);
668 740 Map<String, Integer> rmap = new HashMap<>();
669 741 for (AreaData areaData:riskMonthList) {
670 742 String month = buildMonth(areaData.getYear());
  743 +
  744 + Map<String, Map<String, Integer>> subrmap = subPatientMonthMap.get(areaData.getAreaName());
  745 + if (subrmap == null) {
  746 + subrmap = new HashMap<>();
  747 + subPatientMonthMap.put(areaData.getAreaName(), subrmap);
  748 + }
  749 +
  750 + Map<String, Integer> submap = subrmap.get("高危人数");
  751 + if (submap == null) {
  752 + submap = new HashMap<>();
  753 + subrmap.put("高危人数", submap);
  754 + }
  755 + if (submap.containsKey(month)) {
  756 + submap.put(month, submap.get(month) + areaData.getVal());
  757 + } else {
  758 + submap.put(month, areaData.getVal());
  759 + }
  760 +
671 761 if (rmap.containsKey(month)) {
672 762 rmap.put(month, rmap.get(month) + areaData.getVal());
673 763 } else {
... ... @@ -680,6 +770,24 @@
680 770 Map<String, Integer> pmap = new HashMap<>();
681 771 for (AreaData areaData:patientMonthList) {
682 772 String month = buildMonth(areaData.getYear());
  773 +
  774 + Map<String, Map<String, Integer>> subrmap = subPatientMonthMap.get(areaData.getAreaName());
  775 + if (subrmap == null) {
  776 + subrmap = new HashMap<>();
  777 + subPatientMonthMap.put(areaData.getAreaName(), subrmap);
  778 + }
  779 +
  780 + Map<String, Integer> submap = subrmap.get("建档人数");
  781 + if (submap == null) {
  782 + submap = new HashMap<>();
  783 + subrmap.put("建档人数", submap);
  784 + }
  785 + if (submap.containsKey(month)) {
  786 + submap.put(month, submap.get(month) + areaData.getVal());
  787 + } else {
  788 + submap.put(month, areaData.getVal());
  789 + }
  790 +
683 791 if (pmap.containsKey(month)) {
684 792 pmap.put(month, pmap.get(month) + areaData.getVal());
685 793 } else {
686 794  
687 795  
... ... @@ -689,13 +797,46 @@
689 797 patientMonthMap.put("建档人数", pmap);
690 798 Option patientMonthOption = buildLineOption("建档及高危人数", null, patientMonthMap, buildDefaultMonth(12));
691 799  
  800 + for (String areaName:subPatientMonthMap.keySet()) {
  801 + patientMonthOptionMap.put(areaName, buildLineOption(areaName + "建档及高危人数", null, subPatientMonthMap.get(areaName), buildDefaultMonth(12)));
  802 + }
  803 +
692 804 // 按省或市或地区查询区域内近12个自然月每月初诊人数、复诊人数
693 805 List<AreaData> reportMonthList = statisticsService.queryMonthReports(query);
694 806 Map<String, Map<String, Integer>> reportMonthMap = new HashMap<>();
  807 + Map<String, Map<String, Map<String, Integer>>> subReportMonthMap = new HashMap<>();
695 808 Map<String, Integer> firstmap = new HashMap<>();
696 809 Map<String, Integer> secondmap = new HashMap<>();
697 810 for (AreaData areaData:reportMonthList) {
698 811 String month = buildMonth(areaData.getYear());
  812 +
  813 + Map<String, Map<String, Integer>> subrmap = subReportMonthMap.get(areaData.getAreaName());
  814 + if (subrmap == null) {
  815 + subrmap = new HashMap<>();
  816 + subReportMonthMap.put(areaData.getAreaName(), subrmap);
  817 + }
  818 +
  819 + Map<String, Integer> fmap = subrmap.get("初诊人数");
  820 + if (fmap == null) {
  821 + fmap = new HashMap<>();
  822 + subrmap.put("初诊人数", fmap);
  823 + }
  824 + if (fmap.containsKey(month)) {
  825 + fmap.put(month, fmap.get(month) + areaData.getVal());
  826 + } else {
  827 + fmap.put(month, areaData.getVal());
  828 + }
  829 + Map<String, Integer> smap = subrmap.get("复诊人数");
  830 + if (smap == null) {
  831 + smap = new HashMap<>();
  832 + subrmap.put("复诊人数", smap);
  833 + }
  834 + if (smap.containsKey(month)) {
  835 + smap.put(month, smap.get(month) + areaData.getVal2());
  836 + } else {
  837 + smap.put(month, areaData.getVal2());
  838 + }
  839 +
699 840 if (firstmap.containsKey(month)) {
700 841 firstmap.put(month, firstmap.get(month) + areaData.getVal());
701 842 } else {
702 843  
703 844  
704 845  
705 846  
... ... @@ -711,17 +852,39 @@
711 852 reportMonthMap.put("初诊人数", firstmap);
712 853 Option reportMonthOption = buildLineOption("初诊及复诊人数", null, reportMonthMap, buildDefaultMonth(12));
713 854  
  855 + for (String areaName:subReportMonthMap.keySet()) {
  856 + reportMonthOptionMap.put(areaName, buildLineOption(areaName + "初诊及复诊人数", null, subReportMonthMap.get(areaName), buildDefaultMonth(12)));
  857 + }
714 858  
  859 +
715 860 // 近6个月高危数据(按颜色分组)
716 861 Map<String, Map<String, Integer>> groupRiskMonthMap = new HashMap<>();
  862 + Map<String, Map<String, Map<String, Integer>>> subGroupRiskMonthMap = new HashMap<>();
717 863 for (AreaData areaData:riskMonthList) {
718 864 String groupName = areaData.getGroupName().replace("预警", "");
  865 + String month = buildMonth(areaData.getYear());
  866 +
  867 + Map<String, Map<String, Integer>> subrmap = subGroupRiskMonthMap.get(areaData.getAreaName());
  868 + if (subrmap == null) {
  869 + subrmap = new HashMap<>();
  870 + subGroupRiskMonthMap.put(areaData.getAreaName(), subrmap);
  871 + }
  872 + Map<String, Integer> smap = subrmap.get(groupName);
  873 + if (smap == null) {
  874 + smap = new HashMap<>();
  875 + subrmap.put(groupName, smap);
  876 + }
  877 + if (smap.containsKey(month)) {
  878 + smap.put(month, smap.get(month) + areaData.getVal());
  879 + } else {
  880 + smap.put(month, areaData.getVal());
  881 + }
  882 +
719 883 Map<String, Integer> grmap = groupRiskMonthMap.get(groupName);
720 884 if (grmap == null) {
721 885 grmap = new HashMap<>();
722 886 groupRiskMonthMap.put(groupName, grmap);
723 887 }
724   - String month = buildMonth(areaData.getYear());
725 888 if (grmap.containsKey(month)) {
726 889 grmap.put(month, grmap.get(month) + areaData.getVal());
727 890 } else {
728 891  
... ... @@ -730,7 +893,11 @@
730 893 }
731 894 Option groupRiskMonthOption = buildxBarOption("高危历史人数", null, groupRiskMonthMap, buildDefaultMonth(6), colormap);
732 895  
  896 + for (String areaName:subGroupRiskMonthMap.keySet()) {
  897 + groupRiskMonthOptionMap.put(areaName, buildLineOption(areaName + "高危历史人数", null, subGroupRiskMonthMap.get(areaName), buildDefaultMonth(12)));
  898 + }
733 899  
  900 +
734 901 result.put("type", 3);
735 902 result.put("provinceId", provinceId);
736 903 result.put("cityName", cityName);
... ... @@ -742,6 +909,12 @@
742 909 result.put("patientMonthOption", patientMonthOption);
743 910 result.put("reportMonthOption", reportMonthOption);
744 911 result.put("groupRiskMonthOption", groupRiskMonthOption);
  912 +
  913 + result.put("groupRiskOptionMap", groupRiskOptionMap);
  914 + result.put("patientMonthOptionMap", patientMonthOptionMap);
  915 + result.put("reportMonthOptionMap", reportMonthOptionMap);
  916 + result.put("groupRiskMonthOptionMap", groupRiskMonthOptionMap);
  917 +
745 918 ResultUtils.buildSuccessResultAndWrite(response, result);
746 919 }
747 920