Просмотр исходного кода

教育/演练计划下发撤回需求变更修改

jingyuanchao 2 лет назад
Родитель
Сommit
3be6057108

+ 1 - 1
soc-common/soc-common-core/src/main/java/com/xunmei/common/core/enums/edu/EduTrainingPlanStatus.java

@@ -11,7 +11,7 @@ public enum EduTrainingPlanStatus {
     USING(1, "使用中"),
     DELETED(2, "停用"),
     ;
-    private int code;
+    private Integer code;
 
     private String desc;
 }

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

@@ -564,7 +564,9 @@ public class CoreDrillPlanServiceImpl extends ServiceImpl<CoreDrillPlanMapper, C
         if (ObjectUtil.equal(plan.getIssue(), 1)) {
             throw new SystemException("计划已完成发布!");
         }
-        List<CoreDrillPlan> planList = lambdaQuery().eq(CoreDrillPlan::getParentId, planId).select(CoreDrillPlan::getId).list();
+        List<CoreDrillPlan> planList = lambdaQuery()
+                .eq(CoreDrillPlan::getParentId, planId)
+                .select(CoreDrillPlan::getId).list();
         if (planList.isEmpty()) {
             planList = buildPlanData(plan, new ArrayList<>(), true);
         } else {
@@ -572,19 +574,26 @@ public class CoreDrillPlanServiceImpl extends ServiceImpl<CoreDrillPlanMapper, C
             List<Long> collect = planList.stream().map(CoreDrillPlan::getId).collect(Collectors.toList());
             coreDrillPlanMapper.updatePlanStatusByIdList(collect, EduTrainingPlanStatus.USING.getCode());
         }
+        //非无周期的撤回后重新下发下个周期生效,无周期的立即生效
+        int buildTaskNow = 0;
+        if (plan.getPlanCycle().equals(EduTrainingPlanCycleEnum.NONE.getCode()) ||
+                EduTrainingPlanStatus.DRAFT.getCode().equals(plan.getPlanStatus())) {
+            buildTaskNow = 1;
+        }
         //下发后修改为使用中
         plan.setPlanStatus(DrillPlanStatus.USING.getCode());
         plan.setIssue(1);
         this.updateById(plan);
         //事务提交后执行
         List<CoreDrillPlan> finalPlanList = planList;
+        int finalBuildTaskNow = buildTaskNow;
         TransactionSynchronizationManager.registerSynchronization(new TransactionSynchronizationAdapter() {
             @Override
             public void afterCommit() {
                 for (CoreDrillPlan drillPlan : finalPlanList) {
                     CompletableFuture.runAsync(() -> {
                         //如果不是省联社或者办事处,状态启用,并且是无周期或者立即生效
-                        if ((ObjectUtil.equal(DrillPlanStatus.USING.getCode(), plan.getPlanStatus()) && (ObjectUtil.equal(DrillPlanCycleEnum.NONE.getCode(), plan.getPlanCycle()) || ObjectUtil.equal(1, plan.getBuildTaskNow())))) {
+                        if ((ObjectUtil.equal(DrillPlanStatus.USING.getCode(), plan.getPlanStatus()) && (ObjectUtil.equal(DrillPlanCycleEnum.NONE.getCode(), plan.getPlanCycle()) || ObjectUtil.equal(1, finalBuildTaskNow)))) {
                             final CoreDrillPlanDataVo detailPlanData = getCoreDrillPlanDataVo(drillPlan.getId());
                             coreDrillTaskService.createTaskForNow(detailPlanData, plan.getPlanStartDate(), plan.getPlanEndDate());
                         }
@@ -601,10 +610,15 @@ public class CoreDrillPlanServiceImpl extends ServiceImpl<CoreDrillPlanMapper, C
         CoreDrillPlan plan = getById(planId);
         plan.setIssue(0);
         plan.setPlanStatus(EduTrainingPlanStatus.DELETED.getCode());
-        DateRange range = DateUtils.getStartAndEnd(new Date(), plan.getPlanCycle());
         List<Long> list = coreDrillPlanMapper.selectIdByParentId(planId);
+
+        //无周期计划撤回,不管任务状态,删除所有任务,撤回后计划停用
+        //有周期计划撤回,如果没有任务已执行,删除所有任务,撤回后计划停用
+        Integer isExecute = coreDrillTaskMapper.checkHasTaskIsDone(list);
+        if (ObjectUtil.equal(isExecute, null) || EduTrainingPlanCycleEnum.NONE.getCode().equals(plan.getPlanCycle())) {
+            coreDrillTaskService.delByStartTimeAndEndTimeAndPlanIdList(list, null, null);
+        }
         coreDrillPlanMapper.updatePlanStatusByIdOrParentId(planId, EduTrainingPlanStatus.DELETED.getCode());
-        coreDrillTaskService.delByStartTimeAndEndTimeAndPlanIdList(list, range.getStartTime(), range.getEndTime());
         return coreDrillPlanMapper.updateById(plan);
     }
 

+ 1 - 1
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/edu/mapper/CoreEduTrainingPlanMapper.java

@@ -81,7 +81,7 @@ public interface CoreEduTrainingPlanMapper extends BaseMapper<CoreEduTrainingPla
 
     int updatePlanStatus(@Param("planId") Long planId, @Param("status") int status);
 
-    void updatePlanStatusByIdOrParentId(@Param("planId") Long planId, @Param("status") int status);
+    int updatePlanStatusByIdOrParentId(@Param("planId") Long planId, @Param("status") int status);
 
     void updatePlanStatusByIdList(@Param("list") List<Long> list, @Param("status") int status);
 

+ 2 - 0
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/edu/mapper/CoreEduTrainingTaskMapper.java

@@ -48,4 +48,6 @@ public interface CoreEduTrainingTaskMapper extends BaseMapper<CoreEduTrainingTas
     void updateTaskNameByParentPlanId(@Param("planId") Long planId, @Param("planName") String planName, @Param("startTime") Date startTime, @Param("endTime") Date endTime);
 
     List<CoreEduTrainingTaskExportVo> selectCoreEduTrainingTaskPage(@Param("request") CoreEduTrainingTaskPageDto request);
+
+    Integer checkHasTaskByStatusAndPlanId(@Param("planIdList") List<Long> planIdList, @Param("taskStatusList") List<Integer> taskStatusList);
 }

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

@@ -611,7 +611,9 @@ 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();
+        List<CoreEduTrainingPlan> planList = lambdaQuery()
+                .eq(CoreEduTrainingPlan::getParentId, planId)
+                .select(CoreEduTrainingPlan::getId).list();
         if (planList.isEmpty()) {
             planList = buildPlanData(plan, new ArrayList<>(), true);
         } else {
@@ -619,12 +621,19 @@ public class CoreEduTrainingPlanServiceImpl extends ServiceImpl<CoreEduTrainingP
             List<Long> collect = planList.stream().map(CoreEduTrainingPlan::getId).collect(Collectors.toList());
             coreEduTrainingPlanMapper.updatePlanStatusByIdList(collect, EduTrainingPlanStatus.USING.getCode());
         }
+        //非无周期的撤回后重新下发下个周期生效,无周期的立即生效
+        int buildTaskNow = 0;
+        if (plan.getPlanCycle().equals(EduTrainingPlanCycleEnum.NONE.getCode()) ||
+                EduTrainingPlanStatus.DRAFT.getCode().equals(plan.getPlanStatus())) {
+            buildTaskNow = 1;
+        }
         //下发后修改为使用中
         plan.setPlanStatus(EduTrainingPlanStatus.USING.getCode());
         plan.setIssue(1);
         this.updateById(plan);
         //事务提交后执行
         List<CoreEduTrainingPlan> finalPlanList = planList;
+        Integer finalBuildTaskNow = buildTaskNow;
         TransactionSynchronizationManager.registerSynchronization(new TransactionSynchronizationAdapter() {
             @Override
             public void afterCommit() {
@@ -632,7 +641,7 @@ public class CoreEduTrainingPlanServiceImpl extends ServiceImpl<CoreEduTrainingP
                     CompletableFuture.runAsync(() -> {
                         //如果不是省联社或者办事处,状态启用,并且是无周期或者立即生效
                         if ((ObjectUtil.equal(EduTrainingPlanStatus.USING.getCode(), plan.getPlanStatus())
-                                && (ObjectUtil.equal(EduTrainingPlanCycleEnum.NONE.getCode(), plan.getPlanCycle()) || ObjectUtil.equal(1, plan.getBuildTaskNow())))) {
+                                && (ObjectUtil.equal(EduTrainingPlanCycleEnum.NONE.getCode(), plan.getPlanCycle()) || ObjectUtil.equal(1, finalBuildTaskNow)))) {
                             CoreEduTrainingPlanDataVo detailPlanData = getCoreEduTrainingPlanDataVo(trainingPlan.getId());
                             coreEduTrainingTaskService.createTaskForNow(detailPlanData, plan.getStartDate(), plan.getEndDate());
                         }
@@ -723,10 +732,16 @@ public class CoreEduTrainingPlanServiceImpl extends ServiceImpl<CoreEduTrainingP
         CoreEduTrainingPlan plan = getById(planId);
         plan.setIssue(0);
         plan.setPlanStatus(EduTrainingPlanStatus.DELETED.getCode());
-        DateRange range = DateUtils.getStartAndEnd(new Date(), plan.getPlanCycle());
         List<Long> list = coreEduTrainingPlanMapper.selectIdByParentId(planId);
+
+        //无周期计划撤回,不管任务状态,删除所有任务,撤回后计划停用
+        //有周期计划撤回,如果没有任务已执行,删除所有任务,撤回后计划停用
+        Integer isExecute = coreEduTrainingTaskMapper.checkHasTaskIsDone(list);
+        if (ObjectUtil.equal(isExecute, null) || EduTrainingPlanCycleEnum.NONE.getCode().equals(plan.getPlanCycle())) {
+            coreEduTrainingTaskService.delByStartTimeAndEndTimeAndPlanIdList(list, null, null);
+        }
+
         coreEduTrainingPlanMapper.updatePlanStatusByIdOrParentId(planId, EduTrainingPlanStatus.DELETED.getCode());
-        coreEduTrainingTaskService.delByStartTimeAndEndTimeAndPlanIdList(list, range.getStartTime(), range.getEndTime());
         return coreEduTrainingPlanMapper.updateById(plan);
     }
 

+ 14 - 0
soc-modules/soc-modules-core/src/main/resources/mapper/edu/CoreEduTrainingTaskMapper.xml

@@ -259,4 +259,18 @@
         </where>
         order by t.status, t.update_time desc, t.id
     </select>
+
+    <select id="checkHasTaskByStatusAndPlanId" resultType="java.lang.Integer">
+        select 1
+        from core_edu_training_task
+        where status in
+        <foreach collection="taskStatusList" item="item" index="index" open="(" close=")" separator=",">
+            #{item}
+        </foreach>
+        and plan_id in
+        <foreach collection="planIdList" item="item" index="index" open="(" close=")" separator=",">
+            #{item}
+        </foreach>
+        limit 1
+    </select>
 </mapper>