|
|
@@ -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)
|