|
|
@@ -75,6 +75,7 @@ import java.time.format.DateTimeFormatter;
|
|
|
import java.util.*;
|
|
|
import java.util.concurrent.CompletableFuture;
|
|
|
import java.util.stream.Collectors;
|
|
|
+import java.util.stream.Stream;
|
|
|
|
|
|
|
|
|
/**
|
|
|
@@ -400,7 +401,12 @@ public class CoreEduTrainingTaskServiceImpl extends ServiceImpl<CoreEduTrainingT
|
|
|
end = DateUtil.endOfDay(end).setField(DateField.MILLISECOND, 0);
|
|
|
}
|
|
|
List<SysOrg> execOrgList = getExecOrgList(plan, start, end);
|
|
|
- saveTaskAndRoleData(plan, start, end, execOrgList);
|
|
|
+ try {
|
|
|
+ saveTaskAndRoleData(plan, start, end, execOrgList);
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.error("生成任务失败,{}", e.getMessage());
|
|
|
+ throw new RuntimeException(e);
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
private List<SysOrg> getExecOrgList(CoreEduTrainingPlanDataVo plan, Date start, Date end) {
|
|
|
@@ -439,7 +445,18 @@ public class CoreEduTrainingTaskServiceImpl extends ServiceImpl<CoreEduTrainingT
|
|
|
List<CoreEduTrainingTask> taskList = new ArrayList<>();
|
|
|
//List<CoreEduTrainingTaskToRole> taskRoleList = new ArrayList<>();
|
|
|
Map<Integer, DateRange> dateRangeMap = DateUtils.splitDateRange(start, end, plan.getExecTimes());
|
|
|
+ //获取dateRangeMap中最大和最小的时间
|
|
|
+ Date maxDateRange = dateRangeMap.get(dateRangeMap.size()).getEndTime();
|
|
|
+ Date minDateRange = dateRangeMap.get(1).getStartTime();
|
|
|
+ final List<Long> collect = orgList.stream().map(SysOrg::getId).collect(Collectors.toList());
|
|
|
Date date = new Date();
|
|
|
+ final List<CoreEduTrainingTask> trainingTaskList = baseMapper.selectList(new LambdaQueryWrapper<CoreEduTrainingTask>()
|
|
|
+ .in(CoreEduTrainingTask::getOrgId, collect)
|
|
|
+ .ge(CoreEduTrainingTask::getStartDate, minDateRange)
|
|
|
+ .le(CoreEduTrainingTask::getEndDate, maxDateRange)
|
|
|
+ .eq(CoreEduTrainingTask::getPlanId, plan.getId())
|
|
|
+ .select(CoreEduTrainingTask::getId, CoreEduTrainingTask::getStartDate, CoreEduTrainingTask::getEndDate, CoreEduTrainingTask::getPlanId)
|
|
|
+ );
|
|
|
for (SysOrg org : orgList) {
|
|
|
for (int i = 1; i <= plan.getExecTimes(); i++) {
|
|
|
final LocalDateTime time = DateUtils.toLocalDateTime(DateUtils.getPreciseTime(dateRangeMap.get(i).getEndTime()));
|
|
|
@@ -470,16 +487,16 @@ public class CoreEduTrainingTaskServiceImpl extends ServiceImpl<CoreEduTrainingT
|
|
|
trainingTask.setPdfUrl(null);
|
|
|
trainingTask.setCreateTime(date);
|
|
|
trainingTask.setUpdateTime(date);
|
|
|
- Long count = baseMapper.selectCount(new LambdaQueryWrapper<CoreEduTrainingTask>()
|
|
|
- .eq(CoreEduTrainingTask::getOrgId, org.getId())
|
|
|
- .eq(CoreEduTrainingTask::getStartDate, trainingTask.getStartDate())
|
|
|
- .eq(CoreEduTrainingTask::getEndDate, trainingTask.getEndDate())
|
|
|
- .eq(CoreEduTrainingTask::getPlanId, plan.getId())
|
|
|
- );
|
|
|
- if (count > 0) {
|
|
|
- continue;
|
|
|
+ final Optional<CoreEduTrainingTask> any = trainingTaskList.stream()
|
|
|
+ .filter(task -> task.getOrgId().equals(org.getId()))
|
|
|
+ .filter(task -> task.getStartDate().equals(trainingTask.getStartDate()))
|
|
|
+ .filter(task -> task.getEndDate().equals(trainingTask.getEndDate()))
|
|
|
+ .filter(task -> task.getPlanId().equals(trainingTask.getPlanId()))
|
|
|
+ .findAny();
|
|
|
+ if (!any.isPresent()) {
|
|
|
+ taskList.add(trainingTask);
|
|
|
}
|
|
|
- taskList.add(trainingTask);
|
|
|
+
|
|
|
/*for (CoreEduTrainingPlanToRole planToRole : planRoleList) {
|
|
|
CoreEduTrainingTaskToRole coreEduTrainingTaskToRole = new CoreEduTrainingTaskToRole();
|
|
|
coreEduTrainingTaskToRole.setEduTrainingTaskId(trainingTask.getId());
|
|
|
@@ -742,7 +759,7 @@ public class CoreEduTrainingTaskServiceImpl extends ServiceImpl<CoreEduTrainingT
|
|
|
//此处因为planService会导致循环依赖
|
|
|
final CoreEduTrainingPlanDataVo detailPlanData = coreEduTrainingPlanMapper.getDetailPlanData(plan.getId());
|
|
|
detailPlanData.setFileList(ObjectUtil.isNotEmpty(detailPlanData.getFile()) ? JSON.parseArray(detailPlanData.getFile(), String.class) : null);
|
|
|
- DateRange range = DateUtils.getStartAndEnd(finalDate, EduTrainingPlanCycleEnum.toCommmonEnum(plan.getPlanCycle()));
|
|
|
+ DateRange range = DateUtils.getStartAndEnd(finalDate, plan.getPlanCycle());
|
|
|
this.createTaskForNow(detailPlanData, range.getStartTime(), range.getEndTime());
|
|
|
}, threadPoolTaskExecutor);
|
|
|
|
|
|
@@ -861,30 +878,42 @@ public class CoreEduTrainingTaskServiceImpl extends ServiceImpl<CoreEduTrainingT
|
|
|
List<Long> delTaskIdList = taskList.stream()
|
|
|
.filter(task -> unWorkOrgIdList.contains(task.getOrgId()))
|
|
|
.filter(task -> task.getStatus().equals(EduTrainingDoStatus.WAIT_RECORDED.getCode()))
|
|
|
+ .filter(task -> !task.getPlanCycle().equals(EduTrainingPlanCycleEnum.NONE.getCode()))
|
|
|
.map(CoreEduTrainingTask::getId).collect(Collectors.toList());
|
|
|
//删除任务
|
|
|
delTaskByIdList(delTaskIdList);
|
|
|
}
|
|
|
|
|
|
|
|
|
-
|
|
|
//营业的数据
|
|
|
List<SysWorkTime> workTimeList = listMap.get(WORK);
|
|
|
if (ObjectUtil.isNotEmpty(workTimeList)) {
|
|
|
//营业的机构id
|
|
|
List<Long> workOrgIdList = workTimeList.stream().map(SysWorkTime::getOrgId).collect(Collectors.toList());
|
|
|
+ List<SysOrg> orgList = RemoteCallHandlerExecutor.executeRemoteCall(() -> orgService.selectParentHs(workOrgIdList, SecurityConstants.INNER), ErrorMsgConstants.QUERY_ORG_DATA_ERROR);
|
|
|
+ final List<Long> collect = orgList.stream().map(SysOrg::getId).collect(Collectors.toList());
|
|
|
//查询需要生成任务的机构的计划
|
|
|
- //每日的情况需要考虑到特殊日子,比如每月一号 一月一号等多周期重合的情况
|
|
|
//List<Integer> cycleList = DateUtils.checkDate(today);
|
|
|
- List<CoreEduTrainingPlan> planList = coreEduTrainingPlanMapper.selectList(new LambdaQueryWrapper<CoreEduTrainingPlan>()
|
|
|
+ List<CoreEduTrainingPlan> cyclePlanList = coreEduTrainingPlanMapper.selectList(new LambdaQueryWrapper<CoreEduTrainingPlan>()
|
|
|
.eq(CoreEduTrainingPlan::getStandard, 0)
|
|
|
.eq(CoreEduTrainingPlan::getPlanStatus, EduTrainingPlanStatus.USING.getCode())
|
|
|
- .in(CoreEduTrainingPlan::getPlanCycle, EduTrainingPlanCycleEnum.DAILY.getCode(),EduTrainingPlanCycleEnum.NONE.getCode())
|
|
|
+ .eq(CoreEduTrainingPlan::getPlanCycle, EduTrainingPlanCycleEnum.DAILY.getCode())
|
|
|
.eq(CoreEduTrainingPlan::getDeleted, 0)
|
|
|
- .in(CoreEduTrainingPlan::getBelongOrgId, workOrgIdList)
|
|
|
+ .in(CoreEduTrainingPlan::getBelongOrgId, collect)
|
|
|
.select(CoreEduTrainingPlan::getId, CoreEduTrainingPlan::getPlanCycle));
|
|
|
+ //无周期任务补录
|
|
|
+ /*List<CoreEduTrainingPlan> unCyclePlanList = coreEduTrainingPlanMapper.selectList(new LambdaQueryWrapper<CoreEduTrainingPlan>()
|
|
|
+ .eq(CoreEduTrainingPlan::getStandard, 0)
|
|
|
+ .eq(CoreEduTrainingPlan::getPlanStatus, EduTrainingPlanStatus.USING.getCode())
|
|
|
+ .eq(CoreEduTrainingPlan::getPlanCycle, EduTrainingPlanCycleEnum.NONE.getCode())
|
|
|
+ .eq(CoreEduTrainingPlan::getDeleted, 0)
|
|
|
+ .ge(CoreEduTrainingPlan::getStartDate, today)
|
|
|
+ .in(CoreEduTrainingPlan::getBelongOrgId, collect)
|
|
|
+ .select(CoreEduTrainingPlan::getId, CoreEduTrainingPlan::getPlanCycle));*/
|
|
|
+ List<CoreEduTrainingPlan> unCyclePlanList = new ArrayList<>();
|
|
|
+ final List<CoreEduTrainingPlan> list = Stream.of(cyclePlanList, unCyclePlanList).flatMap(Collection::stream).collect(Collectors.toList());
|
|
|
//此list中Plan对象仅id与planCycle字段有值,
|
|
|
- buildTaskByPlan(planList, today);
|
|
|
+ buildTaskByPlan(list, today);
|
|
|
}
|
|
|
|
|
|
}
|