add 测试流程
This commit is contained in:
@@ -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"),
|
||||
|
||||
+38
-11
@@ -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());
|
||||
|
||||
+6
@@ -65,6 +65,12 @@ public class ProcessDraft implements Serializable {
|
||||
@ApiModelProperty(value = "流程类型")
|
||||
private String prcName;
|
||||
|
||||
/**
|
||||
* 主流程实例id
|
||||
*/
|
||||
@ApiModelProperty(value="主流程实例id")
|
||||
private String mainInstanceId;
|
||||
|
||||
/**
|
||||
* 流程实例id
|
||||
*/
|
||||
|
||||
+4
@@ -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";
|
||||
|
||||
}
|
||||
|
||||
+2
@@ -20,6 +20,8 @@ public interface IProcessHandleService {
|
||||
**/
|
||||
String startProcess(ProcessInfoVO processInfoVO);
|
||||
|
||||
String startChildrenProcess(ProcessInfoVO processInfoVO);
|
||||
|
||||
/**
|
||||
* @Author: liao
|
||||
* @Date: 2023/11/6 11:56
|
||||
|
||||
+43
-1
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user