Selaa lähdekoodia

综合展示数据除以10000

wangyangyang 4 vuotta sitten
vanhempi
commit
9cf116a418

+ 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);

+ 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

+ 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

+ 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;

+ 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