芋道---实现可退回至申请人节点(附完整代码)

本文描述了如何在审批系统中实现当审批人需要将申请退回至申请人时的功能,通过在流程模型中添加申请人节点、修改任务分配规则和在后台添加逻辑,确保只有申请人提交时自动完成任务,避免误操作。
摘要由CSDN通过智能技术生成

      现有如下需求,审批人在退回申请时,想退回至申请人节点,但目前芋道并不支持退回至申请人节点,现做如下修改,实现该需求:

步骤一:设计流程模型

      首先,我们在设计流程模型时,添加申请人节点,如图所示:

      因为在退回的时候,我们可以看到,后台是根据UserTask判断的,如果说类型为用户节点,它才会将其放到退回的流程里面,如果我们只有一个开始节点的话,它是不会进行退回的,所以这里我们将申请人单独设置为一个用户节点。

步骤二:修改任务分配规则

     将分配规则中的申请人,改成自定义脚本,流程发起人

     接下来只需要在后台代码中进行自动完成任务即可。

步骤三:后台添加逻辑

     正常来说,每到一个节点都需要进行审核才能继续走下去,但由于我们该节点为申请人,所以我们需要在这个节点做一些处理,也就是当申请人提交申请的同时,自动完成了申请人节点这个任务。

思路:首先我们找到对应的启动流程的方法,然后将当前流程的userId放到流程变量当中,然后遍历任务,然后获取任务的候选人,判断如果候选人和流程变量中存放的userid相等,则完成该任务。 为了排除当其他节点中候选人中也是这个userId,如果不做限制,它也会自动完成,接下来我们把它单独封装成一个方法,仅在启动流程中调用。

      实现:

 BpmProcessInstanceServiceImpl:添加如下两行代码,位置如图:

variables.put(BpmnXMLConstants.ATTRIBUTE_EVENT_START_INITIATOR, userId);
taskService.startFirstTask(instance, variables);

接下来,我们在对应的 taskService 中,添加完成第一个任务的方法startFirstTask

BpmTaskService:

void startFirstTask(ProcessInstance processInstance, Map<String, Object> variables);

BpmTaskServiceImpl: 

    /**
     * 启动第一个任务
     * @param processInstance 流程实例
     * @param variables 流程参数
     */
    @Override
    public void startFirstTask(ProcessInstance processInstance, Map<String, Object> variables) {
        // 若第一个用户任务为发起人,则自动完成任务
        List<Task> tasks = taskService.createTaskQuery().processInstanceId(processInstance.getProcessInstanceId()).list();
        if (CollUtil.isNotEmpty(tasks)) {
            String userIdStr = variables.get(DictTypeConstants.PROCESS_INITIATOR).toString();
            for (Task task : tasks) {
                if (StrUtil.equals(task.getAssignee(), userIdStr)) {
                    taskService.addComment(task.getId(), processInstance.getProcessInstanceId(), BpmCommentTypeEnum.APPROVE.getType().toString(), getLoginUserId() + "发起流程申请");
                    taskService.complete(task.getId(), variables);
                }
            }
        }
    }
}

  • 15
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿土不土

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值