From fdc8e1e781851904b05f234523f372c8c1098b69 Mon Sep 17 00:00:00 2001
From: jinpengyong <jpy123456>
Date: Thu, 01 Jul 2021 11:42:45 +0800
Subject: [PATCH] 定时任务CO.O3算法
---
screen-common/src/main/java/com/moral/util/DateUtils.java | 8
screen-job/src/main/java/com/moral/api/service/impl/HistoryFiveMinutelyServiceImpl.java | 28 ++
screen-common/src/main/java/com/moral/constant/KafkaConstants.java | 11
screen-job/src/main/resources/mapper/HistoryWeeklyMapper.xml | 20 ++
screen-job/src/main/java/com/moral/api/service/impl/HistoryWeeklyServiceImpl.java | 147 ++++++++++++++
screen-job/src/main/java/com/moral/api/service/HistoryWeeklyService.java | 18 +
screen-job/src/main/java/com/moral/api/mapper/HistoryWeeklyMapper.java | 21 ++
screen-manage/src/main/java/com/moral/api/kafka/consumer/KafkaConsumer.java | 6
screen-job/src/main/java/com/moral/api/service/impl/HistoryDailyServiceImpl.java | 57 ++---
screen-job/src/main/java/com/moral/api/task/HistoryTableInsertTask.java | 26 +
screen-job/src/main/java/com/moral/api/entity/HistoryWeekly.java | 44 ++++
screen-common/src/main/java/com/moral/constant/Constants.java | 13 +
screen-common/src/main/java/com/moral/util/AmendUtils.java | 168 ++++++++++++++++
13 files changed, 511 insertions(+), 56 deletions(-)
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 75ce9a3..d20f4af 100644
--- a/screen-common/src/main/java/com/moral/constant/Constants.java
+++ b/screen-common/src/main/java/com/moral/constant/Constants.java
@@ -139,5 +139,18 @@
* */
public static final String SENSOR_CODE_TEMP = "a01001";
+ /*
+ * ������code
+ * */
+ public static final String SENSOR_CODE_WIND_DIR = "a01008";
+ /*
+ * ������code
+ * */
+ public static final String SENSOR_CODE_WIND_SPEED = "a01008";
+
+ /*
+ * ������������code
+ * */
+ public static final String SENSOR_CODE_CO= "a21005";
}
diff --git a/screen-common/src/main/java/com/moral/constant/KafkaConstants.java b/screen-common/src/main/java/com/moral/constant/KafkaConstants.java
index 83edd76..2b3a9f2 100644
--- a/screen-common/src/main/java/com/moral/constant/KafkaConstants.java
+++ b/screen-common/src/main/java/com/moral/constant/KafkaConstants.java
@@ -18,12 +18,17 @@
public static final String TOPIC_SECOND = "second_data";
/**
- * ������������������������������������������
+ * ���������������������
*/
- public static final String GROUP_ID_INSERT = "insert";
+ public static final String GROUP_HOUR = "hour";
+
+ /**
+ * ���������������������
+ */
+ public static final String GROUP_MINUTE = "minute";
/**
* ���������������������������������
*/
- public static final String GROUP_ID_STATE = "state";
+ public static final String GROUP_STATE = "state";
}
diff --git a/screen-common/src/main/java/com/moral/util/AmendUtils.java b/screen-common/src/main/java/com/moral/util/AmendUtils.java
new file mode 100644
index 0000000..fde9768
--- /dev/null
+++ b/screen-common/src/main/java/com/moral/util/AmendUtils.java
@@ -0,0 +1,168 @@
+package com.moral.util;
+
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+import com.alibaba.fastjson.JSONObject;
+import com.moral.constant.Constants;
+
+public class AmendUtils {
+ /**
+ * @param value ���������������������������
+ * @param digit ������������������
+ * @return ���������������������������������������
+ */
+ public static double sciCal(double value, int digit) {
+ String result;
+ try {
+ double ratio = Math.pow(10, digit);
+ double _num = value * ratio;
+ double mod = _num % 1;
+ double integer = Math.floor(_num);
+ double returnNum;
+ if (mod > 0.5) {
+ returnNum = (integer + 1) / ratio;
+ } else if (mod < 0.5) {
+ returnNum = integer / ratio;
+ } else {
+ returnNum = (integer % 2 == 0 ? integer : integer + 1) / ratio;
+ }
+ BigDecimal bg = new BigDecimal(returnNum);
+ result = bg.setScale(digit, BigDecimal.ROUND_HALF_UP).toString();
+ } catch (RuntimeException e) {
+ throw e;
+ }
+ return Double.parseDouble(result);
+ }
+
+ /**
+ * @param list ���������[value={"O3"���12},.....]
+ * @return ������������������������������
+ */
+ public static Object getO3AvgOfDay(List<Map<String, Object>> list) {
+ double max;
+ List<Double> avgs = new ArrayList<>();
+ for (int i = 8; i <= 24; i++) {
+ List<Double> data = new ArrayList<>();
+ for (Map<String, Object> dataMap : list) {
+ Map<String, Object> dataValue = JSONObject.parseObject((String) dataMap.get("value"), Map.class);
+ Double o3 = Double.parseDouble(dataValue.get(Constants.SENSOR_CODE_O3).toString());
+ int hour = DateUtils.getHour((Date) dataMap.get("time"));
+ if (hour == 0) {
+ hour = 24;
+ }
+ if (hour <= i && hour >= i - 7) {
+ data.add(o3);
+ }
+ }
+ if (data.size() < 6) {
+ continue;
+ }
+ double average = data.stream().mapToDouble(aDouble -> aDouble).summaryStatistics().getAverage();
+ avgs.add(average);
+ }
+ max = avgs.stream().mapToDouble(aDouble -> aDouble).summaryStatistics().getMax();
+ if (avgs.size() < 14) {
+ if (max < 160d) {
+ return null;
+ }
+ }
+ return sciCal(max, 4);
+ }
+
+ /**
+ * @param list ���������[value={"������"���12������������������200},.....]
+ * @return ���������������������������
+ */
+ public static Object getWindDirAvg(List<Map<String, Object>> list) {
+ double avgDir;
+ double sumSin = 0d;
+ double sumCos = 0d;
+ int size = 0;
+ for (Map<String, Object> map : list) {
+ Map<String, Object> dataValue = JSONObject.parseObject((String) map.get("value"), Map.class);
+ Object wind = dataValue.get(Constants.SENSOR_CODE_WIND_DIR);
+ Object speed = dataValue.get(Constants.SENSOR_CODE_WIND_SPEED);
+ if (wind == null || speed == null) {
+ continue;
+ }
+ size++;
+ int windDir = Integer.parseInt(wind.toString());
+ double windSpeed = Double.parseDouble(speed.toString());
+ double sin = windSpeed * Math.sin(windDir / 180d) * Math.PI;
+ double cos = windSpeed * Math.cos(windDir / 180d) * Math.PI;
+ sumSin += sin;
+ sumCos += cos;
+ }
+ if (size == 0) {
+ return null;
+ }
+ double avgSin = sumSin / size;
+ double avgCos = sumCos / size;
+ if (avgSin > 0 && avgCos > 0) {
+ avgDir = Math.atan(avgSin / avgCos) * 180 / Math.PI;
+ } else if ((avgSin > 0 && avgCos < 0) || (avgSin < 0 && avgCos < 0)) {
+ avgDir = Math.atan(avgSin / avgCos) * 180 / Math.PI + 180;
+ } else {
+ avgDir = Math.atan(avgSin / avgCos) * 180 / Math.PI + 360;
+ }
+ return sciCal(avgDir, 4);
+ }
+
+ /**
+ * @param data ���������������������������
+ * @param p ������������������95������������p=95
+ * @return ���������������������������
+ */
+ public static double percentile(List<Double> data, int p) {
+ int n = data.size();
+ Collections.sort(data);
+ double v = n / (100 / p);
+ System.out.println(n % (100 / p));
+ if (n % (100 / p) == 0) {
+ if (v == n) {
+ return data.get(n - 1);
+ }
+ return (data.get((int) v - 1) + data.get((int) v)) / 2;
+ }
+ return sciCal(data.get((int) v), 4);
+ }
+
+ public static Object getCOAvgOfWeek(List<Map<String, Object>> list) {
+ List<Double> data = new ArrayList<>();
+ for (Map<String, Object> dataMap : list) {
+ Map<String, Object> dataValue = JSONObject.parseObject((String) dataMap.get("value"), Map.class);
+ Object o = dataValue.get(Constants.SENSOR_CODE_CO);
+ if (o == null) {
+ continue;
+ }
+ Double co = Double.parseDouble(o.toString());
+ data.add(co);
+ }
+ if (data.size() == 0) {
+ return null;
+ }
+ return percentile(data, 95);
+ }
+
+ public static Object getO3AvgOfWeek(List<Map<String, Object>> list) {
+ List<Double> data = new ArrayList<>();
+ for (Map<String, Object> dataMap : list) {
+ Map<String, Object> dataValue = JSONObject.parseObject((String) dataMap.get("value"), Map.class);
+ Object o = dataValue.get(Constants.SENSOR_CODE_O3);
+ if (o == null) {
+ continue;
+ }
+ Double o3 = Double.parseDouble(o.toString());
+ data.add(o3);
+ }
+ if (data.size() == 0) {
+ return null;
+ }
+ return percentile(data, 90);
+ }
+}
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 495e929..1542852 100644
--- a/screen-common/src/main/java/com/moral/util/DateUtils.java
+++ b/screen-common/src/main/java/com/moral/util/DateUtils.java
@@ -1310,4 +1310,12 @@
throw new RuntimeException(e);
}
}
+
+ //���������������
+ public static Date geLastWeekMonday() {
+ Calendar cal = Calendar.getInstance();
+ cal.setTime(getDate(getMondayOfThisWeek(),yyyy_MM_dd_EN) );
+ cal.add(Calendar.DATE, -7);
+ return cal.getTime();
+ }
}
diff --git a/screen-job/src/main/java/com/moral/api/entity/HistoryWeekly.java b/screen-job/src/main/java/com/moral/api/entity/HistoryWeekly.java
new file mode 100644
index 0000000..85e065c
--- /dev/null
+++ b/screen-job/src/main/java/com/moral/api/entity/HistoryWeekly.java
@@ -0,0 +1,44 @@
+package com.moral.api.entity;
+
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import java.time.LocalDateTime;
+import java.io.Serializable;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * <p>
+ * ���������
+ * </p>
+ *
+ * @author moral
+ * @since 2021-06-30
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+public class HistoryWeekly extends Model<HistoryWeekly> {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * ������mac
+ */
+ private String mac;
+
+ /**
+ * ������
+ */
+ private LocalDateTime time;
+
+ /**
+ * ������
+ */
+ private String value;
+
+
+ @Override
+ protected Serializable pkVal() {
+ return null;
+ }
+
+}
diff --git a/screen-job/src/main/java/com/moral/api/mapper/HistoryWeeklyMapper.java b/screen-job/src/main/java/com/moral/api/mapper/HistoryWeeklyMapper.java
new file mode 100644
index 0000000..2e3aef9
--- /dev/null
+++ b/screen-job/src/main/java/com/moral/api/mapper/HistoryWeeklyMapper.java
@@ -0,0 +1,21 @@
+package com.moral.api.mapper;
+
+import java.util.List;
+import java.util.Map;
+
+import com.moral.api.entity.HistoryWeekly;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ * ��������� Mapper ������
+ * </p>
+ *
+ * @author moral
+ * @since 2021-06-30
+ */
+public interface HistoryWeeklyMapper extends BaseMapper<HistoryWeekly> {
+
+ void insertHistoryWeekly(List<Map<String,Object>> list);
+
+}
diff --git a/screen-job/src/main/java/com/moral/api/service/HistoryWeeklyService.java b/screen-job/src/main/java/com/moral/api/service/HistoryWeeklyService.java
new file mode 100644
index 0000000..506c43a
--- /dev/null
+++ b/screen-job/src/main/java/com/moral/api/service/HistoryWeeklyService.java
@@ -0,0 +1,18 @@
+package com.moral.api.service;
+
+import com.moral.api.entity.HistoryWeekly;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ * ��������� ���������
+ * </p>
+ *
+ * @author moral
+ * @since 2021-06-30
+ */
+public interface HistoryWeeklyService extends IService<HistoryWeekly> {
+
+ void insertHistoryWeekly();
+
+}
diff --git a/screen-job/src/main/java/com/moral/api/service/impl/HistoryDailyServiceImpl.java b/screen-job/src/main/java/com/moral/api/service/impl/HistoryDailyServiceImpl.java
index eec1a25..40a1e1a 100644
--- a/screen-job/src/main/java/com/moral/api/service/impl/HistoryDailyServiceImpl.java
+++ b/screen-job/src/main/java/com/moral/api/service/impl/HistoryDailyServiceImpl.java
@@ -11,6 +11,7 @@
import com.moral.api.service.HistoryHourlyService;
import com.moral.api.service.SensorService;
import com.moral.constant.Constants;
+import com.moral.util.AmendUtils;
import com.moral.util.DateUtils;
import org.springframework.beans.factory.annotation.Autowired;
@@ -46,10 +47,8 @@
@Autowired
private HistoryHourlyService historyHourlyService;
-
@Override
public void insertHistoryDaily() {
-
String format = DateUtils.yyyy_MM_dd_EN;
Date now = new Date();
//������������
@@ -82,14 +81,20 @@
List<Map<String, Object>> tempValue = new ArrayList<>(value);
value.removeIf(map -> ((Date) map.get("time")).getTime() == start.getTime());
- //������8���������������
- double o3AvgOfDay = getO3AvgOfDay(value);
- jsonMap.put(Constants.SENSOR_CODE_O3, o3AvgOfDay);
- System.out.println("������==" + value);
-
- //���������������������������
+ //������8������������������������������������
+ Object o3AvgOfDay = AmendUtils.getO3AvgOfDay(value);
+ if (o3AvgOfDay != null) {
+ jsonMap.put(Constants.SENSOR_CODE_O3, o3AvgOfDay);
+ }
+ //������������������������������������
tempValue.removeIf(map -> ((Date) map.get("time")).getTime() == end.getTime());
- System.out.println("������������==" + tempValue);
+
+ //���������������������������
+ Object windDirAvg = AmendUtils.getWindDirAvg(value);
+ if (windDirAvg != null) {
+ jsonMap.put(Constants.SENSOR_CODE_WIND_DIR, windDirAvg);
+ }
+
sensorCodes.forEach(sensorCode -> {
OptionalDouble optionalDouble = tempValue.parallelStream()
.flatMapToDouble(v -> {
@@ -104,41 +109,19 @@
return DoubleStream.of(Double.parseDouble(sensorValue.toString()));
}).average();
if (optionalDouble.isPresent()) {
- jsonMap.put(sensorCode.toString(), Double.parseDouble(String.format("%.4f", optionalDouble.getAsDouble())));
+ //���������������������
+ double sciCal = AmendUtils.sciCal(optionalDouble.getAsDouble(), 4);
+ jsonMap.put(sensorCode.toString(), sciCal);
}
});
dataMap.put("value", JSONObject.toJSONString(jsonMap));
insertData.add(dataMap);
});
- //������8���������������
- System.out.println(insertData);
+ //���������������
historyDailyMapper.insertHistoryDaily(insertData);
}
- //������8���������������
- private double getO3AvgOfDay(List<Map<String, Object>> list) {
- double max = 0d;
- for (int i = 8; i <= 24; i++) {
- List<Double> data = new ArrayList<>();
- for (Map<String, Object> dataMap : list) {
- Map<String, Object> dataValue = JSONObject.parseObject((String) dataMap.get("value"), Map.class);
- Double o3 = Double.parseDouble(dataValue.get(Constants.SENSOR_CODE_O3).toString());
- int hour = DateUtils.getHour((Date) dataMap.get("time"));
- if (hour == 0) {
- hour = 24;
- }
- if (hour <= i && hour >= i - 7) {
- data.add(o3);
- }
- }
- double average = data.stream().mapToDouble(aDouble -> aDouble).summaryStatistics().getAverage();
- if (max < average) {
- max = average;
- }
- }
- return Double.parseDouble(String.format("%.4f", max));
- }
public static void main(String[] args) {
List<Integer> list = new ArrayList<>();
@@ -148,7 +131,7 @@
list.add(18);//4
list.add(16);//5
list.add(22);//6
- list.add(4);//8
+ list.add(4);//7
list.add(12);
list.add(28);
list.add(26);
@@ -165,7 +148,7 @@
list.add(12);
list.add(10);
list.add(5);
- list.add(88);
+ list.add(88);//24
Integer max = 0;
for (int i = 7; i < list.size(); i++) {
Integer sum = 0;
diff --git a/screen-job/src/main/java/com/moral/api/service/impl/HistoryFiveMinutelyServiceImpl.java b/screen-job/src/main/java/com/moral/api/service/impl/HistoryFiveMinutelyServiceImpl.java
index e762167..1b3c45d 100644
--- a/screen-job/src/main/java/com/moral/api/service/impl/HistoryFiveMinutelyServiceImpl.java
+++ b/screen-job/src/main/java/com/moral/api/service/impl/HistoryFiveMinutelyServiceImpl.java
@@ -21,6 +21,7 @@
import com.moral.api.service.HistoryMinutelyService;
import com.moral.api.service.SensorService;
import com.moral.constant.Constants;
+import com.moral.util.AmendUtils;
import com.moral.util.DateUtils;
@Service
@@ -72,9 +73,17 @@
data.forEach((key, value) -> {
Map<String, Object> dataMap = new HashMap<>();
- Map<String, Object> jsonMap = new HashMap<>();
dataMap.put("mac", key);
dataMap.put("time", end);
+ Map<String, Object> jsonMap = new HashMap<>();
+
+ //���������������������������
+ Object windDirAvg = AmendUtils.getWindDirAvg(value);
+ if (windDirAvg != null) {
+ jsonMap.put(Constants.SENSOR_CODE_WIND_DIR, windDirAvg);
+ }
+
+ //������������������������������������
sensorCodes.forEach(sensorCode -> {
OptionalDouble optionalDouble = value.parallelStream()
.flatMapToDouble(v -> {
@@ -83,10 +92,16 @@
if (ObjectUtils.isEmpty(sensorValue)) {
return null;
}
+ //������������������
+ if (Constants.SENSOR_CODE_WIND_DIR.equals(sensorCode)) {
+ return null;
+ }
return DoubleStream.of(Double.parseDouble(sensorValue.toString()));
}).average();
if (optionalDouble.isPresent()) {
- jsonMap.put(sensorCode.toString(), Double.parseDouble(String.format("%.4f", optionalDouble.getAsDouble())));
+ //���������������������
+ double sciCal = AmendUtils.sciCal(optionalDouble.getAsDouble(), 4);
+ jsonMap.put(sensorCode.toString(), sciCal);
}
});
dataMap.put("value", JSONObject.toJSONString(jsonMap));
@@ -95,11 +110,13 @@
//5���������������
String insertTimeUnits = DateUtils.dateToDateString(now, DateUtils.yyyyMM_EN);
+ //���������������
historyFiveMinutelyMapper.insertHistoryFiveMinutely(insertData, insertTimeUnits);
}
+
public static void main(String[] args) {
- //������������
+ /* //������������
List<Map<String, Object>> list = new ArrayList<>();
Map<String, Object> map1 = new HashMap<>();
map1.put("mac", "p5dnd1234567");
@@ -154,6 +171,9 @@
});
- System.out.println("666==" + insertData);
+ System.out.println("666==" + insertData);*/
+
+ double a = 5.5d;
+ System.out.println(Math.round(a));
}
}
diff --git a/screen-job/src/main/java/com/moral/api/service/impl/HistoryWeeklyServiceImpl.java b/screen-job/src/main/java/com/moral/api/service/impl/HistoryWeeklyServiceImpl.java
new file mode 100644
index 0000000..95bf167
--- /dev/null
+++ b/screen-job/src/main/java/com/moral/api/service/impl/HistoryWeeklyServiceImpl.java
@@ -0,0 +1,147 @@
+package com.moral.api.service.impl;
+
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.moral.api.entity.HistoryDaily;
+import com.moral.api.entity.HistoryWeekly;
+import com.moral.api.entity.Sensor;
+import com.moral.api.mapper.HistoryWeeklyMapper;
+import com.moral.api.service.HistoryDailyService;
+import com.moral.api.service.HistoryWeeklyService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.moral.api.service.SensorService;
+import com.moral.constant.Constants;
+import com.moral.util.AmendUtils;
+import com.moral.util.DateUtils;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.util.ObjectUtils;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.OptionalDouble;
+import java.util.stream.Collectors;
+import java.util.stream.DoubleStream;
+
+/**
+ * <p>
+ * ��������� ���������������
+ * </p>
+ *
+ * @author moral
+ * @since 2021-06-30
+ */
+@Service
+public class HistoryWeeklyServiceImpl extends ServiceImpl<HistoryWeeklyMapper, HistoryWeekly> implements HistoryWeeklyService {
+
+ @Autowired
+ private HistoryWeeklyMapper historyWeeklyMapper;
+
+ @Autowired
+ private SensorService sensorService;
+
+ @Autowired
+ private HistoryDailyService historyDailyService;
+
+ @Override
+ public void insertHistoryWeekly() {
+ Date now = new Date();
+ //������������������������
+ Date start = DateUtils.geLastWeekMonday();
+ //������
+ QueryWrapper<Sensor> sensorQueryWrapper = new QueryWrapper<>();
+ sensorQueryWrapper.select("code").eq("is_delete", Constants.NOT_DELETE);
+ List<Object> sensorCodes = sensorService.listObjs(sensorQueryWrapper);
+
+ //���������������������������
+ QueryWrapper<HistoryDaily> historyDailyQueryWrapper = new QueryWrapper<>();
+ historyDailyQueryWrapper.ge("time", DateUtils.dateToDateString(start)).lt("time", DateUtils.dateToDateString(now));
+ List<Map<String, Object>> weeklyData = historyDailyService.listMaps(historyDailyQueryWrapper);
+
+ //���mac������
+ Map<String, List<Map<String, Object>>> data = weeklyData.parallelStream().collect(Collectors.groupingBy(o -> (String) o.get("mac")));
+
+ //���������������������������
+ List<Map<String, Object>> insertData = new ArrayList<>();
+
+ data.forEach((key, value) -> {
+ Map<String, Object> dataMap = new HashMap<>();
+ Map<String, Object> jsonMap = new HashMap<>();
+ dataMap.put("mac", key);
+ dataMap.put("time", start);
+
+ //���������������������������
+ Object windDirAvg = AmendUtils.getWindDirAvg(value);
+ if (windDirAvg != null) {
+ jsonMap.put(Constants.SENSOR_CODE_WIND_DIR, windDirAvg);
+ }
+
+ //CO 95������������������������
+ Object coAvg = AmendUtils.getCOAvgOfWeek(value);
+ if (coAvg != null) {
+ jsonMap.put(Constants.SENSOR_CODE_CO, coAvg);
+ }
+
+ //CO 90������������������������
+ Object o3Avg = AmendUtils.getO3AvgOfWeek(value);
+ if (o3Avg != null) {
+ jsonMap.put(Constants.SENSOR_CODE_O3, o3Avg);
+ }
+
+ sensorCodes.forEach(sensorCode -> {
+ OptionalDouble optionalDouble = value.parallelStream()
+ .flatMapToDouble(v -> {
+ Map<String, Object> dataValue = JSONObject.parseObject((String) v.get("value"), Map.class);
+ Object sensorValue = dataValue.get(sensorCode.toString());
+ if (ObjectUtils.isEmpty(sensorValue)) {
+ return null;
+ }
+ //������������������
+ if (Constants.SENSOR_CODE_WIND_DIR.equals(sensorCode)) {
+ return null;
+ }
+ //CO������������
+ if (Constants.SENSOR_CODE_CO.equals(sensorCode)) {
+ return null;
+ }
+ //O3������������
+ if (Constants.SENSOR_CODE_O3.equals(sensorCode)) {
+ return null;
+ }
+ return DoubleStream.of(Double.parseDouble(sensorValue.toString()));
+ }).average();
+ if (optionalDouble.isPresent()) {
+ //���������������������
+ double sciCal = AmendUtils.sciCal(optionalDouble.getAsDouble(), 4);
+ jsonMap.put(sensorCode.toString(), sciCal);
+ }
+ });
+ dataMap.put("value", JSONObject.toJSONString(jsonMap));
+ insertData.add(dataMap);
+ });
+
+ //���������������
+ historyWeeklyMapper.insertHistoryWeekly(insertData);
+ }
+
+ public static void main(String[] args) {
+ List<Double> data = new ArrayList<>();
+ data.add(7d);
+ data.add(15d);
+ data.add(36d);
+ data.add(39d);
+ data.add(40d);
+ data.add(41d);
+ data.add(20d);
+ data.add(18d);
+ System.out.println(data);
+ System.out.println(AmendUtils.percentile(data, 95));
+
+ }
+
+
+}
diff --git a/screen-job/src/main/java/com/moral/api/task/HistoryTableInsertTask.java b/screen-job/src/main/java/com/moral/api/task/HistoryTableInsertTask.java
index fcc205c..88b63a2 100644
--- a/screen-job/src/main/java/com/moral/api/task/HistoryTableInsertTask.java
+++ b/screen-job/src/main/java/com/moral/api/task/HistoryTableInsertTask.java
@@ -3,16 +3,9 @@
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import com.alibaba.fastjson.JSON;
-import com.moral.api.entity.HistoryDaily;
import com.moral.api.service.HistoryDailyService;
import com.moral.api.service.HistoryFiveMinutelyService;
+import com.moral.api.service.HistoryWeeklyService;
import com.xxl.job.core.biz.model.ReturnT;
import com.xxl.job.core.context.XxlJobHelper;
import com.xxl.job.core.handler.annotation.XxlJob;
@@ -21,10 +14,13 @@
public class HistoryTableInsertTask {
@Autowired
+ private HistoryFiveMinutelyService historyFiveMinutelyService;
+
+ @Autowired
private HistoryDailyService historyDailyService;
@Autowired
- private HistoryFiveMinutelyService historyFiveMinutelyService;
+ private HistoryWeeklyService historyWeeklyService;
//5������������������
@XxlJob("insertHistoryFiveMinutely")
@@ -49,4 +45,16 @@
}
return ReturnT.SUCCESS;
}
+
+ //���������������
+ @XxlJob("insertHistoryWeekly")
+ public ReturnT insertHistoryWeekly() {
+ try {
+ historyWeeklyService.insertHistoryWeekly();
+ } catch (Exception e) {
+ XxlJobHelper.log(e.getMessage());
+ return ReturnT.FAIL;
+ }
+ return ReturnT.SUCCESS;
+ }
}
diff --git a/screen-job/src/main/resources/mapper/HistoryWeeklyMapper.xml b/screen-job/src/main/resources/mapper/HistoryWeeklyMapper.xml
new file mode 100644
index 0000000..c47833f
--- /dev/null
+++ b/screen-job/src/main/resources/mapper/HistoryWeeklyMapper.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.moral.api.mapper.HistoryWeeklyMapper">
+
+ <!-- ������������������������ -->
+ <resultMap id="BaseResultMap" type="com.moral.api.entity.HistoryWeekly">
+ <result column="mac" property="mac"/>
+ <result column="time" property="time"/>
+ <result column="value" property="value"/>
+ </resultMap>
+
+ <insert id="insertHistoryWeekly">
+ INSERT INTO history_weekly
+ VALUES
+ <foreach collection="list" item="item" separator=",">
+ (#{item.mac},#{item.time},#{item.value})
+ </foreach>
+ </insert>
+
+</mapper>
\ No newline at end of file
diff --git a/screen-manage/src/main/java/com/moral/api/kafka/consumer/KafkaConsumer.java b/screen-manage/src/main/java/com/moral/api/kafka/consumer/KafkaConsumer.java
index 94ec2f1..8b185e0 100644
--- a/screen-manage/src/main/java/com/moral/api/kafka/consumer/KafkaConsumer.java
+++ b/screen-manage/src/main/java/com/moral/api/kafka/consumer/KafkaConsumer.java
@@ -37,7 +37,7 @@
private RedisTemplate redisTemplate;
//������������
- @KafkaListener(topics = KafkaConstants.TOPIC_MINUTE, groupId = KafkaConstants.GROUP_ID_INSERT, containerFactory = "kafkaListenerContainerFactory")
+ @KafkaListener(topics = KafkaConstants.TOPIC_MINUTE, groupId = KafkaConstants.GROUP_MINUTE, containerFactory = "kafkaListenerContainerFactory")
public void listenMinute(ConsumerRecord<String, String> record, Acknowledgment ack) {
String msg = record.value();
try {
@@ -68,7 +68,7 @@
}
//������������
- @KafkaListener(topics = KafkaConstants.TOPIC_HOUR, groupId = KafkaConstants.GROUP_ID_INSERT, containerFactory = "kafkaListenerContainerFactory")
+ @KafkaListener(topics = KafkaConstants.TOPIC_HOUR, groupId = KafkaConstants.GROUP_HOUR, containerFactory = "kafkaListenerContainerFactory")
public void listenHour(ConsumerRecord<String, String> record, Acknowledgment ack) {
String msg = record.value();
try {
@@ -99,7 +99,7 @@
}
//������������������������������������������������������
- @KafkaListener(topics = KafkaConstants.TOPIC_SECOND, groupId = KafkaConstants.GROUP_ID_STATE, containerFactory = "kafkaListenerContainerFactory")
+ @KafkaListener(topics = KafkaConstants.TOPIC_SECOND, groupId = KafkaConstants.GROUP_STATE, containerFactory = "kafkaListenerContainerFactory")
public void listenSecond(ConsumerRecord<String, String> record, Acknowledgment ack) {
String msg = record.value();
try {
--
Gitblit v1.8.0