|
|
@@ -31,7 +31,10 @@ import com.xunmei.common.core.enums.CycleCommonEnum;
|
|
|
import com.xunmei.common.core.enums.OrgTypeEnum;
|
|
|
import com.xunmei.common.core.enums.RegisterBookType;
|
|
|
import com.xunmei.common.core.enums.drill.*;
|
|
|
+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.event.WorkTimeChangeEvent;
|
|
|
import com.xunmei.common.core.exception.SystemException;
|
|
|
import com.xunmei.common.core.utils.DateUtils;
|
|
|
import com.xunmei.common.core.web.domain.AjaxResult;
|
|
|
@@ -68,13 +71,14 @@ import java.io.File;
|
|
|
import java.math.BigDecimal;
|
|
|
import java.math.RoundingMode;
|
|
|
import java.net.URLEncoder;
|
|
|
+import java.time.LocalDate;
|
|
|
import java.time.LocalDateTime;
|
|
|
+import java.time.format.DateTimeFormatter;
|
|
|
import java.util.*;
|
|
|
import java.util.concurrent.CompletableFuture;
|
|
|
import java.util.stream.Collectors;
|
|
|
import java.util.stream.Stream;
|
|
|
|
|
|
-import static com.xunmei.core.edu.service.impl.CoreEduTrainingTaskServiceImpl.WORK;
|
|
|
|
|
|
|
|
|
/**
|
|
|
@@ -112,7 +116,8 @@ public class CoreDrillTaskServiceImpl extends ServiceImpl<CoreDrillTaskMapper, C
|
|
|
|
|
|
@Autowired
|
|
|
private RemoteDictDataService remoteDictDataService;
|
|
|
-
|
|
|
+ public static final long UN_WORK = 0L;
|
|
|
+ public static final long WORK = 1L;
|
|
|
|
|
|
@Autowired
|
|
|
@Qualifier(ThreadPoolConfig.SOC_EXECUTOR)
|
|
|
@@ -560,8 +565,12 @@ public class CoreDrillTaskServiceImpl extends ServiceImpl<CoreDrillTaskMapper, C
|
|
|
final Map<Long, List<SysWorkTime>> listMap = workTimeList.stream().collect(Collectors.groupingBy(SysWorkTime::getOrgId));
|
|
|
|
|
|
for (SysOrg org : orgList) {
|
|
|
- final List<SysWorkTime> sysWorkTimes = OrgTypeEnum.YINGYE_WANGDIAN.getCode().equals(org.getType()) ? listMap.get(org.getId()) : null;
|
|
|
- final Map<Short, DateRange> rangeMap = splitTaskTime(plan.getExecTimes().shortValue(), DrillPlanCycleEnum.toCommonEnum(plan.getPlanCycle()), start, end, sysWorkTimes);
|
|
|
+ final Map<Short, DateRange> rangeMap;
|
|
|
+ if (OrgTypeEnum.YINGYE_WANGDIAN.getCode().equals(org.getType()) && ObjectUtil.isNotEmpty(listMap.get(org.getId()))) {
|
|
|
+ rangeMap = splitTaskTime(plan.getExecTimes().shortValue(), DrillPlanCycleEnum.toCommonEnum(plan.getPlanCycle()), start, end, listMap.get(org.getId()));
|
|
|
+ } else {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
int x = 0;
|
|
|
for (Map.Entry<Short, DateRange> rangeEntry : rangeMap.entrySet()) {
|
|
|
final Short key = rangeEntry.getKey();
|
|
|
@@ -1108,6 +1117,376 @@ public class CoreDrillTaskServiceImpl extends ServiceImpl<CoreDrillTaskMapper, C
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
+ public void taskChangeForTimeWorkChange(WorkTimeChangeEvent event) {
|
|
|
+ String date = LocalDate.now().format(DateTimeFormatter.ofPattern(Constants.DAILY_FORMAT));
|
|
|
+ final List<SysWorkTime> dataList = event.getDataList();
|
|
|
+ final List<Date> collect = dataList.stream().map(SysWorkTime::getYmdDate).distinct().collect(Collectors.toList());
|
|
|
+ Date now = new Date();
|
|
|
+ for (EduTrainingPlanCycleEnum value : EduTrainingPlanCycleEnum.values()) {
|
|
|
+ switch (value) {
|
|
|
+ /*case DAILY:
|
|
|
+ final Optional<SysWorkTime> any = dataList.stream()
|
|
|
+ .filter(time -> DateUtils.isSameDay(time.getYmdDate(), new Date()))
|
|
|
+ .findAny();
|
|
|
+ if (!any.isPresent()) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ List<SysWorkTime> dailyFutureWorkTime = selectWorkTimeList(now, DrillPlanCycleEnum.DAILY, event);
|
|
|
+ dealTimeWorkChangeForDaily(event, date, dailyFutureWorkTime);
|
|
|
+ break;
|
|
|
+ case WEEKLY:
|
|
|
+ List<SysWorkTime> weeklyFutureWorkTime = selectWorkTimeList(now, DrillPlanCycleEnum.WEEKLY, event);
|
|
|
+ dealTimeWorkChangeForWeekly(event, date, weeklyFutureWorkTime);
|
|
|
+ break;
|
|
|
+ case MONTHLY:
|
|
|
+ List<SysWorkTime> monthlyFutureWorkTime = selectWorkTimeList(now, DrillPlanCycleEnum.MONTHLY, event);
|
|
|
+ dealTimeWorkChangeForMonthly(event, date, monthlyFutureWorkTime);
|
|
|
+ break;*/
|
|
|
+ case QUARTERLY:
|
|
|
+ List<SysWorkTime> quarterlyFutureWorkTime = selectWorkTimeList(now, DrillPlanCycleEnum.QUARTERLY, event);
|
|
|
+ dealTimeWorkChangeForQuarterly(event, date, quarterlyFutureWorkTime);
|
|
|
+ break;
|
|
|
+ case HALF_YEARLY:
|
|
|
+ List<SysWorkTime> halfYearlyFutureWorkTime = selectWorkTimeList(now, DrillPlanCycleEnum.HALF_YEARLY, event);
|
|
|
+ dealTimeWorkChangeForHalfYearly(event, date, halfYearlyFutureWorkTime);
|
|
|
+ break;
|
|
|
+ case YEARLY:
|
|
|
+ List<SysWorkTime> yearlyFutureWorkTime = selectWorkTimeList(now, DrillPlanCycleEnum.YEARLY, event);
|
|
|
+ dealTimeWorkChangeForYearly(event, date, yearlyFutureWorkTime);
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ private void dealTimeWorkChangeForDaily(WorkTimeChangeEvent event, String todayStr, List<SysWorkTime> futureWorkTime) {
|
|
|
+ DateTime today = DateUtil.parse(todayStr, Constants.DAILY_FORMAT);
|
|
|
+ List<Long> orgIds = event.getOrgIds();
|
|
|
+ //查询机构当天是否存在任务
|
|
|
+ //因为是每日,每日的任务都是在当天凌晨生成,所以这里只考虑今天的任务情况就行
|
|
|
+ List<CoreDrillTask> taskList = lambdaQuery()
|
|
|
+ .in(CoreDrillTask::getPlanCycle, EduTrainingPlanCycleEnum.DAILY.getCode(), EduTrainingPlanCycleEnum.NONE.getCode())
|
|
|
+ .like(CoreDrillTask::getStartDate, todayStr)
|
|
|
+ .in(CoreDrillTask::getOrgId, orgIds)
|
|
|
+ .select(CoreDrillTask::getId, CoreDrillTask::getOrgId,
|
|
|
+ CoreDrillTask::getPlanCycle, CoreDrillTask::getStatus)
|
|
|
+ .list();
|
|
|
+ //根据营业歇业分组
|
|
|
+ Map<Long, List<SysWorkTime>> listMap = futureWorkTime.stream().collect(Collectors.groupingBy(SysWorkTime::getIsEnable));
|
|
|
+ //歇业的数据
|
|
|
+ List<SysWorkTime> unWorkTimeList = listMap.get(UN_WORK);
|
|
|
+ if (ObjectUtil.isNotEmpty(unWorkTimeList)) {
|
|
|
+ //获取歇业的机构信息
|
|
|
+ List<Long> unWorkOrgIdList = unWorkTimeList.stream().map(SysWorkTime::getOrgId).collect(Collectors.toList());
|
|
|
+ //删除已经歇业且未执行的任务
|
|
|
+ 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(CoreDrillTask::getId).collect(Collectors.toList());
|
|
|
+ //删除任务
|
|
|
+ delTaskByIdList(delTaskIdList);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ //营业的数据
|
|
|
+ List<SysWorkTime> workTimeList = listMap.get(WORK);
|
|
|
+ if (ObjectUtil.isNotEmpty(workTimeList)) {
|
|
|
+
|
|
|
+ //查询需要生成任务的机构的计划
|
|
|
+ //List<Integer> cycleList = DateUtils.checkDate(today);
|
|
|
+ final List<CoreDrillPlan> cyclePlanList = selectPlanList(workTimeList);
|
|
|
+ //无周期任务补录
|
|
|
+ /*List<CoreDrillPlan> unCyclePlanList = CoreDrillPlanMapper.selectList(new LambdaQueryWrapper<CoreDrillPlan>()
|
|
|
+ .eq(CoreDrillPlan::getStandard, 0)
|
|
|
+ .eq(CoreDrillPlan::getPlanStatus, EduTrainingPlanStatus.USING.getCode())
|
|
|
+ .eq(CoreDrillPlan::getPlanCycle, EduTrainingPlanCycleEnum.NONE.getCode())
|
|
|
+ .eq(CoreDrillPlan::getDeleted, 0)
|
|
|
+ .ge(CoreDrillPlan::getStartDate, today)
|
|
|
+ .in(CoreDrillPlan::getBelongOrgId, collect)
|
|
|
+ .select(CoreDrillPlan::getId, CoreDrillPlan::getPlanCycle));*/
|
|
|
+ List<CoreDrillPlan> unCyclePlanList = new ArrayList<>();
|
|
|
+ final List<CoreDrillPlan> list = Stream.of(cyclePlanList, unCyclePlanList).flatMap(Collection::stream).collect(Collectors.toList());
|
|
|
+ //此list中Plan对象仅id与planCycle字段有值,
|
|
|
+ buildTaskByPlan(list, today);
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ private List<CoreDrillPlan> selectPlanList(List<SysWorkTime> 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());
|
|
|
+ return coreDrillPlanMapper.selectList(new LambdaQueryWrapper<CoreDrillPlan>()
|
|
|
+ // .eq(CoreDrillPlan::getStandard, 0)
|
|
|
+ .eq(CoreDrillPlan::getPlanStatus, EduTrainingPlanStatus.USING.getCode())
|
|
|
+ .eq(CoreDrillPlan::getPlanCycle, EduTrainingPlanCycleEnum.DAILY.getCode())
|
|
|
+ .eq(CoreDrillPlan::getDeleted, 0)
|
|
|
+ .in(CoreDrillPlan::getBelongOrgId, collect)
|
|
|
+ .select(CoreDrillPlan::getId, CoreDrillPlan::getPlanCycle,CoreDrillPlan::getPlanName));
|
|
|
+ }
|
|
|
+
|
|
|
+ private void dealTimeWorkChangeForWeekly(WorkTimeChangeEvent event, String todayStr, List<SysWorkTime> futureWorkTime) {
|
|
|
+ List<Long> orgIds = event.getOrgIds();
|
|
|
+ DateTime today = DateUtil.parse(todayStr, Constants.DAILY_FORMAT);
|
|
|
+ DateRange dateRange = DateUtils.getStartAndEnd(today, CycleCommonEnum.WEEKLY);
|
|
|
+ //查询机构当周是否存在任务
|
|
|
+ List<CoreDrillTask> taskList = lambdaQuery()
|
|
|
+ .eq(CoreDrillTask::getPlanCycle, EduTrainingPlanCycleEnum.WEEKLY.getCode())
|
|
|
+ .ge(CoreDrillTask::getStartDate, dateRange.getStartTime())
|
|
|
+ .le(CoreDrillTask::getEndDate, dateRange.getEndTime())
|
|
|
+ .in(CoreDrillTask::getOrgId, orgIds)
|
|
|
+ .select(CoreDrillTask::getId, CoreDrillTask::getOrgId, CoreDrillTask::getStatus)
|
|
|
+ .list();
|
|
|
+ Map<Long, List<SysWorkTime>> orgWorkTimeMap = futureWorkTime.stream().collect(Collectors.groupingBy(SysWorkTime::getOrgId));
|
|
|
+ List<Long> workOrgIdList = new ArrayList<>();
|
|
|
+ //歇业的数据
|
|
|
+ List<Long> unWorkOrgIdList = new ArrayList<>();
|
|
|
+ for (Map.Entry<Long, List<SysWorkTime>> entry : orgWorkTimeMap.entrySet()) {
|
|
|
+ List<SysWorkTime> weeklyWorkTimeList = entry.getValue();
|
|
|
+ //如果有任何一天营业,那么就应该生成该周期的任务
|
|
|
+ boolean match = weeklyWorkTimeList.stream().anyMatch(time -> ObjectUtil.equal(time.getIsEnable(), WORK));
|
|
|
+ if (match) {
|
|
|
+ workOrgIdList.add(entry.getKey());
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ unWorkOrgIdList.add(entry.getKey());
|
|
|
+ }
|
|
|
+ //删除已经歇业且未执行的任务
|
|
|
+ List<Long> delTaskIdList = taskList.stream()
|
|
|
+ .filter(task -> unWorkOrgIdList.contains(task.getOrgId()))
|
|
|
+ .filter(task -> task.getStatus().equals(EduTrainingDoStatus.WAIT_RECORDED.getCode()))
|
|
|
+ .map(CoreDrillTask::getId).collect(Collectors.toList());
|
|
|
+ //删除任务
|
|
|
+ delTaskByIdList(delTaskIdList);
|
|
|
+
|
|
|
+ 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<CoreDrillPlan> planList = coreDrillPlanMapper.selectList(new LambdaQueryWrapper<CoreDrillPlan>()
|
|
|
+ //.eq(CoreDrillPlan::getStandard, 0)
|
|
|
+ .eq(CoreDrillPlan::getPlanStatus, EduTrainingPlanStatus.USING.getCode())
|
|
|
+ .eq(CoreDrillPlan::getPlanCycle, EduTrainingPlanCycleEnum.WEEKLY.getCode())
|
|
|
+ .eq(CoreDrillPlan::getDeleted, 0)
|
|
|
+ .in(CoreDrillPlan::getBelongOrgId, collect)
|
|
|
+ .select(CoreDrillPlan::getId, CoreDrillPlan::getPlanCycle));
|
|
|
+ //此list中Plan对象仅id与planCycle字段有值,
|
|
|
+ buildTaskByPlan(planList, today);
|
|
|
+ }
|
|
|
+
|
|
|
+ private void dealTimeWorkChangeForMonthly(WorkTimeChangeEvent event, String todayStr, List<SysWorkTime> futureWorkTime) {
|
|
|
+ List<Long> orgIds = event.getOrgIds();
|
|
|
+ DateTime today = DateUtil.parse(todayStr, Constants.DAILY_FORMAT);
|
|
|
+ DateRange dateRange = DateUtils.getStartAndEnd(today, CycleCommonEnum.MONTHLY);
|
|
|
+ //查询机构当周是否存在任务
|
|
|
+ List<CoreDrillTask> taskList = lambdaQuery()
|
|
|
+ .eq(CoreDrillTask::getPlanCycle, EduTrainingPlanCycleEnum.MONTHLY.getCode())
|
|
|
+ .ge(CoreDrillTask::getStartDate, dateRange.getStartTime())
|
|
|
+ .le(CoreDrillTask::getEndDate, dateRange.getEndTime())
|
|
|
+ .in(CoreDrillTask::getOrgId, orgIds)
|
|
|
+ .select(CoreDrillTask::getId, CoreDrillTask::getOrgId, CoreDrillTask::getStatus)
|
|
|
+ .list();
|
|
|
+ Map<Long, List<SysWorkTime>> orgWorkTimeMap = futureWorkTime.stream().collect(Collectors.groupingBy(SysWorkTime::getOrgId));
|
|
|
+ List<Long> workOrgIdList = new ArrayList<>();
|
|
|
+ //歇业的数据
|
|
|
+ List<Long> unWorkOrgIdList = new ArrayList<>();
|
|
|
+ for (Map.Entry<Long, List<SysWorkTime>> entry : orgWorkTimeMap.entrySet()) {
|
|
|
+ List<SysWorkTime> weeklyWorkTimeList = entry.getValue();
|
|
|
+ //如果有任何一天营业,那么就应该生成该周期的任务
|
|
|
+ boolean match = weeklyWorkTimeList.stream().anyMatch(time -> ObjectUtil.equal(time.getIsEnable(), WORK));
|
|
|
+ if (match) {
|
|
|
+ workOrgIdList.add(entry.getKey());
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ unWorkOrgIdList.add(entry.getKey());
|
|
|
+ }
|
|
|
+ //删除已经歇业且未执行的任务
|
|
|
+ List<Long> delTaskIdList = taskList.stream()
|
|
|
+ .filter(task -> unWorkOrgIdList.contains(task.getOrgId()))
|
|
|
+ .filter(task -> task.getStatus().equals(EduTrainingDoStatus.WAIT_RECORDED.getCode()))
|
|
|
+ .map(CoreDrillTask::getId).collect(Collectors.toList());
|
|
|
+ //删除任务
|
|
|
+ delTaskByIdList(delTaskIdList);
|
|
|
+
|
|
|
+ //查询需要生成任务的机构的计划
|
|
|
+ List<CoreDrillPlan> planList = coreDrillPlanMapper.selectList(new LambdaQueryWrapper<CoreDrillPlan>()
|
|
|
+ //.eq(CoreDrillPlan::getStandard, 0)
|
|
|
+ .eq(CoreDrillPlan::getPlanStatus, EduTrainingPlanStatus.USING.getCode())
|
|
|
+ .eq(CoreDrillPlan::getPlanCycle, EduTrainingPlanCycleEnum.MONTHLY.getCode())
|
|
|
+ .eq(CoreDrillPlan::getDeleted, 0)
|
|
|
+ .in(CoreDrillPlan::getBelongOrgId, workOrgIdList)
|
|
|
+ .select(CoreDrillPlan::getId, CoreDrillPlan::getPlanCycle));
|
|
|
+ //此list中Plan对象仅id与planCycle字段有值,
|
|
|
+ buildTaskByPlan(planList, today);
|
|
|
+ }
|
|
|
+
|
|
|
+ private void dealTimeWorkChangeForQuarterly(WorkTimeChangeEvent event, String todayStr, List<SysWorkTime> futureWorkTime) {
|
|
|
+ List<Long> orgIds = event.getOrgIds();
|
|
|
+ DateTime today = DateUtil.parse(todayStr, Constants.DAILY_FORMAT);
|
|
|
+ DateRange dateRange = DateUtils.getStartAndEnd(today, CycleCommonEnum.QUARTERLY);
|
|
|
+ //查询机构当周是否存在任务
|
|
|
+ List<CoreDrillTask> taskList = lambdaQuery()
|
|
|
+ .eq(CoreDrillTask::getPlanCycle, EduTrainingPlanCycleEnum.QUARTERLY.getCode())
|
|
|
+ .ge(CoreDrillTask::getStartDate, dateRange.getStartTime())
|
|
|
+ .le(CoreDrillTask::getEndDate, dateRange.getEndTime())
|
|
|
+ .in(CoreDrillTask::getOrgId, orgIds)
|
|
|
+ .select(CoreDrillTask::getId, CoreDrillTask::getOrgId, CoreDrillTask::getStatus)
|
|
|
+ .list();
|
|
|
+ Map<Long, List<SysWorkTime>> orgWorkTimeMap = futureWorkTime.stream().collect(Collectors.groupingBy(SysWorkTime::getOrgId));
|
|
|
+ List<Long> workOrgIdList = new ArrayList<>();
|
|
|
+ //歇业的数据
|
|
|
+ List<Long> unWorkOrgIdList = new ArrayList<>();
|
|
|
+ for (Map.Entry<Long, List<SysWorkTime>> entry : orgWorkTimeMap.entrySet()) {
|
|
|
+ List<SysWorkTime> weeklyWorkTimeList = entry.getValue();
|
|
|
+ //如果有任何一天营业,那么就应该生成该周期的任务
|
|
|
+ boolean match = weeklyWorkTimeList.stream().anyMatch(time -> ObjectUtil.equal(time.getIsEnable(), WORK));
|
|
|
+ if (match) {
|
|
|
+ workOrgIdList.add(entry.getKey());
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ unWorkOrgIdList.add(entry.getKey());
|
|
|
+ }
|
|
|
+ //删除已经歇业且未执行的任务
|
|
|
+ List<Long> delTaskIdList = taskList.stream()
|
|
|
+ .filter(task -> unWorkOrgIdList.contains(task.getOrgId()))
|
|
|
+ .filter(task -> task.getStatus().equals(EduTrainingDoStatus.WAIT_RECORDED.getCode()))
|
|
|
+ .map(CoreDrillTask::getId).collect(Collectors.toList());
|
|
|
+ //删除任务
|
|
|
+ delTaskByIdList(delTaskIdList);
|
|
|
+
|
|
|
+ //查询需要生成任务的机构的计划
|
|
|
+ List<CoreDrillPlan> planList = coreDrillPlanMapper.selectList(new LambdaQueryWrapper<CoreDrillPlan>()
|
|
|
+ //.eq(CoreDrillPlan::getStandard, 0)
|
|
|
+ .eq(CoreDrillPlan::getPlanStatus, EduTrainingPlanStatus.USING.getCode())
|
|
|
+ .eq(CoreDrillPlan::getPlanCycle, EduTrainingPlanCycleEnum.QUARTERLY.getCode())
|
|
|
+ .eq(CoreDrillPlan::getDeleted, 0)
|
|
|
+ .in(CoreDrillPlan::getBelongOrgId, workOrgIdList)
|
|
|
+ .select(CoreDrillPlan::getId, CoreDrillPlan::getPlanCycle));
|
|
|
+ //此list中Plan对象仅id与planCycle字段有值,
|
|
|
+ buildTaskByPlan(planList, today);
|
|
|
+ }
|
|
|
+
|
|
|
+ private void dealTimeWorkChangeForHalfYearly(WorkTimeChangeEvent event, String todayStr, List<SysWorkTime> futureWorkTime) {
|
|
|
+ List<Long> orgIds = event.getOrgIds();
|
|
|
+ DateTime today = DateUtil.parse(todayStr, Constants.DAILY_FORMAT);
|
|
|
+ DateRange dateRange = DateUtils.getStartAndEnd(today, CycleCommonEnum.HALF_YEARLY);
|
|
|
+ //查询机构当周是否存在任务
|
|
|
+ List<CoreDrillTask> taskList = lambdaQuery()
|
|
|
+ .eq(CoreDrillTask::getPlanCycle, EduTrainingPlanCycleEnum.HALF_YEARLY.getCode())
|
|
|
+ .ge(CoreDrillTask::getStartDate, dateRange.getStartTime())
|
|
|
+ .le(CoreDrillTask::getEndDate, dateRange.getEndTime())
|
|
|
+ .in(CoreDrillTask::getOrgId, orgIds)
|
|
|
+ .select(CoreDrillTask::getId, CoreDrillTask::getOrgId, CoreDrillTask::getStatus)
|
|
|
+ .list();
|
|
|
+ Map<Long, List<SysWorkTime>> orgWorkTimeMap = futureWorkTime.stream().collect(Collectors.groupingBy(SysWorkTime::getOrgId));
|
|
|
+ List<Long> workOrgIdList = new ArrayList<>();
|
|
|
+ //歇业的数据
|
|
|
+ List<Long> unWorkOrgIdList = new ArrayList<>();
|
|
|
+ for (Map.Entry<Long, List<SysWorkTime>> entry : orgWorkTimeMap.entrySet()) {
|
|
|
+ List<SysWorkTime> weeklyWorkTimeList = entry.getValue();
|
|
|
+ //如果有任何一天营业,那么就应该生成该周期的任务
|
|
|
+ boolean match = weeklyWorkTimeList.stream().anyMatch(time -> ObjectUtil.equal(time.getIsEnable(), WORK));
|
|
|
+ if (match) {
|
|
|
+ workOrgIdList.add(entry.getKey());
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ unWorkOrgIdList.add(entry.getKey());
|
|
|
+ }
|
|
|
+ //删除已经歇业且未执行的任务
|
|
|
+ List<Long> delTaskIdList = taskList.stream()
|
|
|
+ .filter(task -> unWorkOrgIdList.contains(task.getOrgId()))
|
|
|
+ .filter(task -> task.getStatus().equals(EduTrainingDoStatus.WAIT_RECORDED.getCode()))
|
|
|
+ .map(CoreDrillTask::getId).collect(Collectors.toList());
|
|
|
+ //删除任务
|
|
|
+ delTaskByIdList(delTaskIdList);
|
|
|
+
|
|
|
+ //查询需要生成任务的机构的计划
|
|
|
+ List<CoreDrillPlan> planList = coreDrillPlanMapper.selectList(new LambdaQueryWrapper<CoreDrillPlan>()
|
|
|
+ //.eq(CoreDrillPlan::getStandard, 0)
|
|
|
+ .eq(CoreDrillPlan::getPlanStatus, EduTrainingPlanStatus.USING.getCode())
|
|
|
+ .eq(CoreDrillPlan::getPlanCycle, EduTrainingPlanCycleEnum.HALF_YEARLY.getCode())
|
|
|
+ .eq(CoreDrillPlan::getDeleted, 0)
|
|
|
+ .in(CoreDrillPlan::getBelongOrgId, workOrgIdList)
|
|
|
+ .select(CoreDrillPlan::getId, CoreDrillPlan::getPlanCycle));
|
|
|
+ //此list中Plan对象仅id与planCycle字段有值,
|
|
|
+ buildTaskByPlan(planList, today);
|
|
|
+ }
|
|
|
+
|
|
|
+ private void dealTimeWorkChangeForYearly(WorkTimeChangeEvent event, String todayStr, List<SysWorkTime> futureWorkTime) {
|
|
|
+ List<Long> orgIds = event.getOrgIds();
|
|
|
+ DateTime today = DateUtil.parse(todayStr, Constants.DAILY_FORMAT);
|
|
|
+ DateRange dateRange = DateUtils.getStartAndEnd(today, CycleCommonEnum.YEARLY);
|
|
|
+ //查询机构当周是否存在任务
|
|
|
+ List<CoreDrillTask> taskList = lambdaQuery()
|
|
|
+ .eq(CoreDrillTask::getPlanCycle, EduTrainingPlanCycleEnum.YEARLY.getCode())
|
|
|
+ .ge(CoreDrillTask::getStartDate, dateRange.getStartTime())
|
|
|
+ .le(CoreDrillTask::getEndDate, dateRange.getEndTime())
|
|
|
+ .in(CoreDrillTask::getOrgId, orgIds)
|
|
|
+ .select(CoreDrillTask::getId, CoreDrillTask::getOrgId, CoreDrillTask::getStatus)
|
|
|
+ .list();
|
|
|
+ Map<Long, List<SysWorkTime>> orgWorkTimeMap = futureWorkTime.stream().collect(Collectors.groupingBy(SysWorkTime::getOrgId));
|
|
|
+ List<Long> workOrgIdList = new ArrayList<>();
|
|
|
+ //歇业的数据
|
|
|
+ List<Long> unWorkOrgIdList = new ArrayList<>();
|
|
|
+ for (Map.Entry<Long, List<SysWorkTime>> entry : orgWorkTimeMap.entrySet()) {
|
|
|
+ List<SysWorkTime> weeklyWorkTimeList = entry.getValue();
|
|
|
+ //如果有任何一天营业,那么就应该生成该周期的任务
|
|
|
+ boolean match = weeklyWorkTimeList.stream().anyMatch(time -> ObjectUtil.equal(time.getIsEnable(), WORK));
|
|
|
+ if (match) {
|
|
|
+ workOrgIdList.add(entry.getKey());
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ unWorkOrgIdList.add(entry.getKey());
|
|
|
+ }
|
|
|
+ //删除已经歇业且未执行的任务
|
|
|
+ List<Long> delTaskIdList = taskList.stream()
|
|
|
+ .filter(task -> unWorkOrgIdList.contains(task.getOrgId()))
|
|
|
+ .filter(task -> task.getStatus().equals(EduTrainingDoStatus.WAIT_RECORDED.getCode()))
|
|
|
+ .map(CoreDrillTask::getId).collect(Collectors.toList());
|
|
|
+ //删除任务
|
|
|
+ delTaskByIdList(delTaskIdList);
|
|
|
+
|
|
|
+ //查询需要生成任务的机构的计划
|
|
|
+ List<CoreDrillPlan> planList = coreDrillPlanMapper.selectList(new LambdaQueryWrapper<CoreDrillPlan>()
|
|
|
+ //.eq(CoreDrillPlan::getStandard, 0)
|
|
|
+ .eq(CoreDrillPlan::getPlanStatus, EduTrainingPlanStatus.USING.getCode())
|
|
|
+ .eq(CoreDrillPlan::getPlanCycle, EduTrainingPlanCycleEnum.YEARLY.getCode())
|
|
|
+ .eq(CoreDrillPlan::getDeleted, 0)
|
|
|
+ .in(CoreDrillPlan::getBelongOrgId, workOrgIdList)
|
|
|
+ .select(CoreDrillPlan::getId, CoreDrillPlan::getPlanCycle));
|
|
|
+ //此list中Plan对象仅id与planCycle字段有值,
|
|
|
+ buildTaskByPlan(planList, today);
|
|
|
+ }
|
|
|
+
|
|
|
+ private void buildTaskByPlan(List<CoreDrillPlan> planList, DateTime today) {
|
|
|
+ for (CoreDrillPlan plan : planList) {
|
|
|
+ CompletableFuture.runAsync(() -> {
|
|
|
+ //此处因为planService会导致循环依赖
|
|
|
+ final CoreDrillPlanDataVo detailPlanData = coreDrillPlanMapper.getDetailPlanData(plan.getId());
|
|
|
+ detailPlanData.setFileList(ObjectUtil.isNotEmpty(detailPlanData.getFile()) ? JSON.parseArray(detailPlanData.getFile(), String.class) : null);
|
|
|
+ DateRange range = DateUtils.getStartAndEnd(today, plan.getPlanCycle());
|
|
|
+ this.createTaskForNow(detailPlanData, range.getStartTime(), range.getEndTime());
|
|
|
+ }, threadPoolTaskExecutor);
|
|
|
+
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private List<SysWorkTime> selectWorkTimeList(Date now, DrillPlanCycleEnum daily, WorkTimeChangeEvent event) {
|
|
|
+ DateRange range = DateUtils.getStartAndEnd(now, daily.getCode());
|
|
|
+ String startTime = DateUtil.format(range.getStartTime(), Constants.DAILY_FORMAT);
|
|
|
+ String endTime = DateUtil.format(range.getEndTime(), Constants.DAILY_FORMAT);
|
|
|
+ WorkTimeDto workTimeDto = new WorkTimeDto();
|
|
|
+ workTimeDto.setOrgIdList(event.getOrgIds());
|
|
|
+ workTimeDto.setStartTime(startTime);
|
|
|
+ workTimeDto.setEndTime(endTime);
|
|
|
+ return workTimeService.findWorkTimeByRange(workTimeDto, SecurityConstants.FROM_SOURCE).getData();
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ @Override
|
|
|
public void export(CoreDrillTaskPageDto request, HttpServletResponse response) {
|
|
|
dealParam(request);
|
|
|
List<CoreDrillTaskExportVo> list = coreDrillTaskMapper.selectDrillTaskExportList(request);
|