Tabla de contenido
1.2.1 Introducción de dependencias
1.2.4, introducción a la tabla de la base de datos
1.3, interfaz de servicio de servicio común de Activiti
1.4 Herramienta de diseño de procesos
1.4.1 Descargar activiti-explorer
1.4.2 Descomprimir y obtener el paquete de implementación
1.4.3, departamento activiti-explorer.war
1.4.4 Visita activiti-explorer
2. Operación del proceso de actividad
2.1.5 Establecer propiedades de nodo
2.1.6, guarde el modelo de definición de proceso
2.1.7 Descargar archivo de definición de proceso
2.1.8 Descargar imagen de definición de proceso
2.1.9 Poner archivos de recursos en el proyecto
2.2 Despliegue de definición de procesos
2.2.1 Método de implementación de archivo único
2.2.2 Método de implementación del paquete comprimido
2.2.3 Tabla de la base de datos de operaciones
2.3 Iniciar la instancia del proceso
2.5, procesando la tarea actual
2.6 Consulta de tareas procesadas
2.7 Otras interfaces (entender)
1. Uso de Actividades
1.1, soporte de base de datos
Para comenzar, consulte: Primeros pasos con Activiti_Relievedz's Blog-CSDN Blog
La operación de Activiti debe tener el soporte de la base de datos, las bases de datos soportadas son: mysql, oracle, postgres, mssql, db2, h2
1.2, Entorno de actividad
Explicamos directamente la introducción a Activiti en el proyecto actual: guigu-oa-parent
1.2.1 Introducción de dependencias
<!--引入activiti的springboot启动器 --> <dependency> <groupId>org.activiti</groupId> <artifactId>activiti-spring-boot-starter</artifactId> <version>7.1.0.M6</ versión> <exclusiones> <exclusión > <artifactId>mybatis</artifactId> <groupId>org.mybatis</groupId> </exclusion> </exclusions> </dependency>
Descripción: después de la integración de Activiti7 y SpringBoot, el marco de seguridad de SpringSecurity se integra de manera predeterminada. Actualmente, nuestro proyecto ha integrado SpringSecurity. Al configurar el aprobador en casos posteriores, debe ser un usuario del sistema. El marco de Activiti verificará si el usuario existe, de lo contrario ocurrirá una excepción Seguimiento Puede probarlo en el caso.
1.2.2 Añadir configuración
Se ha agregado el proyecto de fuente de datos, solo necesita la siguiente configuración
spring: activiti: # false: por defecto, la tabla de la base de datos permanece sin cambios, pero si la versión es incorrecta o falta la tabla, se lanzará una excepción (uso de producción) # true: la tabla no existe, se creará automáticamente (uso de desarrollo) # create_drop: creado al inicio, cerrado Eliminar la tabla a la vez (uso de prueba) # drop_create: eliminar la tabla al inicio y crear la tabla (no es necesario apagar manualmente el motor) actualización del esquema de la base de datos : verdadero #Supervise si existe la tabla de historial, actividades7 no abre la tabla de historial de forma predeterminada db-history-used: verdadero #none: No guarde ningún dato histórico, que es lo más eficiente en el proceso #actividad: solo guarde el instancia del proceso y comportamiento del proceso #auditoría: guarde todas las tareas del proceso y sus atributos además de la actividad, la auditoría es el valor predeterminado del historial # completo: además de la auditoría, también guarda todos los demás datos detallados relacionados con el proceso, incluidos algunos procesos parámetros nivel de historial: completo #Compruebe el archivo de proceso, verifique el archivo de proceso de la carpeta de proceso en recursos de forma predeterminada check-process-definitions: true
1.2.3, iniciar el proyecto
Inicie el proyecto para generar la tabla de la base de datos del proyecto.
1.2.4, introducción a la tabla de la base de datos
El soporte de operación de Activiti debe tener el soporte de estas 25 tablas, principalmente para registrar los sujetos de usuario que participan en el proceso, la información del grupo de usuarios, la definición del proceso, la información de ejecución del proceso y la información histórica del proceso durante la operación del proceso comercial, etc.
1. Reglas y funciones de nomenclatura de tablas
Al observar las tablas creadas, encontramos que todas las tablas de Activiti comienzan con act_, seguido de un identificador de dos letras que indica el propósito de la tabla, que también corresponde a la API del servicio proporcionado por Activiti:
-
ACT_RE: RE significa repositorio, la tabla de prefijos contiene la definición del proceso y los recursos estáticos del proceso (imágenes, reglas, etc.)
-
ACT_RU: RU representa el tiempo de ejecución. Cuando estas tablas se están ejecutando, contendrán datos en curso, como instancias de proceso, tareas, variables y tareas asíncronas. Activiti solo guarda estos datos durante la ejecución de la instancia del proceso y elimina estos registros al final del proceso. De esta manera, la mesa siempre se puede mantener pequeña y rápida.
-
ACT_HI: HI significa historial, estas tablas contienen algunos datos históricos, como instancias históricas de procesos, variables, tareas, etc.
-
ACT_GE: GE significa datos generales, generales
2. Introducción a la tabla de datos de Activiti
clasificación de tablas | Nombre de la tabla | explicar |
---|---|---|
informacion General | ||
[ACT_GE_BYTEARRAY] | Definiciones genéricas de procesos y recursos de procesos | |
[ACT_GE_PROPIEDAD] | propiedades relacionadas con el sistema | |
Historial de procesos | ||
[ACT_HI_ACTINST] | Ejemplos de procesos históricos | |
[ACT_HI_ATTACHMENT] | Archivos adjuntos de procesos históricos | |
[ACT_HI_COMMENT] | información histórica descriptiva | |
[ACT_HI_DETALLE] | Información detallada sobre las ejecuciones de procesos históricos | |
[ACT_HI_IDENTITYLINK] | Relación de usuario durante la ejecución del proceso histórico | |
[ACT_HI_PROCINST] | Ejemplos de procesos históricos | |
[ACT_HI_TASKINST] | Ejemplos de tareas históricas | |
[ACT_HI_VARINST] | Información variable en el proceso histórico en ejecución | |
Tabla de definición de procesos | ||
[ACT_RE_Implementación] | Información de la unidad de implementación | |
[ACT_RE_MODELO] | información del modelo | |
[ACT_RE_PROCDEF] | Definición de proceso implementado | |
ejecutar tabla de instancias | ||
[ACT_RU_EVENT_SUBSCR] | eventos de tiempo de ejecución | |
[ACT_RU_EJECUCIÓN] | Instancia de ejecución de proceso en tiempo de ejecución | |
[ACT_RU_IDENTITYLINK] | Información de relación de usuario en tiempo de ejecución, almacenamiento de información sobre participantes y nodos de tareas | |
[ACT_RU_JOB] | trabajo en tiempo de ejecución | |
[ACT_RU_TAREA] | tarea en tiempo de ejecución | |
[ACT_RU_VARIABLE] | tabla de variables de tiempo de ejecución |
1.3, interfaz de servicio de servicio común de Activiti
Introduzca brevemente las clases de implementación de cada Servicio:
-
Servicio de repositorio
Clase de administración de recursos de Activiti, que es responsable de implementar definiciones de procesos y administrar recursos de procesos. Al usar Activiti, la implementación del proceso debe completarse primero y el diagrama de flujo comercial diseñado por la herramienta de modelado se implementará a través de RepositoryService.
-
RuntimeService
La clase de gestión de operaciones de procesos de Activiti se utiliza para iniciar una nueva instancia de proceso y obtener información relevante sobre la ejecución del proceso. La definición de proceso se utiliza para determinar la estructura y el comportamiento de cada nodo en un proceso, y la instancia de proceso es una ejecución de la definición de proceso correspondiente, que puede entenderse como la relación entre clases y objetos en Java.
-
Servicio de tareas
La clase de administración de tareas de Activiti se usa para manejar varias tareas en las operaciones comerciales, como consultar tareas asignadas a usuarios o grupos, crear nuevas tareas, asignar tareas, determinar y completar una tarea.
-
HistorialServicio
La clase de gestión de historial de Activiti puede consultar información histórica. Al ejecutar un proceso, el motor guardará una gran cantidad de datos, como la hora de inicio de la instancia del proceso, los participantes de la tarea, el tiempo para completar la tarea, la ruta de ejecución de cada instancia del proceso, etc. Este servicio obtiene principalmente estos datos a través de la función de consulta.
-
Servicio de Administracion
La clase de gestión del motor de Activiti proporciona funciones de gestión y mantenimiento para el motor de procesos de Activiti. Estas funciones no se utilizan en aplicaciones basadas en flujos de trabajo y se utilizan principalmente para el mantenimiento diario del sistema Activiti.
1.4 Herramienta de diseño de procesos
La versión de IDEA es inferior o igual a 2019, y se puede usar el complemento Activiti actiBPM. IDEA más grande que esta versión puede usar el complemento del visualizador Activiti BPMN para dibujar el diseño del proceso.
Hoy nuestra protagonista es: Activiti Modeler
Activiti Modeler es un complemento de front-end para el diseño de procesos en línea proporcionado oficialmente por Activiti. Los desarrolladores pueden diseñar fácilmente procesos en línea, guardar modelos de procesos, implementar definiciones de procesos, etc. Nuestros proyectos posteriores también integran Activiti Modeler para dibujar definiciones de procesos.
1.4.1 Descargar activiti-explorer
Descarga del sitio web oficial: Empezar | Activiti
1.4.2 Descomprimir y obtener el paquete de implementación
Descomprima activiti-5.22.0.zip y obtenga activiti-explorer.war en el directorio activiti-5.22.0\wars
1.4.3, departamento activiti-explorer.war
Coloque activiti-explorer.war en el directorio de implementación de tomcat e inicie tomcat
Ruta de inicio: haga doble clic en startup.bat
1.4.4 Visita activiti-explorer
http://localhost:8080/activiti-explorador
Cuenta de inicio de sesión predeterminada: kermit kermit
Hay muchas funciones arriba, solo debemos prestar atención al diseño del proceso, como se muestra en la figura a continuación:
Haga clic en la imagen de arriba: Proceso --> Nuevo modelo --> Ingrese el nombre del modelo (salir) --> Crear
2. Operación del proceso de actividad
2.1 Definición del proceso
Definimos un proceso de salida
2.1.1 Crear un nuevo modelo
2.1.2 Nodo de inicio
2.1.3 Nodos de tareas
2.1.4 Nodo final
2.1.5 Establecer propiedades de nodo
Especifique el nombre de la etiqueta: Aprobación de Zhang San, líder de la tarea del nodo: zhangsan
Especifique el nombre de la etiqueta: Aprobación de Li Si, líder de la tarea del nodo: lisi
2.1.6, guarde el modelo de definición de proceso
2.1.7 Descargar archivo de definición de proceso
El archivo de descarga es: qingjia.bpmn20.xml
2.1.8 Descargar imagen de definición de proceso
Haga clic derecho en la imagen de arriba, guarde la imagen como: qingjia.png
2.1.9 Poner archivos de recursos en el proyecto
Cree una nueva carpeta de recursos de proceso en los recursos del módulo service-oa
Coloque qingjia.bpmn20.xml y qingjia.png en el directorio de procesos
2.2 Despliegue de definición de procesos
La implementación del proceso definido anteriormente en el diseñador en la base de datos de actividades es la implementación de la definición del proceso. Agregue e implemente los archivos bpmn y png de la definición del proceso en activiti uno por uno llamando a la API de activiti, o empaquete los dos archivos en un paquete zip para su implementación.
2.2.1 Método de implementación de archivo único
paquete com.atguigu.auth.activiti; importar org.activiti.engine.RepositoryService; importar org.activiti.engine.repository.Deployment; importar org.junit.jupiter.api.Test; importar org.springframework.beans.factory.annotation .Autowired; import org.springframework.boot.test.context.SpringBootTest; /** * @program: guigu-oa-perent * @description: definición de proceso * @author: Mr.Zhang * @create: 2023-04-20 09:50 **/ @SpringBootTest public class ProcessTest { //Inject RepositoryService @Autowired private RepositoryService repositoryService; /** * Método de implementación de archivo único */ @Test public void deploymentProcess() { //Procesar implementación Implementación deployment = repositoryService.createDeployment() .addClasspathResource("process/qingjia.bpmn20.xml") .addClasspathResource("process/qingjia.png") .name("Dejar proceso de aplicación" ) .deploy(); System.out.println(implementar.getId()); System.out.println(implementar.getName()); } }
Si se informa un error y no se puede encontrar la imagen, agréguela al pom:
<incluir>**/*.png</incluir>
éxito:
2.2.2 Método de implementación del paquete comprimido
/** * Método de implementación del paquete Zip */ @Test public void deploymentProcessByZip() { // Definir flujo de entrada zip InputStream inputStream = this .getClass() .getClassLoader() .getResourceAsStream( "process/qingjia.zip"); ZipInputStream zipInputStream = new ZipInputStream(inputStream); // Proceso de implementación Implementación de implementación = repositoryService.createDeployment() .addZipInputStream(zipInputStream) .name("Dejar el proceso de la aplicación") .deploy(); System.out.println("Id. de implementación del proceso:" + despliegue.getId()); System.out.println("Nombre de implementación del proceso: " + deployment.getName()); }
2.2.3 Tabla de la base de datos de operaciones
Las tres tablas para las actividades operativas después de implementar la definición del proceso son las siguientes:
El proceso act_re_deployment define la tabla de implementación, agregando un registro para cada implementación
tabla de definición de proceso act_re_procdef, la implementación de cada nueva definición de proceso agregará un registro a esta tabla
tabla de recursos del proceso act_ge_bytearray
2.3 Iniciar la instancia del proceso
Definición de proceso: coloque el archivo bpmn en las tres tablas de actividades, como una instancia de proceso de clase en java: como un objeto de instancia en java (una definición de proceso puede corresponder a varias instancias de proceso), Zhang San puede iniciar un proceso de salida Ejemplo, Li Si también pueden iniciar una instancia de proceso de salida, no se afectan entre sí
@Autowired private RuntimeService runtimeService; @Test public void startUpProcess() { //Para crear una instancia de proceso, necesitamos conocer la clave de la definición del proceso ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("qingjia"); //Enviar la información relevante de la instancia System.out.println("Id. de definición de proceso: " + processInstance.getProcessDefinitionId()); System.out.println("Id. de instancia de proceso: " + processInstance.getId()); System.out.println(" ID de actividad actual: " + processInstance .getActivityId()); }
Hoja de datos operativos
act_hi_actinst historial de ejecución de la instancia del proceso
Act_hi_identitylink procesa la información del historial del usuario participante
act_hi_procinst información histórica de instancia de proceso
act_hi_taskinst información del historial de tareas del proceso
act_ru_execution información de ejecución del proceso
Información del usuario participante del proceso act_ru_identitylink
información de la tarea act_ru_task
2.4 Tarea de consulta
Cada nodo se configura con Asignatario, luego de iniciado el proceso, el responsable de la tarea puede consultar las tareas que necesita procesar actualmente, y las tareas que se consultan son todas tareas pendientes del usuario.
@Autowired private TaskService taskService; / ** * Consultar las tareas que debe ejecutar la persona actual */ @Test public void findPendingTaskList() { //Líder de tareas String asignado = "zhangsan"; List<Task> list = taskService. createTaskQuery( ) .taskAssignee(assignee)//Solo consulta las tareas de la persona a cargo de la tarea.list(); for (Tarea tarea : lista) { System.out.println("Id de instancia de proceso: " + tarea. getProcessInstanceId()); System .out.println("ID de la tarea: " + task.getId()); System.out.println("Propietario de la tarea: " + task.getAssignee()); System.out.println(" Nombre de la tarea: " + tarea. getName()); } }
ilustrar:
ID de instancia de proceso: solo hay un proceso, que identifica el proceso
Identificación de la tarea: cada vez que el proceso llega a un determinado nodo, se le asignará una identificación de la tarea a este nodo
La salida es la siguiente:
Id. de instancia de proceso: d969f534-825e-11ed-95b4-7c57581a7819 Id. de tarea: d96c3f28-825e-11ed-95b4-7c57581a7819 Líder de la tarea: zhangsan Nombre de la tarea: aprobación de Zhang San
2.5, procesando la tarea actual
El líder de la tarea consulta las tareas pendientes, selecciona las tareas para procesar y completa las tareas.
/** * Completar la tarea */ @Test public void completTask(){ Task task = taskService.createTaskQuery() .taskAssignee("zhangsan") //La persona encargada de ser consultada.singleResult ();//Devolver un piece // Complete la tarea, parámetro: id de tarea taskService.complete(task.getId()); }
Una vez completada la tarea, la tarea pasa automáticamente al siguiente nodo
2.6 Consulta de tareas procesadas
obtenerNombre()); } }
2.7 Otras interfaces (entender)
/** * Consulta de definición de proceso */ @Test public void findProcessDefinitionList(){ List<ProcessDefinition> definitionList = repositoryService.createProcessDefinitionQuery() .orderByProcessDefinitionVersion() .desc() .list(); //Información de definición de proceso de salida para (ProcessDefinition processDefinition : definitionList) { System.out.println("id de definición de proceso="+processDefinition.getId()); System.out.println("nombre de definición de proceso="+processDefinition.getName()); System.out.println ("clave de definición de proceso="+processDefinition.getKey()); System.out.println("versión de definición de proceso="+processDefinition.getVersion()); System.out.println("Process deployment ID ="+processDefinition.getDeploymentId()); } } / ** * Eliminar definición de proceso */ public void deleteDeployment() { //Id. de implementación String deploymentId = "82e3bc6b-81da- 11ed-8e03-7c57581a7819"; //Elimine una definición de proceso, si la definición de proceso ya tiene una instancia de proceso iniciada, se producirá un error al eliminar repositoryService.deleteDeployment(deploymentId); //Establezca verdadero para eliminar en cascada la definición de proceso, incluso si el proceso tiene una instancia de proceso iniciada También se puede eliminar, configurarlo como falso eliminación sin nivel //repositoryService.deleteDeployment(deploymentId, true); }