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 93ce41d..adb77da 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 @@ -9,6 +9,7 @@ import com.lymsh.platform.reportdata.model.AreaData; import com.lymsh.platform.reportdata.model.AreaDataQuery; import com.lymsh.platform.reportdata.model.echarts.*; import com.lymsh.platform.reportdata.service.StatisticsService; +import org.apache.commons.beanutils.BeanUtils; import org.apache.commons.lang.StringUtils; import org.joda.time.DateTime; import org.springframework.beans.factory.annotation.Autowired; @@ -520,6 +521,14 @@ public class StatisticsController extends BaseController { String cityName = null; AreaDataQuery query = new AreaDataQuery(); query.setCityId(pid); + + //区县数据 + Map groupRiskOptionMap = new HashMap<>(); + Map patientMonthOptionMap = new HashMap<>(); + Map reportMonthOptionMap = new HashMap<>(); + Map groupRiskMonthOptionMap = new HashMap<>(); + + // 地图数据 List provinceRiskList = statisticsService.queryRisksByCity(query); List provincePatientList = statisticsService.queryPatientsByCity(query); @@ -599,13 +608,14 @@ public class StatisticsController extends BaseController { Series series = new Series(); series.setName("建档及高危数"); series.setType("map"); - series.setMapType(cityPinyinMap.get(cityName.replace("市","").replace("省",""))); + series.setMapType(cityPinyinMap.get(cityName.replace("市", "").replace("省", ""))); series.setRoam(false); series.setData(dataList); series.setLabel(label); seriesList.add(series); option.setSeries(seriesList); + Map> subMapsData = new HashMap<>(); // 高危数据 List currentRiskList = statisticsService.queryRisks(query); @@ -618,6 +628,19 @@ public class StatisticsController extends BaseController { mapsData.clear(); for (AreaData areaData:currentRiskList) { String groupName = areaData.getGroupName().replace("预警", ""); + + Map areaMap = subMapsData.get(areaData.getAreaName()); + if (areaMap == null) { + areaMap = new HashMap<>(); + subMapsData.put(areaData.getAreaName(), areaMap); + } + + if (areaMap.get(areaData.getRiskName()) == null) { + areaMap.put(areaData.getRiskName(),areaData.getVal()); + } else { + areaMap.put(areaData.getRiskName(), areaMap.get(areaData.getRiskName()) + areaData.getVal()); + } + if (mapsData.get(areaData.getRiskName()) == null) { mapsData.put(areaData.getRiskName(),areaData.getVal()); if (colormap.get(groupName) != null) { @@ -657,17 +680,84 @@ public class StatisticsController extends BaseController { groupRiskDataList.add(entry.getValue()); } } + groupRiskSeries.setData(groupRiskDataList); groupRiskSeriesList.add(groupRiskSeries); groupRiskOption.setSeries(groupRiskSeriesList); + for (String areaName:subMapsData.keySet()) { + try { + Option subGroupRiskOption = (Option)BeanUtils.cloneBean(groupRiskOption); + subGroupRiskOption.getTitle().setText(areaName + subGroupRiskOption.getTitle().getText()); + subGroupRiskOption.getyAxis().getData().clear(); + // 按MAP的value排序 + List> subListData = new ArrayList>(subMapsData.get(areaName).entrySet()); + Collections.sort(subListData, 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 subGroupRiskDataList = new ArrayList<>(); + n = listData.size(); + for (Map.Entry entry:subListData) { + n--; + if (n>28) { + continue; + } + subGroupRiskOption.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)); + subGroupRiskDataList.add(data); + } else { + subGroupRiskDataList.add(entry.getValue()); + } + } + + Series subgroupRiskSeries = new Series(); + subgroupRiskSeries.setName("高危人数"); + subgroupRiskSeries.setType("bar"); + subgroupRiskSeries.setData(subGroupRiskDataList); + subGroupRiskOption.getSeries().clear(); + subGroupRiskOption.getSeries().add(subgroupRiskSeries); + } catch (Exception e) { + e.printStackTrace(); + } + } + + Map> patientMonthMap = new HashMap<>(); + Map>> subPatientMonthMap = 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()); + + Map> subrmap = subPatientMonthMap.get(areaData.getAreaName()); + if (subrmap == null) { + subrmap = new HashMap<>(); + subPatientMonthMap.put(areaData.getAreaName(), subrmap); + } + + Map submap = subrmap.get("高危人数"); + if (submap == null) { + submap = new HashMap<>(); + subrmap.put("高危人数", submap); + } + if (submap.containsKey(month)) { + submap.put(month, submap.get(month) + areaData.getVal()); + } else { + submap.put(month, areaData.getVal()); + } + if (rmap.containsKey(month)) { rmap.put(month, rmap.get(month) + areaData.getVal()); } else { @@ -680,6 +770,24 @@ public class StatisticsController extends BaseController { Map pmap = new HashMap<>(); for (AreaData areaData:patientMonthList) { String month = buildMonth(areaData.getYear()); + + Map> subrmap = subPatientMonthMap.get(areaData.getAreaName()); + if (subrmap == null) { + subrmap = new HashMap<>(); + subPatientMonthMap.put(areaData.getAreaName(), subrmap); + } + + Map submap = subrmap.get("建档人数"); + if (submap == null) { + submap = new HashMap<>(); + subrmap.put("建档人数", submap); + } + if (submap.containsKey(month)) { + submap.put(month, submap.get(month) + areaData.getVal()); + } else { + submap.put(month, areaData.getVal()); + } + if (pmap.containsKey(month)) { pmap.put(month, pmap.get(month) + areaData.getVal()); } else { @@ -689,13 +797,46 @@ public class StatisticsController extends BaseController { patientMonthMap.put("建档人数", pmap); Option patientMonthOption = buildLineOption("建档及高危人数", null, patientMonthMap, buildDefaultMonth(12)); + for (String areaName:subPatientMonthMap.keySet()) { + patientMonthOptionMap.put(areaName, buildLineOption(areaName + "建档及高危人数", null, subPatientMonthMap.get(areaName), buildDefaultMonth(12))); + } + // 按省或市或地区查询区域内近12个自然月每月初诊人数、复诊人数 List reportMonthList = statisticsService.queryMonthReports(query); Map> reportMonthMap = new HashMap<>(); + Map>> subReportMonthMap = new HashMap<>(); Map firstmap = new HashMap<>(); Map secondmap = new HashMap<>(); for (AreaData areaData:reportMonthList) { String month = buildMonth(areaData.getYear()); + + Map> subrmap = subReportMonthMap.get(areaData.getAreaName()); + if (subrmap == null) { + subrmap = new HashMap<>(); + subReportMonthMap.put(areaData.getAreaName(), subrmap); + } + + Map fmap = subrmap.get("初诊人数"); + if (fmap == null) { + fmap = new HashMap<>(); + subrmap.put("初诊人数", fmap); + } + if (fmap.containsKey(month)) { + fmap.put(month, fmap.get(month) + areaData.getVal()); + } else { + fmap.put(month, areaData.getVal()); + } + Map smap = subrmap.get("复诊人数"); + if (smap == null) { + smap = new HashMap<>(); + subrmap.put("复诊人数", smap); + } + if (smap.containsKey(month)) { + smap.put(month, smap.get(month) + areaData.getVal2()); + } else { + smap.put(month, areaData.getVal2()); + } + if (firstmap.containsKey(month)) { firstmap.put(month, firstmap.get(month) + areaData.getVal()); } else { @@ -711,17 +852,39 @@ public class StatisticsController extends BaseController { reportMonthMap.put("初诊人数", firstmap); Option reportMonthOption = buildLineOption("初诊及复诊人数", null, reportMonthMap, buildDefaultMonth(12)); + for (String areaName:subReportMonthMap.keySet()) { + reportMonthOptionMap.put(areaName, buildLineOption(areaName + "初诊及复诊人数", null, subReportMonthMap.get(areaName), buildDefaultMonth(12))); + } + // 近6个月高危数据(按颜色分组) Map> groupRiskMonthMap = new HashMap<>(); + Map>> subGroupRiskMonthMap = new HashMap<>(); for (AreaData areaData:riskMonthList) { String groupName = areaData.getGroupName().replace("预警", ""); + String month = buildMonth(areaData.getYear()); + + Map> subrmap = subGroupRiskMonthMap.get(areaData.getAreaName()); + if (subrmap == null) { + subrmap = new HashMap<>(); + subGroupRiskMonthMap.put(areaData.getAreaName(), subrmap); + } + Map smap = subrmap.get(groupName); + if (smap == null) { + smap = new HashMap<>(); + subrmap.put(groupName, smap); + } + if (smap.containsKey(month)) { + smap.put(month, smap.get(month) + areaData.getVal()); + } else { + smap.put(month, areaData.getVal()); + } + 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 { @@ -730,6 +893,10 @@ public class StatisticsController extends BaseController { } Option groupRiskMonthOption = buildxBarOption("高危历史人数", null, groupRiskMonthMap, buildDefaultMonth(6), colormap); + for (String areaName:subGroupRiskMonthMap.keySet()) { + groupRiskMonthOptionMap.put(areaName, buildLineOption(areaName + "高危历史人数", null, subGroupRiskMonthMap.get(areaName), buildDefaultMonth(12))); + } + result.put("type", 3); result.put("provinceId", provinceId); @@ -742,6 +909,12 @@ public class StatisticsController extends BaseController { result.put("patientMonthOption", patientMonthOption); result.put("reportMonthOption", reportMonthOption); result.put("groupRiskMonthOption", groupRiskMonthOption); + + result.put("groupRiskOptionMap", groupRiskOptionMap); + result.put("patientMonthOptionMap", patientMonthOptionMap); + result.put("reportMonthOptionMap", reportMonthOptionMap); + result.put("groupRiskMonthOptionMap", groupRiskMonthOptionMap); + ResultUtils.buildSuccessResultAndWrite(response, result); }