Эх сурвалжийг харах

演练/培训 计划下发逻辑处理

jingyuanchao 1 жил өмнө
parent
commit
9d45f0fee5

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

@@ -324,9 +324,9 @@ public class CoreDrillPlanServiceImpl extends ServiceImpl<CoreDrillPlanMapper, C
             } else {
                 planList = ListUtil.list(true, plan);
             }
-            if (checkOrgType(plan.getExecOrgType())) {
+/*            if (checkOrgType(plan.getExecOrgType())) {
                 planList.add(plan);
-            }
+            }*/
             List<CoreDrillPlan> finalPlanList = planList;
             TransactionSynchronizationManager.registerSynchronization(new TransactionSynchronizationAdapter() {
                 @Override
@@ -603,11 +603,6 @@ public class CoreDrillPlanServiceImpl extends ServiceImpl<CoreDrillPlanMapper, C
             List<Long> collect = planList.stream().map(CoreDrillPlan::getId).collect(Collectors.toList());
             coreDrillPlanMapper.updatePlanStatusByIdList(collect, EduTrainingPlanStatus.USING.getCode());
         }
-        //处理行社及其以上的机构类型新建计划并下发的情况, 这种情况不再生成子计划;
-        if (checkOrgType(plan.getExecOrgType())) {
-            planList.add(plan);
-            plan.setParentId(plan.getId());
-        }
         //下发后修改为使用中
         plan.setPlanStatus(DrillPlanStatus.USING.getCode());
         plan.setIssue(1);
@@ -635,6 +630,17 @@ public class CoreDrillPlanServiceImpl extends ServiceImpl<CoreDrillPlanMapper, C
 
     }
 
+    private Boolean anotherCheckOrgType(Integer orgType) {
+        if (ObjectUtil.isEmpty(orgType)) {
+            throw new RuntimeException("当前用户所在机构类型无法确认!");
+        }
+        //如果是省联社或者办事处及行社
+        return ObjectUtil.equal(orgType, OrgTypeEnum.SHEGN_LIAN_SHE.getCode())
+                || ObjectUtil.equal(orgType, OrgTypeEnum.BAN_SHI_CHU.getCode())
+                || ObjectUtil.equal(orgType, OrgTypeEnum.HANG_SHE.getCode())
+                || ObjectUtil.equal(orgType, OrgTypeEnum.YINGYE_WANGDIAN.getCode());
+    }
+
     @Override
     @Transactional(rollbackFor = Exception.class)
     public int revocationPlan(Long planId) {
@@ -705,18 +711,24 @@ public class CoreDrillPlanServiceImpl extends ServiceImpl<CoreDrillPlanMapper, C
             ros.eq(CoreDrillPlanToRole::getPlanId, plan.getId());
             planRoleList = coreDrillPlanToRoleMapper.selectList(ros);
         }*/
-        //获取计划具体执行机构
-        final List<SysOrgVO> planExecOrgList = this.getPlanExecOrg(plan);
-        //获取所有行社机构
-        List<SysOrgVO> publishOrgList = this.getPlanPublishOrgList(planExecOrgList);
-        //这里考虑到行社用户新建计划指定执行机构类型为营业网点时,会再次把当前行社查询出来,
-        // 导致行社下发会再次新增一条子计划,所以这里需要喊出当前行社机构id
-        publishOrgList.removeIf(org -> ObjectUtil.equal(org.getId(), SecurityUtils.getLoginUser().getSysUser().getOrgId()));
-        if (publishOrgList.isEmpty()) {
-            //如果满足的话,需要把当前计划的parentId设置成id
+        List<SysOrgVO> all = RedisUtils.getCacheList(CacheConstants.ORG_CACHE_LIST_KEY);
+        final SysOrgVO planCreateOrg = all.stream().filter(org -> org.getId().equals(plan.getCreateOrgId())).findFirst().get();
+        final long count = all.stream()
+                .filter(org -> ObjectUtil.isNotEmpty(org.getPath()))
+                .filter(org -> ObjectUtil.notEqual(org.getId(),plan.getCreateOrgId()))
+                .filter(org -> org.getPath().startsWith(planCreateOrg.getPath()))
+                .filter(org -> OrgTypeEnum.HANG_SHE.getCode().equals(org.getType()))
+                .count();
+        if (count == 0) {
             plan.setParentId(plan.getId());
-            return new ArrayList<>();
+            List<CoreDrillPlan> list = new ArrayList<>();
+            list.add(plan);
+            return list;
         }
+        //获取计划具体执行机构
+        final List<SysOrgVO> planExecOrgList = this.getPlanExecOrg(plan, all);
+        //获取所有计划所属机构
+        List<SysOrgVO> publishOrgList = this.getPlanPublishOrgList(planExecOrgList);
         List<CoreDrillPlanToExecOrg> planToExecOrgs = new ArrayList<>();
         List<CoreDrillPlan> list = new ArrayList<>();
         for (SysOrgVO sysOrg : publishOrgList) {
@@ -770,11 +782,11 @@ public class CoreDrillPlanServiceImpl extends ServiceImpl<CoreDrillPlanMapper, C
         return list;
     }
 
-    private List<SysOrgVO> getPlanExecOrg(CoreDrillPlan plan) {
+    private List<SysOrgVO> getPlanExecOrg(CoreDrillPlan plan, List<SysOrgVO> all) {
         QueryWrapper<CoreDrillPlanToExecOrg> eos = new QueryWrapper<>();
         eos.lambda().eq(CoreDrillPlanToExecOrg::getPlanId, plan.getId());
         final List<CoreDrillPlanToExecOrg> coreDrillPlanToExecOrgList = coreDrillPlanToExecOrgMapper.selectList(eos);
-        List<SysOrgVO> all = RedisUtils.getCacheList(CacheConstants.ORG_CACHE_LIST_KEY);
+
         if (ObjectUtil.isNotEmpty(coreDrillPlanToExecOrgList)) {
             final List<Long> list = coreDrillPlanToExecOrgList.stream().map(CoreDrillPlanToExecOrg::getOrgId).collect(Collectors.toList());
             return all.stream().filter(org -> list.contains(org.getId())).collect(Collectors.toList());

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

@@ -16,6 +16,7 @@ import com.xunmei.common.core.constant.ErrorMsgConstants;
 import com.xunmei.common.core.constant.SecurityConstants;
 import com.xunmei.common.core.domain.DateRange;
 import com.xunmei.common.core.domain.IdName;
+import com.xunmei.common.core.domain.drill.domain.CoreDrillPlan;
 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;
@@ -244,6 +245,17 @@ public class CoreEduTrainingPlanServiceImpl extends ServiceImpl<CoreEduTrainingP
                 || ObjectUtil.equal(orgType, OrgTypeEnum.HANG_SHE.getCode());
     }
 
+    private Boolean anotherCheckOrgType(Integer orgType) {
+        if (ObjectUtil.isEmpty(orgType)) {
+            throw new RuntimeException("当前用户所在机构类型无法确认!");
+        }
+        //如果是省联社或者办事处及行社
+        return ObjectUtil.equal(orgType, OrgTypeEnum.SHEGN_LIAN_SHE.getCode())
+                || ObjectUtil.equal(orgType, OrgTypeEnum.BAN_SHI_CHU.getCode())
+                || ObjectUtil.equal(orgType, OrgTypeEnum.HANG_SHE.getCode())
+                || ObjectUtil.equal(orgType, OrgTypeEnum.YINGYE_WANGDIAN.getCode());
+    }
+
     /**
      * 修改教育培训计划
      *
@@ -368,9 +380,6 @@ public class CoreEduTrainingPlanServiceImpl extends ServiceImpl<CoreEduTrainingP
             } else {
                 planList = ListUtil.list(true, plan);
             }
-            if (checkOrgType(plan.getExecOrgType())) {
-                planList.add(plan);
-            }
             //List<CoreEduTrainingPlan> planList = buildPlanData(plan, null, false);
             List<CoreEduTrainingPlan> finalPlanList = planList;
             TransactionSynchronizationManager.registerSynchronization(new TransactionSynchronizationAdapter() {
@@ -597,8 +606,7 @@ public class CoreEduTrainingPlanServiceImpl extends ServiceImpl<CoreEduTrainingP
     }
 
 
-    private List<SysOrgVO> getPlanExecOrg(CoreEduTrainingPlan plan) {
-        List<SysOrgVO> all = RedisUtils.getCacheList(CacheConstants.ORG_CACHE_LIST_KEY);
+    private List<SysOrgVO> getPlanExecOrg(CoreEduTrainingPlan plan, List<SysOrgVO> all) {
         QueryWrapper<CoreEduTrainingPlanToExecOrg> eos = new QueryWrapper<>();
         eos.lambda().eq(CoreEduTrainingPlanToExecOrg::getPlanId, plan.getId());
         final List<CoreEduTrainingPlanToExecOrg> coreEduTrainingPlanToExecOrgs = coreEduTrainingPlanToExecOrgMapper.selectList(eos);
@@ -635,10 +643,6 @@ public class CoreEduTrainingPlanServiceImpl extends ServiceImpl<CoreEduTrainingP
             List<Long> collect = planList.stream().map(CoreEduTrainingPlan::getId).collect(Collectors.toList());
             coreEduTrainingPlanMapper.updatePlanStatusByIdList(collect, EduTrainingPlanStatus.USING.getCode());
         }
-        if (checkOrgType(plan.getExecOrgType())) {
-            planList.add(plan);
-            plan.setParentId(planId);
-        }
         //下发后修改为使用中
         plan.setPlanStatus(EduTrainingPlanStatus.USING.getCode());
         plan.setIssue(1);
@@ -689,16 +693,23 @@ public class CoreEduTrainingPlanServiceImpl extends ServiceImpl<CoreEduTrainingP
             ros.eq(CoreEduTrainingPlanToRole::getPlanId, plan.getId());
             planRoleList = coreEduTrainingPlanToRoleMapper.selectList(ros);
         }*/
+        List<SysOrgVO> all = RedisUtils.getCacheList(CacheConstants.ORG_CACHE_LIST_KEY);
+        final SysOrgVO planCreateOrg = all.stream().filter(org -> org.getId().equals(plan.getCreateOrgId())).findFirst().get();
+        final long count = all.stream()
+                .filter(org -> ObjectUtil.isNotEmpty(org.getPath()))
+                .filter(org -> ObjectUtil.notEqual(org.getId(),plan.getCreateOrgId()))
+                .filter(org -> org.getPath().startsWith(planCreateOrg.getPath()))
+                .filter(org -> OrgTypeEnum.HANG_SHE.getCode().equals(org.getType()))
+                .count();
+        if (count == 0) {
+            plan.setParentId(plan.getId());
+            List<CoreEduTrainingPlan> list = new ArrayList<>();
+            list.add(plan);
+            return list;
+        }
         //获取计划具体执行机构
-        final List<SysOrgVO> planExecOrgList = this.getPlanExecOrg(plan);
+        final List<SysOrgVO> planExecOrgList = this.getPlanExecOrg(plan, all);
         List<SysOrgVO> planPublishOrgList = getPlanPublishOrgList(planExecOrgList);
-        //这里考虑到行社用户新建计划指定执行机构类型为营业网点时,会再次把当前行社查询出来,
-        // 导致行社下发会再次新增一条子计划,所以这里需要喊出当前行社机构id
-        planPublishOrgList.removeIf(org -> ObjectUtil.equal(org.getId(), SecurityUtils.getLoginUser().getSysUser().getOrgId()));
-        if (planPublishOrgList.isEmpty()) {
-            //如果满足的话,需要把当前计划的parentId设置成id
-            return new ArrayList<>();
-        }
         List<CoreEduTrainingPlanToExecOrg> planToExecOrgs = new ArrayList<>();
         List<CoreEduTrainingPlan> list = new ArrayList<>();
         for (SysOrgVO sysOrg : planPublishOrgList) {