|
|
@@ -1,7 +1,6 @@
|
|
|
package com.xunmei.core.edu.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;
|
|
|
@@ -19,6 +18,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.compensate.dto.CompensateDto;
|
|
|
import com.xunmei.common.core.domain.edu.domain.CoreEduTrainingPlan;
|
|
|
import com.xunmei.common.core.domain.edu.domain.CoreEduTrainingPlanToExecOrg;
|
|
|
import com.xunmei.common.core.domain.edu.domain.CoreEduTrainingPlanToRole;
|
|
|
@@ -48,13 +48,9 @@ import com.xunmei.common.core.utils.DateUtils;
|
|
|
import com.xunmei.common.core.web.page.TableDataInfo;
|
|
|
import com.xunmei.common.redis.utils.RedisUtils;
|
|
|
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.edu.mapper.CoreEduTrainingPlanMapper;
|
|
|
-import com.xunmei.core.edu.mapper.CoreEduTrainingPlanToExecOrgMapper;
|
|
|
-import com.xunmei.core.edu.mapper.CoreEduTrainingPlanToRoleMapper;
|
|
|
-import com.xunmei.core.edu.mapper.CoreEduTrainingTaskMapper;
|
|
|
+import com.xunmei.core.edu.mapper.*;
|
|
|
import com.xunmei.core.edu.service.ICoreEduTrainingPlanService;
|
|
|
import com.xunmei.core.edu.service.ICoreEduTrainingPlanToExecOrgService;
|
|
|
import com.xunmei.core.edu.service.ICoreEduTrainingPlanToRoleService;
|
|
|
@@ -78,8 +74,6 @@ import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
import org.springframework.transaction.annotation.Propagation;
|
|
|
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.*;
|
|
|
@@ -112,6 +106,8 @@ public class CoreEduTrainingPlanServiceImpl extends ServiceImpl<CoreEduTrainingP
|
|
|
private ICoreEduTrainingTaskService coreEduTrainingTaskService;
|
|
|
@Autowired
|
|
|
private CoreEduTrainingTaskMapper coreEduTrainingTaskMapper;
|
|
|
+ @Autowired
|
|
|
+ private PhysicalDeleteMapper physicalDeleteMapper;
|
|
|
|
|
|
@Autowired
|
|
|
private RemoteOrgService orgService;
|
|
|
@@ -403,63 +399,26 @@ public class CoreEduTrainingPlanServiceImpl extends ServiceImpl<CoreEduTrainingP
|
|
|
validateFieldForStandard(request.getPlanCycle(), plan.getPlanCycle(), "当前状态仅允许修改任务名称");
|
|
|
validateFieldForStandard(request.getExecTimes(), plan.getExecTimes(), "当前状态仅允许修改任务名称");
|
|
|
validateFieldForStandard(request.getExecOrgType(), plan.getExecOrgType(), "当前状态仅允许修改任务名称");
|
|
|
- List<Long> execOrgIdList = coreEduTrainingPlanToExecOrgMapper.selectOrgIdByPlanId(plan.getId());
|
|
|
- validateListForStandard(execOrgIdList, request.getPlanExecOrgIdList(), "当前状态仅允许修改任务名称");
|
|
|
+ /*List<Long> execOrgIdList = coreEduTrainingPlanToExecOrgMapper.selectOrgIdByPlanId(plan.getId());
|
|
|
+ //validateListForStandard(execOrgIdList, request.getPlanExecOrgIdList(), "当前状态仅允许修改任务名称");*/
|
|
|
validateFieldForStandard(request.getRemark(), plan.getRemark(), "当前状态仅允许修改任务名称");
|
|
|
validateFileListForStandard(request.getFileList(), JSON.parseArray(plan.getFileList(), String.class), "当前状态仅允许修改任务名称");
|
|
|
plan.setPlanName(request.getPlanName());
|
|
|
- updateById(plan);
|
|
|
+ List<Long> list = baseMapper.selectIdByParentId(plan.getId());
|
|
|
+ if (ObjectUtil.isEmpty(list)){
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ physicalDeleteMapper.deletedEduPlanByIds(list);
|
|
|
+ coreEduTrainingPlanToExecOrgService.deleteByPlanIds(list);
|
|
|
|
|
|
- }
|
|
|
|
|
|
- private void updateCommonPlan(CoreEduTrainingPlan plan, CoreEduTrainingPlanEditDto request, DateRange range) {
|
|
|
- CoreEduTrainingPlan parentPlan = coreEduTrainingPlanMapper.selectOne(new LambdaQueryWrapper<CoreEduTrainingPlan>()
|
|
|
- .eq(CoreEduTrainingPlan::getId, plan.getParentId())
|
|
|
- .select(CoreEduTrainingPlan::getExecTimes));
|
|
|
- //使用中的普通计划
|
|
|
- if (parentPlan.getExecTimes() > request.getExecTimes()) {
|
|
|
- throw new RuntimeException("执行次数不能小于基准计划执行次数!");
|
|
|
- }
|
|
|
+ coreEduTrainingPlanToExecOrgMapper.deleteByMap(MapUtil.of("plan_id", plan.getId()));
|
|
|
+ batchSavePlanToExecOrg(request.getPlanExecOrgIdList(), plan.getId());
|
|
|
|
|
|
- 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, plan, errorMsg, sysOrg.getType());
|
|
|
- }
|
|
|
- doUpdatePlan(plan, request);
|
|
|
-
|
|
|
- final long done = coreEduTrainingTaskMapper.selectCount(new LambdaQueryWrapper<CoreEduTrainingTask>()
|
|
|
- .eq(CoreEduTrainingTask::getPlanId, plan.getId())
|
|
|
- .ge(CoreEduTrainingTask::getStartDate, range.getStartTime())
|
|
|
- .le(CoreEduTrainingTask::getEndDate, range.getEndTime())
|
|
|
- .in(CoreEduTrainingTask::getStatus, EduTrainingDoStatus.DONE.getCode(), EduTrainingDoStatus.OVERDUE.getCode()));
|
|
|
- //如果有一条状态等于已完成/已逾期的数据,那么就下个周期生效
|
|
|
- if (done > 0) {
|
|
|
- //任务已执行,下个周期生效
|
|
|
- return;
|
|
|
- }
|
|
|
- //如果没有,那就删除这个计划当前周期的所有任务,重新生成
|
|
|
- coreEduTrainingTaskService.delByStartTimeAndEndTimeAndPlanIdList(Arrays.asList(plan.getId()), range.getStartTime(), range.getEndTime());
|
|
|
- TransactionSynchronizationManager.registerSynchronization(new TransactionSynchronizationAdapter() {
|
|
|
- @Override
|
|
|
- public void afterCommit() {
|
|
|
- CompletableFuture.runAsync(() -> {
|
|
|
- //如果不是省联社或者办事处,状态启用,并且是无周期或者立即生效
|
|
|
- if (checkCanBuildTaskNow(plan)) {
|
|
|
- CoreEduTrainingPlanDataVo detailPlanData = getCoreEduTrainingPlanDataVo(plan.getId());
|
|
|
- coreEduTrainingTaskService.createTaskForNow(detailPlanData, plan.getStartDate(), plan.getEndDate());
|
|
|
- }
|
|
|
- }, threadPoolTaskExecutor);
|
|
|
- }
|
|
|
- });
|
|
|
+ updateById(plan);
|
|
|
}
|
|
|
|
|
|
+
|
|
|
private void doUpdatePlan(CoreEduTrainingPlan plan, CoreEduTrainingPlanEditDto request) {
|
|
|
BeanUtils.copyProperties(request, plan);
|
|
|
if (ObjectUtil.equal(request.getPlanCycle(), DrillPlanCycleEnum.NONE.getCode())) {
|
|
|
@@ -475,7 +434,7 @@ public class CoreEduTrainingPlanServiceImpl extends ServiceImpl<CoreEduTrainingP
|
|
|
List<Long> longs = baseMapper.selectAllIdByParentId(plan.getId());
|
|
|
if (!longs.isEmpty()) {
|
|
|
baseMapper.delByIds(longs);
|
|
|
- coreEduTrainingPlanToExecOrgService.deleteByParentId(longs);
|
|
|
+ coreEduTrainingPlanToExecOrgService.deleteByPlanIds(longs);
|
|
|
}
|
|
|
|
|
|
|
|
|
@@ -484,114 +443,6 @@ public class CoreEduTrainingPlanServiceImpl extends ServiceImpl<CoreEduTrainingP
|
|
|
coreEduTrainingPlanMapper.updateById(plan);
|
|
|
}
|
|
|
|
|
|
- private void updateStandardPlan(CoreEduTrainingPlan plan, CoreEduTrainingPlanEditDto request, DateRange range) {
|
|
|
-
|
|
|
- //使用中的标准计划
|
|
|
-
|
|
|
- Long planId = plan.getId();
|
|
|
- // 判断标准计划能否修改:存在下发的计划生成了任务且任务存在已执行
|
|
|
- Integer standardPlanHasDone = coreEduTrainingTaskMapper.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);
|
|
|
- coreEduTrainingPlanMapper.updatePlanName(plan.getId(), plan.getPlanName());
|
|
|
- coreEduTrainingTaskMapper.updateTaskNameByParentPlanId(planId, plan.getPlanName(), range.getStartTime(), range.getEndTime());
|
|
|
- } else {
|
|
|
- doUpdatePlan(plan, request);
|
|
|
- delAllByParentPlanId(plan);
|
|
|
-
|
|
|
- List<CoreEduTrainingPlan> planList = null;
|
|
|
- if (plan.getIssue() == 1) {
|
|
|
- planList = buildPlanData(plan, null, false, 0);
|
|
|
- } else {
|
|
|
- planList = ListUtil.list(true, plan);
|
|
|
- }
|
|
|
- //List<CoreEduTrainingPlan> planList = buildPlanData(plan, null, false);
|
|
|
- List<CoreEduTrainingPlan> finalPlanList = planList;
|
|
|
- TransactionSynchronizationManager.registerSynchronization(new TransactionSynchronizationAdapter() {
|
|
|
- @Override
|
|
|
- public void afterCommit() {
|
|
|
- for (CoreEduTrainingPlan trainingPlan : finalPlanList) {
|
|
|
- CompletableFuture.runAsync(() -> {
|
|
|
- //如果不是省联社或者办事处,状态启用,并且是无周期或者立即生效
|
|
|
- if (checkCanBuildTaskNow(plan)) {
|
|
|
- CoreEduTrainingPlanDataVo detailPlanData = getCoreEduTrainingPlanDataVo(trainingPlan.getId());
|
|
|
- coreEduTrainingTaskService.createTaskForNow(detailPlanData, plan.getStartDate(), plan.getEndDate());
|
|
|
- }
|
|
|
- }, threadPoolTaskExecutor);
|
|
|
- }
|
|
|
- }
|
|
|
- });
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
- //TODO 修改任务名称
|
|
|
- //coreEduTrainingTaskMapper.updateTaskNameByPlanId(planId, planName, plan.getStartDate(), plan.getEndDate());
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
- private void delAllByParentPlanId(CoreEduTrainingPlan plan) {
|
|
|
- List<Long> planIdList = coreEduTrainingPlanMapper.selectIdByParentId(plan.getId());
|
|
|
- if (ObjectUtil.isEmpty(planIdList)) {
|
|
|
- return;
|
|
|
- }
|
|
|
- // 下发给省联社/办事处/行社的计划 在下发时会把id设置为parentId,所以这里不需要删除
|
|
|
- if (plan.getId().equals(plan.getParentId())) {
|
|
|
- List<Long> list = new ArrayList<>(planIdList);
|
|
|
- list.remove(plan.getId());
|
|
|
- if (list.isEmpty()) {
|
|
|
- return;
|
|
|
- }
|
|
|
- coreEduTrainingPlanMapper.deleteBatchIds(list);
|
|
|
-
|
|
|
- coreEduTrainingPlanToRoleMapper.delete(new LambdaQueryWrapper<CoreEduTrainingPlanToRole>()
|
|
|
- .in(CoreEduTrainingPlanToRole::getPlanId, list));
|
|
|
- coreEduTrainingPlanToExecOrgMapper.delete(new LambdaQueryWrapper<CoreEduTrainingPlanToExecOrg>()
|
|
|
- .in(CoreEduTrainingPlanToExecOrg::getPlanId, list));
|
|
|
- }
|
|
|
-
|
|
|
- coreEduTrainingPlanToRoleMapper.delete(new LambdaQueryWrapper<CoreEduTrainingPlanToRole>()
|
|
|
- .in(CoreEduTrainingPlanToRole::getPlanId, planIdList));
|
|
|
- coreEduTrainingPlanToExecOrgMapper.delete(new LambdaQueryWrapper<CoreEduTrainingPlanToExecOrg>()
|
|
|
- .in(CoreEduTrainingPlanToExecOrg::getPlanId, planIdList));
|
|
|
-
|
|
|
- coreEduTrainingTaskService.delByStartTimeAndEndTimeAndPlanIdList(planIdList, null, null);
|
|
|
- }
|
|
|
-
|
|
|
- private void populateProperties(CoreEduTrainingPlan source, CoreEduTrainingPlan target) {
|
|
|
- target.setPlanName(source.getPlanName());
|
|
|
- target.setPlanCycle(source.getPlanCycle());
|
|
|
- target.setExecTimes(source.getExecTimes());
|
|
|
- target.setPlanStatus(source.getPlanStatus());
|
|
|
- target.setExecOrgType(source.getExecOrgType());
|
|
|
- target.setStartDate(source.getStartDate());
|
|
|
- target.setEndDate(source.getEndDate());
|
|
|
- target.setBuildTaskNow(source.getBuildTaskNow());
|
|
|
- target.setRemark(source.getRemark());
|
|
|
- target.setFileList(source.getFileList());
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
- private void validatePlanForStandard(CoreEduTrainingPlanEditDto request, CoreEduTrainingPlan plan, String errorMsg, Integer type) {
|
|
|
- validateFieldForStandard(request.getPlanCycle(), plan.getPlanCycle(), errorMsg);
|
|
|
- validateFieldForStandard(request.getExecOrgType(), plan.getExecOrgType(), errorMsg);
|
|
|
- List<Long> execOrgIdList = coreEduTrainingPlanToExecOrgMapper.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 (OrgTypeEnum.HANG_SHE.equals(OrgTypeEnum.getOrgTypeEnum(type))) {
|
|
|
- //标准计划可以修改名称,行社不允许修改名称
|
|
|
- validateFieldForStandard(request.getPlanName(), plan.getPlanName(), errorMsg);
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
private void validateFileListForStandard(List<String> requestFileList, List<String> sourceFileList, String errorMsg) {
|
|
|
if (ObjectUtil.isEmpty(requestFileList) && ObjectUtil.isEmpty(sourceFileList)) {
|
|
|
return;
|
|
|
@@ -773,7 +624,7 @@ public class CoreEduTrainingPlanServiceImpl extends ServiceImpl<CoreEduTrainingP
|
|
|
|
|
|
List<CoreEduTrainingPlan> planList = baseMapper.selectByParentId(planId);
|
|
|
if (planList.isEmpty()) {
|
|
|
- planList = buildPlanData(plan, new ArrayList<>(), true, status);
|
|
|
+ planList = buildPlanData(plan, true, status);
|
|
|
} else {
|
|
|
for (CoreEduTrainingPlan trainingPlan : planList) {
|
|
|
trainingPlan.setPlanStatus(EduTrainingPlanStatus.USING.getCode());
|
|
|
@@ -836,7 +687,7 @@ public class CoreEduTrainingPlanServiceImpl extends ServiceImpl<CoreEduTrainingP
|
|
|
return collect;
|
|
|
}
|
|
|
|
|
|
- private List<CoreEduTrainingPlan> buildPlanData(CoreEduTrainingPlan plan, List<CoreEduTrainingPlanToRole> planRoleList, Boolean isPublish, int status) {
|
|
|
+ private List<CoreEduTrainingPlan> buildPlanData(CoreEduTrainingPlan plan, Boolean isPublish, int status) {
|
|
|
/*if (ObjectUtil.isEmpty(planRoleList)) {
|
|
|
//获取执行角色
|
|
|
LambdaQueryWrapper<CoreEduTrainingPlanToRole> ros = new LambdaQueryWrapper<>();
|
|
|
@@ -913,7 +764,7 @@ public class CoreEduTrainingPlanServiceImpl extends ServiceImpl<CoreEduTrainingP
|
|
|
if (insertPlanRoleList.size() > 0) {
|
|
|
coreEduTrainingPlanToRoleService.saveBatch(insertPlanRoleList);
|
|
|
}*/
|
|
|
- if (list.size() > 0) {
|
|
|
+ if (!list.isEmpty()) {
|
|
|
this.saveBatch(list);
|
|
|
}
|
|
|
|