package com.ard.alarm.stealelec.service; import com.alibaba.fastjson2.JSON; import com.alibaba.fastjson2.JSONObject; import com.ard.alarm.stealelec.config.StealElecConfiguration; import com.ard.alarm.stealelec.domain.ArdAlarmStealelec; import com.ard.utils.http.HttpUtils; import com.ard.utils.mqtt.MqttProducer; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; import org.springframework.scheduling.annotation.Async; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.util.ArrayList; import java.util.List; import java.util.Map; /** * @ClassName StealElecAlarmServiceImpl * @Description:盗电警报服务实现类 * @Author 刘苏义 * @Date 2022/12/26 16:34 * @Version 1.0 */ @Slf4j(topic = "stealAlarm") @Service public class StealElecAlarmService { @Resource StealElecConfiguration stealElecConfig; List tempList = new ArrayList<>(); /** * @描述 获取api数据推送mqtt * @参数 [] * @返回值 void * @创建人 刘苏义 * @创建时间 2023/6/14 9:45 * @修改人和其它信息 */ @Async("alarm") @Scheduled(cron = "0/5 * * * * ?") public void alarmHandler() { try { if (!stealElecConfig.getEnabled()) { return; } String allAlarmData = HttpUtils.sendGet(stealElecConfig.getUrl()); //剔除所有\符号 String message = allAlarmData.replaceAll("\\\\", ""); //剔除整个字符串首尾双引号 if (message.startsWith("\"")) { message = message.substring(1); } if (message.endsWith("\"")) { message = message.substring(0, message.length() - 1); } Map result = (Map) JSON.parse(message); //获取到json对象list集合 List list = (List) result.get("data"); if (list.size() > 0) { for (JSONObject object : list) { String JSONStr = JSON.toJSONString(object); //转成实体对象 ArdAlarmStealelec wd = JSON.parseObject(JSONStr, ArdAlarmStealelec.class); if (tempList.contains(wd.getId())) { continue; } MqttProducer.publish(2, false, "stealelec", JSON.toJSONString(wd)); tempList.add(wd.getId()); } } } catch (Exception ex) { log.error("stealelec报警数据推送异常:" + ex.getMessage()); } } }