Initial commit
This commit is contained in:
parent
a04b3e49a0
commit
8824072ee6
@ -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>
|
||||
|
@ -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
|
||||
|
40
service-oa/src/main/resources/process/qingjia.bpmn20.xml
Normal file
40
service-oa/src/main/resources/process/qingjia.bpmn20.xml
Normal 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>
|
BIN
service-oa/src/main/resources/process/qingjia.png
Normal file
BIN
service-oa/src/main/resources/process/qingjia.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 7.5 KiB |
@ -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());
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user