hanzhiwei лет назад: 2
Родитель
Сommit
fabfcaa2d5

+ 2 - 1
zd-modules/zd-algorithm/src/main/java/com/zd/alg/AlgorithmApplication.java

@@ -13,7 +13,7 @@ import org.springframework.boot.autoconfigure.SpringBootApplication;
 import org.springframework.boot.context.properties.EnableConfigurationProperties;
 import org.springframework.boot.web.servlet.ServletComponentScan;
 import org.springframework.context.ConfigurableApplicationContext;
-import org.springframework.context.annotation.ComponentScan;
+import org.springframework.scheduling.annotation.EnableAsync;
 import org.springframework.scheduling.annotation.EnableScheduling;
 
 /**
@@ -26,6 +26,7 @@ import org.springframework.scheduling.annotation.EnableScheduling;
 @EnableConfigurationProperties({AlgorithmYml.class, FireProperties.class})
 @MapperScan(value = {"com.zd.**.mapper"})
 @EnableScheduling
+@EnableAsync
 public class AlgorithmApplication {
 
     private static String[] args;

+ 52 - 0
zd-modules/zd-algorithm/src/main/java/com/zd/alg/alarm/config/ExecutorConfig.java

@@ -0,0 +1,52 @@
+package com.zd.alg.alarm.config;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+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;
+
+/**
+ * @Author: zhoupan
+ * @Date: 2021/11/17/14:39
+ * @Description:
+ */
+@EnableAsync
+@Configuration
+public class ExecutorConfig {
+    private static final Logger logger = LoggerFactory.getLogger(ExecutorConfig.class);
+
+    @Bean(name = "msgExecutor")
+    public Executor asyncServiceExecutor() {
+        logger.info("start asyncServiceExecutor");
+        ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
+        //配置核心线程数
+        executor.setCorePoolSize(10);
+        //线程池维护线程的最大数量,只有在缓冲队列满了之后才会申请超过核心线程数的线程
+        executor.setMaxPoolSize(50);
+        //缓存队列
+        executor.setQueueCapacity(50);
+        //许的空闲时间,当超过了核心线程出之外的线程在空闲时间到达之后会被销毁
+        executor.setKeepAliveSeconds(200);
+        //配置线程池中的线程的名称前缀
+        executor.setThreadNamePrefix("async-service-alg-msg");
+        /**
+         * 当线程池的任务缓存队列已满并且线程池中的线程数目达到maximumPoolSize,如果还有任务到来就会采取任务拒绝策略
+         * 通常有以下四种策略:
+         * ThreadPoolExecutor.AbortPolicy:丢弃任务并抛出RejectedExecutionException异常。
+         * ThreadPoolExecutor.DiscardPolicy:也是丢弃任务,但是不抛出异常。
+         * ThreadPoolExecutor.DiscardOldestPolicy:丢弃队列最前面的任务,然后重新尝试执行任务(重复此过程)
+         * ThreadPoolExecutor.CallerRunsPolicy:重试添加当前的任务,自动重复调用 execute() 方法,直到成功
+         */
+        // rejection-policy:当pool已经达到max size的时候,如何处理新任务
+        // CALLER_RUNS:不在新线程中执行任务,而是有调用者所在的线程来执行
+        executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
+        //执行初始化
+        executor.initialize();
+        return executor;
+    }
+}

+ 2 - 0
zd-modules/zd-algorithm/src/main/java/com/zd/alg/alarm/controller/AlarmController.java

@@ -19,6 +19,7 @@ import com.zd.model.domain.per.PerPrefix;
 import com.zd.model.page.TableDataInfo;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Async;
 import org.springframework.web.bind.annotation.*;
 
 import java.util.*;
@@ -51,6 +52,7 @@ public class AlarmController extends BaseController {
     }
 
     @PostMapping("/send")
+    @Async("msgExecutor")
     public ResultData queryOption(@RequestBody AlarmEntrty alarmEntrty) {
         if (alarmEntrty.getTo() == null || alarmEntrty.getTo().length == 0) {
             logger.info("打电话发短信电话号码为空!");

+ 0 - 9
zd-modules/zd-chemical/src/main/java/com/zd/chemical/service/impl/HxpStockServiceImpl.java

@@ -438,13 +438,8 @@ public class HxpStockServiceImpl implements IHxpStockService {
                     }
                 }, 30, TimeUnit.SECONDS);
             }
-
             //按照配置预警
             if (illegalRemoval != null) {
-                ResultData urlScheme = remoteMessageService.getUrlScheme(logId);
-                if (urlScheme.getCode() != HttpStatus.SUCCESS) {
-                    logger.error("获取urlScheme失败!");
-                }
                 String text = "【实验室安全系统】" + warningNoticeLogDto.getSubName() + "-实验人员违规携带" + warningNoticeLogDto.getName() + "离开房间,发生时间:" + LocalDateTimeUtil.format(LocalDateTime.now(), "yyyy-MM-dd HH:mm:ss") + ",请尽快确认。";
                 //系统通知
                 if (illegalRemoval.contains("1")) {
@@ -457,9 +452,7 @@ public class HxpStockServiceImpl implements IHxpStockService {
                     labMessageContent.setUserIds(userIdStr.toString());
                     labMessageContent.setContent(text);
                     remoteMessageContentService.sendMessage(labMessageContent);
-
                 }
-
                 //短信通知
                 if (illegalRemoval.contains("2")) {
                     String[] strings = Stream.of(phones.toString().split(",")).filter(a -> StrUtil.isNotBlank(a)).collect(Collectors.joining(",")).split(",");
@@ -491,7 +484,6 @@ public class HxpStockServiceImpl implements IHxpStockService {
                         remoteLaboratoryService.updateWarningNoticeLog(warningNoticeLogDto);
                         Long id = hardwareByType.getData().getId();
                         remoteLaboratoryService.controlDevice(id, 1);
-
                         // 默认一个实验室只触发一个报警器
                         HxpAlarmRecord hxpAlarmRecord = new HxpAlarmRecord();
                         hxpAlarmRecord.setAlarmContent(text);
@@ -502,7 +494,6 @@ public class HxpStockServiceImpl implements IHxpStockService {
                         hxpAlarmRecord.setSubId(hxpStock.getSubId());
                         hxpAlarmRecord.setTerminalNum(terminalNum == null ? tag.getSerialNumber() : terminalNum);
                         hxpAlarmRecord.setHandlingStatus(1);
-                        // TODO 请在此处新增图片路径字段并使用 fileR 中的返回值url作为图片路径以供前端调用,具体实现方式可参考 com.zd.bottle.service.impl.AlarmRecordServiceImpl.remoteAdd#155 行代码,默认配置为空,具体配置可参考zd-bottle-dev.yml#113行到115行
                         hxpAlarmRecordMapper.insertHxpAlarmRecord(hxpAlarmRecord);
                         Long recordId = hxpAlarmRecord.getId();
                         scheduledExecutorService.schedule(new TimerTask() {