基于jeecgboot的flowable复杂会签加用户选择流程实现

简介: 基于jeecgboot的flowable复杂会签加用户选择流程实现

    因为flowable流程对于会签流转过程控制都是自动的,但要进行人为中间或后期干预,必须要用到执行监控器,在监控器中进行流程过程与监控,对满足要求进行处理。

1、首先在会签流程进行执行监控器的增加

其中类名 com.nbcio.modules.flowable.listener.MutiInstanceExecutionListener

目前先只实现多实例会签的监控处理

2、在程序里增加相应的执行监控器类

/**
 * 多实例会签审核结果全局监听器
 * @author nbacheng
 * @date 2022-09-22
*/
@Slf4j
@Component("MutiInstanceExecutionListener")
public class MutiInstanceExecutionListener implements ExecutionListener, ApplicationContextAware {
    private static final long serialVersionUID = 1L;
    private static  ApplicationContext applicationContext;

    
    @Override
    public void notify(DelegateExecution execution) {
        // TODO Auto-generated method stub
        RedisUtil redisUtil = applicationContext.getBean(RedisUtil.class);
        FlowNode flowNode = (FlowNode) execution.getCurrentFlowElement();
        if(Objects.nonNull(flowNode)) {
            if(flowNode instanceof UserTask ){
             UserTask userTask = (UserTask) flowNode;
             MultiInstanceLoopCharacteristics multiInstance = userTask.getLoopCharacteristics();
             if (Objects.nonNull(multiInstance)) {
                 if (Objects.nonNull(execution.getVariable("nrOfCompletedInstances"))) {
                     int nrOfCompletedInstances = (int) execution.getVariable("nrOfCompletedInstances");
                     int nrOfInstances = (int) execution.getVariable("nrOfInstances");
                     if(multiInstance.isSequential()) {
                         if((nrOfCompletedInstances + 1) >= nrOfInstances){//结束会签流程前一个节点提示进行用户选择
                             
                             redisUtil.set(CommonConstant.MUTIINSTANCE_NEXT_FINISH + execution.getProcessInstanceId(), execution.getProcessInstanceId());
                         }
                     }
                     else if(multiInstance.getCompletionCondition().equals("${nrOfCompletedInstances>=nrOfInstances}")) {
                         if((nrOfCompletedInstances + 1) >= nrOfInstances){//结束会签流程前一个节点提示进行用户选择
                             redisUtil.set(CommonConstant.MUTIINSTANCE_NEXT_FINISH + execution.getProcessInstanceId(), execution.getProcessInstanceId());
                         }
                     }
                     else if(multiInstance.getCompletionCondition().startsWith("${nrOfCompletedInstances/nrOfInstances>=")) {//后续根据需要实现
                         
                     }
                     /*log.info(execution.getId() + " - " + execution.getProcessInstanceId()
                        + " - " + execution.getEventName()
                        + " - " + execution.getCurrentActivityId()
                        + " - " + execution.getProcessInstanceBusinessKey());
                     log.info("UserExecutionListener会签方式:" + multiInstance.isSequential());
                     log.info("UserExecutionListener会签条件:" + multiInstance.getCompletionCondition());
                    log.info("UserExecutionListener总会签数:" + execution.getVariable("nrOfInstances"));
                    log.info("UserExecutionListener激活的会签数:" + execution.getVariable("nrOfActiveInstances"));
                    log.info("UserExecutionListener已经完成会签数:" + execution.getVariable("nrOfCompletedInstances"));*/
                 }
              }
             
          }    
        }
        
    }

    @Override
    public void setApplicationContext(ApplicationContext applicationContextNew) throws BeansException {
        // TODO Auto-generated method stub
        applicationContext = applicationContextNew;
    }
}

上面自己类没办法注入,所以采用ApplicationContextAware方式

同时对下一个任务是进行redis数据读取判断,同时前端也做一下处理

具体流程图与流程流转情况如下:



相关文章
|
存储 XML Java
Flowable工作流-高级篇
Flowable工作流-高级篇
10041 1
|
移动开发 前端开发
基于jeecg-boot的flowable流程审批时增加下一个审批人设置
基于jeecg-boot的flowable流程审批时增加下一个审批人设置
1718 0
|
前端开发 Java API
SpringBoot整合Flowable【07】- 驳回节点任务
本文通过绩效流程的业务场景,详细介绍了如何在Flowable工作流引擎中实现任务驳回功能。具体步骤包括:获取目标任务节点和当前任务节点信息,进行必要的判空和逻辑校验,调用API完成节点回退,并清理相关脏数据(如历史任务和变量)。最后通过测试验证了驳回功能的正确性,确保流程能够成功回退到指定节点并清除中间产生的冗余数据。此功能在实际业务中非常有用,能够满足上级驳回自评等需求。
3097 0
SpringBoot整合Flowable【07】- 驳回节点任务
|
XML 前端开发 Java
SpringBoot整合Flowable【08】- 前后端如何交互
本文详细介绍了如何通过 Flowable 的 BpmnModel API 以编程方式动态构建 BPMN 流程模型,而无需依赖 XML 文件。文章从实际业务场景出发,探讨了前端传递参数实现流程创建的可行性,并通过代码示例展示了整个实现过程。 主要内容包括:定义流程实体与节点结构、创建控制器处理请求、服务层实现流程模型转换及部署、递归构建任务节点和子节点、创建任务监听器和表单属性等关键方法。最后通过 curl 命令测试接口,验证流程部署成功。 虽然此方法灵活强大,但复杂流程的构建需编写大量代码。建议封装常用元素(如开始/结束事件、网关等),提升开发效率和代码可维护性。
1263 0
SpringBoot整合Flowable【08】- 前后端如何交互
|
移动开发 前端开发
基于jeecg-boot的flowable流程自定义业务退回撤回或驳回到发起人后的再次流程提交
基于jeecg-boot的flowable流程自定义业务退回撤回或驳回到发起人后的再次流程提交
1347 0
基于jeecgboot的支持flowable的排它网关之后的会签功能(二)
基于jeecgboot的支持flowable的排它网关之后的会签功能(二)
370 1
|
移动开发 前端开发
基于jeecg-boot的flowable流程加签功能实现
基于jeecg-boot的flowable流程加签功能实现
1551 0
|
搜索推荐
基于jeecgboot的flowabale流程节点动态设置审批人的实现
基于jeecgboot的flowabale流程节点动态设置审批人的实现
2577 2
|
移动开发 前端开发 Java
Flowable 任务监听器与执行监听器的介绍
Flowable 任务监听器与执行监听器的介绍
4313 1