flowable 会签和或签的实现 任务多实例

flowable 会签和或签的实现 任务多实例会签 指同一个审批节点设置多个人 如 ABC 三人 三人会同时收到审批 需全部同意之后 审批才可到下一审批节点 或签 指同一个审批节点设置多个人 如 ABC 三人 三人会同时收到审批 只要其中任意一人审批即可到下一审批节点

大家好,我是讯享网,很高兴认识大家。

会签:指同一个审批节点设置多个人,如ABC三人,三人会同时收到审批,需全部同意之后,审批才可到下一审批节点;

或签:指同一个审批节点设置多个人,如ABC三人,三人会同时收到审批,只要其中任意一人审批即可到下一审批节点。

如果一个活动是多实例,将通过在该活动底部的三条短线表示。三条线代表实例会并行执行,而三条线代表顺序执行。


讯享网

 

用户任务配置多实例类型、集合、完成条件、元素变量、分配用户

完成条件通过这几个内置变量来决定

nrOfInstances 一共有多少个实例
nrOfCompletedInstances 已经完成的实例个数
nrOfActiveInstances 未完成的实例个数

会签全部完成:

${nrOfCompletedInstances==nrOfInstances}

或签1人完成:

${nrOfCompletedInstances>=1}

由于我的前端是多个流程公用一个页面,传入参数名称固定的,所以使用循环加反射获取了一下选择的审批人,再填入list中
 

/ * 服务实现类 * 通用审批流(平行&或签) * @author Chill */ @Slf4j @Service @AllArgsConstructor public class ParallelAuditServiceImpl extends BaseServiceImpl<AuditMapper, ProcessAudit> implements IParallelAuditService { private final IFlowClient flowClient; @Override @Transactional(rollbackFor = Exception.class) // @GlobalTransactional public boolean startProcess(ProcessAudit audit) { String businessTable = FlowUtil.getBusinessTable(ProcessConstant.PARALLEL_AUDIT_KEY); if (Func.isEmpty(audit.getId())) { // 保存receive audit.setApplyTime(DateUtil.now()); save(audit); List<String> taskUserList = new ArrayList<>(); Method method=null; for (int i = 1; i <= 10; i++) { try { method = audit.getClass().getMethod("getTaskUser" + i); if (Func.isNotEmpty(method.invoke(audit))) { taskUserList.add(TaskUtil.getTaskUser((String) method.invoke(audit))); } else { break; } } catch (NoSuchMethodException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); } } // 启动流程 Kv variables = Kv.create() .set(ProcessConstant.TASK_VARIABLE_CREATE_USER, AuthUtil.getUserName()) //taskUserList 为选择的审批人列表 .set("taskUserList", taskUserList) //单据id .set("auditId", audit.getAuditId()) //单据No .set("auditNo", audit.getAuditNo()) //单据类型 领用、借用等 .set("auditType", audit.getAuditType()); R<BladeFlow> result = flowClient.startProcessInstanceById(audit.getProcessDefinitionId(), FlowUtil.getBusinessKey(businessTable, String.valueOf(audit.getId())), variables); if (result.isSuccess()) { log.debug("流程已启动,流程ID:" + result.getData().getProcessInstanceId()); // 返回流程id写入receive audit.setProcessInstanceId(result.getData().getProcessInstanceId()); updateById(audit); } else { throw new ServiceException("开启流程失败"); } } else { updateById(audit); } return true; } } 

讯享网

小讯
上一篇 2025-01-08 11:56
下一篇 2025-01-19 19:20

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/71162.html