| 
					
				 | 
			
			
				@@ -1,9 +1,6 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 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.model.AjaxMessage; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.huaxu.model.LoginUser; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -20,6 +17,7 @@ import org.springframework.stereotype.Controller; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import org.springframework.validation.annotation.Validated; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import org.springframework.ui.ModelMap; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import java.time.LocalDateTime; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import java.util.*; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import java.util.stream.Collectors; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -53,45 +51,57 @@ public class MonitorInfoController { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     @ApiOperation(value = "按场景ID查询供水量出水量耗药量耗电量") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     @RequestMapping(value = "/findTotalUsageBySceneId",method = RequestMethod.GET) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     @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<>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         DeviceDto deviceDto = new DeviceDto(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         deviceDto.setSceneIds(sceneService.findByParentIdsLike(id)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         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()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             if (bytes != null && bytes.length > 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 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); 
			 |