From 2685db12198903ccee5b61e65911425776f73bd8 Mon Sep 17 00:00:00 2001
From: kaiyu <404897439@qq.com>
Date: Wed, 21 Oct 2020 16:01:26 +0800
Subject: [PATCH] 修改pom
---
src/main/java/com/moral/service/impl/HistoryMinutelyServiceImpl.java | 279 +++++++++++++++++++++++++++++++++++++++++++++++++++++--
1 files changed, 268 insertions(+), 11 deletions(-)
diff --git a/src/main/java/com/moral/service/impl/HistoryMinutelyServiceImpl.java b/src/main/java/com/moral/service/impl/HistoryMinutelyServiceImpl.java
index 9a24f1b..aea113e 100644
--- a/src/main/java/com/moral/service/impl/HistoryMinutelyServiceImpl.java
+++ b/src/main/java/com/moral/service/impl/HistoryMinutelyServiceImpl.java
@@ -1,7 +1,12 @@
package com.moral.service.impl;
+import com.moral.mapper.*;
+import io.swagger.models.auth.In;
+
import java.math.BigDecimal;
+import java.text.NumberFormat;
import java.text.ParseException;
+import java.text.SimpleDateFormat;
import java.time.Instant;
import java.time.LocalDate;
import java.time.LocalDateTime;
@@ -17,6 +22,7 @@
import java.util.Date;
import java.util.HashMap;
import java.util.HashSet;
+import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
@@ -34,6 +40,7 @@
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.time.DateUtils;
+import org.apache.jasper.compiler.JspUtil;
import org.springframework.stereotype.Service;
import org.springframework.util.ObjectUtils;
@@ -44,16 +51,26 @@
import com.moral.common.util.ReportTimeFormat;
import com.moral.common.util.ResourceUtil;
import com.moral.common.util.ValidateUtil;
+import com.moral.entity.Area;
+import com.moral.entity.City;
+import com.moral.entity.MonitorPoint;
+import com.moral.entity.Province;
import com.moral.entity.Sensor;
import com.moral.entity.charts.DataCondition;
import com.moral.entity.charts.LineChartCriteria;
import com.moral.entity.charts.TimePeriod;
import com.moral.mapper.AlarmDailyMapper;
+import com.moral.mapper.AreaMapper;
+import com.moral.mapper.CityMapper;
import com.moral.mapper.DeviceMapper;
import com.moral.mapper.HistoryMapper;
import com.moral.mapper.HistoryMinutelyMapper;
+import com.moral.mapper.MonitorPointMapper;
+import com.moral.mapper.ProvinceMapper;
import com.moral.mapper.SensorMapper;
+import com.moral.mapper.ShAreaMapper;
import com.moral.service.HistoryMinutelyService;
+import com.sun.org.apache.bcel.internal.generic.ANEWARRAY;
import static com.moral.common.bean.Constants.NULL_VALUE;
import static org.springframework.util.ObjectUtils.isEmpty;
@@ -76,6 +93,19 @@
@Resource
private AlarmDailyMapper alarmDailyMapper;
+
+ @Resource
+ private AreaMapper areaMapper;
+
+ @Resource
+ private ProvinceMapper provinceMapper;
+
+ @Resource
+ private CityMapper cityMapper;
+
+ @Resource
+ private MonitorPointMapper monitorPointMapper;
+
@Override
public Map<String, Object> getDayAQIByDevice(Map<String, Object> parameters) {
@@ -361,20 +391,17 @@
}
@Override
- public List<Map<String, Object>> getAreaAvgDataByAreaCode(Map<String, Object> parameters) throws Exception {
+ public List<Map<String, Object>> get(Map<String, Object> parameters) throws Exception {
convertQueryParam(parameters);
if (!ObjectUtils.isEmpty(parameters.get("compensate"))) {
parameters.put("timeUnits", "10min");
}
- return historyMinutelyMapper.getAreaAvgDataByAreaCode(parameters);
-
+ return historyMinutelyMapper.getMultiDeviceSensorData(parameters);
}
@Override
public void convertQueryParam(Map<String, Object> parameters) throws ParseException {
if (!parameters.containsKey("field")) {
- // String type = (String) parameters.get("type");
- // parameters.putAll(getElementByType(type));
ParameterUtils.getElementByType(parameters);
if (parameters.containsKey("timeUnits")) {
if ("minutely".equals(parameters.get("timeUnits"))) {
@@ -382,13 +409,13 @@
String[] timeStr = parameters.get("time").toString().split("-");
int year = Integer.valueOf(timeStr[0]);
int month = Integer.valueOf(timeStr[1]);
- String yearAndMonth;
- if (month < 10) {
- yearAndMonth = "minutely_" + year + "0" + month;
- } else {
- yearAndMonth = "minutely_" + year + month;
- }
if (year >= 2020) {
+ String yearAndMonth;
+ if (month < 10) {
+ yearAndMonth = "minutely_" + year + "0" + month;
+ } else {
+ yearAndMonth = "minutely_" + year + month;
+ }
parameters.put("timeUnits", yearAndMonth);
}
}
@@ -748,4 +775,234 @@
return historyMinutelyMapper.getDevicesSensorsAvgDataToExcel(parameters);
}
+
+ @Override
+ public List<Map<String, Object>> get5MinutesOrHalfHour(Map<String, Object> parameters) throws ParseException {
+ if (parameters.get("city") == null) {
+ return new ArrayList<Map<String, Object>>();
+ }
+ String string = parameters.get("time").toString();
+ String year = string.substring(0, 4);
+ String[] split = string.substring(5).split("-");
+ String month = split[0];
+ String day = split[1];
+ if (split[0].length() < 2) {
+ month = 0 + split[0];
+ }
+ if (split[1].length() < 2) {
+ day = 0 + split[1];
+ }
+ String time = year + "-" + month + "-" + day;
+ String cityName = parameters.get("city").toString();
+ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+ String type = parameters.get("type").toString();
+ String range = parameters.get("range").toString();
+ Area area = areaMapper.getAreaByName(cityName);
+ Integer code;
+ String name;
+ if (area == null) {
+ City city = cityMapper.getCityByName(cityName);
+ if (city == null) {
+ Province province = provinceMapper.getProvinceByName(cityName);
+ code = province.getProvinceCode();
+ name = province.getProvinceName();
+ } else {
+ code = city.getCityCode();
+ name = city.getCityName();
+ }
+ } else {
+ code = area.getAreaCode();
+ name = area.getAreaName();
+ }
+ parameters.put("cityCode", code);
+ parameters.put("name", name);
+ Map<String, Object> map = new HashMap<>();
+ if (code.toString().endsWith("0000")) {
+ map.put("provinceCode", code);
+ } else if (code.toString().endsWith("00")) {
+ map.put("cityCode", code);
+ } else {
+ map.put("areaCode", code);
+ }
+ //List<String> sensorKeys = sensorMapper.getSensorKeys();
+
+ List<String> sensorKeys = new ArrayList<String>();
+ Collections.addAll(sensorKeys, "e1", "e2", "e3", "e4", "e5", "e6", "e7", "e10", "e11", "e12", "e13", "e14", "e15"
+ , "e16", "e17", "e18", "e21", "e23", "e25", "e26", "e27", "e28", "e31", "e33", "e45", "e49", "e97", "e98", "e102");
+
+ String timeUnits = "minutely_" + time.substring(0, 7).replace("-", "");
+ map.put("sensorKeys", sensorKeys);
+ map.put("timeUnits", timeUnits);
+ Calendar cal = Calendar.getInstance();
+ List<Map<String, Object>> resultList = new ArrayList<>();
+ int seg;
+ long startTime;
+ long endTime;
+ int minuteChange;
+ if ("m".equals(type)) {
+ cal.setTime(sdf.parse(time + " 00:05:00"));
+ startTime = cal.getTimeInMillis();
+ cal.add(Calendar.DAY_OF_MONTH, 1);
+ endTime = cal.getTimeInMillis();
+ seg = 5 * 60 * 1000;
+ minuteChange = -5;
+ } else {
+ cal.setTime(sdf.parse(time + " 00:30:00"));
+ startTime = cal.getTimeInMillis();
+ cal.add(Calendar.DAY_OF_MONTH, 1);
+ endTime = cal.getTimeInMillis();
+ seg = 30 * 60 * 1000;
+ minuteChange = -30;
+ }
+ for (long time1 = startTime; time1 < endTime; time1 += seg) {
+ Date end = new Date(time1);
+ cal.setTime(end);
+ cal.add(Calendar.MINUTE, minuteChange);
+ Date start = cal.getTime();
+ map.put("start", start);
+ map.put("end", end);
+ Map<String, Object> dataMap = historyMinutelyMapper.get5MiutesOrHalfHourByDay(map);
+ if (dataMap == null) {
+ break;
+ }
+ dataMap.put("time", sdf.format(end));
+ dataMap.put("city", name);
+ Set<String> set = dataMap.keySet();
+ Iterator<String> it = set.iterator();
+ List<String> listKey = new ArrayList<>();
+ while (it.hasNext()) {
+ String key = it.next();
+ if (dataMap.get(key) == null || "".equals(dataMap.get(key))) {
+ listKey.add(key);
+ }
+ }
+ for (String key : listKey) {
+ dataMap.remove(key);
+ }
+ resultList.add(dataMap);
+ }
+ return resultList;
+ }
+
+ @Override
+ public List<Map<String, Object>> getMultiDeviceSensorData(Map<String, Object> parameters) throws Exception {
+ String sensorKey = parameters.get("sensorKey").toString();
+ String[] macs = parameters.get("macs").toString().split(",");
+ List<String> sensorKeys = new ArrayList<>();
+ sensorKeys.add(sensorKey);
+ parameters.put("sensorKeys", sensorKeys);
+ parameters.put("sensors", sensorKeys);
+ String type = parameters.get("type").toString();
+ List<Map<String, Object>> list = new ArrayList<>();
+ for (int i = 0; i < 31; i++) {
+ list.add(null);
+ }
+ for (String mac : macs) {
+ parameters.put("mac", mac);
+ List<Map<String, Object>> data = getMonitorPointOrDeviceAvgData(parameters);
+ List<Map<String, Object>> l = new ArrayList<>();
+ for (int i = 0; i < 31; i++) {
+ l.add(null);
+ }
+ for (Map<String, Object> dataMap : data) {
+ String time = dataMap.get("time").toString();
+ Integer t = Integer.valueOf(time.substring(time.length() - 2));
+ dataMap.put("time", t);
+ if ("day".equals(type)) {
+ l.set(t, dataMap);
+ } else {
+ l.set(t - 1, dataMap);
+ }
+ }
+ for (int i = 0; i < l.size(); i++) {
+ if (l.get(i) == null) {
+ Map<String, Object> m = new HashMap<>();
+ List<String> v = new ArrayList<>();
+ v.add("");
+ if ("day".equals(type)) {
+ m.put("time", i);
+ } else {
+ m.put("time", i + 1);
+ }
+ m.put("values", v);
+ l.set(i, m);
+ }
+ }
+ data = l;
+ for (Map<String, Object> map : data) {
+ Map<String, Object> hashMap = new HashMap<>();
+ if (map != null) {
+ int t = Integer.valueOf(map.get("time").toString());
+ hashMap.put("time", t);
+ String value;
+ if (map.get(sensorKey) == null) {
+ value = "";
+ } else {
+ value = map.get(sensorKey).toString();
+ }
+ List<String> values;
+
+ if ("day".equals(type)) {
+ t = t + 1;
+ }
+ if (list.get(t - 1) != null) {
+ values = (ArrayList<String>) list.get(t - 1).get("values");
+ } else {
+ values = new ArrayList<>();
+ }
+ values.add(value);
+ hashMap.put("values", values);
+ list.set(t - 1, hashMap);
+ }
+ }
+ }
+ boolean flag = false;
+ Iterator<Map<String, Object>> iterator = list.iterator();
+ int digit = 0;
+ while (iterator.hasNext()) {
+ Map<String, Object> next = iterator.next();
+ ArrayList<String> values = (ArrayList<String>) next.get("values");
+ for (String value : values) {
+ if ("".equals(value)) {
+ flag = true;
+ } else {
+ digit = value.split("\\.")[1].length();
+ flag = false;
+ break;
+ }
+ }
+ if (flag) {
+ iterator.remove();
+ }
+ }
+ NumberFormat nf = NumberFormat.getNumberInstance();
+ nf.setMaximumFractionDigits(digit);
+ for (Map<String, Object> map : list) {
+ int time = Integer.valueOf(map.get("time").toString());
+ ArrayList<String> values = (ArrayList<String>) map.get("values");
+ if (values.size() > 1) {
+ int length = 0;
+ double sum = 0.0;
+ for (String value : values) {
+ if (!"".equals(value)) {
+ Double v = Double.valueOf(value);
+ length += 1;
+ sum += v;
+ }
+ }
+ Double avg = sum / length;
+ String format = nf.format(avg);
+ values.add(format);
+ map.put("values", values);
+ }
+ }
+ return list;
+ }
+
+ @Override
+ public List<Map<String, Object>> getDevicesSensorsToExcel(Map<String, Object> parameters) {
+ String[] sensorKeys = parameters.get("sensorKey").toString().split(",");
+ parameters.put("sensorKeys", Arrays.asList(sensorKeys));
+ return null;
+ }
}
--
Gitblit v1.8.0