Initial commit

This commit is contained in:
yovinchen 2023-06-12 09:53:05 +08:00
parent a04b3e49a0
commit 8824072ee6
5 changed files with 267 additions and 3 deletions

View File

@ -44,6 +44,19 @@
<artifactId>velocity-engine-core</artifactId>
<version>2.0</version>
</dependency>
<!--引入activiti的springboot启动器 -->
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-spring-boot-starter</artifactId>
<version>7.1.0.M6</version>
<exclusions>
<exclusion>
<artifactId>mybatis</artifactId>
<groupId>org.mybatis</groupId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
<build>
@ -70,6 +83,7 @@
<include>**/*.yml</include>
<include>**/*.properties</include>
<include>**/*.xml</include>
<include>**/*.png</include>
</includes>
<filtering>false</filtering>
</resource>

View File

@ -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

View File

@ -0,0 +1,40 @@
<?xml version="1.0" encoding="UTF-8"?>
<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:activiti="http://activiti.org/bpmn" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC" xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI" typeLanguage="http://www.w3.org/2001/XMLSchema" expressionLanguage="http://www.w3.org/1999/XPath" targetNamespace="http://www.activiti.org/processdef">
<process id="qingjia" isExecutable="true">
<startEvent id="sid-AE120E1B-25EC-43C0-B703-8EE13CB13835"></startEvent>
<userTask id="sid-30AE99C3-6055-4472-B3A3-9C4B0BB3975A" name="张三审批" activiti:assignee="zhangsan"></userTask>
<userTask id="sid-A8361321-1F0D-429F-8E5D-5F0D3FE7B764" name="李四审批" activiti:assignee="lisi"></userTask>
<endEvent id="sid-18403A14-DABE-48F8-B43F-16BCAFC66CE7"></endEvent>
<sequenceFlow id="sid-E88CBC13-6950-4428-8A88-721850823A32" sourceRef="sid-AE120E1B-25EC-43C0-B703-8EE13CB13835" targetRef="sid-30AE99C3-6055-4472-B3A3-9C4B0BB3975A"></sequenceFlow>
<sequenceFlow id="sid-8D62AC0F-C742-4738-A61A-5FC81916ACC1" sourceRef="sid-30AE99C3-6055-4472-B3A3-9C4B0BB3975A" targetRef="sid-A8361321-1F0D-429F-8E5D-5F0D3FE7B764"></sequenceFlow>
<sequenceFlow id="sid-4546D057-D5C4-467E-8BCC-AED3DF110B13" sourceRef="sid-A8361321-1F0D-429F-8E5D-5F0D3FE7B764" targetRef="sid-18403A14-DABE-48F8-B43F-16BCAFC66CE7"></sequenceFlow>
</process>
<bpmndi:BPMNDiagram id="BPMNDiagram_qingjia">
<bpmndi:BPMNPlane bpmnElement="qingjia" id="BPMNPlane_qingjia">
<bpmndi:BPMNShape bpmnElement="sid-AE120E1B-25EC-43C0-B703-8EE13CB13835" id="BPMNShape_sid-AE120E1B-25EC-43C0-B703-8EE13CB13835">
<omgdc:Bounds height="30.0" width="30.0" x="214.43284560541542" y="142.0231410855287"></omgdc:Bounds>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="sid-30AE99C3-6055-4472-B3A3-9C4B0BB3975A" id="BPMNShape_sid-30AE99C3-6055-4472-B3A3-9C4B0BB3975A">
<omgdc:Bounds height="80.0" width="100.0" x="330.0" y="120.0"></omgdc:Bounds>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="sid-A8361321-1F0D-429F-8E5D-5F0D3FE7B764" id="BPMNShape_sid-A8361321-1F0D-429F-8E5D-5F0D3FE7B764">
<omgdc:Bounds height="80.0" width="100.0" x="525.0" y="117.02314108552869"></omgdc:Bounds>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="sid-18403A14-DABE-48F8-B43F-16BCAFC66CE7" id="BPMNShape_sid-18403A14-DABE-48F8-B43F-16BCAFC66CE7">
<omgdc:Bounds height="28.0" width="28.0" x="735.0" y="143.0231410855287"></omgdc:Bounds>
</bpmndi:BPMNShape>
<bpmndi:BPMNEdge bpmnElement="sid-8D62AC0F-C742-4738-A61A-5FC81916ACC1" id="BPMNEdge_sid-8D62AC0F-C742-4738-A61A-5FC81916ACC1">
<omgdi:waypoint x="430.0" y="159.23670284244326"></omgdi:waypoint>
<omgdi:waypoint x="525.0" y="157.78643824308546"></omgdi:waypoint>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="sid-E88CBC13-6950-4428-8A88-721850823A32" id="BPMNEdge_sid-E88CBC13-6950-4428-8A88-721850823A32">
<omgdi:waypoint x="244.42991477976543" y="157.31964771236983"></omgdi:waypoint>
<omgdi:waypoint x="330.0" y="159.01145142629514"></omgdi:waypoint>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="sid-4546D057-D5C4-467E-8BCC-AED3DF110B13" id="BPMNEdge_sid-4546D057-D5C4-467E-8BCC-AED3DF110B13">
<omgdi:waypoint x="625.0" y="157.0231410855287"></omgdi:waypoint>
<omgdi:waypoint x="735.0" y="157.0231410855287"></omgdi:waypoint>
</bpmndi:BPMNEdge>
</bpmndi:BPMNPlane>
</bpmndi:BPMNDiagram>
</definitions>

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.5 KiB

View File

@ -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<ProcessDefinition> 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<HistoricTaskInstance> 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<Task> 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());
}
}