Commit f29fa66e71a6a278d89f1d5cba66dba97c58b205

Authored by 云中非
1 parent 398aac71

refactor: 设备告警通知结构优化

... ... @@ -94,6 +94,8 @@ public class YtNoticeServiceImpl implements YtNoticeService {
94 94 */
95 95 private void noticeAll(String messageCode, List<AlarmContact> alarmContactList, AlarmInfoDTO alarmInfo, Organization organization,String tenantId) {
96 96 Optional.ofNullable(alarmContactList).ifPresent(contacts -> {
  97 +
  98 + /**可用的告警通知模板*/
97 99 QueryWrapper<MessageTemplate> messageTemplateQueryWrapper = new QueryWrapper<MessageTemplate>();
98 100 messageTemplateQueryWrapper.lambda()
99 101 .eq(MessageTemplate::getTenantId, tenantId)
... ... @@ -106,62 +108,143 @@ public class YtNoticeServiceImpl implements YtNoticeService {
106 108 templatesMap.put(item.getMessageType(), item.getId());
107 109 }
108 110 });
109   - List<String> emailReceivers = new ArrayList<>();
110   - contacts.stream().parallel().forEach(item -> {
111   - if (messageCode.contains(MessageTypeEnum.PHONE_MESSAGE.name())
112   - && templatesMap.containsKey(MessageTypeEnum.PHONE_MESSAGE.name())
113   - && !item.getPhone().isEmpty()) {
114   -
115   -
116   - SmsReqDTO info = new SmsReqDTO();
117   - info.setId(templatesMap.get(MessageTypeEnum.PHONE_MESSAGE.name()));
118   - info.setPhoneNumbers(item.getPhone());
119   - LinkedHashMap<String, String> params = new LinkedHashMap<>();
120   - //name-其他;device_name-其他;level-其他;location-其他;alarm_value-其他;
121   - params.put("type", alarmInfo.getType());
122   - params.put("device_name", alarmInfo.getDeviceName());
123   - params.put("severity", alarmInfo.getSeverity());
124   - params.put("organization", organization != null ? organization.getName() : "");
125   - params.put("createtime", YtDateTimeUtils.formate(alarmInfo.getCreateTs()));
126   - info.setParams(params);
127   - smsService.sendSms(info);
128   - }
129 111
130   - if (messageCode.contains(MessageTypeEnum.EMAIL_MESSAGE.name())
131   - && templatesMap.containsKey(MessageTypeEnum.EMAIL_MESSAGE.name())
132   - && !item.getEmail().isEmpty()) {
133   - emailReceivers.add(item.getEmail());
134   - }
135 112
  113 + if (messageCode.contains(MessageTypeEnum.PHONE_MESSAGE.name())
  114 + && templatesMap.containsKey(MessageTypeEnum.PHONE_MESSAGE.name())) {
  115 + sms4Alarm(alarmInfo,templatesMap.get(MessageTypeEnum.PHONE_MESSAGE.name()),organization,contacts);
  116 + }
136 117
137   - if (messageCode.contains(MessageTypeEnum.DING_TALK_MESSAGE.name())
138   - && templatesMap.containsKey(MessageTypeEnum.DING_TALK_MESSAGE.name())
139   - && !item.getDingtalk().isEmpty()) {
  118 + if (messageCode.contains(MessageTypeEnum.EMAIL_MESSAGE.name())
  119 + && templatesMap.containsKey(MessageTypeEnum.EMAIL_MESSAGE.name())) {
  120 + email4Alarm(alarmInfo,templatesMap.get(MessageTypeEnum.EMAIL_MESSAGE.name()),organization,contacts);
  121 + }
140 122
141   - }
142 123
143   - if (messageCode.contains(MessageTypeEnum.WECHAT_MESSAGE.name())
144   - && templatesMap.containsKey(MessageTypeEnum.WECHAT_MESSAGE.name())
145   - && !item.getWechat().isEmpty()) {
  124 + if (messageCode.contains(MessageTypeEnum.DING_TALK_MESSAGE.name())
  125 + && templatesMap.containsKey(MessageTypeEnum.DING_TALK_MESSAGE.name())) {
  126 + dingTalk4Alarm(alarmInfo,templatesMap.get(MessageTypeEnum.DING_TALK_MESSAGE.name()),organization,contacts);
  127 + }
146 128
147   - }
148   - });
149   - if (!emailReceivers.isEmpty()) {
150   - EmailReqDTO info = new EmailReqDTO();
151   - info.setTo(emailReceivers.toArray(new String[emailReceivers.size()]));
152   - info.setSubject(String.format("【%s】告警通知",alarmInfo.getDeviceName()));
153   - String body =String.format("%s位于【%s】的设备【%s】触发【%s】级的【%s】,请尽快处理!"
154   - ,YtDateTimeUtils.formate(alarmInfo.getCreateTs())
155   - , organization != null ? organization.getName() : ""
156   - ,alarmInfo.getDeviceName()
157   - ,alarmInfo.getSeverity()
158   - , alarmInfo.getType());
159   - info.setBody(body);
160   - info.setEmailFormatEnum(EmailFormatEnum.TEXT.name());
161   - info.setId(templatesMap.get(MessageTypeEnum.EMAIL_MESSAGE.name()));
162   -
163   - mailService.sendEmail(info);
  129 + if (messageCode.contains(MessageTypeEnum.WECHAT_MESSAGE.name())
  130 + && templatesMap.containsKey(MessageTypeEnum.WECHAT_MESSAGE.name())) {
  131 + weChat4Alarm(alarmInfo,templatesMap.get(MessageTypeEnum.WECHAT_MESSAGE.name()),organization,contacts);
164 132 }
165 133 });
166 134 }
  135 +
  136 + /**
  137 + * 短信通知设备告警信息
  138 + * @param alarmInfo 告警信息
  139 + * @param templateId 告警模板主键
  140 + * @param organization 设备所属组织
  141 + * @param contacts 设备告警联系人
  142 + */
  143 + private void sms4Alarm(AlarmInfoDTO alarmInfo,String templateId, Organization organization,List<AlarmContact> contacts){
  144 + SmsReqDTO info = new SmsReqDTO();
  145 + info.setId(templateId);
  146 + LinkedHashMap<String, String> params = new LinkedHashMap<>();
  147 + //name-其他;device_name-其他;level-其他;location-其他;alarm_value-其他;
  148 + params.put("type", alarmInfo.getType());
  149 + params.put("device_name", alarmInfo.getDeviceName());
  150 + params.put("severity", alarmInfo.getSeverity());
  151 + params.put("organization", organization != null ? organization.getName() : "");
  152 + params.put("createtime", YtDateTimeUtils.formate(alarmInfo.getCreateTs()));
  153 + info.setParams(params);
  154 + contacts.stream().parallel().forEach(item -> {
  155 + if (!item.getPhone().isEmpty()) {
  156 + info.setPhoneNumbers(item.getPhone());
  157 + smsService.sendSms(info);
  158 + }
  159 + });
  160 + }
  161 +
  162 + /**
  163 + * 邮件通知设备告警信息
  164 + * @param alarmInfo 告警信息
  165 + * @param templateId 告警模板主键
  166 + * @param organization 设备所属组织
  167 + * @param contacts 设备告警联系人
  168 + */
  169 + private void email4Alarm(AlarmInfoDTO alarmInfo,String templateId, Organization organization,List<AlarmContact> contacts){
  170 + List<String> emailReceivers = new ArrayList<>();
  171 + contacts.stream().parallel().forEach(item -> {
  172 + if (!item.getEmail().isEmpty()) {
  173 + emailReceivers.add(item.getEmail());
  174 + }
  175 + });
  176 + if (!emailReceivers.isEmpty()) {
  177 + EmailReqDTO info = new EmailReqDTO();
  178 + info.setTo(emailReceivers.toArray(new String[emailReceivers.size()]));
  179 + info.setSubject(String.format("【%s】告警通知",alarmInfo.getDeviceName()));
  180 + String body =String.format("%s位于【%s】的设备【%s】触发【%s】级的【%s】,请尽快处理!"
  181 + ,YtDateTimeUtils.formate(alarmInfo.getCreateTs())
  182 + , organization != null ? organization.getName() : ""
  183 + ,alarmInfo.getDeviceName()
  184 + ,alarmInfo.getSeverity()
  185 + , alarmInfo.getType());
  186 + info.setBody(body);
  187 + info.setEmailFormatEnum(EmailFormatEnum.TEXT.name());
  188 + info.setId(templateId);
  189 +
  190 + mailService.sendEmail(info);
  191 + }
  192 + }
  193 +
  194 + /**
  195 + * 钉钉通知设备告警信息
  196 + * @param alarmInfo 告警信息
  197 + * @param templateId 告警模板主键
  198 + * @param organization 设备所属组织
  199 + * @param contacts 设备告警联系人
  200 + */
  201 + private void dingTalk4Alarm(AlarmInfoDTO alarmInfo,String templateId, Organization organization,List<AlarmContact> contacts){
  202 + // TODO 推送钉钉消息
  203 + SmsReqDTO info = new SmsReqDTO();
  204 + info.setId(templateId);
  205 + LinkedHashMap<String, String> params = new LinkedHashMap<>();
  206 + //name-其他;device_name-其他;level-其他;location-其他;alarm_value-其他;
  207 + params.put("type", alarmInfo.getType());
  208 + params.put("device_name", alarmInfo.getDeviceName());
  209 + params.put("severity", alarmInfo.getSeverity());
  210 + params.put("organization", organization != null ? organization.getName() : "");
  211 + params.put("createtime", YtDateTimeUtils.formate(alarmInfo.getCreateTs()));
  212 + info.setParams(params);
  213 + contacts.stream().parallel().forEach(item -> {
  214 + if (!item.getDingtalk().isEmpty()) {
  215 + info.setPhoneNumbers(item.getDingtalk());
  216 + smsService.sendSms(info);
  217 + }
  218 + });
  219 +
  220 + }
  221 +
  222 + /**
  223 + * 微信通知设备告警信息
  224 + * @param alarmInfo 告警信息
  225 + * @param templateId 告警模板主键
  226 + * @param organization 设备所属组织
  227 + * @param contacts 设备告警联系人
  228 + */
  229 + private void weChat4Alarm(AlarmInfoDTO alarmInfo,String templateId, Organization organization,List<AlarmContact> contacts){
  230 + // TODO 推送微信通知
  231 + SmsReqDTO info = new SmsReqDTO();
  232 + info.setId(templateId);
  233 + LinkedHashMap<String, String> params = new LinkedHashMap<>();
  234 + //name-其他;device_name-其他;level-其他;location-其他;alarm_value-其他;
  235 + params.put("type", alarmInfo.getType());
  236 + params.put("device_name", alarmInfo.getDeviceName());
  237 + params.put("severity", alarmInfo.getSeverity());
  238 + params.put("organization", organization != null ? organization.getName() : "");
  239 + params.put("createtime", YtDateTimeUtils.formate(alarmInfo.getCreateTs()));
  240 + info.setParams(params);
  241 + contacts.stream().parallel().forEach(item -> {
  242 + if (!item.getWechat().isEmpty()) {
  243 + info.setPhoneNumbers(item.getWechat());
  244 + smsService.sendSms(info);
  245 + }
  246 + });
  247 + }
  248 +
  249 +
167 250 }
... ...