|
|
@@ -14,6 +14,7 @@ import java.util.LinkedHashMap;
|
|
|
import java.util.List;
|
|
|
import java.util.Map;
|
|
|
import java.util.Set;
|
|
|
+import java.util.ArrayList;
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
@Service
|
|
|
@@ -29,10 +30,19 @@ public class PipeNetworkStatisticsServiceImpl implements PipeNetworkStatisticsSe
|
|
|
Set<String> types = facilityTypes == null || facilityTypes.isEmpty() ? SUPPORTED_TYPES : facilityTypes;
|
|
|
PipeNetworkStatisticsDashboardDTO dashboard = new PipeNetworkStatisticsDashboardDTO();
|
|
|
List<com.zksy.WaterSupply.PipeNetworkStatistics.dto.FacilityStatisticItemDTO> overview = statisticsMapper.selectFacilityOverview(status);
|
|
|
- dashboard.setFacilityOverview((overview == null ? Collections.<com.zksy.WaterSupply.PipeNetworkStatistics.dto.FacilityStatisticItemDTO>emptyList() : overview)
|
|
|
- .stream().filter(item -> types.contains(item.getFacilityType())).collect(Collectors.toList()));
|
|
|
+ List<com.zksy.WaterSupply.PipeNetworkStatistics.dto.FacilityStatisticItemDTO> filtered = (overview == null ? Collections.<com.zksy.WaterSupply.PipeNetworkStatistics.dto.FacilityStatisticItemDTO>emptyList() : overview)
|
|
|
+ .stream().filter(item -> types.contains(item.getFacilityType())).collect(Collectors.toList());
|
|
|
+ if (filtered.isEmpty()) {
|
|
|
+ filtered = new ArrayList<>();
|
|
|
+ addZeroOverview(filtered, types, "source", "水源地");
|
|
|
+ addZeroOverview(filtered, types, "plant", "水厂");
|
|
|
+ addZeroOverview(filtered, types, "pumpStation", "泵站");
|
|
|
+ addZeroOverview(filtered, types, "pipe", "供水管网");
|
|
|
+ addZeroOverview(filtered, types, "user", "用水户");
|
|
|
+ }
|
|
|
+ dashboard.setFacilityOverview(filtered);
|
|
|
if (types.contains("pipe")) {
|
|
|
- Map<String, Object> result = zeroSafe(statisticsMapper.selectPipeSummary(status));
|
|
|
+ Map<String, Object> result = zeroSafe(statisticsMapper.selectPipeSummary(status), "totalCount");
|
|
|
result.put("materialDistribution", list(statisticsMapper.selectPipeMaterialDistribution(status)));
|
|
|
result.put("diameterDistribution", list(statisticsMapper.selectPipeDiameterDistribution(status)));
|
|
|
result.put("layingYearDistribution", list(statisticsMapper.selectPipeLayingYearDistribution(status)));
|
|
|
@@ -41,19 +51,19 @@ public class PipeNetworkStatisticsServiceImpl implements PipeNetworkStatisticsSe
|
|
|
dashboard.setPipeNetwork(result);
|
|
|
}
|
|
|
if (types.contains("plant")) {
|
|
|
- Map<String, Object> result = zeroSafe(statisticsMapper.selectWaterPlantSummary(status));
|
|
|
+ Map<String, Object> result = zeroSafe(statisticsMapper.selectWaterPlantSummary(status), "totalCount");
|
|
|
result.put("capacityUtilization", utilization(result));
|
|
|
result.put("statusDistribution", list(statisticsMapper.selectStatusDistribution("plant", status)));
|
|
|
result.put("waterSourceTypeDistribution", list(statisticsMapper.selectWaterPlantSourceTypeDistribution(status)));
|
|
|
dashboard.setWaterPlant(result);
|
|
|
}
|
|
|
if (types.contains("pumpStation")) {
|
|
|
- Map<String, Object> result = zeroSafe(statisticsMapper.selectPumpStationSummary(status));
|
|
|
+ Map<String, Object> result = zeroSafe(statisticsMapper.selectPumpStationSummary(status), "totalCount");
|
|
|
result.put("statusDistribution", list(statisticsMapper.selectStatusDistribution("pumpStation", status)));
|
|
|
dashboard.setPumpStation(result);
|
|
|
}
|
|
|
if (types.contains("source")) {
|
|
|
- Map<String, Object> result = zeroSafe(statisticsMapper.selectWaterSourceSummary(status));
|
|
|
+ Map<String, Object> result = zeroSafe(statisticsMapper.selectWaterSourceSummary(status), "totalCount");
|
|
|
result.put("statusDistribution", list(statisticsMapper.selectStatusDistribution("source", status)));
|
|
|
result.put("sourceTypeDistribution", list(statisticsMapper.selectWaterSourceTypeDistribution(status)));
|
|
|
result.put("qualityDistribution", list(statisticsMapper.selectWaterSourceQualityDistribution(status)));
|
|
|
@@ -61,7 +71,7 @@ public class PipeNetworkStatisticsServiceImpl implements PipeNetworkStatisticsSe
|
|
|
dashboard.setWaterSource(result);
|
|
|
}
|
|
|
if (types.contains("user")) {
|
|
|
- Map<String, Object> result = zeroSafe(statisticsMapper.selectWaterUserSummary(status));
|
|
|
+ Map<String, Object> result = zeroSafe(statisticsMapper.selectWaterUserSummary(status), "totalCount");
|
|
|
result.put("statusDistribution", list(statisticsMapper.selectStatusDistribution("user", status)));
|
|
|
result.put("userTypeDistribution", list(statisticsMapper.selectWaterUserTypeDistribution(status)));
|
|
|
result.put("consumptionDistribution", list(statisticsMapper.selectWaterUserConsumptionDistribution(status)));
|
|
|
@@ -76,8 +86,18 @@ public class PipeNetworkStatisticsServiceImpl implements PipeNetworkStatisticsSe
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- private Map<String, Object> zeroSafe(Map<String, Object> value) {
|
|
|
- return value == null ? new LinkedHashMap<>() : new LinkedHashMap<>(value);
|
|
|
+ private Map<String, Object> zeroSafe(Map<String, Object> value, String... zeroKeys) {
|
|
|
+ Map<String, Object> result = value == null ? new LinkedHashMap<>() : new LinkedHashMap<>(value);
|
|
|
+ for (String key : zeroKeys) result.putIfAbsent(key, 0L);
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+
|
|
|
+ private void addZeroOverview(List<com.zksy.WaterSupply.PipeNetworkStatistics.dto.FacilityStatisticItemDTO> target,
|
|
|
+ Set<String> types, String type, String label) {
|
|
|
+ if (!types.contains(type)) return;
|
|
|
+ com.zksy.WaterSupply.PipeNetworkStatistics.dto.FacilityStatisticItemDTO item = new com.zksy.WaterSupply.PipeNetworkStatistics.dto.FacilityStatisticItemDTO();
|
|
|
+ item.setFacilityType(type); item.setFacilityTypeName(label); item.setTotalCount(0L); item.setNormalCount(0L); item.setAbnormalCount(0L);
|
|
|
+ target.add(item);
|
|
|
}
|
|
|
|
|
|
private List<MetricItemDTO> list(List<MetricItemDTO> value) {
|