From e394005342e92feac3ea962a8a0fb2925ad835dd Mon Sep 17 00:00:00 2001
From: jinpengyong <jpy123456>
Date: Thu, 10 Jun 2021 15:29:44 +0800
Subject: [PATCH] job项目

---
 screen-api/src/main/resources/mapper/MenuMapper.xml                                    |    4 
 screen-manage/src/main/java/com/moral/api/service/impl/HistoryMinutelyServiceImpl.java |   63 +++++
 screen-common/src/main/java/com/moral/constant/KafkaConstants.java                     |   19 +
 screen-manage/src/main/java/com/moral/api/kafka/consumer/KafkaReceiver.java            |   97 ++++++++
 screen-manage/src/main/java/com/moral/api/service/DeviceService.java                   |    9 
 screen-manage/src/main/java/com/moral/api/service/impl/DeviceServiceImpl.java          |   97 +++++++-
 screen-manage/src/main/resources/mapper/HistoryMinutelyMapper.xml                      |    9 
 pom.xml                                                                                |    7 
 screen-job/pom.xml                                                                     |    6 
 screen-manage/src/main/java/com/moral/api/controller/TestController.java               |   43 ++-
 screen-job/src/main/resources/application-dev.yml                                      |   25 ++
 screen-job/src/main/java/com/moral/api/config/xxl/XxlJobConfig.java                    |  135 ++++++++++++
 screen-manage/src/main/java/com/moral/api/service/HistoryMinutelyService.java          |   20 +
 screen-job/src/main/resources/logback.xml                                              |   29 ++
 screen-manage/src/main/java/com/moral/api/mapper/HistoryMinutelyMapper.java            |   20 +
 screen-common/src/main/java/com/moral/constant/Constants.java                          |   18 +
 screen-job/src/main/java/com/moral/api/jobHandler/TestHandler.java                     |   21 +
 screen-common/src/main/java/com/moral/constant/RedisConstants.java                     |   28 +
 18 files changed, 596 insertions(+), 54 deletions(-)

diff --git a/pom.xml b/pom.xml
index 02b98d7..b1e7a37 100644
--- a/pom.xml
+++ b/pom.xml
@@ -42,6 +42,7 @@
         <io.springfox.version>2.7.0</io.springfox.version>
         <swagger-bootstrap-ui.version>1.9.6</swagger-bootstrap-ui.version>
         <spring.kafka.version>2.2.2</spring.kafka.version>
+        <xxl-job.version>2.3.0</xxl-job.version>
     </properties>
 
 
@@ -116,7 +117,11 @@
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-aop</artifactId>
         </dependency>
-
+        <dependency>
+            <groupId>com.xuxueli</groupId>
+            <artifactId>xxl-job-core</artifactId>
+            <version>${xxl-job.version}</version>
+        </dependency>
     </dependencies>
 
 
diff --git a/screen-api/src/main/resources/mapper/MenuMapper.xml b/screen-api/src/main/resources/mapper/MenuMapper.xml
index abfa655..bfe661a 100644
--- a/screen-api/src/main/resources/mapper/MenuMapper.xml
+++ b/screen-api/src/main/resources/mapper/MenuMapper.xml
@@ -28,7 +28,7 @@
         AND gm.menu_id = m.id
         AND ug.is_delete = 0
         AND gm.is_delete = 0
-        AND gm.channel_key = 1
+        AND gm.channel_key = 0
         AND m.is_delete = 0
     </select>
 
@@ -38,7 +38,7 @@
         FROM `menu` m, `organization_menu` om
         WHERE om.organization_id = #{orgId}
         AND m.id = om.menu_id
-        AND om.channel_key = 1
+        AND om.channel_key = 0
         AND om.menu_id = m.id
         AND om.is_delete = 0
         AND m.is_delete = 0
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 fb9db76..a56abbd 100644
--- a/screen-common/src/main/java/com/moral/constant/Constants.java
+++ b/screen-common/src/main/java/com/moral/constant/Constants.java
@@ -85,18 +85,18 @@
     public static final String DELETE_OPERATE_TYPE = "3";
 
     /*
-    * ���������������������������������������
-    * */
+     * ���������������������������������������
+     * */
     public static final String FORMULA_PLACEHOLDER = "{0}";
 
     /*
-    * ������������������
-    * */
+     * ������������������
+     * */
     public static final String SYSTEM_DICT_TYPE_UNIT = "unit";
 
     /*
-    * ������������������
-    * */
+     * ������������������
+     * */
     public static final String SYSTEM_DICT_TYPE_PROFESSION = "profession";
 
     /*
@@ -115,4 +115,10 @@
     public static final String SYSTEM_DICT_TYPE_PURCHASER = "purchaser";
 
 
+    /*
+     * ������������������������
+     * */
+    public static final String UN_ADJUST = "unadjust";
+
+
 }
diff --git a/screen-common/src/main/java/com/moral/constant/KafkaConstants.java b/screen-common/src/main/java/com/moral/constant/KafkaConstants.java
new file mode 100644
index 0000000..8f904d1
--- /dev/null
+++ b/screen-common/src/main/java/com/moral/constant/KafkaConstants.java
@@ -0,0 +1,19 @@
+package com.moral.constant;
+
+public class KafkaConstants {
+
+    /**
+     * ������������������
+     */
+    public static final String TOPIC_MINUTE = "test_topic";
+
+    /**
+     * ������������������
+     */
+    public static final String TOPIC_HOUR = "hour";
+
+    /**
+     * ���������
+     */
+    public static final String GROUP_ID = "test";
+}
diff --git a/screen-common/src/main/java/com/moral/constant/RedisConstants.java b/screen-common/src/main/java/com/moral/constant/RedisConstants.java
index 2578c67..db0ec8c 100644
--- a/screen-common/src/main/java/com/moral/constant/RedisConstants.java
+++ b/screen-common/src/main/java/com/moral/constant/RedisConstants.java
@@ -12,20 +12,30 @@
 @Data
 public class RedisConstants {
     /*
-    * ������������ redis������key
-    * ������Map<String,List<sysDictData>>���������key������������������������Value������������������������
-    * */
+     * ������������ redis������key
+     * ������Map<String,List<sysDictData>>���������key������������������������Value������������������������
+     * */
     public static final String DICT_DATA_KEY = "dict_data";
 
     /*
-    * ������������ redis������key
-    * ������List<sysDictType>������
-    * */
+     * ������������ redis������key
+     * ������List<sysDictType>������
+     * */
     public static final String DICT_TYPE_KEY = "dict_type";
 
     /*
-    * ������ redis������key
-    * ������Map<Integer,Sensor>������
-    * */
+     * ������ redis������key
+     * ������Map<Integer,Sensor>������
+     * */
     public static final String SENSOR_KEY = "sensor";
+
+    /*
+     * ������������������
+     * */
+    public static final String DEVICE = "device";
+
+    /*
+     * ������������������������
+     * */
+    public static final String STATE = "state";
 }
diff --git a/screen-job/pom.xml b/screen-job/pom.xml
index 3432e2b..a22891e 100644
--- a/screen-job/pom.xml
+++ b/screen-job/pom.xml
@@ -14,12 +14,6 @@
 
     <dependencies>
         <dependency>
-            <groupId>org.moral</groupId>
-            <artifactId>screen-common</artifactId>
-            <version>1.0-SNAPSHOT</version>
-            <scope>compile</scope>
-        </dependency>
-        <dependency>
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-devtools</artifactId>
             <optional>true</optional>
diff --git a/screen-job/src/main/java/com/moral/api/config/xxl/XxlJobConfig.java b/screen-job/src/main/java/com/moral/api/config/xxl/XxlJobConfig.java
new file mode 100644
index 0000000..fc087e1
--- /dev/null
+++ b/screen-job/src/main/java/com/moral/api/config/xxl/XxlJobConfig.java
@@ -0,0 +1,135 @@
+package com.moral.api.config.xxl;
+
+
+import lombok.extern.slf4j.Slf4j;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.ComponentScan;
+import org.springframework.context.annotation.Configuration;
+
+import com.xxl.job.core.executor.impl.XxlJobSpringExecutor;
+
+@Configuration
+@ComponentScan(basePackages = "com.moral.api.jobHandler")
+@Slf4j
+public class XxlJobConfig {
+
+    @Value("${xxl.job.admin.addresses}")
+    private String adminAddresses;
+
+    @Value("${xxl.job.executor.appname}")
+    private String appName;
+
+    @Value("${xxl.job.executor.ip}")
+    private String ip;
+
+    @Value("${xxl.job.executor.port}")
+    private Integer port;
+
+    @Value("${xxl.job.accessToken}")
+    private String accessToken;
+
+    @Value("${xxl.job.executor.logpath}")
+    private String logPath;
+
+    @Value("${xxl.job.executor.logretentiondays}")
+    private Integer logRetentionDays;
+
+    @Bean
+    public XxlJobSpringExecutor xxlJobSpringExecutor(){
+        log.info("xxl jon config init");
+        XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor();
+        xxlJobSpringExecutor.setAdminAddresses(adminAddresses);
+        xxlJobSpringExecutor.setAppname(appName);
+        xxlJobSpringExecutor.setIp(ip);
+        xxlJobSpringExecutor.setPort(port);
+        xxlJobSpringExecutor.setAccessToken(accessToken);
+        xxlJobSpringExecutor.setLogPath(logPath);
+        xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays);
+        return xxlJobSpringExecutor;
+    }
+
+    @Override
+    public String toString() {
+        return "XxlJobConfig{" +
+                "adminAddresses='" + adminAddresses + '\'' +
+                ", appName='" + appName + '\'' +
+                ", ip='" + ip + '\'' +
+                ", port=" + port +
+                ", accessToken='" + accessToken + '\'' +
+                ", logPath='" + logPath + '\'' +
+                ", logRetentionDays=" + logRetentionDays +
+                '}';
+    }
+
+    public XxlJobConfig() {
+    }
+
+    public XxlJobConfig(String adminAddresses, String appName, String ip, Integer port, String accessToken, String logPath, Integer logRetentionDays) {
+        this.adminAddresses = adminAddresses;
+        this.appName = appName;
+        this.ip = ip;
+        this.port = port;
+        this.accessToken = accessToken;
+        this.logPath = logPath;
+        this.logRetentionDays = logRetentionDays;
+    }
+
+    public String getAdminAddresses() {
+        return adminAddresses;
+    }
+
+    public void setAdminAddresses(String adminAddresses) {
+        this.adminAddresses = adminAddresses;
+    }
+
+    public String getAppName() {
+        return appName;
+    }
+
+    public void setAppName(String appName) {
+        this.appName = appName;
+    }
+
+    public String getIp() {
+        return ip;
+    }
+
+    public void setIp(String ip) {
+        this.ip = ip;
+    }
+
+    public Integer getPort() {
+        return port;
+    }
+
+    public void setPort(Integer port) {
+        this.port = port;
+    }
+
+    public String getAccessToken() {
+        return accessToken;
+    }
+
+    public void setAccessToken(String accessToken) {
+        this.accessToken = accessToken;
+    }
+
+    public String getLogPath() {
+        return logPath;
+    }
+
+    public void setLogPath(String logPath) {
+        this.logPath = logPath;
+    }
+
+    public Integer getLogRetentionDays() {
+        return logRetentionDays;
+    }
+
+    public void setLogRetentionDays(Integer logRetentionDays) {
+        this.logRetentionDays = logRetentionDays;
+    }
+}
diff --git a/screen-job/src/main/java/com/moral/api/jobHandler/TestHandler.java b/screen-job/src/main/java/com/moral/api/jobHandler/TestHandler.java
new file mode 100644
index 0000000..9f0cf69
--- /dev/null
+++ b/screen-job/src/main/java/com/moral/api/jobHandler/TestHandler.java
@@ -0,0 +1,21 @@
+package com.moral.api.jobHandler;
+
+import org.springframework.stereotype.Component;
+
+import com.xxl.job.core.biz.model.ReturnT;
+import com.xxl.job.core.context.XxlJobHelper;
+import com.xxl.job.core.handler.annotation.XxlJob;
+
+@Component
+public class TestHandler{
+
+    @XxlJob("testJobHandler")
+    public ReturnT<String> execute(){
+        //���������������
+        String param = XxlJobHelper.getJobParam();
+        System.out.println(param);
+        System.out.println("������������������");
+        return ReturnT.SUCCESS;
+    }
+
+}
diff --git a/screen-job/src/main/resources/application-dev.yml b/screen-job/src/main/resources/application-dev.yml
index 5819e07..d996a3c 100644
--- a/screen-job/src/main/resources/application-dev.yml
+++ b/screen-job/src/main/resources/application-dev.yml
@@ -1,5 +1,5 @@
 server:
-  port: 8082
+  port: 8083
   tomcat:
     uri-encoding: UTF-8
     #���������������
@@ -79,7 +79,30 @@
     call-setters-on-nulls: true
     log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
 
+logging:
+  config: classpath:logback.xml
+xxl:
+  job:
+    admin:
+      # ���������������������������������������������������������������������������������������������������������������������������������"���������������������"���"������������������"
+      addresses: http://172.16.44.70:8090/xxl-job-admin
 
+    #���������������TOKEN������TOKEN���������������
+    accessToken:
+
+    #���������������,������������������
+    executor:
+      # ������������������������������������������������������������������������������������
+      #������������������"���������������������������������"���"���������������"���
+      #������������������������9999������������IP������������������������������IP������������������������������������IP������IP������������Host������������������������
+      #���������������������������������������������������������������������
+      appname: xxl-job-executor-sample-springboot
+      ip:
+      port: 9999
+      #���������������������������������������������������������������������������������������
+      logpath: /data/applogs/xxl-job/jobhandler
+      #������������������������������������������������������������������������������������������������������3���������������������-1���������������
+      logretentiondays: -1
 
 
 
diff --git a/screen-job/src/main/resources/logback.xml b/screen-job/src/main/resources/logback.xml
new file mode 100644
index 0000000..d5a0d2c
--- /dev/null
+++ b/screen-job/src/main/resources/logback.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<configuration debug="false" scan="true" scanPeriod="1 seconds">
+
+    <contextName>logback</contextName>
+    <property name="log.path" value="/data/applogs/xxl-job/xxl-job-executor-sample-springboot.log"/>
+
+    <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
+        <encoder>
+            <pattern>%d{HH:mm:ss.SSS} %contextName [%thread] %-5level %logger{36} - %msg%n</pattern>
+        </encoder>
+    </appender>
+
+    <appender name="file" class="ch.qos.logback.core.rolling.RollingFileAppender">
+        <file>${log.path}</file>
+        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+            <fileNamePattern>${log.path}.%d{yyyy-MM-dd}.zip</fileNamePattern>
+        </rollingPolicy>
+        <encoder>
+            <pattern>%date %level [%thread] %logger{36} [%file : %line] %msg%n
+            </pattern>
+        </encoder>
+    </appender>
+
+    <root level="info">
+        <appender-ref ref="console"/>
+        <appender-ref ref="file"/>
+    </root>
+
+</configuration>
\ No newline at end of file
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 f15c064..12d9db2 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
@@ -8,6 +8,7 @@
 import com.moral.util.PageResult;
 import com.moral.util.TokenEncryptUtils;
 import com.moral.util.TokenUtils;
+
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiImplicitParams;
@@ -18,6 +19,7 @@
 import org.springframework.web.bind.annotation.*;
 
 import javax.annotation.Resource;
+
 import java.io.*;
 
 
@@ -32,6 +34,7 @@
 
     @Resource
     private TestService testService;
+
     /**
      * name   ������
      * email  ������
@@ -39,9 +42,9 @@
      */
     @ApiOperation(value = "������������", notes = "������������")
     @RequestMapping(value = "/saveTest", method = RequestMethod.POST)
-    public ResultMessage save()  {
+    public ResultMessage save() {
 
-        Test test=new Test();
+        Test test = new Test();
         test.setEmail("test@qq.com");
         test.setName("name");
         test.setMobile("13965898745");
@@ -49,27 +52,28 @@
         return ResultMessage.ok();
 
     }
+
     /**
      * page   ���������
      * size   ������������
      */
     @ApiOperation(value = "������", notes = "������")
     @ApiImplicitParams({
-            @ApiImplicitParam(name="page",value="������������",required=true,paramType="path",dataType="Int"),
-            @ApiImplicitParam(name="size",value="������������",required=true,paramType="path",dataType="Int")
+            @ApiImplicitParam(name = "page", value = "������������", required = true, paramType = "path", dataType = "Int"),
+            @ApiImplicitParam(name = "size", value = "������������", required = true, paramType = "path", dataType = "Int")
     })
     @RequestMapping(value = "search/{page}/{size}", method = RequestMethod.GET)
     public ResultMessage findBypage(@PathVariable("page") Integer page, @PathVariable("size") Integer size) {
 
-        log.info("page is:"+ page+" size is:"+size);
+        log.info("page is:" + page + " size is:" + size);
         //������������������������
         Page<Test> userPage = testService.selectByPage(null, page, size);
         //������������������������
         PageResult<Test> pageResult = new PageResult<>(
-                userPage.getTotal(), userPage.getPages(),userPage.getRecords()
+                userPage.getTotal(), userPage.getPages(), userPage.getRecords()
         );
         //������������
-        return  ResultMessage.ok(pageResult);
+        return ResultMessage.ok(pageResult);
     }
 
 
@@ -79,7 +83,7 @@
     @ApiOperation(value = "redis������", notes = "redis������")
     @RequestMapping(value = "redis", method = RequestMethod.GET)
     public ResultMessage testRedis() {
-        RedisUtil.set("redistest","test");
+        RedisUtil.set("redistest", "test");
         return ResultMessage.ok(RedisUtil.get("redistest"));
 
     }
@@ -89,7 +93,7 @@
      */
     @ApiOperation(value = "������������", notes = "������������")
     @RequestMapping(value = "saveTest", method = RequestMethod.GET)
-    public ResultMessage saveTest() throws Exception{
+    public ResultMessage saveTest() throws Exception {
         testService.saveTest();
         return ResultMessage.ok();
 
@@ -99,13 +103,16 @@
      * kafka������
      */
     @ApiOperation(value = "kafka������", notes = "kafka������")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "token", value = "token", required = true, paramType = "header", dataType = "String")
+    })
     @RequestMapping(value = "kafkaTest", method = RequestMethod.GET)
     public void kafkaTest() {
-        kafkaTemplate.send("test_topic","test111111111111111");
+        kafkaTemplate.send("test_topic", "{'mac': 'p5dnd1234567','DataTime':1623058244104,'e1':10,'e2':20,'ver':2}");
     }
 
     @GetMapping("testToken")
-    public void testToken(){
+    public void testToken() {
         String decoded = TokenEncryptUtils.decoded("5b53480d4e570b54565f555775");
         String decoded2 = TokenEncryptUtils.decoded("584f560a49510f5453515453");
         System.out.println(decoded);
@@ -117,7 +124,7 @@
         BufferedReader fis = new BufferedReader(new FileReader(path));
         BufferedWriter writer = new BufferedWriter(new FileWriter("C:\\Users\\cdl\\Desktop\\provin1ce.txt"));
         String line = "";
-        while((line = fis.readLine())!=null){
+        while ((line = fis.readLine()) != null) {
             //������code
             StringBuilder str = new StringBuilder(line);
             String code = str.substring(31, 37);
@@ -127,9 +134,9 @@
             int i = 0;
             StringBuilder buffered = new StringBuilder();
             for (char aChar : chars) {
-                if(aChar=='\'')
-                    i ++;
-                if(i==1){
+                if (aChar == '\'')
+                    i++;
+                if (i == 1) {
                     buffered.append(aChar);
                 }
             }
@@ -142,15 +149,15 @@
             int j = 0;
             StringBuilder buffered2 = new StringBuilder();
             for (char c : chars1) {
-                if(j==6){
+                if (j == 6) {
                     buffered2.append(c);
                 }
-                if(c==',')
+                if (c == ',')
                     j++;
             }
             StringBuilder parentCode = buffered2.deleteCharAt(buffered2.length() - 1);
             //������
-            writer.write("INSERT INTO `sys_area` VALUES ("+code+","+name+","+parentCode+");");
+            writer.write("INSERT INTO `sys_area` VALUES (" + code + "," + name + "," + parentCode + ");");
             writer.newLine();
         }
 
diff --git a/screen-manage/src/main/java/com/moral/api/kafka/consumer/KafkaReceiver.java b/screen-manage/src/main/java/com/moral/api/kafka/consumer/KafkaReceiver.java
new file mode 100644
index 0000000..8119640
--- /dev/null
+++ b/screen-manage/src/main/java/com/moral/api/kafka/consumer/KafkaReceiver.java
@@ -0,0 +1,97 @@
+package com.moral.api.kafka.consumer;
+
+import lombok.extern.slf4j.Slf4j;
+import org.apache.kafka.clients.consumer.ConsumerRecord;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.kafka.annotation.KafkaListener;
+import org.springframework.kafka.support.Acknowledgment;
+import org.springframework.stereotype.Component;
+import org.springframework.util.StringUtils;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import com.alibaba.fastjson.JSON;
+import com.moral.api.service.DeviceService;
+import com.moral.api.service.HistoryHourlyService;
+import com.moral.api.service.HistoryMinutelyService;
+import com.moral.constant.KafkaConstants;
+
+/*@Slf4j
+@Component
+public class KafkaReceiver {
+
+    @Autowired
+    private HistoryMinutelyService historyMinutelyService;
+
+    @Autowired
+    private HistoryHourlyService historyHourlyService;
+
+    @Autowired
+    private DeviceService deviceService;
+
+    //������������
+    @KafkaListener(topics = KafkaConstants.TOPIC_MINUTE, groupId = KafkaConstants.GROUP_ID, containerFactory = "kafkaListenerContainerFactory")
+    public void listenMinute(ConsumerRecord<String, String> record, Acknowledgment ack) {
+        String msg = record.value();
+        try {
+            Map<String, Object> data = JSON.parseObject(msg, HashMap.class);
+            System.out.println(data);
+            Object mac = data.get("mac");
+            Object time = data.get("DataTime");
+            Object ver = data.get("ver");
+            if (StringUtils.isEmpty(ver) || StringUtils.isEmpty(time) || StringUtils.isEmpty(mac)) {
+                log.warn("some properties is null, param[0] message:" + msg);
+                return;
+            }
+            Map<String, Object> deviceInfo = deviceService.getDeviceByMac(mac.toString());
+            if (deviceInfo == null) {
+                String deviceRealState = "null or deleted";
+                log.warn("device record is " + deviceRealState + ", param[0] message:" + msg);
+                return;
+            }
+            //���������������������������
+            data.put("DataTime", Math.round(new Double((Long) time) / 1000) * 1000);
+
+            //���������������
+            historyMinutelyService.insertHistoryMinutely(data);
+
+
+            ack.acknowledge();
+        } catch (Exception e) {
+            log.error("param[0] message:" + msg);
+        }
+    }
+
+    //������������
+    @KafkaListener(topics = KafkaConstants.TOPIC_HOUR, groupId = KafkaConstants.GROUP_ID, containerFactory = "kafkaListenerContainerFactory")
+    public void listenHour(ConsumerRecord<String, String> record, Acknowledgment ack) {
+        String msg = record.value();
+        try {
+            Map<String, Object> data = JSON.parseObject(msg, HashMap.class);
+            System.out.println(data);
+            Object mac = data.get("mac");
+            Object time = data.get("DataTime");
+            Object ver = data.get("ver");
+            if (StringUtils.isEmpty(ver) || StringUtils.isEmpty(time) || StringUtils.isEmpty(mac)) {
+                log.warn("some properties is null, param[0] message:" + msg);
+                return;
+            }
+            Map<String, Object> deviceInfo = deviceService.getDeviceByMac(mac.toString());
+            if (deviceInfo == null) {
+                String deviceRealState = "null or deleted";
+                log.warn("device record is " + deviceRealState + ", param[0] message:" + msg);
+                return;
+            }
+            //���������������������������
+            data.put("DataTime", Math.round(new Double((Long) time) / 1000) * 1000);
+
+            //���������������
+            historyHourlyService.insertHistoryHourly(data);
+
+            ack.acknowledge();
+        } catch (Exception e) {
+            log.error("param[0] message:" + msg);
+        }
+    }
+}*/
diff --git a/screen-manage/src/main/java/com/moral/api/mapper/HistoryMinutelyMapper.java b/screen-manage/src/main/java/com/moral/api/mapper/HistoryMinutelyMapper.java
new file mode 100644
index 0000000..ce88532
--- /dev/null
+++ b/screen-manage/src/main/java/com/moral/api/mapper/HistoryMinutelyMapper.java
@@ -0,0 +1,20 @@
+package com.moral.api.mapper;
+
+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-04
+ */
+public interface HistoryMinutelyMapper{
+
+    int insertHistoryMinutely(Map<String,Object> params);
+
+}
\ No newline at end of file
diff --git a/screen-manage/src/main/java/com/moral/api/service/DeviceService.java b/screen-manage/src/main/java/com/moral/api/service/DeviceService.java
index eb68f0a..5fac936 100644
--- a/screen-manage/src/main/java/com/moral/api/service/DeviceService.java
+++ b/screen-manage/src/main/java/com/moral/api/service/DeviceService.java
@@ -52,4 +52,13 @@
     //������������id������������������������������������������������������������������������������������������������
     Map<String, Object> selectDeviceInfoById(Integer deviceId);
 
+    //������mac������������������
+    Map<String, Object> getDeviceByMac(String mac);
+
+    //������������������
+    Map<String, Object> adjustDeviceData(Map<String, Object> deviceData, Map<String, Object> deviceInfo);
+
+    //���������������������������
+    Map<String, Object> judgeDeviceState(Map<String, Object> data, Map<String, Object> deviceInfo);
+
 }
diff --git a/screen-manage/src/main/java/com/moral/api/service/HistoryMinutelyService.java b/screen-manage/src/main/java/com/moral/api/service/HistoryMinutelyService.java
new file mode 100644
index 0000000..8d2994c
--- /dev/null
+++ b/screen-manage/src/main/java/com/moral/api/service/HistoryMinutelyService.java
@@ -0,0 +1,20 @@
+package com.moral.api.service;
+
+import java.util.Map;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.moral.api.entity.HistoryHourly;
+
+/**
+ * <p>
+ * ��������� ���������
+ * </p>
+ *
+ * @author moral
+ * @since 2021-06-04
+ */
+public interface HistoryMinutelyService {
+
+    void insertHistoryMinutely(Map<String, Object> deviceData);
+
+}
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 01836ff..6a972f9 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
@@ -1,5 +1,6 @@
 package com.moral.api.service.impl;
 
+import com.alibaba.fastjson.JSON;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -22,11 +23,12 @@
 
 import com.moral.api.util.LogUtils;
 import com.moral.constant.Constants;
-import com.moral.redis.RedisUtil;
+import com.moral.constant.RedisConstants;
 import com.moral.util.ConvertUtils;
 import com.moral.util.DateUtils;
 
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.context.request.RequestContextHolder;
@@ -75,6 +77,49 @@
     @Autowired
     private LogUtils logUtils;
 
+    @Autowired
+    private RedisTemplate redisTemplate;
+
+
+    /*
+     * ���redis������������������
+     * */
+    private Map<String, Object> getDeviceInfoFromRedis(String mac) {
+        Map<String, Object> deviceInfo = (Map<String, Object>) redisTemplate.opsForValue().get(RedisConstants.DEVICE + mac);
+        return deviceInfo;
+    }
+
+    /*
+     * ������������������redis
+     */
+    private void setDeviceInfoToRedis(String mac, Map<String, Object> deviceInfo) {
+        redisTemplate.opsForValue().set(getDeviceKey(mac), deviceInfo);
+    }
+
+    /*
+     * ���redis������������������
+     */
+    private void delDeviceInfoFromRedis(String mac) {
+        redisTemplate.delete(getDeviceKey(mac));
+    }
+
+    /*
+     * ���������������������redis������key
+     */
+    private String getDeviceKey(String mac) {
+        return keysConnect(RedisConstants.DEVICE, mac);
+    }
+
+    //redis key������
+    private String keysConnect(String... keys) {
+        StringBuilder key = new StringBuilder(keys[0]);
+        for (int i = 1; i < keys.length; i++) {
+            key.append("_");
+            key.append(keys[i]);
+        }
+        return key.toString().toLowerCase();
+    }
+
     @Override
     @Transactional
     public void insert(Device device) {
@@ -83,12 +128,15 @@
         deviceMapper.insert(device);
         Map<String, Object> deviceInfo = selectDeviceInfoById(device.getId());
         //������������������������redis
-        RedisUtil.del("device_" + device.getMac());
-        RedisUtil.set("device_" + device.getMac(), deviceInfo);
+        String mac = device.getMac();
+        //���redis���������������������
+        delDeviceInfoFromRedis(mac);
+        //������������������redis
+        setDeviceInfoToRedis(mac, deviceInfo);
         //������������������
         HttpServletRequest request = ((ServletRequestAttributes) Objects.requireNonNull(RequestContextHolder.getRequestAttributes())).getRequest();
         StringBuilder content = new StringBuilder();
-        content.append("������������������").append(device.getName()).append("���").append("mac���").append(device.getMac());
+        content.append("������������������").append(device.getName()).append("���").append("mac���").append(mac);
         logUtils.saveOperationForManage(request, content.toString(), Constants.INSERT_OPERATE_TYPE);
     }
 
@@ -100,8 +148,8 @@
         deviceMapper.update(null, updateWrapper);
         Device device = deviceMapper.selectById(deviceId);
         String mac = device.getMac();
-        //������redis
-        RedisUtil.del("device_" + mac);
+        //���redis���������������������
+        delDeviceInfoFromRedis(mac);
         //������������������
         HttpServletRequest request = ((ServletRequestAttributes) Objects.requireNonNull(RequestContextHolder.getRequestAttributes())).getRequest();
         StringBuilder content = new StringBuilder();
@@ -116,10 +164,11 @@
         Device oldDevice = deviceMapper.selectById(deviceId);
         deviceMapper.updateById(device);
         String mac = deviceMapper.selectById(deviceId).getMac();
-        //������redis
-        RedisUtil.del("device_" + mac);
+        //���redis���������������������
+        delDeviceInfoFromRedis(mac);
         Map<String, Object> deviceInfo = selectDeviceInfoById(deviceId);
-        RedisUtil.set("device_" + mac, deviceInfo);
+        //������������������redis
+        setDeviceInfoToRedis(mac, deviceInfo);
         //������������������
         HttpServletRequest request = ((ServletRequestAttributes) Objects.requireNonNull(RequestContextHolder.getRequestAttributes())).getRequest();
         StringBuilder content = new StringBuilder();
@@ -249,7 +298,7 @@
     @Override
     public Map<String, Object> selectDeviceInfoById(Integer deviceId) {
         String mac = deviceMapper.selectById(deviceId).getMac();
-        Map<String, Object> deviceInfo = (Map<String, Object>) RedisUtil.get("device_" + mac);
+        Map<String, Object> deviceInfo = getDeviceInfoFromRedis(mac);
         //������redis������
         if (deviceInfo != null) {
             return deviceInfo;
@@ -317,7 +366,7 @@
         mpInfo.put("name", monitorPoint.getName());
         deviceInfo.put("monitorPoint", mpInfo);
 
-        RedisUtil.set("device_" + mac, deviceInfo);
+        setDeviceInfoToRedis(mac, deviceInfo);
         return deviceInfo;
     }
 
@@ -335,4 +384,30 @@
         return monitorPointMapper.selectMaps(queryWrapper);
     }
 
+    @Override
+    public Map<String, Object> getDeviceByMac(String mac) {
+        Map<String, Object> deviceInfo = getDeviceInfoFromRedis(mac);
+        if (deviceInfo == null) {
+            QueryWrapper<Device> queryWrapper = new QueryWrapper<>();
+            queryWrapper.eq("mac", mac).eq("is_delete", Constants.NOT_DELETE);
+            Device device = deviceMapper.selectOne(queryWrapper);
+            if (device != null) {
+                deviceInfo = selectDeviceInfoById(device.getId());
+                setDeviceInfoToRedis(mac, deviceInfo);
+            }
+        }
+        return deviceInfo;
+    }
+
+    @Override
+    public Map<String, Object> adjustDeviceData(Map<String, Object> deviceData, Map<String, Object> deviceInfo) {
+        return null;
+    }
+
+    @Override
+    public Map<String, Object> judgeDeviceState(Map<String, Object> deviceData, Map<String, Object> deviceInfo) {
+        return null;
+    }
+
+
 }
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
new file mode 100644
index 0000000..6df638c
--- /dev/null
+++ b/screen-manage/src/main/java/com/moral/api/service/impl/HistoryMinutelyServiceImpl.java
@@ -0,0 +1,63 @@
+package com.moral.api.service.impl;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Map;
+
+import com.alibaba.fastjson.JSON;
+import com.moral.api.mapper.HistoryMinutelyMapper;
+import com.moral.api.service.DeviceService;
+import com.moral.api.service.HistoryMinutelyService;
+import com.moral.constant.Constants;
+import com.moral.util.DateUtils;
+
+@Service
+public class HistoryMinutelyServiceImpl implements HistoryMinutelyService {
+
+    @Autowired
+    private HistoryMinutelyMapper historyMinutelyMapper;
+
+    @Autowired
+    private DeviceService deviceService;
+
+    @Override
+    public void insertHistoryMinutely(Map<String, Object> deviceData) {
+        Map<String, Object> result = new HashMap<>();
+        Object mac = deviceData.remove("mac");
+        result.put("mac", mac);
+        result.put("version", deviceData.remove("ver"));
+        Date time = new Date((Long) deviceData.remove("DataTime"));
+        result.put("time", DateUtils.dateToDateString(time));
+        result.put("value", JSON.toJSONString(deviceData));
+        String timeUnits = DateUtils.dateToDateString(time, DateUtils.yyyyMM_EN);
+        result.put("timeUnits", tableSuffix(timeUnits, Constants.UN_ADJUST));
+        //���������
+        historyMinutelyMapper.insertHistoryMinutely(result);
+
+        //������������
+        Map<String, Object> deviceInfo = deviceService.getDeviceByMac(mac.toString());
+
+        //���������������������������������������
+        result.put("timeUnits", timeUnits);
+        deviceData = deviceService.adjustDeviceData(deviceData, deviceInfo);
+        result.put("value", JSON.toJSONString(deviceData));
+        historyMinutelyMapper.insertHistoryMinutely(result);
+
+        //������������������
+        Map<String, Object> deviceState = deviceService.judgeDeviceState(deviceData, deviceInfo);
+    }
+
+    //���������
+    private String tableSuffix(String... keys) {
+        StringBuilder key = new StringBuilder(keys[0]);
+        for (int i = 1; i < keys.length; i++) {
+            key.append("_");
+            key.append(keys[i]);
+        }
+        return key.toString();
+    }
+
+}
diff --git a/screen-manage/src/main/resources/mapper/HistoryMinutelyMapper.xml b/screen-manage/src/main/resources/mapper/HistoryMinutelyMapper.xml
new file mode 100644
index 0000000..2094b2a
--- /dev/null
+++ b/screen-manage/src/main/resources/mapper/HistoryMinutelyMapper.xml
@@ -0,0 +1,9 @@
+<?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.HistoryMinutelyMapper">
+
+    <insert id="insertHistoryMinutely">
+        INSERT INTO history_minutely_${timeUnits} VALUES (#{mac}, #{time}, #{value}, #{version})
+    </insert>
+
+</mapper>
\ No newline at end of file

--
Gitblit v1.8.0