From c49d3947b165e0868d48a4c969e55093b8d05705 Mon Sep 17 00:00:00 2001
From: jinpengyong <jpy123456>
Date: Tue, 19 May 2020 17:06:11 +0800
Subject: [PATCH] alarm_daily统计任务,创建alarm年月分表任务,alarm相关接口更新
---
src/main/resources/mapper/AlarmMapper.xml | 44 +++++++++++
src/main/java/com/moral/mapper/AlarmMapper.java | 15 +++
src/main/java/com/moral/service/impl/AlarmServiceImpl.java | 35 ++++++++
src/main/java/com/moral/service/AlarmService.java | 13 +++
src/main/java/com/moral/task/AlarmTableInsertTask.java | 101 +++++++++++++++++++++++++
5 files changed, 208 insertions(+), 0 deletions(-)
diff --git a/src/main/java/com/moral/mapper/AlarmMapper.java b/src/main/java/com/moral/mapper/AlarmMapper.java
new file mode 100644
index 0000000..902ca3e
--- /dev/null
+++ b/src/main/java/com/moral/mapper/AlarmMapper.java
@@ -0,0 +1,15 @@
+package com.moral.mapper;
+
+import java.util.List;
+import java.util.Map;
+
+import org.apache.ibatis.annotations.Param;
+
+public interface AlarmMapper {
+
+ List<Map<String, Object>> getAvgAlarmData(Map<String, Object> devices);
+
+ int insertAlarmDaily(List<Map<String,Object>> list);
+
+ void createTable(@Param("yearAndMonth") String yearAndMonth);
+}
diff --git a/src/main/java/com/moral/service/AlarmService.java b/src/main/java/com/moral/service/AlarmService.java
new file mode 100644
index 0000000..c16ebe8
--- /dev/null
+++ b/src/main/java/com/moral/service/AlarmService.java
@@ -0,0 +1,13 @@
+package com.moral.service;
+
+import java.util.List;
+import java.util.Map;
+
+public interface AlarmService {
+
+ List<Map<String, Object>> getAvgAlarmData(Map<String,Object> devices);
+
+ int insertAlarmDaily(List<Map<String,Object>> list);
+
+ void createTable(String yearAndMonth);
+}
diff --git a/src/main/java/com/moral/service/impl/AlarmServiceImpl.java b/src/main/java/com/moral/service/impl/AlarmServiceImpl.java
new file mode 100644
index 0000000..df9dd46
--- /dev/null
+++ b/src/main/java/com/moral/service/impl/AlarmServiceImpl.java
@@ -0,0 +1,35 @@
+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.mapper.AlarmMapper;
+import com.moral.service.AlarmService;
+
+
+@Service
+public class AlarmServiceImpl implements AlarmService {
+
+ @Resource
+ private AlarmMapper alarmMapper;
+
+ @Override
+ public List<Map<String, Object>> getAvgAlarmData(Map<String, Object> devices) {
+ return alarmMapper.getAvgAlarmData(devices);
+ }
+
+ @Override
+ public int insertAlarmDaily(List<Map<String, Object>> list) {
+ return alarmMapper.insertAlarmDaily(list);
+ }
+
+ @Override
+ public void createTable(String yearAndMonth) {
+ alarmMapper.createTable(yearAndMonth);
+ }
+
+}
diff --git a/src/main/java/com/moral/task/AlarmTableInsertTask.java b/src/main/java/com/moral/task/AlarmTableInsertTask.java
new file mode 100644
index 0000000..44bf14d
--- /dev/null
+++ b/src/main/java/com/moral/task/AlarmTableInsertTask.java
@@ -0,0 +1,101 @@
+package com.moral.task;
+
+import java.time.LocalDateTime;
+import java.time.temporal.ChronoUnit;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import javax.annotation.Resource;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.util.CollectionUtils;
+
+import com.alibaba.fastjson.JSONObject;
+import com.moral.service.AlarmService;
+import com.moral.service.DeviceService;
+import com.moral.service.SensorService;
+import com.xxl.job.core.biz.model.ReturnT;
+import com.xxl.job.core.handler.annotation.XxlJob;
+
+public class AlarmTableInsertTask {
+ private static transient Logger logger = LoggerFactory.getLogger(AlarmTableInsertTask.class);
+ @Resource
+ private AlarmService alarmService;
+
+ @Resource
+ private SensorService sensorService;
+
+ @Resource
+ private DeviceService deviceService;
+
+ @XxlJob("alarmDaily")
+ public ReturnT insertAlarmDailyTable(String params) {
+ LocalDateTime time = LocalDateTime.now();
+ LocalDateTime endTime = time.truncatedTo(ChronoUnit.DAYS);
+ LocalDateTime startTime = endTime.minusDays(1);
+ List<String> sensorKeys = sensorService.getSensorKeys();
+ List<String> macs = deviceService.getMacs();
+
+ String year = startTime.getYear() + "";
+ String month = null;
+ int monthValue = startTime.getMonthValue();
+ if (monthValue < 10) {
+ month = "0" + monthValue;
+ } else {
+ month = monthValue + "";
+ }
+ String yearAndMonth = year + month;
+
+ Map<String, Object> devices = new HashMap<>();
+ devices.put("sensorKeys", sensorKeys);
+ devices.put("start", startTime);
+ devices.put("end", endTime);
+ devices.put("macs", macs);
+ devices.put("yearAndMonth",yearAndMonth);
+
+ List<Map<String, Object>> dailyData = alarmService.getAvgAlarmData(devices);
+ List<Map<String, Object>> dailyDataList = new ArrayList<>();
+ for (Map<String, Object> deviceData : dailyData) {
+ Map<String, Object> map = new HashMap<>();
+ for (String sensorKey : sensorKeys) {
+ if (deviceData.get(sensorKey) != null) {
+ map.put(sensorKey, deviceData.get(sensorKey).toString());
+ }
+ }
+ JSONObject json = new JSONObject(map);
+ deviceData.put("json", json);
+ }
+
+ for (Map<String, Object> dailyMap : dailyData) {
+ Map<String, Object> map = new HashMap<>();
+ String mac = dailyMap.get("mac").toString();
+ String json = dailyMap.get("json").toString();
+ String state = dailyMap.get("state").toString();
+ map.put("mac", mac);
+ map.put("json", json);
+ map.put("state", state);
+ map.put("time", startTime);
+ dailyDataList.add(map);
+ }
+ if (!CollectionUtils.isEmpty(dailyDataList)) {
+ alarmService.insertAlarmDaily(dailyDataList);
+ return new ReturnT(200, "������������������");
+ }
+ return new ReturnT(500, "������������������");
+ }
+
+
+ @XxlJob("createAlarmSubTable")
+ public void createAlarmSubTable(String params) {
+ LocalDateTime time = LocalDateTime.now().plusMonths(1);;
+ String year = time.getYear() + "";
+ String month = time.getMonthValue() + "";
+ if (time.getMonthValue() < 10) {
+ month = "0" + time.getMonthValue();
+ }
+ alarmService.createTable(year + month);
+ }
+}
diff --git a/src/main/resources/mapper/AlarmMapper.xml b/src/main/resources/mapper/AlarmMapper.xml
new file mode 100644
index 0000000..210ab59
--- /dev/null
+++ b/src/main/resources/mapper/AlarmMapper.xml
@@ -0,0 +1,44 @@
+<?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.AlarmMapper">
+ <select id="getAvgAlarmData" resultType="java.util.LinkedHashMap">
+ SELECT
+ a.mac,
+ max(a.state) state
+ <foreach collection="sensorKeys" open="," separator="," item="sensorKey">
+ AVG(a.json->'$.${sensorKey}[0]') AS '${sensorKey}'
+ </foreach>
+ FROM
+ alarm_${yearAndMonth} a
+ WHERE
+ a.time >= #{start}
+ AND a.time <![CDATA[<]]> #{end}
+ AND a.mac in
+ <foreach collection="macs" open="(" separator="," close=")"
+ item="mac">
+ #{mac}
+ </foreach>
+ group by
+ a.mac
+ </select>
+
+ <insert id="insertAlarmDaily">
+ insert into
+ alarm_daily
+ values
+ <foreach collection="list" item="item" separator=",">
+ (#{item.mac},#{item.json},#{item.state},#{item.time})
+ </foreach>
+ </insert>
+
+ <update id="createTable">
+ CREATE TABLE `alarm_${yearAndMonth}` (
+ `mac` varchar(20) CHARACTER SET utf8 DEFAULT NULL,
+ `json` json DEFAULT NULL,
+ `state` int(2) DEFAULT NULL,
+ `time` datetime DEFAULT NULL,
+ KEY `_idx_time` (`time`) USING BTREE,
+ KEY `_idx_mac` (`mac`) USING BTREE)
+ ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci ROW_FORMAT=DYNAMIC;
+ </update>
+</mapper>
\ No newline at end of file
--
Gitblit v1.8.0