Activiti7 组任务
需求:在流程定义中在任务节点的assignee固定设置任务负责人,这种情况不是很好,如果有天任务负责人请假了,你想请假,等着吧..没人审批,针对这种情况,可以给任务设置多个候选人,可以从候选中选择参与者来完成任务
设置候选人:画图
候选人 采用Candidate Users字段设置 多人使用逗号隔开
画完图之后,部署,然后启动流程实例,提交zhangsan的任务,接下来的看代码注释吧
package com.itheima.test; import org.activiti.engine.*; import org.activiti.engine.repository.Deployment; import org.activiti.engine.runtime.ProcessInstance; import org.activiti.engine.task.Task; import org.activiti.engine.task.TaskQuery; import org.junit.Before; import org.junit.Test; import java.util.List; public class ActivitiGroupTest { ProcessEngine processEngine; TaskService taskService; String candidateUser = "lisan"; static String KEY = "holiday"; @Before public void init() { processEngine = ProcessEngines.getDefaultProcessEngine(); taskService = processEngine.getTaskService(); } /** * 部署流程定义 */ @Test public void deployment(){ RepositoryService repositoryService = processEngine.getRepositoryService(); Deployment deploy = repositoryService.createDeployment() .addClasspathResource("pic/holidayGroup.bpmn") .addClasspathResource("pic/holidayGroup.png") .name("请假流程") .deploy(); System.out.println(deploy); } /** * 启动流程实例 */ @Test public void startProcessInstance(){ RuntimeService runtimeService = processEngine.getRuntimeService(); ProcessInstance processInstance = runtimeService.startProcessInstanceByKey(ActivitiGroupTest.KEY); System.out.println(processInstance); } /** * 查询组任务 */ @Test public void queryGroupTask() { queryTaskByCandidateUser(candidateUser, null, false).forEach(task -> { System.out.println(task); }); } /** * 用户拾取组任务 */ @Test public void claimTask() { queryTaskByCandidateUser(candidateUser, null, false).forEach(task -> { taskService.claim(task.getId(), candidateUser); System.out.println(candidateUser + "用户拾取了[" + task.getName() + "]任务"); }); } /** * 用户归还组任务 */ @Test public void unClaimTask(){ queryTaskByCandidateUser(null, candidateUser, true).forEach(task -> { taskService.setAssignee(task.getId(),null); System.out.println(candidateUser + "用户丢弃了[" + task.getName() + "]任务"); }); } /** * 用户任务交接,委托 */ @Test public void toAssignee(){ queryTaskByCandidateUser(null,candidateUser,true).forEach(task -> { taskService.setAssignee(task.getId(),"lisi"); System.out.println(candidateUser+"用户将["+task.getName()+"]任务交接给了lisi用户"); }); } /** * 查询并处理自己的任务 */ @Test public void queryCompletTask() { queryTaskByCandidateUser(null, "lisi", true).forEach(task -> { taskService.complete(task.getId()); System.out.println(candidateUser+"处理了["+task.getName()+"]任务"); }); } /** * 根据候选人查询任务 * * @param candidateUser 候选人 * @param assignee 指定人 * @param isAssignee 是否是指定人 * @return 任务列表 */ public List<Task> queryTaskByCandidateUser(String candidateUser, String assignee, Boolean isAssignee) { TaskQuery taskQuery = taskService.createTaskQuery().processDefinitionKey(ActivitiGroupTest.KEY); if (isAssignee) { taskQuery.taskAssignee(assignee); } else { taskQuery.taskCandidateUser(candidateUser); } return taskQuery.list(); } }
作者:彼岸舞
时间:2020\09\06
内容关于:Activiti工作流
本文来源于网络,只做技术分享,一概不负任何责任
分类:
activiti
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!