Appearance
工作流服务
**本文引用的文件** - [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)目录
引言
本文件面向“工作流服务”,系统化阐述基于 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 示例,演示如何在多数据源/命名空间下读取工作流用户表。
章节来源