From e6c6e6225bdbaaa27bcde320a79acde8239416c2 Mon Sep 17 00:00:00 2001
From: jinpengyong <jpy123456>
Date: Wed, 30 Jun 2021 10:53:05 +0800
Subject: [PATCH] 定时任务
---
screen-job/src/main/java/com/moral/api/service/HistoryHourlyService.java | 16 +
screen-job/src/main/java/com/moral/api/service/impl/HistoryFiveMinutelyServiceImpl.java | 135 ++++++++-
screen-manage/src/main/java/com/moral/api/service/impl/HistoryMinutelyServiceImpl.java | 4
screen-manage/src/main/java/com/moral/api/util/AdjustDataUtils.java | 13
screen-job/src/main/java/com/moral/api/entity/Sensor.java | 84 ++++++
screen-job/src/main/java/com/moral/api/service/DeviceService.java | 2
screen-job/src/main/java/com/moral/api/entity/HistoryDaily.java | 11
screen-job/src/main/java/com/moral/api/service/HistoryDailyService.java | 2
screen-job/src/main/java/com/moral/api/service/SensorService.java | 16 +
screen-manage/src/main/java/com/moral/api/kafka/consumer/KafkaConsumer.java | 6
screen-job/src/main/java/com/moral/api/service/impl/SensorServiceImpl.java | 20 +
screen-manage/src/main/java/com/moral/api/config/kafka/KafkaProducerConfig.java | 4
screen-job/src/main/java/com/moral/api/service/impl/HistoryDailyServiceImpl.java | 155 +++++++++++
screen-job/src/main/java/com/moral/api/task/TestController.java | 45 +++
screen-job/src/main/java/com/moral/api/mapper/HistoryHourlyMapper.java | 19 +
screen-job/src/main/java/com/moral/api/task/HistoryTableInsertTask.java | 24 -
screen-job/src/main/java/com/moral/api/mapper/HistoryDailyMapper.java | 2
screen-common/src/main/java/com/moral/constant/Constants.java | 16 +
screen-common/src/main/java/com/moral/util/DateUtils.java | 10
screen-common/src/main/java/com/moral/constant/KafkaConstants.java | 6
screen-job/src/main/java/com/moral/api/entity/HistoryHourly.java | 50 +++
screen-job/src/main/java/com/moral/api/mapper/SensorMapper.java | 16 +
screen-manage/src/main/java/com/moral/api/service/impl/DeviceServiceImpl.java | 4
screen-manage/src/main/java/com/moral/api/service/impl/HistoryHourlyServiceImpl.java | 3
screen-job/src/main/resources/mapper/SensorMapper.xml | 19 +
screen-job/src/main/resources/mapper/HistoryHourlyMapper.xml | 13 +
screen-job/src/main/java/com/moral/api/service/impl/HistoryAqiServiceImpl.java | 7
screen-job/src/main/resources/mapper/HistoryDailyMapper.xml | 2
screen-manage/src/main/java/com/moral/api/controller/TestController.java | 24 +
screen-job/src/main/java/com/moral/api/service/HistoryFiveMinutelyService.java | 2
screen-job/src/main/java/com/moral/api/service/impl/HistoryHourlyServiceImpl.java | 20 +
screen-job/src/main/resources/mapper/HistoryMinutelyMapper.xml | 30 --
32 files changed, 669 insertions(+), 111 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 535af51..75ce9a3 100644
--- a/screen-common/src/main/java/com/moral/constant/Constants.java
+++ b/screen-common/src/main/java/com/moral/constant/Constants.java
@@ -114,7 +114,6 @@
* */
public static final String SYSTEM_DICT_TYPE_PURCHASER = "purchaser";
-
/*
* ������������������������
* */
@@ -125,5 +124,20 @@
* */
public static final String DEVICE_STATE_OFFLINE = "4";
+ /*
+ * ������code
+ * */
+ public static final String SENSOR_CODE_O3 = "a05024";
+
+ /*
+ * vocs code
+ * */
+ public static final String SENSOR_CODE_VOCS = "a99054";
+
+ /*
+ * ������code
+ * */
+ public static final String SENSOR_CODE_TEMP = "a01001";
+
}
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 e1d6e80..83edd76 100644
--- a/screen-common/src/main/java/com/moral/constant/KafkaConstants.java
+++ b/screen-common/src/main/java/com/moral/constant/KafkaConstants.java
@@ -5,17 +5,17 @@
/**
* ������������������
*/
- public static final String TOPIC_MINUTE = "minute";
+ public static final String TOPIC_MINUTE = "minute_data";
/**
* ������������������
*/
- public static final String TOPIC_HOUR = "hour";
+ public static final String TOPIC_HOUR = "hour_data";
/*
* ���������������
* */
- public static final String TOPIC_SECOND = "test";
+ public static final String TOPIC_SECOND = "second_data";
/**
* ������������������������������������������
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 f5ecd8a..495e929 100644
--- a/screen-common/src/main/java/com/moral/util/DateUtils.java
+++ b/screen-common/src/main/java/com/moral/util/DateUtils.java
@@ -1301,12 +1301,6 @@
return date;
}
- //������������������������������������
- public static Date convertDate(Date date) {
- String dateString = dateToDateString(date, yyyy_MM_dd_HH_mm_EN);
- return getDate(dateString, yyyy_MM_dd_HH_mm_EN);
- }
-
//���������������������������������
public static Date dataToTimeStampTime(Date time, String dateFormat) {
String dateString = dateToDateString(time, dateFormat);
@@ -1315,9 +1309,5 @@
} catch (ParseException e) {
throw new RuntimeException(e);
}
- }
-
- public static void main(String[] args) throws InterruptedException {
- System.out.println(new Date().getTime());
}
}
diff --git a/screen-job/src/main/java/com/moral/api/entity/HistoryDaily.java b/screen-job/src/main/java/com/moral/api/entity/HistoryDaily.java
index b24913d..408d308 100644
--- a/screen-job/src/main/java/com/moral/api/entity/HistoryDaily.java
+++ b/screen-job/src/main/java/com/moral/api/entity/HistoryDaily.java
@@ -9,7 +9,7 @@
/**
* <p>
- *
+ * ���������
* </p>
*
* @author moral
@@ -21,10 +21,19 @@
private static final long serialVersionUID = 1L;
+ /*
+ * ������mac
+ * */
private String mac;
+ /*
+ * ������
+ * */
private Date time;
+ /*
+ * ������
+ * */
private String value;
diff --git a/screen-job/src/main/java/com/moral/api/entity/HistoryHourly.java b/screen-job/src/main/java/com/moral/api/entity/HistoryHourly.java
new file mode 100644
index 0000000..9b42822
--- /dev/null
+++ b/screen-job/src/main/java/com/moral/api/entity/HistoryHourly.java
@@ -0,0 +1,50 @@
+package com.moral.api.entity;
+
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import java.io.Serializable;
+import java.util.Date;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * <p>
+ * ������������������
+ * </p>
+ *
+ * @author moral
+ * @since 2021-06-28
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+public class HistoryHourly extends Model<HistoryHourly> {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * ������mac
+ */
+ private String mac;
+
+ /**
+ * ������������
+ */
+ private Date time;
+
+ /**
+ * ������
+ */
+ private String value;
+
+ /**
+ * ������
+ */
+ private Integer version;
+
+
+ @Override
+ protected Serializable pkVal() {
+ return null;
+ }
+
+}
diff --git a/screen-job/src/main/java/com/moral/api/entity/Sensor.java b/screen-job/src/main/java/com/moral/api/entity/Sensor.java
new file mode 100644
index 0000000..d53e725
--- /dev/null
+++ b/screen-job/src/main/java/com/moral/api/entity/Sensor.java
@@ -0,0 +1,84 @@
+package com.moral.api.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import com.baomidou.mybatisplus.annotation.TableId;
+import java.time.LocalDateTime;
+import java.io.Serializable;
+import java.util.Date;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * <p>
+ *
+ * </p>
+ *
+ * @author moral
+ * @since 2021-06-25
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+public class Sensor extends Model<Sensor> {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * ������
+ */
+ @TableId(value = "id", type = IdType.AUTO)
+ private Integer id;
+
+ /**
+ * ������������
+ */
+ private String name;
+
+ /**
+ * ���������������������������
+ */
+ private String desc;
+
+ /**
+ * ������������������
+ */
+ private String code;
+
+ /**
+ * ������
+ */
+ private Double upper;
+
+ /**
+ * ������
+ */
+ private Double lower;
+
+ /**
+ * ������������
+ */
+ private String defaultUnitKey;
+
+ /**
+ * ������������
+ */
+ private Date createTime;
+
+ /**
+ * ������������
+ */
+ private Date updateTime;
+
+ /**
+ * ������������
+ */
+ private String isDelete;
+
+
+ @Override
+ protected Serializable pkVal() {
+ return this.id;
+ }
+
+}
diff --git a/screen-job/src/main/java/com/moral/api/mapper/HistoryDailyMapper.java b/screen-job/src/main/java/com/moral/api/mapper/HistoryDailyMapper.java
index 0159fde..e19ae90 100644
--- a/screen-job/src/main/java/com/moral/api/mapper/HistoryDailyMapper.java
+++ b/screen-job/src/main/java/com/moral/api/mapper/HistoryDailyMapper.java
@@ -16,6 +16,6 @@
*/
public interface HistoryDailyMapper extends BaseMapper<HistoryDaily> {
- void insertHistoryDaily(List<HistoryDaily> list);
+ void insertHistoryDaily(List<Map<String,Object>> list);
}
diff --git a/screen-job/src/main/java/com/moral/api/mapper/HistoryHourlyMapper.java b/screen-job/src/main/java/com/moral/api/mapper/HistoryHourlyMapper.java
new file mode 100644
index 0000000..9b3c8d7
--- /dev/null
+++ b/screen-job/src/main/java/com/moral/api/mapper/HistoryHourlyMapper.java
@@ -0,0 +1,19 @@
+package com.moral.api.mapper;
+
+import java.util.List;
+import java.util.Map;
+
+import com.moral.api.entity.HistoryHourly;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ * ������������������ Mapper ������
+ * </p>
+ *
+ * @author moral
+ * @since 2021-06-28
+ */
+public interface HistoryHourlyMapper extends BaseMapper<HistoryHourly> {
+
+}
diff --git a/screen-job/src/main/java/com/moral/api/mapper/SensorMapper.java b/screen-job/src/main/java/com/moral/api/mapper/SensorMapper.java
new file mode 100644
index 0000000..588db50
--- /dev/null
+++ b/screen-job/src/main/java/com/moral/api/mapper/SensorMapper.java
@@ -0,0 +1,16 @@
+package com.moral.api.mapper;
+
+import com.moral.api.entity.Sensor;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ * Mapper ������
+ * </p>
+ *
+ * @author moral
+ * @since 2021-06-25
+ */
+public interface SensorMapper extends BaseMapper<Sensor> {
+
+}
diff --git a/screen-job/src/main/java/com/moral/api/service/DeviceService.java b/screen-job/src/main/java/com/moral/api/service/DeviceService.java
index f33824e..90c881b 100644
--- a/screen-job/src/main/java/com/moral/api/service/DeviceService.java
+++ b/screen-job/src/main/java/com/moral/api/service/DeviceService.java
@@ -13,8 +13,10 @@
*/
public interface DeviceService extends IService<Device> {
+ //���������������������������������������
void judgeOffLineDevice();
+ //������������������
void updateDeviceState(Device device);
}
diff --git a/screen-job/src/main/java/com/moral/api/service/HistoryDailyService.java b/screen-job/src/main/java/com/moral/api/service/HistoryDailyService.java
index b08dd7b..c4d52b8 100644
--- a/screen-job/src/main/java/com/moral/api/service/HistoryDailyService.java
+++ b/screen-job/src/main/java/com/moral/api/service/HistoryDailyService.java
@@ -16,6 +16,6 @@
*/
public interface HistoryDailyService extends IService<HistoryDaily> {
- void insertHistoryDaily(List<HistoryDaily> list);
+ void insertHistoryDaily();
}
diff --git a/screen-job/src/main/java/com/moral/api/service/HistoryFiveMinutelyService.java b/screen-job/src/main/java/com/moral/api/service/HistoryFiveMinutelyService.java
index 23ad4ef..e721d53 100644
--- a/screen-job/src/main/java/com/moral/api/service/HistoryFiveMinutelyService.java
+++ b/screen-job/src/main/java/com/moral/api/service/HistoryFiveMinutelyService.java
@@ -2,8 +2,10 @@
public interface HistoryFiveMinutelyService {
+ //5���������������
void createTable(String timeUnits);
+ //5������������������
void insertHistoryFiveMinutely();
}
diff --git a/screen-job/src/main/java/com/moral/api/service/HistoryHourlyService.java b/screen-job/src/main/java/com/moral/api/service/HistoryHourlyService.java
new file mode 100644
index 0000000..b8b345c
--- /dev/null
+++ b/screen-job/src/main/java/com/moral/api/service/HistoryHourlyService.java
@@ -0,0 +1,16 @@
+package com.moral.api.service;
+
+import com.moral.api.entity.HistoryHourly;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ * ������������������ ���������
+ * </p>
+ *
+ * @author moral
+ * @since 2021-06-28
+ */
+public interface HistoryHourlyService extends IService<HistoryHourly> {
+
+}
diff --git a/screen-job/src/main/java/com/moral/api/service/SensorService.java b/screen-job/src/main/java/com/moral/api/service/SensorService.java
new file mode 100644
index 0000000..7a4234c
--- /dev/null
+++ b/screen-job/src/main/java/com/moral/api/service/SensorService.java
@@ -0,0 +1,16 @@
+package com.moral.api.service;
+
+import com.moral.api.entity.Sensor;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ * ���������
+ * </p>
+ *
+ * @author moral
+ * @since 2021-06-25
+ */
+public interface SensorService extends IService<Sensor> {
+
+}
diff --git a/screen-job/src/main/java/com/moral/api/service/impl/HistoryAqiServiceImpl.java b/screen-job/src/main/java/com/moral/api/service/impl/HistoryAqiServiceImpl.java
index 0fadead..ee1f372 100644
--- a/screen-job/src/main/java/com/moral/api/service/impl/HistoryAqiServiceImpl.java
+++ b/screen-job/src/main/java/com/moral/api/service/impl/HistoryAqiServiceImpl.java
@@ -1,12 +1,13 @@
package com.moral.api.service.impl;
-import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
import com.moral.api.entity.CityAqiConfig;
import com.moral.api.entity.HistoryAqi;
import com.moral.api.mapper.HistoryAqiMapper;
import com.moral.api.service.CityAqiConfigService;
import com.moral.api.service.HistoryAqiService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.moral.constant.RedisConstants;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
@@ -67,11 +68,11 @@
value.put("O3", data.get("o3C"));
value.put("AQI", data.get("value"));
//������
- historyAqi.setValue(JSON.toJSONString(value));
+ historyAqi.setValue(JSONObject.toJSONString(value));
//���������������������
historyAqiMapper.insert(historyAqi);
//������redis
- redisTemplate.opsForHash().putAll("aqi_" + cityCode, value);
+ redisTemplate.opsForHash().putAll(RedisConstants.AQI_DATA + cityCode, value);
}
}
}
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 07b3958..eec1a25 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
@@ -1,15 +1,30 @@
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.HistoryHourly;
+import com.moral.api.entity.Sensor;
import com.moral.api.mapper.HistoryDailyMapper;
import com.moral.api.service.HistoryDailyService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.moral.api.service.HistoryHourlyService;
+import com.moral.api.service.SensorService;
+import com.moral.constant.Constants;
+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>
@@ -25,9 +40,143 @@
@Autowired
private HistoryDailyMapper historyDailyMapper;
+ @Autowired
+ private SensorService sensorService;
+
+ @Autowired
+ private HistoryHourlyService historyHourlyService;
+
+
@Override
- public void insertHistoryDaily(List<HistoryDaily> list) {
- System.out.println(list);
- historyDailyMapper.insertHistoryDaily(list);
+ public void insertHistoryDaily() {
+
+ String format = DateUtils.yyyy_MM_dd_EN;
+ Date now = new Date();
+ //������������
+ Date start = DateUtils.dataToTimeStampTime(DateUtils.getDateOfDay(now, -1), format);
+ //������������
+ Date end = DateUtils.dataToTimeStampTime(now, format);
+ //������
+ QueryWrapper<Sensor> sensorQueryWrapper = new QueryWrapper<>();
+ sensorQueryWrapper.select("code").eq("is_delete", Constants.NOT_DELETE);
+ List<Object> sensorCodes = sensorService.listObjs(sensorQueryWrapper);
+
+ //������������������������������
+ QueryWrapper<HistoryHourly> historyHourlyQueryWrapper = new QueryWrapper<>();
+ historyHourlyQueryWrapper.ge("time", DateUtils.dateToDateString(start)).le("time", DateUtils.dateToDateString(end));
+ List<Map<String, Object>> dailyData = historyHourlyService.listMaps(historyHourlyQueryWrapper);
+
+ //���mac������
+ Map<String, List<Map<String, Object>>> data = dailyData.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);
+
+ //���������������������������������������������������
+ 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);
+
+ //���������������������������
+ tempValue.removeIf(map -> ((Date) map.get("time")).getTime() == end.getTime());
+ System.out.println("������������==" + tempValue);
+ sensorCodes.forEach(sensorCode -> {
+ OptionalDouble optionalDouble = tempValue.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 (sensorCode.equals(Constants.SENSOR_CODE_O3)) {
+ return null;
+ }
+ return DoubleStream.of(Double.parseDouble(sensorValue.toString()));
+ }).average();
+ if (optionalDouble.isPresent()) {
+ jsonMap.put(sensorCode.toString(), Double.parseDouble(String.format("%.4f", optionalDouble.getAsDouble())));
+ }
+ });
+ 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<>();
+ list.add(8);//1���
+ list.add(12);//2
+ list.add(10);//3
+ list.add(18);//4
+ list.add(16);//5
+ list.add(22);//6
+ list.add(4);//8
+ list.add(12);
+ list.add(28);
+ list.add(26);
+ list.add(25);
+ list.add(21);
+ list.add(6);
+ list.add(18);
+ list.add(28);
+ list.add(18);
+ list.add(16);
+ list.add(15);
+ list.add(12);
+ list.add(14);
+ list.add(12);
+ list.add(10);
+ list.add(5);
+ list.add(88);
+ Integer max = 0;
+ for (int i = 7; i < list.size(); i++) {
+ Integer sum = 0;
+ for (int j = i - 7; j <= i; j++) {
+ Integer b = list.get(j);
+ sum = sum + b;
+ }
+ if (sum > max) {
+ max = sum;
+ }
+ }
+ System.out.println((max / 8F));
}
}
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 fb85a9d..ed9a04a 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
@@ -2,18 +2,25 @@
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
+import org.springframework.util.ObjectUtils;
-import java.text.SimpleDateFormat;
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;
-import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.moral.api.entity.Sensor;
import com.moral.api.mapper.HistoryFiveMinutelyMapper;
import com.moral.api.service.HistoryFiveMinutelyService;
import com.moral.api.service.HistoryMinutelyService;
+import com.moral.api.service.SensorService;
+import com.moral.constant.Constants;
import com.moral.util.DateUtils;
@Service
@@ -25,6 +32,9 @@
@Autowired
private HistoryMinutelyService historyMinutelyService;
+ @Autowired
+ private SensorService sensorService;
+
@Override
public void createTable(String timeUnits) {
historyFiveMinutelyMapper.createTable(timeUnits);
@@ -32,33 +42,118 @@
@Override
public void insertHistoryFiveMinutely() {
+ //������������������yyyy-MM-dd HH:mm
+ String format = DateUtils.yyyy_MM_dd_HH_mm_EN;
+ Date now = new Date();
Map<String, Object> params = new HashMap<>();
- //������������������������
- Date start = DateUtils.convertDate(DateUtils.getDateOfMin(-5));
- //������������������������
- Date end = DateUtils.convertDate(new Date());
+ //������������
+ Date start = DateUtils.dataToTimeStampTime(DateUtils.getDateOfMin(now, -5), format);
+ //������������
+ Date end = DateUtils.dataToTimeStampTime(now, format);
params.put("start", start);
params.put("end", end);
- //���������������
+ //������������������������������
String timeUnits = DateUtils.dateToDateString(start, DateUtils.yyyyMM_EN);
params.put("timeUnits", timeUnits);
//������
+ QueryWrapper<Sensor> queryWrapper = new QueryWrapper<>();
+ queryWrapper.select("code").eq("is_delete", Constants.NOT_DELETE);
+ List<Object> sensorCodes = sensorService.listObjs(queryWrapper);
- params.put("sensorKeys", null);
+ //���������������������5������������
+ List<Map<String, Object>> fiveMinutelyData = historyMinutelyService.getHistoryFiveMinutelyData(params);
+ //���mac������
+ Map<String, List<Map<String, Object>>> data = fiveMinutelyData.parallelStream()
+ .collect(Collectors.groupingBy(o -> (String) o.get("mac")));
- historyMinutelyService.getHistoryFiveMinutelyData(params);
- /*List<Map<String, Object>> list = new ArrayList<>();
- Map<String, Object> map = new HashMap<>();
- map.put("mac", "123456");
- Date date = new Date();
- map.put("time", date);
- Map<String, Object> value = new HashMap<>();
- value.put("e1", 10);
- value.put("e2", 20);
- map.put("value", JSON.toJSONString(value));
- list.add(map);*/
+ //���������������������������
+ List<Map<String, Object>> insertData = new ArrayList<>();
- historyFiveMinutelyMapper.insertHistoryFiveMinutely(null, null);
+ data.forEach((key, value) -> {
+ Map<String, Object> dataMap = new HashMap<>();
+ Map<String, Object> jsonMap = new HashMap<>();
+ dataMap.put("mac", key);
+ dataMap.put("time", end);
+ 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;
+ }
+ return DoubleStream.of(Double.parseDouble(sensorValue.toString()));
+ }).average();
+ if (optionalDouble.isPresent()) {
+ jsonMap.put(sensorCode.toString(), Double.parseDouble(String.format("%.4f", optionalDouble.getAsDouble())));
+ }
+ });
+ dataMap.put("value", JSONObject.toJSONString(jsonMap));
+ insertData.add(dataMap);
+ });
+
+ //5���������������
+ String insertTimeUnits = DateUtils.dateToDateString(new Date());
+ 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");
+ map1.put("value", "{\"a0001\": 10, \"a0002\": 8, \"a0001-Flag\": \"N\", \"a0002-Flag\": \"N\"}");
+ Map<String, Object> map2 = new HashMap<>();
+ map2.put("mac", "p5dnd123456789");
+ map2.put("value", "{\"a0001\": 12, \"a0002\": 12, \"a0001-Flag\": \"N\", \"a0002-Flag\": \"N\"}");
+ Map<String, Object> map3 = new HashMap<>();
+ map3.put("mac", "p5dnd1234567");
+ map3.put("value", "{\"a0001\": 6, \"a0002\": 20, \"a0001-Flag\": \"N\", \"a0002-Flag\": \"N\", \"a0003\": 14}");
+ Map<String, Object> map4 = new HashMap<>();
+ map4.put("mac", "p5dnd1234567");
+ map4.put("value", "{\"a0001\": 4, \"a0002\": 16, \"a0001-Flag\": \"N\", \"a0002-Flag\": \"N\", \"a0003\": 16}");
+ list.add(map1);
+ list.add(map2);
+ list.add(map3);
+ list.add(map4);
+
+ //���������mac������
+ Map<String, List<Map<String, Object>>> data = list.parallelStream().collect(Collectors.groupingBy(o -> (String) o.get("mac")));
+ System.out.println(data);
+
+ //������������
+ List<Object> sensors = new ArrayList<>();
+ sensors.add("a0001");
+ sensors.add("a0002");
+ sensors.add("a0003");
+
+ //������������������������
+ 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);
+ sensors.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;
+ }
+ return DoubleStream.of(Double.parseDouble(sensorValue.toString()));
+ }).average();
+ if (optionalDouble.isPresent()) {
+ jsonMap.put(sensorCode.toString(), Double.parseDouble(String.format("%.4f", optionalDouble.getAsDouble())));
+ }
+ });
+ dataMap.put("value", JSONObject.toJSONString(jsonMap));
+ insertData.add(dataMap);
+ });
+
+
+ System.out.println("666==" + insertData);
}
}
diff --git a/screen-job/src/main/java/com/moral/api/service/impl/HistoryHourlyServiceImpl.java b/screen-job/src/main/java/com/moral/api/service/impl/HistoryHourlyServiceImpl.java
new file mode 100644
index 0000000..68af169
--- /dev/null
+++ b/screen-job/src/main/java/com/moral/api/service/impl/HistoryHourlyServiceImpl.java
@@ -0,0 +1,20 @@
+package com.moral.api.service.impl;
+
+import com.moral.api.entity.HistoryHourly;
+import com.moral.api.mapper.HistoryHourlyMapper;
+import com.moral.api.service.HistoryHourlyService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * ������������������ ���������������
+ * </p>
+ *
+ * @author moral
+ * @since 2021-06-28
+ */
+@Service
+public class HistoryHourlyServiceImpl extends ServiceImpl<HistoryHourlyMapper, HistoryHourly> implements HistoryHourlyService {
+
+}
diff --git a/screen-job/src/main/java/com/moral/api/service/impl/SensorServiceImpl.java b/screen-job/src/main/java/com/moral/api/service/impl/SensorServiceImpl.java
new file mode 100644
index 0000000..331815a
--- /dev/null
+++ b/screen-job/src/main/java/com/moral/api/service/impl/SensorServiceImpl.java
@@ -0,0 +1,20 @@
+package com.moral.api.service.impl;
+
+import com.moral.api.entity.Sensor;
+import com.moral.api.mapper.SensorMapper;
+import com.moral.api.service.SensorService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * ���������������
+ * </p>
+ *
+ * @author moral
+ * @since 2021-06-25
+ */
+@Service
+public class SensorServiceImpl extends ServiceImpl<SensorMapper, Sensor> implements SensorService {
+
+}
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 eb9b6af..fcc205c 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
@@ -30,17 +30,6 @@
@XxlJob("insertHistoryFiveMinutely")
public ReturnT insertHistoryFiveMinutely() {
try {
- /* List<Map<String, Object>> list = new ArrayList<>();
- Map<String, Object> map = new HashMap<>();
- map.put("mac", "123456");
- Date date = new Date();
- map.put("time", date);
- Map<String, Object> value = new HashMap<>();
- value.put("e1", 10); value.put("e2", 20);
- map.put("value", JSON.toJSONString(value));
- list.add(map);
- String timeUnits = DateUtils.dateToDateString(date, DateUtils.yyyyMM_EN);*/
-
historyFiveMinutelyService.insertHistoryFiveMinutely();
} catch (Exception e) {
XxlJobHelper.log(e.getMessage());
@@ -53,18 +42,7 @@
@XxlJob("insertHistoryDaily")
public ReturnT insertHistoryDaily() {
try {
- List<HistoryDaily> list = new ArrayList<>();
- HistoryDaily historyDaily = new HistoryDaily();
- historyDaily.setMac("123456");
- historyDaily.setTime(new Date());
- Map<String, Object> value = new HashMap<>();
- value.put("e1", 1);
- value.put("e2", 2);
- historyDaily.setValue(JSON.toJSONString(value));
- for (int i = 0; i < 20000; i++) {
- list.add(historyDaily);
- }
- historyDailyService.insertHistoryDaily(list);
+ historyDailyService.insertHistoryDaily();
} catch (Exception e) {
XxlJobHelper.log(e.getMessage());
return ReturnT.FAIL;
diff --git a/screen-job/src/main/java/com/moral/api/task/TestController.java b/screen-job/src/main/java/com/moral/api/task/TestController.java
new file mode 100644
index 0000000..678c2a5
--- /dev/null
+++ b/screen-job/src/main/java/com/moral/api/task/TestController.java
@@ -0,0 +1,45 @@
+package com.moral.api.task;
+
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RestController;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.moral.api.entity.HistoryHourly;
+import com.moral.api.mapper.HistoryHourlyMapper;
+import com.moral.api.service.HistoryDailyService;
+import com.moral.api.service.HistoryHourlyService;
+
+
+@Slf4j
+@Api(tags = {"������������"})
+@RestController
+@RequestMapping("/job")
+public class TestController {
+
+ @Autowired
+ private HistoryHourlyService historyHourlyService;
+
+ @Autowired
+ private HistoryHourlyMapper historyHourlyMapper;
+
+ @Autowired
+ private HistoryDailyService historyDailyService;
+
+ @ApiOperation(value = "job������", notes = "job������")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "data", value = "data", required = true, paramType = "query", dataType = "String")
+ })
+ @RequestMapping(value = "jobTest", method = RequestMethod.GET)
+ public void jobTest() {
+ historyDailyService.insertHistoryDaily();
+ }
+
+
+}
diff --git a/screen-job/src/main/resources/mapper/HistoryDailyMapper.xml b/screen-job/src/main/resources/mapper/HistoryDailyMapper.xml
index f1582cd..9716fba 100644
--- a/screen-job/src/main/resources/mapper/HistoryDailyMapper.xml
+++ b/screen-job/src/main/resources/mapper/HistoryDailyMapper.xml
@@ -9,7 +9,7 @@
<result column="value" property="value"/>
</resultMap>
- <insert id="insertHistoryDaily" parameterType="com.moral.api.entity.HistoryDaily">
+ <insert id="insertHistoryDaily">
INSERT INTO history_daily
VALUES
<foreach collection="list" item="item" separator=",">
diff --git a/screen-job/src/main/resources/mapper/HistoryHourlyMapper.xml b/screen-job/src/main/resources/mapper/HistoryHourlyMapper.xml
new file mode 100644
index 0000000..90af3f8
--- /dev/null
+++ b/screen-job/src/main/resources/mapper/HistoryHourlyMapper.xml
@@ -0,0 +1,13 @@
+<?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.HistoryHourlyMapper">
+
+ <!-- ������������������������ -->
+ <resultMap id="BaseResultMap" type="com.moral.api.entity.HistoryHourly">
+ <result column="mac" property="mac"/>
+ <result column="time" property="time"/>
+ <result column="value" property="value"/>
+ <result column="version" property="version"/>
+ </resultMap>
+
+</mapper>
\ No newline at end of file
diff --git a/screen-job/src/main/resources/mapper/HistoryMinutelyMapper.xml b/screen-job/src/main/resources/mapper/HistoryMinutelyMapper.xml
index d705dd2..5cde6ff 100644
--- a/screen-job/src/main/resources/mapper/HistoryMinutelyMapper.xml
+++ b/screen-job/src/main/resources/mapper/HistoryMinutelyMapper.xml
@@ -16,35 +16,11 @@
<select id="getHistoryFiveMinutelyData" resultType="java.util.LinkedHashMap">
SELECT
- mac
- <foreach collection="sensorKeys" open="," separator="," item="sensorKey">
- <choose>
- <when test="sensorKey=='e23[0]'">
- ROUND((CASE WHEN AVG(value->'$.e18[0]'*SIN((value->'$.e23[0]'/180)*PI()))<![CDATA[>]]>0 AND
- AVG(value->'$.e18[0]'*COS((value->'$.e23[0]'/180)*PI()))<![CDATA[>]]>0
- THEN
- ATAN(AVG(value->'$.e18[0]'*SIN((value->'$.e23[0]'/180)*PI()))/AVG(value->'$.e18[0]'*COS((value->'$.e23[0]'/180)*PI())))*180/PI()
- WHEN AVG(value->'$.e18[0]'*SIN((value->'$.e23[0]'/180)*PI()))>0 AND
- AVG(value->'$.e18[0]'*COS((value->'$.e23[0]'/180)*PI()))<![CDATA[<]]>0
- THEN
- (ATAN(AVG(value->'$.e18[0]'*SIN((value->'$.e23[0]'/180)*PI()))/AVG(value->'$.e18[0]'*COS((value->'$.e23[0]'/180)*PI())))*180/PI())+180
- WHEN AVG(value->'$.e18[0]'*SIN((value->'$.e23[0]'/180)*PI()))<![CDATA[<]]>0 AND
- AVG(value->'$.e18[0]'*COS((value->'$.e23[0]'/180)*PI()))<![CDATA[<]]>0
- THEN
- (ATAN(AVG(value->'$.e18[0]'*SIN((value->'$.e23[0]'/180)*PI()))/AVG(value->'$.e18[0]'*COS((value->'$.e23[0]'/180)*PI())))*180/PI())+180
- ELSE
- (ATAN(AVG(value->'$.e18[0]'*SIN((value->'$.e23[0]'/180)*PI()))/AVG(value->'$.e18[0]'*COS((value->'$.e23[0]'/180)*PI())))*180/PI())+360
- END),3) AS '${sensorKey}'
- </when>
- <otherwise>
- ROUND(AVG(value->'$.${sensorKey}[0]'),3) AS '${sensorKey}'
- </otherwise>
- </choose>
- </foreach>
+ mac, value
FROM
history_minutely_${timeUnits}
- WHERE time <![CDATA[>=]]> #{start} AND time <![CDATA[<]]> #{end}
- GROUP BY mac
+ WHERE time <![CDATA[>=]]> #{start}
+ AND time <![CDATA[<]]> #{end}
</select>
</mapper>
\ No newline at end of file
diff --git a/screen-job/src/main/resources/mapper/SensorMapper.xml b/screen-job/src/main/resources/mapper/SensorMapper.xml
new file mode 100644
index 0000000..19c529f
--- /dev/null
+++ b/screen-job/src/main/resources/mapper/SensorMapper.xml
@@ -0,0 +1,19 @@
+<?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.SensorMapper">
+
+ <!-- ������������������������ -->
+ <resultMap id="BaseResultMap" type="com.moral.api.entity.Sensor">
+ <id column="id" property="id"/>
+ <result column="name" property="name"/>
+ <result column="desc" property="desc"/>
+ <result column="code" property="code"/>
+ <result column="upper" property="upper"/>
+ <result column="lower" property="lower"/>
+ <result column="default_unit_key" property="defaultUnitKey"/>
+ <result column="create_time" property="createTime"/>
+ <result column="update_time" property="updateTime"/>
+ <result column="is_delete" property="isDelete"/>
+ </resultMap>
+
+</mapper>
\ No newline at end of file
diff --git a/screen-manage/src/main/java/com/moral/api/config/kafka/KafkaProducerConfig.java b/screen-manage/src/main/java/com/moral/api/config/kafka/KafkaProducerConfig.java
index a5603f1..ef5b141 100644
--- a/screen-manage/src/main/java/com/moral/api/config/kafka/KafkaProducerConfig.java
+++ b/screen-manage/src/main/java/com/moral/api/config/kafka/KafkaProducerConfig.java
@@ -13,8 +13,8 @@
import java.util.HashMap;
import java.util.Map;
-@Configuration
-@EnableKafka
+/*@Configuration
+@EnableKafka*/
public class KafkaProducerConfig {
@Value("${kafka.producer.servers}")
private String servers;
diff --git a/screen-manage/src/main/java/com/moral/api/controller/TestController.java b/screen-manage/src/main/java/com/moral/api/controller/TestController.java
index 13865dc..8178082 100644
--- a/screen-manage/src/main/java/com/moral/api/controller/TestController.java
+++ b/screen-manage/src/main/java/com/moral/api/controller/TestController.java
@@ -1,9 +1,14 @@
package com.moral.api.controller;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.moral.api.entity.Sensor;
import com.moral.api.entity.Test;
+import com.moral.api.service.SensorService;
import com.moral.api.service.TestService;
+import com.moral.api.service.impl.SensorServiceImpl;
import com.moral.api.util.CacheUtils;
+import com.moral.constant.Constants;
import com.moral.constant.KafkaConstants;
import com.moral.constant.ResultMessage;
import com.moral.redis.RedisUtil;
@@ -23,6 +28,7 @@
import javax.annotation.Resource;
import java.io.*;
+import java.util.List;
@Slf4j
@@ -182,4 +188,22 @@
writer.close();
fis.close();
}
+
+ @Autowired
+ private SensorService sensorService;
+
+ @ApiOperation(value = "������������", notes = "������������")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "token", value = "token", required = true, paramType = "header", dataType = "String")
+ })
+ @RequestMapping(value = "getSensor", method = RequestMethod.GET)
+ public void getSensor() {
+ QueryWrapper<Sensor> queryWrapper = new QueryWrapper<>();
+ queryWrapper.select("code").eq("is_delete", Constants.NOT_DELETE);
+ List<Object> list = sensorService.listObjs(queryWrapper);
+ for (Object o : list) {
+ System.out.println(o);
+ }
+ }
+
}
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 54c9d35..94ec2f1 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
@@ -20,7 +20,7 @@
import com.moral.constant.KafkaConstants;
import com.moral.constant.RedisConstants;
-//@Component
+@Component
@Slf4j
public class KafkaConsumer {
@@ -40,7 +40,6 @@
@KafkaListener(topics = KafkaConstants.TOPIC_MINUTE, groupId = KafkaConstants.GROUP_ID_INSERT, containerFactory = "kafkaListenerContainerFactory")
public void listenMinute(ConsumerRecord<String, String> record, Acknowledgment ack) {
String msg = record.value();
- System.out.println(msg);
try {
Map<String, Object> data = JSON.parseObject(msg, HashMap.class);
Object mac = data.get("mac");
@@ -59,6 +58,7 @@
return !(key.contains("Min") || key.contains("Max") || key.contains("Cou"));
}).collect(Collectors.toMap(m -> m.getKey().replaceAll("-Avg", ""), Map.Entry::getValue));
data.remove("time");
+ data.remove("entryTime");
//���������������
historyMinutelyService.insertHistoryMinutely(data);
ack.acknowledge();
@@ -89,6 +89,7 @@
return !(key.contains("Min") || key.contains("Max") || key.contains("Cou"));
}).collect(Collectors.toMap(m -> m.getKey().replaceAll("-Avg", ""), Map.Entry::getValue));
data.remove("time");
+ data.remove("entryTime");
//���������������
historyHourlyService.insertHistoryHourly(data);
ack.acknowledge();
@@ -101,7 +102,6 @@
@KafkaListener(topics = KafkaConstants.TOPIC_SECOND, groupId = KafkaConstants.GROUP_ID_STATE, containerFactory = "kafkaListenerContainerFactory")
public void listenSecond(ConsumerRecord<String, String> record, Acknowledgment ack) {
String msg = record.value();
- //System.out.println(record.offset() + "===>" + msg);
try {
Map<String, Object> data = JSON.parseObject(msg, HashMap.class);
Object mac = data.get("mac");
diff --git a/screen-manage/src/main/java/com/moral/api/service/impl/DeviceServiceImpl.java b/screen-manage/src/main/java/com/moral/api/service/impl/DeviceServiceImpl.java
index fcf29d3..f3d42c9 100644
--- a/screen-manage/src/main/java/com/moral/api/service/impl/DeviceServiceImpl.java
+++ b/screen-manage/src/main/java/com/moral/api/service/impl/DeviceServiceImpl.java
@@ -457,13 +457,13 @@
String formula = sensor.getFormula();
//������������������������
String sensorValue = (String) deviceData.get(sensorCode);
- double value = Double.parseDouble(String.format("%.3f", sensorValue));
+ double value = Double.parseDouble(String.format("%.4f", sensorValue));
//������������
if (formula != null) {
//������������������
sensorValue = formula.replace("{0}", sensorValue);
expression = AviatorEvaluator.compile(sensorValue);
- value = Double.parseDouble(String.format("%.3f", expression.execute()));
+ value = Double.parseDouble(String.format("%.4f", expression.execute()));
}
int sensorState = judgeState(list, value);
if (sensorState > state) {
diff --git a/screen-manage/src/main/java/com/moral/api/service/impl/HistoryHourlyServiceImpl.java b/screen-manage/src/main/java/com/moral/api/service/impl/HistoryHourlyServiceImpl.java
index 26598b6..6e5d735 100644
--- a/screen-manage/src/main/java/com/moral/api/service/impl/HistoryHourlyServiceImpl.java
+++ b/screen-manage/src/main/java/com/moral/api/service/impl/HistoryHourlyServiceImpl.java
@@ -37,7 +37,8 @@
public void insertHistoryHourly(Map<String, Object> data) {
Map<String, Object> dataAdjust = new HashMap<>(data);
String mac = data.remove("mac").toString();
- Date time = DateUtils.dataToTimeStampTime(new Date(new Long((String) data.remove("DataTime"))), DateUtils.yyyy_MM_dd_HH_EN);
+ Date time = DateUtils.getDate((String) data.remove("DataTime"), DateUtils.yyyy_MM_dd_HH_EN);
+
Integer version = (Integer) data.remove("ver");
Map<String, Object> result = new HashMap<>(data);
result.put("mac", mac);
diff --git a/screen-manage/src/main/java/com/moral/api/service/impl/HistoryMinutelyServiceImpl.java b/screen-manage/src/main/java/com/moral/api/service/impl/HistoryMinutelyServiceImpl.java
index 9360a70..216be2a 100644
--- a/screen-manage/src/main/java/com/moral/api/service/impl/HistoryMinutelyServiceImpl.java
+++ b/screen-manage/src/main/java/com/moral/api/service/impl/HistoryMinutelyServiceImpl.java
@@ -30,8 +30,8 @@
Object mac = data.remove("mac");
result.put("mac", mac);
result.put("version", data.remove("ver"));
- Date time = new Date(new Long((String) data.remove("DataTime")));
- result.put("time", DateUtils.dataToTimeStampTime(time,DateUtils.yyyy_MM_dd_HH_mm_EN));
+ Date time = DateUtils.getDate((String) data.remove("DataTime"), DateUtils.yyyyMMddHHmmss_EN);
+ result.put("time", time);
result.put("value", JSONObject.toJSONString(data));
String timeUnits = DateUtils.dateToDateString(time, DateUtils.yyyyMM_EN);
result.put("timeUnits", tableSuffix(timeUnits, Constants.UN_ADJUST));
diff --git a/screen-manage/src/main/java/com/moral/api/util/AdjustDataUtils.java b/screen-manage/src/main/java/com/moral/api/util/AdjustDataUtils.java
index 1f1deba..fe4e63a 100644
--- a/screen-manage/src/main/java/com/moral/api/util/AdjustDataUtils.java
+++ b/screen-manage/src/main/java/com/moral/api/util/AdjustDataUtils.java
@@ -14,6 +14,7 @@
import com.googlecode.aviator.AviatorEvaluator;
import com.googlecode.aviator.Expression;
import com.moral.api.entity.DeviceAdjustValue;
+import com.moral.constant.Constants;
import com.moral.util.DateUtils;
@Slf4j
@@ -22,10 +23,8 @@
//���������������
public Map<String, Object> adjust(Map<String, Object> deviceData, Map<String, Object> adjustFormula, Map<String, Object> aqiMap) {
try {
- Object dataTime = deviceData.get("DataTime");
- //���������������������������
- long time = Math.round(new Double((String) dataTime) / 1000) * 1000L;
- long finalTime = DateUtils.dataToTimeStampTime(new Date(time), DateUtils.HH_mm_ss_EN).getTime();
+ Date time = DateUtils.getDate((String) deviceData.get("DataTime"), DateUtils.yyyyMMddHHmmss_EN);
+ long finalTime = DateUtils.dataToTimeStampTime(time, DateUtils.HH_mm_ss_EN).getTime();
for (String key : deviceData.keySet()) {
if (!key.equals("mac") && !key.equals("time") && !key.equals("DataTime") && !key.equals("ver") && !key.contains("Flag")) {
//���������
@@ -57,7 +56,7 @@
env.put("aqi", ObjectUtils.isEmpty(aqiValue) ? 0F : Float.parseFloat((String) aqiValue));
}
if (formula.contains("vocs")) {
- Object vocsValue = ObjectUtils.isEmpty(deviceData.get("a99054")) ? 0F : deviceData.get("a99054");
+ Object vocsValue = ObjectUtils.isEmpty(deviceData.get(Constants.SENSOR_CODE_VOCS)) ? 0F : deviceData.get(Constants.SENSOR_CODE_VOCS);
env.put("vocs", vocsValue);
}
if (formula.contains("cel")) {
@@ -66,10 +65,10 @@
//������
measuredValue = expression.execute(env);
//������������
- if (Float.parseFloat(measuredValue.toString()) < 0 && !"a01001".equals(measuredValue)) {
+ if (!Constants.SENSOR_CODE_TEMP.equals(measuredValue) && Float.parseFloat(measuredValue.toString()) < 0) {
measuredValue = 0F;
}
- deviceData.put(key, Double.parseDouble(String.format("%.3f", measuredValue)));
+ deviceData.put(key, Double.parseDouble(String.format("%.4f", measuredValue)));
}
}
} catch (Exception e) {
--
Gitblit v1.8.0