|
@@ -0,0 +1,170 @@
|
|
|
|
|
+package com.sf;
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+import org.activiti.engine.RepositoryService;
|
|
|
|
|
+import org.activiti.engine.RuntimeService;
|
|
|
|
|
+import org.activiti.engine.TaskService;
|
|
|
|
|
+import org.activiti.engine.repository.Deployment;
|
|
|
|
|
+import org.activiti.engine.runtime.ProcessInstance;
|
|
|
|
|
+import org.activiti.engine.task.Task;
|
|
|
|
|
+import org.junit.jupiter.api.Test;
|
|
|
|
|
+import org.springframework.beans.factory.annotation.Autowired;
|
|
|
|
|
+import org.springframework.boot.test.context.SpringBootTest;
|
|
|
|
|
+import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
|
|
|
|
|
+import org.springframework.security.core.Authentication;
|
|
|
|
|
+import org.springframework.security.core.context.SecurityContextHolder;
|
|
|
|
|
+
|
|
|
|
|
+import java.util.HashMap;
|
|
|
|
|
+import java.util.Map;
|
|
|
|
|
+
|
|
|
|
|
+/**
|
|
|
|
|
+ * @author WanJl
|
|
|
|
|
+ * @version 1.0
|
|
|
|
|
+ * @title ACTQuickStarTest
|
|
|
|
|
+ * @description 流程部署:添加资源文件、获取部署信息、部署时间
|
|
|
|
|
+ * @create 2026/3/15
|
|
|
|
|
+ */
|
|
|
|
|
+@SpringBootTest
|
|
|
|
|
+public class ACTQuickStarTest {
|
|
|
|
|
+ /*
|
|
|
|
|
+ 使用Activiti提供的API快速实现流程
|
|
|
|
|
+ */
|
|
|
|
|
+ //用来部署流程定义
|
|
|
|
|
+ @Autowired
|
|
|
|
|
+ private RepositoryService repositoryService;
|
|
|
|
|
+
|
|
|
|
|
+ @Test
|
|
|
|
|
+ public void deployProcess() {
|
|
|
|
|
+ //资源文件:
|
|
|
|
|
+ String fileName = "bpmn/diagram.bpmn";
|
|
|
|
|
+ String imageFile = "bpmn/diagram.jpg";
|
|
|
|
|
+ //定义流程
|
|
|
|
|
+ Deployment deployment = repositoryService.createDeployment()//创建流程
|
|
|
|
|
+ .addClasspathResource(fileName)//添加资源文件
|
|
|
|
|
+ .addClasspathResource(imageFile)//添加资源文件
|
|
|
|
|
+ .name("Process_1")
|
|
|
|
|
+ .deploy();
|
|
|
|
|
+ //部署流程
|
|
|
|
|
+ System.out.println("流程部署ID:" + deployment.getId());
|
|
|
|
|
+ System.out.println("流程部署名称:" + deployment.getName());
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 流程实例
|
|
|
|
|
+ */
|
|
|
|
|
+ @Autowired
|
|
|
|
|
+ private RuntimeService runtimeService;
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 初始化流程实例
|
|
|
|
|
+ */
|
|
|
|
|
+ @Test
|
|
|
|
|
+ public void initProcessInstance() {
|
|
|
|
|
+ //流程定义key
|
|
|
|
|
+ ProcessInstance processInstance =
|
|
|
|
|
+ runtimeService.startProcessInstanceByKey("Process_1", "business_key_01");
|
|
|
|
|
+ //business_key是业务表示,通常是业务表的主键,业务标识和流程实例一一对应。业务表示来源与业务系统,存储业务标识就是根据业务表示来关联查询业务系统的数据。
|
|
|
|
|
+ //比如,这个请假流程中,有一个表是专门用来存储请假单的。
|
|
|
|
|
+ //那么不同的人执行请假流程,就会有单独的流程实例,那么对应的请假单表里面的数据也是不一样的,那么对应的业务标识就是请假单的ID(主键)。
|
|
|
|
|
+ System.out.println("流程实例ID:" + processInstance.getProcessInstanceId()); //流程实例ID
|
|
|
|
|
+ System.out.println("流程定义ID:" + processInstance.getProcessDefinitionId());//流程定义ID
|
|
|
|
|
+
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ //任务服务
|
|
|
|
|
+ @Autowired
|
|
|
|
|
+ private TaskService taskService;
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 查询我的代办任务
|
|
|
|
|
+ */
|
|
|
|
|
+ @Test
|
|
|
|
|
+ public void getTaskByAssignee() {
|
|
|
|
|
+ //根据条件获取任务
|
|
|
|
|
+ Task task = taskService.createTaskQuery()//创建任务查询
|
|
|
|
|
+ .processDefinitionKey("Process_1") //流程定义key
|
|
|
|
|
+ .taskAssignee("张三")//任务执行人
|
|
|
|
|
+ .processInstanceBusinessKey("business_key_01") //业务标识
|
|
|
|
|
+ .singleResult();//返回单个结果
|
|
|
|
|
+ System.out.println("任务ID:" + task.getId());
|
|
|
|
|
+ System.out.println("任务名称:" + task.getName());
|
|
|
|
|
+ System.out.println("任务创建时间:" + task.getCreateTime());
|
|
|
|
|
+ System.out.println("任务办理人:" + task.getAssignee());
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Test
|
|
|
|
|
+ public void completeTask() {
|
|
|
|
|
+ String assignee = "张三";
|
|
|
|
|
+ String businessKey = "business_key_01";
|
|
|
|
|
+ //根据流程业务键和任务负责人查询任务
|
|
|
|
|
+ Task task = taskService.createTaskQuery()//创建任务查询
|
|
|
|
|
+ .processDefinitionKey("Process_1") //流程定义key
|
|
|
|
|
+ .taskAssignee(assignee)//任务执行人
|
|
|
|
|
+ .processInstanceBusinessKey(businessKey) //业务标识
|
|
|
|
|
+ .singleResult();//返回单个结果
|
|
|
|
|
+ //执行任务
|
|
|
|
|
+ if (task != null) {
|
|
|
|
|
+ Map<String,Object> variables = new HashMap<>();
|
|
|
|
|
+ variables.put("userName","张三");
|
|
|
|
|
+ variables.put("starDate","2026-03-15");
|
|
|
|
|
+ variables.put("days",1);
|
|
|
|
|
+ variables.put("reason","出去打假");
|
|
|
|
|
+ taskService.complete(task.getId(), variables);
|
|
|
|
|
+ System.out.println("任务完成,任务ID:" + task.getId());
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+ }
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 经理审批:同意
|
|
|
|
|
+ */
|
|
|
|
|
+ @Test
|
|
|
|
|
+ public void approvalOk(){
|
|
|
|
|
+ //设置当前的用户
|
|
|
|
|
+ Authentication authentication = new UsernamePasswordAuthenticationToken("李四", "123456");
|
|
|
|
|
+ SecurityContextHolder.getContext().setAuthentication(authentication);
|
|
|
|
|
+
|
|
|
|
|
+ //查询任务
|
|
|
|
|
+ Task task = taskService.createTaskQuery()//创建任务查询
|
|
|
|
|
+ .processDefinitionKey("Process_1") //流程定义key
|
|
|
|
|
+ .taskAssignee("李四")//任务执行人
|
|
|
|
|
+ .processInstanceBusinessKey("business_key_01") //业务标识
|
|
|
|
|
+ .singleResult();
|
|
|
|
|
+
|
|
|
|
|
+ //完成任务
|
|
|
|
|
+ if (task != null){
|
|
|
|
|
+ Map<String,Object> variables = new HashMap<>();
|
|
|
|
|
+ variables.put("approvalStatus","同意");
|
|
|
|
|
+ variables.put("approvalNote","去吧...");
|
|
|
|
|
+ taskService.complete(task.getId(), variables);
|
|
|
|
|
+ System.out.println("任务完成,任务ID:" + task.getId());
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 经理审批:不同意
|
|
|
|
|
+ */
|
|
|
|
|
+ @Test
|
|
|
|
|
+ public void approvalNoOk(){
|
|
|
|
|
+ String assignee = "李四";
|
|
|
|
|
+ //查询任务
|
|
|
|
|
+ Task task = taskService.createTaskQuery()//创建任务查询
|
|
|
|
|
+ .processDefinitionKey("Process_1") //流程定义key
|
|
|
|
|
+ .taskAssignee(assignee)//任务执行人
|
|
|
|
|
+ .processInstanceBusinessKey("business_key_01") //业务标识
|
|
|
|
|
+ .singleResult();
|
|
|
|
|
+ String reason="不行,我们就是假的...";
|
|
|
|
|
+ if (task != null){
|
|
|
|
|
+ Map<String,Object> variables = new HashMap<>();
|
|
|
|
|
+ variables.put("approvalStatus","不同意");
|
|
|
|
|
+ variables.put("approvalNote",reason);
|
|
|
|
|
+
|
|
|
|
|
+ //记录流程变量
|
|
|
|
|
+ runtimeService.setVariables(task.getProcessInstanceId(), variables);
|
|
|
|
|
+ //添加流程变量,删除流程实例,表示任务被拒绝
|
|
|
|
|
+ runtimeService.deleteProcessInstance(task.getProcessInstanceId(), reason);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+}
|