Преглед на файлове

Merge remote-tracking branch 'origin/20210223' into 20210223

wangbo преди 4 години
родител
ревизия
a7e16c90a6
променени са 18 файла, в които са добавени 367 реда и са изтрити 107 реда
  1. 6 2
      sms_water/src/main/java/com/huaxu/config/RabbitConfig.java
  2. 24 22
      sms_water/src/main/java/com/huaxu/controller/ComDisplayController.java
  3. 1 0
      sms_water/src/main/java/com/huaxu/dao/HomePageReportMapper.java
  4. 2 0
      sms_water/src/main/java/com/huaxu/dao/OnlineMonitorMapper.java
  5. 0 4
      sms_water/src/main/java/com/huaxu/dto/generalView/WaterSupplyChart.java
  6. 0 3
      sms_water/src/main/java/com/huaxu/dto/generalView/WaterSupplyData.java
  7. 2 1
      sms_water/src/main/java/com/huaxu/dto/homePage/WaterQualityRate.java
  8. 66 8
      sms_water/src/main/java/com/huaxu/service/ComdisplayMapLocationService.java
  9. 2 0
      sms_water/src/main/java/com/huaxu/service/MonitorDataReportService.java
  10. 5 0
      sms_water/src/main/java/com/huaxu/service/OnlineMonitorService.java
  11. 9 8
      sms_water/src/main/java/com/huaxu/service/impl/HomePageReportServiceImpl.java
  12. 101 23
      sms_water/src/main/java/com/huaxu/service/impl/MonitorDataReportServiceImpl.java
  13. 41 11
      sms_water/src/main/java/com/huaxu/service/impl/OnlineMonitorImpl.java
  14. 12 6
      sms_water/src/main/java/com/huaxu/service/impl/TestDataServiceImpl.java
  15. 26 0
      sms_water/src/main/java/com/huaxu/util/jsonSerializer/BigDecimalJsonSerializerTwo.java
  16. 22 17
      sms_water/src/main/resources/mapper/HomePageReportMapper.xml
  17. 9 2
      sms_water/src/main/resources/mapper/MonitorDataReportMapper.xml
  18. 39 0
      sms_water/src/main/resources/mapper/OnlineMonitorMapper.xml

+ 6 - 2
sms_water/src/main/java/com/huaxu/config/RabbitConfig.java

@@ -180,9 +180,13 @@ public class RabbitConfig {
     public SimpleRabbitListenerContainerFactory ReceiveDatarabbitListenerContainerFactory() {
         SimpleRabbitListenerContainerFactory factory = new SimpleRabbitListenerContainerFactory();
         factory.setConnectionFactory(ReceiveDataconnectionFactory());
-//        factory.setConcurrentConsumers(3);
-//        factory.setMaxConcurrentConsumers(10);
+        //最小的并发消费者的数量
+        factory.setConcurrentConsumers(1);
+        //设置最大的并发的消费者数量
+        factory.setMaxConcurrentConsumers(10);
+
         factory.setPrefetchCount(dataPrefetch);
+
         factory.setAcknowledgeMode(dataAcknowledgeMode);//设置确认模式手工确认
         return factory;
     }

+ 24 - 22
sms_water/src/main/java/com/huaxu/controller/ComDisplayController.java

@@ -49,13 +49,13 @@ public class ComDisplayController {
     private OrgInfoUtil orgInfoUtil;
 
     @RequestMapping(value = "waterSupplyCharts", method = RequestMethod.GET)
-    @ApiOperation(value = "制水电耗对比曲线图")
+    @ApiOperation(value = "综合展示--制水电耗对比曲线图(总分)")
     public AjaxMessage<List<WaterSupplyChart>> waterSupplyCharts(@RequestParam(required = false) Integer companyOrgId) {
         return new AjaxMessage<>(ResultStatus.OK, monitorDataReportService.waterSupplyChartsByMonth("水厂", companyOrgId));
     }
 
     @RequestMapping(value = "yieldPowerUsage", method = RequestMethod.GET)
-    @ApiOperation(value = "吨水电耗")
+    @ApiOperation(value = "综合展示--吨水电耗(总分)")
     public AjaxMessage<ComUsageDto> yieldPowerUsage(@RequestParam(required = false) Long companyOrgId) {
         ComUsageDto sceneUsageDto = new ComUsageDto();
         //查询公司下的场景
@@ -117,46 +117,47 @@ public class ComDisplayController {
                 }
             }
         }
-        //对数据进行单位转换 按万进行统计
-        sceneUsageDto.setYieldWaterUsage(sceneUsageDto.getYieldWaterUsage()!=null? (double) Math.round(sceneUsageDto.getYieldWaterUsage()/(float)100)/100:0);
-        sceneUsageDto.setPowerUsage(sceneUsageDto.getPowerUsage()!=null? (double) Math.round(sceneUsageDto.getPowerUsage()/(float)100)/100:0);
+
         if (sceneUsageDto.getPowerUsage() != null && sceneUsageDto.getYieldWaterUsage() != null && sceneUsageDto.getPowerUsage() != 0) {
-            sceneUsageDto.setYieldPowerUsage((double) Math.round((sceneUsageDto.getYieldWaterUsage() / sceneUsageDto.getPowerUsage()) * 100) / 100);
+            sceneUsageDto.setYieldPowerUsage((double) Math.round((sceneUsageDto.getPowerUsage() / sceneUsageDto.getYieldWaterUsage()) * 100) / 100);
         } else {
             sceneUsageDto.setYieldPowerUsage(0d);
         }
+        //对数据进行单位转换 按万进行统计
+        sceneUsageDto.setYieldWaterUsage(sceneUsageDto.getYieldWaterUsage()!=null? (double) Math.round(sceneUsageDto.getYieldWaterUsage()/(float)100)/100:0);
         return new AjaxMessage<>(ResultStatus.OK, sceneUsageDto);
     }
+    @RequestMapping(value="selectMapForWholeCompany" , method = RequestMethod.GET)
+    @ApiOperation(value = "二供供水排行--总公司")
+    public AjaxMessage<List<SecDataCollectDto>> selectMapForWholeCompany() {
+        List<SecDataCollectDto> result = comdisplayMapLocationService.selectMapForWholeCompanyByMonth();
+        for (SecDataCollectDto item : result) {
+            item.setYieldWaterUsage(item.getYieldWaterUsage() != null ? (double) Math.round(item.getYieldWaterUsage() / (float) 100) / 100 : null);
+        }
+        return new AjaxMessage<>(ResultStatus.OK, result);
+    }
     @RequestMapping(value="selectMapForCompany" , method = RequestMethod.GET)
     @ApiOperation(value = "二供供水排行--分公司")
     public AjaxMessage<List<MonitorDataCollectDto>> selectMapForCompany(@RequestParam(required = true) Integer companyOrgId) {
         MonitorDataCollectDto monitorDataCollectDto = new MonitorDataCollectDto();
         monitorDataCollectDto.setSceneTypeName("泵站");
         monitorDataCollectDto.setSceneIds(sceneService.findByParentIdsByCom(Long.valueOf(companyOrgId)));
-        List<MonitorDataCollectDto> result = onlineMonitorService.selectMapSuspension(monitorDataCollectDto);
+        List<MonitorDataCollectDto> result = onlineMonitorService.selectMapSuspensionForMonth(monitorDataCollectDto);
         for (MonitorDataCollectDto item : result) {
-            item.setIntakeWaterUsage(item.getIntakeWaterUsage() != null ? (double) Math.round(item.getIntakeWaterUsage() / (float) 100) / 100 : null);
+            item.setYieldWaterUsage(item.getYieldWaterUsage() != null ? (double) Math.round(item.getYieldWaterUsage() / (float) 100) / 100 : null);
         }
         return new AjaxMessage<>(ResultStatus.OK, result);
     }
-    @RequestMapping(value="selectMapForWholeCompany" , method = RequestMethod.GET)
-    @ApiOperation(value = "二供供水排行--总公司")
-    public AjaxMessage<List<SecDataCollectDto>> selectMapForWholeCompany() {
-        MonitorDataCollectDto monitorDataCollectDto = new MonitorDataCollectDto();
-        monitorDataCollectDto.setSceneTypeName("泵站");
-        monitorDataCollectDto.setSceneIds(sceneService.findByParentIdsByCom(null));
-        List<SecDataCollectDto> result = onlineMonitorService.selectMapForWholeCompany(monitorDataCollectDto);
-        return new AjaxMessage<>(ResultStatus.OK, result);
-    }
+
     @RequestMapping(value="selectMapDataForCompany" , method = RequestMethod.GET)
-    @ApiOperation(value = "地图详细信息展示")
+    @ApiOperation(value = "综合展示--地图详细信息展示")
     public AjaxMessage<List<ComdisplayInfoDto>> selectMapDataForCompany() {
         List<ComdisplayInfoDto> receFee = comdisplayMapLocationService.selectMapDataForCompany();
         for (ComdisplayInfoDto item : receFee) {
             item.setCompanyOrgName(orgInfoUtil.getOrgName(item.getCompanyOrgId()));
             Double waterUsage = item.getWaterUsage() != null ? item.getWaterUsage() : 0d;//售水量
             //查询子公司的取水量、制水量 产销差(制水量-售水量)/制水量  X 100%
-            ComdisplayInfoDto comdisplayInfoDto= comdisplayMapLocationService.selectMapDataForCompany(Long.valueOf(item.getCompanyOrgId()));
+            ComdisplayInfoDto comdisplayInfoDto= comdisplayMapLocationService.selectMapDataForCompany(Long.valueOf(item.getCompanyOrgId()),null);
             if(comdisplayInfoDto!=null)
             {
                 item.setIntakeWaterUsage(comdisplayInfoDto.getIntakeWaterUsage() != null ? (double) Math.round(comdisplayInfoDto.getIntakeWaterUsage() / (float) 100) / 100 : 0);
@@ -171,14 +172,15 @@ public class ComDisplayController {
     }
 
     @RequestMapping(value="selectMapDataForSingleCompany" , method = RequestMethod.GET)
-    @ApiOperation(value = "地图详细信息展示-按子公司查询")
+    @ApiOperation(value = "综合展示--地图详细信息展示(按子公司查询)")
     public AjaxMessage<ComdisplayInfoDto> selectMapDataForSinggleCompany(@RequestParam(required = true) Integer companyOrgId) {
         List<ComdisplayInfoDto> receFee = comdisplayMapLocationService.selectMapDataForSingleCompany(companyOrgId);
         if (receFee.size() > 0) {
             receFee.get(0).setCompanyOrgName(orgInfoUtil.getOrgName(receFee.get(0).getCompanyOrgId()));
             Double waterUsage = receFee.get(0).getWaterUsage() != null ? receFee.get(0).getWaterUsage() : 0d;//售水量
             //查询子公司的取水量、制水量 产销差(制水量-售水量)/制水量  X 100%
-            ComdisplayInfoDto comdisplayInfoDto = comdisplayMapLocationService.selectMapDataForCompany(Long.valueOf(receFee.get(0).getCompanyOrgId()));
+            ComdisplayInfoDto comdisplayInfoDto = comdisplayMapLocationService.selectMapDataForCompany(Long.valueOf(receFee.get(0).getCompanyOrgId()),null);
+
             if (comdisplayInfoDto != null) {
                 receFee.get(0).setIntakeWaterUsage(comdisplayInfoDto.getIntakeWaterUsage() != null ? (double) Math.round(comdisplayInfoDto.getIntakeWaterUsage() / (float) 100) / 100 : 0);
                 receFee.get(0).setYieldWaterUsage(comdisplayInfoDto.getYieldWaterUsage() != null ? (double) Math.round(comdisplayInfoDto.getYieldWaterUsage() / (float) 100) / 100 : 0);
@@ -204,7 +206,7 @@ public class ComDisplayController {
     @RequestMapping(value="selectDeviceMapParam" , method = RequestMethod.GET)
     @ApiOperation(value = "查询设备地图参数数据")
     public AjaxMessage<List<MonitorDataCollectDto>> selectDeviceMapParam(
-            @ApiParam(value = "一级场景id", required = true) @RequestParam Long deviceId){
+            @ApiParam(value = "设备id", required = true) @RequestParam Long deviceId){
         MonitorDataCollectDto monitorDataCollectDto=new MonitorDataCollectDto();
         monitorDataCollectDto.setDeviceId(deviceId);
         monitorDataCollectDto.setFlag(1);

+ 1 - 0
sms_water/src/main/java/com/huaxu/dao/HomePageReportMapper.java

@@ -44,6 +44,7 @@ public interface HomePageReportMapper {
                                              @Param("programItems")List<ProgramItem> programItems);
 
     WaterQualityRate getWaterQualification(@Param("companyOrgId")Integer companyOrgId,@Param("sceneType")String sceneType,
+                                            @Param("parmTypes")List<Integer> parmTypes,
                                              @Param("tenantId")String tenantId, @Param("userType")String userType,
                                              @Param("permissonType")Integer permissonType,
                                              @Param("programItems")List<ProgramItem> programItems);

+ 2 - 0
sms_water/src/main/java/com/huaxu/dao/OnlineMonitorMapper.java

@@ -55,6 +55,8 @@ public interface OnlineMonitorMapper {
      * @return
      */
     List<MonitorDataCollectDto> selectSceneParam(MonitorDataCollectDto monitorDataCollectDto);
+
+    List<MonitorDataCollectDto> selectSceneParamForLastMonth(MonitorDataCollectDto monitorDataCollectDto);
     /**
      * 按管网名称分类查询设备数量
      * @return

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

@@ -10,10 +10,6 @@ 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.Date;
-import java.util.List;
 
 /**
  * @description

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

@@ -7,9 +7,6 @@ import lombok.Data;
 
 import java.io.Serializable;
 import java.math.BigDecimal;
-import java.util.ArrayList;
-import java.util.Comparator;
-import java.util.List;
 
 /**
  * @description

+ 2 - 1
sms_water/src/main/java/com/huaxu/dto/homePage/WaterQualityRate.java

@@ -2,6 +2,7 @@ package com.huaxu.dto.homePage;
 
 import com.fasterxml.jackson.databind.annotation.JsonSerialize;
 import com.huaxu.util.jsonSerializer.BigDecimalJsonSerializer;
+import com.huaxu.util.jsonSerializer.BigDecimalJsonSerializerTwo;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
@@ -20,7 +21,7 @@ public class WaterQualityRate {
     @ApiModelProperty("异常数量")
     private Integer abnormal;
     @ApiModelProperty("综合(平均)水质")
-    @JsonSerialize(using = BigDecimalJsonSerializer.class)
+    @JsonSerialize(using = BigDecimalJsonSerializerTwo.class)
     private BigDecimal averageQuality;
     @ApiModelProperty("水源水质")
     @JsonSerialize(using = BigDecimalJsonSerializer.class)

+ 66 - 8
sms_water/src/main/java/com/huaxu/service/ComdisplayMapLocationService.java

@@ -2,16 +2,17 @@ package com.huaxu.service;
 
 
 import com.huaxu.dao.ComdisplayMapLocationMapper;
-import com.huaxu.dto.ComdisplayInfoDto;
-import com.huaxu.dto.DeviceDto;
-import com.huaxu.dto.SceneDeviceAttributeDto;
-import com.huaxu.dto.SceneUsageDto;
+import com.huaxu.dao.MonitorDataReportMapper;
+import com.huaxu.dao.OnlineMonitorMapper;
+import com.huaxu.dto.*;
+import com.huaxu.dto.generalView.WaterSupplyData;
 import com.huaxu.entity.ComdisplayMapLocationEntity;
 import com.huaxu.entity.MonitorDataEntity;
 import com.huaxu.entity.MonitorDataValueEntity;
 import com.huaxu.entity.SceneEntity;
 import com.huaxu.model.LoginUser;
 import com.huaxu.util.ByteArrayUtils;
+import com.huaxu.util.OrgInfoUtil;
 import com.huaxu.util.RedisUtil;
 import com.huaxu.util.UserUtil;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -46,6 +47,12 @@ public class ComdisplayMapLocationService extends ServiceImpl<ComdisplayMapLocat
     private MonitorInfoService monitorInfoService;
     @Autowired
     private RedisUtil redisUtil;
+    @Resource
+    private MonitorDataReportMapper monitorDataReportMapper;
+    @Autowired
+    private OrgInfoUtil orgInfoUtil;
+    @Resource
+    private OnlineMonitorMapper onlineMonitorMapper;
     /**
      * 查列表
      */
@@ -100,10 +107,14 @@ public class ComdisplayMapLocationService extends ServiceImpl<ComdisplayMapLocat
         return  comdisplayMapLocationMapper.selectMapDataForCompany(currentUser.getTenantId());
     }
     //按公司获取取水量和制水量
-    public ComdisplayInfoDto selectMapDataForCompany(Long companyOrgId) {
+    public ComdisplayInfoDto selectMapDataForCompany(Long companyOrgId,String typeName) {
         ComdisplayInfoDto sceneUsageDto = new ComdisplayInfoDto();
         sceneUsageDto.setCompanyOrgId(companyOrgId.intValue());
-        List<SceneEntity> sceneEntities = sceneService.selectByTypeNameForCom(new SceneEntity(), companyOrgId);
+        SceneEntity sceneEntity = new SceneEntity();
+        sceneEntity.setSceneTypeName(typeName);
+        List<SceneEntity> sceneEntities = sceneService.selectByTypeNameForCom(sceneEntity, companyOrgId);
+        LoginUser currentUser = UserUtil.getCurrentUser();
+        //查询当月数据
         for (SceneEntity itemScene : sceneEntities) {
             //查询场景下的所有设备信息
             List<DeviceDto> devices = new ArrayList<>();
@@ -113,14 +124,14 @@ public class ComdisplayMapLocationService extends ServiceImpl<ComdisplayMapLocat
                 continue;
             devices.addAll(deviceService.selectList(deviceDto));
             //取前一天
-            LocalDateTime dateTime = LocalDateTime.now().plusDays(-1);
+            LocalDateTime dateTime = LocalDateTime.now().plusMonths(-1);
             for (DeviceDto item : devices) {
                 //设备的几个参数值
                 SceneDeviceAttributeDto sceneDeviceAttributeDto = new SceneDeviceAttributeDto();
                 sceneDeviceAttributeDto.setDeviceId(item.getId());
                 sceneDeviceAttributeDto.setYear(dateTime.getYear());
                 sceneDeviceAttributeDto.setMonth(dateTime.getMonthValue());
-                sceneDeviceAttributeDto.setDay(dateTime.getDayOfMonth());
+               //sceneDeviceAttributeDto.setDay(dateTime.getDayOfMonth());
                 sceneDeviceAttributeDto.setSceneId(itemScene.getId());
                 List<SceneDeviceAttributeDto> sceneDeviceAttributeDtos = monitorInfoService.findAttributeList(sceneDeviceAttributeDto);
                 //取缓存里的数据
@@ -166,4 +177,51 @@ public class ComdisplayMapLocationService extends ServiceImpl<ComdisplayMapLocat
         LoginUser currentUser = UserUtil.getCurrentUser();
         return  comdisplayMapLocationMapper.selectMapDataForSingleCompany(currentUser.getTenantId(),companyOrgId);
     }
+
+    public List<SecDataCollectDto> selectMapForWholeCompanyByMonth() {
+        List<SecDataCollectDto> secDataCollectDtos = new ArrayList<>();
+        LoginUser loginUser = UserUtil.getCurrentUser();
+        MonitorDataCollectDto monitorDataCollectDto = new MonitorDataCollectDto();
+        monitorDataCollectDto.setSceneTypeName("泵站");
+        monitorDataCollectDto.setSceneIds(sceneService.findByParentIdsByCom(null));
+        monitorDataCollectDto.setTenantId(loginUser.getTenantId());
+        monitorDataCollectDto.setProgramItems(loginUser.getProgramItemList());
+        monitorDataCollectDto.setUserType(loginUser.getType());
+        //1是公司,2是公司及以下,3部门,4部门及以下,5自定义
+        monitorDataCollectDto.setPermissonType(loginUser.getPermissonType());
+        monitorDataCollectDto.setType(3);
+        List<MonitorDataCollectDto> result = onlineMonitorMapper.selectMapSuspension(monitorDataCollectDto);
+        Map<Long, SecDataCollectDto> map = new HashMap<>();
+        for (MonitorDataCollectDto monitorDataCollectDto1 : result) {
+            if (!map.containsKey(monitorDataCollectDto1.getCompanyOrgId())) {
+                ComdisplayInfoDto comdisplayInfoDto = selectMapDataForCompany(monitorDataCollectDto1.getCompanyOrgId(), "泵站");
+                if (comdisplayInfoDto != null) {
+                    SecDataCollectDto secDataCollectDto = new SecDataCollectDto();
+                    secDataCollectDto.setYieldWaterUsage(monitorDataCollectDto1.getYieldWaterUsage() != null ? (double) Math.round(monitorDataCollectDto1.getYieldWaterUsage() / (float) 100) / 100 : 0);
+                    secDataCollectDto.setCount(1);
+                    secDataCollectDto.setComName(orgInfoUtil.getOrgName(monitorDataCollectDto1.getCompanyOrgId().intValue()));
+                    map.put(monitorDataCollectDto1.getCompanyOrgId(), secDataCollectDto);
+                } else {
+                    int count = map.get(monitorDataCollectDto1.getCompanyOrgId()).getCount();
+                    map.get(monitorDataCollectDto1.getCompanyOrgId()).setCount(count + 1);
+                }
+            }
+        }
+        for (SecDataCollectDto value : map.values()) {
+            secDataCollectDtos.add(value);
+        }
+        //按水量倒序排序 如果是水源按照取水量排序,其他按照供水量
+        secDataCollectDtos.sort(new Comparator<SecDataCollectDto>() {
+            @Override
+            public int compare(SecDataCollectDto o1, SecDataCollectDto o2) {
+                Double d1 = (o1.getYieldWaterUsage() == null ? 0d : o1.getYieldWaterUsage());
+                Double d2 = (o2.getYieldWaterUsage() == null ? 0d : o2.getYieldWaterUsage());
+                if (d1 > d2) {
+                    return -1;
+                }
+                return 0;
+            }
+        });
+        return secDataCollectDtos;
+    }
 }

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

@@ -1,6 +1,8 @@
 package com.huaxu.service;
 
 import com.huaxu.dto.MonitorDataChartReportDeviceDto;
+import com.huaxu.dto.MonitorDataCollectDto;
+import com.huaxu.dto.SecDataCollectDto;
 import com.huaxu.dto.generalView.*;
 import com.huaxu.entity.DeviceEntity;
 import com.huaxu.entity.MonitorDataEntity;

+ 5 - 0
sms_water/src/main/java/com/huaxu/service/OnlineMonitorService.java

@@ -28,6 +28,11 @@ public interface OnlineMonitorService {
      * @return
      */
     List<MonitorDataCollectDto> selectMapSuspension(MonitorDataCollectDto monitorDataCollectDto);
+    /**
+     * 查询地图悬浮数据
+     * @return
+     */
+    List<MonitorDataCollectDto> selectMapSuspensionForMonth(MonitorDataCollectDto monitorDataCollectDto);
     /**
      * 查询地图参数数据
      * @return

+ 9 - 8
sms_water/src/main/java/com/huaxu/service/impl/HomePageReportServiceImpl.java

@@ -23,11 +23,9 @@ import java.math.BigDecimal;
 import java.time.LocalDate;
 import java.time.format.DateTimeFormatter;
 import java.time.temporal.TemporalAdjusters;
-import java.util.ArrayList;
-import java.util.Comparator;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 import java.util.stream.Collectors;
+import java.util.stream.Stream;
 
 /**
  * @description
@@ -178,14 +176,16 @@ public class HomePageReportServiceImpl implements HomePageReportService {
     public WaterQualityRate getWaterQualification(Integer companyOrgId) {
         LoginUser loginUser = UserUtil.getCurrentUser();
         WaterQualityRate waterQualityRate = new WaterQualityRate();
+        List<Integer> list1 = Stream.of(15, 7, 9, 11, 18, 19).collect(Collectors.toList()); //取水
+        List<Integer> list2 = Stream.of(15, 8, 10, 11, 18, 19).collect(Collectors.toList()); //供水
         //管网水质
         WaterQualityRate pipeNetworkQuality = homePageReportMapper.getPipeNetworkQualification(companyOrgId,loginUser.getTenantId(),loginUser.getType(),loginUser.getPermissonType(),loginUser.getProgramItemList());
         //水源水质
-        WaterQualityRate waterSourceQuality = homePageReportMapper.getWaterQualification(companyOrgId,"水源",loginUser.getTenantId(),loginUser.getType(),loginUser.getPermissonType(),loginUser.getProgramItemList());
+        WaterQualityRate waterSourceQuality = homePageReportMapper.getWaterQualification(companyOrgId,"水源",list1,loginUser.getTenantId(),loginUser.getType(),loginUser.getPermissonType(),loginUser.getProgramItemList());
         //水厂水质
-        WaterQualityRate waterFactoryQuality = homePageReportMapper.getWaterQualification(companyOrgId,"水厂",loginUser.getTenantId(),loginUser.getType(),loginUser.getPermissonType(),loginUser.getProgramItemList());
+        WaterQualityRate waterFactoryQuality = homePageReportMapper.getWaterQualification(companyOrgId,"水厂",list2,loginUser.getTenantId(),loginUser.getType(),loginUser.getPermissonType(),loginUser.getProgramItemList());
         //二供水质
-        WaterQualityRate pumpingStationQuality = homePageReportMapper.getWaterQualification(companyOrgId,"泵站",loginUser.getTenantId(),loginUser.getType(),loginUser.getPermissonType(),loginUser.getProgramItemList());
+        WaterQualityRate pumpingStationQuality = homePageReportMapper.getWaterQualification(companyOrgId,"泵站",list2,loginUser.getTenantId(),loginUser.getType(),loginUser.getPermissonType(),loginUser.getProgramItemList());
 
         if(pipeNetworkQuality != null){
             waterQualityRate.setAbnormal(waterQualityRate.getAbnormal()+pipeNetworkQuality.getAbnormal());
@@ -275,7 +275,7 @@ public class HomePageReportServiceImpl implements HomePageReportService {
         BigDecimal chlorine =  homePageReportMapper.getWaterQualificationByMonth(localDate,11,sceneId,"水源",
                 loginUser.getTenantId(),loginUser.getType(),loginUser.getPermissonType(),loginUser.getProgramItemList());
         //浊度
-        BigDecimal turbidity =  homePageReportMapper.getWaterQualificationByMonth(localDate,9,sceneId,"水源",
+        BigDecimal turbidity =  homePageReportMapper.getWaterQualificationByMonth(localDate,10,sceneId,"水源",
                 loginUser.getTenantId(),loginUser.getType(),loginUser.getPermissonType(),loginUser.getProgramItemList());
         //PH
         BigDecimal ph =  homePageReportMapper.getWaterQualificationByMonth(localDate,7,sceneId,"水源",
@@ -400,4 +400,5 @@ public class HomePageReportServiceImpl implements HomePageReportService {
 //        waterSupplyCharts.sort(Comparator.comparing(WaterSupplyChart::getSort).reversed());
         return waterSupplyCharts;
     }
+
 }

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

@@ -1,22 +1,24 @@
 package com.huaxu.service.impl;
 
 import com.huaxu.dao.MonitorDataReportMapper;
-import com.huaxu.dto.MonitorDataChartReportAttributeDto;
-import com.huaxu.dto.MonitorDataChartReportDeviceDto;
-import com.huaxu.dto.MonitorDataChartReportValueDto;
+import com.huaxu.dto.*;
 import com.huaxu.dto.generalView.*;
 import com.huaxu.entity.DeviceEntity;
 import com.huaxu.entity.MonitorDataEntity;
 import com.huaxu.entity.MonitorDataValueEntity;
+import com.huaxu.entity.SceneEntity;
+import com.huaxu.model.AjaxMessage;
 import com.huaxu.model.LoginUser;
-import com.huaxu.service.MonitorDataReportService;
-import com.huaxu.service.MonitorDataService;
+import com.huaxu.model.ResultStatus;
+import com.huaxu.service.*;
 import com.huaxu.util.ByteArrayUtils;
+import com.huaxu.util.OrgInfoUtil;
 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 org.springframework.web.bind.annotation.RequestParam;
 
 import javax.annotation.Resource;
 import javax.sound.midi.Receiver;
@@ -44,6 +46,15 @@ public class MonitorDataReportServiceImpl implements MonitorDataReportService {
 
     @Autowired
     private RedisUtil redisUtil;
+    @Autowired
+    private OrgInfoUtil orgInfoUtil;
+
+    @Autowired
+    private SceneService sceneService;
+    @Autowired
+    private MonitorInfoService monitorInfoService;
+    @Autowired
+    private DeviceService deviceService;
 
     @Override
     public List<MonitorDataChartReportDeviceDto> monitorDataChartReportByDay(Long sceneId, Integer year, Integer month , Integer day) {
@@ -924,14 +935,97 @@ public class MonitorDataReportServiceImpl implements MonitorDataReportService {
         return waterSupplyCharts;
     }
 
+    public ComUsageDto getYieldPowerUsage(Long companyOrgId) {
+        ComUsageDto sceneUsageDto = new ComUsageDto();
+        //查询公司下的场景
+        SceneEntity sceneEntity = new SceneEntity();
+        sceneEntity.setSceneTypeName("水厂");
+        List<SceneEntity> sceneEntities = sceneService.selectByTypeNameForCom(sceneEntity, companyOrgId);
+        for (SceneEntity itemScene : sceneEntities) {
+            //查询场景下的所有设备信息
+            List<DeviceDto> devices = new ArrayList<>();
+            DeviceDto deviceDto = new DeviceDto();
+            deviceDto.setSceneIds(sceneService.findByParentIdsLike(itemScene.getId()));
+            if (deviceDto.getSceneIds().size() == 0)
+                continue;
+            devices.addAll(deviceService.selectList(deviceDto));
+            //取前一天
+            LocalDateTime dateTime = LocalDateTime.now().plusDays(-1);
+            for (DeviceDto item : devices) {
+                //设备的几个参数值
+                SceneDeviceAttributeDto sceneDeviceAttributeDto = new SceneDeviceAttributeDto();
+                sceneDeviceAttributeDto.setDeviceId(item.getId());
+                sceneDeviceAttributeDto.setYear(dateTime.getYear());
+                sceneDeviceAttributeDto.setMonth(dateTime.getMonthValue());
+                sceneDeviceAttributeDto.setDay(dateTime.getDayOfMonth());
+                sceneDeviceAttributeDto.setSceneId(itemScene.getId());
+                List<SceneDeviceAttributeDto> sceneDeviceAttributeDtos = monitorInfoService.findAttributeList(sceneDeviceAttributeDto);
+                //取缓存里的数据
+                byte[] bytes = redisUtil.get(("sms_water_" + item.getDeviceCode()).getBytes());
+                if (bytes != null && bytes.length > 0) {
+                    MonitorDataEntity monitorDataEntity = (MonitorDataEntity) ByteArrayUtils.bytesToObject(bytes).get();
+                    //筛选该设备相同属性的值
+                    Map<Long, MonitorDataValueEntity> map = new HashMap<>();
+                    //将缓存中的实时数据放到map中方便进行遍历
+                    for (MonitorDataValueEntity dateValue : monitorDataEntity.getDataValues()) {
+                        map.put(dateValue.getAttributeId(), dateValue);
+                    }
+                    for (SceneDeviceAttributeDto itemAttribute : sceneDeviceAttributeDtos) {
+                        Double attributeDiffValue = 0d;
+                        if (!map.containsKey(itemAttribute.getAttributeId())) {
+                            continue;
+                        }
+                        if (map.get(itemAttribute.getAttributeId()).getDataValue() != null && itemAttribute.getLatestValue() != null) {
+                            attributeDiffValue = map.get(itemAttribute.getAttributeId()).getDataValue() - itemAttribute.getLatestValue();
+                        } else if (map.get(itemAttribute.getAttributeId()).getDataValue() != null && itemAttribute.getLatestValue() == null) {
+                            attributeDiffValue = map.get(itemAttribute.getAttributeId()).getDataValue();
+                        }
+                        switch (itemAttribute.getAttributeType()) {
+                            case "3":
+                                sceneUsageDto.setYieldWaterUsage(sceneUsageDto.getYieldWaterUsage() != null ? (double) Math.round((sceneUsageDto.getYieldWaterUsage() + attributeDiffValue) * 1000) / 1000 : (double) Math.round((attributeDiffValue) * 1000) / 1000);
+                                break;
+                            case "5":
+                                sceneUsageDto.setPowerUsage(sceneUsageDto.getPowerUsage() != null ? (double) Math.round((sceneUsageDto.getPowerUsage() + attributeDiffValue) * 1000) / 1000 : (double) Math.round((attributeDiffValue) * 1000) / 1000);
+                                break;
+                        }
+                    }
+                    if (sceneUsageDto.getYieldWaterUsage() == null)
+                        sceneUsageDto.setYieldWaterUsage(sceneUsageDto.getYieldWaterUsage());
+                    if (sceneUsageDto.getPowerUsage() == null)
+                        sceneUsageDto.setPowerUsage(sceneUsageDto.getPowerUsage());
+                }
+            }
+        }
+
+        if (sceneUsageDto.getPowerUsage() != null && sceneUsageDto.getYieldWaterUsage() != null && sceneUsageDto.getPowerUsage() != 0) {
+            sceneUsageDto.setYieldPowerUsage((double) Math.round((sceneUsageDto.getPowerUsage() / sceneUsageDto.getYieldWaterUsage()) * 100) / 100);
+        } else {
+            sceneUsageDto.setYieldPowerUsage(0d);
+        }
+        //对数据进行单位转换 按万进行统计
+        sceneUsageDto.setYieldWaterUsage(sceneUsageDto.getYieldWaterUsage() != null ? (double) Math.round(sceneUsageDto.getYieldWaterUsage() / (float) 100) / 100 : 0);
+        return sceneUsageDto;
+    }
+
     @Override
     public List<WaterSupplyChart> waterSupplyChartsByMonth(String sceneTypeName, Integer companyOrgId) {
         LoginUser loginUser = UserUtil.getCurrentUser();
         String tenantId = loginUser.getTenantId();
         List<WaterSupplyData> waterSupplyDatas = monitorDataReportMapper.getWaterSupplyDataByMonth(tenantId,companyOrgId,sceneTypeName,loginUser.getType(),loginUser.getPermissonType(),loginUser.getProgramItemList());
         List<WaterSupplyData> waterSupplyDatasForCurrentMonth = monitorDataReportMapper.getWaterSupplyDataByMonthForCurrentMonth(tenantId,companyOrgId,sceneTypeName,loginUser.getType(),loginUser.getPermissonType(),loginUser.getProgramItemList());
-        if(waterSupplyDatasForCurrentMonth.size()>0)
-        waterSupplyDatas.add(waterSupplyDatasForCurrentMonth.get(0));
+        if(waterSupplyDatasForCurrentMonth.size()>0) {
+            //获取当天数据
+            ComUsageDto comUsageDto = getYieldPowerUsage(companyOrgId!=null?Long.valueOf(companyOrgId):null);
+            if(comUsageDto!=null) {
+                for (WaterSupplyData item : waterSupplyDatasForCurrentMonth) {
+                    if (item.getParmType() == 3)
+                        item.setAmount(item.getAmount() != null ? item.getAmount().add(BigDecimal.valueOf(comUsageDto.getYieldWaterUsage())) : item.getAmount());
+                    if (item.getParmType() == 5)
+                        item.setAmount(item.getAmount() != null ? item.getAmount().add(BigDecimal.valueOf(comUsageDto.getPowerUsage())) : item.getAmount());
+                }
+            }
+            waterSupplyDatas.addAll(waterSupplyDatasForCurrentMonth);
+        }
         List<WaterSupplyChart> waterSupplyCharts = new ArrayList<>();
         waterSupplyDatas.stream()
                 .collect(Collectors.groupingBy(item -> item.getYear() + "-" + item.getMonth()))
@@ -1005,18 +1099,9 @@ public class MonitorDataReportServiceImpl implements MonitorDataReportService {
         }
         //将获取到 实时数据转换为map,方便匹配数据deviceId
         Map<Integer, MonitorDataEntity> MonitorDataMap =  monitorDataEntities.stream().collect(Collectors.toMap(MonitorDataEntity::getDeviceId, a -> a, (k1, k2) -> k1));
-
-
-
         LocalDate localDate = LocalDate.now();
-
-//        BigDecimal amountNow =BigDecimal.ZERO;
         BigDecimal amountDay =BigDecimal.ZERO;
-
-
-        //
         List<DeviceWaterDetail> deviceSupplyWaterDetailsForDay = monitorDataReportMapper.getDeviceWaterDetailForDay(companyOrgId,sceneId,sceneTypeName, parmType, tenantId, localDate.plusDays(-1).getYear(), localDate.plusDays(-1).getMonthValue(), localDate.plusDays(-1).getDayOfMonth(),loginUser.getType(),loginUser.getPermissonType(),loginUser.getProgramItemList());
-
         //获取实时数据并计算出当天数据
         for (DeviceWaterDetail deviceWaterDetail : deviceSupplyWaterDetailsForDay) {
             MonitorDataEntity monitorDataEntity = MonitorDataMap.get(deviceWaterDetail.getDeviceId());
@@ -1030,34 +1115,27 @@ public class MonitorDataReportServiceImpl implements MonitorDataReportService {
                 }
             }
         }
-
         if(searchType == null || searchType == 1){
             return amountDay;
         }
-
         BigDecimal amountMonth =BigDecimal.ZERO;
         //当月数据
         BigDecimal waterSupplyAmountForMonth = monitorDataReportMapper.getDeviceWaterDetailForMonth(companyOrgId,sceneId,sceneTypeName, parmType, tenantId, localDate.getYear(), localDate.getMonthValue(),loginUser.getType(),loginUser.getPermissonType(),loginUser.getProgramItemList());
         if (waterSupplyAmountForMonth != null) {
             amountMonth = waterSupplyAmountForMonth.add(amountDay);
         }
-
         if(searchType != null && searchType == 2){
             return amountMonth;
         }
-
         //当年数据
         BigDecimal amountYear =BigDecimal.ZERO;
         BigDecimal waterSupplyAmountForYear = monitorDataReportMapper.getDeviceWaterDetailForYear(companyOrgId,sceneId,sceneTypeName, parmType, tenantId, localDate.getYear(),loginUser.getType(),loginUser.getPermissonType(),loginUser.getProgramItemList());
         if (waterSupplyAmountForYear != null) {
             amountYear = waterSupplyAmountForYear.add(amountMonth);
         }
-
         if(searchType != null && searchType == 3){
             return amountYear;
         }
         return BigDecimal.ZERO;
     }
-
-
 }

+ 41 - 11
sms_water/src/main/java/com/huaxu/service/impl/OnlineMonitorImpl.java

@@ -75,8 +75,7 @@ public class OnlineMonitorImpl implements OnlineMonitorService {
      * @return
      */
     @Override
-    public List<MonitorDataCollectDto> selectMapSuspension(MonitorDataCollectDto monitorDataCollectDto)
-    {
+    public List<MonitorDataCollectDto> selectMapSuspension(MonitorDataCollectDto monitorDataCollectDto) {
         LoginUser loginUser = UserUtil.getCurrentUser();
         monitorDataCollectDto.setTenantId(loginUser.getTenantId());
         monitorDataCollectDto.setProgramItems(loginUser.getProgramItemList());
@@ -84,20 +83,51 @@ public class OnlineMonitorImpl implements OnlineMonitorService {
         //1是公司,2是公司及以下,3部门,4部门及以下,5自定义
         monitorDataCollectDto.setPermissonType(loginUser.getPermissonType());
         monitorDataCollectDto.setType(3);
-        List<MonitorDataCollectDto> result=onlineMonitorMapper.selectMapSuspension(monitorDataCollectDto);
-        if(!StringUtils.isEmpty(monitorDataCollectDto.getSceneTypeName()))
-        {
+        List<MonitorDataCollectDto> result = onlineMonitorMapper.selectMapSuspension(monitorDataCollectDto);
+        if (!StringUtils.isEmpty(monitorDataCollectDto.getSceneTypeName())) {
             monitorDataCollectDto.setType(1);
-            List<MonitorDataCollectDto> calculateRes=onlineMonitorMapper.selectSceneParam(monitorDataCollectDto);
-
-            GetCalMonitorData(result,calculateRes);
+            List<MonitorDataCollectDto> calculateRes = onlineMonitorMapper.selectSceneParam(monitorDataCollectDto);
+            GetCalMonitorData(result, calculateRes);
             //按水量倒序排序 如果是水源按照取水量排序,其他按照供水量
             result.sort(new Comparator<MonitorDataCollectDto>() {
                 @Override
                 public int compare(MonitorDataCollectDto o1, MonitorDataCollectDto o2) {
-                    Double d1= monitorDataCollectDto.getSceneTypeName().equals("水源")?(o1.getIntakeWaterUsage()==null?0d:o1.getIntakeWaterUsage()):(o1.getYieldWaterUsage()==null?0d:o1.getYieldWaterUsage());
-                    Double d2= monitorDataCollectDto.getSceneTypeName().equals("水源")?(o2.getIntakeWaterUsage()==null?0d:o2.getIntakeWaterUsage()):(o2.getYieldWaterUsage()==null?0d:o2.getYieldWaterUsage());
-                    if(d1>d2){
+                    Double d1 = monitorDataCollectDto.getSceneTypeName().equals("水源") ? (o1.getIntakeWaterUsage() == null ? 0d : o1.getIntakeWaterUsage()) : (o1.getYieldWaterUsage() == null ? 0d : o1.getYieldWaterUsage());
+                    Double d2 = monitorDataCollectDto.getSceneTypeName().equals("水源") ? (o2.getIntakeWaterUsage() == null ? 0d : o2.getIntakeWaterUsage()) : (o2.getYieldWaterUsage() == null ? 0d : o2.getYieldWaterUsage());
+                    if (d1 > d2) {
+                        return -1;
+                    }
+                    return 0;
+                }
+            });
+        }
+        return result;
+    }
+    /**
+     * 查询地图悬浮数据
+     * @return
+     */
+    @Override
+    public List<MonitorDataCollectDto> selectMapSuspensionForMonth(MonitorDataCollectDto monitorDataCollectDto) {
+        LoginUser loginUser = UserUtil.getCurrentUser();
+        monitorDataCollectDto.setTenantId(loginUser.getTenantId());
+        monitorDataCollectDto.setProgramItems(loginUser.getProgramItemList());
+        monitorDataCollectDto.setUserType(loginUser.getType());
+        //1是公司,2是公司及以下,3部门,4部门及以下,5自定义
+        monitorDataCollectDto.setPermissonType(loginUser.getPermissonType());
+        monitorDataCollectDto.setType(3);
+        List<MonitorDataCollectDto> result = onlineMonitorMapper.selectSceneParamForLastMonth(monitorDataCollectDto);
+        if (!StringUtils.isEmpty(monitorDataCollectDto.getSceneTypeName())) {
+            monitorDataCollectDto.setType(1);
+            List<MonitorDataCollectDto> calculateRes = onlineMonitorMapper.selectSceneParam(monitorDataCollectDto);
+            GetCalMonitorData(result, calculateRes);
+            //按水量倒序排序 如果是水源按照取水量排序,其他按照供水量
+            result.sort(new Comparator<MonitorDataCollectDto>() {
+                @Override
+                public int compare(MonitorDataCollectDto o1, MonitorDataCollectDto o2) {
+                    Double d1 = monitorDataCollectDto.getSceneTypeName().equals("水源") ? (o1.getIntakeWaterUsage() == null ? 0d : o1.getIntakeWaterUsage()) : (o1.getYieldWaterUsage() == null ? 0d : o1.getYieldWaterUsage());
+                    Double d2 = monitorDataCollectDto.getSceneTypeName().equals("水源") ? (o2.getIntakeWaterUsage() == null ? 0d : o2.getIntakeWaterUsage()) : (o2.getYieldWaterUsage() == null ? 0d : o2.getYieldWaterUsage());
+                    if (d1 > d2) {
                         return -1;
                     }
                     return 0;

+ 12 - 6
sms_water/src/main/java/com/huaxu/service/impl/TestDataServiceImpl.java

@@ -14,6 +14,7 @@ import java.time.*;
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
+import java.util.Random;
 
 /**
  * @description
@@ -54,8 +55,12 @@ public class TestDataServiceImpl implements TestDataService {
         LocalDateTime beginDateTime=beginDate.atStartOfDay();
         LocalDateTime endDateTime=endDate.atStartOfDay();
 
+        Random r = new Random();
+        Double j =0d;
         List<DayReportEntity> dayReportEntities =new ArrayList<>();
-        for(int i=0,j=10000; beginDateTime.isBefore(endDateTime);i++,j++){
+        for(int i=0; beginDateTime.isBefore(endDateTime);i++,j++){
+            Double value = r.nextDouble() * 120000;
+
             if(i==24){
                 i=0;
             }
@@ -79,11 +84,12 @@ public class TestDataServiceImpl implements TestDataService {
                 dayReport.setMonth(beginDateTime.getMonthValue());
                 dayReport.setDay(beginDateTime.getDayOfMonth());
                 dayReport.setHour(i);
-                dayReport.setMinValue(new Double(j));
-                dayReport.setMaxValue(j+1000.0);
-                dayReport.setAvgValue(j+500.0);
-                dayReport.setSumValue(1000d);
-                dayReport.setLatestValue(j+1000.0);
+                dayReport.setMinValue(j);
+                dayReport.setAvgValue(j+(value/2));
+                dayReport.setSumValue(value);
+                j+=value;
+                dayReport.setMaxValue(j);
+                dayReport.setLatestValue(j);
                 dayReport.setCollectDate(Date.from(beginDateTime.atZone(ZoneId.systemDefault()).toInstant()));
                 dayReportEntities.add(dayReport);
             }

+ 26 - 0
sms_water/src/main/java/com/huaxu/util/jsonSerializer/BigDecimalJsonSerializerTwo.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 BigDecimalJsonSerializerTwo extends JsonSerializer<BigDecimal> {
+
+    private DecimalFormat df = new DecimalFormat("0.00");
+
+    @Override
+    public void serialize(BigDecimal bigDecimal, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
+        if(bigDecimal != null){
+            jsonGenerator.writeString(df.format(bigDecimal));
+        }
+    }
+}

+ 22 - 17
sms_water/src/main/resources/mapper/HomePageReportMapper.xml

@@ -120,21 +120,22 @@
         (
             select
                 s.id as "sceneId"
-                ,d.id as "deviceId"
+                ,dp.DEVICE_ID as "deviceId"
                 ,count(ad.id) as  "alarmNumber"
-            from sms_scene_type st
-            left join sms_scene s on s.SCENE_TYPE_ID =st.ID
-            left join sms_device_scene ds on ds.PARENT_SCENE_ID = s.ID
-            left join sms_device d on d.id=ds.DEVICE_ID
-            left join sms_device_parm dp on dp.SCENE_ID =ds.SCENE_ID and dp.DEVICE_ID =ds.DEVICE_ID and dp.PARM_TYPE in (7,9,11)
-            left join sms_alarm_details ad on dp.SCENE_ID =ad.SCENE_ID and dp.DEVICE_ID =ad.DEVICE_ID and dp.ATTRIBUTE_ID =ad.ATTRIBUTE_ID
-            and ad.STATE = 1  and ad.`STATUS` =1
-            where st.`STATUS` = 1 and s.`STATUS` = 1 and ds.`STATUS` = 1 and d.`STATUS` = 1 and dp.`STATUS` = 1
-            and st.SCENE_TYPE_NAME ='管网'
+            from sms_scene_type pst
+            left join sms_scene ps on ps.SCENE_TYPE_ID =pst.ID
+            left join sms_scene s on s.PARENT_SCENE_ID =ps.ID
+            left join sms_scene_type st on s.SCENE_TYPE_ID =st.ID
+
+            left join sms_device_parm dp on dp.PARENT_SCENE_ID =ps.ID and dp.SCENE_ID =s.ID
+            left join sms_alarm_details ad on dp.SCENE_ID =ad.SCENE_ID and dp.DEVICE_ID =ad.DEVICE_ID and dp.attribute_id = ad.attribute_id
+            and ad.STATE = 1  and ad.`STATUS` =1 and ad.ALARM_TYPE = '参数报警'
+            where pst.`STATUS` = 1 and st.`STATUS` = 1 and ps.`STATUS` = 1 and s.`STATUS` = 1 and dp.`STATUS` = 1
+            and pst.SCENE_TYPE_NAME ='管网' and st.SCENE_TYPE_NAME ='水质'
             <if test="companyOrgId != null">
-            and s.COMPANY_ORG_ID = #{companyOrgId}
-        </if>
-            and s.TENANT_ID=#{tenantId}
+            and ps.COMPANY_ORG_ID = #{companyOrgId}
+            </if>
+            and ps.TENANT_ID=#{tenantId}
             <if test="userType!=null and userType!=-999 and userType!=-9999 and  programItems != null and programItems.size() > 0">
             <if test="permissonType == 5 or permissonType == 2">
                 and ( s.DEPT_ORG_ID in
@@ -163,7 +164,7 @@
             </if>
         </if>
 
-        group by s.id,d.id
+        group by s.id,dp.DEVICE_ID
         ) a
     </select>
 
@@ -173,8 +174,12 @@
         ROUND(sum(if(alarmNumber > 0 ,0,1))/if(count(1) != 0, count(1),1) * 100,2) as "averageQuality"
         from (
             select
-            s.SCENE_NAME as "sceneName"
-            ,sum( if(dp.PARM_TYPE IN ( 15,7, 8, 10, 11, 18, 19 ) and ad.id is not null,1,0) ) AS "alarmNumber"
+            s.id as "sceneId"
+            ,sum( if(dp.PARM_TYPE IN
+                <foreach collection="parmTypes" item="item" open="(" close=")" separator=",">
+                    #{item}
+                </foreach>
+                and ad.id is not null,1,0) ) 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
@@ -212,7 +217,7 @@
                     and (s.DEPT_ORG_ID is null or s.DEPT_ORG_ID =0)
                 </if>
             </if>
-            group by s.SCENE_NAME
+            group by s.id
         ) a
 
     </select>

+ 9 - 2
sms_water/src/main/resources/mapper/MonitorDataReportMapper.xml

@@ -1376,9 +1376,16 @@
         left join sms_device_parm dp on s.id=dp.PARENT_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 = #{sceneTypeName} and s.ENABLE_STATE = 1 and st.`STATUS`=1 and s.`STATUS`=1
+        where  dp.`STATUS`=1
+        <if test="sceneTypeName != null ">
+           and st.SCENE_TYPE_NAME = #{sceneTypeName}
+        </if>
+        <if test="sceneTypeName == null ">
+            and st.SCENE_TYPE_NAME in ('水源','水厂','泵站')
+        </if>
+        and s.ENABLE_STATE = 1 and st.`STATUS`=1 and s.`STATUS`=1
         and DATE_FORMAT(r.COLLECT_DATE,'%Y%m' ) = DATE_FORMAT(CURDATE( ) , '%Y%m' )
-        and dp.PARM_TYPE in (3,5)   and dp.TENANT_ID=#{tenantId}
+        and dp.PARM_TYPE in (3,4,5)   and dp.TENANT_ID=#{tenantId}
         <if test="companyOrgId != null ">and s.COMPANY_ORG_ID=#{companyOrgId}</if>
         <if test="userType!=null and userType!=-999 and userType!=-9999 and  programItems != null and programItems.size() > 0">
             <if test="permissonType == 5 or permissonType == 2">

+ 39 - 0
sms_water/src/main/resources/mapper/OnlineMonitorMapper.xml

@@ -361,6 +361,45 @@
         </if>
         order by t1.scene_name,t5.seq
     </select>
+    <!--查询场景对应参数数据-->
+    <select id="selectSceneParamForLastMonth" resultMap="monitorDataMap">
+        select
+        <include refid="Base_Column_List"/>,t8.latest_value
+        from sms_scene t1
+        <include refid="sceneDeviceJoins"/>
+        left join (
+        select c1.device_id,c1.attribute_id,c1.latest_value
+        from sms_month_report c1
+        inner join (
+        select b1.device_id,b1.attribute_id,max(b1.collect_date) collect_date
+        from sms_month_report b1
+        where PERIOD_DIFF( date_format( now( ) , '%Y%m' ) , date_format( b1.COLLECT_DATE, '%Y%m' ) ) =1
+        group by b1.device_id,b1.attribute_id )c2 on c1.device_id=c2.device_id and  c1.attribute_id=c2.attribute_id and c1.collect_date=c2.collect_date
+        )t8 on t8.device_id=t2.device_id and t8.attribute_id =t5.attribute_id
+        where t1.parent_scene_id = 0 and t1. status = 1
+        <if test="type == 1 ">
+            and t5.parm_type in(3,4,5,6)
+        </if>
+        <if test="type == 2 ">
+            and t5.parm_type in(2,3,4,5,6,7,8,9,10,11,12,13,14)
+        </if>
+        <if test="sceneTypeName != null and sceneTypeName != '' ">
+            and t3.scene_type_name = #{sceneTypeName}
+        </if>
+        <if test="sceneId != null and sceneId != '' ">
+            and t1.id = #{sceneId}
+        </if>
+        <if test="sceneIds != null and sceneIds.size() > 0">
+            and t1.id  in
+            <foreach collection="sceneIds" item="item" open="(" close=")" separator=",">
+                #{item}
+            </foreach>
+        </if>
+        <if test="tenantId != null and tenantId != ''">
+            and t1.tenant_id = #{tenantId}
+        </if>
+        order by t1.scene_name,t5.seq
+    </select>
     <!--按管网名称分类查询设备数量-->
     <select id="selectDeviceCount" resultType="java.util.Map">
         select  t1.id sceneId,t1.scene_name sceneName,sum(if(t5.id is null,0,1)) deviceCount,sum(if(t7.device_id is null,0,1)) alarmCount