Pārlūkot izejas kodu

生产调度概览页接口

wangli 4 gadi atpakaļ
vecāks
revīzija
ea5379b69d

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

@@ -1,22 +1,17 @@
 package com.huaxu.controller;
 
-import com.huaxu.dto.DeviceDto;
 import com.huaxu.dto.MonitorDataChartReportDeviceDto;
+import com.huaxu.dto.generalView.*;
 import com.huaxu.entity.DeviceEntity;
-import com.huaxu.entity.MonitorDataEntity;
 import com.huaxu.model.AjaxMessage;
 import com.huaxu.model.ResultStatus;
 import com.huaxu.service.MonitorDataReportService;
-import com.huaxu.service.MonitorDataService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiParam;
-import org.apache.ibatis.annotations.Param;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
-import java.math.BigDecimal;
-import java.math.RoundingMode;
 import java.time.LocalDate;
 import java.time.format.DateTimeFormatter;
 import java.util.ArrayList;
@@ -45,13 +40,13 @@ public class MonitorDataReportController {
         LocalDate localDate = getLocalDate(reportDate, reportType);
         if(sceneId != null){
             if(reportType != null && reportType ==1){
-                return new AjaxMessage<>(ResultStatus.OK, monitorDataReportService.MonitorDataChartReportByYear(sceneId,localDate.getYear()));
+                return new AjaxMessage<>(ResultStatus.OK, monitorDataReportService.monitorDataChartReportByYear(sceneId,localDate.getYear()));
             }else
             if(reportType != null && reportType ==2){
-                return new AjaxMessage<>(ResultStatus.OK, monitorDataReportService.MonitorDataChartReportByMonth(sceneId,localDate.getYear(),localDate.getMonthValue()));
+                return new AjaxMessage<>(ResultStatus.OK, monitorDataReportService.monitorDataChartReportByMonth(sceneId,localDate.getYear(),localDate.getMonthValue()));
             }else
             if(reportType != null && reportType ==3){
-                return new AjaxMessage<>(ResultStatus.OK, monitorDataReportService.MonitorDataChartReportByDay(sceneId,localDate.getYear(),localDate.getMonthValue(),localDate.getDayOfMonth()));
+                return new AjaxMessage<>(ResultStatus.OK, monitorDataReportService.monitorDataChartReportByDay(sceneId,localDate.getYear(),localDate.getMonthValue(),localDate.getDayOfMonth()));
             }
         }
         return new AjaxMessage<>(ResultStatus.OK);
@@ -62,18 +57,19 @@ public class MonitorDataReportController {
     public AjaxMessage<List<List<MonitorDataChartReportDeviceDto>>> MonitorDataCompareReport(
             @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年2月3日", required = true) @RequestParam Integer reportType,
+            @ApiParam(value = "场景类型:1水源 0其他", required = true) @RequestParam Integer sceneType
     ){
         LocalDate localDate = getLocalDate(reportDate, reportType);
         List<List<MonitorDataChartReportDeviceDto>> reportList=new ArrayList<>();
         if(sceneIds != null && sceneIds.size() > 0){
 
-            //能耗(供水量3、耗电量5)
-            List<MonitorDataChartReportDeviceDto> energy = monitorDataReportService.MonitorDataEnergyReport(reportType,sceneIds,localDate.getYear(),localDate.getMonthValue(),localDate.getDayOfMonth());
+            //能耗(供水量3、耗电量5 )(4取水量、5耗电量
+            List<MonitorDataChartReportDeviceDto> energy = monitorDataReportService.monitorDataEnergyReport(reportType,sceneIds,localDate.getYear(),localDate.getMonthValue(),localDate.getDayOfMonth(),sceneType);
             //水质(PH8、余氯11、浊度10)
-            List<MonitorDataChartReportDeviceDto> quality = monitorDataReportService.MonitorDataQualityReport(reportType,sceneIds,localDate.getYear(),localDate.getMonthValue(),localDate.getDayOfMonth());
+            List<MonitorDataChartReportDeviceDto> quality = monitorDataReportService.monitorDataQualityReport(reportType,sceneIds,localDate.getYear(),localDate.getMonthValue(),localDate.getDayOfMonth());
             //报警(报警次数)
-            List<MonitorDataChartReportDeviceDto> alarm = monitorDataReportService.DeviceAlarmReport(reportType,sceneIds,localDate.getYear(),localDate.getMonthValue(),localDate.getDayOfMonth());
+            List<MonitorDataChartReportDeviceDto> alarm = monitorDataReportService.deviceAlarmReport(reportType,sceneIds,localDate.getYear(),localDate.getMonthValue(),localDate.getDayOfMonth());
 
             reportList.add(energy);
             reportList.add(quality);
@@ -119,20 +115,61 @@ public class MonitorDataReportController {
     ){
         LocalDate localDate = getLocalDate(reportDate, reportType);
         if(deviceIds != null && deviceIds.size()>0){
-            return new AjaxMessage<>(ResultStatus.OK,  monitorDataReportService.MonitorDataDeviceReport(reportType,deviceIds,searchType,localDate.getYear(),localDate.getMonthValue(),localDate.getDayOfMonth()));
+            return new AjaxMessage<>(ResultStatus.OK,  monitorDataReportService.monitorDataDeviceReport(reportType,deviceIds,searchType,localDate.getYear(),localDate.getMonthValue(),localDate.getDayOfMonth()));
         }
         return new AjaxMessage<>(ResultStatus.OK);
     }
 
 
 
-    @RequestMapping(value = "MonitorDataGeneralView",method = RequestMethod.GET)
-    @ApiOperation(value = "统计分析——管网图表")
-    public AjaxMessage<List<MonitorDataChartReportDeviceDto>> MonitorDataGeneralView(){
+//    @RequestMapping(value = "MonitorDataGeneralView",method = RequestMethod.GET)
+//    @ApiOperation(value = "统计分析——管网图表")
+//    public AjaxMessage<List> MonitorDataGeneralView(){
+//        return new AjaxMessage<>(ResultStatus.OK,monitorDataReportService.monitorDataGeneralView());
+//    }
 
-        return new AjaxMessage<>(ResultStatus.OK);
+
+
+    @RequestMapping(value = "getDeviceWaterSupplie",method = RequestMethod.GET)
+    @ApiOperation(value = "概览首页——近30天水量")
+    public AjaxMessage<List<DeviceWaterSupply>> getDeviceWaterSupplie(){
+        return new AjaxMessage<>(ResultStatus.OK,monitorDataReportService.deviceWaterSupplie());
+    }
+
+    @RequestMapping(value = "deviceWaterAmount",method = RequestMethod.GET)
+    @ApiOperation(value = "概览首页——供水详情数据")
+    public AjaxMessage<DeviceWaterAmount> deviceWaterAmount(){
+        return new AjaxMessage<>(ResultStatus.OK,monitorDataReportService.deviceWaterAmount());
     }
 
+    @RequestMapping(value = "sceneAlarms",method = RequestMethod.GET)
+    @ApiOperation(value = "概览首页——供实时报警信息")
+    public AjaxMessage<List<SceneAlarm>> sceneAlarms(){
+        return new AjaxMessage<>(ResultStatus.OK,monitorDataReportService.sceneAlarms());
+    }
 
+    @RequestMapping(value = "SceneNormalRates",method = RequestMethod.GET)
+    @ApiOperation(value = "概览首页——管网水质情况")
+    public AjaxMessage<List<SceneNormalRate>> SceneNormalRates(){
+        return new AjaxMessage<>(ResultStatus.OK,monitorDataReportService.SceneNormalRates());
+    }
+
+    @RequestMapping(value = "sceneWaterPressure",method = RequestMethod.GET)
+    @ApiOperation(value = "概览首页——压力分布区间")
+    public AjaxMessage<SceneWaterPressure> sceneWaterPressure(){
+        return new AjaxMessage<>(ResultStatus.OK,monitorDataReportService.sceneWaterPressure());
+    }
+
+    @RequestMapping(value = "sceneWaterAmounts",method = RequestMethod.GET)
+    @ApiOperation(value = "概览首页——水量排行")
+    public AjaxMessage<List<SceneWaterAmount>> sceneWaterAmounts(){
+        return new AjaxMessage<>(ResultStatus.OK,monitorDataReportService.sceneWaterAmounts());
+    }
+
+    @RequestMapping(value = "waterSupplyCharts",method = RequestMethod.GET)
+    @ApiOperation(value = "概览首页——对比曲线图")
+    public AjaxMessage<List<WaterSupplyChart>> waterSupplyCharts(){
+        return new AjaxMessage<>(ResultStatus.OK,monitorDataReportService.waterSupplyCharts());
+    }
 
 }

+ 6 - 7
sms_water/src/main/java/com/huaxu/dao/MonitorDataReportMapper.java

@@ -1,10 +1,7 @@
 package com.huaxu.dao;
 
 import com.huaxu.dto.MonitorDataChartReportDeviceDto;
-import com.huaxu.dto.generalView.DeviceWaterDetail;
-import com.huaxu.dto.generalView.DeviceWaterSupply;
-import com.huaxu.dto.generalView.SceneAlarm;
-import com.huaxu.dto.generalView.SceneNormalRate;
+import com.huaxu.dto.generalView.*;
 import com.huaxu.entity.DeviceEntity;
 import com.huaxu.model.ProgramItem;
 import org.apache.ibatis.annotations.Mapper;
@@ -39,15 +36,15 @@ public interface MonitorDataReportMapper {
 
 
 
-    List<MonitorDataChartReportDeviceDto> MonitorDataEnergyReportByDay(@Param("sceneIds")List<Long> sceneIds,
+    List<MonitorDataChartReportDeviceDto> MonitorDataEnergyReportByDay(@Param("sceneType")Integer sceneType,@Param("sceneIds")List<Long> sceneIds,
                                                                   @Param("year")Integer year, @Param("month")Integer month, @Param("day")Integer day,
                                                                   @Param("tenantId")String tenantId,@Param("userType")String userType,@Param("permissonType")Integer permissonType,
                                                                   @Param("programItems")List<ProgramItem> programItems);
-    List<MonitorDataChartReportDeviceDto> MonitorDataEnergyReportByMonth( @Param("sceneIds")List<Long> sceneIds,
+    List<MonitorDataChartReportDeviceDto> MonitorDataEnergyReportByMonth(@Param("sceneType")Integer sceneType, @Param("sceneIds")List<Long> sceneIds,
                                                                   @Param("year")Integer year, @Param("month")Integer month,
                                                                   @Param("tenantId")String tenantId,@Param("userType")String userType,@Param("permissonType")Integer permissonType,
                                                                   @Param("programItems")List<ProgramItem> programItems);
-    List<MonitorDataChartReportDeviceDto> MonitorDataEnergyReportByYear( @Param("sceneIds")List<Long> sceneIds,
+    List<MonitorDataChartReportDeviceDto> MonitorDataEnergyReportByYear(@Param("sceneType")Integer sceneType, @Param("sceneIds")List<Long> sceneIds,
                                                                   @Param("year")Integer year,
                                                                   @Param("tenantId")String tenantId,@Param("userType")String userType,@Param("permissonType")Integer permissonType,
                                                                   @Param("programItems")List<ProgramItem> programItems);
@@ -105,4 +102,6 @@ public interface MonitorDataReportMapper {
     List<SceneAlarm> getAlarmInfoForScene( @Param("tenantId")String tenantId);
 
     SceneNormalRate getQualificationForScene(@Param("tenantId")String tenantId, @Param("parmType")Integer parmType );
+
+    List<WaterSupplyData> getWaterSupplyData(@Param("tenantId")String tenantId);
 }

+ 44 - 0
sms_water/src/main/java/com/huaxu/dto/generalView/GeneralViewResults.java

@@ -0,0 +1,44 @@
+package com.huaxu.dto.generalView;
+
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * @description
+ * @auto wangli
+ * @data 2021/1/6 16:49
+ */
+@Api("生成调度中心概览数据")
+@Data
+public class GeneralViewResults implements Serializable {
+
+
+    private static final long serialVersionUID = 452556952461741933L;
+
+    @ApiModelProperty("近30天水量")
+    List<DeviceWaterSupply> deviceWaterSupplies;
+
+    @ApiModelProperty("供水详情数据")
+    DeviceWaterAmount deviceWaterAmount;
+
+    @ApiModelProperty("实时报警信息")
+    List<SceneAlarm> sceneAlarms;
+
+    @ApiModelProperty("管网水质情况")
+    List<SceneNormalRate> SceneNormalRates;
+
+    @ApiModelProperty("压力分布区间")
+    SceneWaterPressure sceneWaterPressure;
+
+    @ApiModelProperty("水量排行")
+    List<SceneWaterAmount> sceneWaterAmounts;
+
+    @ApiModelProperty("对比曲线图")
+    List<WaterSupplyChart> waterSupplyCharts;
+
+
+}

+ 48 - 0
sms_water/src/main/java/com/huaxu/dto/generalView/SceneWaterPressure.java

@@ -0,0 +1,48 @@
+package com.huaxu.dto.generalView;
+
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+/**
+ * @description
+ * @auto wangli
+ * @data 2021/1/6 13:47
+ */
+@Data
+@Api("水厂压力级别")
+public class SceneWaterPressure implements Serializable {
+
+    private static final long serialVersionUID = -2156183545580875355L;
+
+    @ApiModelProperty("一级压力数量,<0.15")
+    private Integer pressureLevel1;
+    @ApiModelProperty("一级压力数量,0.15<=0.30")
+    private Integer pressureLevel2;
+    @ApiModelProperty("一级压力数量,0.30<=0.40")
+    private Integer pressureLevel3;
+    @ApiModelProperty("一级压力数量,0.40<=0.50")
+    private Integer pressureLevel4;
+    @ApiModelProperty("一级压力数量,>0.50")
+    private Integer pressureLevel5;
+
+    @ApiModelProperty("最小压力场景名称")
+    private String minPressureSceneName;
+    @ApiModelProperty("最小压力值")
+    private BigDecimal minPressureValue;
+    @ApiModelProperty("最大压力场景名称")
+    private String maxPressureSceneName;
+    @ApiModelProperty("最大压力值")
+    private BigDecimal MaxPressureValue;
+
+    public SceneWaterPressure(){
+        this.pressureLevel1=0;
+        this.pressureLevel2=0;
+        this.pressureLevel3=0;
+        this.pressureLevel4=0;
+        this.pressureLevel5=0;
+    }
+}

+ 46 - 0
sms_water/src/main/java/com/huaxu/dto/generalView/WaterSupplyChart.java

@@ -0,0 +1,46 @@
+package com.huaxu.dto.generalView;
+
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.time.LocalDate;
+import java.time.format.DateTimeFormatter;
+import java.util.ArrayList;
+import java.util.Comparator;
+import java.util.List;
+
+/**
+ * @description
+ * @auto wangli
+ * @data 2021/1/6 14:44
+ */
+@Api("供水曲线图")
+@Data
+public class WaterSupplyChart implements Serializable {
+
+    private static final long serialVersionUID = -7408540431210984136L;
+
+    @ApiModelProperty("序号")
+    private Integer sort;
+    @ApiModelProperty("日期")
+    private String date;
+    @ApiModelProperty("制水量")
+    private BigDecimal waterData;
+    @ApiModelProperty("电耗")
+    private BigDecimal powerData;
+    @ApiModelProperty("药耗")
+    private BigDecimal drugData;
+    public WaterSupplyChart (){ }
+
+    public WaterSupplyChart ( Integer i){
+        this.sort=i;
+        this.waterData=BigDecimal.ZERO;
+        this.powerData=BigDecimal.ZERO;
+        this.drugData=BigDecimal.ZERO;
+        this.date= DateTimeFormatter.ofPattern("yyyy-MM-dd").format(LocalDate.now().plusDays(-i));
+
+    }
+}

+ 27 - 0
sms_water/src/main/java/com/huaxu/dto/generalView/WaterSupplyData.java

@@ -0,0 +1,27 @@
+package com.huaxu.dto.generalView;
+
+import io.swagger.annotations.Api;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.Comparator;
+import java.util.List;
+
+/**
+ * @description
+ * @auto wangli
+ * @data 2021/1/6 14:44
+ */
+@Api("供水曲线图")
+@Data
+public class WaterSupplyData {
+
+    private Integer year;
+    private Integer month;
+    private Integer day;
+    private Integer parmType;
+    private BigDecimal amount;
+    private String unit;
+
+}

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

@@ -1,7 +1,9 @@
 package com.huaxu.service;
 
 import com.huaxu.dto.MonitorDataChartReportDeviceDto;
+import com.huaxu.dto.generalView.*;
 import com.huaxu.entity.DeviceEntity;
+import io.swagger.annotations.ApiModelProperty;
 
 import java.util.List;
 
@@ -13,23 +15,59 @@ import java.util.List;
 public interface MonitorDataReportService {
 
     //日报
-    List<MonitorDataChartReportDeviceDto> MonitorDataChartReportByDay(Long sceneId,Integer year,Integer month ,Integer day);
+    List<MonitorDataChartReportDeviceDto> monitorDataChartReportByDay(Long sceneId, Integer year, Integer month , Integer day);
     //年报
-    List<MonitorDataChartReportDeviceDto> MonitorDataChartReportByMonth(Long sceneId,Integer year,Integer month );
+    List<MonitorDataChartReportDeviceDto> monitorDataChartReportByMonth(Long sceneId, Integer year, Integer month );
     //月报
-    List<MonitorDataChartReportDeviceDto> MonitorDataChartReportByYear(Long sceneId,Integer year);
+    List<MonitorDataChartReportDeviceDto> monitorDataChartReportByYear(Long sceneId, Integer year);
 
 
     //报警次数
-    List<MonitorDataChartReportDeviceDto> DeviceAlarmReport(Integer type,List<Long>  sceneIds,Integer year,Integer month ,Integer day);
+    List<MonitorDataChartReportDeviceDto> deviceAlarmReport(Integer type, List<Long>  sceneIds, Integer year, Integer month , Integer day);
     //水质对比
-    List<MonitorDataChartReportDeviceDto> MonitorDataQualityReport(Integer type,List<Long>  sceneIds,Integer year,Integer month ,Integer day);
+    List<MonitorDataChartReportDeviceDto> monitorDataQualityReport(Integer type, List<Long>  sceneIds, Integer year, Integer month , Integer day);
     //能耗对比
-    List<MonitorDataChartReportDeviceDto> MonitorDataEnergyReport(Integer type,List<Long>  sceneIds,Integer year,Integer month ,Integer day);
+    List<MonitorDataChartReportDeviceDto> monitorDataEnergyReport(Integer type, List<Long>  sceneIds, Integer year, Integer month , Integer day, Integer sceneType);
 
     List<DeviceEntity> getDeviceBySceneTypeName(String sceneTypeName);
 
-    List<MonitorDataChartReportDeviceDto> MonitorDataDeviceReport(Integer type,List<Long>  deviceIds, Integer searchType,Integer year,Integer month ,Integer day);
+    List<MonitorDataChartReportDeviceDto> monitorDataDeviceReport(Integer type, List<Long>  deviceIds, Integer searchType, Integer year, Integer month , Integer day);
+
+    //概览页所有数据
+//    List monitorDataGeneralView();
+    
+    //近30天水量
+    List<DeviceWaterSupply> deviceWaterSupplie();
+
+    //供水详情数据
+    DeviceWaterAmount deviceWaterAmount();
+
+    //实时报警信息
+    List<SceneAlarm> sceneAlarms();
+
+    //管网水质情况
+    List<SceneNormalRate> SceneNormalRates();
+
+    //压力分布区间
+    SceneWaterPressure sceneWaterPressure();
+
+    //水量排行
+    List<SceneWaterAmount> sceneWaterAmounts();
+
+    //对比曲线图
+    List<WaterSupplyChart> waterSupplyCharts();
+
+
+
+
+
+
+
+
+
 
-    void MonitorDataGeneralView();
 }
+
+
+
+

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

@@ -20,8 +20,11 @@ import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
 import java.math.BigDecimal;
+import java.time.Duration;
 import java.time.LocalDate;
 import java.time.LocalDateTime;
+import java.time.Period;
+import java.time.format.DateTimeFormatter;
 import java.time.temporal.TemporalAdjusters;
 import java.util.*;
 import java.util.stream.Collectors;
@@ -41,7 +44,7 @@ public class MonitorDataReportServiceImpl implements MonitorDataReportService {
     private RedisUtil redisUtil;
 
     @Override
-    public List<MonitorDataChartReportDeviceDto> MonitorDataChartReportByDay(Long sceneId,Integer year,Integer month ,Integer day) {
+    public List<MonitorDataChartReportDeviceDto> monitorDataChartReportByDay(Long sceneId, Integer year, Integer month , Integer day) {
         LoginUser loginUser = UserUtil.getCurrentUser();
         List<MonitorDataChartReportDeviceDto> monitorDataChartReportDeviceDtos =  monitorDataReportMapper.MonitorDataChartReportByDay(year,month,day,sceneId,
                 loginUser.getTenantId(),loginUser.getType(),loginUser.getPermissonType(),loginUser.getProgramItemList());
@@ -50,7 +53,7 @@ public class MonitorDataReportServiceImpl implements MonitorDataReportService {
     }
 
     @Override
-    public List<MonitorDataChartReportDeviceDto> MonitorDataChartReportByMonth(Long sceneId,Integer year,Integer month ) {
+    public List<MonitorDataChartReportDeviceDto> monitorDataChartReportByMonth(Long sceneId, Integer year, Integer month ) {
         LoginUser loginUser = UserUtil.getCurrentUser();
         List<MonitorDataChartReportDeviceDto> monitorDataChartReportDeviceDtos = monitorDataReportMapper.MonitorDataChartReportByMonth(year,month,sceneId,
                 loginUser.getTenantId(),loginUser.getType(),loginUser.getPermissonType(),loginUser.getProgramItemList());
@@ -59,7 +62,7 @@ public class MonitorDataReportServiceImpl implements MonitorDataReportService {
     }
 
     @Override
-    public List<MonitorDataChartReportDeviceDto> MonitorDataChartReportByYear(Long sceneId,Integer year) {
+    public List<MonitorDataChartReportDeviceDto> monitorDataChartReportByYear(Long sceneId, Integer year) {
         LoginUser loginUser = UserUtil.getCurrentUser();
         List<MonitorDataChartReportDeviceDto> monitorDataChartReportDeviceDtos = monitorDataReportMapper.MonitorDataChartReportByYear(year,sceneId,
                 loginUser.getTenantId(),loginUser.getType(),loginUser.getPermissonType(),loginUser.getProgramItemList());
@@ -68,7 +71,7 @@ public class MonitorDataReportServiceImpl implements MonitorDataReportService {
     }
 
     @Override
-    public List<MonitorDataChartReportDeviceDto> DeviceAlarmReport(Integer type,List<Long>  sceneIds,Integer year,Integer month ,Integer day) {
+    public List<MonitorDataChartReportDeviceDto> deviceAlarmReport(Integer type, List<Long>  sceneIds, Integer year, Integer month , Integer day) {
         LoginUser loginUser = UserUtil.getCurrentUser();
         LocalDate beginDate;
         LocalDate endDate;
@@ -98,7 +101,7 @@ public class MonitorDataReportServiceImpl implements MonitorDataReportService {
     }
 
     @Override
-    public List<MonitorDataChartReportDeviceDto> MonitorDataQualityReport(Integer type,List<Long>  sceneIds,Integer year,Integer month ,Integer day) {
+    public List<MonitorDataChartReportDeviceDto> monitorDataQualityReport(Integer type, List<Long>  sceneIds, Integer year, Integer month , Integer day) {
         LoginUser loginUser = UserUtil.getCurrentUser();
 
         List<MonitorDataChartReportDeviceDto> monitorDataChartReportDeviceDtos = null;
@@ -120,17 +123,17 @@ public class MonitorDataReportServiceImpl implements MonitorDataReportService {
     }
 
     @Override
-    public List<MonitorDataChartReportDeviceDto> MonitorDataEnergyReport(Integer type,List<Long> sceneIds,Integer year,Integer month ,Integer day) {
+    public List<MonitorDataChartReportDeviceDto> monitorDataEnergyReport(Integer type, List<Long> sceneIds, Integer year, Integer month , Integer day, Integer sceneType) {
         LoginUser loginUser = UserUtil.getCurrentUser();
         List<MonitorDataChartReportDeviceDto> monitorDataChartReportDeviceDtos = null;
         if(type != null && type == 3){
-            monitorDataChartReportDeviceDtos = monitorDataReportMapper.MonitorDataEnergyReportByDay(sceneIds,year,month,day,
+            monitorDataChartReportDeviceDtos = monitorDataReportMapper.MonitorDataEnergyReportByDay(sceneType,sceneIds,year,month,day,
                    loginUser.getTenantId(),loginUser.getType(),loginUser.getPermissonType(),loginUser.getProgramItemList());
        } else if(type != null && type == 2){
-            monitorDataChartReportDeviceDtos = monitorDataReportMapper.MonitorDataEnergyReportByMonth(sceneIds,year,month,
+            monitorDataChartReportDeviceDtos = monitorDataReportMapper.MonitorDataEnergyReportByMonth(sceneType,sceneIds,year,month,
                    loginUser.getTenantId(),loginUser.getType(),loginUser.getPermissonType(),loginUser.getProgramItemList());
        } else if(type != null && type == 1){
-           monitorDataChartReportDeviceDtos = monitorDataReportMapper.MonitorDataEnergyReportByYear(sceneIds,year,
+           monitorDataChartReportDeviceDtos = monitorDataReportMapper.MonitorDataEnergyReportByYear(sceneType,sceneIds,year,
                    loginUser.getTenantId(),loginUser.getType(),loginUser.getPermissonType(),loginUser.getProgramItemList());
        }
         if(monitorDataChartReportDeviceDtos != null){
@@ -144,7 +147,7 @@ public class MonitorDataReportServiceImpl implements MonitorDataReportService {
         return monitorDataReportMapper.getDeviceBySceneTypeName(sceneTypeName,loginUser.getTenantId(),loginUser.getType(),loginUser.getPermissonType(),loginUser.getProgramItemList());
     }
     @Override
-    public List<MonitorDataChartReportDeviceDto> MonitorDataDeviceReport(Integer type,List<Long>  deviceIds, Integer searchType,Integer year,Integer month ,Integer day){
+    public List<MonitorDataChartReportDeviceDto> monitorDataDeviceReport(Integer type, List<Long>  deviceIds, Integer searchType, Integer year, Integer month , Integer day){
 
         LoginUser loginUser = UserUtil.getCurrentUser();
         List<MonitorDataChartReportDeviceDto> monitorDataChartReportDeviceDtos = null;
@@ -252,61 +255,353 @@ 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;
+//    }
+
+    //水厂近30天供水量
     @Override
-    public void MonitorDataGeneralView(){
+    public List<DeviceWaterSupply> deviceWaterSupplie() {
         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));
+        List<DeviceWaterSupply> deviceWaterSupplies = monitorDataReportMapper.getDeviceWaterFor30Day(tenantId);
 
+        LocalDate localDate = LocalDate.now();
 
-        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()))){
+        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.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.add(i, deviceWaterSupply);
+            } else {
+                deviceWaterSupplies.get(i).setOrderNo(i + 1);
                 deviceWaterSupplies.get(i).setDate(newLocalDate);
             }
         }
+        return deviceWaterSupplies;
+    }
+
+    //供水详情数据(合计:瞬时、本天、本月、本年)
+    @Override
+    public DeviceWaterAmount deviceWaterAmount() {
+        LoginUser loginUser = UserUtil.getCurrentUser();
+        String tenantId = loginUser.getTenantId();
+        Map<Integer, MonitorDataEntity> MonitorDataMap = getIntegerMonitorDataEntityMap(tenantId);
 
-        //供水详情数据(合计:瞬时、本天、本月、本年)
-        DeviceWaterAmount deviceWaterAmount= new DeviceWaterAmount();
+        LocalDate localDate = LocalDate.now();
+
+        DeviceWaterAmount deviceWaterAmount = new DeviceWaterAmount();
         //14瞬时流量
-        List<DeviceWaterDetail> deviceSupplyWaterDetailsForNow = monitorDataReportMapper.getDeviceWaterDetailForNow("水厂",14,tenantId);
-        List<DeviceWaterDetail> deviceIntakeWaterDetailsForNow = monitorDataReportMapper.getDeviceWaterDetailForNow("水源",14,tenantId);
+        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())){
+        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()));
                     }
@@ -315,11 +610,11 @@ public class MonitorDataReportServiceImpl implements MonitorDataReportService {
 
         }
         //水源获取实时流量并计算出当天流量
-        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())){
+        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()));
                     }
@@ -328,15 +623,15 @@ public class MonitorDataReportServiceImpl implements MonitorDataReportService {
         }
 
         //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());
+        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())){
+        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()));
                     }
@@ -345,11 +640,11 @@ public class MonitorDataReportServiceImpl implements MonitorDataReportService {
 
         }
         //水源获取实时流量并计算出当天流量
-        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())){
+        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()));
                     }
@@ -357,47 +652,241 @@ public class MonitorDataReportServiceImpl implements MonitorDataReportService {
             }
         }
 
-        BigDecimal waterSupplyAmountForMonth = monitorDataReportMapper.getDeviceWaterDetailForMonth("水厂",3,tenantId,localDate.getYear(),localDate.getMonthValue());
-        BigDecimal waterSupplyAmountForYear = monitorDataReportMapper.getDeviceWaterDetailForYear("水厂",3,tenantId,localDate.getYear());
+        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;
+        }
         //水厂当月流量
-        deviceWaterAmount.setWaterSupplyAmountForMonth(waterSupplyAmountForMonth.add(deviceWaterAmount.getWaterSupplyAmountForDay()));
+        if (deviceWaterAmount.getWaterSupplyAmountForDay() == null) {
+            deviceWaterAmount.setWaterSupplyAmountForMonth(waterSupplyAmountForMonth);
+        } else {
+            deviceWaterAmount.setWaterSupplyAmountForMonth(waterSupplyAmountForMonth.add(deviceWaterAmount.getWaterSupplyAmountForDay()));
+        }
         //水厂当年流量
-        deviceWaterAmount.setWaterSupplyAmountForYear(waterSupplyAmountForYear.add(deviceWaterAmount.getWaterSupplyAmountForMonth()));
+        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());
+        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;
+        }
         //水源当月流量
-        deviceWaterAmount.setWaterIntakeAmountForMonth(waterIntakeAmountForMonth.add(deviceWaterAmount.getWaterIntakeAmountForDay()));
+        if (deviceWaterAmount.getWaterIntakeAmountForDay() == null) {
+            deviceWaterAmount.setWaterIntakeAmountForMonth(waterIntakeAmountForMonth);
+        } else {
+            deviceWaterAmount.setWaterIntakeAmountForMonth(waterIntakeAmountForMonth.add(deviceWaterAmount.getWaterIntakeAmountForDay()));
+        }
         //水源当年流量
-        deviceWaterAmount.setWaterIntakeAmountForYear(waterIntakeAmountForYear.add(deviceWaterAmount.getWaterIntakeAmountForMonth()));
+        if (deviceWaterAmount.getWaterIntakeAmountForMonth() == null) {
+            deviceWaterAmount.setWaterIntakeAmountForYear(waterIntakeAmountForYear);
+        } else {
+            deviceWaterAmount.setWaterIntakeAmountForYear(waterIntakeAmountForYear.add(deviceWaterAmount.getWaterIntakeAmountForMonth()));
+        }
 
+        return deviceWaterAmount;
+    }
 
+    //实时报警信息
+    @Override
+    public List<SceneAlarm> sceneAlarms() {
+        LoginUser loginUser = UserUtil.getCurrentUser();
+        String tenantId = loginUser.getTenantId();
+        return monitorDataReportMapper.getAlarmInfoForScene(tenantId);
+    }
 
-        //实时报警信息
-        List<SceneAlarm> sceneAlarms = monitorDataReportMapper.getAlarmInfoForScene(tenantId);
+    //管网水质(水质 -1、8PH、10浊度、11余氯)
+    @Override
+    public List<SceneNormalRate> SceneNormalRates() {
+        LoginUser loginUser = UserUtil.getCurrentUser();
+        String tenantId = loginUser.getTenantId();
 
-        //管网水质(水质 -1、8PH、10浊度、11余氯)
+        List<SceneNormalRate> SceneNormalRates = new ArrayList<>();
         //水质
-        SceneNormalRate sceneNormalRate1 = monitorDataReportMapper.getQualificationForScene(tenantId,-1);
+        SceneNormalRate sceneNormalRate1 = monitorDataReportMapper.getQualificationForScene(tenantId, -1);
         //PH
-        SceneNormalRate sceneNormalRate2 = monitorDataReportMapper.getQualificationForScene(tenantId,8);
+        SceneNormalRate sceneNormalRate2 = monitorDataReportMapper.getQualificationForScene(tenantId, 8);
         //浊度
-        SceneNormalRate sceneNormalRate3 = monitorDataReportMapper.getQualificationForScene(tenantId,10);
+        SceneNormalRate sceneNormalRate3 = monitorDataReportMapper.getQualificationForScene(tenantId, 10);
         //余氯
-        SceneNormalRate sceneNormalRate4 = monitorDataReportMapper.getQualificationForScene(tenantId,11);
-
+        SceneNormalRate sceneNormalRate4 = monitorDataReportMapper.getQualificationForScene(tenantId, 11);
+        SceneNormalRates.add(sceneNormalRate1);
+        SceneNormalRates.add(sceneNormalRate2);
+        SceneNormalRates.add(sceneNormalRate3);
+        SceneNormalRates.add(sceneNormalRate4);
 
-        //压力分布
+        return SceneNormalRates;
+    }
 
-        //今日水厂制水量排行
+    //压力分布
+    @Override
+    public SceneWaterPressure sceneWaterPressure() {
 
+        LoginUser loginUser = UserUtil.getCurrentUser();
+        String tenantId = loginUser.getTenantId();
+        Map<Integer, MonitorDataEntity> MonitorDataMap = getIntegerMonitorDataEntityMap(tenantId);
+
+        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());
+        }
+        return sceneWaterPressure;
+    }
 
+    //今日水厂制水量排行
+    @Override
+    public List<SceneWaterAmount> sceneWaterAmounts() {
+        LoginUser loginUser = UserUtil.getCurrentUser();
+        String tenantId = loginUser.getTenantId();
+        //查询设备数据
+        Map<Integer, MonitorDataEntity> MonitorDataMap = getIntegerMonitorDataEntityMap(tenantId);
+
+        LocalDate localDate = LocalDate.now();
+        List<DeviceWaterDetail> deviceSupplyWaterDetailsForDay = monitorDataReportMapper.getDeviceWaterDetailForDay("水厂", 3, tenantId, localDate.getYear(), localDate.getMonthValue(), localDate.getDayOfMonth());
+
+        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());
+        return sceneWaterAmounts;
+    }
 
-        //水厂制水、药耗、电耗对比曲线
+    //水厂制水、药耗、电耗对比曲线
+    @Override
+    public List<WaterSupplyChart> waterSupplyCharts() {
 
-    }
+        LoginUser loginUser = UserUtil.getCurrentUser();
+        String tenantId = loginUser.getTenantId();
 
+        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.now());
+                        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));
+        for(int i=0;i<7;i++){
+            if(i == waterSupplyCharts.size() || !waterSupplyCharts.get(i).getSort().equals(i+1)){
+                waterSupplyCharts.add(i,new WaterSupplyChart(i+1));
+            }
+        }
 
+        return waterSupplyCharts;
+    }
 
+    //查询设备实时数据
+    private Map<Integer, MonitorDataEntity> getIntegerMonitorDataEntityMap(String tenantId) {
+        //查询设备编码
+        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
+        return monitorDataEntities.stream().collect(Collectors.toMap(MonitorDataEntity::getDeviceId, a -> a, (k1, k2) -> k1));
+    }
 }

+ 36 - 4
sms_water/src/main/resources/mapper/MonitorDataReportMapper.xml

@@ -189,7 +189,12 @@
     <select id="MonitorDataEnergyReportByDay" resultMap="MonitorDataChartReportMap">
         SELECT
             r.`HOUR` 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 == or and sceneType == 0">
+                IF( p.parm_type = 5, '耗电量','用水量'  ) AS "attributeName",
+            </if>
             s.SCENE_NAME AS "deviceName",
             p.parm_type AS "attributeType",
             da.unit AS "unit",
@@ -201,7 +206,15 @@
         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 == or and 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}  and r.day=#{day}
             <if test="sceneIds != null and sceneIds.size()>0">
                 and p.PARENT_SCENE_ID in
@@ -870,7 +883,8 @@
 
     <select id="getDeviceWaterDetailForNow" resultType="com.huaxu.dto.generalView.DeviceWaterDetail">
         select
-             dp.DEVICE_ID as "deviceId"
+            s.SCENE_NAME as "sceneName"
+            ,dp.DEVICE_ID as "deviceId"
             ,dp.ATTRIBUTE_ID as "attributeId"
             ,dp.PARM_TYPE as "parmType"
         from sms_scene_type st
@@ -890,7 +904,7 @@
         from sms_scene_type st
         left join sms_scene s on s.SCENE_TYPE_ID =st.id
         left join sms_device_parm dp on s.id=dp.PARENT_SCENE_ID
-        left join sms_day_report r on and r.SCENE_ID=dp.SCENE_ID and r.DEVICE_ID= dp.DEVICE_ID and r.ATTRIBUTE_ID = dp.ATTRIBUTE_ID and r.year = #{year} and r.month= #{month} and r.day = #{day}
+        left join sms_day_report r on r.DEVICE_ID= dp.DEVICE_ID and r.ATTRIBUTE_ID = dp.ATTRIBUTE_ID and r.year = #{year} and r.month= #{month} and r.day = #{day}
         where  dp.`STATUS`=1 and st.SCENE_TYPE_NAME = #{sceneTypeName}
         and dp.PARM_TYPE =#{parmType}   and dp.TENANT_ID=#{tenantId}
         group by s.SCENE_NAME,dp.DEVICE_ID ,dp.ATTRIBUTE_ID,dp.PARM_TYPE
@@ -958,5 +972,23 @@
 
     </select>
 
+    <select id="getWaterSupplyData" resultType="com.huaxu.dto.generalView.WaterSupplyData">
+         select
+             r.year
+            ,r.month
+            ,r.day
+            ,dp.PARM_TYPE as "parmType"
+            ,sum(r.SUM_VALUE) as "amount"
+            ,da.UNIT as "unit"
+        from sms_scene_type st
+        left join sms_scene s on s.SCENE_TYPE_ID =st.id
+        left join sms_device_parm dp on s.id=dp.SCENE_ID
+        left join sms_device_attribute da on dp.ATTRIBUTE_ID =da.ID
+        left join sms_month_report r on r.DEVICE_ID =dp.DEVICE_ID and r.ATTRIBUTE_ID = dp.ATTRIBUTE_ID
+        where  dp.`STATUS`=1 and st.SCENE_TYPE_NAME = '水厂'
+            and r.COLLECT_DATE >= DATE_SUB(CURDATE(),INTERVAL 7 day)
+            and dp.PARM_TYPE in (3,5,6)   and dp.TENANT_ID=#{tenantId}
+        group by r.year,r.month,r.day,dp.PARM_TYPE,da.UNIT
+    </select>
 
 </mapper>