From eba6f1988c6a7e37e619a27e493b17c244979070 Mon Sep 17 00:00:00 2001
From: kaiyu <404897439@qq.com>
Date: Thu, 30 Sep 2021 16:11:29 +0800
Subject: [PATCH] screen-aqi            完成获取监测站数据接口

---
 screen-api/src/main/java/com/moral/api/pojo/form/dataDisplay/MonitorPointDataDisplayForm.java |    3 
 screen-api/src/main/java/com/moral/api/service/HistoryMonthlyService.java                     |   21 ++
 screen-api/src/main/java/com/moral/api/service/impl/DataDisplayServiceImpl.java               |  274 +++++++++++++++++++++++---
 screen-common/src/main/java/com/moral/util/DateUtils.java                                     |    6 
 screen-api/src/main/java/com/moral/api/service/DataDisplayService.java                        |    7 
 screen-common/src/main/java/com/moral/util/ComprehensiveIndexUtils.java                       |   13 
 screen-api/src/main/java/com/moral/api/service/impl/HistoryWeeklyServiceImpl.java             |   54 +++++
 screen-api/src/main/java/com/moral/api/pojo/dto/dataDisplay/MonitorPointDataDisplayDTO.java   |   40 +++
 screen-api/src/main/java/com/moral/api/service/impl/HistoryHourlyServiceImpl.java             |    1 
 screen-common/src/main/java/com/moral/util/ClassUtils.java                                    |   45 ++++
 screen-common/src/main/java/com/moral/util/AQIUtils.java                                      |    4 
 screen-api/src/main/java/com/moral/api/service/impl/HistoryDailyServiceImpl.java              |    3 
 screen-api/src/main/java/com/moral/api/service/HistoryHourlyService.java                      |   13 +
 screen-common/src/main/java/com/moral/constant/Constants.java                                 |    5 
 screen-api/src/main/java/com/moral/api/service/impl/HistoryMonthlyServiceImpl.java            |   34 +++
 screen-api/src/main/java/com/moral/api/controller/DataDisplayController.java                  |   10 
 screen-api/src/main/java/com/moral/api/service/HistoryWeeklyService.java                      |   38 +++
 17 files changed, 515 insertions(+), 56 deletions(-)

diff --git a/screen-api/src/main/java/com/moral/api/controller/DataDisplayController.java b/screen-api/src/main/java/com/moral/api/controller/DataDisplayController.java
index 74d997d..31dbeff 100644
--- a/screen-api/src/main/java/com/moral/api/controller/DataDisplayController.java
+++ b/screen-api/src/main/java/com/moral/api/controller/DataDisplayController.java
@@ -2,11 +2,13 @@
 
 import com.moral.api.pojo.dto.dataDisplay.MonitorPointDataDisplayDTO;
 import com.moral.api.pojo.form.dataDisplay.MonitorPointDataDisplayForm;
+import com.moral.api.service.DataDisplayService;
 import com.moral.constant.ResponseCodeEnum;
 import com.moral.constant.ResultMessage;
 import com.moral.util.DateUtils;
 import io.swagger.annotations.Api;
 import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.CrossOrigin;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
@@ -31,6 +33,9 @@
 @RequestMapping("/dataDisplay")
 public class DataDisplayController {
 
+    @Autowired
+    DataDisplayService dataDisplayService;
+
     @GetMapping("monitorPointDataDisplay")
     public ResultMessage monitorPointDataDisplay(MonitorPointDataDisplayForm form){
         //������������������������
@@ -38,7 +43,8 @@
             return ResultMessage.fail(ResponseCodeEnum.PARAMETERS_IS_MISSING.getCode(),
                     ResponseCodeEnum.PARAMETERS_IS_MISSING.getMsg());
 
-        MonitorPointDataDisplayDTO dto = new MonitorPointDataDisplayDTO();
+        List<MonitorPointDataDisplayDTO> list = dataDisplayService.getMonitorPointDisplayData(form);
+        /*MonitorPointDataDisplayDTO dto = new MonitorPointDataDisplayDTO();
         MonitorPointDataDisplayDTO dto1 = new MonitorPointDataDisplayDTO();
         MonitorPointDataDisplayDTO dto2 = new MonitorPointDataDisplayDTO();
 
@@ -89,7 +95,7 @@
         List<MonitorPointDataDisplayDTO> list = new ArrayList<>();
         list.add(dto);
         list.add(dto1);
-        list.add(dto2);
+        list.add(dto2);*/
         return new ResultMessage(ResponseCodeEnum.SUCCESS.getCode(), ResponseCodeEnum.SUCCESS.getMsg(),list);
     }
 
diff --git a/screen-api/src/main/java/com/moral/api/pojo/dto/dataDisplay/MonitorPointDataDisplayDTO.java b/screen-api/src/main/java/com/moral/api/pojo/dto/dataDisplay/MonitorPointDataDisplayDTO.java
index afbefa9..f3fcf31 100644
--- a/screen-api/src/main/java/com/moral/api/pojo/dto/dataDisplay/MonitorPointDataDisplayDTO.java
+++ b/screen-api/src/main/java/com/moral/api/pojo/dto/dataDisplay/MonitorPointDataDisplayDTO.java
@@ -14,27 +14,51 @@
 @Data
 public class MonitorPointDataDisplayDTO {
 
-    private String deviceName;
+    private String mac;
 
-    private String organizationName;
+    private String deviceName;
 
     private String time;
 
+    /*
+    * CO
+    * */
     private Double a21005;
 
-    private int a21026;
+    /*
+    * SO2
+    * */
+    private Integer a21026;
 
-    private int a21004;
+    /*
+    * NO2
+    * */
+    private Integer a21004;
 
-    private int AQI;
+    /*
+    * AQI
+    * */
+    private Integer AQI;
 
-    private int a34002;
+    /*
+    * PM10
+    * */
+    private Integer a34002;
 
+    /*
+    * TVOC
+    * */
     private Double a99054;
 
-    private int a34004;
+    /*
+    * PM2.5
+    * */
+    private Integer a34004;
 
-    private int a05024;
+    /*
+    * O3
+    * */
+    private Integer a05024;
 
     /*
     * ������������
diff --git a/screen-api/src/main/java/com/moral/api/pojo/form/dataDisplay/MonitorPointDataDisplayForm.java b/screen-api/src/main/java/com/moral/api/pojo/form/dataDisplay/MonitorPointDataDisplayForm.java
index 1d1f3d6..16b8cc4 100644
--- a/screen-api/src/main/java/com/moral/api/pojo/form/dataDisplay/MonitorPointDataDisplayForm.java
+++ b/screen-api/src/main/java/com/moral/api/pojo/form/dataDisplay/MonitorPointDataDisplayForm.java
@@ -51,7 +51,6 @@
         if (reportType == null) {
             if (startTime == null || endTime == null)
                 return false;
-            reportType = Constants.DAILYREPORT;
             //������������������������������������������
             String endTimeStr = DateUtils.dateToDateString(endTime,"yyyy-MM-dd");
             endTimeStr+=" 23:59:59";
@@ -71,10 +70,12 @@
                 //������������������������������������
                 Date previous = DateUtils.getDateOfDay(new Date(),-7);
                 startTime = DateUtils.getWeeklyStartTime(previous);
+                endTime = DateUtils.getWeeklyEndTime(previous);
             } else if (reportType.equals(Constants.MONTHLYREPORT)) {
                 //������������������������������������
                 Date lastMonthFirstDay = DateUtils.getFirstDayOfLastMonth();
                 startTime = DateUtils.getMonthlyStartTime(lastMonthFirstDay);
+                endTime = DateUtils.getMonthlyEndTime(lastMonthFirstDay);
             } else
                 return false;
         }
diff --git a/screen-api/src/main/java/com/moral/api/service/DataDisplayService.java b/screen-api/src/main/java/com/moral/api/service/DataDisplayService.java
index 869e0a3..dace3a1 100644
--- a/screen-api/src/main/java/com/moral/api/service/DataDisplayService.java
+++ b/screen-api/src/main/java/com/moral/api/service/DataDisplayService.java
@@ -1,6 +1,10 @@
 package com.moral.api.service;
 
+import com.moral.api.pojo.dto.dataDisplay.MonitorPointDataDisplayDTO;
 import com.moral.api.pojo.form.dataDisplay.MonitorPointDataDisplayForm;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
 
 /**
 * @Description: ���������������������������
@@ -9,6 +13,7 @@
         * @Author: ���������
         * @Date: 2021/9/26
         */
+
 public interface DataDisplayService {
 
     /**
@@ -18,5 +23,5 @@
             * @Author: ���������
             * @Date: 2021/9/26
             */
-    void getMonitorPointDisplayData(MonitorPointDataDisplayForm form);
+    List<MonitorPointDataDisplayDTO> getMonitorPointDisplayData(MonitorPointDataDisplayForm form);
 }
diff --git a/screen-api/src/main/java/com/moral/api/service/HistoryHourlyService.java b/screen-api/src/main/java/com/moral/api/service/HistoryHourlyService.java
index 9d1b811..e2c6533 100644
--- a/screen-api/src/main/java/com/moral/api/service/HistoryHourlyService.java
+++ b/screen-api/src/main/java/com/moral/api/service/HistoryHourlyService.java
@@ -1,5 +1,9 @@
 package com.moral.api.service;
 
+import com.moral.api.entity.HistoryHourly;
+
+import java.util.Date;
+import java.util.List;
 import java.util.Map;
 
 /**
@@ -15,4 +19,13 @@
     //������mac������������AQI
     Map<String,Object> getHourlyAqiByMac(String mac);
 
+    /**
+    * @Description: ������mac������������������������
+            * @Param: [mac, startDate, endDate]
+            * @return: java.util.List<com.moral.api.entity.HistoryHourly>
+            * @Author: ���������
+            * @Date: 2021/9/28
+            */
+    List<HistoryHourly> getValueByMacAndTime(String mac, Date startDate, Date endDate);
+
 }
diff --git a/screen-api/src/main/java/com/moral/api/service/HistoryMonthlyService.java b/screen-api/src/main/java/com/moral/api/service/HistoryMonthlyService.java
index 529f0ac..f8fe6f9 100644
--- a/screen-api/src/main/java/com/moral/api/service/HistoryMonthlyService.java
+++ b/screen-api/src/main/java/com/moral/api/service/HistoryMonthlyService.java
@@ -3,6 +3,10 @@
 import com.moral.api.entity.HistoryMonthly;
 import com.baomidou.mybatisplus.extension.service.IService;
 
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
 /**
  * <p>
  * ��������� ���������
@@ -13,4 +17,21 @@
  */
 public interface HistoryMonthlyService extends IService<HistoryMonthly> {
 
+    /**
+    * @Description: ���������������������������������
+            * @Param: [mac, date]
+            * @return: com.moral.api.entity.HistoryMonthly
+            * @Author: ���������
+            * @Date: 2021/9/29
+            */
+    HistoryMonthly getHistoryMonthlyByMacAndDate(String mac,Date date);
+
+    /**
+    * @Description: ������������mac������������������������������,key���mac���value���������
+            * @Param: [mac, date]
+            * @return: java.util.Map<java.lang.String,com.moral.api.entity.HistoryMonthly>
+            * @Author: ���������
+            * @Date: 2021/9/30
+            */
+    Map<String,HistoryMonthly> getHistoryMonthlyByMacsAndDate(List<String> mac, Date date);
 }
diff --git a/screen-api/src/main/java/com/moral/api/service/HistoryWeeklyService.java b/screen-api/src/main/java/com/moral/api/service/HistoryWeeklyService.java
new file mode 100644
index 0000000..b027847
--- /dev/null
+++ b/screen-api/src/main/java/com/moral/api/service/HistoryWeeklyService.java
@@ -0,0 +1,38 @@
+package com.moral.api.service;
+
+import com.moral.api.entity.HistoryWeekly;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * <p>
+ * ��������� ���������
+ * </p>
+ *
+ * @author moral
+ * @since 2021-09-29
+ */
+public interface HistoryWeeklyService extends IService<HistoryWeekly> {
+
+    /**
+    * @Description: ���������������������������������
+            * @Param: [mac, date]
+            * @return: com.moral.api.entity.HistoryWeekly
+            * @Author: ���������
+            * @Date: 2021/9/29
+            */
+    HistoryWeekly getHistoryWeeklyByMacAndDate(String mac,Date date);
+
+    /**
+    * @Description: ������������mac������������������������������,key���mac���value���������
+            * @Param: [mac, date]
+            * @return: java.util.Map<java.lang.String,com.moral.api.entity.HistoryWeekly>
+            * @Author: ���������
+            * @Date: 2021/9/30
+            */
+    Map<String,HistoryWeekly> getHistoryWeeklyByMacsAndDate(List<String> mac, Date date);
+
+}
diff --git a/screen-api/src/main/java/com/moral/api/service/impl/DataDisplayServiceImpl.java b/screen-api/src/main/java/com/moral/api/service/impl/DataDisplayServiceImpl.java
index 2a9440d..ac689eb 100644
--- a/screen-api/src/main/java/com/moral/api/service/impl/DataDisplayServiceImpl.java
+++ b/screen-api/src/main/java/com/moral/api/service/impl/DataDisplayServiceImpl.java
@@ -1,19 +1,15 @@
 package com.moral.api.service.impl;
 
 import com.alibaba.fastjson.JSON;
-import com.moral.api.entity.Device;
-import com.moral.api.entity.HistoryDaily;
+import com.moral.api.entity.*;
 import com.moral.api.pojo.dto.dataDisplay.MonitorPointDataDisplayDTO;
 import com.moral.api.pojo.form.dataDisplay.MonitorPointDataDisplayForm;
-import com.moral.api.service.DataDisplayService;
-import com.moral.api.service.DeviceService;
-import com.moral.api.service.HistoryDailyService;
-import com.moral.api.service.OrganizationService;
-import com.moral.util.AQIUtils;
-import com.moral.util.AmendUtils;
-import com.moral.util.DateUtils;
-import com.moral.util.MathUtils;
+import com.moral.api.service.*;
+import com.moral.constant.Constants;
+import com.moral.util.*;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.util.ObjectUtils;
 
 import java.util.*;
 
@@ -24,6 +20,7 @@
  * @Date 2021/9/26 9:55
  * @Version TODO
  **/
+@Service
 public class DataDisplayServiceImpl implements DataDisplayService {
 
     @Autowired
@@ -31,11 +28,14 @@
     @Autowired
     HistoryDailyService historyDailyService;
     @Autowired
-    OrganizationService organizationService;
-
+    HistoryHourlyService historyHourlyService;
+    @Autowired
+    HistoryWeeklyService historyWeeklyService;
+    @Autowired
+    HistoryMonthlyService historyMonthlyService;
 
     @Override
-    public void getMonitorPointDisplayData(MonitorPointDataDisplayForm form) {
+    public List<MonitorPointDataDisplayDTO> getMonitorPointDisplayData(MonitorPointDataDisplayForm form) {
         //������
         Integer monitorPointId = form.getMonitorPointId();
         String reportType = form.getReportType();
@@ -49,14 +49,63 @@
             macs.add(value.getMac());
             deviceMap.put(value.getMac(), value);
         });
-        //���������������������null������������������������������������������������������
-        if (reportType == null) {
+        List<MonitorPointDataDisplayDTO> dtos = new ArrayList<>();
+        if (reportType == null) {//���������������������
             Map<String, List<HistoryDaily>> macDataMap = new HashMap<>();//key���mac
+            //������������
             macs.forEach(value -> {
+                //������������
                 List<HistoryDaily> datas = historyDailyService.getHistoryDailyByMacAndTimeSlot(value, startTime, endTime);
-                macDataMap.put(value, datas);
+                //���������������������������������
+                if (datas.size() != 0)
+                    macDataMap.put(value, datas);
             });
+            //���������������������������������������
+            if (macDataMap.size() != 0)
+                dtos = calculateCustomData(macDataMap, deviceMap, startTime, endTime);
         }
+        //���������������������������������������������������������
+        else if (reportType.equals(Constants.HOURYLYREPORT)) {
+            Map<String, HistoryHourly> macDataMap = new HashMap<>();
+            //������������
+            macs.forEach(value -> {
+                List<HistoryHourly> datas = historyHourlyService.getValueByMacAndTime(value, startTime, startTime);
+                if (datas.size() != 0)
+                    macDataMap.put(value, datas.get(0));
+            });
+            if (macDataMap.size() != 0)
+                dtos = calculateReportData(macDataMap, deviceMap, startTime);
+        }
+        //���������������������������������������������
+        else if (reportType.equals(Constants.DAILYREPORT)) {
+            //������������
+            Map<String, HistoryDaily> macDataMap = historyDailyService.getHistoryDailyByMacsAndDate(macs, startTime);
+            if (macDataMap.size() != 0)
+                dtos = calculateReportData(macDataMap, deviceMap, startTime);
+        }
+        //���������������������������������������������
+        else if (reportType.equals(Constants.WEEKLYREPORT)) {
+            //������������
+            Map<String, HistoryWeekly> macDataMap = historyWeeklyService.getHistoryWeeklyByMacsAndDate(macs, startTime);
+            if (macDataMap.size() != 0)
+                dtos = calculateReportData(macDataMap, deviceMap, startTime, endTime);
+        }
+        //������������������
+        else if (reportType.equals(Constants.MONTHLYREPORT)) {
+            //������������������������������������������������������������������������������������������������
+            Map<String, List<HistoryDaily>> macDataDailyMap = new HashMap<>();
+            Map<String, HistoryMonthly> macDataMonthlyMap = historyMonthlyService.getHistoryMonthlyByMacsAndDate(macs, startTime);
+            macs.forEach(mac -> {
+                List<HistoryDaily> dailyDatas = historyDailyService.getHistoryDailyByMacAndTimeSlot(mac, startTime, endTime);
+                if (!ObjectUtils.isEmpty(dailyDatas))
+                    macDataDailyMap.put(mac, dailyDatas);
+            });
+            if (macDataMonthlyMap.size() != 0)
+                dtos = calculateReportData(macDataMonthlyMap, deviceMap, startTime);
+            //������������������
+            injectComprehensiveIndex(dtos, macDataDailyMap);
+        }
+        return dtos;
     }
 
 
@@ -67,14 +116,13 @@
      * @Author: ���������
      * @Date: 2021/9/26
      */
-    private void calculateCustomData(Map<String, List<HistoryDaily>> macDataMap, Map<String, Device> deviceMap, Date startDate, Date endDate) {
+    private List<MonitorPointDataDisplayDTO> calculateCustomData(Map<String, List<HistoryDaily>> macDataMap, Map<String, Device> deviceMap, Date startDate, Date endDate) {
         List<MonitorPointDataDisplayDTO> dtos = new ArrayList<>();
         macDataMap.forEach((key, value) -> {
             MonitorPointDataDisplayDTO dto = new MonitorPointDataDisplayDTO();
+            dto.setMac(key);
             //������������������
             String deviceName = deviceMap.get(key).getName();
-            //������������������
-            String orgName = organizationService.getOrganizationById(deviceMap.get(key).getOrganizationId()).getName();
             //������������
             String startTime = DateUtils.dateToDateString(startDate, "yyyy-MM-dd");
             String endTime = DateUtils.dateToDateString(endDate, "yyyy-MM-dd");
@@ -139,39 +187,191 @@
                 int aqi = AQIUtils.hourlyAqi(valueMap);
                 if (aqi != 0) {
                     AQISum += Double.valueOf(aqi);
+                    AQINum++;
                 }
             }
             //������aqi������
-            double AQID = AmendUtils.sciCal(AQISum / AQINum, 0);
-            int AQIAvg = new Double(AQID).intValue();
+            if (AQINum != 0d) {
+                Double AQID = AmendUtils.sciCal(AQISum / AQINum, 0);
+                int AQIAvg = new Double(AQID).intValue();
+                dto.setAQI(AQIAvg);
+            }
             //������PM2.5������
-            double PM25D = AmendUtils.sciCal(PM25Sum / PM25Num, 0);
-            int PM25Avg = new Double(PM25D).intValue();
+            if (PM25Num != 0d) {
+                Double PM25D = AmendUtils.sciCal(PM25Sum / PM25Num, 0);
+                int PM25Avg = new Double(PM25D).intValue();
+                dto.setA34004(PM25Avg);
+            }
             //������PM10������
-            double PM10D = AmendUtils.sciCal(PM10Sum / PM10Num,0);
-            int PM10Avg = new Double(PM10D).intValue();
+            if (PM10Num != 0d) {
+                Double PM10D = AmendUtils.sciCal(PM10Sum / PM10Num, 0);
+                int PM10Avg = new Double(PM10D).intValue();
+                dto.setA34002(PM10Avg);
+            }
             //������SO2������
-            double SO2D = AmendUtils.sciCal(SO2Sum / SO2Num,0);
-            int SO2Avg = new Double(SO2D).intValue();
+            if (SO2Num != 0d) {
+                Double SO2D = AmendUtils.sciCal(SO2Sum / SO2Num, 0);
+                int SO2Avg = new Double(SO2D).intValue();
+                dto.setA21026(SO2Avg);
+            }
             //������NO2������
-            double NO2D = AmendUtils.sciCal(NO2Sum / NO2Num,0);
-            int NO2Avg = new Double(NO2D).intValue();
+            if (NO2Num != 0d) {
+                Double NO2D = AmendUtils.sciCal(NO2Sum / NO2Num, 0);
+                int NO2Avg = new Double(NO2D).intValue();
+                dto.setA21004(NO2Avg);
+            }
             //������CO���������������������������
-            double COAvg = AmendUtils.sciCal(COSum / CONum,2);
+            if (CONum != 0d) {
+                Double COAvg = AmendUtils.sciCal(COSum / CONum, 2);
+                dto.setA21005(COAvg);
+            }
             //������O3������
-            double O3D = AmendUtils.sciCal(O3Sum / O3Num,0);
-            int O3Avg = new Double(O3D).intValue();
+            if (O3Num != 0d) {
+                Double O3D = AmendUtils.sciCal(O3Sum / O3Num, 0);
+                int O3Avg = new Double(O3D).intValue();
+                dto.setA05024(O3Avg);
+            }
             //������TVOC������,������������������
-            double TVOCAvg = AmendUtils.sciCal(TVOCSum / TVOCNum,2);
-
-
+            if (TVOCNum != 0d) {
+                Double TVOCAvg = AmendUtils.sciCal(TVOCSum / TVOCNum, 2);
+                dto.setA99054(TVOCAvg);
+            }
             dto.setDeviceName(deviceName);
             dto.setTime(time);
-            dto.setOrganizationName(orgName);
-
+            dtos.add(dto);
         });
+        return dtos;
     }
 
 
+    /**
+     * @Description: ���������������������, ������,���������������(���������6������AQI���TVOC)
+     * @Param: [macDataMap, deviceMap, startDate]
+     * @return: java.util.List<com.moral.api.pojo.dto.dataDisplay.MonitorPointDataDisplayDTO>
+     * @Author: ���������
+     * @Date: 2021/9/28
+     */
+    private <T> List<MonitorPointDataDisplayDTO> calculateReportData(Map<String, T> macDataMap, Map<String, Device> deviceMap, Date... date) {
+        List<MonitorPointDataDisplayDTO> dtos = new ArrayList<>();
+        macDataMap.forEach((key, valueObject) -> {
+            MonitorPointDataDisplayDTO dto = new MonitorPointDataDisplayDTO();
+            dto.setMac(key);
+            //���������map
+            Map<String, Object> valueMap;
+            //���������������value���������
+            Object valueO = ClassUtils.getPropertyValue(valueObject, "value");
+            if (valueO == null)
+                return;
+            String value = (String) valueO;
+            valueMap = JSON.parseObject(value, Map.class);
+            //������������������
+            String deviceName = deviceMap.get(key).getName();
+            dto.setDeviceName(deviceName);
+            //������������,������������������������������������������������������������������������������������������������������
+            String startTime = "";
+            if (valueObject instanceof HistoryHourly && date.length == 1)
+                startTime = DateUtils.dateToDateString(date[0], "yyyy-MM-dd HH:mm:ss");
+            else if (valueObject instanceof HistoryDaily && date.length == 1)
+                startTime = DateUtils.dateToDateString(date[0], "yyyy-MM-dd");
+            else if (valueObject instanceof HistoryWeekly && date.length == 2)
+                startTime = DateUtils.dateToDateString(date[0], "yyyy-MM-dd") + " -- " + DateUtils.dateToDateString(date[1], "yyyy-MM-dd");
+            else if (valueObject instanceof HistoryMonthly && date.length == 1)
+                startTime = DateUtils.dateToDateString(date[0], "yyyy-MM");
+            dto.setTime(startTime);
+            //������������
+            injectDataToDto(valueMap, false, dto);
+            dtos.add(dto);
+        });
+        return dtos;
+    }
+
+
+    /**
+     * @Description: ���DTO���������������������������������������������������������������flag������true���������������false
+     * @Param: [valueMap, flag, dto]
+     * @return: void
+     * @Author: ���������
+     * @Date: 2021/9/28
+     */
+    private void injectDataToDto(Map<String, Object> valueMap, boolean flag, MonitorPointDataDisplayDTO dto) {
+        //������CO
+        String COFlag = (String) valueMap.get("a21005-Flag");
+        Object COObject = valueMap.get("a21005");
+        if ((flag == false || Constants.NORMAL_FLAG.equals(COFlag)) && COObject != null) {
+            Double CO = Double.valueOf(COObject.toString());
+            dto.setA21005(AmendUtils.sciCal(CO, 2));
+        }
+        //������SO2
+        String SO2Flag = (String) valueMap.get("a21026-Flag");
+        Object SO2Object = valueMap.get("a21026");
+        if ((flag == false || Constants.NORMAL_FLAG.equals(SO2Flag)) && SO2Object != null) {
+            Double SO2 = Double.valueOf(SO2Object.toString());
+            dto.setA21026(new Double(AmendUtils.sciCal(SO2, 0)).intValue());
+        }
+        //������NO2
+        String NO2Flag = (String) valueMap.get("a21004-Flag");
+        Object NO2Object = valueMap.get("a21004");
+        if ((flag == false || Constants.NORMAL_FLAG.equals(NO2Flag)) && NO2Object != null) {
+            Double NO2 = Double.valueOf(NO2Object.toString());
+            dto.setA21004(new Double(AmendUtils.sciCal(NO2, 0)).intValue());
+        }
+        //������PM10
+        String PM10Flag = (String) valueMap.get("a34002-Flag");
+        Object PM10Object = valueMap.get("a34002");
+        if ((flag == false || Constants.NORMAL_FLAG.equals(PM10Flag)) && PM10Object != null) {
+            Double PM10 = Double.valueOf(PM10Object.toString());
+            dto.setA34002(new Double(AmendUtils.sciCal(PM10, 0)).intValue());
+        }
+        //������TVOC
+        String TVOCFlag = (String) valueMap.get("a99054-Flag");
+        Object TVOCObject = valueMap.get("a99054");
+        if ((flag == false || Constants.NORMAL_FLAG.equals(TVOCFlag)) && TVOCObject != null) {
+            Double TVOC = Double.valueOf(TVOCObject.toString());
+            dto.setA99054(AmendUtils.sciCal(TVOC, 2));
+        }
+        //������PM2.5
+        String PM25Flag = (String) valueMap.get("a34004-Flag");
+        Object PM25Object = valueMap.get("a34004");
+        if ((flag == false || Constants.NORMAL_FLAG.equals(PM25Flag)) && PM25Object != null) {
+            Double PM25 = Double.valueOf(PM25Object.toString());
+            dto.setA34004(new Double(AmendUtils.sciCal(PM25, 0)).intValue());
+        }
+        //������O3
+        String O3Flag = (String) valueMap.get("a05024-Flag");
+        Object O3Object = valueMap.get("a05024");
+        if ((flag == false || Constants.NORMAL_FLAG.equals(O3Flag)) && O3Object != null) {
+            Double O3 = Double.valueOf(O3Object.toString());
+            dto.setA05024(new Double(AmendUtils.sciCal(O3, 0)).intValue());
+        }
+        //������AQI
+        int aqi = AQIUtils.hourlyAqi(valueMap);
+        if (aqi != 0)
+            dto.setAQI(aqi);
+    }
+
+
+    /**
+     * @Description: ������������������������
+     * @Param: [dtos, macDataDailyMap]
+     * @return: void
+     * @Author: ���������
+     * @Date: 2021/9/29
+     */
+    private void injectComprehensiveIndex(List<MonitorPointDataDisplayDTO> dtos, Map<String, List<HistoryDaily>> macDataDailyMap) {
+        Map<String, MonitorPointDataDisplayDTO> macDtoMap = new HashMap<>();
+        dtos.forEach(value -> macDtoMap.put(value.getMac(), value));
+        macDataDailyMap.forEach((key, value) -> {
+            List<Map<String, Object>> list = new ArrayList<>();
+            for (HistoryDaily historyDaily : value) {
+                Map valueMap = JSON.parseObject(historyDaily.getValue(), Map.class);
+                list.add(valueMap);
+            }
+            Double comIndex = ComprehensiveIndexUtils.monthData(list);
+            MonitorPointDataDisplayDTO dto = macDtoMap.get(key);
+            if (dto != null)
+                dto.setComIndex(comIndex);
+        });
+    }
 
 }
+
diff --git a/screen-api/src/main/java/com/moral/api/service/impl/HistoryDailyServiceImpl.java b/screen-api/src/main/java/com/moral/api/service/impl/HistoryDailyServiceImpl.java
index 4895d63..d9a8d2f 100644
--- a/screen-api/src/main/java/com/moral/api/service/impl/HistoryDailyServiceImpl.java
+++ b/screen-api/src/main/java/com/moral/api/service/impl/HistoryDailyServiceImpl.java
@@ -51,9 +51,12 @@
         wrapper.eq("mac",mac);
         wrapper.eq("time",date);
         List<HistoryDaily> historyDailies = historyDailyMapper.selectList(wrapper);
+        if(ObjectUtils.isEmpty(historyDailies))
+            return null;
         return historyDailies.get(0);
     }
 
+
     @Override
     public Map<String, HistoryDaily> getHistoryDailyByMacsAndDate(List<String> mac, Date date) {
         QueryWrapper<HistoryDaily> wrapper = new QueryWrapper<>();
diff --git a/screen-api/src/main/java/com/moral/api/service/impl/HistoryHourlyServiceImpl.java b/screen-api/src/main/java/com/moral/api/service/impl/HistoryHourlyServiceImpl.java
index 91cf75f..b9d6c80 100644
--- a/screen-api/src/main/java/com/moral/api/service/impl/HistoryHourlyServiceImpl.java
+++ b/screen-api/src/main/java/com/moral/api/service/impl/HistoryHourlyServiceImpl.java
@@ -60,6 +60,7 @@
             * @Author: ���������
             * @Date: 2021/9/23
             */
+    @Override
     public List<HistoryHourly> getValueByMacAndTime(String mac,Date startDate,Date endDate){
         QueryWrapper<HistoryHourly> wrapper = new QueryWrapper<>();
         wrapper.eq("mac",mac);
diff --git a/screen-api/src/main/java/com/moral/api/service/impl/HistoryMonthlyServiceImpl.java b/screen-api/src/main/java/com/moral/api/service/impl/HistoryMonthlyServiceImpl.java
index 586b30e..c6c3f77 100644
--- a/screen-api/src/main/java/com/moral/api/service/impl/HistoryMonthlyServiceImpl.java
+++ b/screen-api/src/main/java/com/moral/api/service/impl/HistoryMonthlyServiceImpl.java
@@ -1,10 +1,18 @@
 package com.moral.api.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.moral.api.entity.HistoryMonthly;
 import com.moral.api.mapper.HistoryMonthlyMapper;
 import com.moral.api.service.HistoryMonthlyService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.util.ObjectUtils;
+
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
 
 /**
  * <p>
@@ -17,4 +25,30 @@
 @Service
 public class HistoryMonthlyServiceImpl extends ServiceImpl<HistoryMonthlyMapper, HistoryMonthly> implements HistoryMonthlyService {
 
+    @Autowired
+    HistoryMonthlyMapper historyMonthlyMapper;
+
+    @Override
+    public HistoryMonthly getHistoryMonthlyByMacAndDate(String mac, Date date) {
+        QueryWrapper<HistoryMonthly> wrapper = new QueryWrapper<>();
+        wrapper.eq("mac",mac);
+        wrapper.eq("time",date);
+        List<HistoryMonthly> historyMonthlies = historyMonthlyMapper.selectList(wrapper);
+        if(ObjectUtils.isEmpty(historyMonthlies))
+            return null;
+        return historyMonthlies.get(0);
+    }
+
+    @Override
+    public Map<String, HistoryMonthly> getHistoryMonthlyByMacsAndDate(List<String> mac, Date date) {
+        QueryWrapper<HistoryMonthly> wrapper = new QueryWrapper<>();
+        wrapper.in("mac",mac);
+        wrapper.eq("time",date);
+        List<HistoryMonthly> historyMonthlies = historyMonthlyMapper.selectList(wrapper);
+        Map<String,HistoryMonthly> map = new HashMap<>();
+        for (HistoryMonthly historyMonthly : historyMonthlies) {
+            map.put(historyMonthly.getMac(),historyMonthly);
+        }
+        return map;
+    }
 }
diff --git a/screen-api/src/main/java/com/moral/api/service/impl/HistoryWeeklyServiceImpl.java b/screen-api/src/main/java/com/moral/api/service/impl/HistoryWeeklyServiceImpl.java
new file mode 100644
index 0000000..cae978f
--- /dev/null
+++ b/screen-api/src/main/java/com/moral/api/service/impl/HistoryWeeklyServiceImpl.java
@@ -0,0 +1,54 @@
+package com.moral.api.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.moral.api.entity.HistoryWeekly;
+import com.moral.api.mapper.HistoryWeeklyMapper;
+import com.moral.api.service.HistoryWeeklyService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.util.ObjectUtils;
+
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * <p>
+ * ��������� ���������������
+ * </p>
+ *
+ * @author moral
+ * @since 2021-09-29
+ */
+@Service
+public class HistoryWeeklyServiceImpl extends ServiceImpl<HistoryWeeklyMapper, HistoryWeekly> implements HistoryWeeklyService {
+
+    @Autowired
+    HistoryWeeklyMapper historyWeeklyMapper;
+
+    @Override
+    public HistoryWeekly getHistoryWeeklyByMacAndDate(String mac, Date date) {
+        QueryWrapper<HistoryWeekly> wrapper = new QueryWrapper<>();
+        wrapper.eq("mac",mac);
+        wrapper.eq("time",date);
+        List<HistoryWeekly> historyWeeklies = historyWeeklyMapper.selectList(wrapper);
+        if(ObjectUtils.isEmpty(historyWeeklies))
+            return null;
+        return historyWeeklies.get(0);
+    }
+
+    @Override
+    public Map<String, HistoryWeekly> getHistoryWeeklyByMacsAndDate(List<String> mac, Date date) {
+        QueryWrapper<HistoryWeekly> wrapper = new QueryWrapper<>();
+        wrapper.in("mac",mac);
+        wrapper.eq("time",date);
+        List<HistoryWeekly> historyWeeklies = historyWeeklyMapper.selectList(wrapper);
+        Map<String,HistoryWeekly> map = new HashMap<>();
+        for (HistoryWeekly historyWeekly : historyWeeklies) {
+            map.put(historyWeekly.getMac(),historyWeekly);
+        }
+        return map;
+    }
+}
diff --git a/screen-common/src/main/java/com/moral/constant/Constants.java b/screen-common/src/main/java/com/moral/constant/Constants.java
index b780f74..22eb8b8 100644
--- a/screen-common/src/main/java/com/moral/constant/Constants.java
+++ b/screen-common/src/main/java/com/moral/constant/Constants.java
@@ -239,5 +239,10 @@
     * */
     public static final String MONTHLYREPORT = "3";
 
+    /*
+    * ���������������������
+    * */
+    public static final String NORMAL_FLAG = "N";
+
     
 }
diff --git a/screen-common/src/main/java/com/moral/util/AQIUtils.java b/screen-common/src/main/java/com/moral/util/AQIUtils.java
index b4b9cff..b7adb3a 100644
--- a/screen-common/src/main/java/com/moral/util/AQIUtils.java
+++ b/screen-common/src/main/java/com/moral/util/AQIUtils.java
@@ -51,7 +51,9 @@
         }
         int AQIMAX = 0;
         if (!ObjectUtils.isEmpty(AQIList)) {
-            AQIMAX = Collections.max(AQIList);
+            if (AQIList.size() == 6) {
+                AQIMAX = Collections.max(AQIList);
+            }
         }
         return AQIMAX;
     }
diff --git a/screen-common/src/main/java/com/moral/util/ClassUtils.java b/screen-common/src/main/java/com/moral/util/ClassUtils.java
new file mode 100644
index 0000000..cd1c231
--- /dev/null
+++ b/screen-common/src/main/java/com/moral/util/ClassUtils.java
@@ -0,0 +1,45 @@
+package com.moral.util;
+
+import java.lang.reflect.Field;
+
+/**
+ * @ClassName ClassUtils
+ * @Description TODO
+ * @Author ���������
+ * @Date 2021/9/29 11:11
+ * @Version TODO
+ **/
+public class ClassUtils {
+
+    /**
+     * @Description: ������������������������
+     * @Param: [obj, propertyName]
+     * @return: java.lang.Object
+     * @Author: ���������
+     * @Date: 2021/9/29
+     */
+    public static Object getPropertyValue(Object obj, String propertyName) {
+        Class<?> Clazz = obj.getClass();
+        Field field;
+        if ((field = getField(Clazz, propertyName)) == null)
+            return null;
+        field.setAccessible(true);
+        try {
+            Object o = field.get(obj);
+            return o;
+        } catch (IllegalAccessException e) {
+            return null;
+        }
+    }
+
+    private static Field getField(Class<?> clazz, String propertyName) {
+        if (clazz == null)
+            return null;
+        try {
+            return clazz.getDeclaredField(propertyName);
+        } catch (NoSuchFieldException e) {
+            return getField(clazz.getSuperclass(), propertyName);
+        }
+    }
+
+}
diff --git a/screen-common/src/main/java/com/moral/util/ComprehensiveIndexUtils.java b/screen-common/src/main/java/com/moral/util/ComprehensiveIndexUtils.java
index 9f9b368..638c261 100644
--- a/screen-common/src/main/java/com/moral/util/ComprehensiveIndexUtils.java
+++ b/screen-common/src/main/java/com/moral/util/ComprehensiveIndexUtils.java
@@ -45,12 +45,13 @@
         Double ICO = CCO / SCO;
         Double IO3 = CO3 / SO3;
         //������������������
-        Double ComprehensiveIndex = MathUtils.add(ISO2,INO2);
-        ComprehensiveIndex = MathUtils.add(ComprehensiveIndex,IPM25);
-        ComprehensiveIndex = MathUtils.add(ComprehensiveIndex,IPM10);
-        ComprehensiveIndex = MathUtils.add(ComprehensiveIndex,ICO);
-        ComprehensiveIndex = MathUtils.add(ComprehensiveIndex,IO3);
-        return ComprehensiveIndex;
+        Double comprehensiveIndex = MathUtils.add(ISO2,INO2);
+        comprehensiveIndex = MathUtils.add(comprehensiveIndex,IPM25);
+        comprehensiveIndex = MathUtils.add(comprehensiveIndex,IPM10);
+        comprehensiveIndex = MathUtils.add(comprehensiveIndex,ICO);
+        comprehensiveIndex = MathUtils.add(comprehensiveIndex,IO3);
+        comprehensiveIndex = AmendUtils.sciCal(comprehensiveIndex,2);
+        return comprehensiveIndex;
     }
 
     /**
diff --git a/screen-common/src/main/java/com/moral/util/DateUtils.java b/screen-common/src/main/java/com/moral/util/DateUtils.java
index d6a03cb..add1279 100644
--- a/screen-common/src/main/java/com/moral/util/DateUtils.java
+++ b/screen-common/src/main/java/com/moral/util/DateUtils.java
@@ -103,6 +103,7 @@
         cal.setTime(date);
         cal.set(Calendar.MINUTE,0);
         cal.set(Calendar.SECOND,0);
+        cal.set(Calendar.MILLISECOND,0);
         return cal.getTime();
     }
 
@@ -118,6 +119,7 @@
         cal.setTime(date);
         cal.set(Calendar.MINUTE,59);
         cal.set(Calendar.SECOND,59);
+        cal.set(Calendar.MILLISECOND,0);
         return cal.getTime();
     }
 
@@ -167,6 +169,7 @@
         cal.set(Calendar.HOUR_OF_DAY,0);
         cal.set(Calendar.MINUTE,0);
         cal.set(Calendar.SECOND,0);
+        cal.set(Calendar.MILLISECOND,0);
         return cal.getTime();
     }
 
@@ -187,6 +190,7 @@
         cal.set(Calendar.HOUR_OF_DAY,23);
         cal.set(Calendar.MINUTE,59);
         cal.set(Calendar.SECOND,59);
+        cal.set(Calendar.MILLISECOND,0);
         return cal.getTime();
     }
 
@@ -204,6 +208,7 @@
         cal.set(Calendar.HOUR_OF_DAY,0);
         cal.set(Calendar.MINUTE,0);
         cal.set(Calendar.SECOND,0);
+        cal.set(Calendar.MILLISECOND,0);
         return cal.getTime();
     }
 
@@ -221,6 +226,7 @@
         cal.set(Calendar.HOUR_OF_DAY,23);
         cal.set(Calendar.MINUTE,59);
         cal.set(Calendar.SECOND,59);
+        cal.set(Calendar.MILLISECOND,0);
         return cal.getTime();
     }
 

--
Gitblit v1.8.0