跟AI协作:面向OA系统对接的推送与审核全流程数据库表设计方案
2025-07-09
问:
我们要做一个跟OA对接的功能:
1. 我们根据文档01里面设计的接口来接收对方的推送;
2. 我们需要有一个初审、再审的推送记录,并且还得将对方的推送失败信息给记录下来,另外还需要在失败后隔指定时间再次推送,最高N次,也由后台来配置;
3. 还需要对方在我们的后管里配置api接口、token等等信息,在文档里都有。
4. token需要有对应的token生成记录,便于他使用token的时候做校验。
请你为我设计所需要用到的表。
答:
以下是基于你需求(结合【文档01】接口字段规范与真实落地对接 OA 系统)完整 数据库表设计方案,满足:
接收对方推送
初审、再审推送记录
推送失败记录与失败重试机制(可配置重试次数、间隔)
后台配置对方 API 接口、token 等信息
token 生成记录及使用校验
1️⃣ 对方系统配置表(oa_partner_config)
用于配置对方在我方后台录入的 API 地址、token、重试次数、重试间隔等信息。
字段名 | 类型 | 说明 |
---|---|---|
id | bigint, PK | 自增主键 |
partner_name | varchar(255) | OA 系统简称 |
api_url | varchar(1000) | 对方 API 推送地址 |
api_token | varchar(512) | 对方 token |
max_retry_count | int | 最大重试次数 |
retry_interval_seconds | int | 重试间隔(秒) |
status | tinyint | 0-停用,1-启用 |
create_time | datetime | 创建时间 |
update_time | datetime | 更新时间 |
2️⃣ Token生成记录表(oa_partner_token_log)
用于生成及记录对方 token,以便在对方使用时进行校验与溯源。
字段名 | 类型 | 说明 |
---|---|---|
id | bigint, PK | 自增主键 |
partner_id | bigint | 关联 oa_partner_config.id |
token | varchar(512) | 生成的 token |
expire_time | datetime | 过期时间 |
status | tinyint | 0-失效,1-有效 |
create_time | datetime | 创建时间 |
update_time | datetime | 更新时间 |
3️⃣ OA推送接收记录表(oa_push_receive_log)
用于接收 OA 系统推送时完整记录,便于初审与再审处理。
字段名 | 类型 | 说明 |
---|---|---|
id | bigint, PK | 自增主键 |
partner_id | bigint | 关联 oa_partner_config.id |
request_body | text | 接收的 JSON 请求体 |
project_code | varchar(50) | 项目编号(解析后提取) |
status | tinyint | 0-待初审,1-初审通过待再审,2-再审通过,3-初审拒绝,4-再审拒绝 |
receive_time | datetime | 接收时间 |
review_time | datetime | 审核时间 |
reviewer | varchar(100) | 审核人 |
remarks | varchar(1000) | 审核备注 |
create_time | datetime | 创建时间 |
update_time | datetime | 更新时间 |
4️⃣ 推送失败与重试记录表(oa_push_retry_log)
用于记录我方向 OA 推送失败的情况,支持重试并可配置最大重试次数与重试间隔。
字段名 | 类型 | 说明 |
---|---|---|
id | bigint, PK | 自增主键 |
partner_id | bigint | 关联 oa_partner_config.id |
push_type | varchar(50) | 推送类型(初审/再审) |
request_body | text | 推送内容 |
response_body | text | 返回内容 |
status | tinyint | 0-待重试,1-推送成功,2-推送失败(达到最大次数) |
retry_count | int | 当前已重试次数 |
max_retry_count | int | 最大重试次数(快照) |
next_retry_time | datetime | 下次重试时间 |
last_retry_time | datetime | 上次重试时间 |
create_time | datetime | 创建时间 |
update_time | datetime | 更新时间 |
5️⃣ 项目创建接收表(oa_project_create_receive)
用于存储对方推送的【项目创建】字段明细,方便后续业务流转与接口回溯(字段来源【文档01】)。
字段名 | 类型 | 说明 |
---|---|---|
id | bigint, PK | 自增主键 |
partner_id | bigint | 关联 oa_partner_config.id |
project_id | varchar(100) | 项目唯一ID(若已生成) |
project_name | varchar(2000) | 项目名称 |
project_code | varchar(50) | 项目编号 |
do_organ | varchar(255) | 组织 |
project_main_person | varchar(60) | 项目负责人 |
project_main_person_mobile | varchar(255) | 项目负责人手机号 |
status | tinyint | 0-待处理,1-已处理,2-处理失败 |
receive_time | datetime | 接收时间 |
process_time | datetime | 处理完成时间 |
remarks | varchar(1000) | 备注信息 |
create_time | datetime | 创建时间 |
update_time | datetime | 更新时间 |
6️⃣ 可选:推送回调结果日志表(oa_push_callback_log)
若需要记录我方在回调 OA 接口时返回给对方的完整回调日志,可额外建立:
字段名 | 类型 | 说明 |
---|---|---|
id | bigint, PK | 自增主键 |
partner_id | bigint | 关联 oa_partner_config.id |
callback_type | varchar(50) | 回调类型(如初审结果、再审结果) |
request_body | text | 回调内容 |
response_status | int | HTTP 返回状态 |
response_body | text | 返回内容 |
status | tinyint | 0-成功,1-失败 |
callback_time | datetime | 回调时间 |
create_time | datetime | 创建时间 |
update_time | datetime | 更新时间 |
🌿 总结
以上设计满足:
✅ 完整接收【文档01】项目创建接口结构化信息
✅ 支持初审、再审业务流转记录
✅ 支持推送失败重试、最大次数与间隔配置(可在 oa_partner_config 配置)
✅ 对方可在我方后台配置 token、接口地址等信息
✅ token 有完整生成记录与状态追踪
✅ 结构符合【高并发、大规模可扩展】系统落地需求
问:
1. 所有的表都要加入字段tenant_id,这是企业租户id,区分企业。
2. 对方系统配置表需要加上创建人、更新人,便于追踪。
3. 所有表都要加上is_deleted字段,标记逻辑删除,也就意味着所有表都需要一个删除时间。
4. api_url拆分成host部分跟api路由部分,便于后续扩展。
5. max_retry_count ,默认3次。retry_interval_seconds,默认1分钟。
6. token生成记录表也需要加入创建人、更新人,便于追踪。
7. 3️⃣ OA推送接收记录表(oa_push_receive_log)没有status,相关的其他字段也没有。这个表可以1v1关联到5️⃣ 项目创建接收表(oa_project_create_receive)这个表。
8. 4️⃣ 推送失败与重试记录表(oa_push_retry_log)的push_type的值为初审推送和正评推送,用枚举比较好。
9. 第五张表project_id改成project_uuid,并且关联3️⃣ OA推送接收记录表(oa_push_receive_log)的主键,二者1v1的关系。
10. 5️⃣ 项目创建接收表(oa_project_create_receive)这个表不需要处理完成时间,因为就记录下数据而已。remarks也去掉,暂时没提这个需求。
11. 第6张表不需要,没有回调,是同步操作。
12. 第3,第5张表把token表对应的id加上,便于追踪是哪个token的请求。
基于以上反馈重新设计。
答:
设计原则回顾
✅ 多租户支持:所有表加 tenant_id
区分企业
✅ 软删除支持:所有表加 is_deleted
+ deleted_time
✅ 全程可追溯:创建人 created_by
、更新人 updated_by
✅ 配置可扩展:API URL 拆分为 api_host
和 api_path
✅ 默认值明确:max_retry_count
=3,retry_interval_seconds
=60秒
✅ 结构清晰:通过外键实现清晰 1v1 关联、追踪 token
✅ 枚举可维护:push_type
使用 ENUM(初审推送、正评推送)
1️⃣ 对方系统配置表(oa_partner_config)
用于后台配置对方接口地址、token、重试机制。
字段名 | 类型 | 说明 |
---|---|---|
id | bigint, PK | 自增主键 |
tenant_id | bigint | 企业租户ID |
partner_name | varchar(255) | 对方系统简称 |
api_host | varchar(500) | API HOST,例如 https://oa.xxx.com |
api_path | varchar(500) | API PATH,例如 /api/project/create-asset |
api_token | varchar(512) | 对方 token |
max_retry_count | int, default 3 | 最大重试次数 |
retry_interval_seconds | int, default 60 | 重试间隔(秒) |
status | tinyint | 0-停用,1-启用 |
created_by | bigint | 创建人 |
updated_by | bigint | 更新人 |
is_deleted | tinyint, default 0 | 是否删除 |
deleted_time | datetime | 删除时间 |
create_time | datetime | 创建时间 |
update_time | datetime | 更新时间 |
2️⃣ Token生成记录表(oa_partner_token_log)
用于生成及记录对方 token,便于使用时追踪与校验。
字段名 | 类型 | 说明 |
---|---|---|
id | bigint, PK | 自增主键 |
tenant_id | bigint | 企业租户ID |
partner_id | bigint | 关联 oa_partner_config.id |
token | varchar(512) | 生成的 token |
expire_time | datetime | 过期时间 |
status | tinyint | 0-失效,1-有效 |
created_by | bigint | 创建人 |
updated_by | bigint | 更新人 |
is_deleted | tinyint, default 0 | 是否删除 |
deleted_time | datetime | 删除时间 |
create_time | datetime | 创建时间 |
update_time | datetime | 更新时间 |
3️⃣ OA推送接收记录表(oa_push_receive_log)
用于完整记录 OA 推送数据(JSON),便于 1v1 关联到项目表并追踪。
字段名 | 类型 | 说明 |
---|---|---|
id | bigint, PK | 自增主键 |
tenant_id | bigint | 企业租户ID |
partner_id | bigint | 关联 oa_partner_config.id |
token_log_id | bigint | 关联 oa_partner_token_log.id |
request_body | text | 接收的 JSON 请求体 |
receive_time | datetime | 接收时间 |
is_deleted | tinyint, default 0 | 是否删除 |
deleted_time | datetime | 删除时间 |
create_time | datetime | 创建时间 |
update_time | datetime | 更新时间 |
4️⃣ 推送失败与重试记录表(oa_push_retry_log)
用于记录推送失败、重试,枚举类型管理推送类型。
字段名 | 类型 | 说明 |
---|---|---|
id | bigint, PK | 自增主键 |
tenant_id | bigint | 企业租户ID |
partner_id | bigint | 关联 oa_partner_config.id |
push_type | enum(‘初审推送’, ‘正评推送’) | 推送类型 |
request_body | text | 推送内容 |
response_body | text | 返回内容 |
status | tinyint | 0-待重试,1-成功,2-失败(达到最大次数) |
retry_count | int | 当前已重试次数 |
max_retry_count | int | 最大重试次数(快照) |
next_retry_time | datetime | 下次重试时间 |
last_retry_time | datetime | 上次重试时间 |
is_deleted | tinyint, default 0 | 是否删除 |
deleted_time | datetime | 删除时间 |
create_time | datetime | 创建时间 |
update_time | datetime | 更新时间 |
5️⃣ 项目创建接收表(oa_project_create_receive)
用于结构化存储推送内容,与 oa_push_receive_log
1v1 关联,便于后续业务流转。
字段名 | 类型 | 说明 |
---|---|---|
id | bigint, PK | 自增主键 |
tenant_id | bigint | 企业租户ID |
partner_id | bigint | 关联 oa_partner_config.id |
token_log_id | bigint | 关联 oa_partner_token_log.id |
push_receive_id | bigint | 关联 oa_push_receive_log.id |
project_uuid | varchar(100) | 项目唯一ID(我方生成) |
project_name | varchar(2000) | 项目名称 |
project_code | varchar(50) | 项目编号 |
do_organ | varchar(255) | 组织 |
project_main_person | varchar(60) | 项目负责人 |
project_main_person_mobile | varchar(255) | 项目负责人手机号 |
status | tinyint | 0-待处理,1-已处理,2-处理失败 |
is_deleted | tinyint, default 0 | 是否删除 |
deleted_time | datetime | 删除时间 |
create_time | datetime | 创建时间 |
update_time | datetime | 更新时间 |
总体关系图(文字描述)
oa_partner_config
(系统配置表):管理对方系统信息及推送配置。oa_partner_token_log
(token记录表):生成与验证 token,关联配置表。oa_push_receive_log
(推送接收记录表):接收原始 JSON,关联配置表、token 表。oa_push_retry_log
(重试记录表):记录失败重试流程,关联配置表。oa_project_create_receive
(项目创建接收表):结构化存储推送数据,与oa_push_receive_log
一对一关联,同时追踪使用的 token。
🌿 亮点回顾
✅ 支持企业多租户,便于 SaaS 模式部署
✅ 完整软删除支持,便于数据追溯与安全合规
✅ 推送与项目数据结构化分离,确保可审可追可验
✅ token、配置、接收、结构化信息完整关联闭环
✅ 使用枚举清晰区分推送类型,便于维护
✅ 满足可扩展、高并发、可溯源的专业架构落地
问:
1.2️⃣ Token生成记录表(oa_partner_token_log)这张表不需要更新,直接生成和删除即可,因此更新任何时间去掉。
2.另外这张表不需要跟partner绑定,有企业租户id就行了,他跟企业配置不是强关联的,因为是我方提供的token。
3.3️⃣ OA推送接收记录表(oa_push_receive_log)这张表也不需要更新。
4. 5️⃣ 项目创建接收表(oa_project_create_receive)也不需要更新。
基于以上反馈再做优化。
答:
总体优化要求回顾
✅ 所有表已加 tenant_id
(区分企业租户)
✅ 所有表已加软删除:is_deleted
+ deleted_time
✅ oa_partner_token_log
:
去除更新字段(无需更新)
去除与
partner_id
的绑定,仅保留tenant_id
✅oa_push_receive_log
与oa_project_create_receive
去除更新字段(无需更新)
1️⃣ 对方系统配置表(oa_partner_config)
用于后台配置对方接口地址、token、重试机制。
字段名 | 类型 | 说明 |
---|---|---|
id | bigint, PK | 自增主键 |
tenant_id | bigint | 企业租户ID |
partner_name | varchar(255) | 对方系统简称 |
api_host | varchar(500) | API HOST,例如 https://oa.xxx.com |
api_path | varchar(500) | API PATH,例如 /api/project/create-asset |
api_token | varchar(512) | 对方 token |
max_retry_count | int, default 3 | 最大重试次数 |
retry_interval_seconds | int, default 60 | 重试间隔(秒) |
status | tinyint | 0-停用,1-启用 |
created_by | bigint | 创建人 |
updated_by | bigint | 更新人 |
is_deleted | tinyint, default 0 | 是否删除 |
deleted_time | datetime | 删除时间 |
create_time | datetime | 创建时间 |
update_time | datetime | 更新时间 |
2️⃣ Token生成记录表(oa_partner_token_log)
用于生成及记录对方 token,仅绑定租户,无需绑定 partner,无更新。
字段名 | 类型 | 说明 |
---|---|---|
id | bigint, PK | 自增主键 |
tenant_id | bigint | 企业租户ID |
token | varchar(512) | 生成的 token |
expire_time | datetime | 过期时间 |
status | tinyint | 0-失效,1-有效 |
created_by | bigint | 创建人 |
is_deleted | tinyint, default 0 | 是否删除 |
deleted_time | datetime | 删除时间 |
create_time | datetime | 创建时间 |
3️⃣ OA推送接收记录表(oa_push_receive_log)
用于完整记录 OA 推送 JSON 内容,无需更新。
字段名 | 类型 | 说明 |
---|---|---|
id | bigint, PK | 自增主键 |
tenant_id | bigint | 企业租户ID |
partner_id | bigint | 关联 oa_partner_config.id |
token_log_id | bigint | 关联 oa_partner_token_log.id(便于追踪是哪个 token 的请求) |
request_body | text | 接收的 JSON 请求体 |
receive_time | datetime | 接收时间 |
is_deleted | tinyint, default 0 | 是否删除 |
deleted_time | datetime | 删除时间 |
create_time | datetime | 创建时间 |
4️⃣ 推送失败与重试记录表(oa_push_retry_log)
用于记录推送失败重试记录,使用枚举明确 push_type
。
字段名 | 类型 | 说明 |
---|---|---|
id | bigint, PK | 自增主键 |
tenant_id | bigint | 企业租户ID |
partner_id | bigint | 关联 oa_partner_config.id |
push_type | enum(‘初审推送’, ‘正评推送’) | 推送类型 |
request_body | text | 推送内容 |
response_body | text | 返回内容 |
status | tinyint | 0-待重试,1-成功,2-失败(达到最大次数) |
retry_count | int | 当前已重试次数 |
max_retry_count | int | 最大重试次数(快照) |
next_retry_time | datetime | 下次重试时间 |
last_retry_time | datetime | 上次重试时间 |
is_deleted | tinyint, default 0 | 是否删除 |
deleted_time | datetime | 删除时间 |
create_time | datetime | 创建时间 |
update_time | datetime | 更新时间 |
5️⃣ 项目创建接收表(oa_project_create_receive)
用于结构化存储推送数据,与 oa_push_receive_log
一对一关联,无需更新、处理完成时间、备注。
字段名 | 类型 | 说明 |
---|---|---|
id | bigint, PK | 自增主键 |
tenant_id | bigint | 企业租户ID |
partner_id | bigint | 关联 oa_partner_config.id |
token_log_id | bigint | 关联 oa_partner_token_log.id(便于追踪) |
push_receive_id | bigint | 关联 oa_push_receive_log.id(1v1) |
project_uuid | varchar(100) | 项目唯一ID(我方生成) |
project_name | varchar(2000) | 项目名称 |
project_code | varchar(50) | 项目编号 |
do_organ | varchar(255) | 组织 |
project_main_person | varchar(60) | 项目负责人 |
project_main_person_mobile | varchar(255) | 项目负责人手机号 |
status | tinyint | 0-待处理,1-已处理,2-处理失败 |
is_deleted | tinyint, default 0 | 是否删除 |
deleted_time | datetime | 删除时间 |
create_time | datetime | 创建时间 |
🌿 专业总结
✅ tenant_id
全表支持 SaaS 租户分离
✅ is_deleted
+ deleted_time
完整支持软删除
✅ oa_partner_token_log
简化,仅生成与删除
✅ oa_push_receive_log
、oa_project_create_receive
简化,无需更新字段
✅ api_host
、api_path
拆分结构便于未来多路由、多接口配置
✅ 重试机制默认值、推送类型枚举可维护性强
✅ 结构清晰、便于直接落地开发
如夜话,至此。
发表评论: