flowable审批流程

发起流程

当流程部署完成后,可以根据流程定义信息发起流程,包括根据流程定义id、key、message等信息发起流程实例:

 runtimeService.startProcessInstanceByKey();
 runtimeService.startProcessInstanceById();
 runtimeService.startProcessInstanceByMessage();

这里我发起流程,是通过流程定义的名称,也就是BPMN文件中:name属性的值。

<process  id="askforHoliday" name="请假"  isExecutable="true">

因为api中没有根据提供根据name发起流程实例的方法,因此我的做法是,根据名称查询到流程定义的信息,拿到流程的key,然后根据key来发起流程:

   public CommonResult startProcByName(ProcessInsParam param) {
        String procDefName = param.getProcDefName();
        String tenantId = param.getTenantId();
        String startUserId = param.getStartUserId();
        String businessKey = param.getBusinessKey();
        //根据流程定义名称查询是否有流程定义
        ActReProcdefParam defParam=new ActReProcdefParam();
        defParam.setName(procDefName);
        defParam.setTenantId(tenantId);
        //查询流程定义信息
        List<ProcessDefinition> list=flowApi.queryProcDef(defParam);
        if(list.size()==0){
            return CommonResult.error("不存在该流程定义!",null);
        }
        ProcessDefinition processDefinition = list.get(0);
        String key = processDefinition.getKey();//流程key
        Authentication.setAuthenticatedUserId(startUserId);
        Map<String, Object> variable = param.getVariable();
        System.out.println(Authentication.getAuthenticatedUserId());
        variable.put("USER_ID",Authentication.getAuthenticatedUserId());//追加流程发起人字段
        //根据流程名称创建流程实例
        CommonResult result = flowApi.startTenantProcess(key, businessKey, variable, tenantId);
        return result;
    }

流程创建成功后,会返回该流程实例的id。

获取任务列表

发起流程后,流程会进行到流程第一个流程节点,在我的场景中,任务是被分配给用户组的,也就是角色。如果是该角色的用户,都可以领取该任务并进行审核。因此首先需要获取到属于自己的任务列表,我是通过自己写sql来查询。这个可以查询到任务人是自己,同时属于自己角色的任务。

 List<ActRuTaskVo> myWaitTask(ActRuTaskParam param);
//对应的sql
 select   t.ID_ as id,t.EXECUTION_ID_ as executionId,t.PROC_INST_ID_ as procInstId,t.PROC_DEF_ID_ as procDefId,
                 t.NAME_ as taskName,t.TASK_DEF_KEY_ as taskDefKey,t.CREATE_TIME_ as createTime,t.TENANT_ID_ as tenantId,
                 def.NAME_ as procDefName,hp.BUSINESS_KEY_ as businnessKey,hp.START_USER_ID_ as startUserId
        from act_ru_task t
        left join act_hi_procinst hp on hp.PROC_INST_ID_= t.PROC_INST_ID_
        left join act_re_procdef def on def.ID_=hp.PROC_DEF_ID_
        where  t.TENANT_ID_=#{tenantId} and t.ASSIGNEE_=#{assignee} and def.NAME_=#{procDefName}
        union all
        SELECT   t.ID_ as id,t.EXECUTION_ID_ as executionId,t.PROC_INST_ID_ as procInstId,t.PROC_DEF_ID_ as procDefId,
                 t.NAME_ as taskName,t.TASK_DEF_KEY_ as taskDefKey,t.CREATE_TIME_ as createTime,t.TENANT_ID_ as tenantId,
                 def.NAME_ as procDefName,hp.BUSINESS_KEY_ as businnessKey,hp.START_USER_ID_ as startUserId
        from  act_ru_task t
		left join act_hi_procinst hp on hp.PROC_INST_ID_= t.PROC_INST_ID_
        left join act_hi_identitylink i on t.ID_=i.TASK_ID_
        left join act_re_procdef def on def.ID_=t.PROC_DEF_ID_
        where t.TENANT_ID_=#{tenantId} and i.GROUP_ID_=#{groupId} and def.NAME_=#{procDefName}

审批任务

当获取到任务列表后,根据任务id,对任务进行审核:

 public CommonResult completeTask(ActRuTaskParam param) {
 		//获取任务id
        String taskId= param.getId();
        //流程实例id
        String procInstId = param.getProcInstId();
        //参数变量
        Map<String, Object> variable = param.getVariable();
        String commonStr="";
        if(ObjectUtil.isNotEmpty(variable)){
            Object common = param.getVariable().get(FlowableConst.COMMON);
            commonStr=ObjectUtil.isEmpty(common)?"":(String) common;
        }
        //审核结果+审批意见
                commonStr=param.getVariable().get(FlowableConst.APPROVAL)+"&"+commonStr;//记录审批结果+备注信息
        String assignee = param.getAssignee();//当前登录用户标志
        taskService.claim(taskId,assignee);//认领任务
        taskService.addComment(taskId,procInstId,commonStr);//添加审核备注
        taskService.complete(param.getId(),variable);
        return CommonResult.success();
    }

任务审批后,流程实例会进入到下一个任务节点。

在JFinal中实现Flowable审批流程的方法可以通过以下步骤实现: 1. 在流程表单数据正式提交审核前,需要将流程表单数据formData及流程执行实例ExecutionEntity传递给接口。 2. 首先,需要引入Flowable依赖并配置好相关的数据库连接信息。 3. 在JFinal中创建一个继承自FlowablePlugin的插件类,并进行相关配置,例如设置数据库连接、流程引擎配置等。 4. 在JFinal的配置文件中添加FlowablePlugin插件配置。 5. 创建一个继承自FlowableController的控制器类,并实现具体的审批逻辑。 6. 在控制器类中,可以使用Flowable提供的API方法来创建流程、启动流程实例、查询任务列表、完成任务等操作。 7. 对于多级审批的场景,可以使用多实例方式或者流程中绘制多个审批人的方式来实现。使用多实例方式可以通过设置流程变量来指定审批人的信息,实现逐级审批。 8. 在流程中,可以使用条件判断来实现不同分支的审批逻辑。例如,使用if语句判断流程是否是一个ExclusiveGateway对象,根据判断结果执行不同的逻辑。 综上所述,以上是在JFinal中实现Flowable审批流程的一种方法。可以根据具体的需求和业务逻辑进行相应的调整和扩展。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [Flowable 实现【选择下一步流程审核人】](https://blog.youkuaiyun.com/weixin_39805539/article/details/111519749)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [flowable 实现逐级审批功能](https://blog.youkuaiyun.com/qq_17798399/article/details/123424189)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值