瀏覽代碼

教育培训bug修改

jingyuanchao 2 年之前
父節點
當前提交
241cc6a175

+ 2 - 0
soc-common/soc-common-core/src/main/java/com/xunmei/common/core/domain/edu/vo/SysLearningMaterialsPageVo.java

@@ -18,6 +18,8 @@ import java.util.Date;
 @ApiModel(value = "SysLearningMaterials分页Vo", description = "学习资料分页Vo")
 public class SysLearningMaterialsPageVo {
 
+    private int no;
+
     @JsonSerialize(using = com.fasterxml.jackson.databind.ser.std.ToStringSerializer.class)
     private Long id;
 

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

@@ -317,14 +317,148 @@ public class CoreDrillPlanServiceImpl extends ServiceImpl<CoreDrillPlanMapper, C
             });
         }
     }
-
     private Boolean checkCanUpdate(CoreDrillPlanUpdateDto request, CoreDrillPlan plan) {
         if (ObjectUtil.isAllEmpty(request.getExecOrgType(), request.getPlanExecOrgIdList())) {
             throw new RuntimeException("培训机构类型和执行机构不能同时为空!");
         }
+
+        // 如果是下发的计划,执行频次不应低于省联社下发时设定的次数
+        if (ObjectUtil.equal(plan.getStandard(), 0)) {
+            validatePlanForStandard(request, plan);
+        }
+
+        final Long planId = plan.getId();
+        boolean flag = true;
+
+        // 判断计划是否有任务已经执行过
+        Integer done = coreDrillTaskMapper.checkHasTaskIsDone(Arrays.asList(planId));
+
+        // 判断标准计划能否修改:存在下发的计划生成了任务且任务存在已执行
+        Integer standardPlanHasDone = coreDrillTaskMapper.checkHasTaskIsDoneByPlanParentId(planId);
+        if (standardPlanHasDone != null) {
+            throw new RuntimeException("该计划下存在任务已执行的情况,无法修改!");
+        }
+
+        // 验证计划
+        flag = validatePlan(request, plan, planId, true);
+
+        return null == done || flag;
+    }
+
+    private void validatePlanForStandard(CoreDrillPlanUpdateDto request, CoreDrillPlan plan) {
+        if (request.getExecTimes() < plan.getExecTimes()){
+            throw new RuntimeException("培训次数不应低于基准次数!");
+        }
+        validateFieldForStandard(request.getPlanStatus(), plan.getPlanStatus(), "下发计划仅允许修改培训次数!");
+        validateFieldForStandard(request.getPlanCycle(), plan.getPlanCycle(), "下发计划仅允许修改培训次数!");
+        validateFieldForStandard(request.getExecOrgType(), plan.getExecOrgType(), "下发计划仅允许修改培训次数!");
+        validateFieldForStandard(request.getPlanName(),plan.getPlanName(), "下发计划仅允许修改培训次数!");
+
+        validateRoleAndOrgForStandard(request, plan);
+    }
+
+    private void validateFieldForStandard(Object requestValue, Object planValue, String errorMessage) {
+        if (ObjectUtil.notEqual(requestValue, planValue)) {
+            throw new RuntimeException(errorMessage);
+        }
+    }
+
+    private void validateRoleAndOrgForStandard(CoreDrillPlanUpdateDto request, CoreDrillPlan plan) {
+        // 执行角色
+        List<Long> roleIdLit = coreDrillPlanToRoleMapper.selectRoleIdByPlanId(plan.getId());
+        List<Long> planRoleId = request.getPlanRoleId();
+        if (ObjectUtil.isEmpty(planRoleId)) {
+            throw new RuntimeException("下发计划仅允许修改培训次数!");
+        }
+        validateListForStandard(roleIdLit, planRoleId, "下发计划仅允许修改培训次数!");
+
+        // 执行机构
+        List<Long> execOrgIdList = coreDrillPlanToExecOrgMapper.selectOrgIdByPlanId(plan.getId());
+        List<Long> planExecOrgIdList = request.getPlanExecOrgIdList();
+        validateListForStandard(execOrgIdList, planExecOrgIdList, "下发计划仅允许修改培训次数!");
+    }
+
+    private void validateListForStandard(List<Long> planList, List<Long> requestList, String errorMessage) {
+        if (planList.size() != requestList.size() || !planList.containsAll(requestList)) {
+            throw new RuntimeException(errorMessage);
+        }
+    }
+
+    private boolean validatePlan(CoreDrillPlanUpdateDto request, CoreDrillPlan plan, Long planId, boolean flag) {
+        flag = flag && validateField(request.getPlanStatus(), plan.getPlanStatus());
+        flag = flag && validateField(request.getPlanCycle(), plan.getPlanCycle());
+        flag = flag && validateField(request.getExecOrgType(), plan.getExecOrgType());
+
+        // 执行角色
+        List<Long> roleIdLit = coreDrillPlanToRoleMapper.selectRoleIdByPlanId(planId);
+        List<Long> planRoleId = request.getPlanRoleId();
+        flag = flag && !ObjectUtil.isEmpty(planRoleId) && roleIdLit.containsAll(planRoleId);
+
+        // 执行机构
+        List<Long> execOrgIdList = coreDrillPlanToExecOrgMapper.selectOrgIdByPlanId(planId);
+        List<Long> planExecOrgIdList = request.getPlanExecOrgIdList();
+        flag = flag && validateList(execOrgIdList, planExecOrgIdList);
+
+        return flag;
+    }
+
+    private boolean validateField(Object requestValue, Object planValue) {
+        return ObjectUtil.equal(requestValue, planValue);
+    }
+
+    private boolean validateList(List<Long> planList, List<Long> requestList) {
+        return planList.size() == requestList.size() && planList.containsAll(requestList);
+    }
+
+   /* private Boolean checkCanUpdate(CoreDrillPlanUpdateDto request, CoreDrillPlan plan) {
+        if (ObjectUtil.isAllEmpty(request.getExecOrgType(), request.getPlanExecOrgIdList())) {
+            throw new RuntimeException("培训机构类型和执行机构不能同时为空!");
+        }
         //如果是下发的计划,执行频次不应低于省联社下发时设定的次数
-        if (ObjectUtil.equal(plan.getStandard(), 0) && request.getExecTimes() < plan.getExecTimes()) {
-            throw new RuntimeException("执行次数不应低于基准次数!");
+        if (ObjectUtil.equal(plan.getStandard(), 0)) {
+            if (request.getExecTimes() < plan.getExecTimes()){
+                throw new RuntimeException("培训次数不应低于基准次数!");
+            }
+            //计划状态
+            if (ObjectUtil.notEqual(request.getPlanStatus(), plan.getPlanStatus())) {
+                throw new RuntimeException("下发计划仅允许修改培训次数!");
+            }
+            //计划周期
+            if (ObjectUtil.notEqual(request.getPlanCycle(), plan.getPlanCycle())) {
+                throw new RuntimeException("下发计划仅允许修改培训次数!");
+            }
+            //执行机构
+            if (ObjectUtil.notEqual(request.getExecOrgType(), plan.getExecOrgType())) {
+                throw new RuntimeException("下发计划仅允许修改培训次数!");
+            }
+            if (ObjectUtil.notEqual(request.getPlanName(),plan.getPlanName())){
+                throw new RuntimeException("下发计划仅允许修改培训次数!");
+            }
+            //执行角色
+            List<Long> roleIdLit = coreDrillPlanToRoleMapper.selectRoleIdByPlanId(plan.getId());
+            List<Long> planRoleId = request.getPlanRoleId();
+            if (ObjectUtil.isEmpty(planRoleId)) {
+                throw new RuntimeException("下发计划仅允许修改培训次数!");
+            }
+            for (Long roleId : roleIdLit) {
+                if (!planRoleId.contains(roleId)) {
+                    throw new RuntimeException("下发计划仅允许修改培训次数!");
+                }
+            }
+
+            //执行机构
+            List<Long> execOrgIdList = coreDrillPlanToExecOrgMapper.selectOrgIdByPlanId(plan.getId());
+            final List<Long> planExecOrgIdList = request.getPlanExecOrgIdList();
+            if (execOrgIdList.size() != planExecOrgIdList.size()) {
+                throw new RuntimeException("下发计划仅允许修改培训次数!");
+            }
+            for (Long orgId : execOrgIdList) {
+                if (!planExecOrgIdList.contains(orgId)) {
+                    throw new RuntimeException("下发计划仅允许修改培训次数!");
+                }
+            }
+
+
         }
         final Long planId = plan.getId();
         boolean flag = true;
@@ -373,7 +507,7 @@ public class CoreDrillPlanServiceImpl extends ServiceImpl<CoreDrillPlanMapper, C
             }
         }
         return null == done || flag;
-    }
+    }*/
 
     public List<CoreDrillPlanToRole> batchSavePlanToRole(List<Long> roleIdList, Long planId) {
         List<CoreDrillPlanToRole> planRoleList = new ArrayList<>();

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

@@ -65,4 +65,6 @@ public interface SysKnowledgeMapper extends BaseMapper<SysKnowledge> {
     List<SysKnowledge> dataList();
 
     Integer checkInUse(@Param("list") List<Long> list);
+
+    Integer checkNameUnique(@Param("name") String name, @Param("id") Long id);
 }

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

@@ -12,6 +12,8 @@ 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;
@@ -74,8 +76,6 @@ public class CoreEduTrainingPlanServiceImpl extends ServiceImpl<CoreEduTrainingP
     private CoreEduTrainingTaskToRoleMapper coreEduTrainingTaskToRoleMapper;
     @Autowired
     private RemoteOrgService orgService;
-    @Autowired
-    private RemoteRoleService remoteRoleService;
 
     @Override
     public TableDataInfo selectPage(CoreEduTrainingPlanPageDto request) throws InterruptedException {
@@ -92,14 +92,7 @@ public class CoreEduTrainingPlanServiceImpl extends ServiceImpl<CoreEduTrainingP
         for (CoreEduTrainingPlanPageVo record : records) {
             dealData(record, records, sysOrg.getId(), request);
         }
-        //抓换为TableDataInfo适配前端
-        TableDataInfo<CoreEduTrainingPlanPageVo> tableDataInfo = new TableDataInfo();
-        tableDataInfo.setMsg("操作成功");
-        tableDataInfo.setCode(200);
-        tableDataInfo.setTotal(page.getTotal());
-        tableDataInfo.setRows(page.getRecords());
-        return tableDataInfo;
-
+        return TableDataInfo.build(page);
 
     }
 
@@ -200,10 +193,11 @@ public class CoreEduTrainingPlanServiceImpl extends ServiceImpl<CoreEduTrainingP
         plan.setFileList(ObjectUtil.isNotEmpty(request.getFileList()) ? JSON.toJSONString(request.getFileList()) : null);
         batchSavePlanToRole(request.getPlanRoleId(), plan.getId());
         batchSavePlanToExecOrg(request.getPlanExecOrgIdList(), plan.getId());
+        plan.setStandard(0);
+        plan.setIssue(0);
         //省联社或者办事处创建的计划才存在下发
         if (checkOrgType(org.getType())) {
             plan.setStandard(1);
-            plan.setIssue(0);
         }
         int insert = coreEduTrainingPlanMapper.insert(plan);
 
@@ -284,7 +278,7 @@ public class CoreEduTrainingPlanServiceImpl extends ServiceImpl<CoreEduTrainingP
         }
         List<CoreEduTrainingPlan> planList = buildPlanData(plan, trainingPlanToRoleList);
 
-        if (plan.getPlanStatus()==1){
+        if (plan.getPlanStatus() == 1) {
             log.info("计划已被修改为禁用,不再生成任务!");
             return;
         }
@@ -311,7 +305,7 @@ public class CoreEduTrainingPlanServiceImpl extends ServiceImpl<CoreEduTrainingP
             //TODO 考虑是否同步修改已生成的任务的名称
             return;
         }
-        if (plan.getPlanStatus()==1){
+        if (plan.getPlanStatus() == 1) {
             log.info("计划已被修改为禁用,不再生成任务!");
             return;
         }
@@ -330,6 +324,100 @@ public class CoreEduTrainingPlanServiceImpl extends ServiceImpl<CoreEduTrainingP
         if (ObjectUtil.isAllEmpty(request.getExecOrgType(), request.getPlanExecOrgIdList())) {
             throw new RuntimeException("培训机构类型和执行机构不能同时为空!");
         }
+
+        // 如果是下发的计划,执行频次不应低于省联社下发时设定的次数
+        if (ObjectUtil.equal(plan.getStandard(), 0)) {
+            validatePlanForStandard(request, plan);
+        }
+
+        final Long planId = plan.getId();
+        boolean flag = true;
+
+        // 判断计划是否有任务已经执行过
+        Integer done = coreEduTrainingTaskMapper.checkHasTaskIsDone(Arrays.asList(planId));
+
+        // 判断标准计划能否修改:存在下发的计划生成了任务且任务存在已执行
+        Integer standardPlanHasDone = coreEduTrainingTaskMapper.checkHasTaskIsDoneByPlanParentId(planId);
+        if (standardPlanHasDone != null) {
+            throw new RuntimeException("该计划下存在任务已执行的情况,无法修改!");
+        }
+
+        // 验证计划
+        flag = validatePlan(request, plan, planId, true);
+
+        return null == done || flag;
+    }
+
+    private void validatePlanForStandard(CoreEduTrainingPlanEditDto request, CoreEduTrainingPlan plan) {
+        if (request.getExecTimes() < plan.getExecTimes()) {
+            throw new RuntimeException("培训次数不应低于基准次数!");
+        }
+        validateFieldForStandard(request.getPlanStatus(), plan.getPlanStatus(), "下发计划仅允许修改培训次数!");
+        validateFieldForStandard(request.getPlanCycle(), plan.getPlanCycle(), "下发计划仅允许修改培训次数!");
+        validateFieldForStandard(request.getExecOrgType(), plan.getExecOrgType(), "下发计划仅允许修改培训次数!");
+        validateFieldForStandard(request.getPlanName(), plan.getPlanName(), "下发计划仅允许修改培训次数!");
+        validateFieldForStandard(request.getRemark(), plan.getRemark(), "下发计划仅允许修改培训次数!");
+
+        validateRoleAndOrgForStandard(request, plan);
+    }
+
+    private void validateFieldForStandard(Object requestValue, Object planValue, String errorMessage) {
+        if (ObjectUtil.notEqual(requestValue, planValue)) {
+            throw new RuntimeException(errorMessage);
+        }
+    }
+
+    private void validateRoleAndOrgForStandard(CoreEduTrainingPlanEditDto request, CoreEduTrainingPlan plan) {
+        // 执行角色
+        List<Long> roleIdLit = coreEduTrainingPlanToRoleMapper.selectRoleIdByPlanId(plan.getId());
+        List<Long> planRoleId = request.getPlanRoleId();
+        if (ObjectUtil.isEmpty(planRoleId)) {
+            throw new RuntimeException("下发计划仅允许修改培训次数!");
+        }
+        validateListForStandard(roleIdLit, planRoleId, "下发计划仅允许修改培训次数!");
+
+        // 执行机构
+        List<Long> execOrgIdList = coreEduTrainingPlanToExecOrgMapper.selectOrgIdByPlanId(plan.getId());
+        List<Long> planExecOrgIdList = request.getPlanExecOrgIdList();
+        validateListForStandard(execOrgIdList, planExecOrgIdList, "下发计划仅允许修改培训次数!");
+    }
+
+    private void validateListForStandard(List<Long> planList, List<Long> requestList, String errorMessage) {
+        if (planList.size() != requestList.size() || !planList.containsAll(requestList)) {
+            throw new RuntimeException(errorMessage);
+        }
+    }
+
+    private boolean validatePlan(CoreEduTrainingPlanEditDto request, CoreEduTrainingPlan plan, Long planId, boolean flag) {
+        flag = flag && validateField(request.getPlanStatus(), plan.getPlanStatus());
+        flag = flag && validateField(request.getPlanCycle(), plan.getPlanCycle());
+        flag = flag && validateField(request.getExecOrgType(), plan.getExecOrgType());
+
+        // 执行角色
+        List<Long> roleIdLit = coreEduTrainingPlanToRoleMapper.selectRoleIdByPlanId(planId);
+        List<Long> planRoleId = request.getPlanRoleId();
+        flag = flag && !ObjectUtil.isEmpty(planRoleId) && roleIdLit.containsAll(planRoleId);
+
+        // 执行机构
+        List<Long> execOrgIdList = coreEduTrainingPlanToExecOrgMapper.selectOrgIdByPlanId(planId);
+        List<Long> planExecOrgIdList = request.getPlanExecOrgIdList();
+        flag = flag && validateList(execOrgIdList, planExecOrgIdList);
+
+        return flag;
+    }
+
+    private boolean validateField(Object requestValue, Object planValue) {
+        return ObjectUtil.equal(requestValue, planValue);
+    }
+
+    private boolean validateList(List<Long> planList, List<Long> requestList) {
+        return planList.size() == requestList.size() && planList.containsAll(requestList);
+    }
+
+    /*private Boolean checkCanUpdate(CoreEduTrainingPlanEditDto request, CoreEduTrainingPlan plan) {
+        if (ObjectUtil.isAllEmpty(request.getExecOrgType(), request.getPlanExecOrgIdList())) {
+            throw new RuntimeException("培训机构类型和执行机构不能同时为空!");
+        }
         //如果是下发的计划,执行频次不应低于省联社下发时设定的次数
         if (ObjectUtil.equal(plan.getStandard(), 0) && request.getExecTimes() < plan.getExecTimes()) {
             throw new RuntimeException("执行次数不应低于基准次数!");
@@ -380,7 +468,7 @@ public class CoreEduTrainingPlanServiceImpl extends ServiceImpl<CoreEduTrainingP
             }
         }
         return null == done || flag;
-    }
+    }*/
 
     @Override
     public CoreEduTrainingPlanDataVo getCoreEduTrainingPlanDataVo(Long id) {
@@ -637,24 +725,24 @@ public class CoreEduTrainingPlanServiceImpl extends ServiceImpl<CoreEduTrainingP
         switch (orgType) {
             case 1:
                 //省联社
-                final List<CoreEduTrainingPlan> sLsPlanList = getPlanList(orgId,1,1);
+                final List<CoreEduTrainingPlan> sLsPlanList = getPlanList(orgId, 1, 1);
                 return sLsPlanList.stream().map(x -> new IdName<>(x.getId().toString(), x.getPlanName())).collect(Collectors.toList());
             case 2:
                 //办事处
                 SysOrg topOrg = RemoteCallHandlerExecutor.executeRemoteCall(() -> orgService.selectTopOrg(SecurityConstants.INNER), ErrorMsgConstants.QUERY_ORG_DATA_ERROR);
-                final List<CoreEduTrainingPlan> lsPlanList = getPlanList(topOrg.getId(),1,1);
-                final List<CoreEduTrainingPlan> bscPlanList = getPlanList(orgId,1,1);
+                final List<CoreEduTrainingPlan> lsPlanList = getPlanList(topOrg.getId(), 1, 1);
+                final List<CoreEduTrainingPlan> bscPlanList = getPlanList(orgId, 1, 1);
                 return Stream.of(lsPlanList, bscPlanList).flatMap(Collection::stream).map(x -> new IdName<>(x.getId().toString(), x.getPlanName())).collect(Collectors.toList());
             case 3:
                 //行社
-                final List<CoreEduTrainingPlan> hsPlanList = getPlanList(orgId,0,0);
+                final List<CoreEduTrainingPlan> hsPlanList = getPlanList(orgId, 0, 0);
                 return hsPlanList.stream().map(x -> new IdName<>(x.getId().toString(), x.getPlanName())).collect(Collectors.toList());
             default:
                 return new ArrayList<>();
         }
     }
 
-    private List<CoreEduTrainingPlan> getPlanList(Long orgId,Integer standard,Integer issue) {
+    private List<CoreEduTrainingPlan> getPlanList(Long orgId, Integer standard, Integer issue) {
         return coreEduTrainingPlanMapper.selectList(new LambdaQueryWrapper<CoreEduTrainingPlan>()
                 .eq(CoreEduTrainingPlan::getBelongOrgId, orgId)
                 .eq(CoreEduTrainingPlan::getStandard, standard)

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

@@ -102,6 +102,10 @@ public class SysKnowledgeServiceImpl extends ServiceImpl<SysKnowledgeMapper, Sys
      */
     @Override
     public int insertSysKnowledge(SysKnowledge sysKnowledge) {
+        Integer exit = sysKnowledgeMapper.checkNameUnique(sysKnowledge.getName(),null);
+        if (null != exit && exit > 0) {
+            throw new RuntimeException("知识库标签名称已存在");
+        }
         sysKnowledge.setCreateTime(DateUtils.getNowDate());
         sysKnowledge.setUpdateTime(DateUtils.getNowDate());
         sysKnowledge.setCreateBy(SecurityUtils.getUserId().toString());
@@ -117,6 +121,10 @@ public class SysKnowledgeServiceImpl extends ServiceImpl<SysKnowledgeMapper, Sys
      */
     @Override
     public int updateSysKnowledge(SysKnowledge sysKnowledge) {
+        Integer exit = sysKnowledgeMapper.checkNameUnique(sysKnowledge.getName(),sysKnowledge.getId());
+        if (null != exit && exit > 0) {
+            throw new RuntimeException("知识库标签名称已存在");
+        }
         sysKnowledge.setUpdateBy(SecurityUtils.getUserId().toString());
         sysKnowledge.setUpdateTime(DateUtils.getNowDate());
         return sysKnowledgeMapper.updateById(sysKnowledge);

+ 2 - 7
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/edu/service/impl/SysLearningMaterialsServiceImpl.java

@@ -71,15 +71,10 @@ public class SysLearningMaterialsServiceImpl extends ServiceImpl<SysLearningMate
             page = sysLearningMaterialsMapper.selectPageData(request.getPageRequest(), request);
         }
         for (SysLearningMaterialsPageVo record : page.getRecords()) {
+            record.setNo(page.getRecords().indexOf(record));
             extractStringFromUrl(record);
         }
-        //抓换为TableDataInfo适配前端
-        TableDataInfo tableDataInfo = new TableDataInfo();
-        tableDataInfo.setMsg("操作成功");
-        tableDataInfo.setCode(200);
-        tableDataInfo.setTotal(page.getTotal());
-        tableDataInfo.setRows(page.getRecords());
-        return tableDataInfo;
+       return TableDataInfo.success(page);
     }
 
     private List<Long> dealParentOrgId(SysLearningMaterialsPageDto request, SysOrg sysOrg) {

+ 7 - 0
soc-modules/soc-modules-core/src/main/resources/mapper/edu/SysKnowledgeMapper.xml

@@ -122,4 +122,11 @@
         </foreach>
         limit 1
     </select>
+
+    <select id="checkNameUnique" resultType="java.lang.Integer">
+        select count(1) from sys_knowledge where name = #{name} and deleted = 0
+        <if test="id != null">
+            and id != #{id}
+        </if>
+    </select>
 </mapper>