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