Browse Source

告警接收通知代码优化

hanzhengyi 1 year ago
parent
commit
f3c927006f

+ 6 - 1
service-alarm/service-alarm-biz/src/main/java/com/usky/alarm/service/BaseAlarmNoticeResultService.java

@@ -1,9 +1,12 @@
 package com.usky.alarm.service;
 
-import com.usky.alarm.domain.BaseAlarmNoticeResult;
+import com.aliyuncs.exceptions.ClientException;
+import com.usky.alarm.domain.*;
 import com.usky.common.core.bean.CommonPage;
 import com.usky.common.mybatis.core.CrudService;
 
+import java.util.List;
+
 /**
  * <p>
  * 告警通知结果 服务类
@@ -14,4 +17,6 @@ import com.usky.common.mybatis.core.CrudService;
  */
 public interface BaseAlarmNoticeResultService extends CrudService<BaseAlarmNoticeResult> {
     CommonPage<BaseAlarmNoticeResult> resultInfo(String receiver, Integer alarmId, Integer current, Integer size);
+    Integer send(BaseAlarm baseAlarm, List<BaseAlarmNotice> records3, Integer alarmId, List<DmpProduct> records,
+                 BaseAlarmType baseAlarmType, List<DmpDevice> records2) throws ClientException;
 }

+ 1 - 1
service-alarm/service-alarm-biz/src/main/java/com/usky/alarm/service/BaseAlarmService.java

@@ -1,7 +1,7 @@
 package com.usky.alarm.service;
 
 import com.aliyuncs.exceptions.ClientException;
-import com.usky.alarm.domain.BaseAlarm;
+import com.usky.alarm.domain.*;
 import com.usky.common.mybatis.core.CrudService;
 
 /**

+ 49 - 0
service-alarm/service-alarm-biz/src/main/java/com/usky/alarm/service/config/ExecutorConfig.java

@@ -0,0 +1,49 @@
+package com.usky.alarm.service.config;
+
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.scheduling.annotation.EnableAsync;
+import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
+
+import java.util.concurrent.Executor;
+import java.util.concurrent.ThreadPoolExecutor;
+
+@Configuration
+@EnableAsync
+@Slf4j
+public class ExecutorConfig {
+
+    /** 核心线程数(默认线程数) */
+    private int corePoolSize = 10;
+    /** 最大线程数 */
+    private int maxPoolSize = 20;
+    /** 允许线程空闲时间(单位:默认为秒) */
+    private static final int keepAliveTime = 60;
+    /** 缓冲队列大小 */
+    private int queueCapacity = 10;
+
+    @Bean
+    public Executor asyncServiceExecutor(){
+        log.info("start asyncServiceExecutor++++++++++++++++++++++");
+        ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
+        //配置核心线程数
+        executor.setCorePoolSize(corePoolSize);
+        //配置最大线程数
+        executor.setMaxPoolSize(maxPoolSize);
+        //配置空闲时间
+        executor.setKeepAliveSeconds(keepAliveTime);
+        //配置队列大小
+        executor.setQueueCapacity(queueCapacity);
+        //配置线程前缀名
+        executor.setThreadNamePrefix("async-service-");
+
+        // rejection-policy:当pool已经达到max size的时候,如何处理新任务
+        // CALLER_RUNS:不在新线程中执行任务,而是有调用者所在的线程来执行
+        executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
+
+        //执行初始化
+        executor.initialize();
+        return executor;
+    }
+}

+ 86 - 1
service-alarm/service-alarm-biz/src/main/java/com/usky/alarm/service/impl/BaseAlarmNoticeResultServiceImpl.java

@@ -1,18 +1,34 @@
 package com.usky.alarm.service.impl;
 
+import com.aliyuncs.DefaultAcsClient;
+import com.aliyuncs.IAcsClient;
+import com.aliyuncs.dysmsapi.model.v20170525.SendSmsRequest;
+import com.aliyuncs.dysmsapi.model.v20170525.SendSmsResponse;
+import com.aliyuncs.dyvmsapi.model.v20170525.SingleCallByTtsResponse;
+import com.aliyuncs.exceptions.ClientException;
+import com.aliyuncs.profile.DefaultProfile;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.StringUtils;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.usky.alarm.domain.BaseAlarmNoticeResult;
+import com.usky.alarm.domain.*;
 import com.usky.alarm.mapper.BaseAlarmNoticeResultMapper;
+import com.usky.alarm.mapper.SysUserMapper;
 import com.usky.alarm.service.BaseAlarmNoticeResultService;
+import com.usky.alarm.service.config.voice.VoiceNotice;
 import com.usky.common.core.bean.CommonPage;
 import com.usky.common.mybatis.core.AbstractCrudService;
 import com.usky.common.security.utils.SecurityUtils;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Async;
 import org.springframework.stereotype.Service;
 
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+import java.util.List;
+
 /**
  * <p>
  * 告警通知结果 服务实现类
@@ -21,8 +37,14 @@ import org.springframework.stereotype.Service;
  * @author han
  * @since 2023-09-25
  */
+@Slf4j
 @Service
 public class BaseAlarmNoticeResultServiceImpl extends AbstractCrudService<BaseAlarmNoticeResultMapper, BaseAlarmNoticeResult> implements BaseAlarmNoticeResultService {
+    @Autowired
+    private VoiceNotice voiceNotice;
+    @Autowired
+    private SysUserMapper sysUserMapper;
+
     @Override
     public CommonPage<BaseAlarmNoticeResult> resultInfo(String receiver, Integer alarmId, Integer current, Integer size) {
         IPage<BaseAlarmNoticeResult> page = new Page<>(current, size);
@@ -33,4 +55,67 @@ public class BaseAlarmNoticeResultServiceImpl extends AbstractCrudService<BaseAl
         page = this.page(page,queryWrapper1);
         return new CommonPage<>(page.getRecords(),page.getTotal(),page.getCurrent(),page.getSize());
     }
+
+    //异步多线程调用
+    @Async("asyncServiceExecutor")
+    public Integer send(BaseAlarm baseAlarm, List<BaseAlarmNotice> records3, Integer alarmId, List<DmpProduct> records,
+                        BaseAlarmType baseAlarmType, List<DmpDevice> records2) throws ClientException {
+        log.info("start asyncServiceExecutor--------------------");
+        String[] array = records3.get(0).getReceiver1().split(",");
+        Integer saveAlarmResult = 0;
+        try{
+            Thread.sleep(20000);
+        }catch (Exception e){
+            e.printStackTrace();
+        }
+        for (String s : array) {
+            LambdaQueryWrapper<SysUser> lambdaQuery4 = Wrappers.lambdaQuery();
+            lambdaQuery4.eq(SysUser::getUserId,s)
+                    .eq(SysUser::getDelFlag,0);
+            SysUser sysUser = sysUserMapper.selectOne(lambdaQuery4);
+            BaseAlarmNoticeResult baseAlarmNoticeResult = new BaseAlarmNoticeResult();
+            baseAlarmNoticeResult.setReceiver(sysUser.getNickName());
+            baseAlarmNoticeResult.setReceiverPhone(sysUser.getPhonenumber());
+            baseAlarmNoticeResult.setAlarmId(alarmId);
+            baseAlarmNoticeResult.setNoticeTime(LocalDateTime.now());
+            baseAlarmNoticeResult.setNoticeContent(records.get(0).getProductName()+","+baseAlarmType.getTypeName()+","+baseAlarm.getAlarmTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd " +
+                    "HH:mm:ss")));
+            baseAlarmNoticeResult.setTenantId(records.get(0).getTenantId());
+            if (records3.get(0).getNoticeMethod().contains("电话")){
+                SingleCallByTtsResponse code = voiceNotice.sendCVoice(sysUser.getPhonenumber(),
+                        records.get(0).getProductName(),baseAlarmType.getTypeName(),
+                        baseAlarm.getAlarmTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd " +
+                                "HH:mm:ss")));
+                baseAlarmNoticeResult.setNoticeType(3);
+                if(code.getCode() != null && code.getCode().equals("OK")) {
+                    //请求成功
+                    baseAlarmNoticeResult.setNoticeResult(1);
+                }else {
+                    baseAlarmNoticeResult.setNoticeResult(2);
+                }
+                saveAlarmResult = baseMapper.insert(baseAlarmNoticeResult);
+            }
+            if (records3.get(0).getNoticeMethod().contains("短信")){
+                DefaultProfile profile = DefaultProfile.getProfile("cn-beijing", "LTAI5tH3VvRL5BUkovCokHJX", "SaaWUouNqvcA0C746gcNOH9m6SRYN4");
+                IAcsClient client = new DefaultAcsClient(profile);
+                SendSmsRequest request = new SendSmsRequest();
+                request.setPhoneNumbers(sysUser.getPhonenumber());//接收短信的手机号码
+                request.setSignName("上海永天科技股份有限公司");//短信签名名称
+                request.setTemplateCode("SMS_463791105");//短信模板CODE
+                request.setTemplateParam("{\"deviceName\":\""+records2.get(0).getDeviceName()+"\","+"\"time\":\""+baseAlarm.getAlarmTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd " +
+                        "HH:mm:ss"))+"\","+
+                        "\"alarmType\":\""+baseAlarmType.getTypeName()+"\","+"\"alarmContent\":\""+baseAlarm.getAlarmContent()+"\"}");
+                SendSmsResponse code = client.getAcsResponse(request);
+                baseAlarmNoticeResult.setNoticeType(4);
+                if(code.getCode() != null && code.getCode().equals("OK")) {
+                    //请求成功
+                    baseAlarmNoticeResult.setNoticeResult(1);
+                }else {
+                    baseAlarmNoticeResult.setNoticeResult(2);
+                }
+                saveAlarmResult = baseMapper.insert(baseAlarmNoticeResult);
+            }
+        }
+        return saveAlarmResult;
+    }
 }

+ 7 - 49
service-alarm/service-alarm-biz/src/main/java/com/usky/alarm/service/impl/BaseAlarmServiceImpl.java

@@ -20,7 +20,9 @@ import com.usky.alarm.service.config.voice.VoiceNotice;
 import com.usky.alarm.service.config.websocket.WebSocket;
 import com.usky.common.core.exception.BusinessException;
 import com.usky.common.mybatis.core.AbstractCrudService;
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Async;
 import org.springframework.stereotype.Service;
 
 import java.time.LocalDateTime;
@@ -35,6 +37,7 @@ import java.util.List;
  * @author han
  * @since 2023-09-22
  */
+@Slf4j
 @Service
 public class BaseAlarmServiceImpl extends AbstractCrudService<BaseAlarmMapper, BaseAlarm> implements BaseAlarmService {
 
@@ -50,6 +53,9 @@ public class BaseAlarmServiceImpl extends AbstractCrudService<BaseAlarmMapper, B
     @Autowired
     private BaseAlarmNoticeService baseAlarmNoticeService;
 
+    @Autowired
+    private BaseAlarmNoticeResultService baseAlarmNoticeResultService;
+
     @Autowired
     private SysUserMapper sysUserMapper;
 
@@ -108,55 +114,7 @@ public class BaseAlarmServiceImpl extends AbstractCrudService<BaseAlarmMapper, B
                             .eq(BaseAlarmNotice::getDeleteFlag,0);
                     List<BaseAlarmNotice> records3 = baseAlarmNoticeService.list(lambdaQuery3);
                     if (records3.size()>0){
-                        String[] array = records3.get(0).getReceiver1().split(",");
-                        for (String s : array) {
-                            LambdaQueryWrapper<SysUser> lambdaQuery4 = Wrappers.lambdaQuery();
-                            lambdaQuery4.eq(SysUser::getUserId,s)
-                                    .eq(SysUser::getDelFlag,0);
-                            SysUser sysUser = sysUserMapper.selectOne(lambdaQuery4);
-                            BaseAlarmNoticeResult baseAlarmNoticeResult = new BaseAlarmNoticeResult();
-                            baseAlarmNoticeResult.setReceiver(sysUser.getNickName());
-                            baseAlarmNoticeResult.setReceiverPhone(sysUser.getPhonenumber());
-                            baseAlarmNoticeResult.setAlarmId(alarmId);
-                            baseAlarmNoticeResult.setNoticeTime(LocalDateTime.now());
-                            baseAlarmNoticeResult.setNoticeContent(records.get(0).getProductName()+","+baseAlarmType.getTypeName()+","+baseAlarm.getAlarmTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd " +
-                                    "HH:mm:ss")));
-                            baseAlarmNoticeResult.setTenantId(records.get(0).getTenantId());
-                            if (records3.get(0).getNoticeMethod().contains("电话")){
-                                SingleCallByTtsResponse code = voiceNotice.sendCVoice(sysUser.getPhonenumber(),
-                                        records.get(0).getProductName(),baseAlarmType.getTypeName(),
-                                        baseAlarm.getAlarmTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd " +
-                                                "HH:mm:ss")));
-                                baseAlarmNoticeResult.setNoticeType(3);
-                                if(code.getCode() != null && code.getCode().equals("OK")) {
-                                    //请求成功
-                                    baseAlarmNoticeResult.setNoticeResult(1);
-                                }else {
-                                    baseAlarmNoticeResult.setNoticeResult(2);
-                                }
-                                Integer saveAlarmResult = baseAlarmNoticeResultMapper.insert(baseAlarmNoticeResult);
-                            }
-                            if (records3.get(0).getNoticeMethod().contains("短信")){
-                                DefaultProfile profile = DefaultProfile.getProfile("cn-beijing", "LTAI5tH3VvRL5BUkovCokHJX", "SaaWUouNqvcA0C746gcNOH9m6SRYN4");
-                                IAcsClient client = new DefaultAcsClient(profile);
-                                SendSmsRequest request = new SendSmsRequest();
-                                request.setPhoneNumbers(sysUser.getPhonenumber());//接收短信的手机号码
-                                request.setSignName("上海永天科技股份有限公司");//短信签名名称
-                                request.setTemplateCode("SMS_463791105");//短信模板CODE
-                                request.setTemplateParam("{\"deviceName\":\""+records2.get(0).getDeviceName()+"\","+"\"time\":\""+baseAlarm.getAlarmTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd " +
-                                        "HH:mm:ss"))+"\","+
-                                        "\"alarmType\":\""+baseAlarmType.getTypeName()+"\","+"\"alarmContent\":\""+baseAlarm.getAlarmContent()+"\"}");
-                                SendSmsResponse code = client.getAcsResponse(request);
-                                baseAlarmNoticeResult.setNoticeType(4);
-                                if(code.getCode() != null && code.getCode().equals("OK")) {
-                                    //请求成功
-                                    baseAlarmNoticeResult.setNoticeResult(1);
-                                }else {
-                                    baseAlarmNoticeResult.setNoticeResult(2);
-                                }
-                                Integer saveAlarmResult = baseAlarmNoticeResultMapper.insert(baseAlarmNoticeResult);
-                            }
-                        }
+                        Integer saveAlarmResult = baseAlarmNoticeResultService.send(baseAlarm,records3,alarmId,records,baseAlarmType,records2);
                     }
                     return saveResult;
                 }