From c534d4ac66958e9f2e9be2d9d7587c55fb3bb42f Mon Sep 17 00:00:00 2001
From: ZhuDongming <773644075@qq.com>
Date: Fri, 17 Apr 2020 11:12:27 +0800
Subject: [PATCH] add 走航车等设备的history表数据重新存一份

---
 src/main/java/com/moral/service/HistoryService.java          |   13 ++
 src/main/java/com/moral/service/impl/HistoryServiceImpl.java |   29 +++++
 src/main/java/com/moral/mapper/HistoryMapper.java            |   22 ++-
 src/main/resources/mapper/HistoryMapper.xml                  |  176 +++++++++++++++++++---------------
 src/main/java/com/moral/task/HistoryTableInsertTask.java     |   32 ++++++
 5 files changed, 184 insertions(+), 88 deletions(-)

diff --git a/src/main/java/com/moral/mapper/HistoryMapper.java b/src/main/java/com/moral/mapper/HistoryMapper.java
index d9ac919..e635f18 100644
--- a/src/main/java/com/moral/mapper/HistoryMapper.java
+++ b/src/main/java/com/moral/mapper/HistoryMapper.java
@@ -10,18 +10,22 @@
 
     int insertSelective(History record);
 
-	Map<String, Object> getAvgData(Map<String,Object> parameters);
-	
-	Map<String, Object> getMaxAndMinData(Map<String,Object> parameters);
+    Map<String, Object> getAvgData(Map<String, Object> parameters);
 
-    List<Map<String, Object>> getSensorData(Map<String,Object> parameters);
+    Map<String, Object> getMaxAndMinData(Map<String, Object> parameters);
 
-    List<Map<String, Object>> getSensorDataByMac(Map<String,Object> parameters);
+    List<Map<String, Object>> getSensorData(Map<String, Object> parameters);
 
-    List<Map<String, Object>> getSensorDataByMacOnce(Map<String,Object> parameters);
+    List<Map<String, Object>> getSensorDataByMac(Map<String, Object> parameters);
 
-    List<Map<String, Object>> getSensorDataOnce(Map<String,Object> parameters);
-	
-	Map<String, Object> getMinData(Map<String,Object> parameters);
+    List<Map<String, Object>> getSensorDataByMacOnce(Map<String, Object> parameters);
+
+    List<Map<String, Object>> getSensorDataOnce(Map<String, Object> parameters);
+
+    Map<String, Object> getMinData(Map<String, Object> parameters);
+
+    List<History> selectByMacAndTime(Map<String, Object> parameters);
+
+    int insertHistorySpecialTable(Map<String, Object> parameters);
 
 }
\ No newline at end of file
diff --git a/src/main/java/com/moral/service/HistoryService.java b/src/main/java/com/moral/service/HistoryService.java
new file mode 100644
index 0000000..8472db8
--- /dev/null
+++ b/src/main/java/com/moral/service/HistoryService.java
@@ -0,0 +1,13 @@
+package com.moral.service;
+
+import java.util.List;
+import java.util.Map;
+
+import com.moral.entity.History;
+
+public interface HistoryService {
+
+    List<History> selectByMacAndTime(Map<String, Object> parameters);
+
+    int insertHistorySpecialTable(Map<String, Object> parameters);
+}
diff --git a/src/main/java/com/moral/service/impl/HistoryServiceImpl.java b/src/main/java/com/moral/service/impl/HistoryServiceImpl.java
new file mode 100644
index 0000000..a10debc
--- /dev/null
+++ b/src/main/java/com/moral/service/impl/HistoryServiceImpl.java
@@ -0,0 +1,29 @@
+package com.moral.service.impl;
+
+import java.util.List;
+import java.util.Map;
+
+import javax.annotation.Resource;
+
+import org.springframework.stereotype.Service;
+
+import com.moral.entity.History;
+import com.moral.mapper.HistoryMapper;
+import com.moral.service.HistoryService;
+
+@Service
+public class HistoryServiceImpl implements HistoryService {
+
+    @Resource
+    private HistoryMapper historyMapper;
+
+    @Override
+    public List<History> selectByMacAndTime(Map<String, Object> parameters) {
+        return historyMapper.selectByMacAndTime(parameters);
+    }
+
+    @Override
+    public int insertHistorySpecialTable(Map<String, Object> parameters) {
+        return historyMapper.insertHistorySpecialTable(parameters);
+    }
+}
diff --git a/src/main/java/com/moral/task/HistoryTableInsertTask.java b/src/main/java/com/moral/task/HistoryTableInsertTask.java
index c2437db..009c19b 100644
--- a/src/main/java/com/moral/task/HistoryTableInsertTask.java
+++ b/src/main/java/com/moral/task/HistoryTableInsertTask.java
@@ -20,10 +20,12 @@
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
+import com.moral.entity.History;
 import com.moral.service.DeviceService;
 import com.moral.service.HistoryDailyService;
 import com.moral.service.HistoryHourlyService;
 import com.moral.service.HistoryMinutelyService;
+import com.moral.service.HistoryService;
 import com.moral.service.SensorService;
 import com.xxl.job.core.biz.model.ReturnT;
 import com.xxl.job.core.handler.annotation.XxlJob;
@@ -38,6 +40,9 @@
 
     @Resource
     private DeviceService deviceService;
+
+    @Resource
+    private HistoryService historyService;
 
     @Resource
     private HistoryMinutelyService historyMinutelyService;
@@ -881,4 +886,31 @@
         return returnT;
     }
 
+    @XxlJob("historySpecial")
+    public ReturnT insertHistorySpecialTable(String params) {
+        Map macMap = JSON.parseObject(params);
+        List<String> macList = (List<String>) macMap.get("mac");
+        LocalDateTime value = LocalDateTime.now();
+        LocalDateTime time = value.truncatedTo(ChronoUnit.SECONDS);
+        LocalDateTime tenSecondsAgo = time.minusSeconds(10);
+        Map<String, Object> devices = new HashMap<>();
+        devices.put("macList", macList);
+        devices.put("time", tenSecondsAgo);
+        try {
+            List<History> historyData = historyService.selectByMacAndTime(devices);
+            if (!CollectionUtils.isEmpty(historyData)) {
+                int count = historyService.insertHistorySpecialTable(devices);
+                XxlJobLogger.log("insertHistorySpecialTable:" + count);
+                ReturnT returnT = new ReturnT(200, "������historySpecial���������");
+                return returnT;
+            }
+        } catch (Exception e) {
+            XxlJobLogger.log("insertHistorySpecialTableException:" + e.getMessage());
+            logger.error(e.getMessage());
+            e.printStackTrace();
+        }
+        ReturnT returnT = new ReturnT(500, "������historySpecial���������");
+        return returnT;
+    }
+
 }
diff --git a/src/main/resources/mapper/HistoryMapper.xml b/src/main/resources/mapper/HistoryMapper.xml
index 823b530..b2b22d9 100644
--- a/src/main/resources/mapper/HistoryMapper.xml
+++ b/src/main/resources/mapper/HistoryMapper.xml
@@ -1,91 +1,91 @@
 <?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.mapper.HistoryMapper">
-  <resultMap id="BaseResultMap" type="com.moral.entity.History">
-    <result column="mac" jdbcType="VARCHAR" property="mac" />
-    <result column="value" jdbcType="OTHER" property="value" />
-    <result column="time" jdbcType="TIMESTAMP" property="time" />
-    <result column="version" jdbcType="INTEGER" property="version" />
-  </resultMap>
-  <insert id="insert" parameterType="com.moral.entity.History">
+    <resultMap id="BaseResultMap" type="com.moral.entity.History">
+        <result column="mac" jdbcType="VARCHAR" property="mac"/>
+        <result column="value" jdbcType="OTHER" property="value"/>
+        <result column="time" jdbcType="TIMESTAMP" property="time"/>
+        <result column="version" jdbcType="INTEGER" property="version"/>
+    </resultMap>
+    <insert id="insert" parameterType="com.moral.entity.History">
     insert into history (mac, value, time, 
       version)
     values (#{mac,jdbcType=VARCHAR}, #{value,jdbcType=OTHER}, #{time,jdbcType=TIMESTAMP}, 
       #{version,jdbcType=INTEGER})
   </insert>
-  <insert id="insertSelective" parameterType="com.moral.entity.History">
-    insert into history
-    <trim prefix="(" suffix=")" suffixOverrides=",">
-      <if test="mac != null">
-        mac,
-      </if>
-      <if test="value != null">
-        value,
-      </if>
-      <if test="time != null">
-        time,
-      </if>
-      <if test="version != null">
-        version,
-      </if>
-    </trim>
-    <trim prefix="values (" suffix=")" suffixOverrides=",">
-      <if test="mac != null">
-        #{mac,jdbcType=VARCHAR},
-      </if>
-      <if test="value != null">
-        #{value,jdbcType=OTHER},
-      </if>
-      <if test="time != null">
-        #{time,jdbcType=TIMESTAMP},
-      </if>
-      <if test="version != null">
-        #{version,jdbcType=INTEGER},
-      </if>
-    </trim>
-  </insert>
-	<select id="getAvgData" resultType="java.util.Map">
-		SELECT
-			<foreach  collection="sensorKeys" separator="," item="sensorKey">
-				AVG(value->'$.${sensorKey}') AS '${sensorKey}'
-			</foreach>
-		FROM
-			history h
-		WHERE
-			h.time >= #{start}
-		AND h.time <![CDATA[<]]> #{end}
-		AND	h.mac = #{mac}
-	</select>
-	<select id="getMaxAndMinData" resultType="java.util.Map">
-		SELECT
-			<foreach  collection="sensorKeys" separator="," item="sensorKey">
-				max(cast(h.value ->'$.${sensorKey}' as decimal(11,3))) AS 'max${sensorKey}',
-            	MIN(cast(h.value ->'$.${sensorKey}' as decimal(11,3))) AS 'min${sensorKey}'
-			</foreach>
-		FROM
-			history h
-		WHERE
-			h.time >= #{start}
-		AND h.time <![CDATA[<]]> #{end}
-		AND	h.mac = #{mac}
-	</select>
-	<select id="getMinData" resultType="java.util.Map">
-		SELECT
-			<foreach  collection="sensorKeys" separator="," item="sensorKey">
-				MIN(value->'$.${sensorKey}') AS '${sensorKey}'
-			</foreach>
-		FROM
-			history h
-		WHERE
-			h.time >= #{start}
-		AND h.time <![CDATA[<]]> #{end}
-		AND	h.mac = #{mac}
-	</select>
+    <insert id="insertSelective" parameterType="com.moral.entity.History">
+        insert into history
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="mac != null">
+                mac,
+            </if>
+            <if test="value != null">
+                value,
+            </if>
+            <if test="time != null">
+                time,
+            </if>
+            <if test="version != null">
+                version,
+            </if>
+        </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="mac != null">
+                #{mac,jdbcType=VARCHAR},
+            </if>
+            <if test="value != null">
+                #{value,jdbcType=OTHER},
+            </if>
+            <if test="time != null">
+                #{time,jdbcType=TIMESTAMP},
+            </if>
+            <if test="version != null">
+                #{version,jdbcType=INTEGER},
+            </if>
+        </trim>
+    </insert>
+    <select id="getAvgData" resultType="java.util.Map">
+        SELECT
+        <foreach collection="sensorKeys" separator="," item="sensorKey">
+            AVG(value->'$.${sensorKey}') AS '${sensorKey}'
+        </foreach>
+        FROM
+        history h
+        WHERE
+        h.time >= #{start}
+        AND h.time <![CDATA[<]]> #{end}
+        AND h.mac = #{mac}
+    </select>
+    <select id="getMaxAndMinData" resultType="java.util.Map">
+        SELECT
+        <foreach collection="sensorKeys" separator="," item="sensorKey">
+            max(cast(h.value ->'$.${sensorKey}' as decimal(11,3))) AS 'max${sensorKey}',
+            MIN(cast(h.value ->'$.${sensorKey}' as decimal(11,3))) AS 'min${sensorKey}'
+        </foreach>
+        FROM
+        history h
+        WHERE
+        h.time >= #{start}
+        AND h.time <![CDATA[<]]> #{end}
+        AND h.mac = #{mac}
+    </select>
+    <select id="getMinData" resultType="java.util.Map">
+        SELECT
+        <foreach collection="sensorKeys" separator="," item="sensorKey">
+            MIN(value->'$.${sensorKey}') AS '${sensorKey}'
+        </foreach>
+        FROM
+        history h
+        WHERE
+        h.time >= #{start}
+        AND h.time <![CDATA[<]]> #{end}
+        AND h.mac = #{mac}
+    </select>
 
     <select id="getSensorData" resultType="java.util.LinkedHashMap">
         SELECT
         h.mac,
-        <foreach  collection="sensorKeys" separator="," item="sensorKey">
+        <foreach collection="sensorKeys" separator="," item="sensorKey">
             AVG(value->'$.${sensorKey}') AS '${sensorKey}',
             MAX(cast(h.value ->'$.${sensorKey}' as decimal(11,3))) AS 'MAX${sensorKey}',
             MIN(cast(h.value ->'$.${sensorKey}' as decimal(11,3))) AS 'MIN${sensorKey}'
@@ -102,7 +102,7 @@
     <select id="getSensorDataByMac" resultType="java.util.LinkedHashMap">
         SELECT
         h.mac,
-        <foreach  collection="sensorKeys" separator="," item="sensorKey">
+        <foreach collection="sensorKeys" separator="," item="sensorKey">
             AVG(value->'$.${sensorKey}') AS '${sensorKey}',
             MAX(cast(h.value ->'$.${sensorKey}' as decimal(11,3))) AS 'MAX${sensorKey}',
             MIN(cast(h.value ->'$.${sensorKey}' as decimal(11,3))) AS 'MIN${sensorKey}'
@@ -123,7 +123,7 @@
     <select id="getSensorDataByMacOnce" resultType="java.util.LinkedHashMap">
         SELECT
         h.mac,DATE_FORMAT(time,'%Y-%m-%dT%H:%i') time,
-        <foreach  collection="sensorKeys" separator="," item="sensorKey">
+        <foreach collection="sensorKeys" separator="," item="sensorKey">
             AVG(value->'$.${sensorKey}') AS '${sensorKey}',
             MAX(cast(h.value ->'$.${sensorKey}' as decimal(11,3))) AS 'MAX${sensorKey}',
             MIN(cast(h.value ->'$.${sensorKey}' as decimal(11,3))) AS 'MIN${sensorKey}'
@@ -144,7 +144,7 @@
     <select id="getSensorDataOnce" resultType="java.util.LinkedHashMap">
         SELECT
         h.mac,DATE_FORMAT(time,'%Y-%m-%dT%H:%i') time,
-        <foreach  collection="sensorKeys" separator="," item="sensorKey">
+        <foreach collection="sensorKeys" separator="," item="sensorKey">
             AVG(value->'$.${sensorKey}') AS '${sensorKey}',
             MAX(cast(h.value ->'$.${sensorKey}' as decimal(11,3))) AS 'MAX${sensorKey}',
             MIN(cast(h.value ->'$.${sensorKey}' as decimal(11,3))) AS 'MIN${sensorKey}'
@@ -158,4 +158,22 @@
         h.mac,DATE_FORMAT(time,'%Y-%m-%dT%H:%i')
     </select>
 
+    <select id="selectByMacAndTime" resultType="com.moral.entity.History">
+        SELECT *
+        from history
+        WHERE time = #{time} and mac in
+        <foreach collection="macList" index="index" item="mac" open="(" separator="," close=")">
+            #{mac}
+        </foreach>
+    </select>
+
+    <insert id="insertHistorySpecialTable">
+        insert into
+        history_special(mac, value, time,version)
+        SELECT * from history WHERE time = #{time} and mac in
+        <foreach collection="macList" index="index" item="mac" open="(" separator="," close=")">
+            #{mac}
+        </foreach>
+    </insert>
+
 </mapper>
\ No newline at end of file

--
Gitblit v1.8.0