From 6050927edf6c00f2f06b0b0775502d38eb5b7705 Mon Sep 17 00:00:00 2001
From: jinpengyong <jpy123456>
Date: Thu, 25 Nov 2021 13:37:37 +0800
Subject: [PATCH] 陆家设备因子浓度报警邮件

---
 src/main/java/com/moral/service/DeviceService.java          |    2 
 src/main/java/com/moral/task/OffLineDevicesTask.java        |    2 
 src/main/java/com/moral/mapper/HistoryHourlyMapper.java     |    2 
 src/main/java/com/moral/task/SensorsAlarmTask.java          |   28 +++++++++
 src/main/resources/mapper/HistoryHourlyMapper.xml           |    8 ++
 src/main/java/com/moral/service/impl/DeviceServiceImpl.java |  121 +++++++++++++++++++++++++++++++++++++++-
 6 files changed, 159 insertions(+), 4 deletions(-)

diff --git a/src/main/java/com/moral/mapper/HistoryHourlyMapper.java b/src/main/java/com/moral/mapper/HistoryHourlyMapper.java
index f6a898b..7fd71c7 100644
--- a/src/main/java/com/moral/mapper/HistoryHourlyMapper.java
+++ b/src/main/java/com/moral/mapper/HistoryHourlyMapper.java
@@ -19,4 +19,6 @@
 
     int selectCountByMac(Map<String, Object> params);
 
+    String selectDataByMac(Map<String, Object> params);
+
 }
diff --git a/src/main/java/com/moral/service/DeviceService.java b/src/main/java/com/moral/service/DeviceService.java
index 7c76d7f..202b4b8 100644
--- a/src/main/java/com/moral/service/DeviceService.java
+++ b/src/main/java/com/moral/service/DeviceService.java
@@ -24,4 +24,6 @@
     List<Map<String, Object>> getAllByMacList(List<String> macList);
 
     Device getDeviceByID(int id);
+
+    void alarmSms(Map<String, Object> params);
 }
diff --git a/src/main/java/com/moral/service/impl/DeviceServiceImpl.java b/src/main/java/com/moral/service/impl/DeviceServiceImpl.java
index e3dfd63..76e68e7 100644
--- a/src/main/java/com/moral/service/impl/DeviceServiceImpl.java
+++ b/src/main/java/com/moral/service/impl/DeviceServiceImpl.java
@@ -1,27 +1,48 @@
 package com.moral.service.impl;
 
+import java.time.LocalDateTime;
+import java.time.temporal.ChronoUnit;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
+import com.alibaba.fastjson.JSONObject;
 import com.moral.entity.Device;
+
 import org.apache.log4j.Logger;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.util.ObjectUtils;
 
 import com.moral.mapper.DeviceMapper;
+import com.moral.mapper.HistoryHourlyMapper;
 import com.moral.mapper.HistoryMapper;
 import com.moral.service.DeviceService;
+import com.moral.util.AlarmUtils_2;
 
 @Service
 public class DeviceServiceImpl implements DeviceService {
 
     public static Logger log = Logger.getLogger(DeviceServiceImpl.class);
 
-    @Autowired
-    DeviceMapper deviceMapper;
+    private static Double[] PM2_5 = {0d, 35d, 75d, 115d, 150d, 250d};
+    private static Double[] PM10 = {0d, 50d, 150d, 250d, 350d, 420d};
+    private static Double[] SO2 = {0d, 150d, 500d, 650d, 800d, 1600d};
+    private static Double[] NO2 = {0d, 100d, 200d, 700d, 1200d, 2340d};
+    private static Double[] CO = {0d, 5d, 10d, 35d, 60d, 90d};
+    private static Double[] O3 = {0d, 160d, 200d, 300d, 400d, 800d};
+    private static Double[] TVOC = {0d, 1.5d, 3d, 5d};
 
     @Autowired
-    HistoryMapper historyMapper;
+    private DeviceMapper deviceMapper;
+
+    @Autowired
+    private HistoryMapper historyMapper;
+
+    @Autowired
+    private HistoryHourlyMapper historyHourlyMapper;
 
     @Override
     public List<Map<String, Object>> getSensorData(Map<String, Object> parameters) {
@@ -68,4 +89,98 @@
         Device result = deviceMapper.selectByPrimaryKey(id);
         return result;
     }
+
+    @Override
+    public void alarmSms(Map<String, Object> params) {
+        LocalDateTime time = LocalDateTime.now().truncatedTo(ChronoUnit.HOURS);
+        Map<String, Object> hashMap = new HashMap<>();
+        hashMap.put("time", time);
+        List<String> sensors = Arrays.asList("e1", "e2", "e11", "e16", "e10", "e15", "e17");
+        hashMap.put("sensorKeys", sensors);
+        for (Map.Entry<String, Object> entry : params.entrySet()) {
+            String orgId = entry.getKey();
+            List<String> emails = (List<String>) entry.getValue();
+            List<Map<String, Object>> devices = deviceMapper.getAllDeviceByOrg(orgId);
+            List<String> result = new ArrayList<>();
+            for (Map<String, Object> device : devices) {
+                String name = device.get("name").toString();
+                String mac = device.get("mac").toString();
+                hashMap.put("mac", mac);
+                Map<String, Object> data = JSONObject.parseObject(historyHourlyMapper.selectDataByMac(hashMap), Map.class);
+                List<String> alarmInfo = new ArrayList<>();
+                Double pm25Value = Double.parseDouble(((List) data.get("e1")).get(0).toString());
+                Double pm10Value = Double.parseDouble(((List) data.get("e2")).get(0).toString());
+                Double so2Value = Double.parseDouble(((List) data.get("e11")).get(0).toString());
+                Double no2Value = Double.parseDouble(((List) data.get("e16")).get(0).toString());
+                Double coValue = Double.parseDouble(((List) data.get("e10")).get(0).toString());
+                Double o3Value = Double.parseDouble(((List) data.get("e15")).get(0).toString());
+                Double tvocValue = Double.parseDouble(((List) data.get("e17")).get(0).toString());
+                String pm25 = alarmInfo("PM2.5", pm25Value, PM2_5);
+                String pm10 = alarmInfo("PM10", pm10Value, PM10);
+                String so2 = alarmInfo("SO2", so2Value, SO2);
+                String no2 = alarmInfo("NO2", no2Value, NO2);
+                String co = alarmInfo("CO", coValue, CO);
+                String o3 = alarmInfo("O3", o3Value, O3);
+                String tvoc = alarmInfo("TVOC", tvocValue, TVOC);
+                if (pm25 != null) {
+                    alarmInfo.add(pm25);
+                }
+                if (pm10 != null) {
+                    alarmInfo.add(pm10);
+                }
+                if (so2 != null) {
+                    alarmInfo.add(so2);
+                }
+                if (no2 != null) {
+                    alarmInfo.add(no2);
+                }
+                if (co != null) {
+                    alarmInfo.add(co);
+                }
+                if (o3 != null) {
+                    alarmInfo.add(o3);
+                }
+                if (tvoc != null) {
+                    alarmInfo.add(tvoc);
+                }
+                if (!ObjectUtils.isEmpty(alarmInfo)) {
+                    result.add(name + alarmInfo);
+                }
+            }
+
+            if (!ObjectUtils.isEmpty(result)) {
+                for (String email : emails) {
+                    AlarmUtils_2.sendMail(email, "���������������������������������", result.toString());
+                }
+            }
+        }
+    }
+
+    private String alarmInfo(String sensorName, Double value, Double[] doubles) {
+        int state = 1;
+        for (int i = doubles.length - 1; i >= 0; i--) {
+            Double aDouble = doubles[i];
+            if (value >= aDouble) {
+                state = i + 1;
+                break;
+            }
+        }
+        if (state != 1) {
+            StringBuilder builder = new StringBuilder();
+            builder.append(sensorName).append("���������==").append(value).append("-->���������������");
+            if (state == 6) {
+                builder.append(doubles[5]);
+            } else if (state == 5) {
+                builder.append(doubles[4]);
+            } else if (state == 4) {
+                builder.append(doubles[3]);
+            } else if (state == 3) {
+                builder.append(doubles[2]);
+            } else if (state == 2) {
+                builder.append(doubles[1]);
+            }
+            return builder.toString();
+        }
+        return null;
+    }
 }
diff --git a/src/main/java/com/moral/task/OffLineDevicesTask.java b/src/main/java/com/moral/task/OffLineDevicesTask.java
index a202f90..31928d2 100644
--- a/src/main/java/com/moral/task/OffLineDevicesTask.java
+++ b/src/main/java/com/moral/task/OffLineDevicesTask.java
@@ -103,7 +103,7 @@
     public ReturnT dayOffLine(String params) {
         LocalDateTime now = LocalDateTime.now();
         LocalDateTime end = now.truncatedTo(ChronoUnit.DAYS);
-        LocalDateTime start = now.minusDays(1);
+        LocalDateTime start = end.minusDays(1);
         Map<String, Object> hashMap = new HashMap<>();
         hashMap.put("start", start);
         hashMap.put("end", end);
diff --git a/src/main/java/com/moral/task/SensorsAlarmTask.java b/src/main/java/com/moral/task/SensorsAlarmTask.java
new file mode 100644
index 0000000..dc516a1
--- /dev/null
+++ b/src/main/java/com/moral/task/SensorsAlarmTask.java
@@ -0,0 +1,28 @@
+package com.moral.task;
+
+import org.springframework.stereotype.Component;
+
+import java.util.Map;
+
+import javax.annotation.Resource;
+
+import com.alibaba.fastjson.JSON;
+
+import com.moral.service.DeviceService;
+import com.xxl.job.core.biz.model.ReturnT;
+import com.xxl.job.core.handler.annotation.XxlJob;
+
+@Component
+public class SensorsAlarmTask {
+
+
+    @Resource
+    private DeviceService deviceService;
+
+    @XxlJob("sensorsAlarm")
+    public ReturnT sensorsAlarm(String params) {
+        Map<String, Object> map = JSON.parseObject(params, Map.class);
+        deviceService.alarmSms(map);
+        return new ReturnT(200, "���������������������������������");
+    }
+}
diff --git a/src/main/resources/mapper/HistoryHourlyMapper.xml b/src/main/resources/mapper/HistoryHourlyMapper.xml
index 04e408d..169573f 100644
--- a/src/main/resources/mapper/HistoryHourlyMapper.xml
+++ b/src/main/resources/mapper/HistoryHourlyMapper.xml
@@ -102,4 +102,12 @@
         AND `time` >= #{start}
         AND `time` <![CDATA[<]]> #{end}
     </select>
+
+    <select id="selectDataByMac" resultType="java.lang.String">
+        select
+        json
+        from history_hourly
+        where mac = #{mac}
+        and `time` = #{time}
+    </select>
 </mapper>
\ No newline at end of file

--
Gitblit v1.8.0