Commit fcffbf59 by 赵剑炜

增加自审批工作流

parent 37140e2e
...@@ -23,6 +23,7 @@ public class EquipmentTypeDto { ...@@ -23,6 +23,7 @@ public class EquipmentTypeDto {
private Boolean isLeaf; private Boolean isLeaf;
private List<String> supplierList; private List<String> supplierList;
private String photo; private String photo;
private Integer childCount;
private List<EquipmentTypeDto> children = new ArrayList<>(); private List<EquipmentTypeDto> children = new ArrayList<>();
public void addChild(EquipmentTypeDto child) { public void addChild(EquipmentTypeDto child) {
......
...@@ -21,21 +21,23 @@ import com.junmp.v2.message.api.bean.req.MessageSendReq; ...@@ -21,21 +21,23 @@ import com.junmp.v2.message.api.bean.req.MessageSendReq;
import com.junmp.v2.sys.api.UserServiceApi; import com.junmp.v2.sys.api.UserServiceApi;
import com.junmp.v2.sys.api.bean.user.dto.RoleUserDto; import com.junmp.v2.sys.api.bean.user.dto.RoleUserDto;
import com.junmp.v2.sys.api.bean.user.vo.QueryUserInfoVo; import com.junmp.v2.sys.api.bean.user.vo.QueryUserInfoVo;
import com.junmp.v2.sys.user.service.SysUserService;
import org.flowable.bpmn.model.Process; import org.flowable.bpmn.model.Process;
import org.flowable.bpmn.model.UserTask; import org.flowable.bpmn.model.UserTask;
import org.flowable.engine.HistoryService; import org.flowable.engine.*;
import org.flowable.engine.RepositoryService;
import org.flowable.engine.TaskService;
import org.flowable.engine.delegate.DelegateExecution; import org.flowable.engine.delegate.DelegateExecution;
import org.flowable.engine.delegate.ExecutionListener; import org.flowable.engine.delegate.ExecutionListener;
import com.junmp.junmpProcess.enums.AssigneeTypeEnums; import com.junmp.junmpProcess.enums.AssigneeTypeEnums;
import org.flowable.engine.history.HistoricProcessInstance; import org.flowable.engine.history.HistoricProcessInstance;
import org.flowable.task.api.Task;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.util.*; import java.util.*;
import static com.junmp.junmpProcess.common.CommonConstants.BUSINESS_STATUS_4;
import static com.junmp.junmpProcess.common.CommonConstants.PROCESS_STATUS;
import static com.junmp.junmpProcess.utils.BpmnModelUtils.getChildNode; import static com.junmp.junmpProcess.utils.BpmnModelUtils.getChildNode;
/** /**
...@@ -44,6 +46,8 @@ import static com.junmp.junmpProcess.utils.BpmnModelUtils.getChildNode; ...@@ -44,6 +46,8 @@ import static com.junmp.junmpProcess.utils.BpmnModelUtils.getChildNode;
*/ */
@Component @Component
public class CounterSignListener implements ExecutionListener { public class CounterSignListener implements ExecutionListener {
@Autowired
private ProcessEngine processEngine;
@Resource @Resource
private TaskService taskService; private TaskService taskService;
@Resource @Resource
...@@ -178,34 +182,59 @@ public class CounterSignListener implements ExecutionListener { ...@@ -178,34 +182,59 @@ public class CounterSignListener implements ExecutionListener {
} }
else if (Type.equals("10"))//自己审批
{
assigneeList.add(LoginContext.getContext().getLoginUser().getUserId().toString());
execution.setVariable("skip", true);
// // 查询当前执行流程实例的任务列表
// String processInstanceId = execution.getProcessInstanceId();
// List<Task> tasks = taskService.createTaskQuery().processInstanceId(processInstanceId).list();
//
// // 如果任务列表为空,说明流程刚启动,直接完成整个流程实例
// if (tasks.isEmpty()) {
// ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
// RuntimeService runtimeService = processEngine.getRuntimeService();
// runtimeService.deleteProcessInstance(processInstanceId, "自动审批通过");
// } else {
// // 完成找到的第一个任务
// taskService.complete(tasks.get(0).getId(), null);
// }
}
if (assigneeList.size()!=0) if (assigneeList.size()!=0)
{ {
execution.setVariable(variable, assigneeList); execution.setVariable(variable, assigneeList);
assigneeList.forEach(userId->//为相应的用户推送消息 assigneeList.forEach(userId->//为相应的用户推送消息
{ {
MessageSendReq sendReq = new MessageSendReq(); if (userId!=LoginContext.getContext().getLoginUser().getUserId().toString())//非本人审核单据
sendReq.setReceiveUserIds(String.valueOf(userId)); {
sendReq.setMsgTitle("单据审批提示"); MessageSendReq sendReq = new MessageSendReq();
sendReq.setBizType("单据审批"); sendReq.setReceiveUserIds(String.valueOf(userId));
sendReq.setMsgContent("您有一条单据流程需要进行审批"); sendReq.setMsgTitle("单据审批提示");
sendReq.setPriority("0"); sendReq.setBizType("单据审批");
sendReq.setSendTime(DateTime.now()); sendReq.setMsgContent("您有一条单据流程需要进行审批");
messageApi.sendMessage(sendReq); sendReq.setPriority("0");
messageApi.queryCount(new MessageReq()); sendReq.setSendTime(DateTime.now());
/*推送发送未读数量*/ messageApi.sendMessage(sendReq);
MessageReq req1 = new MessageReq(); messageApi.queryCount(new MessageReq());
req1.setReadFlag(0); /*推送发送未读数量*/
req1.setReceiveUserId(Long.valueOf(userId)); MessageReq req1 = new MessageReq();
Integer count1 = messageApi.queryCount(req1); req1.setReadFlag(0);
messageApi.pushMsgToUser(userId,count1); req1.setReceiveUserId(Long.valueOf(userId));
Integer count1 = messageApi.queryCount(req1);
messageApi.pushMsgToUser(userId,count1);
}
}); });
} }
} else { } else {
} }
} }
} }
...@@ -63,6 +63,7 @@ import java.util.stream.Collectors; ...@@ -63,6 +63,7 @@ import java.util.stream.Collectors;
@SneakyThrows @SneakyThrows
@Override @Override
protected void processCompleted(FlowableEngineEntityEvent event) { protected void processCompleted(FlowableEngineEntityEvent event) {
if (event.getType() == FlowableEngineEventType.PROCESS_COMPLETED) { if (event.getType() == FlowableEngineEventType.PROCESS_COMPLETED) {
// 获取流程实例ID // 获取流程实例ID
String processInstanceId = event.getProcessInstanceId(); String processInstanceId = event.getProcessInstanceId();
...@@ -70,7 +71,11 @@ import java.util.stream.Collectors; ...@@ -70,7 +71,11 @@ import java.util.stream.Collectors;
// 获取流程定义ID // 获取流程定义ID
String processDefinitionId = event.getProcessDefinitionId(); String processDefinitionId = event.getProcessDefinitionId();
List<HistoricVariableInstance> orderType = historyService.createHistoricVariableInstanceQuery().processInstanceId(processInstanceId).variableName("orderType").list(); List<HistoricVariableInstance> orderType = historyService.createHistoricVariableInstanceQuery().processInstanceId(processInstanceId).variableName("orderType").list();
String Type= orderType.get(0).getValue().toString(); if(orderType.size()>0)
{
String Type= orderType.get(0).getValue().toString();
if (Type.equals("workOrder"))//出入库单据 if (Type.equals("workOrder"))//出入库单据
{ {
OrderMainReq req=new OrderMainReq(); OrderMainReq req=new OrderMainReq();
...@@ -112,31 +117,7 @@ import java.util.stream.Collectors; ...@@ -112,31 +117,7 @@ import java.util.stream.Collectors;
if (Type.equals("stocktakeOrder")){//盘库申请单 if (Type.equals("stocktakeOrder")){//盘库申请单
} }
}
// 获取流程实例关联的变量
// Map<String, Object> processVariables = getProcessVariables(processInstanceId);
// if (processVariables!=null)
// {
// // 获取单据类型
// String documentType = (String) processVariables.get("documentType");
// updateOrderReq = JSONObject.parseObject(documentType, new TypeReference<UpdateOrderReq>() {
// });
// updateOrderReq.setExamineState("finished");
// updateOrderReq.setOrderState("ready");
// orderMainService.updateOrder(updateOrderReq);
// // 获取单据类型
// String orderReq = (String) processVariables.get("orderReq");
// // 根据单据类型执行不同的操作
// if ("equipment".equals(documentType)) {
// // 执行装备相关操作,防止循环应用,丢入消息队列
// orderMainService.AddOrder(updateOrderReq);
// } else if ("personnel".equals(documentType)) {
// // 执行人员相关操作
// // ...
// }
// }
} }
} }
......
package com.junmp.jyzb.listener; package com.junmp.jyzb.listener;
import org.flowable.engine.RepositoryService; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
import com.junmp.v2.auth.api.context.LoginContext;
import org.apache.commons.lang3.BooleanUtils;
import org.flowable.bpmn.model.UserTask;
import org.flowable.engine.delegate.DelegateExecution; import org.flowable.engine.delegate.DelegateExecution;
import org.flowable.engine.delegate.ExecutionListener; import org.flowable.engine.delegate.ExecutionListener;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import javax.annotation.Resource;
/** /**
* @author LoveMyOrange * @author LoveMyOrange
* @create 2022-10-15 19:47 * @create 2022-10-15 19:47
*/ */
@Component @Component
public class ServiceListener implements ExecutionListener { public class SkipTaskListener implements ExecutionListener {
@Resource
private RepositoryService repositoryService;
@Override @Override
public void notify(DelegateExecution execution) { public void notify(DelegateExecution execution) {
Object skip=execution.getVariable("skip");
} }
} }
...@@ -287,23 +287,39 @@ public class EquipmentTypeServiceImpl extends ServiceImpl<EquipmentTypeMapper, E ...@@ -287,23 +287,39 @@ public class EquipmentTypeServiceImpl extends ServiceImpl<EquipmentTypeMapper, E
public List<EquipmentTypeDto> buildTypeTree(List<EquipmentType> searchResults, List<EquipmentType> allTypes) { public List<EquipmentTypeDto> buildTypeTree(List<EquipmentType> searchResults, List<EquipmentType> allTypes) {
Map<String, EquipmentTypeDto> typeDtoMap = new HashMap<>(); Map<String, EquipmentTypeDto> typeDtoMap = new HashMap<>();
// 将所有组织机构转换为OrgDto并放入map中 // 将所有设备类型转换为EquipmentTypeDto并放入map中,同时计算子节点数量
for (EquipmentType type : allTypes) { for (EquipmentType type : allTypes) {
EquipmentTypeDto typeDto = new EquipmentTypeDto(); EquipmentTypeDto typeDto = new EquipmentTypeDto();
BeanPlusUtil.copyProperties(type, typeDto); BeanPlusUtil.copyProperties(type, typeDto);
// 其他字段的映射... // 其他字段的映射...
// 将OrgDto放入map中,以orgId为键 // 计算子节点数量
int childCount = 0;
for (EquipmentType childType : allTypes) {
if (childType.getParentId().equals(type.getId())) {
childCount++;
}
}
typeDto.setChildCount(childCount);
if (childCount<=0)
{
typeDto.setIsLeaf(true);
}
else
{
typeDto.setIsLeaf(false);
}
// 将EquipmentTypeDto放入map中,以id为键
typeDtoMap.put(typeDto.getId(), typeDto); typeDtoMap.put(typeDto.getId(), typeDto);
} }
List<EquipmentTypeDto> tree = new ArrayList<>(); List<EquipmentTypeDto> tree = new ArrayList<>();
// 遍历所有搜索到的组织机构数据,构建树 // 遍历所有搜索到的设备类型数据,构建树
for (EquipmentType searchResult : searchResults) { for (EquipmentType searchResult : searchResults) {
EquipmentTypeDto typeDto = typeDtoMap.get(searchResult.getId()); EquipmentTypeDto typeDto = typeDtoMap.get(searchResult.getId());
// 如果找到对应的OrgDto // 如果找到对应的EquipmentTypeDto
if (typeDto != null && !tree.contains(typeDto)) { if (typeDto != null && !tree.contains(typeDto)) {
// 从当前节点开始,依次向上查找上级节点,直到最顶层 // 从当前节点开始,依次向上查找上级节点,直到最顶层
String parentId = typeDto.getParentId(); String parentId = typeDto.getParentId();
...@@ -320,7 +336,7 @@ public class EquipmentTypeServiceImpl extends ServiceImpl<EquipmentTypeMapper, E ...@@ -320,7 +336,7 @@ public class EquipmentTypeServiceImpl extends ServiceImpl<EquipmentTypeMapper, E
// 如果上级节点是最顶层,将上级节点添加到树中,确保不重复添加 // 如果上级节点是最顶层,将上级节点添加到树中,确保不重复添加
if (parentDto.getParentId().equals("00000000-0000-0000-0000-000000000000") if (parentDto.getParentId().equals("00000000-0000-0000-0000-000000000000")
&&parentDto.getId()!="00000000-0000-0000-0000-000000000000" && !tree.contains(parentDto)) { && !parentDto.getId().equals("00000000-0000-0000-0000-000000000000") && !tree.contains(parentDto)) {
tree.add(parentDto); tree.add(parentDto);
} }
...@@ -331,6 +347,7 @@ public class EquipmentTypeServiceImpl extends ServiceImpl<EquipmentTypeMapper, E ...@@ -331,6 +347,7 @@ public class EquipmentTypeServiceImpl extends ServiceImpl<EquipmentTypeMapper, E
parentId = null; // 上级节点不存在,跳出循环 parentId = null; // 上级节点不存在,跳出循环
} }
} }
} }
} }
......
...@@ -314,6 +314,7 @@ public class PubOrgServiceImpl extends ServiceImpl<PubOrgMapper, PubOrg> implem ...@@ -314,6 +314,7 @@ public class PubOrgServiceImpl extends ServiceImpl<PubOrgMapper, PubOrg> implem
} }
// Convert PubOrg list to OrgDto list // Convert PubOrg list to OrgDto list
List<OrgDto> orgs = new ArrayList<>(); List<OrgDto> orgs = new ArrayList<>();
list.forEach(p -> { list.forEach(p -> {
OrgDto org = new OrgDto(); OrgDto org = new OrgDto();
BeanPlusUtil.copyProperties(p, org); BeanPlusUtil.copyProperties(p, org);
...@@ -394,11 +395,11 @@ public class PubOrgServiceImpl extends ServiceImpl<PubOrgMapper, PubOrg> implem ...@@ -394,11 +395,11 @@ public class PubOrgServiceImpl extends ServiceImpl<PubOrgMapper, PubOrg> implem
// 添加 MatchQueryBuilder 作为 must 条件 // 添加 MatchQueryBuilder 作为 must 条件
MatchQueryBuilder matchQueryBuilder = QueryBuilders.matchQuery("dName", keyword).operator(Operator.AND); MatchQueryBuilder matchQueryBuilder = QueryBuilders.matchQuery("dName", keyword).operator(Operator.AND);
MatchQueryBuilder matchQueryBuilder2 = QueryBuilders.matchQuery("dName.pinyin", keyword).operator(Operator.AND); // MatchQueryBuilder matchQueryBuilder2 = QueryBuilders.matchQuery("dName.pinyin", keyword).operator(Operator.AND);
BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery(); BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
boolQueryBuilder.should(matchQueryBuilder); boolQueryBuilder.should(matchQueryBuilder);
boolQueryBuilder.should(matchQueryBuilder2); // boolQueryBuilder.should(matchQueryBuilder2);
// 添加过滤条件,只获取 delFlag 为 1 的数据 // 添加过滤条件,只获取 delFlag 为 1 的数据
builder.postFilter(QueryBuilders.termQuery("delFlag", 1)); builder.postFilter(QueryBuilders.termQuery("delFlag", 1));
...@@ -516,7 +517,7 @@ public class PubOrgServiceImpl extends ServiceImpl<PubOrgMapper, PubOrg> implem ...@@ -516,7 +517,7 @@ public class PubOrgServiceImpl extends ServiceImpl<PubOrgMapper, PubOrg> implem
public List<OrgDto> getOrgTreeByEs(QueryOrgReq req) throws IOException { public List<OrgDto> getOrgTreeByEs(QueryOrgReq req) throws IOException {
// 先进行搜索,获取前20条数据 // 先进行搜索,获取前20条数据
List<PubOrg> searchResults = searchOrg(0, 15, req.getOrgName()); List<PubOrg> searchResults = searchOrg(0, 10, req.getOrgName());
req.setDelFlag(1); req.setDelFlag(1);
LambdaQueryWrapper<PubOrg> wp = this.createWrapper(req); LambdaQueryWrapper<PubOrg> wp = this.createWrapper(req);
// 获取所有组织机构数据 // 获取所有组织机构数据
...@@ -624,6 +625,7 @@ public class PubOrgServiceImpl extends ServiceImpl<PubOrgMapper, PubOrg> implem ...@@ -624,6 +625,7 @@ public class PubOrgServiceImpl extends ServiceImpl<PubOrgMapper, PubOrg> implem
LambdaQueryWrapper<PubOrg> wp= this.createWrapper(req); LambdaQueryWrapper<PubOrg> wp= this.createWrapper(req);
List<PubOrg> list = this.list(wp); List<PubOrg> list = this.list(wp);
List<OrgDto> orgs=new ArrayList<>(); List<OrgDto> orgs=new ArrayList<>();
Comparator<PubOrg> orgComparator = (org1, org2) -> { Comparator<PubOrg> orgComparator = (org1, org2) -> {
String orgCode1 = org1.getOrgCode(); String orgCode1 = org1.getOrgCode();
......
...@@ -4,6 +4,7 @@ import cn.hutool.core.collection.CollUtil; ...@@ -4,6 +4,7 @@ import cn.hutool.core.collection.CollUtil;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.TypeReference; import com.alibaba.fastjson.TypeReference;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
import com.junmp.junmpProcess.dto.StartProcessInstanceDTO; import com.junmp.junmpProcess.dto.StartProcessInstanceDTO;
import com.junmp.junmpProcess.factory.FlowServiceFactory; import com.junmp.junmpProcess.factory.FlowServiceFactory;
import com.junmp.junmpProcess.service.IFlowInstanceService; import com.junmp.junmpProcess.service.IFlowInstanceService;
...@@ -20,6 +21,8 @@ import com.junmp.v2.common.util.BeanPlusUtil; ...@@ -20,6 +21,8 @@ import com.junmp.v2.common.util.BeanPlusUtil;
import com.junmp.v2.sys.user.entity.SysUser; import com.junmp.v2.sys.user.entity.SysUser;
import com.junmp.v2.sys.user.service.SysUserService; import com.junmp.v2.sys.user.service.SysUserService;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.BooleanUtils;
import org.flowable.bpmn.model.UserTask;
import org.flowable.common.engine.api.FlowableObjectNotFoundException; import org.flowable.common.engine.api.FlowableObjectNotFoundException;
import org.flowable.common.engine.impl.identity.Authentication; import org.flowable.common.engine.impl.identity.Authentication;
import org.flowable.engine.history.HistoricActivityInstance; import org.flowable.engine.history.HistoricActivityInstance;
...@@ -136,25 +139,41 @@ public class FlowInstanceServiceImpl extends FlowServiceFactory implements IFlow ...@@ -136,25 +139,41 @@ public class FlowInstanceServiceImpl extends FlowServiceFactory implements IFlow
// { // {
// return ApiRes.failure("流程不存在或已挂起"); // return ApiRes.failure("流程不存在或已挂起");
// } // }
try { // try {
ProcessInstance processInstance = processInstanceBuilder ProcessInstance processInstance = processInstanceBuilder
.processDefinitionId(processInstanceDto.getProcessDefinitionId()) .processDefinitionId(processInstanceDto.getProcessDefinitionId())
.variable("initiator",StartUser.getUserId()) .variable("initiator", StartUser != null ? StartUser.getUserId() : null)
.variables(processVariables) .variables(processVariables != null ? processVariables : Collections.emptyMap())
.businessStatus(BUSINESS_STATUS_1) .businessStatus(BUSINESS_STATUS_1)
.start(); .start();
// 从流程执行上下文中获取流程变量
Object skip = runtimeService.getVariable(processInstance.getId(), "skip");
if (ObjectUtils.isNotEmpty(skip) && BooleanUtils.toBoolean(skip.toString())){
Task currentTask = taskService.createTaskQuery().processInstanceId(processInstance.getId()).singleResult();
// 直接完成当前任务
taskService.complete(currentTask.getId());
return processInstance.getId();
}
else
{
Task task = taskService.createTaskQuery().processInstanceId(processInstance.getId()).singleResult(); Task task = taskService.createTaskQuery().processInstanceId(processInstance.getId()).singleResult();
task.setAssignee(StartUser.getUserId().toString()); task.setAssignee(StartUser.getUserId().toString());
return processInstance.getProcessInstanceId(); return processInstance.getProcessInstanceId();
} catch (Exception e) {
String fullErrorMessage = getFullErrorMessage(e);
// 处理在启动流程实例时发生的异常
throw new ServiceException(OrderExceptionEnum.ROLE_ERROR);
// throw new ServiceException(fullErrorMessage);
} }
// } catch (Exception e) {
// String fullErrorMessage = getFullErrorMessage(e);
// // 处理在启动流程实例时发生的异常
// throw new ServiceException(OrderExceptionEnum.ROLE_ERROR);
//// throw new ServiceException(fullErrorMessage);
//
// }
//手动完成第一个任务 //手动完成第一个任务
} }
......
...@@ -195,6 +195,8 @@ public class BpmnConvert { ...@@ -195,6 +195,8 @@ public class BpmnConvert {
ObjectMapper objectMapper = new ObjectMapper(); ObjectMapper objectMapper = new ObjectMapper();
JsonNode[] approverGroups = objectMapper.convertValue(node.get("approverGroups"), JsonNode[].class); JsonNode[] approverGroups = objectMapper.convertValue(node.get("approverGroups"), JsonNode[].class);
userTask.setExecutionListeners(getTaskListeners());//角色监听 userTask.setExecutionListeners(getTaskListeners());//角色监听
// userTask.setExecutionListeners(SkipTaskListeners());//跳过事件监听
MultiInstanceLoopCharacteristics multiInstanceLoopCharacteristics = new MultiInstanceLoopCharacteristics(); MultiInstanceLoopCharacteristics multiInstanceLoopCharacteristics = new MultiInstanceLoopCharacteristics();
// 审批人集合参数 // 审批人集合参数
multiInstanceLoopCharacteristics.setInputDataItem(userTask.getId()+"assigneeList"); multiInstanceLoopCharacteristics.setInputDataItem(userTask.getId()+"assigneeList");
...@@ -217,15 +219,38 @@ public class BpmnConvert { ...@@ -217,15 +219,38 @@ public class BpmnConvert {
*/ */
private static List<FlowableListener> getTaskListeners() { private static List<FlowableListener> getTaskListeners() {
ArrayList<FlowableListener> taskListeners = new ArrayList<>(); ArrayList<FlowableListener> taskListeners = new ArrayList<>();
// 第一个监听器
FlowableListener counterSignListener = new FlowableListener();
counterSignListener.setEvent(ExecutionListener.EVENTNAME_START);
counterSignListener.setImplementationType(IMPLEMENTATION_TYPE_DELEGATEEXPRESSION);
counterSignListener.setImplementation("${counterSignListener}");
taskListeners.add(counterSignListener);
// 第二个监听器
FlowableListener skipTaskListener = new FlowableListener();
skipTaskListener.setEvent(ExecutionListener.EVENTNAME_START);
skipTaskListener.setImplementationType(IMPLEMENTATION_TYPE_DELEGATEEXPRESSION);
skipTaskListener.setImplementation("${skipTaskListener}");
taskListeners.add(skipTaskListener);
return taskListeners;
}
/**
* 监听任务启动后角色分配事件
*
* @return 监听节点列表
*/
private static List<FlowableListener> SkipTaskListeners() {
ArrayList<FlowableListener> taskListeners = new ArrayList<>();
//监听器开始class //监听器开始class
FlowableListener listener = new FlowableListener(); FlowableListener listener = new FlowableListener();
listener.setEvent(ExecutionListener.EVENTNAME_START);//监听任务启动 listener.setEvent(ExecutionListener.EVENTNAME_START);//监听任务启动
listener.setImplementationType(IMPLEMENTATION_TYPE_DELEGATEEXPRESSION); listener.setImplementationType(IMPLEMENTATION_TYPE_DELEGATEEXPRESSION);
listener.setImplementation("${counterSignListener}");//启动角色分配监听事件 listener.setImplementation("${SkipTaskListener}");//启动角色分配监听事件
taskListeners.add(listener); taskListeners.add(listener);
return taskListeners; return taskListeners;
} }
/** /**
* 绘制分支节点 * 绘制分支节点
* @param process 绘图对象 * @param process 绘图对象
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论