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