|
|
@@ -1,7 +1,5 @@
|
|
|
package com.xunmei.core.drill.service.impl;
|
|
|
|
|
|
-import cn.hutool.core.collection.CollectionUtil;
|
|
|
-import cn.hutool.core.collection.ListUtil;
|
|
|
import cn.hutool.core.date.DateUtil;
|
|
|
import cn.hutool.core.map.MapUtil;
|
|
|
import cn.hutool.core.util.ObjectUtil;
|
|
|
@@ -20,7 +18,11 @@ 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.*;
|
|
|
+import com.xunmei.common.core.domain.compensate.dto.CompensateDto;
|
|
|
+import com.xunmei.common.core.domain.drill.domain.CoreDrillPlan;
|
|
|
+import com.xunmei.common.core.domain.drill.domain.CoreDrillPlanToExecOrg;
|
|
|
+import com.xunmei.common.core.domain.drill.domain.CoreDrillPlanToRole;
|
|
|
+import com.xunmei.common.core.domain.drill.domain.CoreDrillTask;
|
|
|
import com.xunmei.common.core.domain.drill.dto.CoreDrillPlanInsertDto;
|
|
|
import com.xunmei.common.core.domain.drill.dto.CoreDrillPlanPageDto;
|
|
|
import com.xunmei.common.core.domain.drill.dto.CoreDrillPlanUpdateDto;
|
|
|
@@ -47,13 +49,13 @@ import com.xunmei.common.core.web.page.TableDataInfo;
|
|
|
import com.xunmei.common.redis.utils.RedisUtils;
|
|
|
import com.xunmei.common.security.utils.DictUtils;
|
|
|
import com.xunmei.common.security.utils.SecurityUtils;
|
|
|
-import com.xunmei.common.core.domain.compensate.dto.CompensateDto;
|
|
|
import com.xunmei.core.compense.interfaces.CompensateService;
|
|
|
import com.xunmei.core.compense.service.ICoreCompensateLogService;
|
|
|
-import com.xunmei.core.drill.mapper.*;
|
|
|
+import com.xunmei.core.drill.mapper.CoreDrillPlanMapper;
|
|
|
+import com.xunmei.core.drill.mapper.CoreDrillPlanToExecOrgMapper;
|
|
|
+import com.xunmei.core.drill.mapper.CoreDrillTaskMapper;
|
|
|
import com.xunmei.core.drill.service.ICoreDrillPlanService;
|
|
|
import com.xunmei.core.drill.service.ICoreDrillPlanToExecOrgService;
|
|
|
-import com.xunmei.core.drill.service.ICoreDrillPlanToRoleService;
|
|
|
import com.xunmei.core.drill.service.ICoreDrillTaskService;
|
|
|
import com.xunmei.core.edu.mapper.PhysicalDeleteMapper;
|
|
|
import com.xunmei.core.registerbook.service.ICoreRegisterBookPdfService;
|
|
|
@@ -74,8 +76,6 @@ import org.springframework.context.annotation.Lazy;
|
|
|
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
-import org.springframework.transaction.support.TransactionSynchronizationAdapter;
|
|
|
-import org.springframework.transaction.support.TransactionSynchronizationManager;
|
|
|
|
|
|
import java.time.Duration;
|
|
|
import java.util.*;
|
|
|
@@ -97,10 +97,6 @@ public class CoreDrillPlanServiceImpl extends ServiceImpl<CoreDrillPlanMapper, C
|
|
|
@Autowired
|
|
|
private CoreDrillPlanMapper coreDrillPlanMapper;
|
|
|
@Autowired
|
|
|
- private CoreDrillPlanToRoleMapper coreDrillPlanToRoleMapper;
|
|
|
- @Autowired
|
|
|
- private ICoreDrillPlanToRoleService coreDrillPlanToRoleService;
|
|
|
- @Autowired
|
|
|
private ICoreDrillPlanToExecOrgService coreDrillPlanToExecOrgService;
|
|
|
@Autowired
|
|
|
private CoreDrillPlanToExecOrgMapper coreDrillPlanToExecOrgMapper;
|
|
|
@@ -109,8 +105,6 @@ public class CoreDrillPlanServiceImpl extends ServiceImpl<CoreDrillPlanMapper, C
|
|
|
@Autowired
|
|
|
private CoreDrillTaskMapper coreDrillTaskMapper;
|
|
|
@Autowired
|
|
|
- private CoreDrillTaskToRoleMapper coreDrillTaskToRoleMapper;
|
|
|
- @Autowired
|
|
|
private PhysicalDeleteMapper physicalDeleteMapper;
|
|
|
@Autowired
|
|
|
@Qualifier(ThreadPoolConfig.SOC_EXECUTOR)
|
|
|
@@ -402,7 +396,7 @@ public class CoreDrillPlanServiceImpl extends ServiceImpl<CoreDrillPlanMapper, C
|
|
|
if (ObjectUtil.isEmpty(list)){
|
|
|
return;
|
|
|
}
|
|
|
- physicalDeleteMapper.deletedEduPlanByIds(list);
|
|
|
+ physicalDeleteMapper.deletedDrillPlanByIds(list);
|
|
|
coreDrillPlanToExecOrgService.deleteByPlanIds(list);
|
|
|
|
|
|
|
|
|
@@ -436,58 +430,6 @@ public class CoreDrillPlanServiceImpl extends ServiceImpl<CoreDrillPlanMapper, C
|
|
|
coreDrillPlanMapper.updateById(plan);
|
|
|
}
|
|
|
|
|
|
- private void updateStandardPlan(CoreDrillPlan plan, CoreDrillPlanUpdateDto request, DateRange range) {
|
|
|
-
|
|
|
- //使用中的标准计划
|
|
|
-
|
|
|
- Long planId = plan.getId();
|
|
|
- // 判断标准计划能否修改:存在下发的计划生成了任务且任务存在已执行
|
|
|
- Integer standardPlanHasDone = coreDrillTaskMapper.checkHasTaskIsDoneByPlanParentId(planId);
|
|
|
- if (ObjectUtil.equal(standardPlanHasDone, 1)) {
|
|
|
- SysOrg sysOrg = RemoteCallHandlerExecutor.executeRemoteCall(() ->
|
|
|
- orgService.selectOrgById(SecurityUtils.getLoginUser().getOrgId(), SecurityConstants.INNER), ErrorMsgConstants.QUERY_ORG_DATA_ERROR);
|
|
|
- //验证修改的字段是否符合要求
|
|
|
- String errorMsg = "有任务已执行或已过期,仅允许修改任务名称!";
|
|
|
- validatePlanForStandard(request, plan, errorMsg, sysOrg.getType());
|
|
|
- doUpdatePlan(plan, request);
|
|
|
- coreDrillPlanMapper.updatePlanName(plan.getId(), plan.getPlanName());
|
|
|
- coreDrillTaskMapper.updateTaskNameByParentPlanId(planId, plan.getPlanName(), range.getStartTime(), range.getEndTime());
|
|
|
- } else {
|
|
|
- doUpdatePlan(plan, request);
|
|
|
- delAllByParentPlanId(plan);
|
|
|
- List<CoreDrillPlan> planList = null;
|
|
|
- if (plan.getIssue() == 1) {
|
|
|
- planList = buildPlanData(plan, null, false, 0);
|
|
|
- } else {
|
|
|
- planList = ListUtil.list(true, plan);
|
|
|
- }
|
|
|
-/* if (checkOrgType(plan.getExecOrgType())) {
|
|
|
- planList.add(plan);
|
|
|
- }*/
|
|
|
- List<CoreDrillPlan> finalPlanList = planList;
|
|
|
- TransactionSynchronizationManager.registerSynchronization(new TransactionSynchronizationAdapter() {
|
|
|
- @Override
|
|
|
- public void afterCommit() {
|
|
|
- for (CoreDrillPlan drillPlan : finalPlanList) {
|
|
|
- CompletableFuture.runAsync(() -> {
|
|
|
- //如果不是省联社或者办事处,状态启用,并且是无周期或者立即生效
|
|
|
- if (checkCanBuildTaskNow(plan)) {
|
|
|
- CoreDrillPlanDataVo detailPlanData = getCoreDrillPlanDataVo(drillPlan.getId());
|
|
|
- coreDrillTaskService.createTaskForNow(detailPlanData, plan.getPlanStartDate(), plan.getPlanEndDate());
|
|
|
- }
|
|
|
- }, threadPoolTaskExecutor);
|
|
|
- }
|
|
|
- }
|
|
|
- });
|
|
|
-
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
- //TODO 修改任务名称
|
|
|
- //coreEduTrainingTaskMapper.updateTaskNameByPlanId(planId, planName, plan.getStartDate(), plan.getEndDate());
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
@Override
|
|
|
public void populateProperties(CoreDrillPlan source, CoreDrillPlan target) {
|
|
|
target.setPlanName(source.getPlanName());
|
|
|
@@ -501,119 +443,6 @@ public class CoreDrillPlanServiceImpl extends ServiceImpl<CoreDrillPlanMapper, C
|
|
|
target.setRemark(source.getRemark());
|
|
|
target.setFileList(source.getFileList());
|
|
|
}
|
|
|
-
|
|
|
- private void deletePlanAndTaskByParentPlanId(Long planId) {
|
|
|
- //删除原有数据, 然后重新生成计划,任务
|
|
|
- List<Long> planIdList = coreDrillPlanMapper.selectAllIdByParentId(planId);
|
|
|
- if (ObjectUtil.isEmpty(planIdList)) {
|
|
|
- return;
|
|
|
- }
|
|
|
- if (ObjectUtil.isNotEmpty(planIdList)) {
|
|
|
- coreDrillPlanMapper.deleteBatchIds(planIdList);
|
|
|
- coreDrillPlanToExecOrgMapper.delete(new LambdaQueryWrapper<CoreDrillPlanToExecOrg>().in(CoreDrillPlanToExecOrg::getPlanId, planIdList));
|
|
|
- coreDrillPlanToRoleMapper.delete(new LambdaQueryWrapper<CoreDrillPlanToRole>().in(CoreDrillPlanToRole::getPlanId, planIdList));
|
|
|
- }
|
|
|
- List<CoreDrillTask> taskIdList = coreDrillTaskMapper.selectList(new LambdaQueryWrapper<CoreDrillTask>().in(CoreDrillTask::getPlanId, planIdList).select(CoreDrillTask::getId));
|
|
|
- List<Long> collect = taskIdList.stream().map(CoreDrillTask::getId).collect(toList());
|
|
|
- if (ObjectUtil.isNotEmpty(collect)) {
|
|
|
- coreDrillTaskMapper.deleteBatchIds(collect);
|
|
|
- coreDrillTaskToRoleMapper.delete(new LambdaQueryWrapper<CoreDrillTaskToRole>().in(CoreDrillTaskToRole::getDrillTaskId, collect));
|
|
|
-
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- private void updateCommonPlan(CoreDrillPlan plan, CoreDrillPlanUpdateDto request, DateRange range) {
|
|
|
- CoreDrillPlan parentPlan = coreDrillPlanMapper.selectOne(new LambdaQueryWrapper<CoreDrillPlan>()
|
|
|
- .eq(CoreDrillPlan::getId, plan.getParentId()));
|
|
|
- //使用中的普通计划
|
|
|
- if (parentPlan.getExecTimes() > request.getExecTimes()) {
|
|
|
- throw new RuntimeException("执行次数不能小于基准计划执行次数!");
|
|
|
- }
|
|
|
- if (ObjectUtil.notEqual(plan.getId(), plan.getParentId())) {
|
|
|
- String errorMsg = null;
|
|
|
- SysOrg sysOrg = RemoteCallHandlerExecutor.executeRemoteCall(() ->
|
|
|
- orgService.selectOrgById(SecurityUtils.getLoginUser().getOrgId(), SecurityConstants.INNER), ErrorMsgConstants.QUERY_ORG_DATA_ERROR);
|
|
|
- if (ObjectUtil.equal(sysOrg.getType(), OrgTypeEnum.SHEGN_LIAN_SHE.getCode())) {
|
|
|
- errorMsg = "当前用户身份仅允许修改子任务的任务名称和任务次数!!";
|
|
|
- } else {
|
|
|
- errorMsg = "当前用户身份仅允许修改子任务的任务次数!";
|
|
|
- }
|
|
|
- validatePlanForStandard(request, parentPlan, errorMsg, sysOrg.getType());
|
|
|
- }
|
|
|
- doUpdatePlan(plan, request);
|
|
|
- final long done = coreDrillTaskMapper.selectCount(new LambdaQueryWrapper<CoreDrillTask>()
|
|
|
- .eq(CoreDrillTask::getPlanId, plan.getId())
|
|
|
- .ge(CoreDrillTask::getStartDate, range.getStartTime())
|
|
|
- .le(CoreDrillTask::getEndDate, range.getEndTime())
|
|
|
- .in(CoreDrillTask::getStatus, DrillDoStatus.DONE.getCode(), DrillDoStatus.OVERDUE.getCode()));
|
|
|
- //如果有一条状态不等于待培训的数据,那么就下个周期生效
|
|
|
- if (done > 0) {
|
|
|
- //任务已执行,下个周期生效
|
|
|
- return;
|
|
|
- }
|
|
|
- //如果没有,那就删除这个计划当前周期的所有任务,重新生成
|
|
|
- coreDrillTaskService.delByStartTimeAndEndTimeAndPlanIdList(Arrays.asList(plan.getId()), range.getStartTime(), range.getEndTime());
|
|
|
- TransactionSynchronizationManager.registerSynchronization(new TransactionSynchronizationAdapter() {
|
|
|
- @Override
|
|
|
- public void afterCommit() {
|
|
|
- CompletableFuture.runAsync(() -> {
|
|
|
- //如果不是省联社或者办事处,状态启用,并且是无周期或者立即生效
|
|
|
- if (checkCanBuildTaskNow(plan)) {
|
|
|
- final CoreDrillPlanDataVo detailPlanData = getCoreDrillPlanDataVo(plan.getId());
|
|
|
- coreDrillTaskService.createTaskForNow(detailPlanData, plan.getPlanStartDate(), plan.getPlanEndDate());
|
|
|
- }
|
|
|
- }, threadPoolTaskExecutor);
|
|
|
- }
|
|
|
- });
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
- private void delAllByParentPlanId(CoreDrillPlan plan) {
|
|
|
- List<Long> planIdList = coreDrillPlanMapper.selectIdByParentId(plan.getId());
|
|
|
- if (ObjectUtil.isEmpty(planIdList)) {
|
|
|
- return;
|
|
|
- }
|
|
|
- if (plan.getId().equals(plan.getParentId())) {
|
|
|
- List<Long> list = new ArrayList<>(planIdList);
|
|
|
- list.remove(plan.getId());
|
|
|
- if (list.isEmpty()) {
|
|
|
- return;
|
|
|
- }
|
|
|
- coreDrillPlanMapper.deleteBatchIds(planIdList);
|
|
|
- coreDrillPlanToRoleMapper.delete(new LambdaQueryWrapper<CoreDrillPlanToRole>()
|
|
|
- .in(CoreDrillPlanToRole::getPlanId, planIdList));
|
|
|
- coreDrillPlanToExecOrgMapper.delete(new LambdaQueryWrapper<CoreDrillPlanToExecOrg>()
|
|
|
- .in(CoreDrillPlanToExecOrg::getPlanId, planIdList));
|
|
|
- }
|
|
|
- coreDrillPlanToRoleMapper.delete(new LambdaQueryWrapper<CoreDrillPlanToRole>()
|
|
|
- .in(CoreDrillPlanToRole::getPlanId, planIdList));
|
|
|
- coreDrillPlanToExecOrgMapper.delete(new LambdaQueryWrapper<CoreDrillPlanToExecOrg>()
|
|
|
- .in(CoreDrillPlanToExecOrg::getPlanId, planIdList));
|
|
|
-
|
|
|
- coreDrillTaskService.delByStartTimeAndEndTimeAndPlanIdList(planIdList, null, null);
|
|
|
-
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
- private void validatePlanForStandard(CoreDrillPlanUpdateDto request, CoreDrillPlan plan, String errorMsg, Integer type) {
|
|
|
- validateFieldForStandard(request.getPlanCycle(), plan.getPlanCycle(), errorMsg);
|
|
|
- validateFieldForStandard(request.getExecOrgType(), plan.getExecOrgType(), errorMsg);
|
|
|
- List<Long> execOrgIdList = coreDrillPlanToExecOrgMapper.selectOrgIdByPlanId(plan.getId());
|
|
|
- validateListForStandard(execOrgIdList, request.getPlanExecOrgIdList(), errorMsg);
|
|
|
- validateFieldForStandard(request.getRemark(), plan.getRemark(), errorMsg);
|
|
|
- validateFileListForStandard(request.getFileList(), JSON.parseArray(plan.getFileList(), String.class), errorMsg);
|
|
|
- if (plan.getPlanCycle().equals(EduTrainingPlanCycleEnum.NONE.getCode())) {
|
|
|
- validateFieldForStandard(request.getStartDate(), plan.getPlanStartDate(), errorMsg);
|
|
|
- validateFieldForStandard(request.getEndDate(), plan.getPlanEndDate(), errorMsg);
|
|
|
- }
|
|
|
- if (OrgTypeEnum.HANG_SHE.equals(OrgTypeEnum.getOrgTypeEnum(type))) {
|
|
|
- //标准计划可以修改名称,行社不允许修改名称
|
|
|
- validateFieldForStandard(request.getPlanName(), plan.getPlanName(), errorMsg);
|
|
|
- }
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
private void validateFieldForStandard(Object requestValue, Object planValue, String errorMessage) {
|
|
|
if (ObjectUtils.allNull(requestValue, planValue)) {
|
|
|
return;
|
|
|
@@ -645,18 +474,6 @@ public class CoreDrillPlanServiceImpl extends ServiceImpl<CoreDrillPlanMapper, C
|
|
|
|
|
|
}
|
|
|
|
|
|
- public void batchSavePlanToRole(List<Long> roleIdList, Long planId) {
|
|
|
- List<CoreDrillPlanToRole> planRoleList = new ArrayList<>();
|
|
|
- for (Long roleId : roleIdList) {
|
|
|
- CoreDrillPlanToRole role = new CoreDrillPlanToRole();
|
|
|
- role.setRoleId(roleId);
|
|
|
- role.setPlanId(planId);
|
|
|
- planRoleList.add(role);
|
|
|
- }
|
|
|
- if (CollectionUtil.isNotEmpty(planRoleList)) {
|
|
|
- coreDrillPlanToRoleService.saveBatch(planRoleList);
|
|
|
- }
|
|
|
- }
|
|
|
|
|
|
public void batchSavePlanToExecOrg(List<Long> orgIdList, Long planId) {
|
|
|
|
|
|
@@ -809,17 +626,6 @@ 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());
|
|
|
- }
|
|
|
-
|
|
|
private void checkPlanIsCreatingTask(Long planId, String msg) {
|
|
|
String redisKey = "Drill_Creating_Task" + planId;
|
|
|
Boolean hasKey = RedisUtils.hasKey(redisKey);
|