wangli 4 лет назад
Родитель
Сommit
a28c23a58b
17 измененных файлов с 713 добавлено и 207 удалено
  1. 12 1
      sms_water/src/main/java/com/huaxu/controller/MonitorDataReportController.java
  2. 12 8
      sms_water/src/main/java/com/huaxu/controller/TestDataController.java
  3. 17 0
      sms_water/src/main/java/com/huaxu/dao/MonitorDataReportMapper.java
  4. 25 8
      sms_water/src/main/java/com/huaxu/dto/DeviceCheckAlarmDto.java
  5. 73 0
      sms_water/src/main/java/com/huaxu/dto/generalView/DeviceWaterAmount.java
  6. 36 0
      sms_water/src/main/java/com/huaxu/dto/generalView/DeviceWaterDetail.java
  7. 38 0
      sms_water/src/main/java/com/huaxu/dto/generalView/DeviceWaterSupply.java
  8. 24 0
      sms_water/src/main/java/com/huaxu/dto/generalView/SceneAlarm.java
  9. 27 0
      sms_water/src/main/java/com/huaxu/dto/generalView/SceneNormalRate.java
  10. 22 0
      sms_water/src/main/java/com/huaxu/dto/generalView/SceneWaterAmount.java
  11. 2 0
      sms_water/src/main/java/com/huaxu/service/MonitorDataReportService.java
  12. 241 80
      sms_water/src/main/java/com/huaxu/service/impl/MonitorDataReportServiceImpl.java
  13. 0 83
      sms_water/src/main/java/com/huaxu/service/impl/MonitorDataServiceImpl.java
  14. 26 0
      sms_water/src/main/java/com/huaxu/util/jsonSerializer/BigDecimalJsonSerializer.java
  15. 24 0
      sms_water/src/main/java/com/huaxu/util/jsonSerializer/DoubleJsonSerializer.java
  16. 128 15
      sms_water/src/main/resources/mapper/MonitorDataReportMapper.xml
  17. 6 12
      sms_water/src/main/resources/mapper/TestDataMapper.xml

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

@@ -15,6 +15,8 @@ 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;
@@ -108,7 +110,7 @@ public class MonitorDataReportController {
 
 
     @RequestMapping(value = "MonitorDataChartReportByDevice",method = RequestMethod.GET)
-    @ApiOperation(value = "统计分析——压力")
+    @ApiOperation(value = "统计分析——管网图表")
     public AjaxMessage<List<MonitorDataChartReportDeviceDto>> MonitorDataChartReportByDevice(
             @ApiParam(value = "设备id", required = true) @RequestParam List<Long> deviceIds,
             @ApiParam(value = "时间", required = true) @RequestParam String reportDate,
@@ -124,4 +126,13 @@ public class MonitorDataReportController {
 
 
 
+    @RequestMapping(value = "MonitorDataGeneralView",method = RequestMethod.GET)
+    @ApiOperation(value = "统计分析——管网图表")
+    public AjaxMessage<List<MonitorDataChartReportDeviceDto>> MonitorDataGeneralView(){
+
+        return new AjaxMessage<>(ResultStatus.OK);
+    }
+
+
+
 }

+ 12 - 8
sms_water/src/main/java/com/huaxu/controller/TestDataController.java

@@ -30,7 +30,7 @@ public class TestDataController {
     @RequestMapping(value="createDataByDay" , method = RequestMethod.GET)
     @ApiOperation(value = "生成日数据")
     public void createDataByDay(
-            @ApiParam("设备id") @RequestParam Long id,
+            @ApiParam("设备id") @RequestParam List<Long> ids,
              @ApiParam("开始时间,yyyy-MM-dd") @RequestParam String beginDate,
             @ApiParam("结束时间,yyyy-MM-dd")@RequestParam String endDate){
         LocalDate localDate1 =LocalDate.now();
@@ -39,18 +39,20 @@ public class TestDataController {
             localDate1 = LocalDate.parse(beginDate, DateTimeFormatter.ofPattern("yyyy-MM-dd"));
             localDate2 = LocalDate.parse(endDate, DateTimeFormatter.ofPattern("yyyy-MM-dd"));
         }
+        for(Long id:ids){
+            List<DayReportEntity> dayReportEntity = testDataService.selectDeviceInfo(id);
+            testDataService.createDataByDay(dayReportEntity,localDate1,localDate2.plusDays(1));
 
-        List<DayReportEntity> dayReportEntity = testDataService.selectDeviceInfo(id);
-        testDataService.createDataByDay(dayReportEntity,localDate1,localDate2.plusDays(1));
-        testDataService.createDataByMonth(id,localDate1,localDate2.plusDays(1));
-        testDataService.createDataByYear(id,localDate1,localDate2.plusDays(1));
-        testDataService.createAlarmByDay(id.intValue(),localDate1,localDate2.plusDays(1),100);
+            testDataService.createDataByMonth(id,localDate1,localDate2.plusDays(1));
+            testDataService.createDataByYear(id,localDate1,localDate2.plusDays(1));
+        }
+//        testDataService.createAlarmByDay(id.intValue(),localDate1,localDate2.plusDays(1),100);
     }
 
     @RequestMapping(value="createAlarmDataByDay" , method = RequestMethod.GET)
     @ApiOperation(value = "生成报警数据")
     public void createAlarmDataByDay(
-            @ApiParam("设备id") @RequestParam Long id,
+            @ApiParam("设备id") @RequestParam List<Long> ids,
             @ApiParam("报警信息条数") @RequestParam Integer number,
             @ApiParam("开始时间,yyyy-MM-dd") @RequestParam String beginDate,
             @ApiParam("结束时间,yyyy-MM-dd")@RequestParam String endDate) {
@@ -60,6 +62,8 @@ public class TestDataController {
             localDate1 = LocalDate.parse(beginDate, DateTimeFormatter.ofPattern("yyyy-MM-dd"));
             localDate2 = LocalDate.parse(endDate, DateTimeFormatter.ofPattern("yyyy-MM-dd"));
         }
-        testDataService.createAlarmByDay(id.intValue(),localDate1,localDate2.plusDays(1),number);
+        for(Long id:ids){
+            testDataService.createAlarmByDay(id.intValue(),localDate1,localDate2.plusDays(1),number);
+        }
     }
 }

+ 17 - 0
sms_water/src/main/java/com/huaxu/dao/MonitorDataReportMapper.java

@@ -1,11 +1,16 @@
 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.entity.DeviceEntity;
 import com.huaxu.model.ProgramItem;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
 
+import java.math.BigDecimal;
 import java.time.LocalDate;
 import java.util.Date;
 import java.util.List;
@@ -87,5 +92,17 @@ public interface MonitorDataReportMapper {
                                                                                @Param("programItems")List<ProgramItem> programItems);
 
 
+    List<String> selectDeviceCode(@Param("tenantId")String tenantId);
 
+    List<DeviceWaterSupply> getDeviceWaterFor30Day(@Param("tenantId")String tenantId);
+
+    List<DeviceWaterDetail> getDeviceWaterDetailForNow(@Param("sceneTypeName")String sceneTypeName,@Param("parmType")Integer parmType,@Param("tenantId")String tenantId);
+    List<DeviceWaterDetail> getDeviceWaterDetailForDay(@Param("sceneTypeName")String sceneTypeName,@Param("parmType")Integer parmType,@Param("tenantId")String tenantId,@Param("year")Integer year, @Param("month")Integer month, @Param("day")Integer day);
+    BigDecimal getDeviceWaterDetailForMonth(@Param("sceneTypeName")String sceneTypeName,@Param("parmType")Integer parmType,@Param("tenantId")String tenantId, @Param("year")Integer year, @Param("month")Integer month);
+    BigDecimal getDeviceWaterDetailForYear(@Param("sceneTypeName")String sceneTypeName,@Param("parmType")Integer parmType,@Param("tenantId")String tenantId,@Param("year")Integer year);
+
+
+    List<SceneAlarm> getAlarmInfoForScene( @Param("tenantId")String tenantId);
+
+    SceneNormalRate getQualificationForScene(@Param("tenantId")String tenantId, @Param("parmType")Integer parmType );
 }

+ 25 - 8
sms_water/src/main/java/com/huaxu/dto/DeviceCheckAlarmDto.java

@@ -7,6 +7,8 @@ import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
 
 import javax.script.ScriptException;
+import java.math.BigDecimal;
+import java.math.RoundingMode;
 import java.util.Date;
 
 /**
@@ -59,14 +61,29 @@ public class DeviceCheckAlarmDto {
         return false;
     }
 
+    // 识别符号 >、≥、<、≤、=、≠
+    //  A.报警规则为(≥、>、≤、<):【设备名称】+【报警字段】+【字段数值】+【单位】+【报警规则】+【报警字段】+【设定数值】+【单位】
+    //  B.报警规则为(=):【设备名称】+【报警字段】
+    //  C.报警规则为(≠):【设备名称】+【报警字段】 + 不等于 + 【字段数值】 + 【单位】
+    //  D.状态类型报警详情规则:【设备名称】+【状态】+【报警规则】+【数值】+单位
     public String getAlarminfo(Double receivedValue){
-      return  new StringBuilder().append(this.deviceName)
-                .append(this.attributeName)
-                .append(receivedValue)
-                .append(StringUtils.isNotBlank(this.unit)?this.unit:"")
-                .append(this.alarmCondition)
-                .append(this.attributeName)
-                .append(this.alarmValue)
-                .append(StringUtils.isNotBlank(this.unit)?this.unit:"").toString();
+        if(this.alarmCondition.equals("=")){
+            return  new StringBuilder().append(this.deviceName)
+                    .append(this.attributeName).toString();
+        }else if(this.alarmCondition.equals("≠")){
+            return  new StringBuilder().append(this.deviceName)
+                    .append(this.attributeName)
+                    .append(this.alarmCondition)
+                    .append(this.alarmValue)
+                    .append(StringUtils.isNotBlank(this.unit)?this.unit:"").toString();
+        }else{
+          return  new StringBuilder().append(this.deviceName)
+                    .append(this.attributeName)
+                    .append(new BigDecimal(receivedValue).setScale(2, RoundingMode.UP))
+                    .append(StringUtils.isNotBlank(this.unit)?this.unit:"")
+                    .append(this.alarmCondition)
+                    .append(this.alarmValue)
+                    .append(StringUtils.isNotBlank(this.unit)?this.unit:"").toString();
+        }
     }
 }

+ 73 - 0
sms_water/src/main/java/com/huaxu/dto/generalView/DeviceWaterAmount.java

@@ -0,0 +1,73 @@
+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 2020/12/31 16:44
+ */
+@Data
+@Api("供水/原水数据详情")
+public class DeviceWaterAmount implements Serializable {
+
+    private static final long serialVersionUID = 1140562129268115741L;
+
+    @ApiModelProperty("供水瞬时流量")
+    private BigDecimal waterSupplyAmountForNow;
+    @ApiModelProperty("本日供水量")
+    private BigDecimal waterSupplyAmountForDay;
+    @ApiModelProperty("本月供水量")
+    private BigDecimal waterSupplyAmountForMonth;
+    @ApiModelProperty("本年供水量")
+    private BigDecimal waterSupplyAmountForYear;
+
+    @ApiModelProperty("原水瞬时流量")
+    private BigDecimal waterIntakeAmountForNow;
+    @ApiModelProperty("本日原水量")
+    private BigDecimal waterIntakeAmountForDay;
+    @ApiModelProperty("本月原水量")
+    private BigDecimal waterIntakeAmountForMonth;
+    @ApiModelProperty("本年原水量")
+    private BigDecimal waterIntakeAmountForYear;
+
+    //3供水
+    public void addWaterSupplyAmountForNow(BigDecimal amount){
+        if(this.waterSupplyAmountForNow == null){
+            this.waterSupplyAmountForNow = amount;
+        }else{
+            this.waterSupplyAmountForNow = this.waterSupplyAmountForNow.add(amount);
+        }
+    }
+    //4取水
+    public void addWaterIntakeAmountForNow(BigDecimal amount){
+        if(this.waterIntakeAmountForNow == null){
+            this.waterIntakeAmountForNow = amount;
+        }else{
+            this.waterIntakeAmountForNow = this.waterIntakeAmountForNow.add(amount);
+        }
+    }
+
+
+    //3供水
+    public void addWaterSupplyAmountForDay(BigDecimal amount){
+        if(this.waterSupplyAmountForDay == null){
+            this.waterSupplyAmountForDay = amount;
+        }else{
+            this.waterSupplyAmountForDay = this.waterSupplyAmountForDay.add(amount);
+        }
+    }
+    //4取水
+    public void addWaterIntakeAmountForDay(BigDecimal amount){
+        if(this.waterIntakeAmountForDay == null){
+            this.waterIntakeAmountForDay = amount;
+        }else{
+            this.waterIntakeAmountForDay= this.waterIntakeAmountForDay.add(amount);
+        }
+    }
+}

+ 36 - 0
sms_water/src/main/java/com/huaxu/dto/generalView/DeviceWaterDetail.java

@@ -0,0 +1,36 @@
+package com.huaxu.dto.generalView;
+
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.huaxu.util.jsonSerializer.BigDecimalJsonSerializer;
+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 2020/12/31 15:15
+ */
+@Data
+@Api("用水详情")
+public class DeviceWaterDetail implements Serializable {
+
+
+    private static final long serialVersionUID = -5775222943150675973L;
+    @ApiModelProperty("场景名称")
+    private String sceneName;
+    @ApiModelProperty("设备id")
+    private Integer deviceId;
+    @ApiModelProperty("属性id")
+    private Integer attributeId ;
+    @ApiModelProperty("标记")
+    private Integer parmType;
+    @ApiModelProperty("值")
+    @JsonSerialize(using = BigDecimalJsonSerializer.class)
+    private BigDecimal amount;
+    @ApiModelProperty("最后抄表数据")
+    private BigDecimal latestValue;
+}

+ 38 - 0
sms_water/src/main/java/com/huaxu/dto/generalView/DeviceWaterSupply.java

@@ -0,0 +1,38 @@
+package com.huaxu.dto.generalView;
+
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.huaxu.util.jsonSerializer.BigDecimalJsonSerializer;
+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;
+
+/**
+ * @description 供水
+ * @auto wangli
+ * @data 2020/12/31 14:05
+ */
+@Data
+@Api("供水")
+public class DeviceWaterSupply implements Serializable {
+    private static final long serialVersionUID = 3472349298203388378L;
+
+    @ApiModelProperty("序号")
+    private Integer orderNo;
+    @ApiModelProperty("年")
+    private Integer year;
+    @ApiModelProperty("月")
+    private Integer month;
+    @ApiModelProperty("日")
+    private Integer day;
+    @ApiModelProperty("量")
+    @JsonSerialize(using = BigDecimalJsonSerializer.class)
+    private BigDecimal amount;
+    @ApiModelProperty("日期")
+    private LocalDate date;
+
+
+}

+ 24 - 0
sms_water/src/main/java/com/huaxu/dto/generalView/SceneAlarm.java

@@ -0,0 +1,24 @@
+package com.huaxu.dto.generalView;
+
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * @description
+ * @auto wangli
+ * @data 2021/1/5 8:56
+ */
+@Data
+@Api("场景报警数量统计")
+public class SceneAlarm implements Serializable {
+
+    private static final long serialVersionUID = 6317955806482958669L;
+
+    @ApiModelProperty("场景名称")
+    private String sceneName;
+    @ApiModelProperty("报警数量")
+    private Integer alarmNumber;
+}

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

@@ -0,0 +1,27 @@
+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/5 14:42
+ */
+@Data
+@Api("水质合格率")
+public class SceneNormalRate implements Serializable {
+    private static final long serialVersionUID = 5157922585449879952L;
+
+    @ApiModelProperty("异常数量")
+    private Integer abnormal;
+    @ApiModelProperty("正常数量")
+    private Integer normal;
+    @ApiModelProperty("合格率")
+    private BigDecimal normalRate;
+
+}

+ 22 - 0
sms_water/src/main/java/com/huaxu/dto/generalView/SceneWaterAmount.java

@@ -0,0 +1,22 @@
+package com.huaxu.dto.generalView;
+
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+/**
+ * @description
+ * @auto wangli
+ * @data 2021/1/6 8:02
+ */
+@Data
+@Api("场景水量")
+public class SceneWaterAmount {
+
+    @ApiModelProperty("场景名称")
+    private String sceneName;
+    @ApiModelProperty("水量")
+    private BigDecimal waterAmount;
+}

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

@@ -30,4 +30,6 @@ public interface MonitorDataReportService {
     List<DeviceEntity> getDeviceBySceneTypeName(String sceneTypeName);
 
     List<MonitorDataChartReportDeviceDto> MonitorDataDeviceReport(Integer type,List<Long>  deviceIds, Integer searchType,Integer year,Integer month ,Integer day);
+
+    void MonitorDataGeneralView();
 }

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

@@ -4,18 +4,27 @@ import com.huaxu.dao.MonitorDataReportMapper;
 import com.huaxu.dto.MonitorDataChartReportAttributeDto;
 import com.huaxu.dto.MonitorDataChartReportDeviceDto;
 import com.huaxu.dto.MonitorDataChartReportValueDto;
+import com.huaxu.dto.generalView.*;
 import com.huaxu.entity.DeviceEntity;
+import com.huaxu.entity.MonitorDataEntity;
+import com.huaxu.entity.MonitorDataValueEntity;
 import com.huaxu.model.LoginUser;
 import com.huaxu.service.MonitorDataReportService;
+import com.huaxu.service.MonitorDataService;
+import com.huaxu.util.ByteArrayUtils;
+import com.huaxu.util.RedisUtil;
 import com.huaxu.util.UserUtil;
 import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
+import java.math.BigDecimal;
 import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.time.temporal.TemporalAdjusters;
 import java.util.*;
+import java.util.stream.Collectors;
 
 /**
  * @description
@@ -28,6 +37,9 @@ public class MonitorDataReportServiceImpl implements MonitorDataReportService {
     @Resource
     private MonitorDataReportMapper monitorDataReportMapper;
 
+    @Autowired
+    private RedisUtil redisUtil;
+
     @Override
     public List<MonitorDataChartReportDeviceDto> MonitorDataChartReportByDay(Long sceneId,Integer year,Integer month ,Integer day) {
         LoginUser loginUser = UserUtil.getCurrentUser();
@@ -55,6 +67,103 @@ public class MonitorDataReportServiceImpl implements MonitorDataReportService {
         return monitorDataChartReportDeviceDtos;
     }
 
+    @Override
+    public List<MonitorDataChartReportDeviceDto> DeviceAlarmReport(Integer type,List<Long>  sceneIds,Integer year,Integer month ,Integer day) {
+        LoginUser loginUser = UserUtil.getCurrentUser();
+        LocalDate beginDate;
+        LocalDate endDate;
+        String dateType ;
+        if(type != null && type ==1){
+            beginDate=LocalDate.of(year,1,1);
+            endDate=beginDate.plusYears(1);
+            dateType="month";
+        }else
+        if(type != null && type ==2){
+            beginDate=LocalDate.of(year,month,1);
+            endDate=beginDate.plusMonths(1);
+            dateType="day";
+        }else
+        if(type != null && type ==3){
+            beginDate=LocalDate.of(year,month,day);
+            endDate=beginDate.plusDays(1);
+            dateType="hour";
+        }else{
+            return new ArrayList<>();
+        }
+        List<MonitorDataChartReportDeviceDto> monitorDataChartReportDeviceDtos = monitorDataReportMapper.DeviceAlarmReport(dateType,sceneIds,beginDate,endDate,
+                loginUser.getTenantId(),loginUser.getType(),loginUser.getPermissonType(),loginUser.getProgramItemList());
+
+        FillLoseData(monitorDataChartReportDeviceDtos,type,year,month,day);
+        return monitorDataChartReportDeviceDtos;
+    }
+
+    @Override
+    public List<MonitorDataChartReportDeviceDto> MonitorDataQualityReport(Integer type,List<Long>  sceneIds,Integer year,Integer month ,Integer day) {
+        LoginUser loginUser = UserUtil.getCurrentUser();
+
+        List<MonitorDataChartReportDeviceDto> monitorDataChartReportDeviceDtos = null;
+        if(type != null && type == 3){
+            monitorDataChartReportDeviceDtos = monitorDataReportMapper.MonitorDataQualityReportByDay(sceneIds,year,month,day,
+                    loginUser.getTenantId(),loginUser.getType(),loginUser.getPermissonType(),loginUser.getProgramItemList());
+        } else if(type != null && type == 2){
+            monitorDataChartReportDeviceDtos = monitorDataReportMapper.MonitorDataQualityReportByMonth(sceneIds,year,month,
+                    loginUser.getTenantId(),loginUser.getType(),loginUser.getPermissonType(),loginUser.getProgramItemList());
+        } else if(type != null && type == 1){
+            monitorDataChartReportDeviceDtos = monitorDataReportMapper.MonitorDataQualityReportByYear(sceneIds,year,
+                    loginUser.getTenantId(),loginUser.getType(),loginUser.getPermissonType(),loginUser.getProgramItemList());
+        }
+        if(monitorDataChartReportDeviceDtos != null){
+            FillLoseData(monitorDataChartReportDeviceDtos,type,year,month,day);
+        }
+
+        return monitorDataChartReportDeviceDtos;
+    }
+
+    @Override
+    public List<MonitorDataChartReportDeviceDto> MonitorDataEnergyReport(Integer type,List<Long> sceneIds,Integer year,Integer month ,Integer day) {
+        LoginUser loginUser = UserUtil.getCurrentUser();
+        List<MonitorDataChartReportDeviceDto> monitorDataChartReportDeviceDtos = null;
+        if(type != null && type == 3){
+            monitorDataChartReportDeviceDtos = monitorDataReportMapper.MonitorDataEnergyReportByDay(sceneIds,year,month,day,
+                   loginUser.getTenantId(),loginUser.getType(),loginUser.getPermissonType(),loginUser.getProgramItemList());
+       } else if(type != null && type == 2){
+            monitorDataChartReportDeviceDtos = monitorDataReportMapper.MonitorDataEnergyReportByMonth(sceneIds,year,month,
+                   loginUser.getTenantId(),loginUser.getType(),loginUser.getPermissonType(),loginUser.getProgramItemList());
+       } else if(type != null && type == 1){
+           monitorDataChartReportDeviceDtos = monitorDataReportMapper.MonitorDataEnergyReportByYear(sceneIds,year,
+                   loginUser.getTenantId(),loginUser.getType(),loginUser.getPermissonType(),loginUser.getProgramItemList());
+       }
+        if(monitorDataChartReportDeviceDtos != null){
+            FillLoseData(monitorDataChartReportDeviceDtos,type,year,month,day);
+        }
+        return monitorDataChartReportDeviceDtos;
+    }
+    @Override
+    public List<DeviceEntity> getDeviceBySceneTypeName(String sceneTypeName){
+        LoginUser loginUser = UserUtil.getCurrentUser();
+        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){
+
+        LoginUser loginUser = UserUtil.getCurrentUser();
+        List<MonitorDataChartReportDeviceDto> monitorDataChartReportDeviceDtos = null;
+        if(type != null && type == 3){
+            monitorDataChartReportDeviceDtos = monitorDataReportMapper.MonitorDataDeviceReportByDay(deviceIds,searchType,year,month,day,
+                    loginUser.getTenantId(),loginUser.getType(),loginUser.getPermissonType(),loginUser.getProgramItemList());
+        } else if(type != null && type == 2){
+            monitorDataChartReportDeviceDtos = monitorDataReportMapper.MonitorDataDeviceReportByMonth(deviceIds,searchType,year,month,
+                    loginUser.getTenantId(),loginUser.getType(),loginUser.getPermissonType(),loginUser.getProgramItemList());
+        } else if(type != null && type == 1){
+            monitorDataChartReportDeviceDtos = monitorDataReportMapper.MonitorDataDeviceReportByYear(deviceIds,searchType,year,
+                    loginUser.getTenantId(),loginUser.getType(),loginUser.getPermissonType(),loginUser.getProgramItemList());
+        }
+        if(monitorDataChartReportDeviceDtos != null){
+            FillLoseData(monitorDataChartReportDeviceDtos,type,year,month,day);
+        }
+        return monitorDataChartReportDeviceDtos;
+    }
+
     /**
      * 补充数据里日期时间缺失的
      */
@@ -142,101 +251,153 @@ public class MonitorDataReportServiceImpl implements MonitorDataReportService {
     }
 
 
+
     @Override
-    public List<MonitorDataChartReportDeviceDto> DeviceAlarmReport(Integer type,List<Long>  sceneIds,Integer year,Integer month ,Integer day) {
+    public void MonitorDataGeneralView(){
         LoginUser loginUser = UserUtil.getCurrentUser();
-        LocalDate beginDate;
-        LocalDate endDate;
-        String dateType ;
-        if(type != null && type ==1){
-            beginDate=LocalDate.of(year,1,1);
-            endDate=beginDate.plusYears(1);
-            dateType="month";
-        }else
-        if(type != null && type ==2){
-            beginDate=LocalDate.of(year,month,1);
-            endDate=beginDate.plusMonths(1);
-            dateType="day";
-        }else
-        if(type != null && type ==3){
-            beginDate=LocalDate.of(year,month,day);
-            endDate=beginDate.plusDays(1);
-            dateType="hour";
-        }else{
-            return new ArrayList<>();
+        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());
+            }
         }
-        List<MonitorDataChartReportDeviceDto> monitorDataChartReportDeviceDtos = monitorDataReportMapper.DeviceAlarmReport(dateType,sceneIds,beginDate,endDate,
-                loginUser.getTenantId(),loginUser.getType(),loginUser.getPermissonType(),loginUser.getProgramItemList());
-        FillLoseData(monitorDataChartReportDeviceDtos,type,year,month,day);
-        return monitorDataChartReportDeviceDtos;
-    }
+        //将获取到 实时数据转换为map,方便匹配数据deviceId
+        Map<Integer ,MonitorDataEntity> MonitorDataMap = monitorDataEntities.stream().collect(Collectors.toMap( MonitorDataEntity::getDeviceId ,a -> a,(k1, k2)->k1));
 
-    @Override
-    public List<MonitorDataChartReportDeviceDto> MonitorDataQualityReport(Integer type,List<Long>  sceneIds,Integer year,Integer month ,Integer day) {
-        LoginUser loginUser = UserUtil.getCurrentUser();
 
-        List<MonitorDataChartReportDeviceDto> monitorDataChartReportDeviceDtos = null;
-        if(type != null && type == 3){
-            monitorDataChartReportDeviceDtos = monitorDataReportMapper.MonitorDataQualityReportByDay(sceneIds,year,month,day,
-                    loginUser.getTenantId(),loginUser.getType(),loginUser.getPermissonType(),loginUser.getProgramItemList());
-        } else if(type != null && type == 2){
-            monitorDataChartReportDeviceDtos = monitorDataReportMapper.MonitorDataQualityReportByMonth(sceneIds,year,month,
-                    loginUser.getTenantId(),loginUser.getType(),loginUser.getPermissonType(),loginUser.getProgramItemList());
-        } else if(type != null && type == 1){
-            monitorDataChartReportDeviceDtos = monitorDataReportMapper.MonitorDataQualityReportByYear(sceneIds,year,
-                    loginUser.getTenantId(),loginUser.getType(),loginUser.getPermissonType(),loginUser.getProgramItemList());
-        }
-        if(monitorDataChartReportDeviceDtos != null){
-            FillLoseData(monitorDataChartReportDeviceDtos,type,year,month,day);
+        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);
+            }
         }
 
-        return monitorDataChartReportDeviceDtos;
-    }
+        //供水详情数据(合计:瞬时、本天、本月、本年)
+        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()));
+                    }
+                }
+            }
 
-    @Override
-    public List<MonitorDataChartReportDeviceDto> MonitorDataEnergyReport(Integer type,List<Long> sceneIds,Integer year,Integer month ,Integer day) {
-        LoginUser loginUser = UserUtil.getCurrentUser();
-        List<MonitorDataChartReportDeviceDto> monitorDataChartReportDeviceDtos = null;
-        if(type != null && type == 3){
-            monitorDataChartReportDeviceDtos = monitorDataReportMapper.MonitorDataEnergyReportByDay(sceneIds,year,month,day,
-                   loginUser.getTenantId(),loginUser.getType(),loginUser.getPermissonType(),loginUser.getProgramItemList());
-       } else if(type != null && type == 2){
-            monitorDataChartReportDeviceDtos = monitorDataReportMapper.MonitorDataEnergyReportByMonth(sceneIds,year,month,
-                   loginUser.getTenantId(),loginUser.getType(),loginUser.getPermissonType(),loginUser.getProgramItemList());
-       } else if(type != null && type == 1){
-           monitorDataChartReportDeviceDtos = monitorDataReportMapper.MonitorDataEnergyReportByYear(sceneIds,year,
-                   loginUser.getTenantId(),loginUser.getType(),loginUser.getPermissonType(),loginUser.getProgramItemList());
-       }
-        if(monitorDataChartReportDeviceDtos != null){
-            FillLoseData(monitorDataChartReportDeviceDtos,type,year,month,day);
         }
-        return monitorDataChartReportDeviceDtos;
-    }
+        //水源获取实时流量并计算出当天流量
+        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()));
+                    }
+                }
+            }
+        }
 
-    public List<DeviceEntity> getDeviceBySceneTypeName(String sceneTypeName){
-        LoginUser loginUser = UserUtil.getCurrentUser();
-        return monitorDataReportMapper.getDeviceBySceneTypeName(sceneTypeName,loginUser.getTenantId(),loginUser.getType(),loginUser.getPermissonType(),loginUser.getProgramItemList());
-    }
+        //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());
 
-    public List<MonitorDataChartReportDeviceDto> MonitorDataDeviceReport(Integer type,List<Long>  deviceIds, Integer searchType,Integer year,Integer month ,Integer day){
+        //水厂获取实时流量并计算出当天流量
+        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()));
+                    }
+                }
+            }
 
-        LoginUser loginUser = UserUtil.getCurrentUser();
-        List<MonitorDataChartReportDeviceDto> monitorDataChartReportDeviceDtos = null;
-        if(type != null && type == 3){
-            monitorDataChartReportDeviceDtos = monitorDataReportMapper.MonitorDataDeviceReportByDay(deviceIds,searchType,year,month,day,
-                    loginUser.getTenantId(),loginUser.getType(),loginUser.getPermissonType(),loginUser.getProgramItemList());
-        } else if(type != null && type == 2){
-            monitorDataChartReportDeviceDtos = monitorDataReportMapper.MonitorDataDeviceReportByMonth(deviceIds,searchType,year,month,
-                    loginUser.getTenantId(),loginUser.getType(),loginUser.getPermissonType(),loginUser.getProgramItemList());
-        } else if(type != null && type == 1){
-            monitorDataChartReportDeviceDtos = monitorDataReportMapper.MonitorDataDeviceReportByYear(deviceIds,searchType,year,
-                    loginUser.getTenantId(),loginUser.getType(),loginUser.getPermissonType(),loginUser.getProgramItemList());
         }
-        if(monitorDataChartReportDeviceDtos != null){
-            FillLoseData(monitorDataChartReportDeviceDtos,type,year,month,day);
+        //水源获取实时流量并计算出当天流量
+        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()));
+                    }
+                }
+            }
         }
-        return monitorDataChartReportDeviceDtos;
+
+        BigDecimal waterSupplyAmountForMonth = monitorDataReportMapper.getDeviceWaterDetailForMonth("水厂",3,tenantId,localDate.getYear(),localDate.getMonthValue());
+        BigDecimal waterSupplyAmountForYear = monitorDataReportMapper.getDeviceWaterDetailForYear("水厂",3,tenantId,localDate.getYear());
+        //水厂当月流量
+        deviceWaterAmount.setWaterSupplyAmountForMonth(waterSupplyAmountForMonth.add(deviceWaterAmount.getWaterSupplyAmountForDay()));
+        //水厂当年流量
+        deviceWaterAmount.setWaterSupplyAmountForYear(waterSupplyAmountForYear.add(deviceWaterAmount.getWaterSupplyAmountForMonth()));
+
+
+        BigDecimal waterIntakeAmountForMonth = monitorDataReportMapper.getDeviceWaterDetailForMonth("水源",4,tenantId,localDate.getYear(),localDate.getMonthValue());
+        BigDecimal waterIntakeAmountForYear = monitorDataReportMapper.getDeviceWaterDetailForYear("水源",4,tenantId,localDate.getYear());
+        //水源当月流量
+        deviceWaterAmount.setWaterIntakeAmountForMonth(waterIntakeAmountForMonth.add(deviceWaterAmount.getWaterIntakeAmountForDay()));
+        //水源当年流量
+        deviceWaterAmount.setWaterIntakeAmountForYear(waterIntakeAmountForYear.add(deviceWaterAmount.getWaterIntakeAmountForMonth()));
+
+
+
+        //实时报警信息
+        List<SceneAlarm> sceneAlarms = monitorDataReportMapper.getAlarmInfoForScene(tenantId);
+
+        //管网水质(水质 -1、8PH、10浊度、11余氯)
+        //水质
+        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);
+
+
+        //压力分布
+
+        //今日水厂制水量排行
+
+
+
+        //水厂制水、药耗、电耗对比曲线
+
     }
 
 
+
 }

+ 0 - 83
sms_water/src/main/java/com/huaxu/service/impl/MonitorDataServiceImpl.java

@@ -219,93 +219,10 @@ public class MonitorDataServiceImpl implements MonitorDataService , Initializing
     }
 
 
-    public static void main(String[] args) {
-        List<tt> l1 =new ArrayList<>(10000);
-       for(Integer i=0 ;i<10000; i++){
-           if(i % 10 ==0){
-               l1.add(null);
-           }else{
-                l1.add(new tt(i.toString(),"a"+i.toString(),""));
-           }
 
-       }
 
-        List<tt> l2 =new ArrayList<>(10000);
 
-        for(Integer i=0 ;i<10000; i++){
-            l2.add(new tt(i.toString(),"","c"+i.toString()));
-        }
-
-        LocalDateTime dateTime =LocalDateTime.now();
-
-//        l1.removeAll(Collections.singleton(null));
-//System.out.println(l1.size());
-//        l1.removeIf(Objects::isNull);
-//
-
-        Map<String ,tt> map =l2.stream().collect(Collectors.toMap(tt::getA, a -> a,(k1, k2)->k1));
-
-        l1 = l1.stream().filter(Objects::nonNull)
-                .map(t -> {
-                    if(map.containsKey(t.getA())&&map.get(t.getA()).getC() != null){
-                        t.setC(map.get(t.getA()).getC());
-                    }
-                    return t;
-                })
-                .collect(Collectors.toList());
-//        for(tt t:l1){
-//            if(map.containsKey(t.getA())&&map.get(t.getA()).getC() != null){
-//                t.setC(map.get(t.getA()).getC());
-//            }
-//        }
-//        List<tt> l=l1.stream().map(la ->
-//                     l2.stream()
-//                            .filter( lb ->  la.getA().equals(lb.getA()))
-//                            .map(lb -> {
-//                                 la.setC(lb.getC());
-//                                 return la;
-//                            }).collect(Collectors.toList())
-//        ).flatMap(List::stream).collect(Collectors.toList());
-
-//        List<tt> l = l1.stream()
-//                .map(map -> l2.stream()
-//                        .filter(m -> Objects.equals(m.getA(), map.getA()))
-//                        .findFirst().map(m -> {
-//                            map.setC(m.getC());
-//                            return map;
-//                        }).orElse(null))
-//                .filter(Objects::nonNull).collect(Collectors.toList());
-
-        LocalDateTime dateTime2 =LocalDateTime.now();
-        Duration duration =Duration.between(dateTime,dateTime2);
-        System.out.println(duration.toMillis());
-        System.out.println(l1.size());
-        System.out.println(l1.get(l1.size()-1).toString());
 
 
 
-
-
-    }
-
-}
-@Data
-class tt{
-    private String a;
-    private String b;
-    private String c;
-    public tt(String a,String b,String c){
-        this.a=a;
-        this.b=b;
-        this.c=c;
-    }
-
-    @Override
-    public String toString() {
-        return "tt{" +
-                "a='" + a + '\'' +
-                ", b='" + b + '\'' +
-                ", c='" + c + '\'' +
-                '}';
-    }
 }

+ 26 - 0
sms_water/src/main/java/com/huaxu/util/jsonSerializer/BigDecimalJsonSerializer.java

@@ -0,0 +1,26 @@
+package com.huaxu.util.jsonSerializer;
+
+import com.fasterxml.jackson.core.JsonGenerator;
+import com.fasterxml.jackson.databind.JsonSerializer;
+import com.fasterxml.jackson.databind.SerializerProvider;
+
+import java.io.IOException;
+import java.math.BigDecimal;
+import java.text.DecimalFormat;
+
+/**
+ * @description BigDecimal保留三位小数
+ * @auto wangli
+ * @data 2020/12/31 14:17
+ */
+public class BigDecimalJsonSerializer extends JsonSerializer<BigDecimal> {
+
+    private DecimalFormat df = new DecimalFormat("0.000");
+
+    @Override
+    public void serialize(BigDecimal bigDecimal, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
+        if(bigDecimal != null){
+            jsonGenerator.writeString(df.format(bigDecimal));
+        }
+    }
+}

+ 24 - 0
sms_water/src/main/java/com/huaxu/util/jsonSerializer/DoubleJsonSerializer.java

@@ -0,0 +1,24 @@
+package com.huaxu.util.jsonSerializer;
+
+import com.fasterxml.jackson.core.JsonGenerator;
+import com.fasterxml.jackson.databind.JsonSerializer;
+import com.fasterxml.jackson.databind.SerializerProvider;
+
+import java.io.IOException;
+import java.text.DecimalFormat;
+
+/**
+ * @description Double保留三位小数
+ * @auto wangli
+ * @data 2020/12/31 14:17
+ */
+public class DoubleJsonSerializer extends JsonSerializer<Double> {
+
+    private DecimalFormat df = new DecimalFormat("0.000");
+    @Override
+    public void serialize(Double aDouble, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
+        if(aDouble != null) {
+            jsonGenerator.writeString(df.format(aDouble));
+        }
+    }
+}

+ 128 - 15
sms_water/src/main/resources/mapper/MonitorDataReportMapper.xml

@@ -42,7 +42,7 @@
         LEFT JOIN sms_device_attribute da ON da.id = r.ATTRIBUTE_ID
         LEFT JOIN sms_device d ON d.id = r.DEVICE_ID
         left join sms_scene s on s.id=p.PARENT_SCENE_ID
-        where p.IS_CHART = 1 and p.`STATUS`= 1 and d.ENABLE_STATE = 1
+        where p.IS_CHART = 1 and p.`STATUS`= 1 and d.ENABLE_STATE = 1  and d.`STATUS`= 1
             and p.PARENT_SCENE_ID=#{sceneId}
             and r.year=#{year}
             and r.month=#{month}
@@ -96,7 +96,7 @@
         LEFT JOIN sms_device_attribute da ON da.id = r.ATTRIBUTE_ID
         LEFT JOIN sms_device d ON d.id = r.DEVICE_ID
         left join sms_scene s on s.id=p.PARENT_SCENE_ID
-        where p.IS_CHART = 1 and p.`STATUS`= 1 and d.ENABLE_STATE = 1
+        where p.IS_CHART = 1 and p.`STATUS`= 1 and d.ENABLE_STATE = 1  and d.`STATUS`= 1
         and p.PARENT_SCENE_ID=#{sceneId}
         and r.year=#{year}
         and r.month=#{month}
@@ -148,7 +148,7 @@
         LEFT JOIN sms_device_attribute da ON da.id = r.ATTRIBUTE_ID
         LEFT JOIN sms_device d ON d.id = r.DEVICE_ID
         left join sms_scene s on s.id=p.PARENT_SCENE_ID
-        where p.IS_CHART = 1 and p.`STATUS`= 1 and d.ENABLE_STATE = 1
+        where p.IS_CHART = 1 and p.`STATUS`= 1 and d.ENABLE_STATE = 1  and d.`STATUS`= 1
         and p.PARENT_SCENE_ID=#{sceneId}
         and r.year=#{year}
         <if test="tenantId != null and tenantId != '' ">
@@ -201,7 +201,7 @@
         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
+        WHERE p.`STATUS`= 1 and p.parm_type in (3,5) 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
@@ -257,7 +257,7 @@
         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
+        WHERE p.`STATUS`= 1 and p.parm_type in (3,5) 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
@@ -313,7 +313,7 @@
         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
+        WHERE p.`STATUS`= 1 and p.parm_type in (3,5) 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
@@ -371,7 +371,7 @@
         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 (7,11,9) and d.ENABLE_STATE = 1
+        WHERE p.`STATUS`= 1 and p.parm_type in (7,11,9) 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
@@ -427,7 +427,7 @@
         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 (7,11,9) and d.ENABLE_STATE = 1
+        WHERE p.`STATUS`= 1 and p.parm_type in (7,11,9) 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
@@ -484,7 +484,7 @@
         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 (7,11,9)
-        AND r.YEAR = #{year} and d.ENABLE_STATE = 1
+        AND r.YEAR = #{year} and d.ENABLE_STATE = 1  and d.`STATUS`= 1
         <if test="sceneIds != null and sceneIds.size()>0">
             and p.PARENT_SCENE_ID in
             <foreach collection="sceneIds" item="item" open="(" close=")" separator=",">
@@ -550,7 +550,7 @@
             from sms_alarm_details ad
             left join sms_device d on ad.DEVICE_ID=d.ID
 
-            where ad.ALARM_START_TIME &lt; #{endDate} and ad.ALARM_START_TIME >= #{beginDate} and d.ENABLE_STATE = 1
+            where ad.ALARM_START_TIME &lt; #{endDate} and ad.ALARM_START_TIME >= #{beginDate} and d.ENABLE_STATE = 1  and d.`STATUS`= 1
             <if test="sceneIds != null and sceneIds.size()>0">
                 and ad.parent_scene_id  in
                 <foreach collection="sceneIds" item="item" open="(" close=")" separator=",">
@@ -600,7 +600,7 @@
     left join sms_scene s on s.SCENE_TYPE_ID =st.id
     left join sms_device_scene ds on ds.SCENE_ID=s.ID
     left join sms_device d on d.id=ds.DEVICE_ID
-    where st.SCENE_TYPE_NAME=#{sceneTypeName}
+    where st.SCENE_TYPE_NAME=#{sceneTypeName} and d.`STATUS`= 1 and  d.ENABLE_STATE = 1
     <if test="tenantId != null and tenantId != '' ">
         and d.tenant_id = #{tenantId}
     </if>
@@ -655,7 +655,7 @@
         LEFT JOIN sms_day_report r ON p.DEVICE_ID = r.DEVICE_ID AND p.ATTRIBUTE_ID = r.ATTRIBUTE_ID
         left join sms_device_attribute  da ON da.id = p.ATTRIBUTE_ID
         LEFT JOIN sms_device d ON d.id = p.DEVICE_ID
-        WHERE p.`STATUS`= 1   and d.ENABLE_STATE = 1
+        WHERE p.`STATUS`= 1   and d.ENABLE_STATE = 1  and d.`STATUS`= 1
         AND r.YEAR = #{year}  and r.month=#{month}  and r.day=#{day}
         <if test="searchType != null and searchType == 1">
             and p.parm_type = 13
@@ -702,7 +702,7 @@
                 and (d.DEPT_ORG_ID is null or d.DEPT_ORG_ID =0)
             </if>
         </if>
-        GROUP BY d.id, p.parm_type,da.unit,r.HOUR
+        GROUP BY d.DEVICE_NAME, p.parm_type,da.unit,r.HOUR
         order by r.`hour` asc
     </select>
     <select id="MonitorDataDeviceReportByMonth" resultMap="MonitorDataChartReportMap">
@@ -772,7 +772,7 @@
                 and (d.DEPT_ORG_ID is null or d.DEPT_ORG_ID =0)
             </if>
         </if>
-        GROUP BY d.id, p.parm_type,r.day
+        GROUP BY d.DEVICE_NAME, p.parm_type,da.unit,r.day
         order by r.day asc
     </select>
     <select id="MonitorDataDeviceReportByYear" resultMap="MonitorDataChartReportMap">
@@ -842,8 +842,121 @@
                 and (d.DEPT_ORG_ID is null or d.DEPT_ORG_ID =0)
             </if>
         </if>
-        GROUP BY d.id, p.parm_type,r.month
+        GROUP BY d.DEVICE_NAME, p.parm_type,da.unit,r.month
         order by r.`month` asc
     </select>
 
+
+    <!-- 概览页 -->
+    <select id="selectDeviceCode" resultType="java.lang.String">
+        select DEVICE_CODE from sms_device  where STATUS =1 and ENABLE_STATE =1  and TENANT_ID=#{tenantId}
+    </select>
+
+    <select id="getDeviceWaterFor30Day" resultType="com.huaxu.dto.generalView.DeviceWaterSupply">
+         select
+              r.year,r.month,r.day,
+            sum(r.SUM_VALUE) as "amount"
+        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_day_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 dp.PARM_TYPE = 3   and dp.TENANT_ID=#{tenantId}
+        and r.COLLECT_DATE >= DATE_SUB(CURDATE(),INTERVAL 30 day)
+        group by r.year,r.month,r.day
+        order by r.year desc,r.month desc,r.day desc
+    </select>
+
+    <select id="getDeviceWaterDetailForNow" resultType="com.huaxu.dto.generalView.DeviceWaterDetail">
+        select
+             dp.DEVICE_ID as "deviceId"
+            ,dp.ATTRIBUTE_ID as "attributeId"
+            ,dp.PARM_TYPE as "parmType"
+        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
+        where  dp.`STATUS`=1 and st.SCENE_TYPE_NAME = #{sceneTypeName}
+        and dp.PARM_TYPE =#{parmType}   and dp.TENANT_ID=#{tenantId}
+    </select>
+    <select id="getDeviceWaterDetailForDay" resultType="com.huaxu.dto.generalView.DeviceWaterDetail">
+        select
+             s.SCENE_NAME as "sceneName"
+            ,dp.DEVICE_ID as "deviceId"
+            ,dp.ATTRIBUTE_ID as "attributeId"
+            ,dp.PARM_TYPE as "parmType"
+            ,max(ifnull(r.LATEST_VALUE,0))  as "latestValue"
+            ,sum(ifnull(r.SUM_VALUE,0)) as "amount"
+        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}
+        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
+    </select>
+    <select id="getDeviceWaterDetailForMonth" resultType="java.math.BigDecimal">
+        select
+            sum(ifnull(r.SUM_VALUE,0)) as "amount"
+        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_month_report r on r.DEVICE_ID= dp.DEVICE_ID and r.ATTRIBUTE_ID = dp.ATTRIBUTE_ID and r.year = #{year} and r.month= #{month}
+        where  dp.`STATUS`=1 and st.SCENE_TYPE_NAME = #{sceneTypeName}
+        and dp.PARM_TYPE =#{parmType}   and dp.TENANT_ID=#{tenantId}
+        group by dp.DEVICE_ID ,dp.ATTRIBUTE_ID,dp.PARM_TYPE
+    </select>
+    <select id="getDeviceWaterDetailForYear" resultType="java.math.BigDecimal">
+        select
+            sum(ifnull(r.SUM_VALUE,0)) as "amount"
+        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_year_report r on r.DEVICE_ID= dp.DEVICE_ID and r.ATTRIBUTE_ID = dp.ATTRIBUTE_ID and r.year = #{year}
+        where  dp.`STATUS`=1 and st.SCENE_TYPE_NAME = #{sceneTypeName}
+        and dp.PARM_TYPE =#{parmType}   and dp.TENANT_ID=#{tenantId}
+        group by dp.DEVICE_ID ,dp.ATTRIBUTE_ID,dp.PARM_TYPE
+
+    </select>
+
+    <select id="getAlarmInfoForScene" resultType="com.huaxu.dto.generalView.SceneAlarm">
+        select
+			s.SCENE_NAME as "sceneName",count(ad.id) as "alarmNumber"
+        from sms_scene_type st
+        left join sms_scene s on s.SCENE_TYPE_ID =st.id and s.PARENT_SCENE_ID = 0
+        left join sms_alarm_details ad on ad.STATE = 1 and ad.PARENT_SCENE_ID=s.id
+        where s.`STATUS` = 1 and (st.SCENE_TYPE_NAME = '水厂' or st.SCENE_TYPE_NAME ='水源') and s.TENANT_ID=#{tenantId}
+        group by s.SCENE_NAME
+        having count(ad.id) >0
+
+    </select>
+
+    <select id="getQualificationForScene" resultType="com.huaxu.dto.generalView.SceneNormalRate">
+        select
+            sum(if(alarmNumber > 0 ,1,0)) as  "abnormal",
+            sum(if(alarmNumber > 0 ,0,1)) as  "normal",
+            ROUND(sum(if(alarmNumber > 0 ,0,1))/if(count(1) != 0, count(1),1) * 100,2) as "normalRate"
+        from (
+            select
+                        s.SCENE_NAME as "sceneName",count(ad.id) as "alarmNumber"
+            from sms_scene_type st
+            left join sms_scene s on s.SCENE_TYPE_ID =st.id and PARENT_SCENE_ID ='0'
+            left join sms_device_parm dp on dp.PARENT_SCENE_ID =s.ID
+
+            left join sms_alarm_details ad on ad.STATE = 1 and ad.SCENE_ID=dp.SCENE_ID and ad.DEVICE_ID =dp.DEVICE_ID and ad.ATTRIBUTE_ID =dp.ATTRIBUTE_ID
+
+            where s.`STATUS`=1 and st.SCENE_TYPE_NAME = '水厂' and s.TENANT_ID =#{tenantId}
+            <if test="parmType != null and  parmType == -1">
+                and dp.PARM_TYPE in (15,7,9,11,18,19)
+            </if>
+            <if test="parmType != null and  parmType != -1">
+                and dp.PARM_TYPE = #{parmType}
+            </if>
+
+            group by s.SCENE_NAME
+        ) a
+
+    </select>
+
+
 </mapper>

+ 6 - 12
sms_water/src/main/resources/mapper/TestDataMapper.xml

@@ -5,10 +5,6 @@
     <select id="selectDeviceInfo" resultType="com.huaxu.entity.DayReportEntity">
         select
             d.TENANT_ID as "tenantId"
-            ,ps.id as "parentSceneId"
-            ,ps.SCENE_NAME as "parentSceneName"
-            ,s.id as "sceneId"
-            ,s.SCENE_NAME as "sceneName"
             ,d.id as "deviceId"
             ,d.DEVICE_NAME as "deviceName"
             ,d.DEVICE_CODE as "deviceCode"
@@ -17,14 +13,12 @@
         from sms_device d
         left join sms_device_type dt on dt.id=d.DEVICE_TYPE_ID
         left join sms_device_attribute da on da.DEVICE_TYPE_ID =dt.id
-        left join sms_scene s on d.SCENE_ID=s.id
-        left join sms_scene ps on s.PARENT_SCENE_IDS like concat( '%,',ps.id,',%' )and ps.PARENT_SCENE_ID ='0'
         where d.ID=#{id}
     </select>
 
     <insert id="batchInsertYearReport">
-        INSERT INTO `sms`.`sms_year_report`( `TENANT_ID`, `PARENT_SCENE_ID`, `PARENT_SCENE_NAME`, `SCENE_ID`, `SCENE_NAME`, `DEVICE_ID`, `DEVICE_NAME`, `DEVICE_CODE`, `ATTRIBUTE_ID`, `ATTRIBUTE_NAME`, `YEAR`, `MONTH`, `MIN_VALUE`, `MAX_VALUE`, `AVG_VALUE`, `SUM_VALUE`, `LATEST_VALUE`, `COLLECT_DATE`)
-        select TENANT_ID, PARENT_SCENE_ID, PARENT_SCENE_NAME, SCENE_ID, SCENE_NAME, DEVICE_ID, DEVICE_NAME, DEVICE_CODE, ATTRIBUTE_ID, ATTRIBUTE_NAME,  YEAR, MONTH
+        INSERT INTO `sms`.`sms_year_report`( `TENANT_ID`, `DEVICE_ID`, `DEVICE_NAME`, `DEVICE_CODE`, `ATTRIBUTE_ID`, `ATTRIBUTE_NAME`, `YEAR`, `MONTH`, `MIN_VALUE`, `MAX_VALUE`, `AVG_VALUE`, `SUM_VALUE`, `LATEST_VALUE`, `COLLECT_DATE`)
+        select TENANT_ID,  DEVICE_ID, DEVICE_NAME, DEVICE_CODE, ATTRIBUTE_ID, ATTRIBUTE_NAME,  YEAR, MONTH
             ,min(MIN_VALUE) MIN_VALUE
             ,max(MAX_VALUE) MAX_VALUE
             ,avg(AVG_VALUE) AVG_VALUE
@@ -33,13 +27,13 @@
             ,max(COLLECT_DATE) COLLECT_DATE
         from sms_month_report a
         where year =#{year} and DEVICE_ID=#{id}
-        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
+        group by TENANT_ID,  DEVICE_ID, DEVICE_NAME, DEVICE_CODE, ATTRIBUTE_ID, ATTRIBUTE_NAME,  YEAR, MONTH
     </insert>
 
     <insert id="batchInsertMonthReport">
-        INSERT INTO `sms`.`sms_month_report`( `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`, `MIN_VALUE`, `MAX_VALUE`, `AVG_VALUE`, `SUM_VALUE`, `LATEST_VALUE`, `COLLECT_DATE`)
+        INSERT INTO `sms`.`sms_month_report`( `TENANT_ID`, `DEVICE_ID`, `DEVICE_NAME`, `DEVICE_CODE`, `ATTRIBUTE_ID`, `ATTRIBUTE_NAME`, `YEAR`, `MONTH`, `DAY`, `MIN_VALUE`, `MAX_VALUE`, `AVG_VALUE`, `SUM_VALUE`, `LATEST_VALUE`, `COLLECT_DATE`)
 
-        select 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
+        select TENANT_ID,  DEVICE_ID, DEVICE_NAME, DEVICE_CODE, ATTRIBUTE_ID, ATTRIBUTE_NAME,  YEAR, MONTH, DAY
             ,min(MIN_VALUE) MIN_VALUE
             ,max(MAX_VALUE) MAX_VALUE
             ,avg(AVG_VALUE) AVG_VALUE
@@ -48,7 +42,7 @@
             ,max(COLLECT_DATE) COLLECT_DATE
         from sms_day_report a
         where year = #{year} and month =#{month} and DEVICE_ID=#{id}
-        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>