fix: 80454 企标制修订流程--其他起草人列表截止日期定时任务未生效
This commit is contained in:
+12
@@ -173,6 +173,18 @@ public class ActFlowCommonService {
|
|||||||
processApprovalRecordService.updateById(approvalRecord);
|
processApprovalRecordService.updateById(approvalRecord);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void updateApprovalInfoWithoutNodeId(String taskId) {
|
||||||
|
ProcessApprovalRecord approvalRecord = processApprovalRecordService.getToDoByTaskId(taskId);
|
||||||
|
if (approvalRecord == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
approvalRecord.setCommitText(null);
|
||||||
|
approvalRecord.setCommitFile(null);
|
||||||
|
approvalRecord.setFinishFlag(FinishFlagEnum.COMPLETE.getValue());
|
||||||
|
approvalRecord.setEndTime(new Date());
|
||||||
|
processApprovalRecordService.updateById(approvalRecord);
|
||||||
|
}
|
||||||
|
|
||||||
public ProcessApprovalRecord getNodeIdByTaskId(String taskId) {
|
public ProcessApprovalRecord getNodeIdByTaskId(String taskId) {
|
||||||
return processApprovalRecordService.getToDoByTaskId(taskId);
|
return processApprovalRecordService.getToDoByTaskId(taskId);
|
||||||
}
|
}
|
||||||
|
|||||||
+3
@@ -43,6 +43,9 @@ public class OtherDraftUserVO {
|
|||||||
@ApiModelProperty(value = "绑定的taskId")
|
@ApiModelProperty(value = "绑定的taskId")
|
||||||
private String taskId;
|
private String taskId;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "未完成为0 已完成为1")
|
||||||
|
private String finishFlag;
|
||||||
|
|
||||||
public String getISODeadlineTime() {
|
public String getISODeadlineTime() {
|
||||||
SimpleDateFormat isoFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
|
SimpleDateFormat isoFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
|
||||||
return isoFormat.format(this.deadline);
|
return isoFormat.format(this.deadline);
|
||||||
|
|||||||
+72
-25
@@ -5,6 +5,7 @@ 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.common.entity.CommonVO;
|
||||||
import com.jero.modules.activiti.process.common.enums.ProcessType;
|
import com.jero.modules.activiti.process.common.enums.ProcessType;
|
||||||
import com.jero.modules.activiti.process.common.service.ActFlowCommonService;
|
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.ProcessEsRevision;
|
||||||
@@ -14,6 +15,8 @@ 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.TaskService;
|
||||||
import org.apache.tomcat.jni.Proc;
|
import org.apache.tomcat.jni.Proc;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.quartz.Job;
|
import org.quartz.Job;
|
||||||
@@ -21,12 +24,11 @@ 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;
|
||||||
|
|
||||||
|
import static org.apache.tools.ant.taskdefs.SetPermissions.NonPosixMode.pass;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author: Mzaxd
|
* @author: Mzaxd
|
||||||
* @Date: 2023/12/28 18:40
|
* @Date: 2023/12/28 18:40
|
||||||
@@ -40,6 +42,15 @@ public class OtherDraftUserUploadDeadlineJob implements Job {
|
|||||||
@Resource
|
@Resource
|
||||||
private ProcessApprovalRecordService approvalRecordService;
|
private ProcessApprovalRecordService approvalRecordService;
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private ActFlowCommonService actFlowCommonService;
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private TaskService taskService;
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private RuntimeService runtimeService;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void execute(JobExecutionContext context) throws JobExecutionException {
|
public void execute(JobExecutionContext context) throws JobExecutionException {
|
||||||
LambdaQueryWrapper<ProcessEsRevision> revisionLambdaQueryWrapper = new LambdaQueryWrapper<>();
|
LambdaQueryWrapper<ProcessEsRevision> revisionLambdaQueryWrapper = new LambdaQueryWrapper<>();
|
||||||
@@ -59,40 +70,76 @@ public class OtherDraftUserUploadDeadlineJob implements Job {
|
|||||||
arWrapper.eq(ProcessApprovalRecord::getProcessInstanceId, prcId);
|
arWrapper.eq(ProcessApprovalRecord::getProcessInstanceId, prcId);
|
||||||
List<ProcessApprovalRecord> arList = approvalRecordService.list(arWrapper);
|
List<ProcessApprovalRecord> arList = approvalRecordService.list(arWrapper);
|
||||||
arWrapper.clear();
|
arWrapper.clear();
|
||||||
Map<String, List<ProcessApprovalRecord>> arMap = arList.stream()
|
|
||||||
.collect(Collectors.groupingBy(ProcessApprovalRecord::getOriginUserId));
|
// 将task和记录进行绑定
|
||||||
|
this.bundleTaskAndApprovalRecord(otherDraftUserVOS, arList);
|
||||||
|
|
||||||
Date curDate = new Date();
|
Date curDate = new Date();
|
||||||
for (OtherDraftUserVO otherDraftUser : otherDraftUserVOS) {
|
for (OtherDraftUserVO otherDraftUser : otherDraftUserVOS) {
|
||||||
String originUserId = otherDraftUser.getUser();
|
|
||||||
if (StrUtil.isNotBlank(otherDraftUser.getFileId())) {
|
if (StrUtil.isNotBlank(otherDraftUser.getFileId())) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
if (StrUtil.isBlank(otherDraftUser.getTaskId())) {
|
||||||
|
log.error("未找到对应待办");
|
||||||
|
continue;
|
||||||
|
}
|
||||||
// 获取TaskId
|
// 获取TaskId
|
||||||
Date deadline = getDeadlineDate(otherDraftUser);
|
Date deadline = getDeadlineDate(otherDraftUser);
|
||||||
// 如果当前日期大于该条数据的截止日期 则自动完成任务
|
// 如果当前日期大于该条数据的截止日期 则自动完成任务
|
||||||
if (curDate.after(deadline)) {
|
if (curDate.after(deadline)) {
|
||||||
List<ProcessApprovalRecord> ar = arMap.get(originUserId);
|
// 审批节点
|
||||||
if (ar == null || ar.isEmpty()) {
|
// 更新审批表为完成,填充数据
|
||||||
log.error("未找到对应待办");
|
actFlowCommonService.updateApprovalInfoWithoutNodeId(otherDraftUser.getTaskId());
|
||||||
|
// 判断能否根据TaskId找到有效的Task
|
||||||
|
if (taskService.createTaskQuery().taskId(otherDraftUser.getTaskId()).singleResult() == null) {
|
||||||
|
log.error("未找到对应Task");
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
for (ProcessApprovalRecord processApprovalRecord : ar) {
|
taskService.complete(otherDraftUser.getTaskId());
|
||||||
String taskId = processApprovalRecord.getTaskId();
|
otherDraftUser.setFinishFlag(YesOrNoEnum.YES.getValue());
|
||||||
String taskName = processApprovalRecord.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);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
revision.setOtherDrafterUploadFileJson(otherDraftUserVOS);
|
||||||
|
revisionService.updateById(revision);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void bundleTaskAndApprovalRecord(List<OtherDraftUserVO> otherDraftUserVOS, List<ProcessApprovalRecord> arList) {
|
||||||
|
Map<String, List<ProcessApprovalRecord>> arMap = arList.stream()
|
||||||
|
.collect(Collectors.groupingBy(ProcessApprovalRecord::getOriginUserId));
|
||||||
|
List<String> alreadyTaskId = new ArrayList<>();
|
||||||
|
otherDraftUserVOS.forEach(o -> alreadyTaskId.add(o.getTaskId()));
|
||||||
|
for (OtherDraftUserVO otherDraftUser : otherDraftUserVOS) {
|
||||||
|
if (StrUtil.isNotBlank(otherDraftUser.getTaskId())) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (YesOrNoEnum.YES.getValue().equals(otherDraftUser.getFinishFlag())) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
String originUserId = otherDraftUser.getUser();
|
||||||
|
List<ProcessApprovalRecord> ar = arMap.get(originUserId);
|
||||||
|
if (ar == null || ar.isEmpty()) {
|
||||||
|
log.error("未找到对应待办");
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (ProcessApprovalRecord processApprovalRecord : ar) {
|
||||||
|
if (alreadyTaskId.contains(processApprovalRecord.getTaskId())) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
String taskId = processApprovalRecord.getTaskId();
|
||||||
|
String taskName = processApprovalRecord.getTaskName();
|
||||||
|
if (StrUtil.isBlank(taskId)) {
|
||||||
|
log.error("任务Id为空");
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (!taskName.equals("其他起草人上传企标")) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
otherDraftUser.setTaskId(taskId);
|
||||||
|
alreadyTaskId.add(taskId);
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
-77
@@ -1,77 +0,0 @@
|
|||||||
package com.jero.modules.activiti.process.esRevision.listener;
|
|
||||||
|
|
||||||
import cn.hutool.core.util.StrUtil;
|
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
||||||
import com.jero.modules.activiti.entity.ProcessApprovalRecord;
|
|
||||||
import com.jero.modules.activiti.enums.FinishFlagEnum;
|
|
||||||
import com.jero.modules.activiti.process.esRevision.entity.OperateTypeEnum;
|
|
||||||
import com.jero.modules.activiti.process.esRevision.entity.ProcessEsRevision;
|
|
||||||
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 org.activiti.engine.delegate.DelegateTask;
|
|
||||||
import org.activiti.engine.delegate.TaskListener;
|
|
||||||
import org.springframework.stereotype.Component;
|
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.stream.Collectors;
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author: Mzaxd
|
|
||||||
* @Date: 2023/12/19 11:59
|
|
||||||
*/
|
|
||||||
@Component("processESRevisionOtherDraftUserUploadCreateListener")
|
|
||||||
public class ProcessESRevisionOtherDraftUserUploadCreateListener implements TaskListener {
|
|
||||||
|
|
||||||
@Resource
|
|
||||||
private EsRevisionService esRevisionService;
|
|
||||||
|
|
||||||
@Resource
|
|
||||||
private ProcessApprovalRecordService approvalRecordService;
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void notify(DelegateTask delegateTask) {
|
|
||||||
// // 获取流程实例Id
|
|
||||||
// String processInstanceId = delegateTask.getProcessInstanceId();
|
|
||||||
// // 获取流程变量otherDraftUser
|
|
||||||
// String otherDraftUser = (String) delegateTask.getVariable("otherDraftUser");
|
|
||||||
// // 获取相关数据
|
|
||||||
// LambdaQueryWrapper<ProcessEsRevision> revisionWrapper = new LambdaQueryWrapper<>();
|
|
||||||
// revisionWrapper.eq(ProcessEsRevision::getProcessInstanceId, processInstanceId);
|
|
||||||
// ProcessEsRevision revision = esRevisionService.getOne(revisionWrapper);
|
|
||||||
// LambdaQueryWrapper<ProcessApprovalRecord> arWrapper = new LambdaQueryWrapper<>();
|
|
||||||
// arWrapper.eq(ProcessApprovalRecord::getFinishFlag, FinishFlagEnum.INCOMPLETE.getValue());
|
|
||||||
// List<ProcessApprovalRecord> arList = approvalRecordService.list(arWrapper);
|
|
||||||
// Map<String, List<ProcessApprovalRecord>> arMap = arList.stream()
|
|
||||||
// .collect(Collectors.groupingBy(ProcessApprovalRecord::getOriginUserId));
|
|
||||||
//
|
|
||||||
// // 将task和记录进行绑定
|
|
||||||
// List<OtherDraftUserVO> otherDraftUserVOS = revision.parseOtherDraftUserVOS();
|
|
||||||
// // 已经分配出去的TaskId
|
|
||||||
// List<String> alreadyTaskId = new ArrayList<>();
|
|
||||||
// otherDraftUserVOS.forEach(u -> {
|
|
||||||
// if (StrUtil.isNotBlank(u.getTaskId())) {
|
|
||||||
// alreadyTaskId.add(u.getTaskId());
|
|
||||||
// }
|
|
||||||
// });
|
|
||||||
// for (OtherDraftUserVO o : otherDraftUserVOS) {
|
|
||||||
// if (StrUtil.isNotBlank(o.getTaskId()) || !o.getUser().equals(otherDraftUser)) {
|
|
||||||
// continue;
|
|
||||||
// }
|
|
||||||
// List<ProcessApprovalRecord> processApprovalRecords = arMap.get(otherDraftUser);
|
|
||||||
// List<String> taskIdList = processApprovalRecords.stream()
|
|
||||||
// .map(ProcessApprovalRecord::getTaskId).collect(Collectors.toList());
|
|
||||||
// // 去除已经分配出去的TaskId
|
|
||||||
// taskIdList.removeAll(alreadyTaskId);
|
|
||||||
// o.setTaskId(taskIdList.get(0));
|
|
||||||
// break;
|
|
||||||
// }
|
|
||||||
// revision.setOtherDraftUserVOS(otherDraftUserVOS);
|
|
||||||
// revision.setOtherDrafterUploadFileJson(otherDraftUserVOS);
|
|
||||||
// esRevisionService.updateById(revision);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
+14
-5
@@ -129,6 +129,7 @@ public class EsRevisionServiceImpl extends ServiceImpl<EsRevisionMapper, Process
|
|||||||
String processInstanceId = processInstance.getId();
|
String processInstanceId = processInstance.getId();
|
||||||
// 保存数据
|
// 保存数据
|
||||||
data.setProcessInstanceId(processInstanceId);
|
data.setProcessInstanceId(processInstanceId);
|
||||||
|
data.getOtherDraftUserVOS().forEach(o -> o.setFinishFlag(YesOrNoEnum.NO.getValue()));
|
||||||
data.setOtherDrafterUploadFileJson(data.getOtherDraftUserVOS());
|
data.setOtherDrafterUploadFileJson(data.getOtherDraftUserVOS());
|
||||||
save(data);
|
save(data);
|
||||||
// 手动设置所有流程变量
|
// 手动设置所有流程变量
|
||||||
@@ -142,14 +143,14 @@ public class EsRevisionServiceImpl extends ServiceImpl<EsRevisionMapper, Process
|
|||||||
// 强制撤回
|
// 强制撤回
|
||||||
commonVO.setProcessInstanceId(processInstanceId);
|
commonVO.setProcessInstanceId(processInstanceId);
|
||||||
actFlowCommonService.saveFirstNodeDraft(commonVO, ProcessTypeEnum.ES_REVISION, jsonData);
|
actFlowCommonService.saveFirstNodeDraft(commonVO, ProcessTypeEnum.ES_REVISION, jsonData);
|
||||||
// 自动完成第一个任务
|
|
||||||
actFlowCommonService.completeTask(taskId, userId);
|
|
||||||
// 根据流程实例id更新流程总表
|
// 根据流程实例id更新流程总表
|
||||||
String prcName = commonVO.getPrcName();
|
String prcName = commonVO.getPrcName();
|
||||||
String prcMes = commonVO.getPrcMes();
|
String prcMes = commonVO.getPrcMes();
|
||||||
Date dueTime = commonVO.getDueTime();
|
Date dueTime = commonVO.getDueTime();
|
||||||
Integer prcType = ProcessTypeEnum.ES_REVISION.getValue();
|
Integer prcType = ProcessTypeEnum.ES_REVISION.getValue();
|
||||||
actFlowCommonService.updateProcessAll(processInstanceId, userId, prcName, prcMes, prcType, dueTime);
|
actFlowCommonService.updateProcessAll(processInstanceId, userId, prcName, prcMes, prcType, dueTime);
|
||||||
|
// 自动完成第一个任务
|
||||||
|
actFlowCommonService.completeTask(taskId, userId);
|
||||||
}
|
}
|
||||||
|
|
||||||
private Map<String, Object> setVariables(ESRevisionDataVO revisionData) {
|
private Map<String, Object> setVariables(ESRevisionDataVO revisionData) {
|
||||||
@@ -310,7 +311,9 @@ public class EsRevisionServiceImpl extends ServiceImpl<EsRevisionMapper, Process
|
|||||||
log.error("获取当前用户失败");
|
log.error("获取当前用户失败");
|
||||||
}
|
}
|
||||||
boolean findFlag = false;
|
boolean findFlag = false;
|
||||||
otherDraftUserVOS.forEach(o -> {o.setOperateType(null);});
|
otherDraftUserVOS.forEach(o -> {
|
||||||
|
o.setOperateType(null);
|
||||||
|
});
|
||||||
for (OtherDraftUserVO o : otherDraftUserVOS) {
|
for (OtherDraftUserVO o : otherDraftUserVOS) {
|
||||||
if (findFlag) {
|
if (findFlag) {
|
||||||
o.setOperateType(OperateTypeEnum.CANNOT_OPERATE.getValue());
|
o.setOperateType(OperateTypeEnum.CANNOT_OPERATE.getValue());
|
||||||
@@ -411,6 +414,7 @@ public class EsRevisionServiceImpl extends ServiceImpl<EsRevisionMapper, Process
|
|||||||
taskService.setVariable(taskId, "distribute", true);
|
taskService.setVariable(taskId, "distribute", true);
|
||||||
taskService.setVariable(taskId, "otherDraftUserList", otherDraftUserVOS.stream().map(OtherDraftUserVO::getUser)
|
taskService.setVariable(taskId, "otherDraftUserList", otherDraftUserVOS.stream().map(OtherDraftUserVO::getUser)
|
||||||
.collect(Collectors.toList()));
|
.collect(Collectors.toList()));
|
||||||
|
otherDraftUserVOS.forEach(o -> o.setFinishFlag(YesOrNoEnum.NO.getValue()));
|
||||||
data.setOtherDraftUserVOS(otherDraftUserVOS);
|
data.setOtherDraftUserVOS(otherDraftUserVOS);
|
||||||
data.setOtherDrafterUploadFileJson(otherDraftUserVOS);
|
data.setOtherDrafterUploadFileJson(otherDraftUserVOS);
|
||||||
}
|
}
|
||||||
@@ -423,8 +427,13 @@ public class EsRevisionServiceImpl extends ServiceImpl<EsRevisionMapper, Process
|
|||||||
break;
|
break;
|
||||||
case OTHER_DRAFT_USER_UPLOAD:
|
case OTHER_DRAFT_USER_UPLOAD:
|
||||||
data = revisionData.getData();
|
data = revisionData.getData();
|
||||||
List<OtherDraftUserVO> otherDraftUserVOListDB = data.getOtherDraftUserVOS();
|
List<OtherDraftUserVO> otherDraftUserVOList = data.getOtherDraftUserVOS();
|
||||||
dataDb.setOtherDrafterUploadFileJson(otherDraftUserVOListDB);
|
otherDraftUserVOList.forEach(o -> {
|
||||||
|
if (StrUtil.isNotBlank(o.getFileId())) {
|
||||||
|
o.setFinishFlag(YesOrNoEnum.YES.getValue());
|
||||||
|
}
|
||||||
|
});
|
||||||
|
dataDb.setOtherDrafterUploadFileJson(otherDraftUserVOList);
|
||||||
saveOrUpdate(dataDb);
|
saveOrUpdate(dataDb);
|
||||||
break;
|
break;
|
||||||
case MAIN_DRAFT_USER_COLLECT_FIRST:
|
case MAIN_DRAFT_USER_COLLECT_FIRST:
|
||||||
|
|||||||
Reference in New Issue
Block a user