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