diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/process/fb/job/OverDueJob.java b/laws-modules/src/main/java/com/jero/modules/activiti/process/fb/job/OverDueJob.java new file mode 100644 index 00000000..1830b9c7 --- /dev/null +++ b/laws-modules/src/main/java/com/jero/modules/activiti/process/fb/job/OverDueJob.java @@ -0,0 +1,117 @@ +package com.jero.modules.activiti.process.fb.job; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.jero.modules.activiti.entity.ProcessApprovalRecord; +import com.jero.modules.activiti.process.fb.common.ConsultationTaskKey; +import com.jero.modules.activiti.process.fb.entity.ProcessFbConsultationList; +import com.jero.modules.activiti.process.fb.entity.ProcessFbConsultationUserLink; +import com.jero.modules.activiti.process.fb.entity.ProcessFbStandardConsultation; +import com.jero.modules.activiti.process.fb.service.IProcessFbConsultationListService; +import com.jero.modules.activiti.process.fb.service.IProcessFbConsultationUserLinkService; +import com.jero.modules.activiti.process.fb.service.IProcessFbStandardConsultationService; +import com.jero.modules.activiti.service.ProcessApprovalRecordService; +import lombok.extern.slf4j.Slf4j; +import org.activiti.engine.TaskService; +import org.activiti.engine.task.Task; +import org.quartz.Job; +import org.quartz.JobExecutionContext; +import org.quartz.JobExecutionException; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; +import java.util.Arrays; +import java.util.Date; +import java.util.List; +import java.util.Objects; +import java.util.stream.Collectors; + +/** + * @ClassName: OverDueJob + * @Description: + * @Author: yjz + * @Date: 2024-01-30 09:22 + * @Version: 1.0 + **/ +@Slf4j +@Transactional(rollbackFor = RuntimeException.class) +public class OverDueJob implements Job { + @Resource + private IProcessFbStandardConsultationService processFbStandardConsultationService; + @Resource + private IProcessFbConsultationUserLinkService processFbConsultationUserLinkService; + @Resource + private IProcessFbConsultationListService processFbConsultationListService; + @Resource + private ProcessApprovalRecordService processApprovalRecordService; + @Resource + private TaskService taskService; + + /** + * 征求意见流程-超过征求意见结束日期,存在设计师未提交意见时,应该汇总生成一条待办给下一节点 + * @param jobExecutionContext + * @throws JobExecutionException + */ + @Override + public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException { + + + + + log.info("征求意见流程-超过征求意见结束日期,存在设计师未提交意见时,应该汇总生成一条待办给下一节点定时任务开始"); + // 查询所有未完成的 设计工程师填写征求意见 节点 + List designEngineerNodeList = Arrays.asList(ConsultationTaskKey.DESIGN_ENGINEER_1, + ConsultationTaskKey.DESIGN_ENGINEER_2); + List nodeList = processApprovalRecordService.list( + new LambdaQueryWrapper() + .in(ProcessApprovalRecord::getNodeId, designEngineerNodeList) + .isNull(ProcessApprovalRecord::getEndTime)); + if (!nodeList.isEmpty()){ + // 查询节点相关的流程的征求意见结束日期 < 当前日期的 + List projectIdList = nodeList.stream() + .map(ProcessApprovalRecord::getProjectId) + .collect(Collectors.toList()); + List fbStandardConsultationList = processFbStandardConsultationService.list( + new LambdaQueryWrapper() + .in(ProcessFbStandardConsultation::getId, projectIdList) + .lt(ProcessFbStandardConsultation::getConsultationDueDate, new Date())); + if (!fbStandardConsultationList.isEmpty()){ + List idList = fbStandardConsultationList.stream() + .map(ProcessFbStandardConsultation::getId) + .collect(Collectors.toList()); + // 过滤符合条件的待办 + nodeList = nodeList.stream() + .filter(v -> idList.contains(v.getProjectId())) + .collect(Collectors.toList()); + for (ProcessApprovalRecord processApprovalRecord : nodeList) { + // 获取任务信息 + Task task = taskService.createTaskQuery().taskId(processApprovalRecord.getTaskId()).singleResult(); + String executionId = task.getExecutionId(); + // 查询用户关联表 + ProcessFbConsultationUserLink userLink = processFbConsultationUserLinkService.getOne( + new LambdaQueryWrapper() + .eq(ProcessFbConsultationUserLink::getParentExecutionId, executionId) + .eq(ProcessFbConsultationUserLink::getDesignEngineerId, + processApprovalRecord.getUserId()) + .eq(ProcessFbConsultationUserLink::getBusinessId, + processApprovalRecord.getProjectId())); + if (!Objects.isNull(userLink)){ + // 修改流程相关业务数据 + LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper<>(); + updateWrapper.eq(ProcessFbConsultationList::getBusinessId, processApprovalRecord.getProjectId()); + updateWrapper.eq(ProcessFbConsultationList::getDesignEngineerId, userLink.getDesignEngineerId()); + updateWrapper.eq(ProcessFbConsultationList::getUserLinkId, userLink.getId()); + updateWrapper.set(ProcessFbConsultationList::getModificationBefore, null); + updateWrapper.set(ProcessFbConsultationList::getModificationAfter, null); + updateWrapper.set(ProcessFbConsultationList::getModificationReason, "无意见"); + processFbConsultationListService.update(updateWrapper); + } + + // 完成任务 + taskService.complete(processApprovalRecord.getTaskId()); + } + } + } + log.info("征求意见流程-超过征求意见结束日期,存在设计师未提交意见时,应该汇总生成一条待办给下一节点定时任务结束"); + } +}