add 测试流程

This commit is contained in:
lijiarao
2024-06-20 18:04:13 +08:00
parent d470020df0
commit d216984d8c
12 changed files with 208 additions and 80 deletions
@@ -40,6 +40,13 @@ public class ProcessApprovalRecord {
@ApiModelProperty(value = "任务名称")
private String taskName;
/**
* 父任务id
*/
@TableField(value = "parent_task_id")
@ApiModelProperty(value = "父任务id")
private String parentTaskId;
/**
* 流程实例id
*/
@@ -12,6 +12,7 @@ import lombok.Getter;
public enum ProcessTypeEnum {
DEMO("测试流程",0, "com.jero.modules.activiti.process.demo.service.ProcessDemoService","/workCenter/StandardEntryOrChangeProcess","/workCenter/StandardEntryOrChangeProcess"),
FB_ENTRY_CHANGE("标准法规入库/变更流程",1, "com.jero.modules.activiti.process.fb.service.impl.ProcessFbEntryChangeServiceImpl","/workCenter/StandardEntryOrChangeProcess","/workCenter/StandardEntryOrChangeProcess"),
FB_STANDARD_CONSULTATION("标准征求意见流程",2, "com.jero.modules.activiti.process.fb.service.impl.ProcessFbStandardConsultationServiceImpl","/workCenter/StandardConsultationProcess","/workCenter/StandardConsultationProcess"),
PROJECT_ASSESS("项目合规评估流程",3, "com.jero.modules.activiti.process.projectassess.service.ProcessProjectAssessService","/workCenter/ProjectComplianceEvaluationProcess","/workCenter/ProjectComplianceEvaluationProcess"),
@@ -9,6 +9,7 @@ import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.jero.common.api.dto.message.HiworkTodoAdd;
import com.jero.common.constant.enums.YesOrNoEnum;
import com.jero.common.system.vo.LoginUser;
import com.jero.modules.activiti.common.ActivitiCommon;
import com.jero.modules.activiti.entity.ProcessAll;
import com.jero.modules.activiti.entity.ProcessApprovalRecord;
import com.jero.modules.activiti.entity.ProcessNode;
@@ -22,12 +23,14 @@ import com.jero.modules.activiti.service.ProcessNodeService;
import com.jero.modules.activiti.util.SpringContextUtil;
import com.jero.modules.laws.common.util.CurrentUserUtil;
import lombok.extern.slf4j.Slf4j;
import org.activiti.engine.TaskService;
import org.activiti.engine.delegate.event.ActivitiEvent;
import org.activiti.engine.delegate.event.ActivitiEventListener;
import org.activiti.engine.delegate.event.impl.ActivitiEntityEventImpl;
import org.activiti.engine.impl.persistence.entity.ExecutionEntity;
import org.activiti.engine.impl.persistence.entity.ExecutionEntityImpl;
import org.activiti.engine.impl.persistence.entity.TaskEntity;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Component;
import java.util.*;
@@ -84,6 +87,10 @@ public class MyGlobalEventListener implements ActivitiEventListener {
String processInstanceId = execution.getProcessInstanceId();
String processDefinitionId = execution.getProcessDefinitionId();
ExecutionEntityImpl parent = execution.getParent();
String mainInstanceId = (String) execution.getVariable(ActivitiCommon.MAIN_INSTANCE_ID);
if (mainInstanceId != null){
return;
}
String name = parent.getProcessDefinitionName();
//新增流程总表信息(剩余的内容在启动流程时填充)
ProcessAll processAll = new ProcessAll();
@@ -114,20 +121,21 @@ public class MyGlobalEventListener implements ActivitiEventListener {
ProcessAllService processAllService = SpringContextUtil.getBean(ProcessAllService.class);
ProcessApprovalRecordService recordService = SpringContextUtil.getBean(ProcessApprovalRecordService.class);
ProcessNodeService processNodeService = SpringContextUtil.getBean(ProcessNodeService.class);
log.info("id = " + delegateTask.getId());
log.info("name = " + delegateTask.getName());
log.info("taskEntity.getAssignee() = " + delegateTask.getAssignee());
log.info("taskEntity.getIdentityLinks() = " + delegateTask.getIdentityLinks());
log.info("taskEntity.getVariables() = " + delegateTask.getVariables());
log.info("execution.getActivityId() = " + execution.getActivityId());
String id = delegateTask.getId();
String name = delegateTask.getName();
String processInstanceId = delegateTask.getProcessInstanceId();
Date createTime = delegateTask.getCreateTime();
String assignee = delegateTask.getAssignee();
String taskDefinitionKey = delegateTask.getTaskDefinitionKey();
String processDefinitionId = delegateTask.getProcessDefinitionId();
Map<String, Object> variables = delegateTask.getVariables();
log.info("id = " + delegateTask.getId());
log.info("name = " + delegateTask.getName());
log.info("taskEntity.getAssignee() = " + delegateTask.getAssignee());
log.info("taskEntity.getIdentityLinks() = " + delegateTask.getIdentityLinks());
log.info("taskEntity.getVariables() = " + variables);
log.info("execution.getActivityId() = " + execution.getActivityId());
//判断是否需要创建待办
LambdaQueryWrapper<ProcessNode> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(ProcessNode::getProcessDefinitionId,processDefinitionId);
@@ -140,10 +148,17 @@ public class MyGlobalEventListener implements ActivitiEventListener {
return;
}
}
String mainInstanceId = (String) variables.get(ActivitiCommon.MAIN_INSTANCE_ID);
String processInstanceId = mainInstanceId != null ? mainInstanceId : delegateTask.getProcessInstanceId();
String parentInstanceId = (String) variables.get(ActivitiCommon.PARENT_INSTANCE_ID);
String parentTaskId = (String) variables.get(ActivitiCommon.PARENT_TASK_ID);
//新增待审批记录
ProcessApprovalRecord approvalRecord = new ProcessApprovalRecord();
approvalRecord.setTaskId(id);
approvalRecord.setTaskName(name);
//approvalRecord.setMainInstanceId(mainInstanceId != null ? mainInstanceId : processInstanceId);
approvalRecord.setParentTaskId(parentTaskId);
approvalRecord.setProcessInstanceId(processInstanceId);
approvalRecord.setUserId(assignee);
approvalRecord.setOriginUserId(assignee);
@@ -273,10 +288,11 @@ public class MyGlobalEventListener implements ActivitiEventListener {
if (isFirstNodeTask(approvalRecord)) {
approvalRecord.setCreateTime(DateUtil.offsetSecond(createTime, -1));
}
String mainInstanceId = (String) variables.get(ActivitiCommon.MAIN_INSTANCE_ID);
String processInstanceId = mainInstanceId != null ? mainInstanceId : delegateTask.getProcessInstanceId();
recordService.updateById(approvalRecord);
//更新最新完成任务时间
ProcessAll processAll = processAllService.getByProcessInstanceId(delegateTask.getProcessInstanceId());
ProcessAll processAll = processAllService.getByProcessInstanceId(processInstanceId);
LambdaUpdateWrapper<ProcessAll> updateWrapper = new LambdaUpdateWrapper<>();
updateWrapper.eq(ProcessAll::getId,processAll.getId());
updateWrapper.set(ProcessAll::getCompletedTaskTime,date);
@@ -301,8 +317,9 @@ public class MyGlobalEventListener implements ActivitiEventListener {
ExecutionEntityImpl execution = (ExecutionEntityImpl) activitiEntityEvent.getEntity();
//流程信息
ProcessAllService processAllService = SpringContextUtil.getBean(ProcessAllService.class);
String processInstanceId = execution.getProcessInstanceId();
//根据mainInstanceId是否存在判断是否子流程
String mainInstanceId = (String) execution.getVariable(ActivitiCommon.MAIN_INSTANCE_ID);
String processInstanceId = mainInstanceId != null ? mainInstanceId : execution.getProcessInstanceId();
ProcessAll processAll = processAllService.getByProcessInstanceId(processInstanceId);
Date createTime = processAll.getCreateTime();
DateTime date = DateUtil.date();
@@ -315,6 +332,16 @@ public class MyGlobalEventListener implements ActivitiEventListener {
wrapper.set(ProcessAll::getEndTime, date);
wrapper.set(ProcessAll::getOverTime, between.toString());
processAllService.update(wrapper);
//如果有父id,判断所有子流程是否都完成,如果都完成,那么父流程的任务开始流转
String parentInstanceId = (String) execution.getVariable(ActivitiCommon.PARENT_INSTANCE_ID);
String parentTaskId = (String) execution.getVariable(ActivitiCommon.PARENT_TASK_ID);
if (StringUtils.isNotBlank(parentTaskId)){
int i = processAllService.countByParentTaskId(parentTaskId);
if (i == 0){
TaskService taskService = SpringContextUtil.getBean(TaskService.class);
taskService.complete(parentTaskId);
}
}
log.info("id = " + execution.getId());
log.info("name = " + execution.getName());
log.info("taskEntity.getActivityName() = " + execution.getActivityName());
@@ -65,6 +65,12 @@ public class ProcessDraft implements Serializable {
@ApiModelProperty(value = "流程类型")
private String prcName;
/**
* 主流程实例id
*/
@ApiModelProperty(value="主流程实例id")
private String mainInstanceId;
/**
* 流程实例id
*/
@@ -22,5 +22,9 @@ public class ProcessDefinitionKey {
public static final String PROJECT_NOT_MET = "project-not-met";
//项目合规评估流程
public static final String PROJECT_STANDARD = "standard-assessment";
//demo流程
public static final String DEMO_MAIN = "demo_main";
public static final String DEMO_JDR = "demo_jdr";
public static final String DEMO_CXFF = "demo_cxff";
}
@@ -20,6 +20,8 @@ public interface IProcessHandleService {
**/
String startProcess(ProcessInfoVO processInfoVO);
String startChildrenProcess(ProcessInfoVO processInfoVO);
/**
* @Author: liao
* @Date: 2023/11/6 11:56
@@ -89,6 +89,10 @@ public class ProcessHandleServiceImpl implements IProcessHandleService {
String processDefinitionId = basicProcessInfoDTO.getProcessDefinitionId(); // 流程定义id
// 根据流程定义id启动流程
Map<String, Object> variables = setProcessVariables(userInfoMap);
Map<String, Object> processVariables = processInfoVO.getProcessVariables();
if (processVariables != null){
variables.putAll(processVariables);
}
ProcessInstance processInstance = runtimeService.startProcessInstanceById(processDefinitionId, variables);
String processInstanceId = processInstance.getId(); // 流程实例id
@@ -156,6 +160,44 @@ public class ProcessHandleServiceImpl implements IProcessHandleService {
return processInstanceId;
}
/**
* @Author: liao
* @Date: 2023/11/2 17:04
* @Description: 启动子流程
**/
@Override
public String startChildrenProcess(ProcessInfoVO processInfoVO) {
BasicProcessInfoDTO basicProcessInfoDTO = processInfoVO.getBasicProcessInfoDTO(); // 流程信息
Map<String, Object> userInfoMap = processInfoVO.getUserInfoMap(); // 用户变量map
BasicTaskInfoDTO basicTaskInfoDTO = processInfoVO.getBasicTaskInfoDTO(); // 流程审批信息
// 删除自己的草稿
String draftId = processInfoVO.getDraftId();
if (StringUtils.isNotBlank(draftId)) {
processDraftService.removeById(draftId);
}
String processDefinitionId = basicProcessInfoDTO.getProcessDefinitionId(); // 流程定义id
// 根据流程定义id启动流程
Map<String, Object> variables = setProcessVariables(userInfoMap);
Map<String, Object> processVariables = processInfoVO.getProcessVariables();
if (processVariables != null){
variables.putAll(processVariables);
}
ProcessInstance processInstance = runtimeService.startProcessInstanceById(processDefinitionId, variables);
String processInstanceId = processInstance.getId(); // 流程实例id
// 根据流程实例id更新流程总表
basicProcessInfoDTO.setProcessInstanceId(processInstanceId);
updateProcessAll(processInfoVO);
// 保存选人信息
processNodeLinkService.saveNodeUserLink(processDefinitionId, processInstanceId, userInfoMap);
log.info("================================启动子流程=================================");
log.info("流程定义id: {}", processDefinitionId);
log.info("流程实例id: {}", processInstanceId);
log.info("=======================================================================");
return processInstanceId;
}
/**
* @Author: liao
@@ -332,7 +374,7 @@ public class ProcessHandleServiceImpl implements IProcessHandleService {
ProcessDTO processDTO = new ProcessDTO();
ProcessApprovalRecord processApprovalRecord = processApprovalRecordService.getToDoByTaskId(taskId);
Task task = taskService.createTaskQuery().taskId(taskId).singleResult();
String processInstanceId = task.getProcessInstanceId();
String processInstanceId = processApprovalRecord.getProcessInstanceId();
ProcessInstance processInstance = runtimeService.createProcessInstanceQuery().processInstanceId(processInstanceId).singleResult();
String processDefinitionId = processInstance.getProcessDefinitionId();
Execution execution = runtimeService.createExecutionQuery().executionId(task.getExecutionId()).singleResult();
@@ -56,5 +56,10 @@ public class ProcessInfoVO<T> implements Serializable {
*/
@ApiModelProperty(value="保存来源(1:待办 2:草稿 3:初始信息)")
private String saveSource;
/**
* 流程变量
*/
@ApiModelProperty(value="流程变量")
private Map<String, Object> processVariables;
}
@@ -415,4 +415,16 @@ public class ProcessAllService extends ServiceImpl<ProcessAllMapper, ProcessAll>
processAllLambdaQueryWrapper.eq(ProcessAll::getProcessInstanceId, prcId);
remove(processAllLambdaQueryWrapper);
}
/**
* 查询未完成的子任务数量
* @param parentTaskId
* @return
*/
public int countByParentTaskId(String parentTaskId){
LambdaQueryWrapper<ProcessApprovalRecord> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(ProcessApprovalRecord::getParentTaskId,parentTaskId);
wrapper.eq(ProcessApprovalRecord::getFinishFlag,FinishFlagEnum.INCOMPLETE.getValue());
return approvalRecordService.count(wrapper);
}
}