|
|
@@ -1,6 +1,7 @@
|
|
|
package com.xunmei.core.edu.service.impl;
|
|
|
|
|
|
import cn.hutool.core.date.DateField;
|
|
|
+import cn.hutool.core.date.DateTime;
|
|
|
import cn.hutool.core.date.DateUtil;
|
|
|
import cn.hutool.core.map.MapUtil;
|
|
|
import cn.hutool.core.util.ObjectUtil;
|
|
|
@@ -11,6 +12,7 @@ import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
|
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
|
|
import com.baomidou.mybatisplus.core.toolkit.IdWorker;
|
|
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
|
+import com.xunmei.common.core.constant.Constants;
|
|
|
import com.xunmei.common.core.constant.ErrorMsgConstants;
|
|
|
import com.xunmei.common.core.constant.SecurityConstants;
|
|
|
import com.xunmei.common.core.domain.DateRange;
|
|
|
@@ -24,9 +26,11 @@ import com.xunmei.common.core.domain.edu.vo.CoreEduTrainingTaskReportVo;
|
|
|
import com.xunmei.common.core.domain.panel.dto.PanelListDto;
|
|
|
import com.xunmei.common.core.domain.panel.enums.PanelTypeEnums;
|
|
|
import com.xunmei.common.core.domain.panel.vo.PanelListVo;
|
|
|
+import com.xunmei.common.core.enums.EduTrainingPlanCycleEnum;
|
|
|
import com.xunmei.common.core.enums.ExportPdfType;
|
|
|
import com.xunmei.common.core.enums.edu.EduTrainingDoStatus;
|
|
|
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;
|
|
|
@@ -46,6 +50,7 @@ import com.xunmei.system.api.RemoteRoleService;
|
|
|
import com.xunmei.system.api.RemoteWorkTimeService;
|
|
|
import com.xunmei.system.api.domain.SysOrg;
|
|
|
import com.xunmei.system.api.domain.SysUser;
|
|
|
+import com.xunmei.system.api.domain.SysWorkTime;
|
|
|
import com.xunmei.system.api.function.RemoteCallHandlerExecutor;
|
|
|
import io.netty.util.internal.StringUtil;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
@@ -62,6 +67,8 @@ import java.io.File;
|
|
|
import java.math.BigDecimal;
|
|
|
import java.math.RoundingMode;
|
|
|
import java.text.NumberFormat;
|
|
|
+import java.time.LocalDate;
|
|
|
+import java.time.format.DateTimeFormatter;
|
|
|
import java.util.*;
|
|
|
import java.util.concurrent.CompletableFuture;
|
|
|
import java.util.stream.Collectors;
|
|
|
@@ -76,6 +83,8 @@ import java.util.stream.Collectors;
|
|
|
@Slf4j
|
|
|
@Service
|
|
|
public class CoreEduTrainingTaskServiceImpl extends ServiceImpl<CoreEduTrainingTaskMapper, CoreEduTrainingTask> implements ICoreEduTrainingTaskService {
|
|
|
+ public static final long UN_WORK = 0L;
|
|
|
+ public static final long WORK = 1L;
|
|
|
@Autowired
|
|
|
private CoreEduTrainingTaskMapper coreEduTrainingTaskMapper;
|
|
|
@Autowired
|
|
|
@@ -129,6 +138,7 @@ public class CoreEduTrainingTaskServiceImpl extends ServiceImpl<CoreEduTrainingT
|
|
|
}
|
|
|
IPage<CoreEduTrainingTaskPageVo> pageData = coreEduTrainingTaskMapper.selectPageData(request.getPageRequest(), request);
|
|
|
if (ObjectUtil.isNotEmpty(pageData.getRecords())) {
|
|
|
+ pageData.getRecords().sort(getComparator());
|
|
|
List<Long> idList = pageData.getRecords().stream().map(CoreEduTrainingTaskPageVo::getId).collect(Collectors.toList());
|
|
|
List<CoreEduTrainingTaskToRole> roleList = taskToRoleMapper.selectList(new LambdaQueryWrapper<CoreEduTrainingTaskToRole>()
|
|
|
.in(CoreEduTrainingTaskToRole::getEduTrainingTaskId, idList));
|
|
|
@@ -142,8 +152,26 @@ public class CoreEduTrainingTaskServiceImpl extends ServiceImpl<CoreEduTrainingT
|
|
|
return TableDataInfo.build(pageData);
|
|
|
}
|
|
|
|
|
|
- private String getStaticPathPrefix() {
|
|
|
- return RemoteCallHandlerExecutor.executeRemoteCall(() -> fileService.getStaticPathPrefix(), ErrorMsgConstants.QUERY_STATICS_SAVE_PATH_ERROR);
|
|
|
+
|
|
|
+ public static Comparator<CoreEduTrainingTaskPageVo> getComparator() {
|
|
|
+ //将0映射为0,4映射为1,1映射为2,2映射为3,3映射为4,其他情况映射为5
|
|
|
+ //0:待培训,1:待签名,2:已完成,3:已逾期,4:待提交
|
|
|
+ return Comparator.comparingInt((CoreEduTrainingTaskPageVo vo) -> {
|
|
|
+ Integer num = vo.getStatus();
|
|
|
+ if (num == 0) {
|
|
|
+ return 0;
|
|
|
+ } else if (num == 4) {
|
|
|
+ return 1;
|
|
|
+ } else if (num == 1) {
|
|
|
+ return 2;
|
|
|
+ } else if (num == 2) {
|
|
|
+ return 3;
|
|
|
+ } else if (num == 3) {
|
|
|
+ return 4;
|
|
|
+ } else {
|
|
|
+ return 5;
|
|
|
+ }
|
|
|
+ });
|
|
|
}
|
|
|
|
|
|
private void dealData(CoreEduTrainingTaskPageVo record, List<CoreEduTrainingTaskPageVo> records, Map<Long, List<CoreEduTrainingTaskToRole>> listMap) {
|
|
|
@@ -219,12 +247,12 @@ public class CoreEduTrainingTaskServiceImpl extends ServiceImpl<CoreEduTrainingT
|
|
|
public int insertCoreEduTrainingTask(CoreEduTrainingTaskInsertDto request) {
|
|
|
SysOrg sysOrg = RemoteCallHandlerExecutor.executeRemoteCall(
|
|
|
() -> orgService.selectOrgById(SecurityUtils.getLoginUser().getOrgId(), SecurityConstants.INNER), ErrorMsgConstants.QUERY_ORG_DATA_ERROR);
|
|
|
- CoreEduTrainingTask task=new CoreEduTrainingTask();
|
|
|
+ CoreEduTrainingTask task = new CoreEduTrainingTask();
|
|
|
task.setId(IdWorker.getId());
|
|
|
task.setOrgId(sysOrg.getId());
|
|
|
task.setOrgName(sysOrg.getName());
|
|
|
task.setOrgPath(sysOrg.getPath());
|
|
|
- BeanUtils.copyProperties(request,task);
|
|
|
+ BeanUtils.copyProperties(request, task);
|
|
|
task.setCreateTime(DateUtils.getNowDate());
|
|
|
task.setUpdateTime(DateUtils.getNowDate());
|
|
|
task.setCreateBy(SecurityUtils.getLoginUser().getSysUser().getId().toString());
|
|
|
@@ -306,13 +334,13 @@ public class CoreEduTrainingTaskServiceImpl extends ServiceImpl<CoreEduTrainingT
|
|
|
return coreEduTrainingTaskMapper.updateById(coreEduTrainingTask);
|
|
|
}
|
|
|
|
|
|
- private Long getHostUserId(Long orgId){
|
|
|
+ private Long getHostUserId(Long orgId) {
|
|
|
List<SysUser> userList = RemoteCallHandlerExecutor.executeRemoteCall(() ->
|
|
|
roleService.selectUserByRoleNameAndOrgId("网点负责人", orgId, SecurityConstants.INNER), ErrorMsgConstants.QUERY_USER_DATA_ERROR);
|
|
|
if (ObjectUtil.isNotEmpty(userList)) {
|
|
|
- return userList.get(0).getId();
|
|
|
+ return userList.get(0).getId();
|
|
|
} else {
|
|
|
- return SecurityUtils.getUserId();
|
|
|
+ return SecurityUtils.getUserId();
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@@ -361,7 +389,7 @@ public class CoreEduTrainingTaskServiceImpl extends ServiceImpl<CoreEduTrainingT
|
|
|
if (plan.getPlanCycle() != 0) {
|
|
|
//如果不是无周期的计划,那么需要查询出他的时间范围
|
|
|
List<String> workTimeList = workTimeService.findWorkTimeByDateRangeAndOrgId(start, end, plan.getBelongOrgId());
|
|
|
- if (workTimeList.isEmpty()){
|
|
|
+ if (workTimeList.isEmpty()) {
|
|
|
log.error("未获取到该机构的作息时间");
|
|
|
return;
|
|
|
}
|
|
|
@@ -386,11 +414,11 @@ public class CoreEduTrainingTaskServiceImpl extends ServiceImpl<CoreEduTrainingT
|
|
|
}
|
|
|
|
|
|
private void saveTaskAndRoleData(CoreEduTrainingPlanDataVo plan, Date start, Date end, List<SysOrg> orgList) {
|
|
|
- System.out.println("12121212");
|
|
|
//List<CoreEduTrainingPlanToRole> planRoleList = plan.getPlanRoleList();
|
|
|
List<CoreEduTrainingTask> taskList = new ArrayList<>();
|
|
|
List<CoreEduTrainingTaskToRole> taskRoleList = new ArrayList<>();
|
|
|
Map<Integer, DateRange> dateRangeMap = DateUtils.splitDateRange(start, end, plan.getExecTimes());
|
|
|
+ Date date = new Date();
|
|
|
for (SysOrg org : orgList) {
|
|
|
for (int i = 1; i <= plan.getExecTimes(); i++) {
|
|
|
DateRange dateRange = dateRangeMap.get(i);
|
|
|
@@ -413,8 +441,17 @@ public class CoreEduTrainingTaskServiceImpl extends ServiceImpl<CoreEduTrainingT
|
|
|
trainingTask.setOrgPath(org.getPath());
|
|
|
trainingTask.setStatus(EduTrainingDoStatus.WAIT_RECORDED.getCode());
|
|
|
trainingTask.setPdfUrl(null);
|
|
|
- trainingTask.setCreateTime(new Date());
|
|
|
- trainingTask.setUpdateTime(new Date());
|
|
|
+ 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;
|
|
|
+ }
|
|
|
taskList.add(trainingTask);
|
|
|
/*for (CoreEduTrainingPlanToRole planToRole : planRoleList) {
|
|
|
CoreEduTrainingTaskToRole coreEduTrainingTaskToRole = new CoreEduTrainingTaskToRole();
|
|
|
@@ -469,7 +506,7 @@ public class CoreEduTrainingTaskServiceImpl extends ServiceImpl<CoreEduTrainingT
|
|
|
return result;
|
|
|
}
|
|
|
|
|
|
- private void buildResultData(List<SysOrg> sysOrgList, List<CoreEduTrainingTaskReportVo> result, List<CoreEduTrainingTaskReportVo> list) {
|
|
|
+ private void buildResultData(List<SysOrg> sysOrgList, List<CoreEduTrainingTaskReportVo> result, List<CoreEduTrainingTaskReportVo> list) {
|
|
|
if (list.size() == 1 && list.get(0).getOrgId() == null) {
|
|
|
//走到这 说明mapper没有查到数据 构建空数据返回
|
|
|
for (SysOrg org : sysOrgList) {
|
|
|
@@ -664,12 +701,15 @@ public class CoreEduTrainingTaskServiceImpl extends ServiceImpl<CoreEduTrainingT
|
|
|
.eq(CoreEduTrainingPlan::getDeleted, 0)
|
|
|
.select(CoreEduTrainingPlan::getId, CoreEduTrainingPlan::getPlanCycle));
|
|
|
}
|
|
|
+ //此list中Plan对象仅id与planCycle字段有值,其他字段为空
|
|
|
if (ObjectUtil.isEmpty(planList)) {
|
|
|
return "没有需要生成的任务";
|
|
|
}
|
|
|
- Date finalDate = date;
|
|
|
+ buildTaskByPlan(planList, date);
|
|
|
+ return "创建成功";
|
|
|
+ }
|
|
|
|
|
|
- //此list中Plan对象仅id与planCycle字段有值,
|
|
|
+ private void buildTaskByPlan(List<CoreEduTrainingPlan> planList, Date finalDate) {
|
|
|
for (CoreEduTrainingPlan plan : planList) {
|
|
|
CompletableFuture.runAsync(() -> {
|
|
|
//此处因为planService会导致循环依赖
|
|
|
@@ -678,8 +718,8 @@ public class CoreEduTrainingTaskServiceImpl extends ServiceImpl<CoreEduTrainingT
|
|
|
DateRange range = DateUtils.getStartAndEnd(finalDate, plan.getPlanCycle());
|
|
|
this.createTaskForNow(detailPlanData, range.getStartTime(), range.getEndTime());
|
|
|
}, threadPoolTaskExecutor);
|
|
|
+
|
|
|
}
|
|
|
- return "创建成功";
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
@@ -688,6 +728,17 @@ public class CoreEduTrainingTaskServiceImpl extends ServiceImpl<CoreEduTrainingT
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
+ public void delTaskByIdList(List<Long> taskIdList) {
|
|
|
+ if (ObjectUtil.isNotEmpty(taskIdList)) {
|
|
|
+ coreEduTrainingTaskMapper.deleteBatchIds(taskIdList);
|
|
|
+ taskToRoleMapper.delete(new LambdaQueryWrapper<CoreEduTrainingTaskToRole>()
|
|
|
+ .in(CoreEduTrainingTaskToRole::getEduTrainingTaskId, taskIdList));
|
|
|
+ /*taskToUserMapper.delete(new LambdaQueryWrapper<CoreEduTrainingTaskToUser>()
|
|
|
+ .in(CoreEduTrainingTaskToUser::getEduTrainingTaskId, taskIdList));*/
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
public List<PanelListVo> selectCurUserTaskList(PanelListDto panelListDto) {
|
|
|
List<PanelListVo> list = coreEduTrainingTaskMapper.selectCurUserTaskList(panelListDto);
|
|
|
list.removeIf(item -> DateUtil.compare(new Date(), item.getEndTime()) > 0);
|
|
|
@@ -698,15 +749,291 @@ public class CoreEduTrainingTaskServiceImpl extends ServiceImpl<CoreEduTrainingT
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
- public void timeChangeForTaskAdd(List<Long> orgIds) {
|
|
|
+ public void taskChangeForTimeWorkChange(WorkTimeChangeEvent event) {
|
|
|
+ String date = LocalDate.now().format(DateTimeFormatter.ofPattern(Constants.DAILY_FORMAT));
|
|
|
+ List<SysWorkTime> futureWorkTime = workTimeService.findFutureWorkTime(event.getOrgIds(), date, SecurityConstants.INNER);
|
|
|
+ for (EduTrainingPlanCycleEnum value : EduTrainingPlanCycleEnum.values()) {
|
|
|
+ switch (value) {
|
|
|
+ case DAILY:
|
|
|
+ List<SysWorkTime> timeList = futureWorkTime.stream()
|
|
|
+ .filter(time -> ObjectUtil.equal(time.getYmdDate(), date))
|
|
|
+ .collect(Collectors.toList());
|
|
|
+ dealTimeWorkChangeForDaily(event, date, timeList);
|
|
|
+ break;
|
|
|
+ case WEEKLY:
|
|
|
+ dealTimeWorkChangeForWeekly(event, date, futureWorkTime);
|
|
|
+ break;
|
|
|
+ case MONTHLY:
|
|
|
+ dealTimeWorkChangeForMonthly(event, date, futureWorkTime);
|
|
|
+ break;
|
|
|
+ case QUARTERLY:
|
|
|
+ dealTimeWorkChangeForQuarterly(event, date, futureWorkTime);
|
|
|
+ break;
|
|
|
+ case HALF_YEARLY:
|
|
|
+ dealTimeWorkChangeForHalfYearly(event, date, futureWorkTime);
|
|
|
+ break;
|
|
|
+ case YEARLY:
|
|
|
+ dealTimeWorkChangeForYearly(event, date, futureWorkTime);
|
|
|
+ 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<CoreEduTrainingTask> taskList = lambdaQuery()
|
|
|
+ .eq(CoreEduTrainingTask::getPlanCycle, EduTrainingPlanCycleEnum.DAILY.getCode())
|
|
|
+ .like(CoreEduTrainingTask::getStartDate, todayStr)
|
|
|
+ .in(CoreEduTrainingTask::getOrgId, orgIds)
|
|
|
+ .select(CoreEduTrainingTask::getId, CoreEduTrainingTask::getOrgId, CoreEduTrainingTask::getStatus)
|
|
|
+ .list();
|
|
|
+ //根据营业歇业分组
|
|
|
+ Map<Long, List<SysWorkTime>> listMap = futureWorkTime.stream().collect(Collectors.groupingBy(SysWorkTime::getIsEnable));
|
|
|
+ //歇业的数据
|
|
|
+ List<SysWorkTime> unWorkTimeList = listMap.get(UN_WORK);
|
|
|
+ //获取歇业的机构信息
|
|
|
+ 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()))
|
|
|
+ .map(CoreEduTrainingTask::getId).collect(Collectors.toList());
|
|
|
+ //删除任务
|
|
|
+ delTaskByIdList(delTaskIdList);
|
|
|
+
|
|
|
+ //营业的数据
|
|
|
+ List<SysWorkTime> workTimeList = listMap.get(WORK);
|
|
|
+ //营业的机构id
|
|
|
+ List<Long> workOrgIdList = workTimeList.stream().map(SysWorkTime::getOrgId).collect(Collectors.toList());
|
|
|
+ //获取任务中存在的机构id
|
|
|
+ List<Long> taskOrgIdList = taskList.stream().map(CoreEduTrainingTask::getOrgId).distinct().collect(Collectors.toList());
|
|
|
+ //查询在任务表中不存在的营业机构id,即需要生成任务的机构
|
|
|
+ List<Long> needTaskOrgIdList = workOrgIdList.stream().filter(orgId -> !taskOrgIdList.contains(orgId)).collect(Collectors.toList());
|
|
|
+ //查询需要生成任务的机构的计划
|
|
|
+ List<CoreEduTrainingPlan> planList = coreEduTrainingPlanMapper.selectList(new LambdaQueryWrapper<CoreEduTrainingPlan>()
|
|
|
+ .eq(CoreEduTrainingPlan::getStandard, 0)
|
|
|
+ .eq(CoreEduTrainingPlan::getPlanStatus, EduTrainingPlanStatus.USING.getCode())
|
|
|
+ .eq(CoreEduTrainingPlan::getPlanCycle, EduTrainingPlanCycleEnum.DAILY.getCode())
|
|
|
+ .eq(CoreEduTrainingPlan::getDeleted, 0)
|
|
|
+ .in(CoreEduTrainingPlan::getBelongOrgId, needTaskOrgIdList)
|
|
|
+ .select(CoreEduTrainingPlan::getId, CoreEduTrainingPlan::getPlanCycle));
|
|
|
+ //此list中Plan对象仅id与planCycle字段有值,
|
|
|
+ buildTaskByPlan(planList, today);
|
|
|
}
|
|
|
|
|
|
- @Override
|
|
|
- public void timeChangeForTaskDel(List<Long> orgIds) {
|
|
|
|
|
|
+ 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, EduTrainingPlanCycleEnum.WEEKLY.getCode());
|
|
|
+ //查询机构当周是否存在任务
|
|
|
+ List<CoreEduTrainingTask> taskList = lambdaQuery()
|
|
|
+ .eq(CoreEduTrainingTask::getPlanCycle, EduTrainingPlanCycleEnum.WEEKLY.getCode())
|
|
|
+ .ge(CoreEduTrainingTask::getStartDate, dateRange.getStartTime())
|
|
|
+ .le(CoreEduTrainingTask::getEndDate, dateRange.getEndTime())
|
|
|
+ .in(CoreEduTrainingTask::getOrgId, orgIds)
|
|
|
+ .select(CoreEduTrainingTask::getId, CoreEduTrainingTask::getOrgId, CoreEduTrainingTask::getStatus)
|
|
|
+ .list();
|
|
|
+
|
|
|
+ //获取任务中存在的机构id
|
|
|
+ List<Long> taskOrgIdList = taskList.stream().map(CoreEduTrainingTask::getOrgId).distinct().collect(Collectors.toList());
|
|
|
+
|
|
|
+ //根据营业歇业分组
|
|
|
+ Map<Long, List<SysWorkTime>> listMap = futureWorkTime.stream().collect(Collectors.groupingBy(SysWorkTime::getIsEnable));
|
|
|
+ //歇业的数据
|
|
|
+ List<SysWorkTime> unWorkTimeList = listMap.get(UN_WORK);
|
|
|
+ List<Long> unWorkOrgIdList = unWorkTimeList.stream().map(SysWorkTime::getOrgId).collect(Collectors.toList());
|
|
|
+ List<Long> delTaskIdList = taskList.stream().filter(task -> unWorkOrgIdList.contains(task.getOrgId())).map(CoreEduTrainingTask::getId).collect(Collectors.toList());
|
|
|
+ delTaskByIdList(delTaskIdList);
|
|
|
+
|
|
|
+ //营业的数据
|
|
|
+ List<SysWorkTime> workTimeList = listMap.get(WORK);
|
|
|
+ List<Long> workOrgIdList = workTimeList.stream().map(SysWorkTime::getOrgId).collect(Collectors.toList());
|
|
|
+ //查询在任务表中不存在的营业机构id,即需要生成任务的机构
|
|
|
+ List<Long> needTaskOrgIdList = workOrgIdList.stream().filter(orgId -> !taskOrgIdList.contains(orgId)).collect(Collectors.toList());
|
|
|
+ //查询需要生成任务的机构的计划
|
|
|
+ List<CoreEduTrainingPlan> planList = coreEduTrainingPlanMapper.selectList(new LambdaQueryWrapper<CoreEduTrainingPlan>()
|
|
|
+ .eq(CoreEduTrainingPlan::getStandard, 0)
|
|
|
+ .eq(CoreEduTrainingPlan::getPlanStatus, EduTrainingPlanStatus.USING.getCode())
|
|
|
+ .eq(CoreEduTrainingPlan::getPlanCycle, EduTrainingPlanCycleEnum.WEEKLY.getCode())
|
|
|
+ .eq(CoreEduTrainingPlan::getDeleted, 0)
|
|
|
+ .in(CoreEduTrainingPlan::getBelongOrgId, needTaskOrgIdList)
|
|
|
+ .select(CoreEduTrainingPlan::getId, CoreEduTrainingPlan::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, EduTrainingPlanCycleEnum.MONTHLY.getCode());
|
|
|
+ //查询机构当月是否存在任务
|
|
|
+ List<CoreEduTrainingTask> taskList = lambdaQuery()
|
|
|
+ .eq(CoreEduTrainingTask::getPlanCycle, EduTrainingPlanCycleEnum.MONTHLY.getCode())
|
|
|
+ .ge(CoreEduTrainingTask::getStartDate, dateRange.getStartTime())
|
|
|
+ .le(CoreEduTrainingTask::getEndDate, dateRange.getEndTime())
|
|
|
+ .in(CoreEduTrainingTask::getOrgId, orgIds)
|
|
|
+ .select(CoreEduTrainingTask::getId, CoreEduTrainingTask::getOrgId, CoreEduTrainingTask::getStatus)
|
|
|
+ .list();
|
|
|
+
|
|
|
+ //获取任务中存在的机构id
|
|
|
+ List<Long> taskOrgIdList = taskList.stream().map(CoreEduTrainingTask::getOrgId).distinct().collect(Collectors.toList());
|
|
|
+
|
|
|
+ //根据营业歇业分组
|
|
|
+ Map<Long, List<SysWorkTime>> listMap = futureWorkTime.stream().collect(Collectors.groupingBy(SysWorkTime::getIsEnable));
|
|
|
+ //歇业的数据
|
|
|
+ List<SysWorkTime> unWorkTimeList = listMap.get(UN_WORK);
|
|
|
+ List<Long> unWorkOrgIdList = unWorkTimeList.stream().map(SysWorkTime::getOrgId).collect(Collectors.toList());
|
|
|
+ List<Long> delTaskIdList = taskList.stream().filter(task -> unWorkOrgIdList.contains(task.getOrgId())).map(CoreEduTrainingTask::getId).collect(Collectors.toList());
|
|
|
+ delTaskByIdList(delTaskIdList);
|
|
|
+
|
|
|
+ //营业的数据
|
|
|
+ List<SysWorkTime> workTimeList = listMap.get(WORK);
|
|
|
+ List<Long> workOrgIdList = workTimeList.stream().map(SysWorkTime::getOrgId).collect(Collectors.toList());
|
|
|
+ //查询在任务表中不存在的营业机构id,即需要生成任务的机构
|
|
|
+ List<Long> needTaskOrgIdList = workOrgIdList.stream().filter(orgId -> !taskOrgIdList.contains(orgId)).collect(Collectors.toList());
|
|
|
+ //查询需要生成任务的机构的计划
|
|
|
+ List<CoreEduTrainingPlan> planList = coreEduTrainingPlanMapper.selectList(new LambdaQueryWrapper<CoreEduTrainingPlan>()
|
|
|
+ .eq(CoreEduTrainingPlan::getStandard, 0)
|
|
|
+ .eq(CoreEduTrainingPlan::getPlanStatus, EduTrainingPlanStatus.USING.getCode())
|
|
|
+ .eq(CoreEduTrainingPlan::getPlanCycle, EduTrainingPlanCycleEnum.MONTHLY.getCode())
|
|
|
+ .eq(CoreEduTrainingPlan::getDeleted, 0)
|
|
|
+ .in(CoreEduTrainingPlan::getBelongOrgId, needTaskOrgIdList)
|
|
|
+ .select(CoreEduTrainingPlan::getId, CoreEduTrainingPlan::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, EduTrainingPlanCycleEnum.QUARTERLY.getCode());
|
|
|
+ //查询机构当季度是否存在任务
|
|
|
+ List<CoreEduTrainingTask> taskList = lambdaQuery()
|
|
|
+ .eq(CoreEduTrainingTask::getPlanCycle, EduTrainingPlanCycleEnum.QUARTERLY.getCode())
|
|
|
+ .ge(CoreEduTrainingTask::getStartDate, dateRange.getStartTime())
|
|
|
+ .le(CoreEduTrainingTask::getEndDate, dateRange.getEndTime())
|
|
|
+ .in(CoreEduTrainingTask::getOrgId, orgIds)
|
|
|
+ .select(CoreEduTrainingTask::getId, CoreEduTrainingTask::getOrgId, CoreEduTrainingTask::getStatus)
|
|
|
+ .list();
|
|
|
+
|
|
|
+ //获取任务中存在的机构id
|
|
|
+ List<Long> taskOrgIdList = taskList.stream().map(CoreEduTrainingTask::getOrgId).distinct().collect(Collectors.toList());
|
|
|
+
|
|
|
+ //根据营业歇业分组
|
|
|
+ Map<Long, List<SysWorkTime>> listMap = futureWorkTime.stream().collect(Collectors.groupingBy(SysWorkTime::getIsEnable));
|
|
|
+ //歇业的数据
|
|
|
+ List<SysWorkTime> unWorkTimeList = listMap.get(UN_WORK);
|
|
|
+ List<Long> unWorkOrgIdList = unWorkTimeList.stream().map(SysWorkTime::getOrgId).collect(Collectors.toList());
|
|
|
+ List<Long> delTaskIdList = taskList.stream().filter(task -> unWorkOrgIdList.contains(task.getOrgId())).map(CoreEduTrainingTask::getId).collect(Collectors.toList());
|
|
|
+ delTaskByIdList(delTaskIdList);
|
|
|
+
|
|
|
+ //营业的数据
|
|
|
+ List<SysWorkTime> workTimeList = listMap.get(WORK);
|
|
|
+ List<Long> workOrgIdList = workTimeList.stream().map(SysWorkTime::getOrgId).collect(Collectors.toList());
|
|
|
+ //查询在任务表中不存在的营业机构id,即需要生成任务的机构
|
|
|
+ List<Long> needTaskOrgIdList = workOrgIdList.stream().filter(orgId -> !taskOrgIdList.contains(orgId)).collect(Collectors.toList());
|
|
|
+ //查询需要生成任务的机构的计划
|
|
|
+ List<CoreEduTrainingPlan> planList = coreEduTrainingPlanMapper.selectList(new LambdaQueryWrapper<CoreEduTrainingPlan>()
|
|
|
+ .eq(CoreEduTrainingPlan::getStandard, 0)
|
|
|
+ .eq(CoreEduTrainingPlan::getPlanStatus, EduTrainingPlanStatus.USING.getCode())
|
|
|
+ .eq(CoreEduTrainingPlan::getPlanCycle, EduTrainingPlanCycleEnum.QUARTERLY.getCode())
|
|
|
+ .eq(CoreEduTrainingPlan::getDeleted, 0)
|
|
|
+ .in(CoreEduTrainingPlan::getBelongOrgId, needTaskOrgIdList)
|
|
|
+ .select(CoreEduTrainingPlan::getId, CoreEduTrainingPlan::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, EduTrainingPlanCycleEnum.HALF_YEARLY.getCode());
|
|
|
+ //查询机构当半年度是否存在任务
|
|
|
+ List<CoreEduTrainingTask> taskList = lambdaQuery()
|
|
|
+ .eq(CoreEduTrainingTask::getPlanCycle, EduTrainingPlanCycleEnum.HALF_YEARLY.getCode())
|
|
|
+ .ge(CoreEduTrainingTask::getStartDate, dateRange.getStartTime())
|
|
|
+ .le(CoreEduTrainingTask::getEndDate, dateRange.getEndTime())
|
|
|
+ .in(CoreEduTrainingTask::getOrgId, orgIds)
|
|
|
+ .select(CoreEduTrainingTask::getId, CoreEduTrainingTask::getOrgId, CoreEduTrainingTask::getStatus)
|
|
|
+ .list();
|
|
|
+
|
|
|
+ //获取任务中存在的机构id
|
|
|
+ List<Long> taskOrgIdList = taskList.stream().map(CoreEduTrainingTask::getOrgId).distinct().collect(Collectors.toList());
|
|
|
+
|
|
|
+ //根据营业歇业分组
|
|
|
+ Map<Long, List<SysWorkTime>> listMap = futureWorkTime.stream().collect(Collectors.groupingBy(SysWorkTime::getIsEnable));
|
|
|
+ //歇业的数据
|
|
|
+ List<SysWorkTime> unWorkTimeList = listMap.get(UN_WORK);
|
|
|
+ List<Long> unWorkOrgIdList = unWorkTimeList.stream().map(SysWorkTime::getOrgId).collect(Collectors.toList());
|
|
|
+ List<Long> delTaskIdList = taskList.stream().filter(task -> unWorkOrgIdList.contains(task.getOrgId())).map(CoreEduTrainingTask::getId).collect(Collectors.toList());
|
|
|
+ delTaskByIdList(delTaskIdList);
|
|
|
+
|
|
|
+ //营业的数据
|
|
|
+ List<SysWorkTime> workTimeList = listMap.get(WORK);
|
|
|
+ List<Long> workOrgIdList = workTimeList.stream().map(SysWorkTime::getOrgId).collect(Collectors.toList());
|
|
|
+ //查询在任务表中不存在的营业机构id,即需要生成任务的机构
|
|
|
+ List<Long> needTaskOrgIdList = workOrgIdList.stream().filter(orgId -> !taskOrgIdList.contains(orgId)).collect(Collectors.toList());
|
|
|
+ //查询需要生成任务的机构的计划
|
|
|
+ List<CoreEduTrainingPlan> planList = coreEduTrainingPlanMapper.selectList(new LambdaQueryWrapper<CoreEduTrainingPlan>()
|
|
|
+ .eq(CoreEduTrainingPlan::getStandard, 0)
|
|
|
+ .eq(CoreEduTrainingPlan::getPlanStatus, EduTrainingPlanStatus.USING.getCode())
|
|
|
+ .eq(CoreEduTrainingPlan::getPlanCycle, EduTrainingPlanCycleEnum.HALF_YEARLY.getCode())
|
|
|
+ .eq(CoreEduTrainingPlan::getDeleted, 0)
|
|
|
+ .in(CoreEduTrainingPlan::getBelongOrgId, needTaskOrgIdList)
|
|
|
+ .select(CoreEduTrainingPlan::getId, CoreEduTrainingPlan::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, EduTrainingPlanCycleEnum.YEARLY.getCode());
|
|
|
+ //查询机构当半年度是否存在任务
|
|
|
+ List<CoreEduTrainingTask> taskList = lambdaQuery()
|
|
|
+ .eq(CoreEduTrainingTask::getPlanCycle, EduTrainingPlanCycleEnum.YEARLY.getCode())
|
|
|
+ .ge(CoreEduTrainingTask::getStartDate, dateRange.getStartTime())
|
|
|
+ .le(CoreEduTrainingTask::getEndDate, dateRange.getEndTime())
|
|
|
+ .in(CoreEduTrainingTask::getOrgId, orgIds)
|
|
|
+ .select(CoreEduTrainingTask::getId, CoreEduTrainingTask::getOrgId, CoreEduTrainingTask::getStatus)
|
|
|
+ .list();
|
|
|
+
|
|
|
+ //获取任务中存在的机构id
|
|
|
+ List<Long> taskOrgIdList = taskList.stream().map(CoreEduTrainingTask::getOrgId).distinct().collect(Collectors.toList());
|
|
|
+
|
|
|
+ //根据营业歇业分组
|
|
|
+ Map<Long, List<SysWorkTime>> listMap = futureWorkTime.stream().collect(Collectors.groupingBy(SysWorkTime::getIsEnable));
|
|
|
+ //歇业的数据
|
|
|
+ List<SysWorkTime> unWorkTimeList = listMap.get(UN_WORK);
|
|
|
+ List<Long> unWorkOrgIdList = unWorkTimeList.stream().map(SysWorkTime::getOrgId).collect(Collectors.toList());
|
|
|
+ List<Long> delTaskIdList = taskList.stream().filter(task -> unWorkOrgIdList.contains(task.getOrgId())).map(CoreEduTrainingTask::getId).collect(Collectors.toList());
|
|
|
+ delTaskByIdList(delTaskIdList);
|
|
|
+
|
|
|
+ //营业的数据
|
|
|
+ List<SysWorkTime> workTimeList = listMap.get(WORK);
|
|
|
+ List<Long> workOrgIdList = workTimeList.stream().map(SysWorkTime::getOrgId).collect(Collectors.toList());
|
|
|
+ //查询在任务表中不存在的营业机构id,即需要生成任务的机构
|
|
|
+ List<Long> needTaskOrgIdList = workOrgIdList.stream().filter(orgId -> !taskOrgIdList.contains(orgId)).collect(Collectors.toList());
|
|
|
+ //查询需要生成任务的机构的计划
|
|
|
+ List<CoreEduTrainingPlan> planList = coreEduTrainingPlanMapper.selectList(new LambdaQueryWrapper<CoreEduTrainingPlan>()
|
|
|
+ .eq(CoreEduTrainingPlan::getStandard, 0)
|
|
|
+ .eq(CoreEduTrainingPlan::getPlanStatus, EduTrainingPlanStatus.USING.getCode())
|
|
|
+ .eq(CoreEduTrainingPlan::getPlanCycle, EduTrainingPlanCycleEnum.YEARLY.getCode())
|
|
|
+ .eq(CoreEduTrainingPlan::getDeleted, 0)
|
|
|
+ .in(CoreEduTrainingPlan::getBelongOrgId, needTaskOrgIdList)
|
|
|
+ .select(CoreEduTrainingPlan::getId, CoreEduTrainingPlan::getPlanCycle));
|
|
|
+ //此list中Plan对象仅id与planCycle字段有值,
|
|
|
+ buildTaskByPlan(planList, today);
|
|
|
}
|
|
|
}
|
|
|
|