用户对接

This commit is contained in:
sunxs 2025-04-03 20:26:30 +08:00
parent cd6f4887c4
commit aa9a4285d4
1 changed files with 252 additions and 0 deletions

View File

@ -0,0 +1,252 @@
package com.dkl.large.utli;
import com.baomidou.mybatisplus.annotation.TableField;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.dkl.common.core.controller.BaseController;
import com.dkl.large.domain.DklCameraAnalysis;
import com.dkl.large.domain.DklMonitoringCamera;
import com.dkl.large.domain.DklMonitoringPoints;
import com.dkl.large.domain.DklWarningInformation;
import com.dkl.large.mapper.DklCameraAnalysisMapper;
import com.dkl.large.mapper.DklMonitoringCameraMapper;
import com.dkl.large.mapper.DklMonitoringPointsMapper;
import com.dkl.large.mapper.DklWarningInformationMapper;
import org.apache.rocketmq.client.producer.DefaultMQProducer;
import org.apache.rocketmq.client.producer.SendCallback;
import org.apache.rocketmq.client.producer.SendResult;
import org.apache.rocketmq.common.message.MessageConst;
import org.apache.rocketmq.spring.core.RocketMQTemplate;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.messaging.Message;
import org.springframework.messaging.support.MessageBuilder;
import org.springframework.stereotype.Component;
import java.nio.charset.StandardCharsets;
import java.text.SimpleDateFormat;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import java.util.concurrent.CompletableFuture;
@Component("automaticAlertGeneration")
public class AutomaticAlertGeneration extends BaseController {
private static final String PATTERN = "yyyy-MM-dd HH:mm:ss";
@Autowired
DklCameraAnalysisMapper dklCameraAnalysisMapper;
@Autowired
RocketMQTemplate rocketMQTemplate;
@Autowired
DklWarningInformationMapper dklWarningInformationMapper;
@Autowired
DklMonitoringCameraMapper dklMonitoringCameraMapper;
private static final Logger log = LoggerFactory.getLogger(AutomaticAlertGeneration.class);
//mqtopic
@Value("${mqTopic}")
String mqTopic;
@Autowired
private DefaultMQProducer producer;
//生成预警
public void generateAlerts() {
//创建两个小时区间去查询数据
DklCameraAnalysis dklCameraAnalysis = new DklCameraAnalysis();
dklCameraAnalysis.setStartTime(getHoursBefore(2));
dklCameraAnalysis.setEndTime(new Date());
List<DklCameraAnalysis> dklCameraAnalysisList = dklCameraAnalysisMapper.getDklCameraAnalysisGroup(dklCameraAnalysis);
//循环判断
for (DklCameraAnalysis dklCameraAnalysisInfo: dklCameraAnalysisList) {
//当区域预测人流超过最高流量的60%系统显示蓝色预警超过80%则为黄色预警90%橙色达到100%时则为红色预警 目前为预警等级 0 1 2
if (isEightyPercentGreaterOrEqual( Double.parseDouble( dklCameraAnalysisInfo.getCaneraMax()),Double.parseDouble( (dklCameraAnalysisInfo.getLoadmax())),1)){
//预警
DklMonitoringCamera dklMonitoringCamera =dklMonitoringCameraMapper.selectDklMonitoringCameraByPath(dklCameraAnalysisInfo.getDmcpoid());
//创建预警信息
DklWarningInformation dklWarningInformation = new DklWarningInformation();
//预警唯一标识符
dklWarningInformation.setWarningSigns(getDateString()+dklMonitoringCamera.getName()+"预警");
//发布单位
dklWarningInformation.setUnitName("系统识别");
//发布时间
dklWarningInformation.setReleaseTime(new Date());
//预警级别
dklWarningInformation.setWarningLevel("2");
//预警状态
dklWarningInformation.setWarningStatus("1");
//经度
dklWarningInformation.setLng(dklMonitoringCamera.getLng());
//经度
dklWarningInformation.setLat(dklMonitoringCamera.getLat());
//预计持续时间
dklWarningInformation.setExpectedDuration("持续关注");
//可能波及范围
dklWarningInformation.setScopeImpact(dklMonitoringCamera.getName()+"周边区域");
//异常数据值
dklWarningInformation.setAbnormalData("监测到"+dklMonitoringCamera.getName()+"客流异常,人流量骤增已达容量100%");
//发生点位
// dklWarningInformation.setUnitCode(dklCameraAnalysisInfo.getDmpid());
//预警点位id
dklWarningInformation.setPointsId(dklCameraAnalysisInfo.getDmpid());
dklWarningInformation.setPointName(dklCameraAnalysisInfo.getDmpName());
//预警摄像id
dklWarningInformation.setCameraId((long) dklMonitoringCamera.getId());
dklWarningInformation.setCameraName( dklMonitoringCamera.getName());
//添加系统信息
dklWarningInformation.setDelFlag("0");
dklWarningInformation.setCreateTime(new Date());
dklWarningInformation.setCreateBy("系统监测");
dklWarningInformation.setDeptId(dklCameraAnalysisInfo.getDeptid());
dklWarningInformation.setUpdateTime(new Date());
dklWarningInformation.setUpdateBy("系统监测");
//向中台发送
sendAlertMessage(dklWarningInformation);
continue;
} else if (isEightyPercentGreaterOrEqual( Double.parseDouble( dklCameraAnalysisInfo.getCaneraMax()),Double.parseDouble( (dklCameraAnalysisInfo.getLoadmax())),0.8)){
//预警
DklMonitoringCamera dklMonitoringCamera =dklMonitoringCameraMapper.selectDklMonitoringCameraByPath(dklCameraAnalysisInfo.getDmcpoid());
//创建预警信息
DklWarningInformation dklWarningInformation = new DklWarningInformation();
//预警名称
dklWarningInformation.setWarningSigns(getDateString()+dklMonitoringCamera.getName()+"预警");
//发布单位
dklWarningInformation.setUnitName("系统识别");
//发布时间
dklWarningInformation.setReleaseTime(new Date());
//预警级别
dklWarningInformation.setWarningLevel("1");
//预警状态
dklWarningInformation.setWarningStatus("1");
//经度
dklWarningInformation.setLng(dklMonitoringCamera.getLng());
//经度
dklWarningInformation.setLat(dklMonitoringCamera.getLat());
//预计持续时间
dklWarningInformation.setExpectedDuration("持续关注");
//可能波及范围
dklWarningInformation.setScopeImpact(dklMonitoringCamera.getName()+"周边区域");
//异常数据值
dklWarningInformation.setAbnormalData("监测到"+dklMonitoringCamera.getName()+"客流异常,人流量骤增已达容量80%");
//发生点位
// dklWarningInformation.setUnitCode(dklCameraAnalysisInfo.getDmpid());
//预警点位id
dklWarningInformation.setPointsId(dklCameraAnalysisInfo.getDmpid());
dklWarningInformation.setPointName(dklCameraAnalysisInfo.getDmpName());
//预警摄像id
dklWarningInformation.setCameraId((long) dklMonitoringCamera.getId());
dklWarningInformation.setCameraName( dklMonitoringCamera.getName());
//添加系统信息
dklWarningInformation.setDelFlag("0");
dklWarningInformation.setCreateTime(new Date());
dklWarningInformation.setCreateBy("系统监测");
dklWarningInformation.setDeptId(dklCameraAnalysisInfo.getDeptid());
dklWarningInformation.setUpdateTime(new Date());
dklWarningInformation.setUpdateBy("系统监测");
//向中台发送
sendAlertMessage(dklWarningInformation);
continue;
}
else if (isEightyPercentGreaterOrEqual( Double.parseDouble( dklCameraAnalysisInfo.getCaneraMax()),Double.parseDouble( (dklCameraAnalysisInfo.getLoadmax())),0.6)){
//预警
DklMonitoringCamera dklMonitoringCamera =dklMonitoringCameraMapper.selectDklMonitoringCameraByPath(dklCameraAnalysisInfo.getDmcpoid());
//创建预警信息
DklWarningInformation dklWarningInformation = new DklWarningInformation();
//预警唯一标识符
dklWarningInformation.setWarningSigns(getDateString()+dklMonitoringCamera.getName()+"预警");
//发布单位
dklWarningInformation.setUnitName("系统识别");
//发布时间
dklWarningInformation.setReleaseTime(new Date());
//预警级别
dklWarningInformation.setWarningLevel("0");
//预警状态
dklWarningInformation.setWarningStatus("1");
//经度
dklWarningInformation.setLng(dklMonitoringCamera.getLng());
//经度
dklWarningInformation.setLat(dklMonitoringCamera.getLat());
//预计持续时间
dklWarningInformation.setExpectedDuration("持续关注");
//可能波及范围
dklWarningInformation.setScopeImpact(dklMonitoringCamera.getName()+"周边区域");
//异常数据值
dklWarningInformation.setAbnormalData("监测到"+dklMonitoringCamera.getName()+"客流异常,人流量骤增60%");
//发生点位
// dklWarningInformation.setUnitCode(dklCameraAnalysisInfo.getDmpid());
//预警点位id
dklWarningInformation.setPointsId(dklCameraAnalysisInfo.getDmpid());
dklWarningInformation.setPointName(dklCameraAnalysisInfo.getDmpName());
//预警摄像id
dklWarningInformation.setCameraId((long) dklMonitoringCamera.getId());
dklWarningInformation.setCameraName( dklMonitoringCamera.getName());
//添加系统信息
dklWarningInformation.setDelFlag("0");
dklWarningInformation.setCreateTime(new Date());
dklWarningInformation.setCreateBy("系统监测");
dklWarningInformation.setDeptId(dklCameraAnalysisInfo.getDeptid());
dklWarningInformation.setUpdateTime(new Date());
dklWarningInformation.setUpdateBy("系统监测");
//向中台发送
sendAlertMessage(dklWarningInformation);
continue;
}
}
}
/**
* 发送预警消息
* @param dklWarningInformation 消息内容
*/
public void sendAlertMessage(DklWarningInformation dklWarningInformation) {
//生成预警信息数据
dklWarningInformationMapper.insertDklWarningInformation(dklWarningInformation);
// 构建消息对象
Message<DklWarningInformation> message = MessageBuilder.withPayload(dklWarningInformation)
.setHeader(MessageConst.PROPERTY_TAGS, "userTag")
.build();
// 异步发送带回调
rocketMQTemplate.asyncSend(mqTopic, message, new SendCallback() {
@Override
public void onSuccess(SendResult sendResult) {
log.info("消息发送成功, ID: {}, 队列: {}",
sendResult.getMsgId(),
sendResult.getMessageQueue().getQueueId());
}
@Override
public void onException(Throwable e) {
log.error("消息发送失败", e);
// 可添加补偿逻辑
}
});
}
public static Date getHoursBefore(int hours) {
Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.HOUR_OF_DAY, -hours);
return calendar.getTime();
}
public static String getDateString() {
// 定义中文时间格式
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy年MM月dd日 HH时mm分ss秒");
// 获取并格式化当前时间
return LocalDateTime.now().format(formatter);
}
public static boolean isEightyPercentGreaterOrEqual(double a, double b,double ratio) {
return (a * ratio) >= b;
}
}