package com.tongran.rocketmq.utils; import com.tongran.common.core.constant.SecurityConstants; import com.tongran.common.core.domain.R; import com.tongran.common.core.utils.StringUtils; import com.tongran.rocketmq.domain.RmAlarmLog; import com.tongran.rocketmq.domain.RmAlarmPushConfig; import com.tongran.rocketmq.enums.AlarmTypeEnum; import com.tongran.rocketmq.enums.PushMethodEnum; import com.tongran.rocketmq.service.IRmAlarmLogService; import com.tongran.rocketmq.service.IRmAlarmPushConfigService; import com.tongran.system.api.RemoteRevenueConfigService; import com.tongran.system.api.domain.RmResourceRegistrationRemote; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; @Component @Slf4j public class SendAlarmPushUtil { @Autowired private IRmAlarmLogService rmAlarmLogService; @Autowired private IRmAlarmPushConfigService rmAlarmPushConfigService; @Autowired private RemoteRevenueConfigService remoteRevenueConfigService; @Autowired private SmsAlarmUtil smsAlarmUtil; /** * 发送告警推送 * @param rmAlarmLog 告警日志参数 */ public void sendAlarmPush(RmAlarmLog rmAlarmLog, String alarmTypeMsg) { String clientId = rmAlarmLog.getClientId(); RmAlarmPushConfig rmAlarmPushConfig = new RmAlarmPushConfig(); rmAlarmPushConfig.setPushAlarmTypes(rmAlarmLog.getAlarmType()); List alarmConfigList = rmAlarmPushConfigService.selectRmAlarmPushConfigList(rmAlarmPushConfig); RmAlarmLog updateData = new RmAlarmLog(); updateData.setId(rmAlarmLog.getId()); if (alarmConfigList != null && !alarmConfigList.isEmpty()) { String phone = ""; try { if(!AlarmTypeEnum.ping丢包率过高.getCode().equals(rmAlarmLog.getAlarmType())){ // 查询服务器信息 RmResourceRegistrationRemote query = new RmResourceRegistrationRemote(); query.setClientId(clientId); R registerMsgR = remoteRevenueConfigService.getListByHardwareSn(query, SecurityConstants.INNER); if(registerMsgR != null && registerMsgR.getData() != null){ RmResourceRegistrationRemote serverMsg = registerMsgR.getData(); rmAlarmLog.setMgmPublicIp(serverMsg.getIp1PublicIp()); rmAlarmLog.setBusinessName(serverMsg.getBusinessName()); rmAlarmLog.setRemark(serverMsg.getRemark()); phone = serverMsg.getPhone(); } } Map alarmMap = new HashMap<>(); alarmMap.put("告警时间", rmAlarmLog.getAlarmTime()); alarmMap.put("IP", rmAlarmLog.getMgmPublicIp()); alarmMap.put("告警类型", alarmTypeMsg); alarmMap.put("告警设备", clientId.substring(clientId.length() - 8)); alarmMap.put("告警内容", rmAlarmLog.getAlarmContent()); alarmMap.put("标签", rmAlarmLog.getRemark()); alarmMap.put("业务名称", rmAlarmLog.getBusinessName()); for (RmAlarmPushConfig alarmPushConfig : alarmConfigList) { if(StringUtils.isNoneBlank(phone)){ alarmPushConfig.setContactPhones(phone); } if(PushMethodEnum.企业微信.getCode().equals(alarmPushConfig.getPushMethod())){ updateData.setPushFlag(processWeComPush(alarmPushConfig, alarmMap)); }else if(PushMethodEnum.手机短信.getCode().equals(alarmPushConfig.getPushMethod())){ updateData.setPushFlag(processTextMessagePush(alarmPushConfig, alarmMap)); }else{ log.info("暂无该推送方式:{}", alarmPushConfig.getPushMethod()); updateData.setPushFlag(2L); } } } catch (Exception e){ updateData.setPushFlag(0L); log.error("消息推送失败:{}", e.getMessage()); } }else{ updateData.setPushFlag(2L); } rmAlarmLogService.updateRmAlarmLog(updateData); } /** * 企业微信处理 */ private Long processWeComPush(RmAlarmPushConfig alarmPushConfig, Map alarmMap){ String contentTemplate = alarmPushConfig.getMessageContent(); String webhookUrl = alarmPushConfig.getPushAddress(); if (alarmPushConfig.getContactPhones() != null) { String[] phones = alarmPushConfig.getContactPhones().split(","); WeChatWorkBot.sendTemplateMessage(webhookUrl, contentTemplate, alarmMap, "", phones, false); } else { WeChatWorkBot.sendTemplateMessage(webhookUrl, contentTemplate, alarmMap); } return 1L; } /** * 手机短信处理 */ private Long processTextMessagePush(RmAlarmPushConfig alarmPushConfig, Map alarmMap){ String contentTemplate = alarmPushConfig.getMessageContent(); String actualContent = WeChatWorkBot.processTemplate(contentTemplate, alarmMap, alarmMap.get("告警内容")); if (alarmPushConfig.getContactPhones() != null) { String[] phones = alarmPushConfig.getContactPhones().split(","); int successCount = smsAlarmUtil.sendAlarmToMultiple(alarmPushConfig.getContactPhones(), actualContent); // 计算有效手机号数量(过滤空值) long validPhoneCount = Arrays.stream(phones) .map(String::trim) .filter(phone -> !phone.isEmpty()) .count(); return validPhoneCount == successCount ? 1L : 0L; } return 0L; } }