|
@@ -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
|