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