From 8824072ee6e82469ea2652719f672d3042eeff6c Mon Sep 17 00:00:00 2001 From: yovinchen Date: Mon, 12 Jun 2023 09:53:05 +0800 Subject: [PATCH] Initial commit --- service-oa/pom.xml | 14 ++ .../src/main/resources/application-dev.yml | 21 +- .../main/resources/process/qingjia.bpmn20.xml | 40 ++++ .../src/main/resources/process/qingjia.png | Bin 0 -> 7646 bytes .../com/atguigu/auth/activti/ProcessTest.java | 195 ++++++++++++++++++ 5 files changed, 267 insertions(+), 3 deletions(-) create mode 100644 service-oa/src/main/resources/process/qingjia.bpmn20.xml create mode 100644 service-oa/src/main/resources/process/qingjia.png create mode 100644 service-oa/src/test/java/com/atguigu/auth/activti/ProcessTest.java diff --git a/service-oa/pom.xml b/service-oa/pom.xml index 9f66b76..d2d541d 100644 --- a/service-oa/pom.xml +++ b/service-oa/pom.xml @@ -44,6 +44,19 @@ velocity-engine-core 2.0 + + + + org.activiti + activiti-spring-boot-starter + 7.1.0.M6 + + + mybatis + org.mybatis + + + @@ -70,6 +83,7 @@ **/*.yml **/*.properties **/*.xml + **/*.png false diff --git a/service-oa/src/main/resources/application-dev.yml b/service-oa/src/main/resources/application-dev.yml index dc183dd..ce4adfd 100644 --- a/service-oa/src/main/resources/application-dev.yml +++ b/service-oa/src/main/resources/application-dev.yml @@ -10,9 +10,9 @@ spring: datasource: type: com.zaxxer.hikari.HikariDataSource driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://localhost:3306/guigu-oa?useSSL=false&useUnicode=true&characterEncoding=utf8&allowPublicKeyRetrieval=true - username: root - password: root + url: jdbc:mysql://43.143.164.194:3306/guigu-oa?useSSL=false&useUnicode=true&characterEncoding=utf8&allowPublicKeyRetrieval=true + username: admin + password: admin jackson: date-format: yyyy-MM-dd HH:mm:ss time-zone: GMT+8 @@ -28,3 +28,18 @@ spring: max-wait: -1 #最大阻塞等待时间(负数表示没限制) max-idle: 5 #最大空闲 min-idle: 0 #最小空闲 + activiti: + # false:默认,数据库表不变,但是如果版本不对或者缺失表会抛出异常(生产使用) + # true:表不存在,自动创建(开发使用) + # create_drop: 启动时创建,关闭时删除表(测试使用) + # drop_create: 启动时删除表,在创建表 (不需要手动关闭引擎) + database-schema-update: true + #监测历史表是否存在,activities7默认不开启历史表 + db-history-used: true + #none:不保存任何历史数据,流程中这是最高效的 + #activity:只保存流程实例和流程行为 + #audit:除了activity,还保存全部的流程任务以及其属性,audit为history默认值 + #full:除了audit、还保存其他全部流程相关的细节数据,包括一些流程参数 + history-level: full + #校验流程文件,默认校验resources下的process 文件夹的流程文件 + check-process-definitions: true diff --git a/service-oa/src/main/resources/process/qingjia.bpmn20.xml b/service-oa/src/main/resources/process/qingjia.bpmn20.xml new file mode 100644 index 0000000..64ca3e2 --- /dev/null +++ b/service-oa/src/main/resources/process/qingjia.bpmn20.xml @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/service-oa/src/main/resources/process/qingjia.png b/service-oa/src/main/resources/process/qingjia.png new file mode 100644 index 0000000000000000000000000000000000000000..b9a75574f2ae46de18ea3beb092c7c05d17d608e GIT binary patch literal 7646 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 literal 0 HcmV?d00001 diff --git a/service-oa/src/test/java/com/atguigu/auth/activti/ProcessTest.java b/service-oa/src/test/java/com/atguigu/auth/activti/ProcessTest.java new file mode 100644 index 0000000..bf6e25b --- /dev/null +++ b/service-oa/src/test/java/com/atguigu/auth/activti/ProcessTest.java @@ -0,0 +1,195 @@ +package com.atguigu.auth.activti; + +import org.activiti.engine.HistoryService; +import org.activiti.engine.RepositoryService; +import org.activiti.engine.RuntimeService; +import org.activiti.engine.TaskService; +import org.activiti.engine.history.HistoricTaskInstance; +import org.activiti.engine.repository.Deployment; +import org.activiti.engine.repository.ProcessDefinition; +import org.activiti.engine.runtime.ProcessInstance; +import org.activiti.engine.task.Task; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.junit4.SpringRunner; + +import java.util.List; + +/** + * ClassName: ProcessTest + * Package: com.atguigu.auth.activti + * + * @author yovinchen + * @Create 2023/6/11 20:03 + */ + +@RunWith(SpringRunner.class) +@SpringBootTest +public class ProcessTest { + + @Autowired + private RepositoryService repositoryService; + + + @Autowired + private RuntimeService runtimeService; + + + @Autowired + private TaskService taskService; + + + @Autowired + private HistoryService historyService; + + /** + * 单个流程挂起 + */ + @Test + public void SingleSuspendProcessInstance() { + String processInstanceId = "8bdff984-ab53-11ed-9b17-f8e43b734677"; + ProcessInstance processInstance = runtimeService.createProcessInstanceQuery().processInstanceId(processInstanceId).singleResult(); + //获取到当前流程定义是否为暂停状态 suspended方法为true代表为暂停 false就是运行的 + boolean suspended = processInstance.isSuspended(); + if (suspended) { + runtimeService.activateProcessInstanceById(processInstanceId); + System.out.println("流程实例:" + processInstanceId + "激活"); + } else { + runtimeService.suspendProcessInstanceById(processInstanceId); + System.out.println("流程实例:" + processInstanceId + "挂起"); + } + } + + /** + * 全部流程实例挂起 + */ + @Test + public void suspendProcessInstance() { + ProcessDefinition qingjia = repositoryService.createProcessDefinitionQuery().processDefinitionKey("qingjia").singleResult(); + // 获取到当前流程定义是否为暂停状态 suspended方法为true是暂停的,suspended方法为false是运行的 + boolean suspended = qingjia.isSuspended(); + if (suspended) { + // 暂定,那就可以激活 + // 参数1:流程定义的id 参数2:是否激活 参数3:时间点 + repositoryService.activateProcessDefinitionById(qingjia.getId(), true, null); + System.out.println("流程定义:" + qingjia.getId() + "激活"); + } else { + repositoryService.suspendProcessDefinitionById(qingjia.getId(), true, null); + System.out.println("流程定义:" + qingjia.getId() + "挂起"); + } + } + + /** + * 启动流程实例,添加businessKey + */ + @Test + public void startUpProcessAddBusinessKey() { + String businessKey = "1"; + // 启动流程实例,指定业务标识businessKey,也就是请假申请单id + ProcessInstance processInstance = runtimeService. + startProcessInstanceByKey("qingjia", businessKey); + // 输出 + System.out.println("业务id:" + processInstance.getBusinessKey()); + } + + /** + * 删除流程定义 + */ + public void deleteDeployment() { + //部署id + String deploymentId = "5b997a98-0868-11ee-9ba7-6294623ad4e1"; + //删除流程定义,如果该流程定义已有流程实例启动则删除时出错 + repositoryService.deleteDeployment(deploymentId); + //设置true 级联删除流程定义,即使该流程有流程实例启动也可以删除,设置为false非级别删除方式 + repositoryService.deleteDeployment(deploymentId, true); + } + + /** + * 查询流程定义 + */ + @Test + public void findProcessDefinitionList() { + List definitionList = repositoryService.createProcessDefinitionQuery() + .orderByProcessDefinitionVersion() + .desc() + .list(); + //输出流程定义信息 + for (ProcessDefinition processDefinition : definitionList) { + System.out.println("流程定义 id=" + processDefinition.getId()); + System.out.println("流程定义 name=" + processDefinition.getName()); + System.out.println("流程定义 key=" + processDefinition.getKey()); + System.out.println("流程定义 Version=" + processDefinition.getVersion()); + System.out.println("流程部署ID =" + processDefinition.getDeploymentId()); + } + } + + /** + * 查询已处理历史任务 + */ + @Test + public void findProcessedTaskList() { + //张三已处理过的历史任务 + List list = historyService.createHistoricTaskInstanceQuery().taskAssignee("zhangsan").finished().list(); + for (HistoricTaskInstance historicTaskInstance : list) { + System.out.println("流程实例id:" + historicTaskInstance.getProcessInstanceId()); + System.out.println("任务id:" + historicTaskInstance.getId()); + System.out.println("任务负责人:" + historicTaskInstance.getAssignee()); + System.out.println("任务名称:" + historicTaskInstance.getName()); + } + } + + /** + * 完成任务 + */ + @Test + public void completTask() { + Task task = taskService.createTaskQuery().taskAssignee("zhangsan") //要查询的负责人 + .singleResult();//返回一条 + + //完成任务,参数:任务id + taskService.complete(task.getId()); + } + + /** + * 查询当前个人待执行的任务 zhangsan + */ + @Test + public void findPendingTaskList() { + //任务负责人 + String assignee = "zhangsan"; + List list = taskService.createTaskQuery().taskAssignee(assignee)//只查询该任务负责人的任务 + .list(); + for (Task task : list) { + System.out.println("流程实例id:" + task.getProcessInstanceId()); + System.out.println("任务id:" + task.getId()); + System.out.println("任务负责人:" + task.getAssignee()); + System.out.println("任务名称:" + task.getName()); + } + } + + /** + * 启动流程实例 + */ + @Test + public void startUpProcess() { + //创建流程实例,我们需要知道流程定义的key + ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("qingjia"); + //输出实例的相关信息 + System.out.println("流程定义id:" + processInstance.getProcessDefinitionId()); + System.out.println("流程实例id:" + processInstance.getId()); + System.out.println("当前活动Id:" + processInstance.getActivityId()); + } + + /** + * 单个文件部署 + */ + @Test + public void deployProcess() { + // 流程部署 + Deployment deploy = repositoryService.createDeployment().addClasspathResource("process/qingjia.bpmn20.xml").addClasspathResource("process/qingjia.png").name("请假申请流程").deploy(); + System.out.println(deploy.getId()); + System.out.println(deploy.getName()); + } +}