From d8310f6bc609440fa352c0e5a9436c7c78caa287 Mon Sep 17 00:00:00 2001 From: lizijie <lzjiiie@163.com> Date: Mon, 29 Nov 2021 11:09:48 +0800 Subject: [PATCH] Merge branch 'master' of http://blit.7drlb.com:8888/r/screen_job --- src/main/java/com/moral/service/DeviceService.java | 2 src/main/java/com/moral/task/OffLineDevicesTask.java | 62 ++++++++++++ src/main/resources/mapper/DeviceMapper.xml | 9 + src/main/java/com/moral/mapper/HistoryHourlyMapper.java | 6 + src/main/java/com/moral/task/SensorsAlarmTask.java | 28 +++++ src/main/java/com/moral/mapper/DeviceMapper.java | 2 src/main/resources/mapper/HistoryHourlyMapper.xml | 14 ++ src/main/java/com/moral/service/impl/DeviceServiceImpl.java | 121 +++++++++++++++++++++++ 8 files changed, 239 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/moral/mapper/DeviceMapper.java b/src/main/java/com/moral/mapper/DeviceMapper.java index b48bfb7..37de662 100644 --- a/src/main/java/com/moral/mapper/DeviceMapper.java +++ b/src/main/java/com/moral/mapper/DeviceMapper.java @@ -44,4 +44,6 @@ List<Map<String, Object>> getOfflineDeviceOfDiseaseCenter(String orgId); + List<Map<String, Object>> getAllDeviceByOrg(String orgId); + } \ No newline at end of file diff --git a/src/main/java/com/moral/mapper/HistoryHourlyMapper.java b/src/main/java/com/moral/mapper/HistoryHourlyMapper.java index e63ce6e..7fd71c7 100644 --- a/src/main/java/com/moral/mapper/HistoryHourlyMapper.java +++ b/src/main/java/com/moral/mapper/HistoryHourlyMapper.java @@ -15,6 +15,10 @@ int insertHistoryO3Hourly(@Param("list") List<Map<String, Object>> list); - List<Map<String,Object>> getBeamByMacs(Map<String,Object> params); + List<Map<String, Object>> getBeamByMacs(Map<String, Object> params); + + 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 3fc979a..31928d2 100644 --- a/src/main/java/com/moral/task/OffLineDevicesTask.java +++ b/src/main/java/com/moral/task/OffLineDevicesTask.java @@ -1,16 +1,23 @@ 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 java.util.stream.Collectors; import javax.annotation.Resource; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Component; +import org.springframework.util.ObjectUtils; +import com.alibaba.fastjson.JSON; import com.moral.mapper.DeviceMapper; +import com.moral.mapper.HistoryHourlyMapper; import com.moral.util.AlarmUtils_2; import com.xxl.job.core.biz.model.ReturnT; import com.xxl.job.core.handler.annotation.XxlJob; @@ -22,6 +29,9 @@ @Resource private DeviceMapper deviceMapper; + + @Resource + private HistoryHourlyMapper historyHourlyMapper; @XxlJob("OffLineDevices") public ReturnT OffLineAlarm(String params) { @@ -59,7 +69,7 @@ } if (list.size() != 0) { try { - AlarmUtils_2.sendMail("lili@nieh.chinacdc.cn", "���������������������", list.toString() + ",���" + list.size() + "������������������"); + AlarmUtils_2.sendMail("vliliv@163.com", "���������������������", list.toString() + ",���" + list.size() + "������������������"); return new ReturnT(200, "���������������������������������" + list.size()); } catch (Exception e) { XxlJobLogger.log("OffLineDevices:" + e.getMessage()); @@ -69,4 +79,54 @@ } return new ReturnT(500, "���������������,���������������"); } + + @XxlJob("hourOffLine") + public ReturnT hourOffLine(String params) { + //������������ + Map<String, Object> map = JSON.parseObject(params, Map.class); + for (Map.Entry<String, Object> entry : map.entrySet()) { + String orgId = entry.getKey(); + List<String> emails = (List<String>) entry.getValue(); + //������������������������������ + List<Map<String, Object>> devices = deviceMapper.getOfflineDeviceOfDiseaseCenter(orgId); + List<String> devicesInfo = devices.stream() + .map(device -> device.get("name").toString()) + .collect(Collectors.toList()); + if (!ObjectUtils.isEmpty(devicesInfo)) { + emails.forEach(email -> AlarmUtils_2.sendMail(email, "������-���������������������������", devicesInfo + "���������������")); + } + } + return new ReturnT(200, "���������������������������������"); + } + + @XxlJob("dayOffLine") + public ReturnT dayOffLine(String params) { + LocalDateTime now = LocalDateTime.now(); + LocalDateTime end = now.truncatedTo(ChronoUnit.DAYS); + LocalDateTime start = end.minusDays(1); + Map<String, Object> hashMap = new HashMap<>(); + hashMap.put("start", start); + hashMap.put("end", end); + //������������ + Map<String, Object> map = JSON.parseObject(params, Map.class); + for (Map.Entry<String, Object> entry : map.entrySet()) { + String orgId = entry.getKey(); + List<String> emails = (List<String>) entry.getValue(); + //������������������������������ + List<Map<String, Object>> devices = deviceMapper.getAllDeviceByOrg(orgId); + List<String> devicesInfo = new ArrayList<>(); + devices.forEach(device -> { + hashMap.put("mac", device.get("mac").toString()); + int count = historyHourlyMapper.selectCountByMac(hashMap); + if (count == 0) { + devicesInfo.add(device.get("name").toString()); + } + }); + + if (!ObjectUtils.isEmpty(devicesInfo)) { + emails.forEach(email -> AlarmUtils_2.sendMail(email, "������-���������������������������", devicesInfo + "���������������")); + } + } + return new ReturnT(200, "���������������������������������"); + } } 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/DeviceMapper.xml b/src/main/resources/mapper/DeviceMapper.xml index a455140..6d0b4d4 100644 --- a/src/main/resources/mapper/DeviceMapper.xml +++ b/src/main/resources/mapper/DeviceMapper.xml @@ -318,4 +318,13 @@ SELECT id FROM monitor_point WHERE organization_id=#{orgId} ); </select> + + <select id="getAllDeviceByOrg" resultType="java.util.Map"> + SELECT name,mac + FROM `device` + WHERE is_delete=0 + and monitor_point_id in( + SELECT id FROM monitor_point WHERE organization_id=#{orgId} + ); + </select> </mapper> \ No newline at end of file diff --git a/src/main/resources/mapper/HistoryHourlyMapper.xml b/src/main/resources/mapper/HistoryHourlyMapper.xml index f9a4473..169573f 100644 --- a/src/main/resources/mapper/HistoryHourlyMapper.xml +++ b/src/main/resources/mapper/HistoryHourlyMapper.xml @@ -96,4 +96,18 @@ group by h.time </select> + <select id="selectCountByMac" resultType="java.lang.Integer"> + SELECT count(1) FROM history_hourly + WHERE mac = #{mac} + 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