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

import net.sf.json.JSONObject;
import org.flume.alarm.AlarmEnumDTO.WellAlarmEnum;
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.mq.RocketMQProducer;
import org.flume.alarm.util.Configure;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Component;

import javax.annotation.Resource;
import java.util.*;

@Component
@Async
public class SendUtils {

    @Resource
    private AlarmRecordManager alarmRecordManager;
    @Resource
    private DeviceManager deviceManager;
    @Resource
    private RocketMQProducer rocketMQProducer;


    /***
     * 下面推送采集数据
     */
    public void sendData(String devCode) {

        if ("true".equals(Configure.getProperty("synchronize.enabled", "false"))) {


            Map<String, Object> dataMap = new HashMap<String, Object>();
            Map<String, Object> paramMap = new HashMap<String, Object>();
            dataMap.put("serviceId", DeviceUtilDTO.devTypeCodeMap.
                    get(DeviceTypeEnum.Well.toString()));
            paramMap.put("value", WellAlarmEnum.NORMAL.toString());
            dataMap.put("paras", paramMap);
            DeviceUtilDTO.sendDataMsg(Configure.getProperty("reportInfoURL"),
                    new DeviceUtilDTO("", "false", "updata", "alarm", "", "",
                            DateUtils.sdf4.format(new Date()), dataMap, devCode,
                            DeviceTypeEnum.Well.toString()));

        }
    }

    /***
     * 下面推送报警事件至业务中台
     */
    public void sendDataCenter(String devCode, String typeName, String ptype, String type, String alarmContent) {

        {
            if ("true".equals(Configure.getProperty("synchronizeCenter.enabled", "false"))) {
                Device device = deviceManager.getDeviceByDevCode(devCode, typeName);
                String uuid = AlarmDataCenterUtilDTO.getUUID();
                String resultMsg = AlarmDataCenterUtilDTO.sendMsg(Configure.getProperty("sendCenterURL"),
                        new AlarmDataCenterUtilDTO(
                                uuid,
                                device.getFactory(),
                                ptype,
                                type,
                                DateUtils.sdf4.format(new Date()),
                                "A",
                                "1",
                                "0",
                                "1",
                                device.getDevCode(),
                                device.getDevCode(),
                                device.getLongtitude(),
                                device.getLatitude(),
                                alarmContent,
                                alarmContent));
                //执行成功后,更新已发送
                if (StringUtils.isNotBlank(resultMsg)) {
                    JSONObject json = JSONObject.fromObject(resultMsg);
                    String code = json.get("code").toString();
                    if ("200".equals(code)) {
                        JSONObject dataJson = json.getJSONObject("data");
                        alarmRecordManager.updateSend(device.getDevCode(), dataJson.getString("eventId"));
                    }
                }

            }
        }
    }

    public static String getUUID() {
        UUID uuid = UUID.randomUUID();
        String randomString = uuid.toString().replace("-", "").toUpperCase();
        return randomString;
    }

    //数据推送物联网平台MqRocket
    public void sendMqRocket(String content) {
        JSONObject json = new JSONObject();
        json.put("requestId", getUUID());
        json.put("version", "1.0");
        json.put("timestamp", System.currentTimeMillis());
        JSONObject deviceJson = new JSONObject();
        JSONObject dataJson = new JSONObject();
        dataJson.put("key", "well_state");
        dataJson.put("value", "well_state");
        dataJson.put("time", System.currentTimeMillis());


    }


    //事件推送物联网平台MqRocket
    public void sendAlarmMqRocket(String eName,
                                  String key,
                                  String value,
                                  String deviceNo,
                                  String typeName) {


        if ("true".equals(Configure.getProperty("synchronizeMq.enabled", "false"))) {
            Device device = deviceManager.getDeviceByDevCode(deviceNo, typeName);
            //没有注册的设备舍弃
            if (null == device || StringUtils.isBlank(device.getInstallPosition())) return;
            JSONObject json = new JSONObject();
            json.put("requestId", getUUID());
            json.put("version", "1.0");
            json.put("timestamp", System.currentTimeMillis());
            JSONObject eventsJson = new JSONObject();
            List<JSONObject> dataJsonList = new ArrayList<JSONObject>();
            JSONObject dataJson = new JSONObject();
            JSONObject paramsJson = new JSONObject();
            List<JSONObject> paramsJsonList = new ArrayList<JSONObject>();
            List<JSONObject> eventsJsonList = new ArrayList<JSONObject>();
            dataJson.put("key", key);
            dataJson.put("value", value);
            dataJsonList.add(dataJson);
            eventsJson.put("ename", eName);
            eventsJson.put("outputData", dataJsonList);
            eventsJson.put("time", System.currentTimeMillis());
            eventsJsonList.add(eventsJson);
            paramsJson.put("deviceNo", device.getInstallPosition());
            paramsJson.put("events", eventsJsonList);
            paramsJsonList.add(paramsJson);
            json.put("params", paramsJsonList);
            rocketMQProducer.sendMsg(json.toString(), "reportDeviceEvent");
        }
    }


    //设备状态推送物联网平台MqRocket
    public void sendStatusMqRocket(String devCode, String typeName) {
        if ("true".equals(Configure.getProperty("synchronizeMq.enabled", "false"))) {
            Device device = deviceManager.getDeviceByDevCode(devCode, typeName);
            //没有注册的设备舍弃
            if (null == device || StringUtils.isBlank(device.getInstallPosition())) return;
            JSONObject json = new JSONObject();
            json.put("requestId", getUUID());
            json.put("version", "1.0");
            json.put("timestamp", System.currentTimeMillis());
            JSONObject deviceStatusJson = new JSONObject();
            List<JSONObject> deviceStatusJsonList = new ArrayList<JSONObject>();
            deviceStatusJson.put("deviceNo", device.getInstallPosition());
            //上下线动作(1.在线,2.离线 3.设备故障 4.设备维护
            deviceStatusJson.put("status", 1);
            deviceStatusJsonList.add(deviceStatusJson);
            json.put("params", deviceStatusJsonList);
            rocketMQProducer.sendMsg(json.toString(), "reportDeviceStatus");
        }
    }

    public void sendEventBySms(Device device, JSONObject eventObj) {
        if ("true".equals(Configure.getProperty("synchronizeSms.enabled", "false"))) {
            String smsSenderUrl = Configure.getProperty("smsSenderURL", "http://general.bushub.rj.prd/sms/user/send");
            String smsAppKey = Configure.getProperty("X-APP-KEY-SMS", "2f0e62c2-08b0-4d34-b90a-5a04b4c162ee");
            String sim = device.getSimid();
            if (null == sim || StringUtils.isBlank(sim)) {
                return;
            }

            if (null == smsAppKey || StringUtils.isBlank(smsAppKey)) {
                return;
            }

            JSONObject header = new JSONObject();
            header.put("X-APP-KEY", smsAppKey);

            StringBuilder params = new StringBuilder();
            params.append("{");
            params.append("\"mobile\":");
            params.append("\"").append(sim).append("\"").append(",");

            String prefix = "【智慧蓉江】";
            String eventTm = DateUtils.sdf4.format(new Date());
            String devName = device.getDevName();
            String place = device.getPlace();

            StringBuilder content = new StringBuilder("");
            content.append(prefix);
            content.append(eventTm).append(",");
            content.append("管网监测设备[").append(devName).append("],");
            content.append("发生").append(eventObj.getString("type")).append(",");
            if (eventObj.containsKey("value") == true) {
                content.append(eventObj.getString("value")).append(",");
            }
            content.append("详细地址是:").append(place).append(",");
            content.append("请关注并及时处理。");

            params.append("\"content\":");
            params.append("\"").append(content.toString()).append("\"");
            params.append("}");

            String resp = HttpClientUtils.post(smsSenderUrl, params.toString(), header);
        }
    }
}