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();
    }

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值