Browse Source

演练/培训计划查询变更,增加项目统一线程池

jingyuanchao 2 years ago
parent
commit
4e56b8dd99

+ 19 - 15
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/drill/service/impl/CoreDrillPlanServiceImpl.java

@@ -1,13 +1,14 @@
 package com.xunmei.core.drill.service.impl;
 
-import java.util.*;
-
 import cn.hutool.core.collection.CollectionUtil;
 import cn.hutool.core.map.MapUtil;
 import cn.hutool.core.util.ObjectUtil;
 import com.alibaba.fastjson2.JSON;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.IdWorker;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.xunmei.common.core.constant.ErrorMsgConstants;
 import com.xunmei.common.core.constant.SecurityConstants;
 import com.xunmei.common.core.domain.IdName;
@@ -22,32 +23,32 @@ import com.xunmei.common.core.domain.drill.vo.CoreDrillPlanRoleVo;
 import com.xunmei.common.core.enums.OrgTypeEnum;
 import com.xunmei.common.core.exception.SystemException;
 import com.xunmei.common.core.utils.DateUtils;
+import com.xunmei.common.core.web.page.TableDataInfo;
 import com.xunmei.common.security.utils.SecurityUtils;
 import com.xunmei.core.drill.mapper.*;
+import com.xunmei.core.drill.service.ICoreDrillPlanService;
 import com.xunmei.core.drill.service.ICoreDrillPlanToExecOrgService;
 import com.xunmei.core.drill.service.ICoreDrillPlanToRoleService;
 import com.xunmei.core.drill.service.ICoreDrillTaskService;
+import com.xunmei.core.thread.ThreadPoolConfig;
 import com.xunmei.system.api.RemoteOrgService;
 import com.xunmei.system.api.domain.SysOrg;
 import com.xunmei.system.api.function.RemoteCallHandlerExecutor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.transaction.support.TransactionSynchronizationAdapter;
+import org.springframework.transaction.support.TransactionSynchronizationManager;
 
+import java.util.*;
 import java.util.concurrent.CompletableFuture;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
 
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.xunmei.common.core.web.page.TableDataInfo;
-import com.xunmei.core.drill.service.ICoreDrillPlanService;
-import org.springframework.transaction.annotation.Transactional;
-import org.springframework.transaction.support.TransactionSynchronizationAdapter;
-import org.springframework.transaction.support.TransactionSynchronizationManager;
-
 /**
  * 预案演练计划Service业务层处理
  *
@@ -73,8 +74,11 @@ public class CoreDrillPlanServiceImpl extends ServiceImpl<CoreDrillPlanMapper, C
     private CoreDrillTaskMapper coreDrillTaskMapper;
     @Autowired
     private CoreDrillTaskToRoleMapper coreDrillTaskToRoleMapper;
+
     @Autowired
-    private CoreDrillTaskToUserMapper coreDrillTaskToUserMapper;
+    @Qualifier(ThreadPoolConfig.SOC_EXECUTOR)
+    private ThreadPoolTaskExecutor threadPoolTaskExecutor;
+
     @Autowired
     private RemoteOrgService orgService;
 
@@ -292,7 +296,7 @@ public class CoreDrillPlanServiceImpl extends ServiceImpl<CoreDrillPlanMapper, C
             CompletableFuture.runAsync(() -> {
                 //说明有任务并且都没执行过,需要重新生成任务
                 coreDrillTaskService.createTaskForNow(dataVo, plan.getPlanStartDate(), plan.getPlanEndDate());
-            });
+            },threadPoolTaskExecutor);
         }
     }
 
@@ -322,7 +326,7 @@ public class CoreDrillPlanServiceImpl extends ServiceImpl<CoreDrillPlanMapper, C
             CompletableFuture.runAsync(() -> {
                 //说明有任务并且都没执行过,需要重新生成任务
                 coreDrillTaskService.createTaskForNow(dataVo, plan.getPlanStartDate(), plan.getPlanEndDate());
-            });
+            },threadPoolTaskExecutor);
         }
     }
     private Boolean checkCanUpdate(CoreDrillPlanUpdateDto request, CoreDrillPlan plan) {
@@ -647,7 +651,7 @@ public class CoreDrillPlanServiceImpl extends ServiceImpl<CoreDrillPlanMapper, C
                             final CoreDrillPlanDataVo detailPlanData = getCoreDrillPlanDataVo(drillPlan.getId());
                             coreDrillTaskService.createTaskForNow(detailPlanData, plan.getPlanStartDate(), plan.getPlanEndDate());
                         }
-                    });
+                    },threadPoolTaskExecutor);
                 }
             }
         });

+ 9 - 9
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/drill/service/impl/CoreDrillTaskServiceImpl.java

@@ -20,8 +20,6 @@ import com.xunmei.common.core.domain.R;
 import com.xunmei.common.core.domain.drill.domain.*;
 import com.xunmei.common.core.domain.drill.dto.*;
 import com.xunmei.common.core.domain.drill.vo.*;
-import com.xunmei.common.core.domain.edu.domain.CoreEduTrainingTaskToUser;
-import com.xunmei.common.core.domain.edu.vo.CoreEduTrainingTaskReportVo;
 import com.xunmei.common.core.domain.panel.dto.PanelListDto;
 import com.xunmei.common.core.domain.panel.enums.PanelTypeEnums;
 import com.xunmei.common.core.domain.panel.vo.PanelListVo;
@@ -43,6 +41,7 @@ import com.xunmei.core.drill.mapper.CoreDrillTaskToUserMapper;
 import com.xunmei.core.drill.service.ICoreDrillTaskService;
 import com.xunmei.core.drill.service.ICoreDrillTaskToRoleService;
 import com.xunmei.core.drill.service.ICoreDrillTaskToUserService;
+import com.xunmei.core.thread.ThreadPoolConfig;
 import com.xunmei.system.api.RemoteConfigService;
 import com.xunmei.system.api.RemoteFileService;
 import com.xunmei.system.api.RemoteOrgService;
@@ -55,22 +54,19 @@ import com.xunmei.system.api.function.RemoteCallHandlerExecutor;
 import io.netty.util.internal.StringUtil;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Propagation;
 import org.springframework.transaction.annotation.Transactional;
 
-import java.io.File;
 import java.math.BigDecimal;
 import java.math.RoundingMode;
-import java.text.NumberFormat;
-import java.time.LocalDateTime;
 import java.util.*;
 import java.util.concurrent.CompletableFuture;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
 
-import static com.xunmei.common.core.utils.StringUtils.calculatePercent;
-
 
 /**
  * 教育任务Service业务层处理
@@ -102,6 +98,10 @@ public class CoreDrillTaskServiceImpl extends ServiceImpl<CoreDrillTaskMapper, C
     @Autowired
     RemoteConfigService remoteConfigService;
 
+    @Autowired
+    @Qualifier(ThreadPoolConfig.SOC_EXECUTOR)
+    private ThreadPoolTaskExecutor threadPoolTaskExecutor;
+
     @Override
     public TableDataInfo<CoreDrillTaskPageVo> selectPage(CoreDrillTaskPageDto request) {
         dealParam(request);
@@ -531,7 +531,7 @@ public class CoreDrillTaskServiceImpl extends ServiceImpl<CoreDrillTaskMapper, C
             updateWrapper.eq(CoreDrillTask::getId, id);
             updateWrapper.set(CoreDrillTask::getPdfUrl, pdfUrl);
             this.update(updateWrapper);
-        });
+        }, threadPoolTaskExecutor);
 
         return AjaxResult.success("正在生成pdf,请稍后刷新页面查看!");
     }
@@ -615,7 +615,7 @@ public class CoreDrillTaskServiceImpl extends ServiceImpl<CoreDrillTaskMapper, C
                 detailPlanData.setFileList(ObjectUtil.isNotEmpty(detailPlanData.getFile()) ? JSON.parseArray(detailPlanData.getFile(), String.class) : null);
                 DateRange range = DateUtils.getStartAndEnd(finalDate, plan.getPlanCycle());
                 this.createTaskForNow(detailPlanData, range.getStartTime(), range.getEndTime());
-            });
+            }, threadPoolTaskExecutor);
         }
         return "创建成功";
     }

+ 12 - 8
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/edu/service/impl/CoreEduTrainingPlanServiceImpl.java

@@ -12,8 +12,6 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.xunmei.common.core.constant.ErrorMsgConstants;
 import com.xunmei.common.core.constant.SecurityConstants;
 import com.xunmei.common.core.domain.IdName;
-import com.xunmei.common.core.domain.drill.domain.CoreDrillPlan;
-import com.xunmei.common.core.domain.drill.dto.CoreDrillPlanUpdateDto;
 import com.xunmei.common.core.domain.edu.domain.*;
 import com.xunmei.common.core.domain.edu.dto.CoreEduTrainingPlanEditDto;
 import com.xunmei.common.core.domain.edu.dto.CoreEduTrainingPlanInsertDto;
@@ -32,13 +30,15 @@ import com.xunmei.core.edu.service.ICoreEduTrainingPlanService;
 import com.xunmei.core.edu.service.ICoreEduTrainingPlanToExecOrgService;
 import com.xunmei.core.edu.service.ICoreEduTrainingPlanToRoleService;
 import com.xunmei.core.edu.service.ICoreEduTrainingTaskService;
+import com.xunmei.core.thread.ThreadPoolConfig;
 import com.xunmei.system.api.RemoteOrgService;
-import com.xunmei.system.api.RemoteRoleService;
 import com.xunmei.system.api.domain.SysOrg;
 import com.xunmei.system.api.function.RemoteCallHandlerExecutor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Propagation;
 import org.springframework.transaction.annotation.Transactional;
@@ -78,6 +78,10 @@ public class CoreEduTrainingPlanServiceImpl extends ServiceImpl<CoreEduTrainingP
     @Autowired
     private RemoteOrgService orgService;
 
+    @Autowired
+    @Qualifier(ThreadPoolConfig.SOC_EXECUTOR)
+    private ThreadPoolTaskExecutor threadPoolTaskExecutor;
+
     @Override
     public TableDataInfo selectPage(CoreEduTrainingPlanPageDto request) throws InterruptedException {
 
@@ -132,7 +136,7 @@ public class CoreEduTrainingPlanServiceImpl extends ServiceImpl<CoreEduTrainingP
         final CoreEduTrainingPlan plan = coreEduTrainingPlanMapper.selectById(id);
         CoreEduTrainingPlanDetailVo vo = new CoreEduTrainingPlanDetailVo();
         BeanUtils.copyProperties(plan, vo);
-        vo.setBuildTaskNow(ObjectUtil.equal(1,plan.getBuildTaskNow()));
+        vo.setBuildTaskNow(ObjectUtil.equal(1, plan.getBuildTaskNow()));
         vo.setFileList(ObjectUtil.isNotEmpty(plan.getFileList()) ? JSON.parseArray(plan.getFileList(), String.class) : null);
         final List<CoreEduTrainingPlanToExecOrg> execOrgList = coreEduTrainingPlanToExecOrgMapper.selectByMap(MapUtil.of("plan_id", id));
         final List<Long> execOrgIdList = execOrgList.stream().map(CoreEduTrainingPlanToExecOrg::getOrgId).collect(Collectors.toList());
@@ -218,7 +222,7 @@ public class CoreEduTrainingPlanServiceImpl extends ServiceImpl<CoreEduTrainingP
             throw new RuntimeException("当前用户所在机构类型无法确认!");
         }
         //如果是省联社或者办事处则返回1,其他机构类型返回0
-        return ObjectUtil.equal(orgType, OrgTypeEnum.SHEGN_LIAN_SHE.getCode()) || ObjectUtil.equal(orgType,  OrgTypeEnum.BAN_SHI_CHU.getCode());
+        return ObjectUtil.equal(orgType, OrgTypeEnum.SHEGN_LIAN_SHE.getCode()) || ObjectUtil.equal(orgType, OrgTypeEnum.BAN_SHI_CHU.getCode());
     }
 
     /**
@@ -290,7 +294,7 @@ public class CoreEduTrainingPlanServiceImpl extends ServiceImpl<CoreEduTrainingP
             CompletableFuture.runAsync(() -> {
                 //说明有任务并且都没执行过,需要重新生成任务
                 coreEduTrainingTaskService.createTaskForNow(dataVo, plan.getStartDate(), plan.getEndDate());
-            });
+            },threadPoolTaskExecutor);
         }
     }
 
@@ -318,7 +322,7 @@ public class CoreEduTrainingPlanServiceImpl extends ServiceImpl<CoreEduTrainingP
             CompletableFuture.runAsync(() -> {
                 //说明有任务并且都没执行过,需要重新生成任务
                 coreEduTrainingTaskService.createTaskForNow(dataVo, plan.getStartDate(), plan.getEndDate());
-            });
+            },threadPoolTaskExecutor);
         }
     }
 
@@ -635,7 +639,7 @@ public class CoreEduTrainingPlanServiceImpl extends ServiceImpl<CoreEduTrainingP
                             CoreEduTrainingPlanDataVo detailPlanData = getCoreEduTrainingPlanDataVo(trainingPlan.getId());
                             coreEduTrainingTaskService.createTaskForNow(detailPlanData, plan.getStartDate(), plan.getEndDate());
                         }
-                    });
+                    },threadPoolTaskExecutor);
                 }
             }
         });

+ 8 - 3
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/edu/service/impl/CoreEduTrainingTaskServiceImpl.java

@@ -41,6 +41,7 @@ import com.xunmei.core.edu.mapper.CoreEduTrainingTaskToUserMapper;
 import com.xunmei.core.edu.service.ICoreEduTrainingTaskService;
 import com.xunmei.core.edu.service.ICoreEduTrainingTaskToRoleService;
 import com.xunmei.core.edu.service.ICoreEduTrainingTaskToUserService;
+import com.xunmei.core.thread.ThreadPoolConfig;
 import com.xunmei.system.api.RemoteFileService;
 import com.xunmei.system.api.RemoteOrgService;
 import com.xunmei.system.api.RemoteRoleService;
@@ -50,6 +51,8 @@ import com.xunmei.system.api.function.RemoteCallHandlerExecutor;
 import io.netty.util.internal.StringUtil;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Propagation;
 import org.springframework.transaction.annotation.Transactional;
@@ -93,7 +96,9 @@ public class CoreEduTrainingTaskServiceImpl extends ServiceImpl<CoreEduTrainingT
     @Autowired
     private CoreEduTrainingTaskToUserMapper coreEduTrainingTaskToUserMapper;
 
-
+    @Autowired
+    @Qualifier(ThreadPoolConfig.SOC_EXECUTOR)
+    private ThreadPoolTaskExecutor threadPoolTaskExecutor;
 
     @Override
     public TableDataInfo<CoreEduTrainingTaskPageVo> selectPage(CoreEduTrainingTaskPageDto request) {
@@ -520,7 +525,7 @@ public class CoreEduTrainingTaskServiceImpl extends ServiceImpl<CoreEduTrainingT
             updateWrapper.eq(CoreEduTrainingTask::getId, id);
             updateWrapper.set(CoreEduTrainingTask::getPdfUrl, pdfUrl);
             this.update(updateWrapper);
-        });
+        },threadPoolTaskExecutor);
 
        /* //新方式生成pdf
         try {
@@ -622,7 +627,7 @@ public class CoreEduTrainingTaskServiceImpl extends ServiceImpl<CoreEduTrainingT
                 detailPlanData.setFileList(ObjectUtil.isNotEmpty(detailPlanData.getFile()) ? JSON.parseArray(detailPlanData.getFile(), String.class) : null);
                 DateRange range = DateUtils.getStartAndEnd(finalDate, plan.getPlanCycle());
                 this.createTaskForNow(detailPlanData, range.getStartTime(), range.getEndTime());
-            });
+            },threadPoolTaskExecutor);
         }
         return "创建成功";
     }

+ 4 - 3
soc-common/soc-common-core/src/main/java/com/xunmei/common/core/thread/SocThreadFactory.java → soc-modules/soc-modules-core/src/main/java/com/xunmei/core/thread/SocThreadFactory.java

@@ -1,7 +1,8 @@
-package com.xunmei.common.core.thread;
+package com.xunmei.core.thread;
 
 import lombok.AllArgsConstructor;
 
+import javax.validation.constraints.NotNull;
 import java.util.concurrent.ThreadFactory;
 
 @AllArgsConstructor
@@ -10,8 +11,8 @@ public class SocThreadFactory implements ThreadFactory {
     private ThreadFactory original;
 
     @Override
-    public Thread newThread(Runnable r) {
-        Thread thread = original.newThread(r);
+    public Thread newThread(@NotNull Runnable runnable) {
+        Thread thread = original.newThread(runnable);
         thread.setUncaughtExceptionHandler(new SocUncaughtExceptionHandler());//异常捕获
         return thread;
     }

+ 1 - 1
soc-common/soc-common-core/src/main/java/com/xunmei/common/core/thread/SocUncaughtExceptionHandler.java → soc-modules/soc-modules-core/src/main/java/com/xunmei/core/thread/SocUncaughtExceptionHandler.java

@@ -1,4 +1,4 @@
-package com.xunmei.common.core.thread;
+package com.xunmei.core.thread;
 
 import lombok.extern.slf4j.Slf4j;
 

+ 3 - 2
soc-common/soc-common-core/src/main/java/com/xunmei/common/core/thread/ThreadPoolConfig.java → soc-modules/soc-modules-core/src/main/java/com/xunmei/core/thread/ThreadPoolConfig.java

@@ -1,4 +1,4 @@
-package com.xunmei.common.core.thread;
+package com.xunmei.core.thread;
 
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
@@ -34,7 +34,8 @@ public class ThreadPoolConfig implements AsyncConfigurer {
         executor.setMaxPoolSize(10);
         executor.setQueueCapacity(200);
         executor.setThreadNamePrefix("soc-executor-");
-        executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());//满了调用线程执行,认为重要任务
+        //拒绝策略,由投递者执行
+        executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
         //装饰器,用于异步线程内捕获异常
         executor.setThreadFactory(new SocThreadFactory(executor));
         executor.initialize();