diff --git a/platform-operate-api/src/main/java/com/lyms/platform/operate/web/controller/StatisticsController.java b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/controller/StatisticsController.java index edc74d2..719ed74 100644 --- a/platform-operate-api/src/main/java/com/lyms/platform/operate/web/controller/StatisticsController.java +++ b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/controller/StatisticsController.java @@ -283,6 +283,225 @@ public class StatisticsController extends BaseController { ResultUtils.buildSuccessResultAndWrite(response, result); } + // TYPE 省数据 + else if (type == 2) { + AreaDataQuery query = new AreaDataQuery(); + query.setProvinceId(pid); + // 地图数据 + List provinceRiskList = statisticsService.queryRisksByProvince(query); + List provincePatientList = statisticsService.queryPatientsByProvince(query); + Map kvData = new HashMap<>(); + Map mapsData = new HashMap<>(); + Map riskColorMap = new HashMap<>(); + + Option areaBarOption = buildyBarOption("建档及高危人数", null); + areaBarOption.getLegend().getData().add("近30天建档人数"); + areaBarOption.getLegend().getData().add("当前高危总人数"); + areaBarOption.getLegend().setOrient("horizontal"); + areaBarOption.getLegend().setLeft("3%"); + areaBarOption.getLegend().setTop("55px"); + areaBarOption.getTooltip().setShow(true); + areaBarOption.getGrid().setTop("90px"); + List areaBarSeriesList = new ArrayList<>(); + Series patientSeries = new Series(); + patientSeries.setName("近30天建档人数"); + patientSeries.setType("bar"); + normal.setPosition("right"); + patientSeries.setLabel(label); + List patientDataList = new ArrayList<>(); + patientSeries.setData(patientDataList); + Series riskSeries = new Series(); + riskSeries.setName("当前高危总人数"); + riskSeries.setType("bar"); + riskSeries.setLabel(label); + List riskDataList = new ArrayList<>(); + riskSeries.setData(riskDataList); + areaBarSeriesList.add(riskSeries); + areaBarSeriesList.add(patientSeries); + areaBarOption.setSeries(areaBarSeriesList); + + for (AreaData areaData:provinceRiskList) { + String rigino = areaData.getCityName().replace("市", "").replace("省", ""); + if (mapsData.get(rigino) == null) { + mapsData.put(rigino, areaData.getVal()); + kvData.put(rigino, areaData.getProvinceId()); + } else { + mapsData.put(rigino, mapsData.get(rigino) + areaData.getVal()); + } + } + for (AreaData areaData:provincePatientList) { + String rigino = areaData.getProvinceName().replace("市", "").replace("省", ""); + if (mapsData.get(rigino) == null) { + riskDataList.add(0); + mapsData.put(rigino, areaData.getVal()); + kvData.put(rigino, areaData.getProvinceId()); + } else { + riskDataList.add(mapsData.get(rigino)); + mapsData.put(rigino, mapsData.get(rigino) + areaData.getVal()); + } + areaBarOption.getyAxis().getData().add(rigino); + patientDataList.add(areaData.getVal()); + } + + List dataList = new ArrayList<>(); + Set set = mapsData.keySet(); + for (String key:set) { + Data data = new Data(); + data.setName(key); + data.setValue(mapsData.get(key)); + dataList.add(data); + } + + Option option = buildMapOption("孕妇建档数", null); + option.getLegend().setTop("50px"); + List seriesList = new ArrayList<>(); + Series series = new Series(); + series.setName("建档及高危数"); + series.setType("map"); + series.setMapType("china"); + series.setRoam(false); + series.setData(dataList); + seriesList.add(series); + option.setSeries(seriesList); + + + // 高危数据 + List currentRiskList = statisticsService.queryRisks(new AreaDataQuery()); + Option groupRiskOption = buildyBarOption("当前高危人数", null); + groupRiskOption.getTooltip().setShow(true); + List groupRiskSeriesList = new ArrayList<>(); + Series groupRiskSeries = new Series(); + groupRiskSeries.setName("高危人数"); + groupRiskSeries.setType("bar"); + mapsData.clear(); + for (AreaData areaData:currentRiskList) { + String groupName = areaData.getGroupName().replace("预警", ""); + if (mapsData.get(areaData.getRiskName()) == null) { + mapsData.put(areaData.getRiskName(),areaData.getVal()); + if (colormap.get(groupName) != null) { + riskColorMap.put(areaData.getRiskName(),colormap.get(groupName)); + } + } else { + mapsData.put(areaData.getRiskName(), mapsData.get(areaData.getRiskName()) + areaData.getVal()); + } + } + + // 按MAP的value排序 + List> listData = new ArrayList>(mapsData.entrySet()); + Collections.sort(listData, new Comparator>() { + public int compare(Map.Entry o1, Map.Entry o2) { + if (o2.getValue() != null && o1.getValue() != null && o2.getValue().compareTo(o1.getValue()) > 0) { + return -1; + } else { + return 1; + } + } + }); + + List groupRiskDataList = new ArrayList<>(); + int n = listData.size(); + for (Map.Entry entry:listData) { + n--; + if (n>28) { + continue; + } + groupRiskOption.getyAxis().getData().add(entry.getKey()); + if (riskColorMap.containsKey(entry.getKey())) { + Data data = new Data(); + data.setValue(entry.getValue()); + data.setItemStyle(new ItemStyle(new Normal(true,riskColorMap.get(entry.getKey())),null)); + groupRiskDataList.add(data); + } else { + groupRiskDataList.add(entry.getValue()); + } + } + groupRiskSeries.setData(groupRiskDataList); + groupRiskSeriesList.add(groupRiskSeries); + groupRiskOption.setSeries(groupRiskSeriesList); + + Map> patientMonthMap = new HashMap<>(); + // 6. 按省或市或地区查询区域内近12个自然月每月产检中历史高危人数(按颜色分组) + query.setDays(12); + List riskMonthList = statisticsService.queryHrefYearRisks(query); + Map rmap = new HashMap<>(); + for (AreaData areaData:riskMonthList) { + String month = buildMonth(areaData.getYear()); + if (rmap.containsKey(month)) { + rmap.put(month, rmap.get(month) + areaData.getVal()); + } else { + rmap.put(month, areaData.getVal()); + } + } + patientMonthMap.put("高危人数", rmap); + // 4. 按省或市或地区查询区域内近12个自然月每月建档人数 + query = new AreaDataQuery(); + List patientMonthList = statisticsService.queryMonthPatients(query); + Map pmap = new HashMap<>(); + for (AreaData areaData:patientMonthList) { + String month = buildMonth(areaData.getYear()); + if (pmap.containsKey(month)) { + pmap.put(month, pmap.get(month) + areaData.getVal()); + } else { + pmap.put(month, areaData.getVal()); + } + } + patientMonthMap.put("建档人数", pmap); + Option patientMonthOption = buildLineOption("建档及高危人数", null, patientMonthMap, buildDefaultMonth(12)); + + // 按省或市或地区查询区域内近12个自然月每月初诊人数、复诊人数 + query = new AreaDataQuery(); + List reportMonthList = statisticsService.queryMonthReports(query); + Map> reportMonthMap = new HashMap<>(); + Map firstmap = new HashMap<>(); + Map secondmap = new HashMap<>(); + for (AreaData areaData:reportMonthList) { + String month = buildMonth(areaData.getYear()); + if (firstmap.containsKey(month)) { + firstmap.put(month, firstmap.get(month) + areaData.getVal()); + } else { + firstmap.put(month, areaData.getVal()); + } + if (secondmap.containsKey(month)) { + secondmap.put(month, secondmap.get(month) + areaData.getVal2()); + } else { + secondmap.put(month, areaData.getVal2()); + } + } + reportMonthMap.put("复诊人数", secondmap); + reportMonthMap.put("初诊人数", firstmap); + Option reportMonthOption = buildLineOption("初诊及复诊人数", null, reportMonthMap, buildDefaultMonth(12)); + + + // 近6个月高危数据(按颜色分组) + Map> groupRiskMonthMap = new HashMap<>(); + for (AreaData areaData:riskMonthList) { + String groupName = areaData.getGroupName().replace("预警", ""); + Map grmap = groupRiskMonthMap.get(groupName); + if (grmap == null) { + grmap = new HashMap<>(); + groupRiskMonthMap.put(groupName, grmap); + } + String month = buildMonth(areaData.getYear()); + if (grmap.containsKey(month)) { + grmap.put(month, grmap.get(month) + areaData.getVal()); + } else { + grmap.put(month, areaData.getVal()); + } + } + Option groupRiskMonthOption = buildxBarOption("高危历史人数", null, groupRiskMonthMap, buildDefaultMonth(6), colormap); + + + result.put("type", 1); + result.put("kvData", kvData); + result.put("mapsOption", option); + result.put("areaBarOption", areaBarOption); + result.put("riskOption", groupRiskOption); + result.put("patientMonthOption", patientMonthOption); + result.put("reportMonthOption", reportMonthOption); + result.put("groupRiskMonthOption", groupRiskMonthOption); + ResultUtils.buildSuccessResultAndWrite(response, result); + } + } @@ -372,7 +591,7 @@ public class StatisticsController extends BaseController { legend.setTop("20px"); legend.setLeft("left"); List tempList = new ArrayList(); - tempList.add("建档&高危数"); + tempList.add("建档及高危数"); legend.setData(tempList); option.setLegend(legend); option.setVisualMap(new VisualMap());