From 2a781bbf1d42191c3b8225a9973bf3d0ecccd66b Mon Sep 17 00:00:00 2001
From: kaiyu <404897439@qq.com>
Date: Mon, 27 Sep 2021 14:33:36 +0800
Subject: [PATCH] screen-aqi 增加获取监测站数据显示接口
---
screen-api/src/main/java/com/moral/api/pojo/form/dataDisplay/MonitorPointDataDisplayForm.java | 82 +++++
screen-api/src/main/java/com/moral/api/service/impl/DataDisplayServiceImpl.java | 173 ++++++++++++
screen-common/src/main/java/com/moral/util/DateUtils.java | 129 ++++++++
screen-api/src/main/java/com/moral/api/pojo/form/uav/UAVQueryTimeSlotForm.java | 5
screen-api/src/main/java/com/moral/api/service/DataDisplayService.java | 22 +
screen-common/src/main/java/com/moral/util/ComprehensiveIndexUtils.java | 164 +++++++++++
screen-api/src/main/java/com/moral/api/pojo/dto/dataDisplay/MonitorPointDataDisplayDTO.java | 25 +
screen-api/src/main/java/com/moral/api/service/MonitorPointService.java | 7
screen-api/src/main/java/com/moral/api/service/HistoryDailyService.java | 29 ++
screen-api/src/main/java/com/moral/api/service/OrganizationService.java | 9
screen-api/src/main/java/com/moral/api/service/impl/OrganizationServiceImpl.java | 5
screen-api/src/main/java/com/moral/api/service/impl/HistoryDailyServiceImpl.java | 36 ++
screen-common/src/main/java/com/moral/constant/Constants.java | 20 +
screen-api/src/main/java/com/moral/api/controller/DataDisplayController.java | 78 +++++
14 files changed, 774 insertions(+), 10 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
new file mode 100644
index 0000000..4fd2b1d
--- /dev/null
+++ b/screen-api/src/main/java/com/moral/api/controller/DataDisplayController.java
@@ -0,0 +1,78 @@
+package com.moral.api.controller;
+
+import com.moral.api.pojo.dto.dataDisplay.MonitorPointDataDisplayDTO;
+import com.moral.api.pojo.form.dataDisplay.MonitorPointDataDisplayForm;
+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.web.bind.annotation.CrossOrigin;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @ClassName DataDisplayController
+ * @Description TODO
+ * @Author ���������
+ * @Date 2021/9/26 9:59
+ * @Version TODO
+ **/
+@Slf4j
+@Api(tags = {"������������"})
+@RestController
+@CrossOrigin(origins = "*", maxAge = 3600)
+@RequestMapping("/dataDisplay")
+public class DataDisplayController {
+
+ @GetMapping("monitorPointDataDisplay")
+ public ResultMessage monitorPointDataDisplay(MonitorPointDataDisplayForm form){
+ //������������������������
+ if (!form.valid())
+ return ResultMessage.fail(ResponseCodeEnum.PARAMETERS_IS_MISSING.getCode(),
+ ResponseCodeEnum.PARAMETERS_IS_MISSING.getMsg());
+
+ MonitorPointDataDisplayDTO dto = new MonitorPointDataDisplayDTO();
+ MonitorPointDataDisplayDTO dto1 = new MonitorPointDataDisplayDTO();
+ MonitorPointDataDisplayDTO dto2 = new MonitorPointDataDisplayDTO();
+
+ dto.setDeviceName("������������1");
+ dto1.setDeviceName("������������2");
+ dto2.setDeviceName("������������3");
+
+ dto.setTime("yyyy-MM-dd HH:mm:ss");
+ dto1.setTime("yyyy-MM-dd HH:mm:ss");
+ dto2.setTime("yyyy-MM-dd HH:mm:ss");
+
+ dto.setOrganizationName("������������1");
+ dto1.setOrganizationName("������������2");
+ dto2.setOrganizationName("������������3");
+
+ Map<String,Object> valueMap = new HashMap<>();
+ valueMap.put("a21026",1);
+ valueMap.put("a21004",1);
+ valueMap.put("a34002",1);
+ valueMap.put("a34004",1);
+ valueMap.put("a21005",1);
+ valueMap.put("a05024",1);
+ valueMap.put("a99054",1);
+ valueMap.put("AQI",1);
+
+ dto.setValues(valueMap);
+ dto1.setValues(valueMap);
+ dto2.setValues(valueMap);
+
+ List<MonitorPointDataDisplayDTO> list = new ArrayList<>();
+ list.add(dto);
+ list.add(dto1);
+ 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
new file mode 100644
index 0000000..db149f5
--- /dev/null
+++ b/screen-api/src/main/java/com/moral/api/pojo/dto/dataDisplay/MonitorPointDataDisplayDTO.java
@@ -0,0 +1,25 @@
+package com.moral.api.pojo.dto.dataDisplay;
+
+import lombok.Data;
+
+import java.util.Map;
+
+/**
+ * @ClassName DataDisplayDTO
+ * @Description TODO
+ * @Author ���������
+ * @Date 2021/9/26 16:53
+ * @Version TODO
+ **/
+@Data
+public class MonitorPointDataDisplayDTO {
+
+ private String deviceName;
+
+ private String organizationName;
+
+ private String time;
+
+ private Map<String,Object> values;
+
+}
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
new file mode 100644
index 0000000..21083f0
--- /dev/null
+++ b/screen-api/src/main/java/com/moral/api/pojo/form/dataDisplay/MonitorPointDataDisplayForm.java
@@ -0,0 +1,82 @@
+package com.moral.api.pojo.form.dataDisplay;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.moral.constant.Constants;
+import com.moral.util.DateUtils;
+import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.util.Date;
+
+/**
+ * @ClassName MonitorPointDataDisplayForm
+ * @Description TODO
+ * @Author ���������
+ * @Date 2021/9/26 10:03
+ * @Version TODO
+ **/
+@Data
+public class MonitorPointDataDisplayForm {
+
+ /*
+ * ������id
+ * */
+ private Integer monitorPointId;
+
+ /*
+ * ������������
+ * */
+ @DateTimeFormat(pattern = "yyyy-MM-dd")
+ @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
+ private Date startTime;
+
+ /*
+ * ������������
+ * */
+ @DateTimeFormat(pattern = "yyyy-MM-dd")
+ @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
+ private Date endTime;
+
+ /*
+ * ���������������������������������������
+ * */
+ private String reportType;
+
+ /*
+ * ������������������������
+ * */
+ public boolean valid() {
+ if (monitorPointId == null)
+ return false;
+ 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";
+ endTime = DateUtils.getDate(endTimeStr,"yyyy-MM-dd HH:mm:ss");
+ } else {
+ if (reportType.equals(Constants.HOURYLYREPORT)) {
+ //������������������������������������������
+ Date previousHour = DateUtils.getDateOfMin(new Date(), -60);
+ startTime = DateUtils.getHourlyStartTime(previousHour);
+ } else if (reportType.equals(Constants.DAILYREPORT)) {
+ //������������������������������������
+ Date yesterday = DateUtils.getDateOfDay(new Date(),-1);
+ startTime = DateUtils.getDailyStartTime(yesterday);
+ } else if (reportType.equals(Constants.WEEKLYREPORT)) {
+ //������������������������������������
+ Date previous = DateUtils.getDateOfDay(new Date(),-7);
+ startTime = DateUtils.getWeeklyStartTime(previous);
+ } else if (reportType.equals(Constants.MONTHLYREPORT)) {
+ //������������������������������������
+ Date lastMonthFirstDay = DateUtils.getFirstDayOfLastMonth();
+ startTime = DateUtils.getMonthlyStartTime(lastMonthFirstDay);
+ } else
+ return false;
+ }
+ return true;
+ }
+
+}
diff --git a/screen-api/src/main/java/com/moral/api/pojo/form/uav/UAVQueryTimeSlotForm.java b/screen-api/src/main/java/com/moral/api/pojo/form/uav/UAVQueryTimeSlotForm.java
index c182c07..f0731ae 100644
--- a/screen-api/src/main/java/com/moral/api/pojo/form/uav/UAVQueryTimeSlotForm.java
+++ b/screen-api/src/main/java/com/moral/api/pojo/form/uav/UAVQueryTimeSlotForm.java
@@ -49,9 +49,8 @@
)
return false;
//������������������������������������
- List<Date> dates = DateUtils.dateToStartAndEndTime(date);
- startDate = dates.get(0);
- endDate = dates.get(1);
+ startDate = DateUtils.getDailyStartTime(date);
+ endDate = DateUtils.getDailyEndTime(date);
return true;
}
}
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
new file mode 100644
index 0000000..869e0a3
--- /dev/null
+++ b/screen-api/src/main/java/com/moral/api/service/DataDisplayService.java
@@ -0,0 +1,22 @@
+package com.moral.api.service;
+
+import com.moral.api.pojo.form.dataDisplay.MonitorPointDataDisplayForm;
+
+/**
+* @Description: ���������������������������
+ * @Param:
+ * @return:
+ * @Author: ���������
+ * @Date: 2021/9/26
+ */
+public interface DataDisplayService {
+
+ /**
+ * @Description: ������������������������������
+ * @Param: [form]
+ * @return: void
+ * @Author: ���������
+ * @Date: 2021/9/26
+ */
+ void getMonitorPointDisplayData(MonitorPointDataDisplayForm form);
+}
diff --git a/screen-api/src/main/java/com/moral/api/service/HistoryDailyService.java b/screen-api/src/main/java/com/moral/api/service/HistoryDailyService.java
index 0af6948..a1bdd7b 100644
--- a/screen-api/src/main/java/com/moral/api/service/HistoryDailyService.java
+++ b/screen-api/src/main/java/com/moral/api/service/HistoryDailyService.java
@@ -1,5 +1,7 @@
package com.moral.api.service;
+import java.util.Date;
+import java.util.List;
import java.util.Map;
import com.moral.api.entity.HistoryDaily;
@@ -18,4 +20,31 @@
//���������������������������������
Map<String, Object> getMonthAvg(Map<String, Object> params);
+ /**
+ * @Description: ���������������������������������
+ * @Param: [mac, date]
+ * @return: com.moral.api.entity.HistoryDaily
+ * @Author: ���������
+ * @Date: 2021/9/26
+ */
+ HistoryDaily getHistoryDailyByMacAndDate(String mac,Date date);
+
+ /**
+ * @Description: ������������mac������������������������������,key���mac���value���������
+ * @Param: [mac, date]
+ * @return: java.util.Map<java.lang.String,com.moral.api.entity.HistoryDaily>
+ * @Author: ���������
+ * @Date: 2021/9/26
+ */
+ Map<String,HistoryDaily> getHistoryDailyByMacsAndDate(List<String> mac, Date date);
+
+ /**
+ * @Description: ������������mac���������������������������
+ * @Param: [mac, startDate, endDate]
+ * @return: java.util.Map<java.lang.String,com.moral.api.entity.HistoryDaily>
+ * @Author: ���������
+ * @Date: 2021/9/26
+ */
+ List<HistoryDaily> getHistoryDailyByMacAndTimeSlot( String mac, Date startDate,Date endDate);
+
}
diff --git a/screen-api/src/main/java/com/moral/api/service/MonitorPointService.java b/screen-api/src/main/java/com/moral/api/service/MonitorPointService.java
index 4d2668f..953a122 100644
--- a/screen-api/src/main/java/com/moral/api/service/MonitorPointService.java
+++ b/screen-api/src/main/java/com/moral/api/service/MonitorPointService.java
@@ -25,6 +25,13 @@
*/
List<MonitorPoint> queryByOrgIdAndRegionCode(MonitorPointQueryForm form);
+ /**
+ * @Description: ������������id������������������������
+ * @Param: [organizationId]
+ * @return: java.util.List<com.moral.api.entity.MonitorPoint>
+ * @Author: ���������
+ * @Date: 2021/9/26
+ */
List<MonitorPoint> queryAllMonitorPoints(Integer organizationId);
diff --git a/screen-api/src/main/java/com/moral/api/service/OrganizationService.java b/screen-api/src/main/java/com/moral/api/service/OrganizationService.java
index ddb13eb..c7f33b8 100644
--- a/screen-api/src/main/java/com/moral/api/service/OrganizationService.java
+++ b/screen-api/src/main/java/com/moral/api/service/OrganizationService.java
@@ -24,4 +24,13 @@
*/
List<Organization> getChildrenOrganizationsById(Integer id);
+ /**
+ * @Description: ������id������������
+ * @Param: [id]
+ * @return: com.moral.api.entity.Organization
+ * @Author: ���������
+ * @Date: 2021/9/26
+ */
+ Organization getOrganizationById(Integer id);
+
}
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
new file mode 100644
index 0000000..971a459
--- /dev/null
+++ b/screen-api/src/main/java/com/moral/api/service/impl/DataDisplayServiceImpl.java
@@ -0,0 +1,173 @@
+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.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 org.springframework.beans.factory.annotation.Autowired;
+
+import java.util.*;
+
+/**
+ * @ClassName DataDisplayServiceImpl
+ * @Description TODO
+ * @Author ���������
+ * @Date 2021/9/26 9:55
+ * @Version TODO
+ **/
+public class DataDisplayServiceImpl implements DataDisplayService {
+
+ @Autowired
+ DeviceService deviceService;
+ @Autowired
+ HistoryDailyService historyDailyService;
+ @Autowired
+ OrganizationService organizationService;
+
+
+ @Override
+ public void getMonitorPointDisplayData(MonitorPointDataDisplayForm form) {
+ //������
+ Integer monitorPointId = form.getMonitorPointId();
+ String reportType = form.getReportType();
+ Date startTime = form.getStartTime();
+ Date endTime = form.getEndTime();
+ //������������id������������������������������
+ List<Device> devices = deviceService.getDevicesByMonitorPointId(monitorPointId);
+ Map<String, Device> deviceMap = new HashMap<>();
+ List<String> macs = new ArrayList<>();
+ devices.forEach(value -> {
+ macs.add(value.getMac());
+ deviceMap.put(value.getMac(), value);
+ });
+ //���������������������null������������������������������������������������������
+ 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);
+ });
+ }
+ }
+
+
+ /**
+ * @Description: ������������������������������
+ * @Param: [macDatasMap] key���mac,value������������������������������������
+ * @return: void
+ * @Author: ���������
+ * @Date: 2021/9/26
+ */
+ private void 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();
+ //������������������
+ String deviceName = deviceMap.get(key).getName();
+ //������������������
+ organizationService.getOrganizationById(deviceMap.get(key).getOrganizationId());
+ //������������
+ String startTime = DateUtils.dateToDateString(startDate, "yyyy-MM-dd");
+ String endTime = DateUtils.dateToDateString(endDate, "yyyy-MM-dd");
+ String time = startTime + " - " + endTime;
+ //������������������
+ Double AQINum = 0d;
+ Double PM25Num = 0d;
+ Double PM10Num = 0d;
+ Double SO2Num = 0d;
+ Double NO2Num = 0d;
+ Double CONum = 0d;
+ Double O3Num = 0d;
+ Double TVOCNum = 0d;
+ //������AQI,PM2.5,PM10,SO2,NO2,CO,O3,TVOC���������
+ Double AQISum = 0d;
+ Double PM25Sum = 0d;
+ Double PM10Sum = 0d;
+ Double SO2Sum = 0d;
+ Double NO2Sum = 0d;
+ Double COSum = 0d;
+ Double O3Sum = 0d;
+ Double TVOCSum = 0d;
+ for (HistoryDaily historyDaily : value) {
+ //������������map
+ Map<String, Object> valueMap = JSON.parseObject(historyDaily.getValue(), Map.class);
+ Object SO2 = valueMap.get("a21026");
+ Object NO2 = valueMap.get("a21004");
+ Object PM10 = valueMap.get("a34002");
+ Object PM25 = valueMap.get("a34004");
+ Object CO = valueMap.get("a21005");
+ Object O3 = valueMap.get("a05024");
+ Object TVOC = valueMap.get("a99054");
+ if (SO2 != null) {
+ SO2Sum = MathUtils.add(SO2Sum, Double.valueOf(SO2.toString()));
+ SO2Num++;
+ }
+ if (NO2 != null) {
+ NO2Sum = MathUtils.add(NO2Sum, Double.valueOf(NO2.toString()));
+ NO2Num++;
+ }
+ if (PM10 != null) {
+ PM10Sum = MathUtils.add(PM10Sum, Double.valueOf(PM10.toString()));
+ PM10Num++;
+ }
+ if (CO != null) {
+ COSum = MathUtils.add(COSum, Double.valueOf(CO.toString()));
+ CONum++;
+ }
+ if (PM25 != null) {
+ PM25Sum = MathUtils.add(PM25Sum, Double.valueOf(PM25.toString()));
+ PM25Num++;
+ }
+ if (O3 != null) {
+ O3Sum = MathUtils.add(O3Sum, Double.valueOf(O3.toString()));
+ O3Num++;
+ }
+ if (TVOC != null) {
+ TVOCSum = MathUtils.add(TVOCSum, Double.valueOf(TVOC.toString()));
+ TVOCNum++;
+ }
+ //���AQI
+ int aqi = AQIUtils.hourlyAqi(valueMap);
+ if (aqi != 0) {
+ AQISum += Double.valueOf(aqi);
+ }
+ }
+ //������aqi������
+ double AQID = AmendUtils.sciCal(AQISum / AQINum, 0);
+ int AQIAvg = new Double(AQID).intValue();
+ //������PM2.5������
+ double PM25D = AmendUtils.sciCal(PM25Sum / PM25Num, 0);
+ int PM25Avg = new Double(PM25D).intValue();
+ //������PM10������
+ double PM10D = AmendUtils.sciCal(PM10Sum / PM10Num,0);
+ int PM10Avg = new Double(PM10D).intValue();
+ //������SO2������
+ double SO2D = AmendUtils.sciCal(SO2Sum / SO2Num,0);
+ int SO2Avg = new Double(SO2D).intValue();
+ //������NO2������
+ double NO2D = AmendUtils.sciCal(NO2Sum / NO2Num,0);
+ int NO2Avg = new Double(NO2D).intValue();
+ //������CO���������������������������
+ double COAvg = AmendUtils.sciCal(COSum / CONum,2);
+ //������O3������
+ double O3D = AmendUtils.sciCal(O3Sum / O3Num,0);
+ int O3Avg = new Double(O3D).intValue();
+ //������TVOC������,������������������
+ double TVOCAvg = AmendUtils.sciCal(TVOCSum / TVOCNum,2);
+
+
+ });
+ }
+
+
+
+}
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 5c1316e..4895d63 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
@@ -1,5 +1,6 @@
package com.moral.api.service.impl;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.moral.api.entity.HistoryDaily;
import com.moral.api.mapper.HistoryDailyMapper;
import com.moral.api.service.HistoryDailyService;
@@ -11,7 +12,9 @@
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;
/**
@@ -41,4 +44,37 @@
result.put("avg", data.get(params.get("sensorCode")));
return result;
}
+
+ @Override
+ public HistoryDaily getHistoryDailyByMacAndDate(String mac, Date date) {
+ QueryWrapper<HistoryDaily> wrapper = new QueryWrapper<>();
+ wrapper.eq("mac",mac);
+ wrapper.eq("time",date);
+ List<HistoryDaily> historyDailies = historyDailyMapper.selectList(wrapper);
+ return historyDailies.get(0);
+ }
+
+ @Override
+ public Map<String, HistoryDaily> getHistoryDailyByMacsAndDate(List<String> mac, Date date) {
+ QueryWrapper<HistoryDaily> wrapper = new QueryWrapper<>();
+ wrapper.in("mac",mac);
+ wrapper.eq("time",date);
+ List<HistoryDaily> historyDailies = historyDailyMapper.selectList(wrapper);
+ Map<String,HistoryDaily> map = new HashMap<>();
+ for (HistoryDaily historyDaily : historyDailies) {
+ map.put(historyDaily.getMac(),historyDaily);
+ }
+ return map;
+ }
+
+ @Override
+ public List<HistoryDaily> getHistoryDailyByMacAndTimeSlot(String mac, Date startDate, Date endDate) {
+ QueryWrapper<HistoryDaily> wrapper = new QueryWrapper<>();
+ wrapper.in("mac",mac);
+ wrapper.between("time",startDate,endDate);
+ List<HistoryDaily> historyDailies = historyDailyMapper.selectList(wrapper);
+ return historyDailies;
+ }
+
+
}
diff --git a/screen-api/src/main/java/com/moral/api/service/impl/OrganizationServiceImpl.java b/screen-api/src/main/java/com/moral/api/service/impl/OrganizationServiceImpl.java
index ca4669a..0e406e1 100644
--- a/screen-api/src/main/java/com/moral/api/service/impl/OrganizationServiceImpl.java
+++ b/screen-api/src/main/java/com/moral/api/service/impl/OrganizationServiceImpl.java
@@ -35,6 +35,11 @@
return childrenOrganization;
}
+ @Override
+ public Organization getOrganizationById(Integer id) {
+ return organizationMapper.selectById(id);
+ }
+
/**
* @Description: ���������������������������������������������������children���
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 1d6250d..b780f74 100644
--- a/screen-common/src/main/java/com/moral/constant/Constants.java
+++ b/screen-common/src/main/java/com/moral/constant/Constants.java
@@ -219,5 +219,25 @@
* */
public static final String SPECIAL_DEVICE_UAV = "1";
+ /*
+ * ������
+ * */
+ public static final String HOURYLYREPORT = "0";
+
+ /*
+ * ������
+ * */
+ public static final String DAILYREPORT = "1";
+
+ /*
+ * ������
+ * */
+ public static final String WEEKLYREPORT = "2";
+
+ /*
+ * ������
+ * */
+ public static final String MONTHLYREPORT = "3";
+
}
diff --git a/screen-common/src/main/java/com/moral/util/ComprehensiveIndexUtils.java b/screen-common/src/main/java/com/moral/util/ComprehensiveIndexUtils.java
new file mode 100644
index 0000000..9f9b368
--- /dev/null
+++ b/screen-common/src/main/java/com/moral/util/ComprehensiveIndexUtils.java
@@ -0,0 +1,164 @@
+package com.moral.util;
+
+import java.util.*;
+
+/**
+ * @ClassName ComprehensiveIndexUtils
+ * @Description ���������������������������
+ * @Author ���������
+ * @Date 2021/9/27 9:40
+ * @Version TODO
+ **/
+public class ComprehensiveIndexUtils {
+
+ /**
+ * @Description: ������������������������������������������������������map������������������
+ * @Param: [datas]
+ * @return: Double
+ * @Author: ���������
+ * @Date: 2021/9/27
+ */
+ public static Double monthData(List<Map<String, Object>> datas) {
+ //���������������������������������������
+ Map<String, Double> CValueMap = calCValue(datas);
+ if (CValueMap == null)
+ return null;
+ Double CSO2 = CValueMap.get("CSO2");
+ Double CNO2 = CValueMap.get("CNO2");
+ Double CPM25 = CValueMap.get("CPM25");
+ Double CPM10 = CValueMap.get("CPM10");
+ Double CCO = CValueMap.get("CCO");
+ Double CO3 = CValueMap.get("CO3");
+ //S���������������������������������������(���������������CO������������������������������������������������O3���������������������������������������)
+ //������������GB 3095-2012
+ Double SSO2 = 60d;
+ Double SNO2 = 40d;
+ Double SPM25 = 35d;
+ Double SPM10 = 70d;
+ Double SCO = 4d;
+ Double SO3 = 160d;
+ //���������������������������
+ Double ISO2 = CSO2 / SSO2;
+ Double INO2 = CNO2 / SNO2;
+ Double IPM25 = CPM25 / SPM25;
+ Double IPM10 = CPM10 / SPM10;
+ 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;
+ }
+
+ /**
+ * @Description: ������������������������
+ * SO2 NO2 PM10 PM2.5������������������CO���������������������������������������O3���������������������������������������������
+ * @Param: [datas]
+ * @return: java.util.Map<java.lang.String , java.lang.Object>
+ * @Author: ���������
+ * @Date: 2021/9/27
+ */
+ private static Map<String, Double> calCValue(List<Map<String, Object>> datas) {
+ //���������������
+ Double CSO2;//SO2������������������
+ Double CNO2;//NO2������������������
+ Double CPM10;//PM10������������������
+ Double CPM25;//PM25������������������
+ Double CCO;//CO������������������
+ Double CO3;//O3������������������
+ //������SO2 NO2 PM10 PM2.5���������
+ Double SO2Sum = 0d;
+ Double NO2Sum = 0d;
+ Double PM10Sum = 0d;
+ Double PM25Sum = 0d;
+ Double SO2Num = 0d;
+ Double NO2Num = 0d;
+ Double PM10Num = 0d;
+ Double PM25Num = 0d;
+ for (Map<String, Object> data : datas) {
+ Object SO2 = data.get("a21026");
+ Object NO2 = data.get("a21004");
+ Object PM10 = data.get("a34002");
+ Object PM25 = data.get("a34004");
+ if (SO2 != null) {
+ SO2Num++;
+ SO2Sum = MathUtils.add(SO2Sum, Double.valueOf(SO2.toString()));
+ }
+ if (NO2 != null) {
+ NO2Num++;
+ NO2Sum = MathUtils.add(NO2Sum, Double.valueOf(NO2.toString()));
+ }
+ if (PM10 != null) {
+ PM10Num++;
+ PM10Sum = MathUtils.add(PM10Sum, Double.valueOf(PM10.toString()));
+ }
+ if (PM25 != null) {
+ PM25Num++;
+ PM25Sum = MathUtils.add(PM25Sum, Double.valueOf(PM25.toString()));
+ }
+
+ }
+ CSO2 = SO2Sum / SO2Num;
+ CNO2 = NO2Sum / NO2Num;
+ CPM10 = PM10Sum / PM10Num;
+ CPM25 = PM25Sum / PM25Num;
+ if (CSO2 == 0d || CNO2 == 0d || CPM10 == 0d || CPM25 == 0d)
+ return null;
+
+ /*������CO������������������*/
+ //������CO���������������������������
+ List<Double> COs = getSensorAsc(datas, "a21005");
+ //������95���������
+ if (COs.size() == 0)
+ return null;
+ Double COIndexd = COs.size() * 0.95;
+ int COIndex = new Double(Math.ceil(COIndexd)).intValue();
+ CCO = COs.get(COIndex - 1);
+
+ /*������O3���������������*/
+ //������O3������������������������������������������������
+ List<Double> O3s = getSensorAsc(datas, "a05024");
+ //������90���������
+ if (O3s.size() == 0)
+ return null;
+ Double O3Indexd = O3s.size() * 0.9;
+ int O3Index = new Double(Math.ceil(O3Indexd)).intValue();
+ CO3 = O3s.get(O3Index - 1);
+
+ Map<String, Double> result = new HashMap<>();
+ result.put("CSO2", CSO2);
+ result.put("CNO2", CNO2);
+ result.put("CPM25", CPM25);
+ result.put("CPM10", CPM10);
+ result.put("CCO", CCO);
+ result.put("CO3", CO3);
+ return result;
+ }
+
+ /**
+ * @Description: ���������������������������������
+ * @Param: [datas]
+ * @return: java.util.List<java.lang.Double>
+ * @Author: ���������
+ * @Date: 2021/9/27
+ */
+ private static List<Double> getSensorAsc(List<Map<String, Object>> datas, String sensor) {
+ List<Double> result = new ArrayList<>();
+ datas.forEach(value -> {
+ Object o = value.get(sensor);
+ if (o != null)
+ result.add(Double.valueOf(o.toString()));
+ });
+ Collections.sort(result, new Comparator<Double>() {
+ @Override
+ public int compare(Double o1, Double o2) {
+ return new Double(o1 - o2).intValue();
+ }
+ });
+ return result;
+ }
+
+}
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 a523879..d6a03cb 100644
--- a/screen-common/src/main/java/com/moral/util/DateUtils.java
+++ b/screen-common/src/main/java/com/moral/util/DateUtils.java
@@ -92,25 +92,139 @@
/**
- * @Description: ������������������������������������������������
+ * @Description: ���������������������������������
+ * @Param: [date]
+ * @return: java.util.Date
+ * @Author: ���������
+ * @Date: 2021/9/26
+ */
+ public static Date getHourlyStartTime(Date date){
+ Calendar cal = Calendar.getInstance();
+ cal.setTime(date);
+ cal.set(Calendar.MINUTE,0);
+ cal.set(Calendar.SECOND,0);
+ return cal.getTime();
+ }
+
+ /**
+ * @Description: ���������������������������������
+ * @Param: [date]
+ * @return: java.util.Date
+ * @Author: ���������
+ * @Date: 2021/9/26
+ */
+ public static Date getHourlyEndTime(Date date){
+ Calendar cal = Calendar.getInstance();
+ cal.setTime(date);
+ cal.set(Calendar.MINUTE,59);
+ cal.set(Calendar.SECOND,59);
+ return cal.getTime();
+ }
+
+ /**
+ * @Description: ������������������������������������
* @Param: [date]
* @return: java.util.List<java.util.Date>
* @Author: ���������
* @Date: 2021/9/8
*/
- public static List<Date> dateToStartAndEndTime(Date date) {
+ public static Date getDailyStartTime(Date date) {
String dateStr = dateToDateString(date, "yyyy-MM-dd");
String startDateStr = dateStr + " 00:00:00";
- String endDateStr = dateStr + " 23:59:59";
Date startDate = getDate(startDateStr, "yyyy-MM-dd HH:mm:ss");
+ return startDate;
+ }
+
+ /**
+ * @Description: ���������������������������������������
+ * @Param: [date]
+ * @return: java.util.Date
+ * @Author: ���������
+ * @Date: 2021/9/26
+ */
+ public static Date getDailyEndTime(Date date) {
+ String dateStr = dateToDateString(date, "yyyy-MM-dd");
+ String endDateStr = dateStr + " 23:59:59";
Date endDate = getDate(endDateStr, "yyyy-MM-dd HH:mm:ss");
- ArrayList<Date> dates = new ArrayList<>();
- dates.add(startDate);
- dates.add(endDate);
- return dates;
+ return endDate;
}
+ /**
+ * @Description: ���������������������������������������������������
+ * @Param: [date]
+ * @return: java.util.Date
+ * @Author: ���������
+ * @Date: 2021/9/26
+ */
+ public static Date getWeeklyStartTime(Date date){
+ Calendar cal = Calendar.getInstance();
+ cal.setTime(date);
+ if (1 == cal.get(Calendar.DAY_OF_WEEK)) {
+ cal.add(Calendar.DAY_OF_MONTH, -1);
+ }
+ cal.set(Calendar.DAY_OF_WEEK,Calendar.MONDAY);
+ cal.set(Calendar.HOUR_OF_DAY,0);
+ cal.set(Calendar.MINUTE,0);
+ cal.set(Calendar.SECOND,0);
+ return cal.getTime();
+ }
+
+ /**
+ * @Description: ���������������������������������������������������������
+ * @Param: [date]
+ * @return: java.util.Date
+ * @Author: ���������
+ * @Date: 2021/9/26
+ */
+ public static Date getWeeklyEndTime(Date date){
+ Calendar cal = Calendar.getInstance();
+ cal.setTime(date);
+ if (1 != cal.get(Calendar.DAY_OF_WEEK)) {
+ cal.add(Calendar.DAY_OF_MONTH, 7);
+ }
+ cal.set(Calendar.DAY_OF_WEEK,Calendar.SUNDAY);
+ cal.set(Calendar.HOUR_OF_DAY,23);
+ cal.set(Calendar.MINUTE,59);
+ cal.set(Calendar.SECOND,59);
+ return cal.getTime();
+ }
+
+ /**
+ * @Description: ���������������������������������������������������
+ * @Param: [date]
+ * @return: java.util.Date
+ * @Author: ���������
+ * @Date: 2021/9/26
+ */
+ public static Date getMonthlyStartTime(Date date){
+ Calendar cal = Calendar.getInstance();
+ cal.setTime(date);
+ cal.set(Calendar.DAY_OF_MONTH,cal.getActualMinimum(Calendar.DAY_OF_MONTH));
+ cal.set(Calendar.HOUR_OF_DAY,0);
+ cal.set(Calendar.MINUTE,0);
+ cal.set(Calendar.SECOND,0);
+ return cal.getTime();
+ }
+
+ /**
+ * @Description: ���������������������������������������������������������
+ * @Param: [date]
+ * @return: java.util.Date
+ * @Author: ���������
+ * @Date: 2021/9/26
+ */
+ public static Date getMonthlyEndTime(Date date){
+ Calendar cal = Calendar.getInstance();
+ cal.setTime(date);
+ cal.set(Calendar.DAY_OF_MONTH,cal.getActualMaximum(Calendar.DAY_OF_MONTH));
+ cal.set(Calendar.HOUR_OF_DAY,23);
+ cal.set(Calendar.MINUTE,59);
+ cal.set(Calendar.SECOND,59);
+ return cal.getTime();
+ }
+
+
/**
* @Description: Date���toString������������Date
* @Param: []
@@ -482,6 +596,7 @@
return dateToDateString(now.getTime(), formatStr);
}
+
/**
* ������������������day���������������(formatStr)������������
*
--
Gitblit v1.8.0