feat: 企标制修订流程 征求意见截止日期自动完成后定时任务
This commit is contained in:
+1
@@ -100,6 +100,7 @@ public class EsRevisionAdvice implements Serializable {
|
|||||||
* 1采纳 2部分采纳 3不采纳
|
* 1采纳 2部分采纳 3不采纳
|
||||||
*/
|
*/
|
||||||
@ApiModelProperty(value = "1采纳 2部分采纳 3不采纳")
|
@ApiModelProperty(value = "1采纳 2部分采纳 3不采纳")
|
||||||
|
@Dict(dicCode = "consultation_opinion")
|
||||||
private String handleAdvice;
|
private String handleAdvice;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
+48
-44
@@ -1,27 +1,25 @@
|
|||||||
package com.jero.modules.activiti.process.esRevision.job;
|
package com.jero.modules.activiti.process.esRevision.job;
|
||||||
|
|
||||||
import cn.hutool.core.util.StrUtil;
|
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
import com.jero.common.constant.enums.YesOrNoEnum;
|
import com.jero.common.constant.enums.YesOrNoEnum;
|
||||||
import com.jero.modules.activiti.entity.ProcessApprovalRecord;
|
import com.jero.modules.activiti.entity.ProcessApprovalRecord;
|
||||||
import com.jero.modules.activiti.enums.FinishFlagEnum;
|
import com.jero.modules.activiti.enums.FinishFlagEnum;
|
||||||
|
import com.jero.modules.activiti.process.esRevision.entity.EsRevisionAdvice;
|
||||||
import com.jero.modules.activiti.process.esRevision.entity.ProcessEsRevision;
|
import com.jero.modules.activiti.process.esRevision.entity.ProcessEsRevision;
|
||||||
import com.jero.modules.activiti.process.esRevision.entity.vo.ESRevisionDataVO;
|
import com.jero.modules.activiti.process.esRevision.entity.vo.ESRevisionDataVO;
|
||||||
import com.jero.modules.activiti.process.esRevision.entity.vo.OtherDraftUserVO;
|
|
||||||
import com.jero.modules.activiti.process.esRevision.service.EsRevisionService;
|
import com.jero.modules.activiti.process.esRevision.service.EsRevisionService;
|
||||||
import com.jero.modules.activiti.service.ProcessApprovalRecordService;
|
import com.jero.modules.activiti.service.ProcessApprovalRecordService;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.activiti.engine.RuntimeService;
|
import org.activiti.engine.RuntimeService;
|
||||||
|
import org.activiti.engine.TaskService;
|
||||||
|
import org.activiti.engine.runtime.Execution;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.quartz.Job;
|
import org.quartz.Job;
|
||||||
import org.quartz.JobExecutionContext;
|
import org.quartz.JobExecutionContext;
|
||||||
import org.quartz.JobExecutionException;
|
import org.quartz.JobExecutionException;
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
import java.util.Calendar;
|
import java.util.*;
|
||||||
import java.util.Date;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -40,57 +38,63 @@ public class AdviceDeadlineJob implements Job {
|
|||||||
@Resource
|
@Resource
|
||||||
private RuntimeService runtimeService;
|
private RuntimeService runtimeService;
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private TaskService taskService;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void execute(JobExecutionContext context) throws JobExecutionException {
|
public void execute(JobExecutionContext context) throws JobExecutionException {
|
||||||
|
log.info("开始执行征求意见截止日期每日定时任务");
|
||||||
LambdaQueryWrapper<ProcessEsRevision> revisionLambdaQueryWrapper = new LambdaQueryWrapper<>();
|
LambdaQueryWrapper<ProcessEsRevision> revisionLambdaQueryWrapper = new LambdaQueryWrapper<>();
|
||||||
revisionLambdaQueryWrapper.eq(ProcessEsRevision::getOtherDrafterUploadFinishFlag, YesOrNoEnum.NO.getValue());
|
revisionLambdaQueryWrapper.eq(ProcessEsRevision::getDelFlag, YesOrNoEnum.NO.getValue());
|
||||||
List<ProcessEsRevision> revisionList = revisionService.list(revisionLambdaQueryWrapper);
|
List<ProcessEsRevision> revisionList = revisionService.list(revisionLambdaQueryWrapper);
|
||||||
|
if (revisionList == null || revisionList.isEmpty()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
Map<String, ProcessEsRevision> revisionMap = revisionList.stream()
|
||||||
|
.collect(Collectors.toMap(ProcessEsRevision::getProcessInstanceId, revision -> revision));
|
||||||
|
// 找到所有征求意见的未完成的待办
|
||||||
LambdaQueryWrapper<ProcessApprovalRecord> arWrapper = new LambdaQueryWrapper<>();
|
LambdaQueryWrapper<ProcessApprovalRecord> arWrapper = new LambdaQueryWrapper<>();
|
||||||
arWrapper.eq(ProcessApprovalRecord::getFinishFlag, FinishFlagEnum.INCOMPLETE.getValue());
|
arWrapper.eq(ProcessApprovalRecord::getFinishFlag, FinishFlagEnum.INCOMPLETE.getValue());
|
||||||
for (ProcessEsRevision revision : revisionList) {
|
arWrapper.in(ProcessApprovalRecord::getProcessInstanceId, revisionMap.keySet());
|
||||||
String prcId = revision.getProcessInstanceId();
|
arWrapper.eq(ProcessApprovalRecord::getTaskName, "征求意见对象填写意见");
|
||||||
List<OtherDraftUserVO> otherDraftUserVOS = revision.parseOtherDraftUserVOS();
|
arWrapper.isNotNull(ProcessApprovalRecord::getTaskId);
|
||||||
if (otherDraftUserVOS == null || otherDraftUserVOS.isEmpty()) {
|
List<ProcessApprovalRecord> arList = approvalRecordService.list(arWrapper);
|
||||||
|
Date curDate = new Date();
|
||||||
|
for (ProcessApprovalRecord record : arList) {
|
||||||
|
String taskId = record.getTaskId();
|
||||||
|
// 根据record获取每一个任务的deadline
|
||||||
|
// 获取Task
|
||||||
|
taskService.createTaskQuery().taskId(record.getTaskId()).singleResult();
|
||||||
|
// 根据Task获取其父级executionId
|
||||||
|
String executionId = taskService.createTaskQuery()
|
||||||
|
.taskId(record.getTaskId()).singleResult().getExecutionId();
|
||||||
|
// 获取Execution
|
||||||
|
Execution execution = runtimeService.createExecutionQuery().executionId(executionId).singleResult();
|
||||||
|
String parentExecutionId = execution.getParentId();
|
||||||
|
// 根据executionId获取流程变量
|
||||||
|
Date adviceDeadline = (Date) taskService.getVariable(taskId, parentExecutionId + "-adviceDeadline");
|
||||||
|
if (adviceDeadline == null) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
arWrapper.eq(ProcessApprovalRecord::getProcessInstanceId, prcId);
|
adviceDeadline = getDeadlineDate(adviceDeadline);
|
||||||
List<ProcessApprovalRecord> arList = approvalRecordService.list(arWrapper);
|
// 如果当前日期大于该条数据的截止日期 则自动完成任务
|
||||||
Map<String, ProcessApprovalRecord> arMap = arList.stream().collect(Collectors.toMap(ProcessApprovalRecord::getOriginUserId, ar -> ar));
|
if (curDate.after(adviceDeadline)) {
|
||||||
Date curDate = new Date();
|
ESRevisionDataVO handleData = revisionService.getHandleData(taskId);
|
||||||
for (OtherDraftUserVO otherDraftUser : otherDraftUserVOS) {
|
handleData.getCommon().setTaskId(taskId);
|
||||||
String originUserId = otherDraftUser.getUser();
|
ProcessEsRevision data = handleData.getData();
|
||||||
if (StrUtil.isNotBlank(otherDraftUser.getFileId())) {
|
EsRevisionAdvice esRevisionAdvice = new EsRevisionAdvice();
|
||||||
continue;
|
esRevisionAdvice.setClauseName("无");
|
||||||
}
|
esRevisionAdvice.setClauseNum("无");
|
||||||
// 获取TaskId
|
esRevisionAdvice.setEditAdvice("无");
|
||||||
Date deadline = getDeadlineDate(otherDraftUser);
|
data.setAdvices(new ArrayList<>(Collections.singletonList(esRevisionAdvice)));
|
||||||
// 如果当前日期大于该条数据的截止日期 则自动完成任务
|
revisionService.approval(handleData, true);
|
||||||
if (curDate.after(deadline)) {
|
|
||||||
ProcessApprovalRecord ar = arMap.get(originUserId);
|
|
||||||
if (ar == null) {
|
|
||||||
log.error("未找到对应待办");
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
String taskId = ar.getTaskId();
|
|
||||||
String taskName = ar.getTaskName();
|
|
||||||
if (StrUtil.isBlank(taskId)) {
|
|
||||||
log.error("任务Id为空");
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
if (!taskName.equals("其他起草人上传企标")) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
ESRevisionDataVO handleData = revisionService.getHandleData(taskId);
|
|
||||||
handleData.getCommon().setTaskId(taskId);
|
|
||||||
revisionService.approval(handleData, true);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
log.info("征求意见截止日期每日定时任务执行结束");
|
||||||
}
|
}
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
private static Date getDeadlineDate(OtherDraftUserVO otherDraftUser) {
|
private static Date getDeadlineDate(Date deadline) {
|
||||||
Date deadline = otherDraftUser.getDeadline();
|
|
||||||
// 设置deadline为今天的最后一秒
|
// 设置deadline为今天的最后一秒
|
||||||
// 创建一个 Calendar 对象
|
// 创建一个 Calendar 对象
|
||||||
Calendar calendar = Calendar.getInstance();
|
Calendar calendar = Calendar.getInstance();
|
||||||
|
|||||||
+1
-3
@@ -420,7 +420,7 @@ public class EsRevisionServiceImpl extends ServiceImpl<EsRevisionMapper, Process
|
|||||||
String adviceUsers = (String) flowUser.get("adviceUserList");
|
String adviceUsers = (String) flowUser.get("adviceUserList");
|
||||||
List<String> adviceUserList = Arrays.asList(adviceUsers.split(","));
|
List<String> adviceUserList = Arrays.asList(adviceUsers.split(","));
|
||||||
runtimeService.setVariable(executionId, "adviceUserList", adviceUserList);
|
runtimeService.setVariable(executionId, "adviceUserList", adviceUserList);
|
||||||
runtimeService.setVariable(executionId, "adviceDeadline", data.getAdviceDeadline());
|
runtimeService.setVariable(executionId, executionId + "-adviceDeadline", data.getAdviceDeadline());
|
||||||
runtimeService.setVariable(executionId, contactUser + "-ExecutionId", executionId);
|
runtimeService.setVariable(executionId, contactUser + "-ExecutionId", executionId);
|
||||||
userMap.put("adviceUserList", adviceUsers);
|
userMap.put("adviceUserList", adviceUsers);
|
||||||
processNodeLinkService.incrementSaveNodeUserLink(processDefinitionId, processInstanceId, userMap);
|
processNodeLinkService.incrementSaveNodeUserLink(processDefinitionId, processInstanceId, userMap);
|
||||||
@@ -455,7 +455,6 @@ public class EsRevisionServiceImpl extends ServiceImpl<EsRevisionMapper, Process
|
|||||||
// 保存流程数据
|
// 保存流程数据
|
||||||
if (pass) {
|
if (pass) {
|
||||||
data = revisionData.getData();
|
data = revisionData.getData();
|
||||||
saveOrUpdate(data);
|
|
||||||
// 保存征求意见记录 先删后增
|
// 保存征求意见记录 先删后增
|
||||||
adviceService.remove(new LambdaQueryWrapper<EsRevisionAdvice>()
|
adviceService.remove(new LambdaQueryWrapper<EsRevisionAdvice>()
|
||||||
.eq(EsRevisionAdvice::getProcessInstanceId, processInstanceId)
|
.eq(EsRevisionAdvice::getProcessInstanceId, processInstanceId)
|
||||||
@@ -476,7 +475,6 @@ public class EsRevisionServiceImpl extends ServiceImpl<EsRevisionMapper, Process
|
|||||||
case MAIN_DRAFT_USER_COLLECT_SECOND:
|
case MAIN_DRAFT_USER_COLLECT_SECOND:
|
||||||
// 保存流程数据
|
// 保存流程数据
|
||||||
data = revisionData.getData();
|
data = revisionData.getData();
|
||||||
saveOrUpdate(data);
|
|
||||||
// 更改保存征求意见记录
|
// 更改保存征求意见记录
|
||||||
advices = data.getAdvices();
|
advices = data.getAdvices();
|
||||||
adviceService.saveOrUpdateBatch(advices);
|
adviceService.saveOrUpdateBatch(advices);
|
||||||
|
|||||||
Reference in New Issue
Block a user