package com.ard.alarm.stealelec.service;
|
|
import com.alibaba.fastjson2.JSON;
|
import com.alibaba.fastjson2.JSONObject;
|
import com.ard.alarm.stealelec.domain.ArdAlarmStealelec;
|
import com.ard.utils.mqtt.MqttConsumer;
|
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 org.springframework.web.client.RestTemplate;
|
|
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
|
RestTemplate restTemplate;
|
@Value("${spring.stealelec.url}")
|
private String stealElecUrl;
|
@Value("${spring.stealelec.enabled}")
|
private Boolean enabled;
|
List<String> tempList = new ArrayList<>();
|
|
/**
|
* @描述 获取api数据推送mqtt
|
* @参数 []
|
* @返回值 void
|
* @创建人 刘苏义
|
* @创建时间 2023/6/14 9:45
|
* @修改人和其它信息
|
*/
|
@Async("alarm")
|
@Scheduled(cron = "0/5 * * * * ?")
|
public void alarmHandler() {
|
try {
|
if (!enabled) {
|
return;
|
}
|
String allAlarmData = restTemplate.getForObject(stealElecUrl, String.class);
|
//剔除所有\符号
|
String message = allAlarmData.replaceAll("\\\\", "");
|
//剔除整个字符串首尾双引号
|
if (message.startsWith("\"")) {
|
message = message.substring(1);
|
}
|
if (message.endsWith("\"")) {
|
message = message.substring(0, message.length() - 1);
|
}
|
Map<String, Object> result = (Map<String, Object>) JSON.parse(message);
|
//获取到json对象list集合
|
List<JSONObject> list = (List<JSONObject>) 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;
|
}
|
MqttConsumer.publish(2, false, "stealelec", JSON.toJSONString(wd));
|
tempList.add(wd.getId());
|
}
|
}
|
} catch (Exception ex) {
|
log.error("stealelec报警数据推送异常:" + ex.getMessage());
|
}
|
}
|
}
|