跳到主要内容

业务表单相关表

目录

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

简介

本文件聚焦于业务表单相关表,特别是 OA 请假表(bpm_oa_leave)及其在工作流中的集成方式。文档从表结构设计、业务数据存储策略、与流程状态的同步机制、审批流程中的作用,以及通用设计模式与具体场景实现等方面进行全面阐述,帮助读者快速理解并应用该模式。

项目结构

围绕 OA 请假业务表单,系统采用“控制层-服务层-数据访问层-工作流 API”的分层架构,并通过流程实例与业务数据双向关联,确保审批状态与业务状态一致。

Mermaid Diagram Code:

graph TB
subgraph "控制层"
C1["BpmOALeaveController<br/>REST 控制器"]
end
subgraph "服务层"
S1["BpmOALeaveServiceImpl<br/>业务服务实现"]
end
subgraph "数据访问层"
M1["BpmOALeaveMapper<br/>MyBatis 映射"]
DO1["BpmOALeaveDO<br/>实体对象"]
end
subgraph "工作流集成"
API1["BpmProcessInstanceApi<br/>流程实例 RPC 接口"]
DTO1["BpmProcessInstanceCreateReqDTO<br/>创建流程实例 DTO"]
end
subgraph "数据库"
DB1["bpm_oa_leave<br/>业务表"]
DB2["bpm_process_definition_info<br/>流程定义信息"]
end
C1 --> S1
S1 --> M1
S1 --> API1
API1 --> DTO1
M1 --> DO1
DO1 --> DB1
API1 --> DB2

图表来源

章节来源

核心组件

  • 控制器层:提供 REST 接口,负责接收请求、鉴权与响应封装。
  • 服务层:实现业务逻辑,包含业务数据持久化与流程实例发起。
  • 数据访问层:基于 MyBatis 的 Mapper,提供分页查询与条件查询能力。
  • 工作流集成:通过 Feign 调用流程实例 API,完成流程启动与状态同步。
  • 数据模型:业务表单实体与数据库表结构一一映射,包含流程实例关联字段。

章节来源

架构总览

OA 请假业务表单与工作流的集成遵循“业务数据先行、流程实例随后”的模式:先保存业务表单数据,再启动流程实例并将流程实例 ID 回写到业务表单,从而实现双向关联。

Mermaid Diagram Code:

sequenceDiagram
participant U as "用户"
participant C as "BpmOALeaveController"
participant S as "BpmOALeaveServiceImpl"
participant M as "BpmOALeaveMapper"
participant P as "BpmProcessInstanceApi"
U->>C : "POST /bpm/oa/leave/create"
C->>S : "createLeave(userId, createReqVO)"
S->>M : "插入业务表单数据"
S->>P : "createProcessInstance(userId, reqDTO)"
P-->>S : "返回流程实例ID"
S->>M : "更新业务表单的流程实例ID"
S-->>C : "返回业务表单ID"
C-->>U : "返回结果"

图表来源

详细组件分析

业务表单实体与表结构

  • 实体类 BpmOALeaveDO 映射 bpm_oa_leave 表,包含用户 ID、请假类型、原因、起止时间、天数、审批状态、流程实例 ID 等字段。
  • 表结构设计支持多租户、软删除与审计字段,便于扩展与维护。
  • 审批状态字段复用流程任务状态枚举,简化状态管理。

Mermaid Diagram Code:

classDiagram
class BpmOALeaveDO {
+Long id
+Long userId
+String type
+String reason
+LocalDateTime startTime
+LocalDateTime endTime
+Long day
+Integer status
+String processInstanceId
}

图表来源

章节来源

控制器与请求/响应 VO

  • 控制器提供创建、查询与分页接口,使用 VO 封装请求与响应,保证接口清晰与参数校验。
  • 创建 VO 包含起止时间、类型、原因及发起人自选审批人映射;响应 VO 包含业务表单与流程状态信息。

Mermaid Diagram Code:

classDiagram
class BpmOALeaveController {
+createLeave(createReqVO) CommonResult~Long~
+getLeave(id) CommonResult~BpmOALeaveRespVO~
+getLeavePage(pageVO) CommonResult~PageResult~BpmOALeaveRespVO~~
}
class BpmOALeaveCreateReqVO {
+startTime : LocalDateTime
+endTime : LocalDateTime
+type : Integer
+reason : String
+startUserSelectAssignees : Map
}
class BpmOALeaveRespVO {
+id : Long
+type : Integer
+reason : String
+createTime : LocalDateTime
+startTime : LocalDateTime
+endTime : LocalDateTime
+processInstanceId : String
+status : Integer
}
BpmOALeaveController --> BpmOALeaveCreateReqVO
BpmOALeaveController --> BpmOALeaveRespVO

图表来源

章节来源

服务层:业务数据存储与流程集成

  • 服务层在事务内完成业务数据插入与流程实例创建,并将流程实例 ID 写回业务表单。
  • 通过流程实例创建 DTO 设置流程定义 Key、业务 Key(即业务表单 ID)、变量(如请假天数)与发起人自选审批人映射。

Mermaid Diagram Code:

flowchart TD
Start(["进入 createLeave"]) --> Calc["计算请假天数"]
Calc --> Insert["插入业务表单数据"]
Insert --> BuildVars["构造流程变量(day)"]
BuildVars --> CreatePI["调用流程实例 API 创建流程"]
CreatePI --> UpdateBiz["更新业务表单的流程实例ID"]
UpdateBiz --> End(["返回业务表单ID"])

图表来源

章节来源

数据访问层:分页与条件查询

  • Mapper 提供按用户、状态、类型、原因、创建时间范围的分页查询,支持条件动态拼接与排序。
  • 通过 BaseMapperX 提供的便捷方法,减少重复 SQL 编写。

章节来源

工作流状态与业务状态同步

  • 业务表单的审批状态字段复用流程任务状态枚举,便于统一管理。
  • 服务层在创建流程实例时设置初始状态为“审批中”,后续通过流程回调或轮询更新业务状态。

章节来源

流程定义与表单关联

  • 流程定义信息表包含表单类型、表单 ID、自定义创建/查看路径等字段,支持 OA 请假流程与业务表单的绑定。
  • 通过流程定义 Key 与业务表单 Key(业务表单 ID)建立关联,实现流程与业务数据的解耦。

章节来源

依赖关系分析

  • 控制器依赖服务层;服务层依赖 Mapper 与流程实例 API;实体类映射数据库表。
  • 流程实例 API 通过 Feign 进行远程调用,DTO 承载流程启动所需的关键信息。
  • 审批状态枚举贯穿业务与流程,确保状态一致性。

Mermaid Diagram Code:

graph LR
Controller["BpmOALeaveController"] --> Service["BpmOALeaveServiceImpl"]
Service --> Mapper["BpmOALeaveMapper"]
Service --> Api["BpmProcessInstanceApi"]
Mapper --> DO["BpmOALeaveDO"]
Api --> DTO["BpmProcessInstanceCreateReqDTO"]
Service --> Enum["BpmTaskStatusEnum"]

图表来源

章节来源

性能考虑

  • 事务边界:业务数据插入与流程实例创建在同一事务内,确保一致性与原子性。
  • 分页查询:Mapper 提供条件过滤与排序,建议在高频查询场景下为常用过滤字段建立索引。
  • 流程变量:仅传递必要变量(如请假天数),避免冗余数据影响性能。
  • 状态枚举:统一状态管理,减少跨模块状态转换的复杂度与错误风险。

[本节为通用指导,无需列出具体文件来源]

故障排查指南

  • 创建失败:检查请求参数校验(起止时间先后、必填项)与权限校验。
  • 流程未启动:确认流程定义 Key 正确、业务 Key(业务表单 ID)有效、流程实例 API 可用。
  • 状态不同步:核对流程回调或轮询逻辑是否正确更新业务表单状态。
  • 数据不一致:检查事务边界与异常处理,确保异常时业务数据与流程状态回滚一致。

章节来源

结论

OA 请假表单与工作流的集成以“业务先行、流程随后”为核心策略,通过明确的实体映射、清晰的分层架构与统一的状态枚举,实现了业务数据与流程状态的可靠同步。该模式可作为其他业务表单与流程集成的参考范式,具备良好的可扩展性与可维护性。

[本节为总结性内容,无需列出具体文件来源]

附录

业务表单设计通用模式

  • 表单字段设计:区分业务字段与流程字段,业务字段用于展示与统计,流程字段用于驱动流程。
  • 状态管理:统一使用流程任务状态枚举,避免多套状态体系导致的混乱。
  • 关联策略:通过业务 Key 与流程实例 ID 建立双向关联,支持流程查询与业务查询。
  • 权限控制:结合用户权限与流程角色,控制业务表单的创建、查看与操作。

[本节为概念性内容,无需列出具体文件来源]

用户文档
AI 助手
Agent 列表
请选择一个 Agent 开始对话
AI 问答