生活随笔
收集整理的這篇文章主要介紹了
flowable 会签和或签的实现 任务多实例
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
會簽:指同一個審批節點設置多個人,如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)// @GlobalTransactionalpublic boolean startProcess(ProcessAudit audit) {String businessTable = FlowUtil.getBusinessTable(ProcessConstant.PARALLEL_AUDIT_KEY);if (Func.isEmpty(audit.getId())) {// 保存receiveaudit.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寫入receiveaudit.setProcessInstanceId(result.getData().getProcessInstanceId());updateById(audit);} else {throw new ServiceException("開啟流程失敗");}} else {updateById(audit);}return true;}}
總結
以上是生活随笔為你收集整理的flowable 会签和或签的实现 任务多实例的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。