Skip to content

工作流服务

**本文引用的文件** - [pom.xml](file://lemes-cloud/lemes-business-devicemate/lemes-service-dm-workflow/pom.xml) - [pom.xml](file://lemes-cloud/lemes-business-devicemate/lemes-service-dm-workflow/lemes-service-dm-workflow-common/pom.xml) - [pom.xml](file://lemes-cloud/lemes-business-devicemate/lemes-service-dm-workflow/lemes-service-dm-workflow-server/pom.xml) - [FlowClient.java](file://lemes-cloud/lemes-business-devicemate/lemes-service-dm-workflow/lemes-service-dm-workflow-common/src/main/java/com/lenovo/lemes/service/dm/workflow/client/feign/FlowClient.java) - [FlowApiController.java](file://lemes-cloud/lemes-business-devicemate/lemes-service-dm-workflow/lemes-service-dm-workflow-server/src/main/java/com/lenovo/lemes/service/dm/workflow/controller/FlowApiController.java) - [FlowLogService.java](file://lemes-cloud/lemes-business-devicemate/lemes-service-dm-workflow/lemes-service-dm-workflow-server/src/main/java/com/lenovo/lemes/service/dm/workflow/service/FlowLogService.java) - [bootstrap.yml](file://lemes-cloud/lemes-business-devicemate/lemes-service-dm-workflow/lemes-service-dm-workflow-server/src/main/resources/bootstrap.yml) - [application.yml](file://lemes-cloud/lemes-business-devicemate/lemes-service-dm-workflow/lemes-service-dm-workflow-server/src/main/resources/application.yml) - [workflow.sql](file://docs/ddl/workflow.sql) - [WorkFlowBusinessEnum.java](file://lemes-cloud/lemes-business-devicemate/lemes-service-dm-workflow/lemes-service-dm-workflow-common/src/main/java/com/lenovo/lemes/service/dm/workflow/enums/WorkFlowBusinessEnum.java) - [FlowPendingTaskDTO.java](file://lemes-cloud/lemes-business-devicemate/lemes-service-dm-workflow/lemes-service-dm-workflow-common/src/main/java/com/lenovo/lemes/service/dm/workflow/entity/dto/FlowPendingTaskDTO.java) - [TempApproveDTO.java](file://lemes-cloud/lemes-business-devicemate/lemes-service-dm-workflow/lemes-service-dm-workflow-common/src/main/java/com/lenovo/lemes/service/dm/workflow/entity/dto/TempApproveDTO.java) - [FlowUserMapper.java](file://lemes-job-devicemate/lemes-job-devicemate-executor/src/main/java/com/lenovo/lemes/job/devicemate/executor/mapper/workflow/FlowUserMapper.java) - [README.md](file://lemes-cloud/lemes-business-devicemate/README.md)

目录

  1. 引言
  2. 项目结构
  3. 核心组件
  4. 架构总览
  5. 详细组件分析
  6. 依赖分析
  7. 性能考虑
  8. 故障排查指南
  9. 结论
  10. 附录

引言

本文件面向“工作流服务”,系统化阐述基于 Flowable 流程引擎在设备管理域内的集成方案与实现细节。内容覆盖流程定义、流程部署、流程实例管理、任务分配机制、流程监控与管理、API 设计规范、数据模型以及典型应用场景(设备维护工单、维修申请、审批流程等),并提供最佳实践与故障处理建议。

项目结构

工作流服务采用多模块组织,核心由“公共模块”和“服务端模块”组成,分别承载 API 定义、DTO/VO、枚举、持久层与业务服务,以及对外暴露的 REST 控制器与运行时配置。

图表来源

章节来源

核心组件

  • Flowable 引擎与 REST API:通过 Spring Boot Starter 集成 Flowable 进程引擎与内置 REST 接口,便于前端或外部系统直接调用。
  • 控制器层:提供流程启动、审批、撤销、进度图查询等接口。
  • 公共模块:封装 Feign 客户端、DTO/VO、枚举、工具类与异常定义,供上游服务调用。
  • 数据层:基于 MyBatis-Plus 的 Mapper 与实体 DO,配合 Flowable 内置表与业务扩展表。
  • 配置层:Nacos 注册与配置、日志与管理端点、拦截器规则等。

章节来源

架构总览

工作流服务整体采用“微服务 + 流程引擎”的架构,控制器通过 Feign 调用自身提供的 REST 接口,结合 Flowable 引擎完成流程实例的启动、执行与审批;同时通过数据库记录审计日志与节点配置,支撑流程监控与管理。

图表来源

详细组件分析

API 设计规范

  • 命名与版本:接口以 /flow 为前缀,区分 WEB 与 RPC 场景。
  • 请求体与参数:使用 VO/DTO 承载输入,响应统一 ResultData 包裹。
  • 错误处理:控制器捕获业务异常并返回失败结果,便于前端统一处理。

图表来源

章节来源

流程定义与部署

  • 流程定义:通过 BPMN 文件进行流程建模,部署到 Flowable 引擎。
  • 部署位置:服务端 resources/processes 下存放示例流程文件,实际生产可从 Nacos 或外部资源加载。
  • 引擎集成:使用 Flowable Spring Boot Starter 提供 REST API,便于前端可视化与调试。

章节来源

流程实例管理

  • 启动流程:接收 StartProcessVo,调用引擎启动实例并返回实例ID与初始任务。
  • 审批流程:接收 ApproveProcessVo,执行审批动作并记录审批日志。
  • 撤销流程:按实例ID撤销流程,确保状态一致性。
  • 进度图查询:根据实例ID输出流程图,辅助前端展示。

章节来源

任务分配机制

  • 角色与用户:通过用户-角色中间表与工厂/部门维度控制审批权限。
  • 临时审批:支持在审批过程中替换审批人,满足跨部门/代理场景。
  • 待办任务:提供待办任务 DTO,封装任务ID、实例ID、节点类型等关键信息。

章节来源

流程监控与管理

  • 审批日志:记录每次审批的节点、审批人、结果、时间等,支持分页与统计。
  • 流程日志:记录引擎关键操作与节点流转,便于审计与问题定位。
  • 节点配置:维护流程图 KEY、节点标题、节点类型与前置节点,支撑动态配置。

章节来源

数据模型

工作流相关的核心表包括:

  • flow_audit_log:审批日志,记录流程实例、业务单据、审批人、时间与状态。
  • flow_log:流程日志,记录引擎方法名、任务名、节点类型、审批标志与结果。
  • flow_node_config:流程节点配置,维护节点标题、索引、活动ID与前置节点。
  • flow_business_config:业务流程配置,映射业务类型与流程图 KEY。
  • flow_user / flow_user_role:用户与角色,支撑审批权限与层级。
  • flow_break_config:流程回退配置,支持节点回退策略。
  • Flowable 内置事件/资源/部署表:由 Flowable 自动维护,用于流程定义与实例管理。

图表来源

章节来源

实际应用场景

  • 设备维护工单流程:基于业务类型枚举中的保养/点检/巡检/计量/环境点检计划,驱动相应流程图,实现计划下发、执行与审批闭环。
  • 维修申请流程:通过 StartProcessVo 启动流程,审批完成后进入维修执行阶段。
  • 审批流程:支持多级审批、节点回退与代理审批,满足工厂/部门层级治理。

章节来源

最佳实践

  • 流程设计原则
    • 明确业务边界与节点职责,避免长流程与复杂分支。
    • 使用节点配置表统一管理节点标题、类型与前置关系,便于变更。
  • 性能优化策略
    • 合理设置审批人范围与候选组,减少查询开销。
    • 对高频查询使用缓存与分页,避免一次性拉取大量历史数据。
    • 利用 Flowable 内置 REST API 与异步日志写入,降低阻塞。
  • 故障处理方案
    • 审批日志与流程日志双轨记录,便于回溯。
    • 对外接口统一异常包装,前端友好提示。
    • 定期清理过期流程实例与历史日志,控制表规模。

依赖分析

工作流服务对 Flowable 的依赖集中在服务端模块,公共模块引入 Flowable Engine 以复用其 API 与实体;服务端模块引入 Flowable Spring Boot Starter 提供 REST 接口与自动配置。

图表来源

章节来源

性能考虑

  • 引擎与数据库
    • 使用 Flowable 内置表与业务表分离,避免热数据污染。
    • 对流程日志与审计日志建立合适索引,提升查询效率。
  • 接口与缓存
    • 对常用节点配置与用户角色进行本地缓存,减少数据库访问。
    • 分页查询审批记录与历史任务,避免大结果集。
  • 并发与异步
    • 审批日志写入采用异步池配置,降低审批链路延迟。
    • 对批量审批与回退操作进行限流与幂等处理。

故障排查指南

  • 审批失败
    • 检查审批日志与流程日志,确认节点类型、审批人与结果。
    • 核对业务配置表与节点配置表,确保流程图 KEY 与节点索引一致。
  • 流程无法启动
    • 校验流程定义是否正确部署,检查流程 KEY 与业务类型映射。
    • 确认用户角色与工厂/部门维度是否具备发起权限。
  • 进度图无法显示
    • 确认引擎 REST 接口可用性与网络连通性。
    • 检查流程实例 ID 是否正确,是否存在已结束实例。

章节来源

结论

工作流服务以 Flowable 为核心,结合微服务架构与统一的 API 设计,实现了设备管理域内从计划到执行再到审批的完整闭环。通过完善的日志与配置体系、清晰的接口规范与数据模型,能够支撑多场景、多层级的流程编排与治理需求。

附录

  • 配置要点
    • 服务端口与 Nacos 注册信息在 bootstrap.yml 中配置。
    • MyBatis-Plus 拦截器规则在 application.yml 中定义,用于控制 SQL 访问范围。
  • 用户与角色
    • 工作项作业模块中提供 FlowUserMapper 示例,演示如何在多数据源/命名空间下读取工作流用户表。

章节来源