|
|
@@ -30,6 +30,7 @@ import com.xunmei.common.core.domain.drill.vo.CoreDrillPlanDataVo;
|
|
|
import com.xunmei.common.core.domain.drill.vo.CoreDrillPlanDetailVo;
|
|
|
import com.xunmei.common.core.domain.drill.vo.CoreDrillPlanPageVo;
|
|
|
import com.xunmei.common.core.domain.drill.vo.CoreDrillPlanRoleVo;
|
|
|
+import com.xunmei.common.core.domain.edu.domain.CoreEduTrainingPlan;
|
|
|
import com.xunmei.common.core.domain.reminder.domain.CoreReminderSchedule;
|
|
|
import com.xunmei.common.core.domain.reminder.vo.CoreReminderConfigurationFullVo;
|
|
|
import com.xunmei.common.core.enums.BusinessPlanType;
|
|
|
@@ -40,6 +41,7 @@ import com.xunmei.common.core.enums.drill.DrillPlanCycleEnum;
|
|
|
import com.xunmei.common.core.enums.drill.DrillPlanStatus;
|
|
|
import com.xunmei.common.core.enums.edu.EduTrainingDoStatus;
|
|
|
import com.xunmei.common.core.enums.edu.EduTrainingPlanCycleEnum;
|
|
|
+import com.xunmei.common.core.enums.edu.EduTrainingPlanStatus;
|
|
|
import com.xunmei.common.core.exception.ServiceException;
|
|
|
import com.xunmei.common.core.thread.ThreadPoolConfig;
|
|
|
import com.xunmei.common.core.util.BeanHelper;
|
|
|
@@ -165,7 +167,7 @@ public class CoreDrillPlanServiceImpl extends ServiceImpl<CoreDrillPlanMapper, C
|
|
|
final Integer hasTask = coreDrillTaskMapper.checkHasTaskByPlanParentId(record.getId());
|
|
|
record.setHaTask(hasTask);
|
|
|
}
|
|
|
- if (Objects.equals(record.getPlanCycle(), DrillPlanCycleEnum.NONE.getCode())){
|
|
|
+ if (Objects.equals(record.getPlanCycle(), DrillPlanCycleEnum.NONE.getCode())) {
|
|
|
final Integer done = coreDrillTaskMapper.checkHasTaskIsDoneByPlanIdOrParentId(record.getId());
|
|
|
record.setDone(done);
|
|
|
}
|
|
|
@@ -198,7 +200,7 @@ public class CoreDrillPlanServiceImpl extends ServiceImpl<CoreDrillPlanMapper, C
|
|
|
final Integer done = coreDrillTaskMapper.checkHasTaskIsDoneByPlanParentId(plan.getId());
|
|
|
vo.setDone(done);
|
|
|
}
|
|
|
- if (Objects.equals(plan.getPlanCycle(), DrillPlanCycleEnum.NONE.getCode())){
|
|
|
+ if (Objects.equals(plan.getPlanCycle(), DrillPlanCycleEnum.NONE.getCode())) {
|
|
|
final Integer done = coreDrillTaskMapper.checkHasTaskIsDoneByPlanIdOrParentId(plan.getId());
|
|
|
vo.setDone(done);
|
|
|
}
|
|
|
@@ -326,13 +328,9 @@ public class CoreDrillPlanServiceImpl extends ServiceImpl<CoreDrillPlanMapper, C
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
public void updateCoreDrillPlan(CoreDrillPlanUpdateDto request) {
|
|
|
final CoreDrillPlan plan = getById(request.getId());
|
|
|
- /* DateRange range;
|
|
|
- if (ObjectUtil.equal(plan.getPlanCycle(), EduTrainingPlanCycleEnum.NONE.getCode())) {
|
|
|
- range = new DateRange(DateUtil.beginOfDay(plan.getStartDate()), DateUtil.endOfDay(plan.getEndDate()));
|
|
|
- } else {
|
|
|
- range = DateUtils.getStartAndEnd(new Date(), plan.getPlanCycle());
|
|
|
- }*/
|
|
|
-
|
|
|
+ if (plan == null) {
|
|
|
+ throw new RuntimeException("计划不存在!");
|
|
|
+ }
|
|
|
plan.setUpdateTime(DateUtils.getNowDate());
|
|
|
//现在能被编辑的计划一定是标准计划
|
|
|
//updateStandardPlan(plan, request, range);
|
|
|
@@ -396,7 +394,7 @@ public class CoreDrillPlanServiceImpl extends ServiceImpl<CoreDrillPlanMapper, C
|
|
|
}
|
|
|
validateFieldForStandard(request.getPlanCycle(), plan.getPlanCycle(), "当前状态仅允许修改任务名称与机构信息");
|
|
|
validateFieldForStandard(request.getExecTimes(), plan.getExecTimes(), "当前状态仅允许修改任务名称与机构信息");
|
|
|
- if (ObjectUtil.equal(request.getPlanStatus(), DrillPlanStatus.USING.getCode())){
|
|
|
+ if (ObjectUtil.equal(request.getPlanStatus(), DrillPlanStatus.USING.getCode())) {
|
|
|
validateFieldForStandard(request.getExecOrgType(), plan.getExecOrgType(), "当前状态仅允许修改任务名称与机构信息");
|
|
|
}
|
|
|
/* List<Long> execOrgIdList = coreDrillPlanToExecOrgMapper.selectOrgIdByPlanId(plan.getId());
|
|
|
@@ -404,13 +402,8 @@ public class CoreDrillPlanServiceImpl extends ServiceImpl<CoreDrillPlanMapper, C
|
|
|
validateFieldForStandard(request.getRemark(), plan.getRemark(), "当前状态仅允许修改任务名称与机构信息");
|
|
|
validateFileListForStandard(request.getFileList(), JSON.parseArray(plan.getFileList(), String.class), "当前状态仅允许修改任务名称与机构信息");
|
|
|
plan.setPlanName(request.getPlanName());
|
|
|
- if (ObjectUtil.equal(request.getPlanStatus(), DrillPlanStatus.DELETED.getCode())){
|
|
|
+ if (ObjectUtil.equal(request.getPlanStatus(), DrillPlanStatus.DELETED.getCode())) {
|
|
|
plan.setExecOrgType(request.getExecOrgType());
|
|
|
- List<Long> list = baseMapper.selectIdByParentId(plan.getId());
|
|
|
- if (ObjectUtil.isNotEmpty(list)){
|
|
|
- physicalDeleteMapper.deletedDrillPlanByIds(list);
|
|
|
- coreDrillPlanToExecOrgService.deleteByPlanIds(list);
|
|
|
- }
|
|
|
coreDrillPlanToExecOrgMapper.deleteByMap(MapUtil.of("plan_id", plan.getId()));
|
|
|
batchSavePlanToExecOrg(request.getPlanExecOrgIdList(), plan.getId());
|
|
|
}
|
|
|
@@ -455,6 +448,7 @@ public class CoreDrillPlanServiceImpl extends ServiceImpl<CoreDrillPlanMapper, C
|
|
|
target.setRemark(source.getRemark());
|
|
|
target.setFileList(source.getFileList());
|
|
|
}
|
|
|
+
|
|
|
private void validateFieldForStandard(Object requestValue, Object planValue, String errorMessage) {
|
|
|
if (ObjectUtils.allNull(requestValue, planValue)) {
|
|
|
return;
|
|
|
@@ -488,7 +482,9 @@ public class CoreDrillPlanServiceImpl extends ServiceImpl<CoreDrillPlanMapper, C
|
|
|
|
|
|
|
|
|
public void batchSavePlanToExecOrg(List<Long> orgIdList, Long planId) {
|
|
|
-
|
|
|
+ if (ObjectUtil.isEmpty(orgIdList) || planId == null) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
List<CoreDrillPlanToExecOrg> planOrgList = new ArrayList<CoreDrillPlanToExecOrg>();
|
|
|
for (Long orgId : orgIdList) {
|
|
|
CoreDrillPlanToExecOrg org = new CoreDrillPlanToExecOrg();
|
|
|
@@ -496,9 +492,7 @@ public class CoreDrillPlanServiceImpl extends ServiceImpl<CoreDrillPlanMapper, C
|
|
|
org.setPlanId(planId);
|
|
|
planOrgList.add(org);
|
|
|
}
|
|
|
- if (ObjectUtil.isNotEmpty(planOrgList)) {
|
|
|
- coreDrillPlanToExecOrgService.saveBatch(planOrgList);
|
|
|
- }
|
|
|
+ coreDrillPlanToExecOrgService.saveBatch(planOrgList);
|
|
|
|
|
|
}
|
|
|
|
|
|
@@ -586,7 +580,7 @@ public class CoreDrillPlanServiceImpl extends ServiceImpl<CoreDrillPlanMapper, C
|
|
|
|
|
|
|
|
|
final CompletableFuture<List<CoreDrillPlan>> planListFuture = CompletableFuture.supplyAsync(() -> {
|
|
|
- List<CoreDrillPlan> planList = baseMapper.selectByParentId(planId);
|
|
|
+ /*List<CoreDrillPlan> planList = baseMapper.selectByParentId(planId);
|
|
|
if (planList.isEmpty()) {
|
|
|
planList = buildPlanData(plan, new ArrayList<>(), true, status);
|
|
|
} else {
|
|
|
@@ -596,11 +590,18 @@ public class CoreDrillPlanServiceImpl extends ServiceImpl<CoreDrillPlanMapper, C
|
|
|
drillPlan.setPublishTime(new Date());
|
|
|
updateById(drillPlan);
|
|
|
}
|
|
|
- /* planList.forEach(plan1 -> plan1.setPlanStatus(EduTrainingPlanStatus.USING.getCode()));
|
|
|
- List<Long> collect = planList.stream().map(CoreDrillPlan::getId).collect(Collectors.toList());
|
|
|
- coreDrillPlanMapper.updatePlanStatusByIdList(collect, EduTrainingPlanStatus.USING.getCode());*/
|
|
|
+ }*/
|
|
|
+ //下发时根据父计划重新生成所有需要生成的子计划,判断如果有子计划已经存在于数据库中,就无需再次生成,
|
|
|
+ // 同时有已经存在于数据库的子计划但此次下发不在下发的列表的中的,需要逻辑删除
|
|
|
+ final List<CoreDrillPlan> neewPlanList = buildPlanData(plan, status);
|
|
|
+ final List<CoreDrillPlan> oldPlanList = baseMapper.selectByParentId(plan.getId());
|
|
|
+ for (CoreDrillPlan oldPlan : oldPlanList) {
|
|
|
+ final List<Long> neewPlanIdList = neewPlanList.stream().map(CoreDrillPlan::getBelongOrgId).distinct().collect(toList());
|
|
|
+ if (!neewPlanIdList.contains(oldPlan.getBelongOrgId())) {
|
|
|
+ baseMapper.deleteById(oldPlan.getId());
|
|
|
+ }
|
|
|
}
|
|
|
- return planList;
|
|
|
+ return neewPlanList;
|
|
|
}, threadPoolTaskExecutor);
|
|
|
|
|
|
planListFuture.thenAcceptAsync((result) -> {
|
|
|
@@ -651,10 +652,7 @@ public class CoreDrillPlanServiceImpl extends ServiceImpl<CoreDrillPlanMapper, C
|
|
|
public int revocationPlan(Long planId) {
|
|
|
checkPlanIsCreatingTask(planId, "撤回");
|
|
|
List<Long> list = coreDrillPlanMapper.selectIdByParentId(planId);
|
|
|
- int isExecute = coreDrillTaskMapper.selectCount(new LambdaQueryWrapper<CoreDrillTask>()
|
|
|
- .in(CoreDrillTask::getPlanId, list)
|
|
|
- .in(CoreDrillTask::getStatus, DrillDoStatus.DONE.getCode(),DrillDoStatus.WAIT_COMMENT.getCode()))
|
|
|
- .intValue();
|
|
|
+ int isExecute = coreDrillTaskMapper.checkHasTaskIsDoneByPlanParentId(planId);
|
|
|
//计划下没有已完成:删除所有任务数据和子计划,计划状态回到草稿状态。
|
|
|
if (isExecute < 1/* || EduTrainingPlanCycleEnum.NONE.getCode().equals(plan.getPlanCycle())*/) {
|
|
|
// 删除所有任务数据
|
|
|
@@ -721,13 +719,7 @@ public class CoreDrillPlanServiceImpl extends ServiceImpl<CoreDrillPlanMapper, C
|
|
|
);
|
|
|
}
|
|
|
|
|
|
- private List<CoreDrillPlan> buildPlanData(CoreDrillPlan plan, List<CoreDrillPlanToRole> planRoleList, boolean isPublish, int status) {
|
|
|
- /*if (ObjectUtil.isEmpty(planRoleList)) {
|
|
|
- //获取执行角色
|
|
|
- LambdaQueryWrapper<CoreDrillPlanToRole> ros = new LambdaQueryWrapper<>();
|
|
|
- ros.eq(CoreDrillPlanToRole::getPlanId, plan.getId());
|
|
|
- planRoleList = coreDrillPlanToRoleMapper.selectList(ros);
|
|
|
- }*/
|
|
|
+ private List<CoreDrillPlan> buildPlanData(CoreDrillPlan plan, int status) {
|
|
|
List<SysOrgVO> all = RedisUtils.getCacheList(CacheConstants.ORG_CACHE_LIST_KEY);
|
|
|
all = all.stream().filter(o -> ObjectUtil.isNotEmpty(o.getPath())).collect(toList());
|
|
|
final SysOrgVO planCreateOrg = all.stream().filter(org -> org.getId().equals(plan.getCreateOrgId())).findFirst().get();
|
|
|
@@ -750,7 +742,10 @@ public class CoreDrillPlanServiceImpl extends ServiceImpl<CoreDrillPlanMapper, C
|
|
|
List<SysOrgVO> publishOrgList = this.getPlanPublishOrgList(planExecOrgList);
|
|
|
List<CoreDrillPlanToExecOrg> planToExecOrgs = new ArrayList<>();
|
|
|
List<CoreDrillPlan> list = new ArrayList<>();
|
|
|
+ //子计划id,查询出所有已生成的子计划,先删除再重新构建
|
|
|
for (SysOrgVO sysOrg : publishOrgList) {
|
|
|
+ //如果需要生成的子计划已经存在,说明可能是经过编辑的,所以把状态修改回来就行
|
|
|
+ if (checkExitAndFlushExecOrg(plan, planExecOrgList, list, sysOrg)) continue;
|
|
|
if (checkOrgType(plan.getExecOrgType())) {
|
|
|
//走到这说明,执行机构中都是省联社/办事处 这些不需要子机话,所以直接返回,
|
|
|
//但是如果后期扩展多选执行机构类型,此处将不再适用
|
|
|
@@ -768,7 +763,7 @@ public class CoreDrillPlanServiceImpl extends ServiceImpl<CoreDrillPlanMapper, C
|
|
|
drillPlan.setStandard(0);
|
|
|
drillPlan.setIssue(0);
|
|
|
drillPlan.setBeIssue(1);
|
|
|
- drillPlan.setPlanStatus(isPublish ? DrillPlanStatus.USING.getCode() : plan.getPlanStatus());
|
|
|
+ drillPlan.setPlanStatus(DrillPlanStatus.USING.getCode());
|
|
|
drillPlan.setParentId(plan.getId());
|
|
|
drillPlan.setCreateTime(new Date());
|
|
|
drillPlan.setUpdateTime(new Date());
|
|
|
@@ -807,6 +802,34 @@ public class CoreDrillPlanServiceImpl extends ServiceImpl<CoreDrillPlanMapper, C
|
|
|
return list;
|
|
|
}
|
|
|
|
|
|
+
|
|
|
+ private boolean checkExitAndFlushExecOrg(CoreDrillPlan plan, List<SysOrgVO> planToExecOrgs, List<CoreDrillPlan> list, SysOrgVO sysOrg) {
|
|
|
+ CoreDrillPlan oldPlan = getByOrgIdAndParentId(plan.getId(), sysOrg.getId());
|
|
|
+ if (oldPlan != null) {
|
|
|
+ oldPlan.setDeleted(0);
|
|
|
+ coreDrillPlanToExecOrgMapper.deleteByMap(MapUtil.of("plan_id", oldPlan.getId()));
|
|
|
+ if (planToExecOrgs.size() > 0) {
|
|
|
+ final List<Long> collect = planToExecOrgs.stream().map(SysOrgVO::getId).distinct().collect(toList());
|
|
|
+ batchSavePlanToExecOrg(collect, oldPlan.getId());
|
|
|
+ }
|
|
|
+ oldPlan.setPlanName(plan.getPlanName());
|
|
|
+ oldPlan.setPlanStatus(DrillPlanStatus.USING.getCode());
|
|
|
+ oldPlan.setBuildTaskNow(plan.getBuildTaskNow());
|
|
|
+ oldPlan.setPublishTime(new Date());
|
|
|
+ oldPlan.setUpdateTime(new Date());
|
|
|
+ updatePlanTime(oldPlan, plan.getBuildTaskNow());
|
|
|
+ baseMapper.updateCoreDrillPlan(oldPlan);
|
|
|
+ list.add(oldPlan);
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ private CoreDrillPlan getByOrgIdAndParentId(Long parentId, Long orgId) {
|
|
|
+
|
|
|
+ return baseMapper.selectByParentIdAndOrgId(parentId, orgId);
|
|
|
+ }
|
|
|
+
|
|
|
private List<SysOrgVO> getPlanExecOrg(CoreDrillPlan plan, List<SysOrgVO> all) {
|
|
|
QueryWrapper<CoreDrillPlanToExecOrg> eos = new QueryWrapper<>();
|
|
|
eos.lambda().eq(CoreDrillPlanToExecOrg::getPlanId, plan.getId());
|