Ver código fonte

生产调度概览页接口修改

wangli 4 anos atrás
pai
commit
8c3f624f94

+ 7 - 7
sms_water/src/main/java/com/huaxu/controller/MonitorDataReportController.java

@@ -58,7 +58,7 @@ public class MonitorDataReportController {
             @ApiParam(value = "场景ids", required = true) @RequestParam List<Long> sceneIds,
             @ApiParam(value = "日期,格式:2020-12-12", required = true) @RequestParam String reportDate,
             @ApiParam(value = "类型,1年2月3日", required = true) @RequestParam Integer reportType,
-            @ApiParam(value = "场景类型:1水源 0其他", required = true) @RequestParam Integer sceneType
+            @ApiParam(value = "场景类型:1水源 0其他",defaultValue = "0") @RequestParam(required = false ,defaultValue = "0") Integer sceneType
     ){
         LocalDate localDate = getLocalDate(reportDate, reportType);
         List<List<MonitorDataChartReportDeviceDto>> reportList=new ArrayList<>();
@@ -122,11 +122,11 @@ public class MonitorDataReportController {
 
 
 
-//    @RequestMapping(value = "MonitorDataGeneralView",method = RequestMethod.GET)
-//    @ApiOperation(value = "统计分析——管网图表")
-//    public AjaxMessage<List> MonitorDataGeneralView(){
-//        return new AjaxMessage<>(ResultStatus.OK,monitorDataReportService.monitorDataGeneralView());
-//    }
+    @RequestMapping(value = "MonitorDataGeneralView",method = RequestMethod.GET)
+    @ApiOperation(value = "统计分析——管网图表")
+    public AjaxMessage<GeneralViewResults> MonitorDataGeneralView(){
+        return new AjaxMessage<>(ResultStatus.OK,monitorDataReportService.monitorDataGeneralView());
+    }
 
 
 
@@ -148,7 +148,7 @@ public class MonitorDataReportController {
         return new AjaxMessage<>(ResultStatus.OK,monitorDataReportService.sceneAlarms());
     }
 
-    @RequestMapping(value = "SceneNormalRates",method = RequestMethod.GET)
+    @RequestMapping(value = "sceneNormalRates",method = RequestMethod.GET)
     @ApiOperation(value = "概览首页——管网水质情况")
     public AjaxMessage<List<SceneNormalRate>> SceneNormalRates(){
         return new AjaxMessage<>(ResultStatus.OK,monitorDataReportService.SceneNormalRates());

+ 3 - 1
sms_water/src/main/java/com/huaxu/dto/generalView/SceneWaterAmount.java

@@ -4,6 +4,7 @@ import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
+import java.io.Serializable;
 import java.math.BigDecimal;
 
 /**
@@ -13,8 +14,9 @@ import java.math.BigDecimal;
  */
 @Data
 @Api("场景水量")
-public class SceneWaterAmount {
+public class SceneWaterAmount implements Serializable {
 
+    private static final long serialVersionUID = -2700244574380490976L;
     @ApiModelProperty("场景名称")
     private String sceneName;
     @ApiModelProperty("水量")

+ 4 - 1
sms_water/src/main/java/com/huaxu/dto/generalView/WaterSupplyData.java

@@ -3,6 +3,7 @@ package com.huaxu.dto.generalView;
 import io.swagger.annotations.Api;
 import lombok.Data;
 
+import java.io.Serializable;
 import java.math.BigDecimal;
 import java.util.ArrayList;
 import java.util.Comparator;
@@ -15,7 +16,9 @@ import java.util.List;
  */
 @Api("供水曲线图")
 @Data
-public class WaterSupplyData {
+public class WaterSupplyData implements Serializable {
+
+    private static final long serialVersionUID = -5428501698788455002L;
 
     private Integer year;
     private Integer month;

+ 1 - 1
sms_water/src/main/java/com/huaxu/service/MonitorDataReportService.java

@@ -34,7 +34,7 @@ public interface MonitorDataReportService {
     List<MonitorDataChartReportDeviceDto> monitorDataDeviceReport(Integer type, List<Long>  deviceIds, Integer searchType, Integer year, Integer month , Integer day);
 
     //概览页所有数据
-//    List monitorDataGeneralView();
+    GeneralViewResults monitorDataGeneralView();
     
     //近30天水量
     List<DeviceWaterSupply> deviceWaterSupplie();

+ 294 - 294
sms_water/src/main/java/com/huaxu/service/impl/MonitorDataReportServiceImpl.java

@@ -255,300 +255,300 @@ public class MonitorDataReportServiceImpl implements MonitorDataReportService {
 
 
 
-//    @Override
-//    public List monitorDataGeneralView() {
-//        List result = new ArrayList();
-//        LoginUser loginUser = UserUtil.getCurrentUser();
-//        String tenantId = loginUser.getTenantId();
-//        //查询设备编码
-//        List<String> deviceCodes = monitorDataReportMapper.selectDeviceCode(tenantId);
-//        //根据编码获取redis中的实时数据
-//        List<MonitorDataEntity> monitorDataEntities = new ArrayList<>();
-//        for (String deviceCode : deviceCodes) {
-//            //先取缓存里的数据
-//            byte[] bytes = redisUtil.get(("sms_water_" + deviceCode).getBytes());
-//            if (bytes != null && bytes.length > 0) {
-//                monitorDataEntities.add((MonitorDataEntity) ByteArrayUtils.bytesToObject(bytes).get());
-//            }
-//        }
-//        //将获取到 实时数据转换为map,方便匹配数据deviceId
-//        Map<Integer, MonitorDataEntity> MonitorDataMap = monitorDataEntities.stream().collect(Collectors.toMap(MonitorDataEntity::getDeviceId, a -> a, (k1, k2) -> k1));
-//
-//
-//        LocalDate localDate = LocalDate.now();
-//        //水厂近30天供水量
-//        List<DeviceWaterSupply> deviceWaterSupplies = monitorDataReportMapper.getDeviceWaterFor30Day(tenantId);
-//        for (int i = 0; i < 30; i++) {
-//            LocalDate newLocalDate = localDate.plusDays(-i - 1);
-//            if (i <= deviceWaterSupplies.size()
-//                    || !newLocalDate.isEqual(LocalDate.of(deviceWaterSupplies.get(i).getYear(),
-//                    deviceWaterSupplies.get(i).getMonth(),
-//                    deviceWaterSupplies.get(i).getDay()))) {
-//
-//                DeviceWaterSupply deviceWaterSupply = new DeviceWaterSupply();
-//                deviceWaterSupply.setOrderNo(i + 1);
-//                deviceWaterSupply.setAmount(BigDecimal.ZERO);
-//                deviceWaterSupply.setYear(newLocalDate.getYear());
-//                deviceWaterSupply.setMonth(newLocalDate.getMonthValue());
-//                deviceWaterSupply.setDay(newLocalDate.getDayOfMonth());
-//                deviceWaterSupply.setDate(newLocalDate);
-//                deviceWaterSupplies.add(i, deviceWaterSupply);
-//            } else {
-//                deviceWaterSupplies.get(i).setOrderNo(i + 1);
-//                deviceWaterSupplies.get(i).setDate(newLocalDate);
-//            }
-//        }
-//        //0 30天水量
-//        result.add(deviceWaterSupplies);
-//
-//        //供水详情数据(合计:瞬时、本天、本月、本年)
-//        DeviceWaterAmount deviceWaterAmount = new DeviceWaterAmount();
-//        //14瞬时流量
-//        List<DeviceWaterDetail> deviceSupplyWaterDetailsForNow = monitorDataReportMapper.getDeviceWaterDetailForNow("水厂", 14, tenantId);
-//        List<DeviceWaterDetail> deviceIntakeWaterDetailsForNow = monitorDataReportMapper.getDeviceWaterDetailForNow("水源", 14, tenantId);
-//
-//        //水厂获取实时流量并计算出当天流量
-//        for (DeviceWaterDetail deviceWaterDetail : deviceSupplyWaterDetailsForNow) {
-//            MonitorDataEntity monitorDataEntity = MonitorDataMap.get(deviceWaterDetail.getDeviceId());
-//            if (monitorDataEntity != null && monitorDataEntity.getDataValues() != null && monitorDataEntity.getDataValues().size() > 0) {
-//                for (MonitorDataValueEntity monitorDataValueEntity : monitorDataEntity.getDataValues()) {
-//                    if (monitorDataValueEntity.getAttributeId().equals(deviceWaterDetail.getAttributeId())) {
-//                        //水厂累计瞬时流量
-//                        deviceWaterAmount.addWaterSupplyAmountForNow(new BigDecimal(monitorDataValueEntity.getDataValue()));
-//                    }
-//                }
-//            }
-//
-//        }
-//        //水源获取实时流量并计算出当天流量
-//        for (DeviceWaterDetail deviceWaterDetail : deviceIntakeWaterDetailsForNow) {
-//            MonitorDataEntity monitorDataEntity = MonitorDataMap.get(deviceWaterDetail.getDeviceId());
-//            if (monitorDataEntity != null && monitorDataEntity.getDataValues() != null && monitorDataEntity.getDataValues().size() > 0) {
-//                for (MonitorDataValueEntity monitorDataValueEntity : monitorDataEntity.getDataValues()) {
-//                    if (monitorDataValueEntity.getAttributeId().equals(deviceWaterDetail.getAttributeId())) {
-//                        //水源累计瞬时流量
-//                        deviceWaterAmount.addWaterIntakeAmountForNow(new BigDecimal(monitorDataValueEntity.getDataValue()));
-//                    }
-//                }
-//            }
-//        }
-//
-//        //3供水 4取水
-//        List<DeviceWaterDetail> deviceSupplyWaterDetailsForDay = monitorDataReportMapper.getDeviceWaterDetailForDay("水厂", 3, tenantId, localDate.getYear(), localDate.getMonthValue(), localDate.getDayOfMonth());
-//        List<DeviceWaterDetail> deviceIntakeWaterDetailsForDay = monitorDataReportMapper.getDeviceWaterDetailForDay("水源", 4, tenantId, localDate.getYear(), localDate.getMonthValue(), localDate.getDayOfMonth());
-//
-//        //水厂获取实时流量并计算出当天流量
-//        for (DeviceWaterDetail deviceWaterDetail : deviceSupplyWaterDetailsForDay) {
-//            MonitorDataEntity monitorDataEntity = MonitorDataMap.get(deviceWaterDetail.getDeviceId());
-//            if (monitorDataEntity != null && monitorDataEntity.getDataValues() != null && monitorDataEntity.getDataValues().size() > 0) {
-//                for (MonitorDataValueEntity monitorDataValueEntity : monitorDataEntity.getDataValues()) {
-//                    if (monitorDataValueEntity.getAttributeId().equals(deviceWaterDetail.getAttributeId())) {
-//                        //累计当天流量
-//                        deviceWaterAmount.addWaterSupplyAmountForDay(new BigDecimal(monitorDataValueEntity.getDataValue()).subtract(deviceWaterDetail.getLatestValue()).add(deviceWaterDetail.getAmount()));
-//                    }
-//                }
-//            }
-//
-//        }
-//        //水源获取实时流量并计算出当天流量
-//        for (DeviceWaterDetail deviceWaterDetail : deviceIntakeWaterDetailsForDay) {
-//            MonitorDataEntity monitorDataEntity = MonitorDataMap.get(deviceWaterDetail.getDeviceId());
-//            if (monitorDataEntity != null && monitorDataEntity.getDataValues() != null && monitorDataEntity.getDataValues().size() > 0) {
-//                for (MonitorDataValueEntity monitorDataValueEntity : monitorDataEntity.getDataValues()) {
-//                    if (monitorDataValueEntity.getAttributeId().equals(deviceWaterDetail.getAttributeId())) {
-//                        //累计当天流量
-//                        deviceWaterAmount.addWaterIntakeAmountForDay(new BigDecimal(monitorDataValueEntity.getDataValue()).subtract(deviceWaterDetail.getLatestValue()).add(deviceWaterDetail.getAmount()));
-//                    }
-//                }
-//            }
-//        }
-//
-//        BigDecimal waterSupplyAmountForMonth = monitorDataReportMapper.getDeviceWaterDetailForMonth("水厂", 3, tenantId, localDate.getYear(), localDate.getMonthValue());
-//        BigDecimal waterSupplyAmountForYear = monitorDataReportMapper.getDeviceWaterDetailForYear("水厂", 3, tenantId, localDate.getYear());
-//        if (waterSupplyAmountForMonth == null) {
-//            waterSupplyAmountForMonth = BigDecimal.ZERO;
-//        }
-//        if (waterSupplyAmountForYear == null) {
-//            waterSupplyAmountForYear = BigDecimal.ZERO;
-//        }
-//        //水厂当月流量
-//        if (deviceWaterAmount.getWaterSupplyAmountForDay() == null) {
-//            deviceWaterAmount.setWaterSupplyAmountForMonth(waterSupplyAmountForMonth);
-//        } else {
-//            deviceWaterAmount.setWaterSupplyAmountForMonth(waterSupplyAmountForMonth.add(deviceWaterAmount.getWaterSupplyAmountForDay()));
-//        }
-//        //水厂当年流量
-//        if (deviceWaterAmount.getWaterSupplyAmountForMonth() == null) {
-//            deviceWaterAmount.setWaterSupplyAmountForYear(waterSupplyAmountForYear);
-//        } else {
-//            deviceWaterAmount.setWaterSupplyAmountForYear(waterSupplyAmountForYear.add(deviceWaterAmount.getWaterSupplyAmountForMonth()));
-//        }
-//
-//
-//        BigDecimal waterIntakeAmountForMonth = monitorDataReportMapper.getDeviceWaterDetailForMonth("水源", 4, tenantId, localDate.getYear(), localDate.getMonthValue());
-//        BigDecimal waterIntakeAmountForYear = monitorDataReportMapper.getDeviceWaterDetailForYear("水源", 4, tenantId, localDate.getYear());
-//        if (waterIntakeAmountForMonth == null) {
-//            waterIntakeAmountForMonth = BigDecimal.ZERO;
-//        }
-//        if (waterIntakeAmountForYear == null) {
-//            waterIntakeAmountForYear = BigDecimal.ZERO;
-//        }
-//        //水源当月流量
-//        if (deviceWaterAmount.getWaterIntakeAmountForDay() == null) {
-//            deviceWaterAmount.setWaterIntakeAmountForMonth(waterIntakeAmountForMonth);
-//        } else {
-//            deviceWaterAmount.setWaterIntakeAmountForMonth(waterIntakeAmountForMonth.add(deviceWaterAmount.getWaterIntakeAmountForDay()));
-//        }
-//        //水源当年流量
-//        if (deviceWaterAmount.getWaterIntakeAmountForMonth() == null) {
-//            deviceWaterAmount.setWaterIntakeAmountForYear(waterIntakeAmountForYear);
-//        } else {
-//            deviceWaterAmount.setWaterIntakeAmountForYear(waterIntakeAmountForYear.add(deviceWaterAmount.getWaterIntakeAmountForMonth()));
-//        }
-//        //1
-//        result.add(deviceWaterAmount);
-//
-//        //实时报警信息
-//        List<SceneAlarm> sceneAlarms = monitorDataReportMapper.getAlarmInfoForScene(tenantId);
-//
-//        //2报警
-//        result.add(sceneAlarms);
-//        //管网水质(水质 -1、8PH、10浊度、11余氯)
-//        List<SceneNormalRate> SceneNormalRates = new ArrayList<>();
-//        //水质
-//        SceneNormalRate sceneNormalRate1 = monitorDataReportMapper.getQualificationForScene(tenantId, -1);
-//        //PH
-//        SceneNormalRate sceneNormalRate2 = monitorDataReportMapper.getQualificationForScene(tenantId, 8);
-//        //浊度
-//        SceneNormalRate sceneNormalRate3 = monitorDataReportMapper.getQualificationForScene(tenantId, 10);
-//        //余氯
-//        SceneNormalRate sceneNormalRate4 = monitorDataReportMapper.getQualificationForScene(tenantId, 11);
-//        SceneNormalRates.add(sceneNormalRate1);
-//        SceneNormalRates.add(sceneNormalRate2);
-//        SceneNormalRates.add(sceneNormalRate3);
-//        SceneNormalRates.add(sceneNormalRate4);
-//        //3水质情况
-//        result.add(SceneNormalRates);
-//
-//        //压力分布
-//        List<DeviceWaterDetail> devicePressureWaterDetailsForNow = monitorDataReportMapper.getDeviceWaterDetailForNow("水厂", 13, tenantId);
-//
-//        List<SceneWaterAmount> sceneWaterPressureAmounts = new ArrayList<>();
-//
-//        devicePressureWaterDetailsForNow.stream()
-//                .filter(item -> StringUtils.isNotBlank(item.getSceneName()))
-//                .collect(Collectors.groupingBy(item -> item.getSceneName(), Collectors.toList()))
-//                .forEach((key, value) -> {
-//                    SceneWaterAmount sceneWaterAmount = new SceneWaterAmount();
-//                    sceneWaterAmount.setSceneName(key);
-//                    sceneWaterAmount.setWaterAmount(BigDecimal.ZERO);
-//                    value.stream().forEach(deviceWaterDetail -> {
-//                        MonitorDataEntity monitorDataEntity = MonitorDataMap.get(deviceWaterDetail.getDeviceId());
-//                        if (monitorDataEntity != null && monitorDataEntity.getDataValues() != null && monitorDataEntity.getDataValues().size() > 0) {
-//                            monitorDataEntity.getDataValues().stream()
-//                                    .filter(monitorDataValueEntity -> monitorDataValueEntity.getAttributeId().equals(deviceWaterDetail.getAttributeId()))
-//                                    .forEach(monitorDataValueEntity ->
-//                                            //累计当前压力
-//                                            sceneWaterAmount.setWaterAmount(sceneWaterAmount.getWaterAmount().add(new BigDecimal(monitorDataValueEntity.getDataValue())))
-//                                    );
-//                        }
-//                    });
-//                    sceneWaterPressureAmounts.add(sceneWaterAmount);
-//                });
-//
-//        //进行压力分组
-//        SceneWaterPressure sceneWaterPressure = new SceneWaterPressure();
-//        SceneWaterAmount amountMax = null;
-//        SceneWaterAmount amountMin = null;
-//        for (SceneWaterAmount waterPressure : sceneWaterPressureAmounts) {
-//            if (StringUtils.isNotBlank(waterPressure.getSceneName()) && waterPressure.getWaterAmount() != null) {
-//                BigDecimal amount = waterPressure.getWaterAmount();
-//                amountMax = amountMax == null || amount.compareTo(amountMax.getWaterAmount()) == 1 ? waterPressure : amountMax;
-//                amountMin = amountMin == null || amount.compareTo(amountMin.getWaterAmount()) == -1 ? waterPressure : amountMin;
-//
-//                if (amount.compareTo(new BigDecimal(0.15)) == -1) {
-//                    sceneWaterPressure.setPressureLevel1(sceneWaterPressure.getPressureLevel1() + 1);
-//                } else if (amount.compareTo(new BigDecimal(0.15)) != 1 && amount.compareTo(new BigDecimal(0.30)) == -1) {
-//                    sceneWaterPressure.setPressureLevel2(sceneWaterPressure.getPressureLevel2() + 1);
-//                } else if (amount.compareTo(new BigDecimal(0.30)) != -1 && amount.compareTo(new BigDecimal(0.40)) == -1) {
-//                    sceneWaterPressure.setPressureLevel3(sceneWaterPressure.getPressureLevel3() + 1);
-//                } else if (amount.compareTo(new BigDecimal(0.40)) != -1 && amount.compareTo(new BigDecimal(0.50)) == -1) {
-//                    sceneWaterPressure.setPressureLevel4(sceneWaterPressure.getPressureLevel4() + 1);
-//                } else if (amount.compareTo(new BigDecimal(0.50)) != -1) {
-//                    sceneWaterPressure.setPressureLevel5(sceneWaterPressure.getPressureLevel5() + 1);
-//                }
-//            }
-//        }
-//        if (amountMax != null) {
-//            sceneWaterPressure.setMaxPressureSceneName(amountMax.getSceneName());
-//            sceneWaterPressure.setMaxPressureValue(amountMax.getWaterAmount());
-//        }
-//        if (amountMax != null) {
-//            sceneWaterPressure.setMinPressureSceneName(amountMin.getSceneName());
-//            sceneWaterPressure.setMinPressureValue(amountMin.getWaterAmount());
-//        }
-//
-//        //4压力分组
-//        result.add(sceneWaterPressure);
-//
-//        //今日水厂制水量排行
-////        deviceSupplyWaterDetailsForDay
-//        List<SceneWaterAmount> sceneWaterAmounts = new ArrayList<>();
-//        deviceSupplyWaterDetailsForDay.stream()
-//                .filter(item -> StringUtils.isNotBlank(item.getSceneName()))
-//                .collect(Collectors.groupingBy(item -> item.getSceneName(), Collectors.toList()))
-//                .forEach((key, value) -> {
-//                    SceneWaterAmount sceneWaterAmount = new SceneWaterAmount();
-//                    sceneWaterAmount.setSceneName(key);
-//                    sceneWaterAmount.setWaterAmount(BigDecimal.ZERO);
-//                    value.stream().forEach(deviceWaterDetail -> {
-//                        MonitorDataEntity monitorDataEntity = MonitorDataMap.get(deviceWaterDetail.getDeviceId());
-//                        if (monitorDataEntity != null && monitorDataEntity.getDataValues() != null && monitorDataEntity.getDataValues().size() > 0) {
-//                            monitorDataEntity.getDataValues().stream()
-//                                    .filter(monitorDataValueEntity -> monitorDataValueEntity.getAttributeId().equals(deviceWaterDetail.getAttributeId()))
-//                                    .forEach(monitorDataValueEntity ->
-//                                            //累计当天流量
-//                                            sceneWaterAmount.setWaterAmount(sceneWaterAmount.getWaterAmount().add(
-//                                                    new BigDecimal(monitorDataValueEntity.getDataValue()).subtract(deviceWaterDetail.getLatestValue()).add(deviceWaterDetail.getAmount())))
-//                                    );
-//                        }
-//                    });
-//                    sceneWaterAmounts.add(sceneWaterAmount);
-//                });
-//        //倒序排序
-//        sceneWaterAmounts.sort(Comparator.comparing(SceneWaterAmount::getWaterAmount).reversed());
-//        //5水量排行
-//        result.add(sceneWaterAmounts);
-//
-//        //水厂制水、药耗、电耗对比曲线
-//        List<WaterSupplyData> waterSupplyDatas = monitorDataReportMapper.getWaterSupplyData(tenantId);
-//        List<WaterSupplyChart> waterSupplyCharts = new ArrayList<>();
-//        waterSupplyDatas.stream()
-//                .collect(Collectors.groupingBy(item -> item.getYear() + "-" + item.getMonth() + "-" + item.getDay()))
-//                .forEach((key, value) -> {
-//                    WaterSupplyChart waterSupplyChart = new WaterSupplyChart();
-//                    waterSupplyChart.setDate(key);
-//                    value.stream().forEach(waterSupplyData -> {
-//                        Period period = Period.between(LocalDate.of(waterSupplyData.getYear(), waterSupplyData.getMonth(), waterSupplyData.getDay()), localDate);
-//                        waterSupplyChart.setSort(period.getDays());
-//
-//                        if (waterSupplyData.getParmType() == 3) { //供水
-//                            waterSupplyChart.setWaterData(waterSupplyData.getAmount());
-//                        } else if (waterSupplyData.getParmType() == 5) {//电耗
-//                            waterSupplyChart.setPowerData(waterSupplyData.getAmount());
-//                        } else if (waterSupplyData.getParmType() == 6) {//药耗
-//                            waterSupplyChart.setDrugData(waterSupplyData.getAmount());
-//                        }
-//                    });
-//                    waterSupplyCharts.add(waterSupplyChart);
-//                });
-//        waterSupplyCharts.sort(Comparator.comparing(WaterSupplyChart::getSort));
-//
-//        //6曲线图
-//        result.add(waterSupplyCharts);
-//
-//        return result;
-//    }
+    @Override
+    public GeneralViewResults monitorDataGeneralView() {
+        GeneralViewResults generalViewResults = new GeneralViewResults();
+        LoginUser loginUser = UserUtil.getCurrentUser();
+        String tenantId = loginUser.getTenantId();
+        //查询设备编码
+        List<String> deviceCodes = monitorDataReportMapper.selectDeviceCode(tenantId);
+        //根据编码获取redis中的实时数据
+        List<MonitorDataEntity> monitorDataEntities = new ArrayList<>();
+        for (String deviceCode : deviceCodes) {
+            //先取缓存里的数据
+            byte[] bytes = redisUtil.get(("sms_water_" + deviceCode).getBytes());
+            if (bytes != null && bytes.length > 0) {
+                monitorDataEntities.add((MonitorDataEntity) ByteArrayUtils.bytesToObject(bytes).get());
+            }
+        }
+        //将获取到 实时数据转换为map,方便匹配数据deviceId
+        Map<Integer, MonitorDataEntity> MonitorDataMap = monitorDataEntities.stream().collect(Collectors.toMap(MonitorDataEntity::getDeviceId, a -> a, (k1, k2) -> k1));
+
+
+        LocalDate localDate = LocalDate.now();
+        //水厂近30天供水量
+        List<DeviceWaterSupply> deviceWaterSupplies = monitorDataReportMapper.getDeviceWaterFor30Day(tenantId);
+        for (int i = 0; i < 30; i++) {
+            LocalDate newLocalDate = localDate.plusDays(-i - 1);
+            if (i <= deviceWaterSupplies.size()
+                    || !newLocalDate.isEqual(LocalDate.of(deviceWaterSupplies.get(i).getYear(),
+                    deviceWaterSupplies.get(i).getMonth(),
+                    deviceWaterSupplies.get(i).getDay()))) {
+
+                DeviceWaterSupply deviceWaterSupply = new DeviceWaterSupply();
+                deviceWaterSupply.setOrderNo(i + 1);
+                deviceWaterSupply.setAmount(BigDecimal.ZERO);
+                deviceWaterSupply.setYear(newLocalDate.getYear());
+                deviceWaterSupply.setMonth(newLocalDate.getMonthValue());
+                deviceWaterSupply.setDay(newLocalDate.getDayOfMonth());
+                deviceWaterSupply.setDate(newLocalDate);
+                deviceWaterSupplies.add(i, deviceWaterSupply);
+            } else {
+                deviceWaterSupplies.get(i).setOrderNo(i + 1);
+                deviceWaterSupplies.get(i).setDate(newLocalDate);
+            }
+        }
+        //0 30天水量
+        generalViewResults.setDeviceWaterSupplies(deviceWaterSupplies);
+
+        //供水详情数据(合计:瞬时、本天、本月、本年)
+        DeviceWaterAmount deviceWaterAmount = new DeviceWaterAmount();
+        //14瞬时流量
+        List<DeviceWaterDetail> deviceSupplyWaterDetailsForNow = monitorDataReportMapper.getDeviceWaterDetailForNow("水厂", 14, tenantId);
+        List<DeviceWaterDetail> deviceIntakeWaterDetailsForNow = monitorDataReportMapper.getDeviceWaterDetailForNow("水源", 14, tenantId);
+
+        //水厂获取实时流量并计算出当天流量
+        for (DeviceWaterDetail deviceWaterDetail : deviceSupplyWaterDetailsForNow) {
+            MonitorDataEntity monitorDataEntity = MonitorDataMap.get(deviceWaterDetail.getDeviceId());
+            if (monitorDataEntity != null && monitorDataEntity.getDataValues() != null && monitorDataEntity.getDataValues().size() > 0) {
+                for (MonitorDataValueEntity monitorDataValueEntity : monitorDataEntity.getDataValues()) {
+                    if (monitorDataValueEntity.getAttributeId().equals(deviceWaterDetail.getAttributeId())) {
+                        //水厂累计瞬时流量
+                        deviceWaterAmount.addWaterSupplyAmountForNow(new BigDecimal(monitorDataValueEntity.getDataValue()));
+                    }
+                }
+            }
+
+        }
+        //水源获取实时流量并计算出当天流量
+        for (DeviceWaterDetail deviceWaterDetail : deviceIntakeWaterDetailsForNow) {
+            MonitorDataEntity monitorDataEntity = MonitorDataMap.get(deviceWaterDetail.getDeviceId());
+            if (monitorDataEntity != null && monitorDataEntity.getDataValues() != null && monitorDataEntity.getDataValues().size() > 0) {
+                for (MonitorDataValueEntity monitorDataValueEntity : monitorDataEntity.getDataValues()) {
+                    if (monitorDataValueEntity.getAttributeId().equals(deviceWaterDetail.getAttributeId())) {
+                        //水源累计瞬时流量
+                        deviceWaterAmount.addWaterIntakeAmountForNow(new BigDecimal(monitorDataValueEntity.getDataValue()));
+                    }
+                }
+            }
+        }
+
+        //3供水 4取水
+        List<DeviceWaterDetail> deviceSupplyWaterDetailsForDay = monitorDataReportMapper.getDeviceWaterDetailForDay("水厂", 3, tenantId, localDate.getYear(), localDate.getMonthValue(), localDate.getDayOfMonth());
+        List<DeviceWaterDetail> deviceIntakeWaterDetailsForDay = monitorDataReportMapper.getDeviceWaterDetailForDay("水源", 4, tenantId, localDate.getYear(), localDate.getMonthValue(), localDate.getDayOfMonth());
+
+        //水厂获取实时流量并计算出当天流量
+        for (DeviceWaterDetail deviceWaterDetail : deviceSupplyWaterDetailsForDay) {
+            MonitorDataEntity monitorDataEntity = MonitorDataMap.get(deviceWaterDetail.getDeviceId());
+            if (monitorDataEntity != null && monitorDataEntity.getDataValues() != null && monitorDataEntity.getDataValues().size() > 0) {
+                for (MonitorDataValueEntity monitorDataValueEntity : monitorDataEntity.getDataValues()) {
+                    if (monitorDataValueEntity.getAttributeId().equals(deviceWaterDetail.getAttributeId())) {
+                        //累计当天流量
+                        deviceWaterAmount.addWaterSupplyAmountForDay(new BigDecimal(monitorDataValueEntity.getDataValue()).subtract(deviceWaterDetail.getLatestValue()).add(deviceWaterDetail.getAmount()));
+                    }
+                }
+            }
+
+        }
+        //水源获取实时流量并计算出当天流量
+        for (DeviceWaterDetail deviceWaterDetail : deviceIntakeWaterDetailsForDay) {
+            MonitorDataEntity monitorDataEntity = MonitorDataMap.get(deviceWaterDetail.getDeviceId());
+            if (monitorDataEntity != null && monitorDataEntity.getDataValues() != null && monitorDataEntity.getDataValues().size() > 0) {
+                for (MonitorDataValueEntity monitorDataValueEntity : monitorDataEntity.getDataValues()) {
+                    if (monitorDataValueEntity.getAttributeId().equals(deviceWaterDetail.getAttributeId())) {
+                        //累计当天流量
+                        deviceWaterAmount.addWaterIntakeAmountForDay(new BigDecimal(monitorDataValueEntity.getDataValue()).subtract(deviceWaterDetail.getLatestValue()).add(deviceWaterDetail.getAmount()));
+                    }
+                }
+            }
+        }
+
+        BigDecimal waterSupplyAmountForMonth = monitorDataReportMapper.getDeviceWaterDetailForMonth("水厂", 3, tenantId, localDate.getYear(), localDate.getMonthValue());
+        BigDecimal waterSupplyAmountForYear = monitorDataReportMapper.getDeviceWaterDetailForYear("水厂", 3, tenantId, localDate.getYear());
+        if (waterSupplyAmountForMonth == null) {
+            waterSupplyAmountForMonth = BigDecimal.ZERO;
+        }
+        if (waterSupplyAmountForYear == null) {
+            waterSupplyAmountForYear = BigDecimal.ZERO;
+        }
+        //水厂当月流量
+        if (deviceWaterAmount.getWaterSupplyAmountForDay() == null) {
+            deviceWaterAmount.setWaterSupplyAmountForMonth(waterSupplyAmountForMonth);
+        } else {
+            deviceWaterAmount.setWaterSupplyAmountForMonth(waterSupplyAmountForMonth.add(deviceWaterAmount.getWaterSupplyAmountForDay()));
+        }
+        //水厂当年流量
+        if (deviceWaterAmount.getWaterSupplyAmountForMonth() == null) {
+            deviceWaterAmount.setWaterSupplyAmountForYear(waterSupplyAmountForYear);
+        } else {
+            deviceWaterAmount.setWaterSupplyAmountForYear(waterSupplyAmountForYear.add(deviceWaterAmount.getWaterSupplyAmountForMonth()));
+        }
+
+
+        BigDecimal waterIntakeAmountForMonth = monitorDataReportMapper.getDeviceWaterDetailForMonth("水源", 4, tenantId, localDate.getYear(), localDate.getMonthValue());
+        BigDecimal waterIntakeAmountForYear = monitorDataReportMapper.getDeviceWaterDetailForYear("水源", 4, tenantId, localDate.getYear());
+        if (waterIntakeAmountForMonth == null) {
+            waterIntakeAmountForMonth = BigDecimal.ZERO;
+        }
+        if (waterIntakeAmountForYear == null) {
+            waterIntakeAmountForYear = BigDecimal.ZERO;
+        }
+        //水源当月流量
+        if (deviceWaterAmount.getWaterIntakeAmountForDay() == null) {
+            deviceWaterAmount.setWaterIntakeAmountForMonth(waterIntakeAmountForMonth);
+        } else {
+            deviceWaterAmount.setWaterIntakeAmountForMonth(waterIntakeAmountForMonth.add(deviceWaterAmount.getWaterIntakeAmountForDay()));
+        }
+        //水源当年流量
+        if (deviceWaterAmount.getWaterIntakeAmountForMonth() == null) {
+            deviceWaterAmount.setWaterIntakeAmountForYear(waterIntakeAmountForYear);
+        } else {
+            deviceWaterAmount.setWaterIntakeAmountForYear(waterIntakeAmountForYear.add(deviceWaterAmount.getWaterIntakeAmountForMonth()));
+        }
+        //1
+        generalViewResults.setDeviceWaterAmount(deviceWaterAmount);
+
+        //实时报警信息
+        List<SceneAlarm> sceneAlarms = monitorDataReportMapper.getAlarmInfoForScene(tenantId);
+
+        //2报警
+        generalViewResults.setSceneAlarms(sceneAlarms);
+        //管网水质(水质 -1、8PH、10浊度、11余氯)
+        List<SceneNormalRate> SceneNormalRates = new ArrayList<>();
+        //水质
+        SceneNormalRate sceneNormalRate1 = monitorDataReportMapper.getQualificationForScene(tenantId, -1);
+        //PH
+        SceneNormalRate sceneNormalRate2 = monitorDataReportMapper.getQualificationForScene(tenantId, 8);
+        //浊度
+        SceneNormalRate sceneNormalRate3 = monitorDataReportMapper.getQualificationForScene(tenantId, 10);
+        //余氯
+        SceneNormalRate sceneNormalRate4 = monitorDataReportMapper.getQualificationForScene(tenantId, 11);
+        SceneNormalRates.add(sceneNormalRate1);
+        SceneNormalRates.add(sceneNormalRate2);
+        SceneNormalRates.add(sceneNormalRate3);
+        SceneNormalRates.add(sceneNormalRate4);
+        //3水质情况
+        generalViewResults.setSceneNormalRates(SceneNormalRates);
+
+        //压力分布
+        List<DeviceWaterDetail> devicePressureWaterDetailsForNow = monitorDataReportMapper.getDeviceWaterDetailForNow("水厂", 13, tenantId);
+
+        List<SceneWaterAmount> sceneWaterPressureAmounts = new ArrayList<>();
+
+        devicePressureWaterDetailsForNow.stream()
+                .filter(item -> StringUtils.isNotBlank(item.getSceneName()))
+                .collect(Collectors.groupingBy(item -> item.getSceneName(), Collectors.toList()))
+                .forEach((key, value) -> {
+                    SceneWaterAmount sceneWaterAmount = new SceneWaterAmount();
+                    sceneWaterAmount.setSceneName(key);
+                    sceneWaterAmount.setWaterAmount(BigDecimal.ZERO);
+                    value.stream().forEach(deviceWaterDetail -> {
+                        MonitorDataEntity monitorDataEntity = MonitorDataMap.get(deviceWaterDetail.getDeviceId());
+                        if (monitorDataEntity != null && monitorDataEntity.getDataValues() != null && monitorDataEntity.getDataValues().size() > 0) {
+                            monitorDataEntity.getDataValues().stream()
+                                    .filter(monitorDataValueEntity -> monitorDataValueEntity.getAttributeId().equals(deviceWaterDetail.getAttributeId()))
+                                    .forEach(monitorDataValueEntity ->
+                                            //累计当前压力
+                                            sceneWaterAmount.setWaterAmount(sceneWaterAmount.getWaterAmount().add(new BigDecimal(monitorDataValueEntity.getDataValue())))
+                                    );
+                        }
+                    });
+                    sceneWaterPressureAmounts.add(sceneWaterAmount);
+                });
+
+        //进行压力分组
+        SceneWaterPressure sceneWaterPressure = new SceneWaterPressure();
+        SceneWaterAmount amountMax = null;
+        SceneWaterAmount amountMin = null;
+        for (SceneWaterAmount waterPressure : sceneWaterPressureAmounts) {
+            if (StringUtils.isNotBlank(waterPressure.getSceneName()) && waterPressure.getWaterAmount() != null) {
+                BigDecimal amount = waterPressure.getWaterAmount();
+                amountMax = amountMax == null || amount.compareTo(amountMax.getWaterAmount()) == 1 ? waterPressure : amountMax;
+                amountMin = amountMin == null || amount.compareTo(amountMin.getWaterAmount()) == -1 ? waterPressure : amountMin;
+
+                if (amount.compareTo(new BigDecimal(0.15)) == -1) {
+                    sceneWaterPressure.setPressureLevel1(sceneWaterPressure.getPressureLevel1() + 1);
+                } else if (amount.compareTo(new BigDecimal(0.15)) != 1 && amount.compareTo(new BigDecimal(0.30)) == -1) {
+                    sceneWaterPressure.setPressureLevel2(sceneWaterPressure.getPressureLevel2() + 1);
+                } else if (amount.compareTo(new BigDecimal(0.30)) != -1 && amount.compareTo(new BigDecimal(0.40)) == -1) {
+                    sceneWaterPressure.setPressureLevel3(sceneWaterPressure.getPressureLevel3() + 1);
+                } else if (amount.compareTo(new BigDecimal(0.40)) != -1 && amount.compareTo(new BigDecimal(0.50)) == -1) {
+                    sceneWaterPressure.setPressureLevel4(sceneWaterPressure.getPressureLevel4() + 1);
+                } else if (amount.compareTo(new BigDecimal(0.50)) != -1) {
+                    sceneWaterPressure.setPressureLevel5(sceneWaterPressure.getPressureLevel5() + 1);
+                }
+            }
+        }
+        if (amountMax != null) {
+            sceneWaterPressure.setMaxPressureSceneName(amountMax.getSceneName());
+            sceneWaterPressure.setMaxPressureValue(amountMax.getWaterAmount());
+        }
+        if (amountMax != null) {
+            sceneWaterPressure.setMinPressureSceneName(amountMin.getSceneName());
+            sceneWaterPressure.setMinPressureValue(amountMin.getWaterAmount());
+        }
+
+        //4压力分组
+        generalViewResults.setSceneWaterPressure(sceneWaterPressure);
+
+        //今日水厂制水量排行
+//        deviceSupplyWaterDetailsForDay
+        List<SceneWaterAmount> sceneWaterAmounts = new ArrayList<>();
+        deviceSupplyWaterDetailsForDay.stream()
+                .filter(item -> StringUtils.isNotBlank(item.getSceneName()))
+                .collect(Collectors.groupingBy(item -> item.getSceneName(), Collectors.toList()))
+                .forEach((key, value) -> {
+                    SceneWaterAmount sceneWaterAmount = new SceneWaterAmount();
+                    sceneWaterAmount.setSceneName(key);
+                    sceneWaterAmount.setWaterAmount(BigDecimal.ZERO);
+                    value.stream().forEach(deviceWaterDetail -> {
+                        MonitorDataEntity monitorDataEntity = MonitorDataMap.get(deviceWaterDetail.getDeviceId());
+                        if (monitorDataEntity != null && monitorDataEntity.getDataValues() != null && monitorDataEntity.getDataValues().size() > 0) {
+                            monitorDataEntity.getDataValues().stream()
+                                    .filter(monitorDataValueEntity -> monitorDataValueEntity.getAttributeId().equals(deviceWaterDetail.getAttributeId()))
+                                    .forEach(monitorDataValueEntity ->
+                                            //累计当天流量
+                                            sceneWaterAmount.setWaterAmount(sceneWaterAmount.getWaterAmount().add(
+                                                    new BigDecimal(monitorDataValueEntity.getDataValue()).subtract(deviceWaterDetail.getLatestValue()).add(deviceWaterDetail.getAmount())))
+                                    );
+                        }
+                    });
+                    sceneWaterAmounts.add(sceneWaterAmount);
+                });
+        //倒序排序
+        sceneWaterAmounts.sort(Comparator.comparing(SceneWaterAmount::getWaterAmount).reversed());
+        //5水量排行
+        generalViewResults.setSceneWaterAmounts(sceneWaterAmounts);
+
+        //水厂制水、药耗、电耗对比曲线
+        List<WaterSupplyData> waterSupplyDatas = monitorDataReportMapper.getWaterSupplyData(tenantId);
+        List<WaterSupplyChart> waterSupplyCharts = new ArrayList<>();
+        waterSupplyDatas.stream()
+                .collect(Collectors.groupingBy(item -> item.getYear() + "-" + item.getMonth() + "-" + item.getDay()))
+                .forEach((key, value) -> {
+                    WaterSupplyChart waterSupplyChart = new WaterSupplyChart();
+                    waterSupplyChart.setDate(key);
+                    value.stream().forEach(waterSupplyData -> {
+                        Period period = Period.between(LocalDate.of(waterSupplyData.getYear(), waterSupplyData.getMonth(), waterSupplyData.getDay()), localDate);
+                        waterSupplyChart.setSort(period.getDays());
+
+                        if (waterSupplyData.getParmType() == 3) { //供水
+                            waterSupplyChart.setWaterData(waterSupplyData.getAmount());
+                        } else if (waterSupplyData.getParmType() == 5) {//电耗
+                            waterSupplyChart.setPowerData(waterSupplyData.getAmount());
+                        } else if (waterSupplyData.getParmType() == 6) {//药耗
+                            waterSupplyChart.setDrugData(waterSupplyData.getAmount());
+                        }
+                    });
+                    waterSupplyCharts.add(waterSupplyChart);
+                });
+        waterSupplyCharts.sort(Comparator.comparing(WaterSupplyChart::getSort));
+
+        //6曲线图
+        generalViewResults.setWaterSupplyCharts(waterSupplyCharts);
+
+        return generalViewResults;
+    }
 
     //水厂近30天供水量
     @Override

+ 1 - 1
sms_water/src/main/resources/mapper/MonitorDataMapper.xml

@@ -69,6 +69,6 @@
             ,max(COLLECT_DATE) COLLECT_DATE
         from sms_day_report a
         where year = #{year} and month =#{month} and day=#{day}
-        group by TENANT_ID, PARENT_SCENE_ID, PARENT_SCENE_NAME, SCENE_ID, SCENE_NAME, DEVICE_ID, DEVICE_NAME, DEVICE_CODE, ATTRIBUTE_ID, ATTRIBUTE_NAME,  YEAR, MONTH, DAY
+        group by TENANT_ID, DEVICE_ID, DEVICE_NAME, DEVICE_CODE, ATTRIBUTE_ID, ATTRIBUTE_NAME,  YEAR, MONTH, DAY
     </insert>
 </mapper>

+ 30 - 6
sms_water/src/main/resources/mapper/MonitorDataReportMapper.xml

@@ -192,7 +192,7 @@
             <if test="sceneType != null and sceneType == 1">
                 IF( p.parm_type = 5, '耗电量','取水量'  ) AS "attributeName",
             </if>
-            <if test="sceneType == or and sceneType == 0">
+            <if test="sceneType == null or sceneType == 0">
                 IF( p.parm_type = 5, '耗电量','用水量'  ) AS "attributeName",
             </if>
             s.SCENE_NAME AS "deviceName",
@@ -210,7 +210,7 @@
             <if test="sceneType != null and sceneType == 1">
                 and p.parm_type in (4,5)
             </if>
-            <if test="sceneType == or and sceneType == 0">
+            <if test="sceneType == null or  sceneType == 0">
                 and p.parm_type in (3,5)
             </if>
 
@@ -258,7 +258,12 @@
     <select id="MonitorDataEnergyReportByMonth" resultMap="MonitorDataChartReportMap">
         SELECT
             r.`day` AS "dateLabel",
-            IF( p.parm_type = 3, '用水量', '耗电量' ) AS "attributeName",
+            <if test="sceneType != null and sceneType == 1">
+                IF( p.parm_type = 5, '耗电量','取水量'  ) AS "attributeName",
+            </if>
+            <if test="sceneType == null or sceneType == 0">
+            IF( p.parm_type = 5, '耗电量','用水量'  ) AS "attributeName",
+        </if>
             s.SCENE_NAME AS "deviceName",
             p.parm_type AS "attributeType",
             da.unit AS "unit",
@@ -270,7 +275,14 @@
         left join sms_scene s on s.id=p.parent_scene_id
         left join sms_device_attribute  da ON da.id = p.ATTRIBUTE_ID
         LEFT JOIN sms_device d ON d.id = r.DEVICE_ID
-        WHERE p.`STATUS`= 1 and p.parm_type in (3,5) and d.ENABLE_STATE = 1  and d.`STATUS`= 1
+        WHERE p.`STATUS`= 1
+        <if test="sceneType != null and sceneType == 1">
+            and p.parm_type in (4,5)
+        </if>
+        <if test="sceneType == null or  sceneType == 0">
+            and p.parm_type in (3,5)
+        </if>
+        and d.ENABLE_STATE = 1  and d.`STATUS`= 1
         AND r.YEAR = #{year}  and r.month=#{month}
         <if test="sceneIds != null and sceneIds.size()>0">
             and p.PARENT_SCENE_ID in
@@ -314,7 +326,12 @@
     <select id="MonitorDataEnergyReportByYear" resultMap="MonitorDataChartReportMap">
         SELECT
             r.`month` AS "dateLabel",
-            IF( p.parm_type = 3, '用水量', '耗电量' ) AS "attributeName",
+        <if test="sceneType != null and sceneType == 1">
+            IF( p.parm_type = 5, '耗电量','取水量'  ) AS "attributeName",
+        </if>
+        <if test="sceneType == null or sceneType == 0">
+            IF( p.parm_type = 5, '耗电量','用水量'  ) AS "attributeName",
+        </if>
             s.SCENE_NAME AS "deviceName",
             p.parm_type AS "attributeType",
             da.unit AS "unit",
@@ -326,7 +343,14 @@
         left join sms_scene s on s.id=p.parent_scene_id
         left join sms_device_attribute  da ON da.id = p.ATTRIBUTE_ID
         LEFT JOIN sms_device d ON d.id = r.DEVICE_ID
-        WHERE p.`STATUS`= 1 and p.parm_type in (3,5) and d.ENABLE_STATE = 1  and d.`STATUS`= 1
+        WHERE p.`STATUS`= 1
+        <if test="sceneType != null and sceneType == 1">
+            and p.parm_type in (4,5)
+        </if>
+        <if test="sceneType == null or  sceneType == 0">
+            and p.parm_type in (3,5)
+        </if>
+        and d.ENABLE_STATE = 1  and d.`STATUS`= 1
         AND r.YEAR = #{year}
         <if test="sceneIds != null and sceneIds.size()>0">
             and p.PARENT_SCENE_ID in