浏览代码

生产日报修改

wangli 4 年之前
父节点
当前提交
58a62d3f74

+ 1 - 1
sms_water/src/main/java/com/huaxu/async/MonitorDataReportTaskAsync.java

@@ -34,7 +34,7 @@ public class MonitorDataReportTaskAsync {
     public void monitorDataReportForHour() {
         try{
             log.info("日报报任务开始执行");
-            monitorDataService.getMonitorDataByHour();
+            monitorDataService.getMonitorDataReportByHour();
             log.info("日报任务执行结束");
         }catch (Exception e){
             e.printStackTrace();

+ 12 - 9
sms_water/src/main/java/com/huaxu/controller/MonitorDataReportController.java

@@ -70,16 +70,19 @@ public class MonitorDataReportController {
             localDate = LocalDate.parse(reportDate,DateTimeFormatter.ofPattern("yyyy-MM-dd"));
         }
        List<List<MonitorDataChartReportDeviceDto>> reportList=new ArrayList<>();
-        //能耗(供水量3、耗电量5)
-        List<MonitorDataChartReportDeviceDto> energy = monitorDataReportService.MonitorDataEnergyReport(reportType,sceneIds,localDate.getYear(),localDate.getMonthValue(),localDate.getDayOfMonth());
-        //水质(PH8、余氯11、浊度10)
-        List<MonitorDataChartReportDeviceDto> quality = monitorDataReportService.MonitorDataQualityReport(reportType,sceneIds,localDate.getYear(),localDate.getMonthValue(),localDate.getDayOfMonth());
-        //报警(报警次数)
-        List<MonitorDataChartReportDeviceDto> alarm = monitorDataReportService.DeviceAlarmReport(reportType,sceneIds,localDate.getYear(),localDate.getMonthValue(),localDate.getDayOfMonth());
+        if(sceneIds != null && sceneIds.size() > 0){
 
-        reportList.add(energy);
-        reportList.add(quality);
-        reportList.add(alarm);
+            //能耗(供水量3、耗电量5)
+            List<MonitorDataChartReportDeviceDto> energy = monitorDataReportService.MonitorDataEnergyReport(reportType,sceneIds,localDate.getYear(),localDate.getMonthValue(),localDate.getDayOfMonth());
+            //水质(PH8、余氯11、浊度10)
+            List<MonitorDataChartReportDeviceDto> quality = monitorDataReportService.MonitorDataQualityReport(reportType,sceneIds,localDate.getYear(),localDate.getMonthValue(),localDate.getDayOfMonth());
+            //报警(报警次数)
+            List<MonitorDataChartReportDeviceDto> alarm = monitorDataReportService.DeviceAlarmReport(reportType,sceneIds,localDate.getYear(),localDate.getMonthValue(),localDate.getDayOfMonth());
+
+            reportList.add(energy);
+            reportList.add(quality);
+            reportList.add(alarm);
+        }
         return new AjaxMessage<>(ResultStatus.OK, reportList);
     }
 }

+ 8 - 0
sms_water/src/main/java/com/huaxu/entity/DayReportEntity.java

@@ -137,4 +137,12 @@ public class DayReportEntity{
     @ApiModelProperty(value = "更新人")
     @JsonIgnore
     private String updateBy;
+
+    public String getMapkey(){
+        StringBuilder stringBuilder=new StringBuilder();
+        stringBuilder.append(this.deviceId);
+        stringBuilder.append(this.attributeId);
+        return stringBuilder.toString();
+    }
+
 }

+ 1 - 2
sms_water/src/main/java/com/huaxu/quartz/job/MonitorDataReportByDayJob.java

@@ -4,7 +4,6 @@ import com.huaxu.service.MonitorDataService;
 import lombok.extern.slf4j.Slf4j;
 import org.quartz.Job;
 import org.quartz.JobExecutionContext;
-import org.quartz.JobExecutionException;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
@@ -28,7 +27,7 @@ public  class MonitorDataReportByDayJob implements Job, Serializable {
     public void execute(JobExecutionContext context)  {
         try {
             log.info("日报报任务开始执行");
-            monitorDataService.getMonitorDataByHour();
+            monitorDataService.getMonitorDataReportByHour();
             log.info("日报任务执行结束");
         } catch (Exception e) {
             e.printStackTrace();

+ 4 - 13
sms_water/src/main/java/com/huaxu/service/MonitorDataService.java

@@ -5,6 +5,7 @@ import com.huaxu.entity.MonitorDataEntity;
 import com.huaxu.entity.MonthReportEntity;
 import com.huaxu.entity.YearReportEntity;
 
+import java.time.LocalDateTime;
 import java.util.List;
 
 /**
@@ -40,18 +41,6 @@ public interface MonitorDataService {
      */
     MonitorDataEntity findById(Long id);
 
-    /**
-     * 查询列表(另外再写,此处单纯测试)
-     * @return
-     */
-    List<MonitorDataEntity> findList();
-
-    /**
-     * 聚合(另外再写,此处单纯测试)
-     * @return
-     */
-    List<MonitorDataEntity> groupBy();
-
     /**
      * 查询基础设备信息
      * @param deviceCode
@@ -59,11 +48,13 @@ public interface MonitorDataService {
      */
     MonitorDataEntity getDeviceMonitorInfoByDeviceCode(String deviceCode);
 
+    List<DayReportEntity> getMonitorDataGroupByHour(LocalDateTime dateTime);
+
     /**
      * 生成每小时数据的日报
      * @return
      */
-    List<DayReportEntity> getMonitorDataByHour();
+    List<DayReportEntity> getMonitorDataReportByHour();
     /**
      * 生成每天数据的月报
      * @return

+ 31 - 49
sms_water/src/main/java/com/huaxu/service/impl/MonitorDataServiceImpl.java

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

+ 2 - 16
sms_water/src/main/resources/mapper/MonitorDataReportMapper.xml

@@ -113,8 +113,8 @@
             <if test="type != null and type ==3">
                 r.`HOUR` as "dateLabel",
             </if>
-            cast(ifnull(r.LATEST_VALUE -r2.LATEST_VALUE,'') as char)+ifnull(da.UNIT,'') as "monitorData"
-            ,ifnull((r.LATEST_VALUE -r2.LATEST_VALUE),0)  as "data"
+            cast(ifnull(r.SUM_VALUE,0) as char)+ifnull(da.UNIT,'') as "monitorData"
+            ,ifnull(r.SUM_VALUE ,0)  as "data"
             ,r.COLLECT_DATE as "date"
 
             ,d.DEVICE_CODE as "devoceCode"
@@ -131,20 +131,6 @@
             from sms_day_report r
         </if>
         <include refid="MonitorDataReportJoins"/>
-
-        <if test="type != null and type ==1">
-            left join sms_year_report r2 on r.DEVICE_ID=r2.DEVICE_ID and r.ATTRIBUTE_ID=r2.ATTRIBUTE_ID
-                                    and	r.year=r2.`YEAR`and r.`MONTH`-1=r2.`MONTH`
-        </if>
-        <if test="type != null and type ==2">
-            left join sms_month_report r2 on r.DEVICE_ID=r2.DEVICE_ID and r.ATTRIBUTE_ID=r2.ATTRIBUTE_ID
-                                    and	r.year=r2.`YEAR`and r.`MONTH`=r2.`MONTH`and r.`DAY`-1=r2.`DAY`
-        </if>
-        <if test="type != null and type ==3">
-            left join sms_day_report r2 on r.DEVICE_ID=r2.DEVICE_ID and r.ATTRIBUTE_ID=r2.ATTRIBUTE_ID
-                                    and	r.year=r2.`YEAR`and r.`MONTH`=r2.`MONTH` and r.`DAY`=r2.`DAY` and r.`HOUR`-1 =r2.`HOUR`
-        </if>
-
         where (da.ATTRIBUTE_TYPE=3 or da.ATTRIBUTE_TYPE=5)
         <if test="sceneIds != null and sceneIds.size()>0">
             and r.PARENT_SCENE_ID in