Conceptos básicos de SpringBoot Integrated Workflow Flowable (1)

prefacio

¿Qué es el flujo de trabajo? En esta era de alta concurrencia, es como un huérfano abandonado. Los amigos que no entienden pueden ir al proceso de OA para experimentarlo. Si tienes la oportunidad, puedes ir al examen físico para entender. el proceso de diseño mejor Para el motor de procesos, no he encontrado un sitio web público de experiencia de diseño de procesos (PD: lo compartiré con ustedes si lo encuentro).

Que es fluido

Flowable es un motor de procesos de negocios liviano escrito en Java. El motor de procesos de Flowable se puede utilizar para implementar definiciones de procesos BPMN 2.0 (el estándar XML de la industria para definir procesos), crear instancias de procesos de estas definiciones de procesos, realizar consultas, acceder a instancias de procesos históricas o en ejecución y datos relacionados, y más.

Flowable se puede agregar a su aplicación/servicio/arquitectura de manera muy flexible y también se puede publicar como una aplicación separada

construir proyecto

Cree un proyecto Springboot y agregue dependencias fluidas

<dependency>
    <groupId>org.flowable</groupId>
    <artifactId>flowable-spring-boot-starter</artifactId>
    <version>6.7.2</version>
</dependency>
复制代码
Inicie el proyecto front-end

Descargue el código fuente del front-end flowable-vue

# 克隆项目
git clone https://gitee.com/Owater/flowable-vue.git

# 进入项目目录
cd flowable-vue

# 安装依赖
npm install --registry=https://registry.npmmirror.com

# 启动服务
npm run dev
复制代码
Inicie el código de fondo

Descargar el código de fondo

Importe sql/demo_flowable.sql en el proyecto y ejecute DemoFlowableApplication

Base de datos fluida

  • La mayoría de las tablas de la base de datos de Flowable comienzan con ACT_. La segunda parte es un identificador de dos caracteres que describe el propósito de la tabla. El nombre de la API del servicio se ajusta aproximadamente a esta regla.

  • ACT_RE_: 'RE' significa repositorio. Las tablas con este prefijo contienen información "estática", como definiciones de procesos y recursos de procesos (imágenes, reglas, etc.).

  • ACT_RU_: 'RU' significa tiempo de ejecución. Estas tablas almacenan información de tiempo de ejecución, como instancias de procesos, tareas de usuario, variables, trabajos, etc. Flowable solo guarda datos de tiempo de ejecución mientras se ejecuta la instancia de proceso y elimina los registros cuando finaliza la instancia de proceso. Esto mantiene la tabla pequeña y rápida en tiempo de ejecución.

  • ACT_HI_: 'HI' significa historial. Estas tablas almacenan datos históricos como instancias de procesos completados, variables, tareas, etc.

  • ACT_GE_: Datos generales. Usado en múltiples lugares.

Hoja de Datos Generales (2)
  • act_ge_bytearray:二进制数据表,如流程定义、流程模板、流程图的字节流文件;
  • act_ge_property:属性数据表(不常用);
历史表(8个,HistoryService接口操作的表)
  • act_hi_actinst:历史节点表,存放流程实例运转的各个节点信息(包含开始、结束等非任务节点);
  • act_hi_attachment:历史附件表,存放历史节点上传的附件信息(不常用);
  • act_hi_comment:历史意见表;
  • act_hi_detail:历史详情表,存储节点运转的一些信息(不常用);
  • act_hi_identitylink:历史流程人员表,存储流程各节点候选、办理人员信息,常用于查询某人或部门的已办任务;
  • act_hi_procinst:历史流程实例表,存储流程实例历史数据(包含正在运行的流程实例);
  • act_hi_taskinst:历史流程任务表,存储历史任务节点;
  • act_hi_varinst:流程历史变量表,存储流程历史节点的变量信息;
用户相关表(4个,IdentityService接口操作的表)
  • act_id_group:用户组信息表,对应节点选定候选组信息;
  • act_id_info:用户扩展信息表,存储用户扩展信息;
  • act_id_membership:用户与用户组关系表;
  • act_id_user:用户信息表,对应节点选定办理人或候选人信息;
流程定义、流程模板相关表(3个,RepositoryService接口操作的表)
  • act_re_deployment:部属信息表,存储流程定义、模板部署信息;
  • act_re_procdef:流程定义信息表,存储流程定义相关描述信息,但其真正内容存储在act_ge_bytearray表中,以字节形式存储;
  • act_re_model:流程模板信息表,存储流程模板相关描述信息,但其真正内容存储在act_ge_bytearray表中,以字节形式存储;
流程运行时表(6个,RuntimeService接口操作的表)
  • act_ru_task:运行时流程任务节点表,存储运行中流程的任务节点信息,重要,常用于查询人员或部门的待办任务时使用;
  • act_ru_event_subscr:监听信息表,不常用;
  • act_ru_execution:运行时流程执行实例表,记录运行中流程运行的各个分支信息(当没有子流程时,其数据与act_ru_task表数据是一一对应的);
  • act_ru_identitylink:运行时流程人员表,重要,常用于查询人员或部门的待办任务时使用;
  • act_ru_job:运行时定时任务数据表,存储流程的定时任务信息;
  • act_ru_variable:运行时流程变量数据表,存储运行中的流程各节点的变量信息;

动态制定流程

  1. 设计流程

captura de pantalla.png

实现逻辑:前端vue通过bpmn组件制定流程,生成xml,提交给后端,Flowable保存xml

// 保存流程bpmn
Deployment deploy = repositoryService.createDeployment().addString("流程名称.bpmn", "流程生成的bpmn xml")
                .tenantId("租户id").name(req.getName()).category(req.getCategory()).deploy();
ProcessDefinition definition = repositoryService.createProcessDefinitionQuery().deploymentId(deploy.getId()).singleResult();
repositoryService.setProcessDefinitionCategory(definition.getId(), "流程类别");
复制代码

存储在act_re_procdef表

imagen.png

  1. 发起流程
// 查找对应的流程
ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery().processDefinitionId("流程标识")
                .latestVersion().singleResult();
// 设置流程发起人Id到流程中
Map<String, Object> variables = new HashMap<>();
identityService.setAuthenticatedUserId("流程发起人ID");
variables.put(ProcessConstants.PROCESS_INITIATOR, "流程发起人ID");
runtimeService.startProcessInstanceById("流程标识", variables);
复制代码

发起流程效果图:

Iniciar efecto de proceso

发起流程操作如下几张表数据:

  • ACT_HI_VARINST 存储流程历史变量表

  • ACT_HI_PROCINST 存储流程实例历史数据 imagen.png

  • ACT_HI_IDENTITYLINK 存储流程流转节点人员信息 imagen.png

  • ACT_HI_TASKINST 存储历史任务节点

  • ACT_RU_EXECUTION 存储运行中流程运行的各个分支信息

  • ACT_RU_ACTINST 存储运行中各个节点的详细信息,关联任务 imagen.png

  • ACT_RU_TASK 存储运行中流程的任务节点信息,重要,常用于查询人员或部门的待办任务时使用

  • ACT_RU_IDENTITYLINK 存储运行中人员信息,常用于查询人员或部门的待办任务时使用

  • ACT_RU_VARIABLE 存储运行中的流程各节点的变量信息

  1. 审批流程
// 查找任务
Task task = taskService.createTaskQuery().taskId("任务ID").singleResult();
// 任务增加审批意见
taskService.addComment("任务ID", "流程实例Id", FlowComment.NORMAL.getType(), "审批意见");
// 设置审批人 用户ID
taskService.setAssignee("任务ID", "审批人 用户ID");
taskService.complete("任务ID", "流程变量信息");
复制代码

审批流程操作如下几张表数据:

  • insert into ACT_HI_VARINST:存储上一个节点操作数据
  • insert into ACT_HI_IDENTITYLINK:存储上一个节点人员信息
  • insert into ACT_HI_TASKINST:存储上一个节点任务数据
  • insertar en ACT_HI_ACTINST
  • insertar en ACT_RU_ACTINST
  • insertar en ACT_RU_TASK: Insertar la siguiente tarea de nodo
  • insertar en ACT_GE_BYTEARRAY
  • insertar en ACT_RU_VARIABLE
  • actualizar ACT_RU_ACTINST: es principalmente para actualizar el campo REV_, que se utiliza principalmente para implementar el bloqueo optimista. Consulte la explicación en el siguiente artículo
  • actualizar ACT_RU_EXECUTION
  • actualizar ACT_HI_ACTINST
  • actualizar ACT_HI_TASKINST
  • eliminar de ACT_RU_TASK: eliminar la tarea que se ejecuta en el último nodo

Proceso de implementación de bloqueo optimista de Activiti

  1. Proceso de cancelación

Lógica de implementación: obtenga el último nodo del proceso y cambie el estado del nodo

// 获取当前流程实例
ProcessInstance processInstance = runtimeService.createProcessInstanceQuery()
        .processInstanceId(req.getInstanceId())
        .singleResult();
List<Execution> executions = runtimeService.createExecutionQuery()
                        .parentId(processInstance.getProcessInstanceId()).list();
// 所有的执行节点
List<String> executionIds = new ArrayList<>();
executions.forEach(execution -> executionIds.add(execution.getId()));

// 获取流程图
BpmnModel bpmnModel = repositoryService.getBpmnModel(processInstance.getProcessDefinitionId());
Process process = bpmnModel.getMainProcess();
// 获取当前流程最后一个节点
String endId = endNodes.get(0).getId();
// 变更流程为已结束状态
runtimeService.createChangeActivityStateBuilder()
        .moveExecutionsToSingleActivityId(executionIds, endId).changeState();
复制代码
  1. Respaldo del proceso
// 查找任务
Task task = taskService.createTaskQuery().taskId("任务ID").singleResult();
// 回退操作
runtimeService.createChangeActivityStateBuilder()
            .processInstanceId(task.getProcessInstanceId())
            .moveActivityIdsToSingleActivityId("需退回任务列表", "回退到指定节点的key").changeState();
复制代码

referencia

Ruoyi-fluido

estructura de tabla de base de datos fluida

Supongo que te gusta

Origin juejin.im/post/7222179242955751479
Recomendado
Clasificación