无尘阁日记

无尘阁日记

跟AI协作:面向OA系统对接的推送与审核全流程数据库表设计方案
2025-07-09

问:

OA系统对接ZPY业务系统20250702的.xlsx

01项目创建接口文档_完整字段版v2.docx

我们要做一个跟OA对接的功能:

1. 我们根据文档01里面设计的接口来接收对方的推送;

2. 我们需要有一个初审、再审的推送记录,并且还得将对方的推送失败信息给记录下来,另外还需要在失败后隔指定时间再次推送,最高N次,也由后台来配置;

3. 还需要对方在我们的后管里配置api接口、token等等信息,在文档里都有。

4. token需要有对应的token生成记录,便于他使用token的时候做校验。

请你为我设计所需要用到的表。


答:

以下是基于你需求(结合【文档01】接口字段规范与真实落地对接 OA 系统)完整 数据库表设计方案,满足:

  • 接收对方推送

  • 初审、再审推送记录

  • 推送失败记录与失败重试机制(可配置重试次数、间隔)

  • 后台配置对方 API 接口、token 等信息

  • token 生成记录及使用校验

1️⃣ 对方系统配置表(oa_partner_config)

用于配置对方在我方后台录入的 API 地址、token、重试次数、重试间隔等信息。

字段名类型说明
idbigint, PK自增主键
partner_namevarchar(255)OA 系统简称
api_urlvarchar(1000)对方 API 推送地址
api_tokenvarchar(512)对方 token
max_retry_countint最大重试次数
retry_interval_secondsint重试间隔(秒)
statustinyint0-停用,1-启用
create_timedatetime创建时间
update_timedatetime更新时间

2️⃣ Token生成记录表(oa_partner_token_log)

用于生成及记录对方 token,以便在对方使用时进行校验与溯源。

字段名类型说明
idbigint, PK自增主键
partner_idbigint关联 oa_partner_config.id
tokenvarchar(512)生成的 token
expire_timedatetime过期时间
statustinyint0-失效,1-有效
create_timedatetime创建时间
update_timedatetime更新时间

3️⃣ OA推送接收记录表(oa_push_receive_log)

用于接收 OA 系统推送时完整记录,便于初审与再审处理。

字段名类型说明
idbigint, PK自增主键
partner_idbigint关联 oa_partner_config.id
request_bodytext接收的 JSON 请求体
project_codevarchar(50)项目编号(解析后提取)
statustinyint0-待初审,1-初审通过待再审,2-再审通过,3-初审拒绝,4-再审拒绝
receive_timedatetime接收时间
review_timedatetime审核时间
reviewervarchar(100)审核人
remarksvarchar(1000)审核备注
create_timedatetime创建时间
update_timedatetime更新时间

4️⃣ 推送失败与重试记录表(oa_push_retry_log)

用于记录我方向 OA 推送失败的情况,支持重试并可配置最大重试次数与重试间隔。

字段名类型说明
idbigint, PK自增主键
partner_idbigint关联 oa_partner_config.id
push_typevarchar(50)推送类型(初审/再审)
request_bodytext推送内容
response_bodytext返回内容
statustinyint0-待重试,1-推送成功,2-推送失败(达到最大次数)
retry_countint当前已重试次数
max_retry_countint最大重试次数(快照)
next_retry_timedatetime下次重试时间
last_retry_timedatetime上次重试时间
create_timedatetime创建时间
update_timedatetime更新时间

5️⃣ 项目创建接收表(oa_project_create_receive)

用于存储对方推送的【项目创建】字段明细,方便后续业务流转与接口回溯(字段来源【文档01】)。

字段名类型说明
idbigint, PK自增主键
partner_idbigint关联 oa_partner_config.id
project_idvarchar(100)项目唯一ID(若已生成)
project_namevarchar(2000)项目名称
project_codevarchar(50)项目编号
do_organvarchar(255)组织
project_main_personvarchar(60)项目负责人
project_main_person_mobilevarchar(255)项目负责人手机号
statustinyint0-待处理,1-已处理,2-处理失败
receive_timedatetime接收时间
process_timedatetime处理完成时间
remarksvarchar(1000)备注信息
create_timedatetime创建时间
update_timedatetime更新时间

6️⃣ 可选:推送回调结果日志表(oa_push_callback_log)

若需要记录我方在回调 OA 接口时返回给对方的完整回调日志,可额外建立:

字段名类型说明
idbigint, PK自增主键
partner_idbigint关联 oa_partner_config.id
callback_typevarchar(50)回调类型(如初审结果、再审结果)
request_bodytext回调内容
response_statusintHTTP 返回状态
response_bodytext返回内容
statustinyint0-成功,1-失败
callback_timedatetime回调时间
create_timedatetime创建时间
update_timedatetime更新时间

🌿 总结

以上设计满足:

✅ 完整接收【文档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、重试机制。

字段名类型说明
idbigint, PK自增主键
tenant_idbigint企业租户ID
partner_namevarchar(255)对方系统简称
api_hostvarchar(500)API HOST,例如 https://oa.xxx.com
api_pathvarchar(500)API PATH,例如 /api/project/create-asset
api_tokenvarchar(512)对方 token
max_retry_countint, default 3最大重试次数
retry_interval_secondsint, default 60重试间隔(秒)
statustinyint0-停用,1-启用
created_bybigint创建人
updated_bybigint更新人
is_deletedtinyint, default 0是否删除
deleted_timedatetime删除时间
create_timedatetime创建时间
update_timedatetime更新时间

2️⃣ Token生成记录表(oa_partner_token_log)

用于生成及记录对方 token,便于使用时追踪与校验。

字段名类型说明
idbigint, PK自增主键
tenant_idbigint企业租户ID
partner_idbigint关联 oa_partner_config.id
tokenvarchar(512)生成的 token
expire_timedatetime过期时间
statustinyint0-失效,1-有效
created_bybigint创建人
updated_bybigint更新人
is_deletedtinyint, default 0是否删除
deleted_timedatetime删除时间
create_timedatetime创建时间
update_timedatetime更新时间

3️⃣ OA推送接收记录表(oa_push_receive_log)

用于完整记录 OA 推送数据(JSON),便于 1v1 关联到项目表并追踪。

字段名类型说明
idbigint, PK自增主键
tenant_idbigint企业租户ID
partner_idbigint关联 oa_partner_config.id
token_log_idbigint关联 oa_partner_token_log.id
request_bodytext接收的 JSON 请求体
receive_timedatetime接收时间
is_deletedtinyint, default 0是否删除
deleted_timedatetime删除时间
create_timedatetime创建时间
update_timedatetime更新时间

4️⃣ 推送失败与重试记录表(oa_push_retry_log)

用于记录推送失败、重试,枚举类型管理推送类型。

字段名类型说明
idbigint, PK自增主键
tenant_idbigint企业租户ID
partner_idbigint关联 oa_partner_config.id
push_typeenum(‘初审推送’, ‘正评推送’)推送类型
request_bodytext推送内容
response_bodytext返回内容
statustinyint0-待重试,1-成功,2-失败(达到最大次数)
retry_countint当前已重试次数
max_retry_countint最大重试次数(快照)
next_retry_timedatetime下次重试时间
last_retry_timedatetime上次重试时间
is_deletedtinyint, default 0是否删除
deleted_timedatetime删除时间
create_timedatetime创建时间
update_timedatetime更新时间

5️⃣ 项目创建接收表(oa_project_create_receive)

用于结构化存储推送内容,与 oa_push_receive_log 1v1 关联,便于后续业务流转。

字段名类型说明
idbigint, PK自增主键
tenant_idbigint企业租户ID
partner_idbigint关联 oa_partner_config.id
token_log_idbigint关联 oa_partner_token_log.id
push_receive_idbigint关联 oa_push_receive_log.id
project_uuidvarchar(100)项目唯一ID(我方生成)
project_namevarchar(2000)项目名称
project_codevarchar(50)项目编号
do_organvarchar(255)组织
project_main_personvarchar(60)项目负责人
project_main_person_mobilevarchar(255)项目负责人手机号
statustinyint0-待处理,1-已处理,2-处理失败
is_deletedtinyint, default 0是否删除
deleted_timedatetime删除时间
create_timedatetime创建时间
update_timedatetime更新时间

总体关系图(文字描述)

  • 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、重试机制。

字段名类型说明
idbigint, PK自增主键
tenant_idbigint企业租户ID
partner_namevarchar(255)对方系统简称
api_hostvarchar(500)API HOST,例如 https://oa.xxx.com
api_pathvarchar(500)API PATH,例如 /api/project/create-asset
api_tokenvarchar(512)对方 token
max_retry_countint, default 3最大重试次数
retry_interval_secondsint, default 60重试间隔(秒)
statustinyint0-停用,1-启用
created_bybigint创建人
updated_bybigint更新人
is_deletedtinyint, default 0是否删除
deleted_timedatetime删除时间
create_timedatetime创建时间
update_timedatetime更新时间

2️⃣ Token生成记录表(oa_partner_token_log)

用于生成及记录对方 token,仅绑定租户,无需绑定 partner,无更新。

字段名类型说明
idbigint, PK自增主键
tenant_idbigint企业租户ID
tokenvarchar(512)生成的 token
expire_timedatetime过期时间
statustinyint0-失效,1-有效
created_bybigint创建人
is_deletedtinyint, default 0是否删除
deleted_timedatetime删除时间
create_timedatetime创建时间

3️⃣ OA推送接收记录表(oa_push_receive_log)

用于完整记录 OA 推送 JSON 内容,无需更新。

字段名类型说明
idbigint, PK自增主键
tenant_idbigint企业租户ID
partner_idbigint关联 oa_partner_config.id
token_log_idbigint关联 oa_partner_token_log.id(便于追踪是哪个 token 的请求)
request_bodytext接收的 JSON 请求体
receive_timedatetime接收时间
is_deletedtinyint, default 0是否删除
deleted_timedatetime删除时间
create_timedatetime创建时间

4️⃣ 推送失败与重试记录表(oa_push_retry_log)

用于记录推送失败重试记录,使用枚举明确 push_type

字段名类型说明
idbigint, PK自增主键
tenant_idbigint企业租户ID
partner_idbigint关联 oa_partner_config.id
push_typeenum(‘初审推送’, ‘正评推送’)推送类型
request_bodytext推送内容
response_bodytext返回内容
statustinyint0-待重试,1-成功,2-失败(达到最大次数)
retry_countint当前已重试次数
max_retry_countint最大重试次数(快照)
next_retry_timedatetime下次重试时间
last_retry_timedatetime上次重试时间
is_deletedtinyint, default 0是否删除
deleted_timedatetime删除时间
create_timedatetime创建时间
update_timedatetime更新时间

5️⃣ 项目创建接收表(oa_project_create_receive)

用于结构化存储推送数据,与 oa_push_receive_log 一对一关联,无需更新、处理完成时间、备注。

字段名类型说明
idbigint, PK自增主键
tenant_idbigint企业租户ID
partner_idbigint关联 oa_partner_config.id
token_log_idbigint关联 oa_partner_token_log.id(便于追踪)
push_receive_idbigint关联 oa_push_receive_log.id(1v1)
project_uuidvarchar(100)项目唯一ID(我方生成)
project_namevarchar(2000)项目名称
project_codevarchar(50)项目编号
do_organvarchar(255)组织
project_main_personvarchar(60)项目负责人
project_main_person_mobilevarchar(255)项目负责人手机号
statustinyint0-待处理,1-已处理,2-处理失败
is_deletedtinyint, default 0是否删除
deleted_timedatetime删除时间
create_timedatetime创建时间

🌿 专业总结

✅ tenant_id 全表支持 SaaS 租户分离
✅ is_deleted + deleted_time 完整支持软删除
✅ oa_partner_token_log 简化,仅生成与删除
✅ oa_push_receive_logoa_project_create_receive 简化,无需更新字段
✅ api_hostapi_path 拆分结构便于未来多路由、多接口配置
✅ 重试机制默认值、推送类型枚举可维护性强
✅ 结构清晰、便于直接落地开发

如夜话,至此。