修复批量订购

This commit is contained in:
2026-08-26 14:54:26 +08:00
parent 5797fd0e94
commit 62f3d25e81
22 changed files with 478 additions and 115 deletions

View File

@@ -28,7 +28,7 @@
### Requirement: 外部失败边界
系统 SHALL 将第三方超时、渠道错误和无效响应转换为当前稳定的系统错误;已接入外部交互日志的渠道同时保留脱敏结果。
系统 SHALL 将第三方超时、渠道错误和无效响应转换为当前稳定的系统错误;已接入外部交互日志的渠道同时保留脱敏结果。Gateway 同步轮询在已建立 pending 外部交互日志后无论查询成功、失败或任务上下文取消MUST 尝试将该尝试终结为公开终态;终结失败 MUST 作为任务失败返回或记录为可重试错误,不得静默忽略。
#### Scenario: 外部失败边界
@@ -36,6 +36,18 @@
- **WHEN** 调用依赖该系统的操作
- **THEN** 客户端收到当前稳定错误;已接入外部交互日志的调用记录脱敏渠道结果
#### Scenario: Gateway 轮询查询失败
- **GIVEN** Gateway 同步轮询已建立 pending 外部交互日志且查询返回错误
- **WHEN** 轮询任务处理该错误
- **THEN** 系统将该日志终结为失败或结果未知的公开终态,并按既有策略重新入队
#### Scenario: Gateway 轮询终结日志失败
- **GIVEN** Gateway 同步轮询已建立 pending 外部交互日志且终结写入失败
- **WHEN** 轮询任务结束该次尝试
- **THEN** 系统记录并返回该终结失败,不得把该错误静默丢弃
### Requirement: 外部调用重试边界
系统 SHALL 仅对 Gateway 客户端超时、连接失败和 DNS 失败自动重试默认最多重试两次且每次重新签名HTTP 非 200、响应解析失败、Gateway 业务失败和调用方取消不重试。企业微信审批只有确认尚未调用提交接口的失败可释放后重试,提交结果未知时不得盲目重建审批。
@@ -103,22 +115,42 @@
### Requirement: 外部交互日志逐日物理留存
系统 SHALL 以 Asia/Shanghai 已结束的自然日为单位物理留存 `tb_integration_log`。删除某日在线外部交互日志前,系统 MUST 为该日生成最终归档版本,确认不存在待完成记录,并验证归档对象清单、日期范围、记录数量和校验摘要可作为恢复凭证。每次执行 SHALL 从最早尚未完成清理的归档日连续处理至昨天;任一日期不能形成或验证最终归档时,系统 MUST 不删除该日及更晚日期的在线外部交互日志。
系统 SHALL 以 Asia/Shanghai 已结束的自然日为单位物理留存 `tb_integration_log`。删除一条已终态在线外部交互日志前,系统 MUST 已为其创建日生成可读取、可验证归档对象清单;该归档 MUST 包含该日当时全部外部交互日志,并验证日期范围、记录数量和校验摘要可作为恢复凭证。`pending` 记录 MUST 保留在线,不得被物理删除,且不得阻断同日已终态记录或更晚日期的归档、验证与物理清理。每次执行 SHALL 清理所有满足归档校验条件的已终态记录;某一来源的归档或校验失败时,系统 MUST 保留该来源当天及更晚日期的在线外部交互日志。
#### Scenario: 最终归档通过后清理在线外部交互日志
- **GIVEN** 某已结束自然日的外部交互日志均已进入终态,且该日最终归档对象和清单校验成功
- **GIVEN** 某已结束自然日的外部交互归档对象和清单校验成功,且存在已终态在线外部交互日志
- **WHEN** 日留存任务处理该日期
- **THEN** 系统分批删除该日的在线外部交互日志并将该归档日标记为已清理,归档对象保持可用
- **THEN** 系统分批删除该日已终态的在线外部交互日志并保留归档对象
#### Scenario: 存在待完成外部交互日志
- **GIVEN** 某归档日仍存在待完成的外部交互日志
- **WHEN** 日留存任务尝试处理该日期
- **THEN** 系统不删除该日及更晚日期的在线外部交互日志,并在独立日留存日志中记录该日期未形成最终归档的原因
- **THEN** 系统保留该 pending 日志,但不得停止同日终态记录和更晚日期的清理
#### Scenario: 含 pending 的日期清理终态日志
- **GIVEN** 某已结束自然日同时存在已终态和 `pending` 的外部交互日志,且该日归档对象和清单校验成功
- **WHEN** 日留存任务处理该日期
- **THEN** 系统分批删除该日已终态的在线外部交互日志,保留 `pending` 记录,并保留归档对象
#### Scenario: 历史积压按日期连续补清
- **GIVEN** 存在多个昨天及更早日期尚未完成物理清理
- **WHEN** 日留存任务执行且这些日期依次通过最终归档和完整性校验
- **THEN** 系统按日期从早到晚清理全部连续合格日期
- **GIVEN** 存在多个昨天及更早日期尚未完成物理清理,且这些日期各自存在满足归档校验条件的已终态外部交互日志
- **WHEN** 日留存任务执行
- **THEN** 系统按日期从早到晚清理全部符合条件的终态日志
#### Scenario: pending 不阻断后续日期
- **GIVEN** 较早归档日只剩 `pending` 外部交互日志,且更晚归档日存在满足归档校验条件的已终态外部交互日志
- **WHEN** 日留存任务执行
- **THEN** 系统继续处理更晚归档日的已终态外部交互日志,不因较早日期的 pending 停止日期推进
#### Scenario: pending 后续终结
- **GIVEN** 某归档日的 pending 外部交互日志在该日首次留存后进入公开终态
- **WHEN** 后续日留存任务执行
- **THEN** 系统为包含该记录的当前在线集合重新验证归档,并删除该已终态记录
#### Scenario: 归档或校验失败保留同来源后续数据
- **GIVEN** 某归档日的外部交互归档缺失、归档校验失败或清单与在线数据不一致
- **WHEN** 日留存任务处理该日期
- **THEN** 系统不删除该日及更晚日期的在线外部交互日志,并将失败信息写入独立日留存日志
## 可达操作索引