Camunda工作流多实例(会签/多人审批)

1、多实例/会签(Multi-instance)

在流程业务管理中,任务通常是由一个人去处理的,而多个人同时处理一个任务,称之为会签任务。
一个多实例活动被执行多次,对于给定集合的每个元素执行一次。Camunda工作流多实例包括三种类型:

1、Sequential(顺序或串行)
2、Parallel(并行)
3、Loop(循环)

在这里插入图片描述

A multi-instance activity is executed either sequentially or in parallel (default). In the BPMN, a sequential multi-instance activity is displayed with three horizontal lines at the bottom. A parallel multi-instance activity is represented by three vertical lines.

多实例活动按顺序或并行执行(默认)。在BPMN中,一个连续的多实例活动显示为底部有三条水平线。并行的多实例活动由三条垂直线表示。

顺序执行
并行执行

(1)Sequential(顺序/串行)

In case of a sequential multi-instance activity, the instances are executed one at a time. When one instance is completed, a new instance is created for the next element in the inputCollection.
如果是连续的多实例活动,则一次执行一个实例。当一个实例完成时,会为inputCollection中的下一个元素创建一个新实例。

在这里插入图片描述

串行流程图配置
在这里插入图片描述

后台java代码

@ResponseBody
	@RequestMapping("/startFlow")
	public Object startFlow(Yslc yslc, HttpServletRequest request) {
		try {
 			tylcService.saveData(yslc);
			Map<String,Object> map = new HashMap<>();
			//对应流程图Collection
			List<String> xmjlList =  staffService.getStaffIdsByRoleName("项目经理");
			map.put("xmjlList",xmjlList);
 			String businessKey = String.valueOf(yslc.getYslcId());
			identityService.setAuthenticatedUserId(yslc.getCreatedStaffId().toString());
			ProcessInstance processInstance = runtimeService.startProcessInstanceByKey(yslc.getProcessDefinitionKey(),businessKey, map);
			yslc.setProcinstId(processInstance.getId());
			tylcService.updateData(yslc);
 			return renderSuccess("保存成功");
		} catch (Exception e) {
			e.printStackTrace();
 			return renderError("保存失败");
		}
	}

流程结果
需要两个人同时办理完后,流程才能继续往下走,一次只能有一个人收到代办,办理流程有先后顺序
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

(2)Parallel(并行)

In case of a parallel multi-instance activity, all instances are created when the multi-instance body is activated. The instances are executed concurrently and independently from each other.
如果是并行的多实例活动,则在激活多实例主体时会创建所有实例。这些实例是同时执行的,并且彼此独立。

在这里插入图片描述

并行流程图配置
在这里插入图片描述
后台代码

	@ResponseBody
	@RequestMapping("/startFlow")
	public Object startFlow(Yslc yslc, HttpServletRequest request) {
		try {
			yslc.setCreatedStaffId(this.getCurrentStaffId());
			yslc.setCreatedTime(DateUtil.format(new Date(), DateUtil.DATE_FORMAT));
			yslc.setDeletedFlag(0);
 			tylcService.saveData(yslc);
			Map<String,Object> map = new HashMap<>();
			map.put("bmzrapprover",yslc.getBmzrApprover());
			//对应流程图Collection
			List<String> hqxzzgList =  staffService.getStaffIdsByRoleName("后勤行政主管");
			map.put("hqxzzgList",hqxzzgList);
			map.put("zhbapprover",tylc.getZhbApprover());
			map.put("hqxzzgapprover",tylc.getHqzgApprover());
			map.put("hrapprover",tylc.getHqzgApprover());
 			String businessKey = String.valueOf(yslc.getYslcId());
			identityService.setAuthenticatedUserId(yslc.getCreatedStaffId().toString());
			ProcessInstance processInstance = runtimeService.startProcessInstanceByKey(yslc.getProcessDefinitionKey(),businessKey, map);
			yslc.setProcinstId(processInstance.getId());
			yslc.setModifiedStaffId(this.getCurrentStaffId());
			yslc.setModifiedTime(DateUtil.format(new Date(), DateUtil.DATE_FORMAT));
			tylcService.updateData(yslc);
 			return renderSuccess("保存成功");
		} catch (Exception e) {
			e.printStackTrace();
 			return renderError("保存失败");
		}
	}

流程结果
需要两个人同时办理完后,流程才能继续往下走,两个人都会收到代办,办理流程没有先后顺序
在这里插入图片描述
在这里插入图片描述

2、Multil instance:(多实例)有以下几个属性

Loop cardinality:循环基数(实例数量),可选项。可填整数,表示会签的人数。
Completion condition:完成条件(结合条件表达式),可选项。
Collection:集合,可选项。会签人数的集合list,与loop cardinality二选一。
Element variable:元素变量。选择Collection时必选,为collection集合每次遍历的元素。

3、会签环节中设计的几个默认流程变量

(1) nrOfInstances(numberOfInstances):会签中总共的实例数
(2) nrOfCompletedInstances:已经完成的实例数量
(3) nrOfActiviteInstances:当前还没有完成的实例数量

4、Completion condition,完成条件表达式

${nrOfInstances == nrOfCompletedInstances} 表示所有人员审批完成后会签结束。

${ nrOfCompletedInstances == 1}表示一个人完成审批,该会签就结束。

设置一个人完成后会签结束,那么其他人的代办任务都会消失。
在这里插入图片描述

  • 26
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hardworkl

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值