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 + ",更新参数下发状态失败-------"); } } } }