| 
					
				 | 
			
			
				@@ -1,6 +1,7 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 package com.huaxu.service.impl; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.huaxu.dao.MonitorDataMapper; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.huaxu.dto.AlarmDetailsDto; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.huaxu.entity.DayReportEntity; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.huaxu.entity.MonitorDataEntity; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.huaxu.entity.MonthReportEntity; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -26,11 +27,9 @@ import org.springframework.data.mongodb.core.query.Update; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import org.springframework.stereotype.Service; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import javax.annotation.Resource; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import java.math.BigDecimal; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import java.time.LocalDateTime; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import java.util.Calendar; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import java.util.Date; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import java.util.HashMap; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import java.util.List; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import java.util.*; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import java.util.stream.Collectors; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 /** 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -119,49 +118,12 @@ public class MonitorDataServiceImpl implements MonitorDataService , Initializing 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         return monitorDataEntity; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     @Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    public List<MonitorDataEntity> findList() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        Criteria criteria = new Criteria(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        criteria.and("collectDate").lt(new Date()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        Query query = new Query(criteria); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        List<MonitorDataEntity> monitorDataEntitys = mongoTemplate.find(query, MonitorDataEntity.class,"SMS_MONITOR_DATA"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        return monitorDataEntitys; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    public List<MonitorDataEntity> groupBy(){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        Criteria criteria = new Criteria(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-//        criteria.and("collectDate").lt(new Date()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        Criteria elemMatchCriteria = new Criteria(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        elemMatchCriteria.and("dataValue").gt(33); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        criteria.and("dataValues").elemMatch(elemMatchCriteria);//查询数组里面的数据 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        Aggregation agg = Aggregation.newAggregation( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                Aggregation.match(criteria),    //查询条件 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                Aggregation.unwind("dataValues"),//将文档中的某一个数组类型字段拆分成多条,每条包含数组中的一个值 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-//                Aggregation.sort(Sort.Direction.DESC, "readDate"),//在聚合之前对数据进行排序 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                Aggregation.group("deviceId","dataValues.attributeId" ) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        .sum("$dataValues.dataValue").as("sumDataValue") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        .max("$dataValues.dataValue").as("maxDataValue") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        .min("$dataValues.dataValue").as("minDataValue") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        .avg("$dataValues.dataValue").as("avgDataValue") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        .first("$dataValues.dataValue").as("firstDataValue") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        .count().as("countDataValue") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-//        AggregationResults<MonitorDataEntity> durationData = 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-//                mongoTemplate.aggregate(agg, "SMS_MONITOR_DATA", MonitorDataEntity.class); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-//        List<MonitorDataEntity> monitorDataEntities = durationData.getMappedResults(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-//        return monitorDataEntities; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        AggregationResults<Object> durationData = 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                mongoTemplate.aggregate(agg, "SMS_MONITOR_DATA", Object.class); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        List<Object> monitorDataEntities = durationData.getMappedResults(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        return null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    public List<DayReportEntity> getMonitorDataByHour(){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        //取前一个小时的时间 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        LocalDateTime dateTime = LocalDateTime.now().plusHours(-1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public List<DayReportEntity> getMonitorDataGroupByHour(LocalDateTime dateTime ){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if(dateTime == null ){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            return null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         Criteria criteria = new Criteria(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         criteria.and("year").is(dateTime.getYear()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         criteria.and("month").is(dateTime.getMonthValue()); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -176,7 +138,7 @@ public class MonitorDataServiceImpl implements MonitorDataService , Initializing 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         .min("$dataValues.dataValue").as("minValue") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         .max("$dataValues.dataValue").as("maxValue") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         .avg("$dataValues.dataValue").as("avgValue") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        .sum("$dataValues.dataValue").as("sumValue") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//                        .sum("$dataValues.dataValue").as("sumValue") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         .last("$dataValues.dataValue").as("latestValue") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         .last("$collectDate").as("collectDate") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         .count().as("countNum") 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -185,11 +147,31 @@ public class MonitorDataServiceImpl implements MonitorDataService , Initializing 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 mongoTemplate.aggregate(agg, "SMS_MONITOR_DATA", DayReportEntity.class); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         //获取查询结果 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         List<DayReportEntity> monthReportEntities = durationData.getMappedResults(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return monthReportEntities; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public List<DayReportEntity> getMonitorDataReportByHour(){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //取前一个小时的时间 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        LocalDateTime dateTime = LocalDateTime.now().plusHours(-1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        List<DayReportEntity> HourData = getMonitorDataGroupByHour(dateTime); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        List<DayReportEntity> lastHourData = getMonitorDataGroupByHour(dateTime.plusHours(-1)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Map<String,DayReportEntity> lastHourDataMap = lastHourData.stream().collect(Collectors.toMap(DayReportEntity::getMapkey, a -> a,(k1, k2)->k1)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         //保存日报表数据 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if(monthReportEntities.size()>0){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            monitorDataMapper.batchInsertDayReport(monthReportEntities); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if(HourData.size()>0){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //计算累计值 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            for(DayReportEntity dayReportEntity : HourData){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if(dayReportEntity.getLatestValue()!=null && lastHourDataMap.containsKey(dayReportEntity.getMapkey()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                 && lastHourDataMap.get(dayReportEntity.getMapkey()).getLatestValue() != null){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    dayReportEntity.setSumValue(new BigDecimal(dayReportEntity.getLatestValue().toString()).subtract(new BigDecimal(lastHourDataMap.get(dayReportEntity.getMapkey()).getLatestValue().toString())).doubleValue()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            monitorDataMapper.batchInsertDayReport(HourData); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        return monthReportEntities; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return HourData; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     @Override 
			 |