Newer
Older
sink / src / main / java / org / flume / alarm / resp / WellResponse.java
TAN YUE on 4 Mar 2022 7 KB 20220304 增加短信报警
package org.flume.alarm.resp;

import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
import org.flume.alarm.AlarmEnumDTO.WellAlarmEnum;
import org.flume.alarm.base.AbstractResponse;
import org.flume.alarm.base.DeviceTypeEnum;
import org.flume.alarm.core.util.DateUtils;
import org.flume.alarm.core.util.StringUtils;
import org.flume.alarm.domain.Device;
import org.flume.alarm.manager.AlarmRecordManager;
import org.flume.alarm.manager.DeviceManager;
import org.flume.alarm.manager.ImeiManager;
import org.flume.alarm.manager.WellManager;
import org.flume.alarm.mq.RocketMQProducer;
import org.flume.alarm.restful.PublicUtilDTO;
import org.flume.alarm.restful.SendUtils;
import org.flume.alarm.util.Configure;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import java.io.IOException;
import java.util.Date;

/**
 * Created by lenovo on 2018/1/9.
 */
public class WellResponse extends AbstractResponse {

    private final Logger logger = LoggerFactory.getLogger(this.getClass().getName());
    private static final String[] mType = {"Data", "Event", "StartupRequest"};

    @Override
    public void process(String content) {
        ClassPathXmlApplicationContext ac = this.getAc();
        WellManager wellManager = ac.getBean(WellManager.class);
        DeviceManager deviceManager = ac.getBean(DeviceManager.class);
        final AlarmRecordManager alarmRecordManager = ac.getBean(AlarmRecordManager.class);
        SendUtils sendUtils = ac.getBean(SendUtils.class);
        ImeiManager imeiManager = ac.getBean(ImeiManager.class);
        RocketMQProducer rocketMQProducer = ac.getBean(RocketMQProducer.class);
        JSONObject json = JSONObject.fromObject(content);
        final String devCode = json.get("devCode").toString();
        logger.info("--------RECEIVE:设备编号:" + devCode + ",上传数据:" + json.toString() + "-------");
        JSONObject jsonObject = (JSONObject) json.get("mBody");

        /**
         * 推送设备基本信息
         */
//        List<Device> deviceList=deviceManager.findBy("active",true);
//        DeviceNetUtilDTO.sendDevices(rocketMQProducer,deviceList,"batchSaveDeviceInfo");

        if (mType[0].equals(json.get("mType"))) {//存储上报数据
            JSONArray jsonArray = (JSONArray) jsonObject.get("datas");
            for (int i = 0; i < jsonArray.size(); i++) {
                try {
                    String upTime = ((JSONObject) jsonArray.get(i)).get("uptime").toString();
                    wellManager.saveData(devCode, WellAlarmEnum.NORMAL.toString(), "0", upTime);//存采集数据


                    //消除设备异常
                    if (i == jsonArray.size() - 1) {
                        alarmRecordManager.cancelDeviceAlarm(devCode);
                        alarmRecordManager.deleteByDevcode(devCode);
                    }

                    //推送采集数据
//                    sendUtils.sendData(devCode);
                    sendUtils.sendStatusMqRocket(devCode, DeviceTypeEnum.Well.toString());

                } catch (IOException e) {
                    e.printStackTrace();
                    logger.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------");
                }
            }

            //数据推送物联网平台
//            rocketMQProducer.sendMsg(content, "reportDeviceData");

            //心跳数据上链
            PublicUtilDTO.sendWellBusiness(devCode,
                    DeviceTypeEnum.Well.toString(),
                    "",
                    "0");

        } else if (mType[1].equals(json.get("mType"))) {//存储报警事件
//            sendUtils.sendStatusMqRocket(devCode, DeviceTypeEnum.Well.toString());
            JSONArray jsonArray = (JSONArray) jsonObject.get("eventType");
            for (int i = 0; i < jsonArray.size(); i++) {
                try {
                    if (WellAlarmEnum.WellOpenAlarm.name().equals(jsonArray.get(i).toString())) {
                        wellManager.saveData(devCode, WellAlarmEnum.WellOpenAlarm.toString(), "1", "20191022095600");//存采集数据
                        //先检查超过次数是否还需要告警
                        int count = alarmRecordManager.isAlarm(devCode);
                        //消除历史告警
                        if (count == 0) {
                            alarmRecordManager.cancelAlarm(devCode);
                        }
                        if (count >= Integer.valueOf(Configure.getProperty("alarmCount", "3")).intValue()) continue;
                        alarmRecordManager.saveData(devCode, DeviceTypeEnum.Well.toString(), "",
                                String.valueOf(WellAlarmEnum.valueOf(jsonArray.get(i).toString()).getIndex()), "0");
                        if (count == Integer.valueOf(Configure.getProperty("alarmCount", "3")).intValue() - 1) {
                            //下面推送报警事件至业务中台
                            sendUtils.sendDataCenter(devCode, DeviceTypeEnum.Well.toString(), "RJ0104",
                                    "RJ010402", WellAlarmEnum.WellOpenAlarm.toString());
                            //推送事件至物联网平台
                            sendUtils.sendAlarmMqRocket(WellAlarmEnum.WellOpenAlarm.toString(),
                                    WellAlarmEnum.WellOpenAlarm.name(),
                                    "",
                                    devCode,
                                    DeviceTypeEnum.Well.toString());
                            //可信上链
                            PublicUtilDTO.sendAlarmBusiness(devCode,
                                    DeviceTypeEnum.Well.toString(),
                                    "",
                                    WellAlarmEnum.WellOpenAlarm.toString(),
                                    DateUtils.sdf4.format(new Date()));

                            // 推送短信消息
                            Device device = deviceManager.getDeviceByDevCode(devCode, DeviceTypeEnum.Well.toString());
                            if (null == device || StringUtils.isBlank(device.getInstallPosition())) return;
                            JSONObject eventObj = new JSONObject();
                            eventObj.put("type", WellAlarmEnum.WellOpenAlarm.toString());
                            sendUtils.sendEventBySms(device, eventObj);
                        }
                    } else {
                        alarmRecordManager.saveData(devCode, DeviceTypeEnum.Well.toString(), "",
                                String.valueOf(WellAlarmEnum.valueOf(jsonArray.get(i).toString()).getIndex()), "1");
                    }

                    //消除设备异常
                    if (i == jsonArray.size() - 1 &&
                            WellAlarmEnum.WellOpenAlarm.name().equals(jsonArray.get(i).toString())) {
                        alarmRecordManager.cancelDeviceAlarm(devCode);
                        alarmRecordManager.deleteByDevcode(devCode);
                    }

                } catch (IOException e) {
                    e.printStackTrace();
                    logger.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------");
                }
            }
        } else if (mType[2].equals(json.get("mType"))) {//三码存储
            try {
                String imei = jsonObject.get("imei").toString();
                String iccid = jsonObject.get("iccid").toString();
                imeiManager.saveData(devCode, imei, iccid);
            } catch (Exception e) {
                e.printStackTrace();
                logger.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------");
            }
        }
    }
}