src/main/java/com/moral/mapper/DeviceMapper.java | ●●●●● patch | view | raw | blame | history | |
src/main/java/com/moral/mapper/HistoryHourlyMapper.java | ●●●●● patch | view | raw | blame | history | |
src/main/java/com/moral/service/DeviceService.java | ●●●●● patch | view | raw | blame | history | |
src/main/java/com/moral/service/impl/DeviceServiceImpl.java | ●●●●● patch | view | raw | blame | history | |
src/main/java/com/moral/task/OffLineDevicesTask.java | ●●●●● patch | view | raw | blame | history | |
src/main/java/com/moral/task/SensorsAlarmTask.java | ●●●●● patch | view | raw | blame | history | |
src/main/resources/mapper/DeviceMapper.xml | ●●●●● patch | view | raw | blame | history | |
src/main/resources/mapper/HistoryHourlyMapper.xml | ●●●●● patch | view | raw | blame | history |
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); } src/main/java/com/moral/mapper/HistoryHourlyMapper.java
@@ -16,5 +16,9 @@ int insertHistoryO3Hourly(@Param("list") List<Map<String, Object>> list); List<Map<String,Object>> getBeamByMacs(Map<String,Object> params); int selectCountByMac(Map<String, Object> params); String selectDataByMac(Map<String, Object> params); } 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); } 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; } } 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, "执行成功!有邮件发送!"); } } src/main/java/com/moral/task/SensorsAlarmTask.java
New file @@ -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, "执行成功!有邮件发送!"); } } 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> 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>