Browse Source

培训演练bug修改

jingyuanchao 1 year ago
parent
commit
fecde66885

+ 2 - 0
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/drill/mapper/CoreDrillPlanMapper.java

@@ -93,4 +93,6 @@ public interface CoreDrillPlanMapper extends BaseMapper<CoreDrillPlan> {
 
     List<CoreDrillPlan> selectByParentId(@Param("planId") Long planId);
 
+    CoreDrillPlan selectByParentIdAndOrgId(@Param("parentId") Long parentId, @Param("orgId") Long orgId);
+
 }

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

@@ -30,6 +30,7 @@ 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.reminder.domain.CoreReminderSchedule;
 import com.xunmei.common.core.domain.reminder.vo.CoreReminderConfigurationFullVo;
 import com.xunmei.common.core.enums.BusinessPlanType;
@@ -40,6 +41,7 @@ import com.xunmei.common.core.enums.drill.DrillPlanCycleEnum;
 import com.xunmei.common.core.enums.drill.DrillPlanStatus;
 import com.xunmei.common.core.enums.edu.EduTrainingDoStatus;
 import com.xunmei.common.core.enums.edu.EduTrainingPlanCycleEnum;
+import com.xunmei.common.core.enums.edu.EduTrainingPlanStatus;
 import com.xunmei.common.core.exception.ServiceException;
 import com.xunmei.common.core.thread.ThreadPoolConfig;
 import com.xunmei.common.core.util.BeanHelper;
@@ -165,7 +167,7 @@ public class CoreDrillPlanServiceImpl extends ServiceImpl<CoreDrillPlanMapper, C
             final Integer hasTask = coreDrillTaskMapper.checkHasTaskByPlanParentId(record.getId());
             record.setHaTask(hasTask);
         }
-        if (Objects.equals(record.getPlanCycle(), DrillPlanCycleEnum.NONE.getCode())){
+        if (Objects.equals(record.getPlanCycle(), DrillPlanCycleEnum.NONE.getCode())) {
             final Integer done = coreDrillTaskMapper.checkHasTaskIsDoneByPlanIdOrParentId(record.getId());
             record.setDone(done);
         }
@@ -198,7 +200,7 @@ public class CoreDrillPlanServiceImpl extends ServiceImpl<CoreDrillPlanMapper, C
             final Integer done = coreDrillTaskMapper.checkHasTaskIsDoneByPlanParentId(plan.getId());
             vo.setDone(done);
         }
-        if (Objects.equals(plan.getPlanCycle(), DrillPlanCycleEnum.NONE.getCode())){
+        if (Objects.equals(plan.getPlanCycle(), DrillPlanCycleEnum.NONE.getCode())) {
             final Integer done = coreDrillTaskMapper.checkHasTaskIsDoneByPlanIdOrParentId(plan.getId());
             vo.setDone(done);
         }
@@ -326,13 +328,9 @@ public class CoreDrillPlanServiceImpl extends ServiceImpl<CoreDrillPlanMapper, C
     @Transactional(rollbackFor = Exception.class)
     public void updateCoreDrillPlan(CoreDrillPlanUpdateDto request) {
         final CoreDrillPlan plan = getById(request.getId());
-       /* DateRange range;
-        if (ObjectUtil.equal(plan.getPlanCycle(), EduTrainingPlanCycleEnum.NONE.getCode())) {
-            range = new DateRange(DateUtil.beginOfDay(plan.getStartDate()), DateUtil.endOfDay(plan.getEndDate()));
-        } else {
-            range = DateUtils.getStartAndEnd(new Date(), plan.getPlanCycle());
-        }*/
-
+        if (plan == null) {
+            throw new RuntimeException("计划不存在!");
+        }
         plan.setUpdateTime(DateUtils.getNowDate());
         //现在能被编辑的计划一定是标准计划
         //updateStandardPlan(plan, request, range);
@@ -396,7 +394,7 @@ public class CoreDrillPlanServiceImpl extends ServiceImpl<CoreDrillPlanMapper, C
         }
         validateFieldForStandard(request.getPlanCycle(), plan.getPlanCycle(), "当前状态仅允许修改任务名称与机构信息");
         validateFieldForStandard(request.getExecTimes(), plan.getExecTimes(), "当前状态仅允许修改任务名称与机构信息");
-        if (ObjectUtil.equal(request.getPlanStatus(), DrillPlanStatus.USING.getCode())){
+        if (ObjectUtil.equal(request.getPlanStatus(), DrillPlanStatus.USING.getCode())) {
             validateFieldForStandard(request.getExecOrgType(), plan.getExecOrgType(), "当前状态仅允许修改任务名称与机构信息");
         }
        /* List<Long> execOrgIdList = coreDrillPlanToExecOrgMapper.selectOrgIdByPlanId(plan.getId());
@@ -404,13 +402,8 @@ public class CoreDrillPlanServiceImpl extends ServiceImpl<CoreDrillPlanMapper, C
         validateFieldForStandard(request.getRemark(), plan.getRemark(), "当前状态仅允许修改任务名称与机构信息");
         validateFileListForStandard(request.getFileList(), JSON.parseArray(plan.getFileList(), String.class), "当前状态仅允许修改任务名称与机构信息");
         plan.setPlanName(request.getPlanName());
-        if (ObjectUtil.equal(request.getPlanStatus(), DrillPlanStatus.DELETED.getCode())){
+        if (ObjectUtil.equal(request.getPlanStatus(), DrillPlanStatus.DELETED.getCode())) {
             plan.setExecOrgType(request.getExecOrgType());
-            List<Long> list = baseMapper.selectIdByParentId(plan.getId());
-            if (ObjectUtil.isNotEmpty(list)){
-                physicalDeleteMapper.deletedDrillPlanByIds(list);
-                coreDrillPlanToExecOrgService.deleteByPlanIds(list);
-            }
             coreDrillPlanToExecOrgMapper.deleteByMap(MapUtil.of("plan_id", plan.getId()));
             batchSavePlanToExecOrg(request.getPlanExecOrgIdList(), plan.getId());
         }
@@ -455,6 +448,7 @@ public class CoreDrillPlanServiceImpl extends ServiceImpl<CoreDrillPlanMapper, C
         target.setRemark(source.getRemark());
         target.setFileList(source.getFileList());
     }
+
     private void validateFieldForStandard(Object requestValue, Object planValue, String errorMessage) {
         if (ObjectUtils.allNull(requestValue, planValue)) {
             return;
@@ -488,7 +482,9 @@ public class CoreDrillPlanServiceImpl extends ServiceImpl<CoreDrillPlanMapper, C
 
 
     public void batchSavePlanToExecOrg(List<Long> orgIdList, Long planId) {
-
+        if (ObjectUtil.isEmpty(orgIdList) || planId == null) {
+            return;
+        }
         List<CoreDrillPlanToExecOrg> planOrgList = new ArrayList<CoreDrillPlanToExecOrg>();
         for (Long orgId : orgIdList) {
             CoreDrillPlanToExecOrg org = new CoreDrillPlanToExecOrg();
@@ -496,9 +492,7 @@ public class CoreDrillPlanServiceImpl extends ServiceImpl<CoreDrillPlanMapper, C
             org.setPlanId(planId);
             planOrgList.add(org);
         }
-        if (ObjectUtil.isNotEmpty(planOrgList)) {
-            coreDrillPlanToExecOrgService.saveBatch(planOrgList);
-        }
+        coreDrillPlanToExecOrgService.saveBatch(planOrgList);
 
     }
 
@@ -586,7 +580,7 @@ public class CoreDrillPlanServiceImpl extends ServiceImpl<CoreDrillPlanMapper, C
 
 
         final CompletableFuture<List<CoreDrillPlan>> planListFuture = CompletableFuture.supplyAsync(() -> {
-            List<CoreDrillPlan> planList = baseMapper.selectByParentId(planId);
+            /*List<CoreDrillPlan> planList = baseMapper.selectByParentId(planId);
             if (planList.isEmpty()) {
                 planList = buildPlanData(plan, new ArrayList<>(), true, status);
             } else {
@@ -596,11 +590,18 @@ public class CoreDrillPlanServiceImpl extends ServiceImpl<CoreDrillPlanMapper, C
                     drillPlan.setPublishTime(new Date());
                     updateById(drillPlan);
                 }
-               /* 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());*/
+            }*/
+            //下发时根据父计划重新生成所有需要生成的子计划,判断如果有子计划已经存在于数据库中,就无需再次生成,
+            // 同时有已经存在于数据库的子计划但此次下发不在下发的列表的中的,需要逻辑删除
+            final List<CoreDrillPlan> neewPlanList = buildPlanData(plan, status);
+            final List<CoreDrillPlan> oldPlanList = baseMapper.selectByParentId(plan.getId());
+            for (CoreDrillPlan oldPlan : oldPlanList) {
+                final List<Long> neewPlanIdList = neewPlanList.stream().map(CoreDrillPlan::getBelongOrgId).distinct().collect(toList());
+                if (!neewPlanIdList.contains(oldPlan.getBelongOrgId())) {
+                    baseMapper.deleteById(oldPlan.getId());
+                }
             }
-            return planList;
+            return neewPlanList;
         }, threadPoolTaskExecutor);
 
         planListFuture.thenAcceptAsync((result) -> {
@@ -651,10 +652,7 @@ public class CoreDrillPlanServiceImpl extends ServiceImpl<CoreDrillPlanMapper, C
     public int revocationPlan(Long planId) {
         checkPlanIsCreatingTask(planId, "撤回");
         List<Long> list = coreDrillPlanMapper.selectIdByParentId(planId);
-        int isExecute = coreDrillTaskMapper.selectCount(new LambdaQueryWrapper<CoreDrillTask>()
-                        .in(CoreDrillTask::getPlanId, list)
-                        .in(CoreDrillTask::getStatus, DrillDoStatus.DONE.getCode(),DrillDoStatus.WAIT_COMMENT.getCode()))
-                .intValue();
+        int isExecute = coreDrillTaskMapper.checkHasTaskIsDoneByPlanParentId(planId);
         //计划下没有已完成:删除所有任务数据和子计划,计划状态回到草稿状态。
         if (isExecute < 1/* || EduTrainingPlanCycleEnum.NONE.getCode().equals(plan.getPlanCycle())*/) {
             // 删除所有任务数据
@@ -721,13 +719,7 @@ public class CoreDrillPlanServiceImpl extends ServiceImpl<CoreDrillPlanMapper, C
         );
     }
 
-    private List<CoreDrillPlan> buildPlanData(CoreDrillPlan plan, List<CoreDrillPlanToRole> planRoleList, boolean isPublish, int status) {
-        /*if (ObjectUtil.isEmpty(planRoleList)) {
-            //获取执行角色
-            LambdaQueryWrapper<CoreDrillPlanToRole> ros = new LambdaQueryWrapper<>();
-            ros.eq(CoreDrillPlanToRole::getPlanId, plan.getId());
-            planRoleList = coreDrillPlanToRoleMapper.selectList(ros);
-        }*/
+    private List<CoreDrillPlan> buildPlanData(CoreDrillPlan plan, int status) {
         List<SysOrgVO> all = RedisUtils.getCacheList(CacheConstants.ORG_CACHE_LIST_KEY);
         all = all.stream().filter(o -> ObjectUtil.isNotEmpty(o.getPath())).collect(toList());
         final SysOrgVO planCreateOrg = all.stream().filter(org -> org.getId().equals(plan.getCreateOrgId())).findFirst().get();
@@ -750,7 +742,10 @@ public class CoreDrillPlanServiceImpl extends ServiceImpl<CoreDrillPlanMapper, C
         List<SysOrgVO> publishOrgList = this.getPlanPublishOrgList(planExecOrgList);
         List<CoreDrillPlanToExecOrg> planToExecOrgs = new ArrayList<>();
         List<CoreDrillPlan> list = new ArrayList<>();
+        //子计划id,查询出所有已生成的子计划,先删除再重新构建
         for (SysOrgVO sysOrg : publishOrgList) {
+            //如果需要生成的子计划已经存在,说明可能是经过编辑的,所以把状态修改回来就行
+            if (checkExitAndFlushExecOrg(plan, planExecOrgList, list, sysOrg)) continue;
             if (checkOrgType(plan.getExecOrgType())) {
                 //走到这说明,执行机构中都是省联社/办事处 这些不需要子机话,所以直接返回,
                 //但是如果后期扩展多选执行机构类型,此处将不再适用
@@ -768,7 +763,7 @@ public class CoreDrillPlanServiceImpl extends ServiceImpl<CoreDrillPlanMapper, C
             drillPlan.setStandard(0);
             drillPlan.setIssue(0);
             drillPlan.setBeIssue(1);
-            drillPlan.setPlanStatus(isPublish ? DrillPlanStatus.USING.getCode() : plan.getPlanStatus());
+            drillPlan.setPlanStatus(DrillPlanStatus.USING.getCode());
             drillPlan.setParentId(plan.getId());
             drillPlan.setCreateTime(new Date());
             drillPlan.setUpdateTime(new Date());
@@ -807,6 +802,34 @@ public class CoreDrillPlanServiceImpl extends ServiceImpl<CoreDrillPlanMapper, C
         return list;
     }
 
+
+    private boolean checkExitAndFlushExecOrg(CoreDrillPlan plan, List<SysOrgVO> planToExecOrgs, List<CoreDrillPlan> list, SysOrgVO sysOrg) {
+        CoreDrillPlan oldPlan = getByOrgIdAndParentId(plan.getId(), sysOrg.getId());
+        if (oldPlan != null) {
+            oldPlan.setDeleted(0);
+            coreDrillPlanToExecOrgMapper.deleteByMap(MapUtil.of("plan_id", oldPlan.getId()));
+            if (planToExecOrgs.size() > 0) {
+                final List<Long> collect = planToExecOrgs.stream().map(SysOrgVO::getId).distinct().collect(toList());
+                batchSavePlanToExecOrg(collect, oldPlan.getId());
+            }
+            oldPlan.setPlanName(plan.getPlanName());
+            oldPlan.setPlanStatus(DrillPlanStatus.USING.getCode());
+            oldPlan.setBuildTaskNow(plan.getBuildTaskNow());
+            oldPlan.setPublishTime(new Date());
+            oldPlan.setUpdateTime(new Date());
+            updatePlanTime(oldPlan, plan.getBuildTaskNow());
+            baseMapper.updateCoreDrillPlan(oldPlan);
+            list.add(oldPlan);
+            return true;
+        }
+        return false;
+    }
+
+    private CoreDrillPlan getByOrgIdAndParentId(Long parentId, Long orgId) {
+
+        return baseMapper.selectByParentIdAndOrgId(parentId, orgId);
+    }
+
     private List<SysOrgVO> getPlanExecOrg(CoreDrillPlan plan, List<SysOrgVO> all) {
         QueryWrapper<CoreDrillPlanToExecOrg> eos = new QueryWrapper<>();
         eos.lambda().eq(CoreDrillPlanToExecOrg::getPlanId, plan.getId());

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

@@ -93,4 +93,6 @@ public interface CoreEduTrainingPlanMapper extends BaseMapper<CoreEduTrainingPla
     List<CoreEduTrainingPlan> selectNeedBuildTaskPlanList(@Param("cycle") Integer cycle, @Param("cycleList") List<Integer> cycleList);
 
     List<CoreEduTrainingPlan> selectByParentId(@Param("planId") Long planId);
+
+    CoreEduTrainingPlan selectByParentIdAndOrgId(@Param("parentId") Long parentId, @Param("orgId") Long orgId);
 }

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

@@ -169,7 +169,7 @@ public class CoreEduTrainingPlanServiceImpl extends ServiceImpl<CoreEduTrainingP
             final Integer hasTask = coreEduTrainingTaskMapper.checkHasTaskByPlanParentId(record.getId());
             record.setHasTask(hasTask);
         }
-        if (ObjectUtil.equal(record.getPlanCycle(),EduTrainingPlanCycleEnum.NONE.getCode())){
+        if (ObjectUtil.equal(record.getPlanCycle(), EduTrainingPlanCycleEnum.NONE.getCode())) {
             record.setDone(coreEduTrainingTaskMapper.checkHasTaskIsDoneByPlanIdOrParentId(record.getId()));
         }
     }
@@ -199,7 +199,7 @@ public class CoreEduTrainingPlanServiceImpl extends ServiceImpl<CoreEduTrainingP
             final Integer done = coreEduTrainingTaskMapper.checkHasTaskIsDoneByPlanParentId(plan.getId());
             vo.setDone(done);
         }
-        if (ObjectUtil.equal(plan.getPlanCycle(),EduTrainingPlanCycleEnum.NONE.getCode())){
+        if (ObjectUtil.equal(plan.getPlanCycle(), EduTrainingPlanCycleEnum.NONE.getCode())) {
             vo.setDone(coreEduTrainingTaskMapper.checkHasTaskIsDoneByPlanIdOrParentId(plan.getId()));
         }
         return vo;
@@ -293,6 +293,9 @@ public class CoreEduTrainingPlanServiceImpl extends ServiceImpl<CoreEduTrainingP
     @Transactional(rollbackFor = Exception.class)
     public int updateCoreEduTrainingPlan(CoreEduTrainingPlanEditDto request) {
         final CoreEduTrainingPlan plan = getById(request.getId());
+        if (plan==null){
+            throw new RuntimeException("计划不存在!");
+        }
         plan.setUpdateTime(DateUtils.getNowDate());
         //现在能被编辑的计划一定是标准计划
         if (plan.getPlanStatus() == EduTrainingPlanStatus.DRAFT.getCode()) {
@@ -358,7 +361,7 @@ public class CoreEduTrainingPlanServiceImpl extends ServiceImpl<CoreEduTrainingP
         }
         validateFieldForStandard(request.getPlanCycle(), plan.getPlanCycle(), "当前状态仅允许修改任务名称与机构信息");
         validateFieldForStandard(request.getExecTimes(), plan.getExecTimes(), "当前状态仅允许修改任务名称与机构信息");
-        if (ObjectUtil.equal(plan.getPlanStatus(), DrillPlanStatus.USING.getCode())){
+        if (ObjectUtil.equal(plan.getPlanStatus(), DrillPlanStatus.USING.getCode())) {
             validateFieldForStandard(request.getExecOrgType(), plan.getExecOrgType(), "当前状态仅允许修改任务名称与机构信息");
         }
         /*List<Long> execOrgIdList = coreEduTrainingPlanToExecOrgMapper.selectOrgIdByPlanId(plan.getId());
@@ -369,11 +372,6 @@ public class CoreEduTrainingPlanServiceImpl extends ServiceImpl<CoreEduTrainingP
         plan.setExecOrgType(request.getExecOrgType());
         if (plan.getPlanStatus() == EduTrainingPlanStatus.DELETED.getCode()) {
             plan.setExecOrgType(request.getExecOrgType());
-            List<Long> idList = baseMapper.selectIdByParentId(plan.getId());
-            if (ObjectUtil.isNotEmpty(idList)) {
-                physicalDeleteMapper.deletedEduPlanByIds(idList);
-                coreEduTrainingPlanToExecOrgService.deleteByPlanIds(idList);
-            }
             coreEduTrainingPlanToExecOrgMapper.deleteByMap(MapUtil.of("plan_id", plan.getId()));
             batchSavePlanToExecOrg(request.getPlanExecOrgIdList(), plan.getId());
         }
@@ -458,6 +456,9 @@ public class CoreEduTrainingPlanServiceImpl extends ServiceImpl<CoreEduTrainingP
     }
 
     public void batchSavePlanToExecOrg(List<Long> orgIdList, Long planId) {
+        if (ObjectUtil.isEmpty(orgIdList) || planId == null) {
+            return;
+        }
         List<CoreEduTrainingPlanToExecOrg> planOrgList = new ArrayList<CoreEduTrainingPlanToExecOrg>();
         for (Long orgId : orgIdList) {
             CoreEduTrainingPlanToExecOrg org = new CoreEduTrainingPlanToExecOrg();
@@ -465,9 +466,7 @@ public class CoreEduTrainingPlanServiceImpl extends ServiceImpl<CoreEduTrainingP
             org.setPlanId(planId);
             planOrgList.add(org);
         }
-        if (ObjectUtil.isNotEmpty(planOrgList)) {
-            coreEduTrainingPlanToExecOrgService.saveBatch(planOrgList);
-        }
+        coreEduTrainingPlanToExecOrgService.saveBatch(planOrgList);
 
     }
 
@@ -583,10 +582,9 @@ public class CoreEduTrainingPlanServiceImpl extends ServiceImpl<CoreEduTrainingP
         this.updateById(plan);
 
         final CompletableFuture<List<CoreEduTrainingPlan>> planListFuture = CompletableFuture.supplyAsync(() -> {
-
-            List<CoreEduTrainingPlan> planList = baseMapper.selectByParentId(planId);
+            /*List<CoreEduTrainingPlan> planList = baseMapper.selectByParentId(planId);
             if (planList.isEmpty()) {
-                planList = buildPlanData(plan, true, status);
+                planList = buildPlanData(plan, status);
             } else {
                 for (CoreEduTrainingPlan trainingPlan : planList) {
                     trainingPlan.setPlanStatus(EduTrainingPlanStatus.USING.getCode());
@@ -594,11 +592,20 @@ public class CoreEduTrainingPlanServiceImpl extends ServiceImpl<CoreEduTrainingP
                     trainingPlan.setPublishTime(new Date());
                     updateById(trainingPlan);
                 }
-               /* 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());*/
+            }*/
+            //下发时根据父计划重新生成所有需要生成的子计划,判断如果有子计划已经存在于数据库中,就无需再次生成,
+            // 同时有已经存在于数据库的子计划但此次下发不在下发的列表的中的,需要逻辑删除
+            final List<CoreEduTrainingPlan> neewPlanList = buildPlanData(plan, status);
+            log.info("构建数据123:{}", neewPlanList.stream().map(CoreEduTrainingPlan::getBelongOrgName).collect(Collectors.joining(",")));
+            final List<CoreEduTrainingPlan> oldPlanList = baseMapper.selectByParentId(plan.getId());
+            for (CoreEduTrainingPlan oldPlan : oldPlanList) {
+                final List<Long> neewPlanIdList = neewPlanList.stream().map(CoreEduTrainingPlan::getBelongOrgId).distinct().collect(toList());
+                if (!neewPlanIdList.contains(oldPlan.getBelongOrgId())) {
+                    baseMapper.deleteById(oldPlan.getId());
+                    log.info("删除数据123:{}", oldPlan.getBelongOrgName());
+                }
             }
-            return planList;
+            return neewPlanList;
         }, threadPoolTaskExecutor);
 
         planListFuture.thenAcceptAsync((result) -> {
@@ -649,13 +656,7 @@ public class CoreEduTrainingPlanServiceImpl extends ServiceImpl<CoreEduTrainingP
         return collect;
     }
 
-    private List<CoreEduTrainingPlan> buildPlanData(CoreEduTrainingPlan plan, Boolean isPublish, int status) {
-        /*if (ObjectUtil.isEmpty(planRoleList)) {
-            //获取执行角色
-            LambdaQueryWrapper<CoreEduTrainingPlanToRole> ros = new LambdaQueryWrapper<>();
-            ros.eq(CoreEduTrainingPlanToRole::getPlanId, plan.getId());
-            planRoleList = coreEduTrainingPlanToRoleMapper.selectList(ros);
-        }*/
+    private List<CoreEduTrainingPlan> buildPlanData(CoreEduTrainingPlan plan, int status) {
         List<SysOrgVO> all = RedisUtils.getCacheList(CacheConstants.ORG_CACHE_LIST_KEY);
         all = all.stream().filter(o -> ObjectUtil.isNotEmpty(o.getPath())).collect(Collectors.toList());
         final SysOrgVO planCreateOrg = all.stream().filter(org -> org.getId().equals(plan.getCreateOrgId())).findFirst().get();
@@ -677,7 +678,10 @@ public class CoreEduTrainingPlanServiceImpl extends ServiceImpl<CoreEduTrainingP
         List<SysOrgVO> planPublishOrgList = getPlanPublishOrgList(planExecOrgList);
         List<CoreEduTrainingPlanToExecOrg> planToExecOrgs = new ArrayList<>();
         List<CoreEduTrainingPlan> list = new ArrayList<>();
+        //子计划id,查询出所有已生成的子计划,先删除再重新构建
         for (SysOrgVO sysOrg : planPublishOrgList) {
+            //如果需要生成的子计划已经存在,说明可能是经过编辑的,所以把状态修改回来就行
+            if (checkExitAndFlushExecOrg(plan, planExecOrgList, list, sysOrg)) continue;
             if (checkOrgType(plan.getExecOrgType())) {
                 //走到这说明,执行机构中都是省联社/办事处 这些不需要子机话,所以直接返回,
                 //但是如果后期扩展多选执行机构类型,此处将不再适用
@@ -694,7 +698,7 @@ public class CoreEduTrainingPlanServiceImpl extends ServiceImpl<CoreEduTrainingP
             coreEduTrainingPlan.setBelongOrgPath(sysOrg.getPath());
             coreEduTrainingPlan.setStandard(0);
             coreEduTrainingPlan.setIssue(0);
-            coreEduTrainingPlan.setPlanStatus(isPublish ? EduTrainingPlanStatus.USING.getCode() : plan.getPlanStatus());
+            coreEduTrainingPlan.setPlanStatus(EduTrainingPlanStatus.USING.getCode());
             coreEduTrainingPlan.setParentId(plan.getId());
             coreEduTrainingPlan.setCreateTime(new Date());
             coreEduTrainingPlan.setUpdateTime(new Date());
@@ -713,36 +717,55 @@ public class CoreEduTrainingPlanServiceImpl extends ServiceImpl<CoreEduTrainingP
         if (planToExecOrgs.size() > 0) {
             coreEduTrainingPlanToExecOrgService.saveBatch(planToExecOrgs);
         }
-       /* List<CoreEduTrainingPlanToRole> insertPlanRoleList = new ArrayList<>();
-        for (CoreEduTrainingPlan coreEduTrainingPlan : list) {
-            //保存执行角色
-            for (CoreEduTrainingPlanToRole planRole : planRoleList) {
-                CoreEduTrainingPlanToRole role = new CoreEduTrainingPlanToRole();
-                role.setPlanId(coreEduTrainingPlan.getId());
-                role.setRoleId(planRole.getRoleId());
-                insertPlanRoleList.add(role);
-            }
-        }
-        if (insertPlanRoleList.size() > 0) {
-            coreEduTrainingPlanToRoleService.saveBatch(insertPlanRoleList);
-        }*/
         if (!list.isEmpty()) {
-            this.saveBatch(list);
+            for (CoreEduTrainingPlan trainingPlan : list) {
+                final CoreEduTrainingPlan exit = baseMapper.selectCoreEduTrainingPlanById(trainingPlan.getId());
+                if (exit != null) {
+                    updateById(exit);
+                } else {
+                    save(trainingPlan);
+                }
+            }
+
         }
 
 
         return list;
     }
 
+    private boolean checkExitAndFlushExecOrg(CoreEduTrainingPlan plan, List<SysOrgVO> planToExecOrgs, List<CoreEduTrainingPlan> list, SysOrgVO sysOrg) {
+        CoreEduTrainingPlan oldPlan = getByOrgIdAndParentId(plan.getId(), sysOrg.getId());
+        if (oldPlan != null) {
+            oldPlan.setDeleted(0);
+            coreEduTrainingPlanToExecOrgMapper.deleteByMap(MapUtil.of("plan_id", oldPlan.getId()));
+            if (planToExecOrgs.size() > 0) {
+                final List<Long> collect = planToExecOrgs.stream().map(SysOrgVO::getId).distinct().collect(toList());
+                batchSavePlanToExecOrg(collect, oldPlan.getId());
+            }
+            oldPlan.setPlanName(plan.getPlanName());
+            oldPlan.setPlanStatus(EduTrainingPlanStatus.USING.getCode());
+            oldPlan.setBuildTaskNow(plan.getBuildTaskNow());
+            oldPlan.setPublishTime(new Date());
+            oldPlan.setUpdateTime(new Date());
+            updatePlanTime(oldPlan, plan.getBuildTaskNow());
+            baseMapper.updateCoreEduTrainingPlan(oldPlan);
+            list.add(oldPlan);
+            return true;
+        }
+        return false;
+    }
+
+    private CoreEduTrainingPlan getByOrgIdAndParentId(Long parentId, Long orgId) {
+
+        return baseMapper.selectByParentIdAndOrgId(parentId, orgId);
+    }
+
     @Override
     @Transactional(rollbackFor = Exception.class)
     public Integer revocationPlan(Long planId) {
         checkPlanIsCreatingTask(planId, "撤回");
         List<Long> list = coreEduTrainingPlanMapper.selectIdByParentId(planId);
-        int isExecute = coreEduTrainingTaskMapper.selectCount(new LambdaQueryWrapper<CoreEduTrainingTask>()
-                        .in(CoreEduTrainingTask::getPlanId, list)
-                        .eq(CoreEduTrainingTask::getStatus, EduTrainingDoStatus.DONE.getCode()))
-                .intValue();
+        int isExecute = coreEduTrainingTaskMapper.checkHasTaskIsDoneByPlanParentId(planId);
         //计划下没有已完成:计划下没有已完成:删除所有任务数据,计划状态回到草稿状态。
         if (isExecute < 1/* || EduTrainingPlanCycleEnum.NONE.getCode().equals(plan.getPlanCycle())*/) {
             // 删除所有任务数据

+ 12 - 0
soc-modules/soc-modules-core/src/main/resources/mapper/drill/CoreDrillPlanMapper.xml

@@ -296,6 +296,10 @@
     <update id="updateCoreDrillPlan" parameterType="com.xunmei.common.core.domain.drill.domain.CoreDrillPlan">
         update core_drill_plan
         <trim prefix="SET" suffixOverrides=",">
+            <if test="category != null">
+                category =
+                #{category},
+            </if>
             <if test="planName != null">
                 plan_name =
                 #{planName},
@@ -713,4 +717,12 @@
         from core_drill_plan
         where parent_id = #{planId}
     </select>
+
+    <select id="selectByParentIdAndOrgId" resultMap="CoreDrillPlanResult">
+        select *
+        from core_drill_plan
+        where parent_id = #{parentId}
+          and belong_org_id = #{orgId}
+        limit 1
+    </select>
 </mapper>

+ 1 - 1
soc-modules/soc-modules-core/src/main/resources/mapper/drill/CoreDrillTaskMapper.xml

@@ -154,7 +154,7 @@
         from core_drill_task
         where status in (2,3)
           and plan_id in
-              (select id from core_drill_plan where deleted = 0 and parent_id = #{planId})
+              (select id from core_drill_plan where parent_id = #{planId})
         limit 1
     </select>
 

+ 12 - 0
soc-modules/soc-modules-core/src/main/resources/mapper/edu/CoreEduTrainingPlanMapper.xml

@@ -328,6 +328,10 @@
     <update id="updateCoreEduTrainingPlan" parameterType="com.xunmei.common.core.domain.edu.domain.CoreEduTrainingPlan">
         update core_edu_training_plan
         <trim prefix="SET" suffixOverrides=",">
+            <if test="type != null">
+                type =
+                #{type},
+            </if>
             <if test="planName != null">
                 plan_name =
                 #{planName},
@@ -656,4 +660,12 @@
         from core_edu_training_plan
         where parent_id = #{planId}
     </select>
+
+    <select id="selectByParentIdAndOrgId" resultMap="CoreEduTrainingPlanResult">
+        select *
+        from core_edu_training_plan
+        where parent_id = #{parentId}
+          and belong_org_id = #{orgId}
+        limit 1
+    </select>
 </mapper>

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

@@ -178,7 +178,7 @@
         from core_edu_training_task
         where status in (2)
           and plan_id in
-              (select id from core_edu_training_plan where deleted = 0 and parent_id = #{planId})
+              (select id from core_edu_training_plan where  parent_id = #{planId})
         limit 1
     </select>