| 
															
																@@ -1,9 +1,6 @@ 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 package com.huaxu.controller; 
															 | 
															
															 | 
															
																 package com.huaxu.controller; 
															 | 
														
													
												
													
														
															| 
															 | 
															
																  
															 | 
															
															 | 
															
																  
															 | 
														
													
												
													
														
															| 
															 | 
															
																-import com.huaxu.dto.AlarmDetailsDto; 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-import com.huaxu.dto.DeviceDto; 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-import com.huaxu.dto.MonitorDataDto; 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-import com.huaxu.dto.ReportDto; 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+import com.huaxu.dto.*; 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 import com.huaxu.entity.*; 
															 | 
															
															 | 
															
																 import com.huaxu.entity.*; 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 import com.huaxu.model.AjaxMessage; 
															 | 
															
															 | 
															
																 import com.huaxu.model.AjaxMessage; 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 import com.huaxu.model.LoginUser; 
															 | 
															
															 | 
															
																 import com.huaxu.model.LoginUser; 
															 | 
														
													
												
											
												
													
														
															 | 
															
																@@ -20,6 +17,7 @@ import org.springframework.stereotype.Controller; 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 import org.springframework.validation.annotation.Validated; 
															 | 
															
															 | 
															
																 import org.springframework.validation.annotation.Validated; 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 import org.springframework.ui.ModelMap; 
															 | 
															
															 | 
															
																 import org.springframework.ui.ModelMap; 
															 | 
														
													
												
													
														
															| 
															 | 
															
																  
															 | 
															
															 | 
															
																  
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+import java.time.LocalDateTime; 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 import java.util.*; 
															 | 
															
															 | 
															
																 import java.util.*; 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 import java.util.stream.Collectors; 
															 | 
															
															 | 
															
																 import java.util.stream.Collectors; 
															 | 
														
													
												
													
														
															| 
															 | 
															
																  
															 | 
															
															 | 
															
																  
															 | 
														
													
												
											
												
													
														
															 | 
															
																@@ -53,45 +51,57 @@ public class MonitorInfoController { 
															 | 
														
													
												
													
														
															| 
															 | 
															
																     @ApiOperation(value = "按场景ID查询供水量出水量耗药量耗电量") 
															 | 
															
															 | 
															
																     @ApiOperation(value = "按场景ID查询供水量出水量耗药量耗电量") 
															 | 
														
													
												
													
														
															| 
															 | 
															
																     @RequestMapping(value = "/findTotalUsageBySceneId",method = RequestMethod.GET) 
															 | 
															
															 | 
															
																     @RequestMapping(value = "/findTotalUsageBySceneId",method = RequestMethod.GET) 
															 | 
														
													
												
													
														
															| 
															 | 
															
																     @ResponseBody 
															 | 
															
															 | 
															
																     @ResponseBody 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-    public  AjaxMessage<ReportDto> findTotalUsageBySceneId(@ApiParam(value = "场景ID", required = true) @RequestParam Long id) { 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-       //查询场景下的所有设备信息 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+    public  AjaxMessage<SceneUsageDto> findTotalUsageBySceneId(@ApiParam(value = "场景ID", required = true) @RequestParam Long id) { 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+        SceneUsageDto sceneUsageDto = new SceneUsageDto(); 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+        //查询场景下的所有设备信息 
															 | 
														
													
												
													
														
															| 
															 | 
															
																         List<DeviceDto> devices = new ArrayList<>(); 
															 | 
															
															 | 
															
																         List<DeviceDto> devices = new ArrayList<>(); 
															 | 
														
													
												
													
														
															| 
															 | 
															
																         DeviceDto deviceDto = new DeviceDto(); 
															 | 
															
															 | 
															
																         DeviceDto deviceDto = new DeviceDto(); 
															 | 
														
													
												
													
														
															| 
															 | 
															
																         deviceDto.setSceneIds(sceneService.findByParentIdsLike(id)); 
															 | 
															
															 | 
															
																         deviceDto.setSceneIds(sceneService.findByParentIdsLike(id)); 
															 | 
														
													
												
													
														
															| 
															 | 
															
																         devices.addAll(deviceService.selectList(deviceDto)); 
															 | 
															
															 | 
															
																         devices.addAll(deviceService.selectList(deviceDto)); 
															 | 
														
													
												
													
														
															| 
															 | 
															
																- 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-        for(DeviceDto item : devices) { 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+        //取前一个小时的时间 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+        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()); 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+            List<SceneDeviceAttributeDto> sceneDeviceAttributeDtos = monitorInfoService.findAttributeList(sceneDeviceAttributeDto); 
															 | 
														
													
												
													
														
															| 
															 | 
															
																             //取缓存里的数据 
															 | 
															
															 | 
															
																             //取缓存里的数据 
															 | 
														
													
												
													
														
															| 
															 | 
															
																             byte[] bytes = redisUtil.get(("sms_water_" + item.getDeviceCode()).getBytes()); 
															 | 
															
															 | 
															
																             byte[] bytes = redisUtil.get(("sms_water_" + item.getDeviceCode()).getBytes()); 
															 | 
														
													
												
													
														
															| 
															 | 
															
																             if (bytes != null && bytes.length > 0) { 
															 | 
															
															 | 
															
																             if (bytes != null && bytes.length > 0) { 
															 | 
														
													
												
													
														
															| 
															 | 
															
																                 MonitorDataEntity monitorDataEntity = (MonitorDataEntity) ByteArrayUtils.bytesToObject(bytes).get(); 
															 | 
															
															 | 
															
																                 MonitorDataEntity monitorDataEntity = (MonitorDataEntity) ByteArrayUtils.bytesToObject(bytes).get(); 
															 | 
														
													
												
													
														
															| 
															 | 
															
																                 //筛选该设备相同属性的值 
															 | 
															
															 | 
															
																                 //筛选该设备相同属性的值 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-//                List<MonitorDataValueEntity> attributeEntities = monitorDataEntity.getDataValues().stream().filter((MonitorDataValueEntity m) 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-//                        -> m.getAttributeId().equals(monitorData.getAttributeId())).collect(Collectors.toList()); 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-//                MonitorDataValueEntity  attributeEntity=attributeEntities.size()>0?attributeEntities.get(0):null; 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-//                if (attributeEntity != null) { 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-//                    Double attributeDiffValue =0d; 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-//                    if(attributeEntity.getDataValue() != null && monitorData.getLatestValue() != null){ 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-//                        attributeDiffValue=attributeEntity.getDataValue() - monitorData.getLatestValue(); 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-//                    }else if(attributeEntity.getDataValue() != null && monitorData.getLatestValue() == null) { 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-//                        attributeDiffValue=attributeEntity.getDataValue(); 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-//                    } 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-//                    Double attributeValue = monitorData.getSumValue() != null ? monitorData.getSumValue() + attributeDiffValue : attributeDiffValue; 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-//                    switch (monitorData.getAttributeType()) { 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-//                        case "3": 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-//                            monDataCol.setYieldWaterUsage(monDataCol.getYieldWaterUsage() != null ? monDataCol.getYieldWaterUsage() + attributeValue : attributeValue); 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-//                            break; 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-//                        case "4": 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-//                            monDataCol.setIntakeWaterUsage(monDataCol.getIntakeWaterUsage() != null ? monDataCol.getIntakeWaterUsage() + attributeValue : attributeValue); 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-//                            break; 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-//                        case "5": 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-//                            monDataCol.setPowerUsage(monDataCol.getPowerUsage() != null ? monDataCol.getPowerUsage() + attributeValue : attributeValue); 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-//                            break; 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-//                        case "6": 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-//                            monDataCol.setDrugUsage(monDataCol.getDrugUsage() != null ? monDataCol.getDrugUsage() + attributeValue : attributeValue); 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-//                            break; 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-//                    } 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-//                } 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+                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 ? sceneUsageDto.getYieldWaterUsage() + attributeDiffValue : attributeDiffValue); 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+                            break; 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+                        case "4": 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+                            sceneUsageDto.setIntakeWaterUsage(sceneUsageDto.getIntakeWaterUsage() != null ? sceneUsageDto.getIntakeWaterUsage() + attributeDiffValue : attributeDiffValue); 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+                            break; 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+                        case "5": 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+                            sceneUsageDto.setPowerUsage(sceneUsageDto.getPowerUsage() != null ? sceneUsageDto.getPowerUsage() + attributeDiffValue : attributeDiffValue); 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+                            break; 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+                        case "6": 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+                            sceneUsageDto.setDrugUsage(sceneUsageDto.getDrugUsage() != null ? sceneUsageDto.getDrugUsage() + attributeDiffValue : attributeDiffValue); 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+                            break; 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+                    } 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+                } 
															 | 
														
													
												
													
														
															| 
															 | 
															
																             } 
															 | 
															
															 | 
															
																             } 
															 | 
														
													
												
													
														
															| 
															 | 
															
																         } 
															 | 
															
															 | 
															
																         } 
															 | 
														
													
												
													
														
															| 
															 | 
															
																         return new AjaxMessage<>(ResultStatus.OK); 
															 | 
															
															 | 
															
																         return new AjaxMessage<>(ResultStatus.OK); 
															 |