Răsfoiți Sursa

培训/演练:优化计划下发速度

jingyuanchao 1 an în urmă
părinte
comite
278a184637

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

@@ -26,6 +26,8 @@ import com.xunmei.common.core.domain.drill.vo.CoreDrillPlanDataVo;
 import com.xunmei.common.core.domain.drill.vo.CoreDrillPlanDetailVo;
 import com.xunmei.common.core.domain.drill.vo.CoreDrillPlanPageVo;
 import com.xunmei.common.core.domain.drill.vo.CoreDrillPlanRoleVo;
+import com.xunmei.common.core.domain.edu.domain.CoreEduTrainingPlan;
+import com.xunmei.common.core.domain.edu.vo.CoreEduTrainingPlanDataVo;
 import com.xunmei.common.core.enums.OrgTypeEnum;
 import com.xunmei.common.core.enums.drill.DrillDoStatus;
 import com.xunmei.common.core.enums.drill.DrillPlanCycleEnum;
@@ -35,6 +37,7 @@ import com.xunmei.common.core.enums.edu.EduTrainingPlanCycleEnum;
 import com.xunmei.common.core.enums.edu.EduTrainingPlanStatus;
 import com.xunmei.common.core.exception.SystemException;
 import com.xunmei.common.core.util.BeanHelper;
+import com.xunmei.common.core.utils.AssertUtil;
 import com.xunmei.common.core.utils.DateUtils;
 import com.xunmei.common.core.web.page.TableDataInfo;
 import com.xunmei.common.redis.utils.RedisUtils;
@@ -692,22 +695,8 @@ public class CoreDrillPlanServiceImpl extends ServiceImpl<CoreDrillPlanMapper, C
     @Transactional(rollbackFor = Exception.class)
     public void publishPlan(Long planId, Integer status) {
         final CoreDrillPlan plan = coreDrillPlanMapper.selectById(planId);
-        if (plan == null) {
-            throw new SystemException("计划不存在!");
-        }
-        if (ObjectUtil.equal(plan.getIssue(), 1)) {
-            throw new SystemException("计划已完成发布!");
-        }
-        List<CoreDrillPlan> planList = lambdaQuery()
-                .eq(CoreDrillPlan::getParentId, planId)
-                .select(CoreDrillPlan::getId).list();
-        if (planList.isEmpty()) {
-            planList = buildPlanData(plan, new ArrayList<>(), true, status);
-        } else {
-            planList.forEach(plan1 -> plan1.setPlanStatus(EduTrainingPlanStatus.USING.getCode()));
-            List<Long> collect = planList.stream().map(CoreDrillPlan::getId).collect(Collectors.toList());
-            coreDrillPlanMapper.updatePlanStatusByIdList(collect, EduTrainingPlanStatus.USING.getCode());
-        }
+        AssertUtil.isNotEmpty(plan, "计划不存在!");
+        AssertUtil.equal(plan.getIssue(), 0, "计划已完成下发!");
         //下发后修改为使用中
         plan.setPlanStatus(DrillPlanStatus.USING.getCode());
         plan.setIssue(1);
@@ -720,19 +709,32 @@ public class CoreDrillPlanServiceImpl extends ServiceImpl<CoreDrillPlanMapper, C
             plan.setBuildTaskNow(0);
         }
         //事务提交后执行
-        List<CoreDrillPlan> finalPlanList = planList;
         TransactionSynchronizationManager.registerSynchronization(new TransactionSynchronizationAdapter() {
             @Override
             public void afterCommit() {
-                for (CoreDrillPlan drillPlan : finalPlanList) {
-                    CompletableFuture.runAsync(() -> {
-                        //如果不是省联社或者办事处,状态启用,并且是无周期或者立即生效
+
+                final CompletableFuture<List<CoreDrillPlan>> planListFuture = CompletableFuture.supplyAsync(() -> {
+                    List<CoreDrillPlan> planList = lambdaQuery()
+                            .eq(CoreDrillPlan::getParentId, planId)
+                            .select(CoreDrillPlan::getId).list();
+                    if (planList.isEmpty()) {
+                        planList = buildPlanData(plan, new ArrayList<>(), true, status);
+                    } else {
+                        planList.forEach(plan1 -> plan1.setPlanStatus(EduTrainingPlanStatus.USING.getCode()));
+                        List<Long> collect = planList.stream().map(CoreDrillPlan::getId).collect(Collectors.toList());
+                        coreDrillPlanMapper.updatePlanStatusByIdList(collect, EduTrainingPlanStatus.USING.getCode());
+                    }
+                    return planList;
+                }, threadPoolTaskExecutor);
+
+                planListFuture.thenAcceptAsync((result) -> {
+                    for (CoreDrillPlan drillPlan : result) {
                         if (checkCanBuildTaskNow(plan)) {
                             final CoreDrillPlanDataVo detailPlanData = getCoreDrillPlanDataVo(drillPlan.getId());
                             coreDrillTaskService.createTaskForNow(detailPlanData, plan.getPlanStartDate(), plan.getPlanEndDate());
                         }
-                    }, threadPoolTaskExecutor);
-                }
+                    }
+                }, threadPoolTaskExecutor);
             }
         });
 

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

@@ -707,16 +707,6 @@ public class CoreEduTrainingPlanServiceImpl extends ServiceImpl<CoreEduTrainingP
         final CoreEduTrainingPlan plan = coreEduTrainingPlanMapper.selectById(planId);
         AssertUtil.isNotEmpty(plan, "计划不存在!");
         AssertUtil.equal(plan.getIssue(), 0, "计划已完成下发!");
-        List<CoreEduTrainingPlan> planList = lambdaQuery()
-                .eq(CoreEduTrainingPlan::getParentId, planId)
-                .select(CoreEduTrainingPlan::getId).list();
-        if (planList.isEmpty()) {
-            planList = buildPlanData(plan, new ArrayList<>(), true, status);
-        } else {
-            planList.forEach(plan1 -> plan1.setPlanStatus(EduTrainingPlanStatus.USING.getCode()));
-            List<Long> collect = planList.stream().map(CoreEduTrainingPlan::getId).collect(Collectors.toList());
-            coreEduTrainingPlanMapper.updatePlanStatusByIdList(collect, EduTrainingPlanStatus.USING.getCode());
-        }
         //下发后修改为使用中
         plan.setPlanStatus(EduTrainingPlanStatus.USING.getCode());
         plan.setIssue(1);
@@ -729,19 +719,32 @@ public class CoreEduTrainingPlanServiceImpl extends ServiceImpl<CoreEduTrainingP
             plan.setBuildTaskNow(0);
         }
         //事务提交后执行
-        List<CoreEduTrainingPlan> finalPlanList = planList;
         TransactionSynchronizationManager.registerSynchronization(new TransactionSynchronizationAdapter() {
             @Override
             public void afterCommit() {
-                for (CoreEduTrainingPlan trainingPlan : finalPlanList) {
-                    CompletableFuture.runAsync(() -> {
-                        //如果不是省联社或者办事处,状态启用,并且是无周期或者立即生效
+                final CompletableFuture<List<CoreEduTrainingPlan>> planListFuture = CompletableFuture.supplyAsync(() -> {
+                    List<CoreEduTrainingPlan> planList = lambdaQuery()
+                            .eq(CoreEduTrainingPlan::getParentId, planId)
+                            .select(CoreEduTrainingPlan::getId).list();
+                    if (planList.isEmpty()) {
+                        planList = buildPlanData(plan, new ArrayList<>(), true, status);
+                    } else {
+                        planList.forEach(plan1 -> plan1.setPlanStatus(EduTrainingPlanStatus.USING.getCode()));
+                        List<Long> collect = planList.stream().map(CoreEduTrainingPlan::getId).collect(Collectors.toList());
+                        coreEduTrainingPlanMapper.updatePlanStatusByIdList(collect, EduTrainingPlanStatus.USING.getCode());
+                    }
+                    return planList;
+                }, threadPoolTaskExecutor);
+
+                planListFuture.thenAcceptAsync((result) -> {
+                    for (CoreEduTrainingPlan plan : result) {
                         if (checkCanBuildTaskNow(plan)) {
-                            CoreEduTrainingPlanDataVo detailPlanData = getCoreEduTrainingPlanDataVo(trainingPlan.getId());
+                            CoreEduTrainingPlanDataVo detailPlanData = getCoreEduTrainingPlanDataVo(plan.getId());
                             coreEduTrainingTaskService.createTaskForNow(detailPlanData, plan.getStartDate(), plan.getEndDate());
                         }
-                    }, threadPoolTaskExecutor);
-                }
+                    }
+                }, threadPoolTaskExecutor);
+
             }
         });