修复批量订购
This commit is contained in:
@@ -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** 系统不删除该日及更晚日期的在线外部交互日志,并将失败信息写入独立日留存日志
|
||||
|
||||
## 可达操作索引
|
||||
|
||||
|
||||
@@ -48,13 +48,18 @@
|
||||
|
||||
### Requirement: 审计在线数据逐日物理留存
|
||||
|
||||
系统 SHALL 以 Asia/Shanghai 已结束的自然日为单位处理统一审计事件及其资源快照的在线留存。每次留存执行 SHALL 从最早尚未完成清理的归档日开始,连续处理至昨天;任一归档日未通过完整性校验时,系统 MUST 保留该日及其后续日期的在线审计数据,且不得将它们标记为已清理。系统 MUST 先删除该日的审计资源快照,再删除该日的审计事件,并保留对象存储归档对象及清单作为恢复凭证。
|
||||
系统 SHALL 以 Asia/Shanghai 已结束的自然日为单位处理统一审计事件及其资源快照的在线留存。每次留存执行 SHALL 从最早尚未完成清理的归档日开始,连续处理至昨天;Integration Log 的 `pending` 记录不得阻断已通过完整性校验的审计事件及资源快照清理。任一审计归档日未通过完整性校验时,系统 MUST 保留该日及其后续日期的在线审计数据,且不得将它们标记为已清理。系统 MUST 先删除该日的审计资源快照,再删除该日的审计事件,并保留对象存储归档对象及清单作为恢复凭证。
|
||||
|
||||
#### Scenario: 已验证日期完成物理清理
|
||||
- **GIVEN** 某已结束自然日的审计归档成功,归档对象和清单可读取且与在线记录范围、数量和校验摘要一致
|
||||
- **WHEN** 日留存任务处理该日期
|
||||
- **THEN** 系统分批删除该日在线审计资源快照和审计事件,并将该归档日标记为已清理
|
||||
|
||||
#### Scenario: Integration Log pending 不阻断审计清理
|
||||
- **GIVEN** 某已结束自然日的审计归档已通过完整性校验,且同日存在 pending Integration Log
|
||||
- **WHEN** 日留存任务处理该日期
|
||||
- **THEN** 系统仍完成该日在线审计资源快照和审计事件的物理清理
|
||||
|
||||
#### Scenario: 归档校验失败阻断连续清理
|
||||
- **GIVEN** 某尚未清理的归档日缺少归档、归档校验失败或清单与在线数据不一致
|
||||
- **WHEN** 日留存任务处理该日期
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
|
||||
### Requirement: 批量操作可追踪
|
||||
|
||||
系统 SHALL 为同步批量分配和调价直接返回处理结果;对异步批量订购返回任务标识并提供状态查询。
|
||||
系统 SHALL 为同步批量分配和调价直接返回处理结果;对异步批量订购返回任务标识并提供状态查询。异步批量订购完成后,系统 MUST 持久化每个输入行的成功或失败结果及与其一致的总数、成功数和失败数;部分资产因余额不足、资产校验或重复输入失败不得阻止任务进入完成终态。
|
||||
|
||||
#### Scenario: 批量操作可追踪
|
||||
|
||||
@@ -26,6 +26,12 @@
|
||||
- **WHEN** 创建批量操作
|
||||
- **THEN** 同步操作直接返回结果;异步订购返回任务标识且可查询处理状态
|
||||
|
||||
#### Scenario: 批量订购部分失败后查询结果
|
||||
|
||||
- **GIVEN** 异步批量订购中的部分资产已成功创建订单,其他资产因钱包余额不足或输入重复失败
|
||||
- **WHEN** Worker 完成全部输入行的处理
|
||||
- **THEN** 任务状态为已完成,逐行结果保留成功订单与失败原因,且总数等于成功数与失败数之和
|
||||
|
||||
### Requirement: 授权页面禁止重复选择套餐
|
||||
|
||||
系统 SHALL 使代理系列授权页面能够区分目标店铺已授权和未授权套餐;已授权套餐 MUST 以不可新增的状态返回,首次创建系列授权和既有系列新增套餐均适用。
|
||||
|
||||
Reference in New Issue
Block a user