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);
}
}
@@ -2,15 +2,13 @@
<bpmn:definitions xmlns:bpmn="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:activiti="http://activiti.org/bpmn" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" typeLanguage="http://www.w3.org/2001/XMLSchema" expressionLanguage="http://www.w3.org/1999/XPath" targetNamespace="http://www.activiti.org/test">
<bpmn:process id="demo_main" isExecutable="true">
<bpmn:userTask id="bszgjldxf_1" name="主解读人分批下发" activiti:assignee="${mainInterpreter}">
<bpmn:incoming>Flow_1g6zc95</bpmn:incoming>
<bpmn:incoming>Flow_0m3rvt8</bpmn:incoming>
<bpmn:incoming>Flow_0hbqlad</bpmn:incoming>
<bpmn:outgoing>Flow_06h9ihd</bpmn:outgoing>
</bpmn:userTask>
<bpmn:startEvent id="Event_087v97x">
<bpmn:outgoing>Flow_1g6zc95</bpmn:outgoing>
<bpmn:outgoing>Flow_0xdvtnf</bpmn:outgoing>
</bpmn:startEvent>
<bpmn:sequenceFlow id="Flow_1g6zc95" sourceRef="Event_087v97x" targetRef="bszgjldxf_1" />
<bpmn:sequenceFlow id="Flow_06h9ihd" sourceRef="bszgjldxf_1" targetRef="Gateway_16tlx8e" />
<bpmn:inclusiveGateway id="Gateway_16tlx8e">
<bpmn:incoming>Flow_06h9ihd</bpmn:incoming>
<bpmn:outgoing>Flow_0m3rvt8</bpmn:outgoing>
@@ -23,80 +21,98 @@
<bpmn:incoming>Flow_0wenf4n</bpmn:incoming>
<bpmn:outgoing>Flow_0aofle0</bpmn:outgoing>
</bpmn:inclusiveGateway>
<bpmn:sequenceFlow id="Flow_0aofle0" sourceRef="Gateway_16gkwe2" targetRef="hz" />
<bpmn:endEvent id="Event_1qezy8k">
<bpmn:incoming>Flow_04r2zel</bpmn:incoming>
</bpmn:endEvent>
<bpmn:sequenceFlow id="Flow_04r2zel" sourceRef="hz" targetRef="Event_1qezy8k" />
<bpmn:userTask id="hz" name="主解读人汇总" activiti:assignee="${mainInterpreter}">
<bpmn:extensionElements />
<bpmn:incoming>Flow_0aofle0</bpmn:incoming>
<bpmn:outgoing>Flow_04r2zel</bpmn:outgoing>
</bpmn:userTask>
<bpmn:task id="autoTask" name="自动处理任务">
<bpmn:sequenceFlow id="Flow_0y71vm8" sourceRef="Gateway_16tlx8e" targetRef="autoTask_1" />
<bpmn:sequenceFlow id="Flow_0wenf4n" sourceRef="autoTask_1" targetRef="Gateway_16gkwe2" />
<bpmn:sequenceFlow id="Flow_06h9ihd" sourceRef="bszgjldxf_1" targetRef="Gateway_16tlx8e" />
<bpmn:sequenceFlow id="Flow_0aofle0" sourceRef="Gateway_16gkwe2" targetRef="hz" />
<bpmn:sequenceFlow id="Flow_0xdvtnf" sourceRef="Event_087v97x" targetRef="Activity_1yryhh6" />
<bpmn:userTask id="Activity_1yryhh6" name="初始节点" activiti:assignee="${mainInterpreter}">
<bpmn:incoming>Flow_0xdvtnf</bpmn:incoming>
<bpmn:outgoing>Flow_0hbqlad</bpmn:outgoing>
</bpmn:userTask>
<bpmn:sequenceFlow id="Flow_0hbqlad" sourceRef="Activity_1yryhh6" targetRef="bszgjldxf_1" />
<bpmn:userTask id="autoTask_1" name="自动处理任务" activiti:assignee="123">
<bpmn:extensionElements>
<activiti:taskListener class="com.jero.modules.activiti.process.demo.listener.ProcessDemoCreateListener" event="create" />
</bpmn:extensionElements>
<bpmn:incoming>Flow_0y71vm8</bpmn:incoming>
<bpmn:outgoing>Flow_0wenf4n</bpmn:outgoing>
</bpmn:task>
<bpmn:sequenceFlow id="Flow_0y71vm8" sourceRef="Gateway_16tlx8e" targetRef="autoTask" />
<bpmn:sequenceFlow id="Flow_0wenf4n" sourceRef="autoTask" targetRef="Gateway_16gkwe2" />
</bpmn:userTask>
</bpmn:process>
<bpmndi:BPMNDiagram id="BPMNDiagram_1">
<bpmndi:BPMNPlane id="BPMNPlane_1" bpmnElement="demo_main">
<bpmndi:BPMNShape id="BPMNShape_12sl6br" bpmnElement="Event_087v97x">
<dc:Bounds x="158" y="182" width="36" height="36" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Gateway_183drsv_di" bpmnElement="Gateway_16tlx8e">
<dc:Bounds x="405" y="175" width="50" height="50" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Activity_046cr29_di" bpmnElement="autoTask">
<dc:Bounds x="530" y="160" width="100" height="80" />
<bpmndi:BPMNLabel />
<dc:Bounds x="595" y="175" width="50" height="50" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Activity_0x09ket_di" bpmnElement="bszgjldxf_1">
<dc:Bounds x="250" y="160" width="100" height="80" />
<dc:Bounds x="440" y="160" width="100" height="80" />
<bpmndi:BPMNLabel />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Activity_1uxo9oh_di" bpmnElement="hz">
<dc:Bounds x="830" y="160" width="100" height="80" />
<dc:Bounds x="1020" y="160" width="100" height="80" />
<bpmndi:BPMNLabel />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Event_1qezy8k_di" bpmnElement="Event_1qezy8k">
<dc:Bounds x="1032" y="182" width="36" height="36" />
<dc:Bounds x="1222" y="182" width="36" height="36" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Gateway_1rveos3_di" bpmnElement="Gateway_16gkwe2">
<dc:Bounds x="715" y="175" width="50" height="50" />
<dc:Bounds x="905" y="175" width="50" height="50" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="BPMNShape_12sl6br" bpmnElement="Event_087v97x">
<dc:Bounds x="152" y="182" width="36" height="36" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Activity_139i2h1_di" bpmnElement="Activity_1yryhh6">
<dc:Bounds x="270" y="160" width="100" height="80" />
<bpmndi:BPMNLabel />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Activity_00ctp9s_di" bpmnElement="autoTask_1">
<dc:Bounds x="720" y="160" width="100" height="80" />
</bpmndi:BPMNShape>
<bpmndi:BPMNEdge id="Flow_1g6zc95_di" bpmnElement="Flow_1g6zc95">
<di:waypoint x="194" y="200" />
<di:waypoint x="250" y="200" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_06h9ihd_di" bpmnElement="Flow_06h9ihd">
<di:waypoint x="350" y="200" />
<di:waypoint x="405" y="200" />
<di:waypoint x="540" y="200" />
<di:waypoint x="595" y="200" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_0m3rvt8_di" bpmnElement="Flow_0m3rvt8">
<di:waypoint x="430" y="175" />
<di:waypoint x="430" y="100" />
<di:waypoint x="300" y="100" />
<di:waypoint x="300" y="160" />
<di:waypoint x="620" y="175" />
<di:waypoint x="620" y="100" />
<di:waypoint x="490" y="100" />
<di:waypoint x="490" y="160" />
<bpmndi:BPMNLabel>
<dc:Bounds x="324" y="82" width="83" height="14" />
<dc:Bounds x="514" y="82" width="83" height="14" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_0aofle0_di" bpmnElement="Flow_0aofle0">
<di:waypoint x="765" y="200" />
<di:waypoint x="830" y="200" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_04r2zel_di" bpmnElement="Flow_04r2zel">
<di:waypoint x="930" y="200" />
<di:waypoint x="1032" y="200" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_0y71vm8_di" bpmnElement="Flow_0y71vm8">
<di:waypoint x="455" y="200" />
<di:waypoint x="530" y="200" />
<di:waypoint x="645" y="200" />
<di:waypoint x="720" y="200" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_0wenf4n_di" bpmnElement="Flow_0wenf4n">
<di:waypoint x="630" y="200" />
<di:waypoint x="715" y="200" />
<di:waypoint x="820" y="200" />
<di:waypoint x="905" y="200" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_0hbqlad_di" bpmnElement="Flow_0hbqlad">
<di:waypoint x="370" y="200" />
<di:waypoint x="440" y="200" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_0aofle0_di" bpmnElement="Flow_0aofle0">
<di:waypoint x="955" y="200" />
<di:waypoint x="1020" y="200" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_04r2zel_di" bpmnElement="Flow_04r2zel">
<di:waypoint x="1120" y="200" />
<di:waypoint x="1222" y="200" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_0xdvtnf_di" bpmnElement="Flow_0xdvtnf">
<di:waypoint x="188" y="200" />
<di:waypoint x="270" y="200" />
</bpmndi:BPMNEdge>
</bpmndi:BPMNPlane>
</bpmndi:BPMNDiagram>
@@ -5,9 +5,7 @@
<bpmn:outgoing>Flow_0bf22p9</bpmn:outgoing>
</bpmn:startEvent>
<bpmn:userTask id="jdrtxjdxx" name="解读人填写解读信息" activiti:assignee="${interpreter}">
<bpmn:extensionElements>
<activiti:taskListener class="com.jero.modules.activiti.process.projectassess.listener.ProcessProjectAssessCreateListener" event="create" />
</bpmn:extensionElements>
<bpmn:extensionElements />
<bpmn:incoming>Flow_0bf22p9</bpmn:incoming>
<bpmn:outgoing>Flow_0l0nol7</bpmn:outgoing>
</bpmn:userTask>
@@ -23,17 +21,24 @@
<bpmn:outgoing>Flow_15yh4zu</bpmn:outgoing>
</bpmn:exclusiveGateway>
<bpmn:sequenceFlow id="Flow_0l0nol7" sourceRef="jdrtxjdxx" targetRef="Gateway_0i2ua7z" />
<bpmn:sequenceFlow id="Flow_1l70pxs" sourceRef="Gateway_0i2ua7z" targetRef="zjdrsh" />
<bpmn:task id="autoTask" name="自动处理任务">
<bpmn:incoming>Flow_15yh4zu</bpmn:incoming>
<bpmn:outgoing>Flow_1u81jlq</bpmn:outgoing>
</bpmn:task>
<bpmn:sequenceFlow id="Flow_15yh4zu" sourceRef="Gateway_0i2ua7z" targetRef="autoTask" />
<bpmn:sequenceFlow id="Flow_1u81jlq" sourceRef="autoTask" targetRef="Event_16oojsf" />
<bpmn:sequenceFlow id="Flow_1l70pxs" sourceRef="Gateway_0i2ua7z" targetRef="zjdrsh">
<bpmn:conditionExpression xsi:type="bpmn:tFormalExpression">${pass}</bpmn:conditionExpression>
</bpmn:sequenceFlow>
<bpmn:sequenceFlow id="Flow_15yh4zu" sourceRef="Gateway_0i2ua7z" targetRef="autoTask_2">
<bpmn:conditionExpression xsi:type="bpmn:tFormalExpression">${!pass}</bpmn:conditionExpression>
</bpmn:sequenceFlow>
<bpmn:sequenceFlow id="Flow_1u81jlq" sourceRef="autoTask_2" targetRef="Event_16oojsf" />
<bpmn:userTask id="zjdrsh" name="主解读人审核" activiti:assignee="${mainInterpreter}">
<bpmn:incoming>Flow_1l70pxs</bpmn:incoming>
<bpmn:outgoing>Flow_14abzg6</bpmn:outgoing>
</bpmn:userTask>
<bpmn:userTask id="autoTask_2" name="自动处理任务" activiti:assignee="123">
<bpmn:extensionElements>
<activiti:taskListener class="com.jero.modules.activiti.process.demo.listener.ProcessDemoCreateListener" event="create" />
</bpmn:extensionElements>
<bpmn:incoming>Flow_15yh4zu</bpmn:incoming>
<bpmn:outgoing>Flow_1u81jlq</bpmn:outgoing>
</bpmn:userTask>
</bpmn:process>
<bpmndi:BPMNDiagram id="BPMNDiagram_1">
<bpmndi:BPMNPlane id="BPMNPlane_1" bpmnElement="demo_jdr">
@@ -50,14 +55,13 @@
<bpmndi:BPMNShape id="Gateway_0i2ua7z_di" bpmnElement="Gateway_0i2ua7z" isMarkerVisible="true">
<dc:Bounds x="425" y="92" width="50" height="50" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Activity_18xeyda_di" bpmnElement="autoTask">
<dc:Bounds x="520" y="190" width="100" height="80" />
<bpmndi:BPMNLabel />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Activity_0jo12jv_di" bpmnElement="zjdrsh">
<dc:Bounds x="520" y="77" width="100" height="80" />
<bpmndi:BPMNLabel />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Activity_149lmej_di" bpmnElement="autoTask_2">
<dc:Bounds x="520" y="190" width="100" height="80" />
</bpmndi:BPMNShape>
<bpmndi:BPMNEdge id="Flow_0bf22p9_di" bpmnElement="Flow_0bf22p9">
<di:waypoint x="215" y="117" />
<di:waypoint x="280" y="117" />
@@ -21,18 +21,21 @@
<bpmn:endEvent id="Event_1qezy8k">
<bpmn:incoming>Flow_0aofle0</bpmn:incoming>
</bpmn:endEvent>
<bpmn:task id="autoTask" name="自动处理任务">
<bpmn:incoming>Flow_0y71vm8</bpmn:incoming>
<bpmn:outgoing>Flow_0wenf4n</bpmn:outgoing>
</bpmn:task>
<bpmn:sequenceFlow id="Flow_1g6zc95" sourceRef="Event_087v97x" targetRef="bszgjldxf_1" />
<bpmn:sequenceFlow id="Flow_0m3rvt8" name="未分配数量大于0" sourceRef="Gateway_16tlx8e" targetRef="bszgjldxf_1">
<bpmn:conditionExpression xsi:type="bpmn:tFormalExpression">${unallocatedQuantity &gt; 0}</bpmn:conditionExpression>
</bpmn:sequenceFlow>
<bpmn:sequenceFlow id="Flow_06h9ihd" sourceRef="bszgjldxf_1" targetRef="Gateway_16tlx8e" />
<bpmn:sequenceFlow id="Flow_0y71vm8" sourceRef="Gateway_16tlx8e" targetRef="autoTask" />
<bpmn:sequenceFlow id="Flow_0wenf4n" sourceRef="autoTask" targetRef="Gateway_16gkwe2" />
<bpmn:sequenceFlow id="Flow_0y71vm8" sourceRef="Gateway_16tlx8e" targetRef="autoTask_3" />
<bpmn:sequenceFlow id="Flow_0wenf4n" sourceRef="autoTask_3" targetRef="Gateway_16gkwe2" />
<bpmn:sequenceFlow id="Flow_0aofle0" sourceRef="Gateway_16gkwe2" targetRef="Event_1qezy8k" />
<bpmn:userTask id="autoTask_3" name="自动处理任务" activiti:assignee="123">
<bpmn:extensionElements>
<activiti:taskListener class="com.jero.modules.activiti.process.demo.listener.ProcessDemoCreateListener" event="create" />
</bpmn:extensionElements>
<bpmn:incoming>Flow_0y71vm8</bpmn:incoming>
<bpmn:outgoing>Flow_0wenf4n</bpmn:outgoing>
</bpmn:userTask>
</bpmn:process>
<bpmndi:BPMNDiagram id="BPMNDiagram_1">
<bpmndi:BPMNPlane id="BPMNPlane_1" bpmnElement="demo_cxff">
@@ -43,10 +46,6 @@
<bpmndi:BPMNShape id="BPMNShape_12sl6br" bpmnElement="Event_087v97x">
<dc:Bounds x="170" y="182" width="36" height="36" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Activity_046cr29_di" bpmnElement="autoTask">
<dc:Bounds x="542" y="160" width="100" height="80" />
<bpmndi:BPMNLabel />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Gateway_183drsv_di" bpmnElement="Gateway_16tlx8e">
<dc:Bounds x="425" y="175" width="50" height="50" />
</bpmndi:BPMNShape>
@@ -56,6 +55,9 @@
<bpmndi:BPMNShape id="Event_1qezy8k_di" bpmnElement="Event_1qezy8k">
<dc:Bounds x="812" y="182" width="36" height="36" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Activity_080g1p0_di" bpmnElement="autoTask_3">
<dc:Bounds x="542" y="160" width="100" height="80" />
</bpmndi:BPMNShape>
<bpmndi:BPMNEdge id="Flow_1g6zc95_di" bpmnElement="Flow_1g6zc95">
<di:waypoint x="206" y="200" />
<di:waypoint x="260" y="200" />