Files
saas-houduan/tongran-rocketmq/src/main/java/com/tongran/rocketmq/utils/SendAlarmPushUtil.java
T

128 lines
6.0 KiB
Java

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<RmAlarmPushConfig> 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<RmResourceRegistrationRemote> 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<String, Object> 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<String, Object> 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<String, Object> 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;
}
}