ruoyi-flowable(z)

一.基础知识

flowable基础知识

二.上手ruoyi-flowable

1.设置申请人

流程表达式菜单

把流程发起人表达式放入申请人 活动节点。

此时设计流程保存后,用户发起流程,点击提交表单,这时后台会先去 获取下一活动节点,如果下一活动节点有流程变量 就弹框 让用户选择变量指代的人员 并且写提交意见;如果没有就写提交意见,发起流程。

由于申请人节点用了 流程变量,所以会弹框让用户选择变量指代的人员,但是这样就有些奇怪。所以需要修改代码:
1.获取下一节点接口:遇到${INITIATOR} 就跳过
2.发起流程接口:给 ${INITIATOR} 设置指代对象,自动帮发起人完成审批流程
这样就可以直接 流转到 申请人的下一活动节点。

修改代码

1.获取下一节点接口:遇到${INITIATOR} 就跳过

@Override
    public AjaxResult getNextFlowNodeByStart(FlowTaskVo flowTaskVo) {
   
        ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery().deploymentId(flowTaskVo.getDeploymentId()).singleResult();
        // Step 1. 获取当前节点并找到下一步节点
        FlowNextDto flowNextDto = new FlowNextDto();
        // Step 2. 获取当前流程所有流程变量(网关节点时需要校验表达式)
        List<UserTask> nextUserTask = FindNextNodeUtil.getNextUserTasksByStart(repositoryService, processDefinition, flowTaskVo.getVariables());
        if (CollectionUtils.isNotEmpty(nextUserTask)) {
   
            for (UserTask userTask : nextUserTask) {
   
                MultiInstanceLoopCharacteristics multiInstance = userTask.getLoopCharacteristics();
                // 会签节点
                if (Objects.nonNull(multiInstance)) {
   
                    flowNextDto.setVars(multiInstance.getInputDataItem());
                    flowNextDto.setType(ProcessConstants.PROCESS_MULTI_INSTANCE);
                    flowNextDto.setDataType(ProcessConstants.DYNAMIC);
                } else {
   
                    //如果遇到发起人流程变量 则跳过:启动时会自动添加
                    if (("${" + ProcessConstants.PROCESS_INITIATOR + "}").equals(userTask.getAssignee())) {
   
                        continue;
                    }
                    // 读取自定义节点属性 判断是否是否需要动态指定任务接收人员、组
                    String dataType = userTask.getAttributeValue(ProcessConstants.NAMASPASE, ProcessConstants.PROCESS_CUSTOM_DATA_TYPE);
                    String userType = userTask.getAttributeValue(ProcessConstants.NAMASPASE, ProcessConstants.PROCESS_CUSTOM_USER_TYPE);
                    flowNextDto.setVars(ProcessConstants.PROCESS_APPROVAL);
                    flowNextDto.setType(userType);
                    flowNextDto.setDataType(dataType);
                }
            }
        }
        return AjaxResult.success(flowNextDto);
    }

2.发起流程接口:给 ${INITIATOR} 设置指代对象,自动帮发起人完成审批流程

/**
     * 根据流程定义ID启动流程实例
     *
     * @param procDefId 流程模板ID
     * @param variables 流程变量
     * @return
     */
    @Override
    public AjaxResult startProcessInstanceById(String procDefId, Map<String, Object> variables) {
   
        try {
   
            ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery().processDefinitionId(procDefId)
                    .latestVersion().singleResult();
            if (Objects.nonNull(processDefinition) && processDefinition.isSuspended()) {
   
                return AjaxResult.error("流程已被挂起,请先激活流程");
            }
            // 设置流程发起人Id到流程中
            SysUser sysUser = SecurityUtils.getLoginUser().getUser();
            identityService.setAuthenticatedUserId(sysUser.getUserId().toString());
            variables.put(ProcessConstants.PROCESS_INITIATOR, sysUser.getUserId());
        

你可能感兴趣的:(java,ruoyi)