lizijie
2021-11-29 d8310f6bc609440fa352c0e5a9436c7c78caa287
Merge branch 'master' of http://blit.7drlb.com:8888/r/screen_job
1 files added
7 files modified
242 ■■■■■ changed files
src/main/java/com/moral/mapper/DeviceMapper.java 2 ●●●●● patch | view | raw | blame | history
src/main/java/com/moral/mapper/HistoryHourlyMapper.java 4 ●●●● patch | view | raw | blame | history
src/main/java/com/moral/service/DeviceService.java 2 ●●●●● patch | view | raw | blame | history
src/main/java/com/moral/service/impl/DeviceServiceImpl.java 121 ●●●●● patch | view | raw | blame | history
src/main/java/com/moral/task/OffLineDevicesTask.java 62 ●●●●● patch | view | raw | blame | history
src/main/java/com/moral/task/SensorsAlarmTask.java 28 ●●●●● patch | view | raw | blame | history
src/main/resources/mapper/DeviceMapper.xml 9 ●●●●● patch | view | raw | blame | history
src/main/resources/mapper/HistoryHourlyMapper.xml 14 ●●●●● 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>