## Why 当前 `tb_asset_recharge_record` 表同时承担"充值业务订单"和"第三方支付凭证"两个职责,导致强充订单对用户不可见、幂等键锁死后无法引导用户恢复支付、支付与业务逻辑强耦合难以扩展。需要彻底替换为职责单一的新结构:独立的充值订单表 `tb_recharge_order` + 独立的支付记录表 `tb_payment`,一次性完整删除 `tb_asset_recharge_record` 及其所有相关代码。 ## What Changes - **新增** `tb_recharge_order` 表:承接充值业务订单(用户可见、有状态流转、挂 `iot_card_id`/`device_id`) - **新增** `tb_payment` 表:统一记录所有支付凭证(微信/支付宝/钱包),与业务订单解耦 - **新增** `/api/c/v1/recharge-orders` 充值订单列表接口:独立展示充值订单,不与套餐订单混合 - **修改** `/api/c/v1/orders` 列表接口:保持不变,仅展示套餐购买订单(`tb_order`) - **修改** 支付回调链路:完全重写为查 `tb_payment` 路由,彻底移除旧链路 - **修改** `auto_purchase` 异步任务:从 `tb_recharge_order` 读取关联套餐 IDs - **修改** 幂等检查逻辑:幂等键命中时返回已有充值订单,引导前端拉起支付 - **BREAKING** 直接删除 `tb_asset_recharge_record` 表及全部相关代码(`AssetRechargeStore`、`RechargeService` 写路径等),无过渡期,无 fallback ## Capabilities ### New Capabilities - `recharge-order`:充值订单管理——创建、列表查询、详情、状态流转(待支付→已支付→自动购包完成),独立于套餐订单展示 - `payment-record`:支付记录管理——统一记录微信/支付宝/钱包支付凭证,关联业务订单(`tb_order` 或 `tb_recharge_order`),支持幂等回调处理 ### Modified Capabilities - `client-order-purchase`:强充下单改写新表;幂等检查命中时返回已有充值订单而非报错;`/api/c/v1/orders` 接口本身保持不变(仍只返回套餐订单) - `force-recharge-check`:强充判断逻辑不变,创建数据改写 `tb_recharge_order` + `tb_payment` - `order-payment`:`PayOrder` 接口支付成功时同步创建 `tb_payment` 记录 - `wallet-recharge`:普通充值全部改写 `tb_recharge_order` + `tb_payment`;`/api/c/v1/wallet/recharges` 接口后端数据源改为 `tb_recharge_order` - `asset-recharge-adaptation`:该 spec 描述的能力全部迁移至新 spec,原 spec 废弃 ## Impact **数据库**:新增 2 张表(`tb_recharge_order`、`tb_payment`),直接 DROP `tb_asset_recharge_record` **代码删除**:`AssetRechargeRecord` 模型、`asset_recharge_store.go`、`recharge/service.go` 中所有写方法及回调处理、bootstrap 中相关注入 **代码新增**:`internal/model/recharge_order.go`、`internal/model/payment.go`、`recharge_order_store.go`、`payment_store.go`、`recharge_order/service.go` **代码修改**:`client_order/service.go`(强充创建 + 幂等恢复)、`auto_purchase.go`(改读新表)、`callback/payment.go`(完全重写路由)、`client_wallet.go`(GetRechargeRecords 改查新表)、`wechat_config/service.go`(resolvePaymentConfigID 改查新表)、`wechat_config_store.go`(CountPendingRechargesByConfigID 改查新表)、bootstrap 注入 **API 变化**:新增 `/api/c/v1/recharge-orders` 端点;`/api/c/v1/orders` 不变;`/api/c/v1/wallet/recharges` 后端换表但接口不变