fix: 修正零售价架构错误 + 清理旧微信配置 + 归档提案 + 前端接口文档
All checks were successful
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 7m12s
All checks were successful
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 7m12s
1. 修正 retail_price 架构:
- 删除 batch-pricing 接口的 pricing_target 字段和 retail_price 分支
(上级只能改下级成本价,不能改零售价)
- 新增 PATCH /api/admin/packages/:id/retail-price 接口
(代理自己改自己的零售价,校验 retail_price >= cost_price)
2. 清理旧微信 YAML 配置(已全部迁移到数据库 tb_wechat_config):
- 删除 config.yaml 中 wechat.official_account 配置节
- 删除 NewOfficialAccountApp() 旧工厂函数
- 清理 personal_customer service 中的死代码(旧登录/绑定微信方法)
- 清理 docker-compose.prod.yml 中旧微信环境变量和证书挂载注释
3. 归档四个已完成提案到 openspec/changes/archive/
4. 新增前端接口变更说明文档(docs/前端接口变更说明.md)
5. 修正归档提案和 specs 中关于 pricing_target 的错误描述
This commit is contained in:
@@ -3,9 +3,7 @@
|
||||
## Purpose
|
||||
|
||||
本 capability 定义钱包充值功能,允许个人客户为卡/设备钱包充值,支持强充验证、第三方支付和充值后的累计充值更新与一次性佣金触发。
|
||||
|
||||
## Requirements
|
||||
|
||||
### Requirement: 创建钱包充值订单
|
||||
|
||||
系统 SHALL 允许个人客户创建钱包充值订单。创建前 MUST 验证强充要求,强充场景下充值金额必须等于要求的强充金额。
|
||||
@@ -186,3 +184,59 @@
|
||||
#### Scenario: 充值金额过大
|
||||
- **WHEN** 客户尝试充值 200000 元
|
||||
- **THEN** 系统返回错误 "单次充值金额不能超过100000元"
|
||||
|
||||
### Requirement: 充值回调事务一致性
|
||||
|
||||
`HandlePaymentCallback` 内的 `UpdateStatusWithOptimisticLock` 与 `UpdatePaymentInfo` MUST 使用同一个事务内 `tx` 执行,保证充值状态与支付信息的原子性。
|
||||
|
||||
#### Scenario: 回调处理中状态更新与支付信息更新同事务
|
||||
- **WHEN** 收到支付成功回调并进入 `HandlePaymentCallback`
|
||||
- **THEN** 系统 MUST 在同一事务 `tx` 内执行 `UpdateStatusWithOptimisticLock`
|
||||
- **THEN** 系统 MUST 在同一事务 `tx` 内执行 `UpdatePaymentInfo`
|
||||
|
||||
#### Scenario: 事务失败整体回滚
|
||||
- **WHEN** 回调处理中任一步骤失败
|
||||
- **THEN** 系统 MUST 回滚该事务,保证订单状态与支付信息不出现部分成功
|
||||
|
||||
---
|
||||
|
||||
### Requirement: Store 方法签名支持事务参数
|
||||
|
||||
系统 MUST 调整充值相关 Store 方法签名,支持显式传入 `*gorm.DB tx` 参数,以保证事务边界可控。
|
||||
|
||||
#### Scenario: Service 传入事务句柄
|
||||
- **WHEN** Service 在事务上下文调用 Store 更新充值记录
|
||||
- **THEN** Store 方法 MUST 接收并使用传入的 `tx` 执行数据库操作
|
||||
|
||||
---
|
||||
|
||||
### Requirement: 充值回调采用两阶段处理
|
||||
|
||||
系统 MUST 将强充场景的充值回调改为两阶段:第一阶段同步事务内完成入账与状态更新,第二阶段异步执行自动购买。第一阶段 SHALL 包含:更新充值状态、钱包加款、累计充值更新、首充佣金判断。第二阶段 SHALL 通过 Asynq 任务执行钱包扣款、创建套餐订单、激活套餐。该改造适用于客户端触发的强充路径,且不影响非强充充值主流程。
|
||||
|
||||
#### Scenario: 强充回调同步入账成功并触发异步任务
|
||||
- **WHEN** 强充充值支付回调验签成功
|
||||
- **THEN** 系统在事务内完成钱包入账与充值单状态更新
|
||||
- **AND** 入队 `AutoPurchaseAfterRecharge` 异步任务
|
||||
|
||||
---
|
||||
|
||||
### Requirement: 充值记录新增 auto_purchase_status 状态追踪
|
||||
|
||||
系统 MUST 在 `AssetRechargeRecord` 增加 `auto_purchase_status` 字段,用于追踪强充后二阶段自动购买状态。状态集 SHALL 至少包括:`pending`、`success`、`failed`。创建强充充值单时 MUST 初始化为 `pending`;异步购买成功后 MUST 更新为 `success`;重试耗尽后 MUST 更新为 `failed`。
|
||||
|
||||
#### Scenario: 强充充值单创建时默认 pending
|
||||
- **WHEN** 系统创建与套餐联动的强充充值单
|
||||
- **THEN** 充值记录 `auto_purchase_status` 初始化为 `pending`
|
||||
|
||||
---
|
||||
|
||||
### Requirement: 异步自动购买失败处理规范
|
||||
|
||||
系统 SHALL 对 `AutoPurchaseAfterRecharge` 失败场景执行统一处理:任务 MUST 自动重试(最多 3 次);全部失败后 MUST 记录错误日志并将 `auto_purchase_status` 置为 `failed`;用户资金 SHALL 保留在钱包中,允许后续手动购买,不得回滚已成功的充值入账。
|
||||
|
||||
#### Scenario: 异步任务最终失败
|
||||
- **WHEN** 自动购买任务连续失败并达到最大重试次数
|
||||
- **THEN** 系统将 `auto_purchase_status` 标记为 `failed`
|
||||
- **AND** 钱包余额保持可用,用户可手动下单
|
||||
|
||||
|
||||
Reference in New Issue
Block a user