feat: 制修订流程-其他主起草人发起节点到期自动跳过

This commit is contained in:
2023-12-29 10:55:10 +08:00
parent fcd83a1bc5
commit 8c95df7554
7 changed files with 236 additions and 48 deletions
@@ -1,9 +1,12 @@
package com.jero.modules.activiti.process.esRevision.entity;
import lombok.Getter;
/**
* @author: Mzaxd
* @Date: 2023/12/22 15:04
*/
@Getter
public enum OperateTypeEnum {
CANNOT_OPERATE("不能操作显示", "1"),
@@ -18,12 +21,4 @@ public enum OperateTypeEnum {
this.value = value;
}
public String getName() {
return name;
}
public String getValue() {
return value;
}
}
@@ -257,6 +257,9 @@ public class ProcessEsRevision implements Serializable {
@ApiModelProperty(value = "主起草人")
private String mainDraftUser;
@ApiModelProperty(value = "其他起草人上传节点是否完成标识 0未完成 1已完成")
private String otherDrafterUploadFinishFlag;
/**
* 总工程师
*/
@@ -0,0 +1,109 @@
package com.jero.modules.activiti.process.esRevision.job;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.jero.common.constant.enums.YesOrNoEnum;
import com.jero.modules.activiti.entity.ProcessApprovalRecord;
import com.jero.modules.activiti.enums.FinishFlagEnum;
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.OtherDraftUserVO;
import com.jero.modules.activiti.process.esRevision.service.EsRevisionService;
import com.jero.modules.activiti.service.ProcessApprovalRecordService;
import lombok.extern.slf4j.Slf4j;
import org.activiti.engine.RuntimeService;
import org.jetbrains.annotations.NotNull;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import javax.annotation.Resource;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* @author: Mzaxd
* @Date: 2023/12/28 18:40
*/
@Slf4j
public class AdviceDeadlineJob implements Job {
@Resource
private EsRevisionService revisionService;
@Resource
private ProcessApprovalRecordService approvalRecordService;
@Resource
private RuntimeService runtimeService;
@Override
public void execute(JobExecutionContext context) throws JobExecutionException {
LambdaQueryWrapper<ProcessEsRevision> revisionLambdaQueryWrapper = new LambdaQueryWrapper<>();
revisionLambdaQueryWrapper.eq(ProcessEsRevision::getOtherDrafterUploadFinishFlag, YesOrNoEnum.NO.getValue());
List<ProcessEsRevision> revisionList = revisionService.list(revisionLambdaQueryWrapper);
LambdaQueryWrapper<ProcessApprovalRecord> arWrapper = new LambdaQueryWrapper<>();
arWrapper.eq(ProcessApprovalRecord::getFinishFlag, FinishFlagEnum.INCOMPLETE.getValue());
for (ProcessEsRevision revision : revisionList) {
String prcId = revision.getProcessInstanceId();
List<OtherDraftUserVO> otherDraftUserVOS = revision.parseOtherDraftUserVOS();
if (otherDraftUserVOS == null || otherDraftUserVOS.isEmpty()) {
continue;
}
arWrapper.eq(ProcessApprovalRecord::getProcessInstanceId, prcId);
List<ProcessApprovalRecord> arList = approvalRecordService.list(arWrapper);
Map<String, ProcessApprovalRecord> arMap = arList.stream().collect(Collectors.toMap(ProcessApprovalRecord::getOriginUserId, ar -> ar));
Date curDate = new Date();
for (OtherDraftUserVO otherDraftUser : otherDraftUserVOS) {
String originUserId = otherDraftUser.getUser();
if (StrUtil.isNotBlank(otherDraftUser.getFileId())) {
continue;
}
// 获取TaskId
Date deadline = getDeadlineDate(otherDraftUser);
// 如果当前日期大于该条数据的截止日期 则自动完成任务
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);
}
}
}
}
@NotNull
private static Date getDeadlineDate(OtherDraftUserVO otherDraftUser) {
Date deadline = otherDraftUser.getDeadline();
// 设置deadline为今天的最后一秒
// 创建一个 Calendar 对象
Calendar calendar = Calendar.getInstance();
// 获取当前日期和时间
calendar.setTime(deadline);
// 设置时间部分为当天的最后一秒
calendar.set(Calendar.HOUR_OF_DAY, 23);
calendar.set(Calendar.MINUTE, 59);
calendar.set(Calendar.SECOND, 59);
calendar.set(Calendar.MILLISECOND, 999);
// 将修改后的日期和时间设置回原始的 Date 对象
deadline = calendar.getTime();
return deadline;
}
}
@@ -0,0 +1,109 @@
package com.jero.modules.activiti.process.esRevision.job;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.jero.common.constant.enums.YesOrNoEnum;
import com.jero.modules.activiti.entity.ProcessApprovalRecord;
import com.jero.modules.activiti.enums.FinishFlagEnum;
import com.jero.modules.activiti.process.common.enums.ProcessType;
import com.jero.modules.activiti.process.common.service.ActFlowCommonService;
import com.jero.modules.activiti.process.esRevision.entity.ProcessEsRevision;
import com.jero.modules.activiti.process.esRevision.entity.RevisionTaskNodeIdConstant;
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.service.ProcessApprovalRecordService;
import lombok.extern.slf4j.Slf4j;
import org.apache.tomcat.jni.Proc;
import org.jetbrains.annotations.NotNull;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import javax.annotation.Resource;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* @author: Mzaxd
* @Date: 2023/12/28 18:40
*/
@Slf4j
public class OtherDraftUserUploadDeadlineJob implements Job {
@Resource
private EsRevisionService revisionService;
@Resource
private ProcessApprovalRecordService approvalRecordService;
@Override
public void execute(JobExecutionContext context) throws JobExecutionException {
LambdaQueryWrapper<ProcessEsRevision> revisionLambdaQueryWrapper = new LambdaQueryWrapper<>();
revisionLambdaQueryWrapper.eq(ProcessEsRevision::getOtherDrafterUploadFinishFlag, YesOrNoEnum.NO.getValue());
List<ProcessEsRevision> revisionList = revisionService.list(revisionLambdaQueryWrapper);
LambdaQueryWrapper<ProcessApprovalRecord> arWrapper = new LambdaQueryWrapper<>();
arWrapper.eq(ProcessApprovalRecord::getFinishFlag, FinishFlagEnum.INCOMPLETE.getValue());
for (ProcessEsRevision revision : revisionList) {
String prcId = revision.getProcessInstanceId();
List<OtherDraftUserVO> otherDraftUserVOS = revision.parseOtherDraftUserVOS();
if (otherDraftUserVOS == null || otherDraftUserVOS.isEmpty()) {
continue;
}
arWrapper.eq(ProcessApprovalRecord::getProcessInstanceId, prcId);
List<ProcessApprovalRecord> arList = approvalRecordService.list(arWrapper);
Map<String, ProcessApprovalRecord> arMap = arList.stream().collect(Collectors.toMap(ProcessApprovalRecord::getOriginUserId, ar -> ar));
Date curDate = new Date();
for (OtherDraftUserVO otherDraftUser : otherDraftUserVOS) {
String originUserId = otherDraftUser.getUser();
if (StrUtil.isNotBlank(otherDraftUser.getFileId())) {
continue;
}
// 获取TaskId
Date deadline = getDeadlineDate(otherDraftUser);
// 如果当前日期大于该条数据的截止日期 则自动完成任务
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);
}
}
}
}
@NotNull
private static Date getDeadlineDate(OtherDraftUserVO otherDraftUser) {
Date deadline = otherDraftUser.getDeadline();
// 设置deadline为今天的最后一秒
// 创建一个 Calendar 对象
Calendar calendar = Calendar.getInstance();
// 获取当前日期和时间
calendar.setTime(deadline);
// 设置时间部分为当天的最后一秒
calendar.set(Calendar.HOUR_OF_DAY, 23);
calendar.set(Calendar.MINUTE, 59);
calendar.set(Calendar.SECOND, 59);
calendar.set(Calendar.MILLISECOND, 999);
// 将修改后的日期和时间设置回原始的 Date 对象
deadline = calendar.getTime();
return deadline;
}
}
@@ -1,32 +0,0 @@
package com.jero.modules.activiti.process.esRevision.listener;
import lombok.extern.slf4j.Slf4j;
import org.activiti.engine.TaskService;
import org.activiti.engine.delegate.DelegateExecution;
import org.activiti.engine.delegate.ExecutionListener;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
/**
* @author: Mzaxd
* @Date: 2023/12/21 14:01
* @Description: 其他起草人上传文件节点需要设置每个节点的截止时间也就是流程图上
* 的时间边界事件,需要从流程变量中取出对应的时间然后放入对应子流程中
*/
@Slf4j
@Component
public class OtherDrafterUploadCreateListener implements ExecutionListener {
@Override
public void notify(DelegateExecution delegateExecution) {
log.info("企标制修订流程 其他起草人上传节点 创建监听执行器开始执行");
// 获取执行人
String otherDraftUser = (String) delegateExecution.getVariable("otherDraftUser");
// 获取对应的结束时间
String deadline = (String) delegateExecution.getVariable(otherDraftUser + "-deadline");
// 设置流程变量
delegateExecution.setVariable("deadline", deadline);
log.info("企标制修订流程 其他起草人上传节点 创建监听执行器开始执行");
}
}
@@ -115,5 +115,7 @@ public class ProcessESRevisionEndListener implements ExecutionListener {
// 企标计划改为已完成
esp.setProjectStatus(ESPProjectStatus.COMPLETED.getValue());
espService.updateById(esp);
// 软删除制修订计划
esRevisionService.removeById(data.getId());
}
}
@@ -253,7 +253,12 @@ public class EsRevisionServiceImpl extends ServiceImpl<EsRevisionMapper, Process
// 某些节点需要对数据进行特殊处理
switch (xmlNodeId) {
case OTHER_DRAFT_USER_UPLOAD:
String curUserId = UserUtils.getUserId();
String curUserId = "";
try {
curUserId = UserUtils.getUserId();
} catch (Exception e) {
log.error("获取当前用户失败");
}
for (OtherDraftUserVO o : otherDraftUserVOS) {
if (o.getUser().equals(curUserId)) {
o.setOperateType(OperateTypeEnum.UPLOAD_AND_CHANGE_DRAFT_USER.getValue());
@@ -299,7 +304,6 @@ public class EsRevisionServiceImpl extends ServiceImpl<EsRevisionMapper, Process
throw new JeroBootException("taskId为空或任务不存在");
}
String userId = actFlowCommonService.getOriginTaskAssignee(taskId);
String curUserId = UserUtils.getUserId();
Task task = taskService.createTaskQuery().taskId(taskId).singleResult();
// 获取执行id
String executionId = task.getExecutionId();
@@ -326,6 +330,7 @@ public class EsRevisionServiceImpl extends ServiceImpl<EsRevisionMapper, Process
String contactUser = (String) runtimeService.getVariable(executionId, "contactUser");
// 更新审批表为完成,填充数据
actFlowCommonService.updateApprovalInfo(commonVO, taskId, pass);
String curUserId;
switch (xmlNodeId) {
case MAIN_DRAFT_USER_DISTRIBUTE:
// 判断是否分发 设置流程变量
@@ -338,11 +343,6 @@ public class EsRevisionServiceImpl extends ServiceImpl<EsRevisionMapper, Process
taskService.setVariable(taskId, "distribute", true);
taskService.setVariable(taskId, "otherDraftUserList", otherDraftUserVOS.stream().map(OtherDraftUserVO::getUser)
.collect(Collectors.toList()));
// 遍历其他起草人列表,将截止时间放置到流程变量中
Map<String, Object> deadlineMap = new HashMap<>();
otherDraftUserVOS.forEach(otherDraftUserVO -> deadlineMap
.put(otherDraftUserVO.getUser() + "-deadline", otherDraftUserVO.getISODeadlineTime()));
taskService.setVariables(taskId, deadlineMap);
data.setOtherDraftUserVOS(otherDraftUserVOS);
data.setOtherDrafterUploadFileJson(otherDraftUserVOS);
}
@@ -387,6 +387,7 @@ public class EsRevisionServiceImpl extends ServiceImpl<EsRevisionMapper, Process
data = revisionData.getData();
List<ReviewMeetingDetailVO> reviewMeetingDetails = data.getReviewMeetingDetails();
// 设置当前评分人
curUserId = UserUtils.getUserId();
reviewMeetingDetails.forEach(reviewMeetingDetail -> reviewMeetingDetail.setAdjudicatorId(curUserId));
ProcessEsRevision revisionDb = getById(dataDb.getId());
List<ReviewMeetingDetailVO> reviewMeetingDetailsDb = revisionDb.parseReviewMeetingDetails();
@@ -466,7 +467,7 @@ public class EsRevisionServiceImpl extends ServiceImpl<EsRevisionMapper, Process
advices.forEach(advice -> advice.setExecutionId(executionId));
advices.forEach(advice -> {
if (StrUtil.isBlank(advice.getCreateUserId())) {
advice.setCreateUserId(curUserId);
advice.setCreateUserId(UserUtils.getUserId());
}
});
adviceService.saveBatch(advices);
@@ -523,6 +524,7 @@ public class EsRevisionServiceImpl extends ServiceImpl<EsRevisionMapper, Process
break;
case MAIN_DRAFT_USER_RELEASE:
data = revisionData.getData();
curUserId = UserUtils.getUserId();
data.setMainDraftUser(curUserId);
saveOrUpdate(data);
// TODO 在线编辑 插入签章