Files
junhong_cmp_fiber/openspec/changes/add-agent-wallet-qr-recharge/tasks.md
break cbf909b878
All checks were successful
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 8m6s
代理在线充值
2026-07-27 16:02:55 +08:00

27 lines
7.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
## 1. 代理扫码创建纵向切片
- [x] 1.1 【主通道复杂写辅助Infrastructure完整边界在线充值单、支付单、幂等事实、付款内容和收款身份快照不迁移线下代充、客户充值】添加 golang-migrate 上下迁移与 Model/常量:代理充值 `request_id/request_fingerprint`、支付单 `qr_content/merchant_identity`、提交账号幂等唯一索引、第三方交易号唯一索引、收款身份对账索引、待处理查询索引及 `PaymentOrderTypeAgentRecharge`;迁移前检测冲突资金事实,以 up/down/up 演练和 SQL 查询核对字段、索引及回滚结果,不编写或运行自动化测试。
- [x] 1.2 【主通道Application + Port/Adapter完整边界微信 Native 与支付宝 PreCreate/Query不迁移通用支付框架和 SDK 升级】用现有 PowerWeChat、smartwalle/alipay 与 Integration Log 实现两个薄 Adapter通过结构体字段注入在线创建用例使用编译、静态诊断和联调环境渠道请求核对返回与错误转换不编写或运行自动化测试。
- [x] 1.3 【主通道复杂写辅助Domain、Infrastructure完整边界代理只为当前店铺创建全新扫码充值不迁移旧查询和线下审批】实现纯领域金额/状态规则与在线创建 Application双重金额校验、认证上下文店铺、主钱包/配置校验、本地短事务、第三方预下单、成功保存付款内容、失败条件关闭以及持久化请求幂等;复用 `pkg/idempotency`,通过构建、接口调用和数据库前后状态人工核对 100 元边界、角色权限与同请求重放。
- [x] 1.4 【主通道Handler → Application辅助Query完整边界创建与可用方式 API不迁移其他代理充值 Handler 方法】更新 DTO、现有 AgentRecharge Handler 和路由,静态 `/payment-methods` 注册在 `/:id` 前,统一返回 `{code,msg,data,timestamp}` 且不接受代理 `shop_id`;同步 RouteSpec/OpenAPI若实际新增 Handler 类型则更新 `cmd/api/docs.go``cmd/gendocs/main.go`;通过 OpenAPI 生成、构建、静态诊断和接口响应人工核对完成验收。
## 2. 支付确认与可靠钱包入账纵向切片
- [x] 2.1 【主通道复杂写辅助Domain、Infrastructure完整边界第三方支付事实确认不迁移其他支付业务确认用例】实现代理充值支付确认领域转换与 Application用支付单类型、渠道、创建配置身份、金额、业务关联和第三方交易号唯一性完成校验同事务条件更新支付单/充值单并写 `agent_recharge.payment_confirmed.v1` Outbox通过编译和静态诊断核对金额篡改、配置错配、交易号冲突与重复确认分支不连接数据库或支付渠道。
- [x] 2.2 【主通道Application + Port/Adapter完整边界微信/支付宝回调分发;不迁移:既有验签算法和其他订单回调】扩展现有微信、支付宝回调按 `tb_payment.order_type=agent_recharge` 调用统一确认用例,保留有界存量 `ARCH` 兼容分支,复用渠道成功报文并记录入站 Integration Log通过编译和静态诊断核对分发、配置身份、金额与幂等分支不发送真实回调。
- [x] 2.3 【主通道:复杂写;辅助:现有 Wallet Domain/Outbox完整边界支付成功后的代理主钱包一次性入账不迁移钱包扣款、退款和线下审批终态】实现并装配代理充值入账 Outbox 消费者,在独立事务复用 `wallet.PostingService`,以充值 ID 唯一引用增加余额、写流水、更新 `2→3` 并写既有钱包事件;注册 Worker通过构建和静态诊断核对幂等分支不连接数据库或运行 Worker 重放。
- [x] 2.4 【主通道:复杂写;完整边界:支付回调不再同步入账;不迁移:旧线下 Service 入口】将新在线支付调用方切到统一确认/异步入账用例,封闭旧 `agent_recharge.Service.HandlePaymentCallback` 对新支付单的同步钱包写路径,确保业务不变量不在旧 Service 与 Application 两处并存;通过代码搜索、静态诊断和构建确认新单只走 `order_type=agent_recharge` 的统一确认与异步入账,旧方法仅保留无支付记录的 `ARCH` 存量兼容。
## 3. 状态读取与回调丢失收敛纵向切片
- [x] 3.1 【主通道Query完整边界代理在线充值本地支付/到账状态;不迁移:既有列表、详情和导出】实现 `GET /api/admin/agent-recharges/:id/payment-status` Query/DTO/路由,复用店铺层级数据范围,仅返回来源、状态名称与支付/完成时间,不返回 `qr_content`、内部错误或其他钱包余额按用户要求仅通过构建、OpenAPI 和静态代码检查验收,不连接数据库或调用接口。
- [x] 3.2 【主通道Infrastructure辅助Application + Port/Adapter完整边界长期待支付和待预下单收敛不迁移通用轮询框架】实现固定批次的受控查单/恢复任务,按创建方式和 `payment_config_id` 调用对应 Adapter成功复用统一确认用例、明确关闭条件关单、未知状态保持并重试每次外呼记录 Integration Log按用户要求仅通过构建和静态代码检查验收不运行 Worker、不调用支付渠道或查询数据库。
- [x] 3.3 【主通道Query + Infrastructure完整边界桌面轮询性能与终态收敛不迁移Redis 支付状态缓存】静态确认支付状态查询命中既有业务关联索引且无 N+1/外部请求,批量查单有固定批次和时间窗口,第三方预下单/查单耗时写入 Integration Log按用户要求不执行 `EXPLAIN ANALYZE`、访问日志或数据库性能实测,并记录该验证边界。
## 4. 文档与发布验收
- [x] 4.1 【主通道Infrastructure完整边界在线充值运行事实分类不迁移全仓审计治理】按用户决定将本 Change 的 Audit Event 明确为 N/A不新增审计表、Writer、Adapter 或发布门禁;充值/支付/钱包/流水继续作为 Domain Ledger预下单/回调/查单使用 Integration Log支付确认/钱包事件使用 Outbox。
- [x] 4.2 【主通道:文档;完整边界:代理桌面扫码充值交付说明;不迁移:手机支付与在线退款】在 `docs/feature-034-agent-wallet-qr-recharge/` 编写中文功能总结、API/前端对接、异常恢复、部署回滚与人工扫码验收说明,同步 README 和 OpenAPI核对所有 DTO 枚举说明来自 `pkg/constants` 原文、导出符号/日志/错误为中文,运行文档生成、构建和静态检查。
- [x] 4.3 【主通道:静态验收;完整边界:已确认扫码充值范围;不迁移:真实生产支付】不新增或运行自动化测试,不启动服务、不连接数据库/Redis、不调用支付渠道或发送回调执行 `go build ./...``go vet ./...` 和 OpenSpec 严格校验,静态核对微信 Native、支付宝 PreCreate、100 元边界、权限隔离、幂等、回调分发、恢复查单与 Worker 注册,并记录未联调边界。
- [x] 4.4 【主通道发布门禁完整边界停机切换与资金单收敛不迁移自动退款】静态核对发布顺序、必要支付配置、回调地址、Outbox/Worker、待支付/已支付监控和回滚步骤;确认回滚只关闭新入口且继续处理已收款订单,不删除待处理支付事实,形成上线检查记录,不执行生产或联调环境操作。