springboot+Activiti7整合实践 (八) 待办任务

本文详细介绍了如何在SpringBoot应用中与Activiti7整合,包括查询待办任务、完成任务的方法,以及流程控制的实现。重点展示了API的使用和工作流的基本操作,后续还会涉及更深入的业务逻辑和用户界面设计。
摘要由CSDN通过智能技术生成

系列文章目录

第一章 springboot+Activiti7整合实践 (一)

第二章 springboot+Activiti7整合实践 (二) 模型定义

第三章 springboot+Activiti7整合实践 (三) 流程定义

第四章 springboot+Activiti7整合实践 (四) 分配规则

第五章 springboot+Activiti7整合实践 (五) 发布流程

第六章 springboot+Activiti7整合实践 (六) 启动流程(1)

第七章 springboot+Activiti7整合实践 (七) 自定义用户任务行为



前言

流程启动后,工作流就开始了工作,进入到开始节点连线指向的第一个节点,待办任务的功能是工作流必不可少的一环,本章节主要分享当前登录用户的待办任务查询、完成任务节点。


一、代办任务查询

        String loginName = JwtUtil.getLoginName();
        String userId = JwtUtil.getUserId();
        if (page != null && page > 0 && size != null && size > 0) {
            PageHelper.startPage(page, size);
        }

        SysUserInfoDto sysUserInfoDto =sysUserExtService.getUserExtByLoginName(loginName);
        List<SysRole> roleList = sysUserInfoDto.getRoles();



        List<Task> taskList= taskService
                .createTaskQuery()

               .taskCandidateOrAssigned(userId)

                //.taskAssignee(userId)
                //.taskCandidateGroupIn(groupList)
                .orderByTaskCreateTime().desc()
                .list();

 这里使用到TaskService服务类对象,根据当前登录用户的id,调用taskCandidateOrAssigned(userId)方法,筛选待办任务,这里还有很多方法,如注释中的taskAssignee(userId)、.taskCandidateGroupIn(groupList) 分别对应,指定用户、指定组(一般对标部门或角色),因为我们上一张,讲分配规则的用户id都设置到了下图的candidateUsers中,所以我们这里查询任务使用的上图的taskCandidateOrAssigned(userId)。

二、完成任务

    /**
     * 完成任务方法
     * */
    public Task completeTaskByVariables(String taskId,String userId,Map<String, Object> variables){
        if(variables == null){
            variables = new HashMap<>();
        }
        Task curTask = taskService
                .createTaskQuery().taskId(taskId).singleResult();
        if (curTask.getAssignee() == null) {
            taskService.claim(taskId,userId);
        }
        //清楚回退产生的流程数据
        Object object = taskService.getVariable(taskId, ActivitiConstist.SP_PASS);
        if(object!=null && StringUtils.isNotEmpty(object.toString())){
            taskService.removeVariable(taskId,ActivitiConstist.SP_PASS);
        }
        Object object2 = taskService.getVariable(taskId,ActivitiConstist.HQ_PASS);
        if(object2!=null && StringUtils.isNotEmpty(object2.toString())){
            taskService.removeVariable(taskId,ActivitiConstist.HQ_PASS);
        }

        UserTask nextUserTask = getNextFlowElementUser(curTask);

        if(nextUserTask !=null){
            MultiInstanceLoopCharacteristics multiInstanceLoopCharacteristics = nextUserTask.getLoopCharacteristics();

            if(multiInstanceLoopCharacteristics!=null){
                //多实例
                List<WorkTaskAssignRule> workTaskAssignRuleList = workTaskAssignRuleService.getTaskAssignRuleListByProcessDefinitionId(curTask.getProcessDefinitionId(),nextUserTask.getId());
                WorkTaskAssignRule  workTaskAssignRule = workTaskAssignRuleList.get(0);
                Set<String> userIdSet = workTaskAssignRuleService.getUserSetByTaskRule(workTaskAssignRule);
                variables.put("coll_userList",userIdSet);
                variables.put("num",userIdSet.size());
            }else{

            }


        }
        if(variables.size()>0){
            taskService.complete(curTask.getId(),variables);
        }else{
            taskService.complete(curTask.getId());
        }
    return curTask;
    }

完成任务的核心方式是complete(),必填的参数是当前任务的id,可选的参数是任务流程参数,如果任务流程中使用uel表达式定义了某个变量,如${day>3},那么在流程流转到这个节点时,就要设置day的值,否则流程就无法进行。

任务完成之后,就会根据流程定义的箭头,流向下一个节点。


总结

工作流学习内容其实就是api的使用,学会这些api的使用,基本就能完成简单的工作流流程,但如果从用户角度出发,工作流流程各个节点的流程信息、项目信息、业务表单的展示这些问题,还需要再仔细梳理,也是我正在进行的内容,希望不久能所突破。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

刘一线

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

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

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

打赏作者

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

抵扣说明:

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

余额充值