فهرست منبع

作息变更教育培训任务补录代码提交

jingyuanchao 2 سال پیش
والد
کامیت
44417ac089

+ 46 - 17
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/edu/service/impl/CoreEduTrainingTaskServiceImpl.java

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

+ 1 - 1
soc-modules/soc-modules-system/src/main/java/com/xunmei/system/listener/WorkTimeChangeEventListener.java

@@ -29,7 +29,7 @@ public class WorkTimeChangeEventListener implements ApplicationListener<WorkTime
     public void onApplicationEvent(WorkTimeChangeEvent event) {
 
         //remoteResumptionTaskService.rebuild(JSON.toJSONString(event), SecurityConstants.INNER);
-        //eduTrainingService.rebuild(JSON.toJSONString(event), SecurityConstants.INNER);
+        eduTrainingService.rebuild(JSON.toJSONString(event), SecurityConstants.INNER);
 
     }
 }