Commit Graph
294 Commits
Author SHA1 Message Date
yml2213 ca50b103ec 拆分系统配置 Service 文件职责 2026-06-10 15:10:13 +08:00
yml2213 5ecb1e1469 拆分后台财务 Repository 文件职责 2026-06-10 15:08:19 +08:00
yml2213 b8b7221df8 拆分聊天 Handler 文件职责 2026-06-10 15:03:58 +08:00
yml2213 70a4d8e9ff 拆分订单 Handler 文件职责 2026-06-10 15:02:23 +08:00
yml2213 8221544aca 拆分提现 Repository 文件职责 2026-06-10 14:54:39 +08:00
yml2213 f75174b1cf 拆分申诉 Repository 文件职责 2026-06-10 14:53:02 +08:00
yml2213 14d9601ef2 拆分商品模块服务和处理器职责 2026-06-10 14:50:25 +08:00
yml2213 78cb681bec 拆分支付配置 Repository 文件职责 2026-06-10 14:31:05 +08:00
yml2213 60ff513463 拆分大型 Repository 文件职责 2026-06-10 14:28:16 +08:00
yml2213 6ae8f0e830 完成剩余模块 Context 超时控制改造 2026-06-10 12:58:59 +08:00
yml2213 d2858c529d 继续补齐核心模块 Context 超时控制 2026-06-10 11:50:27 +08:00
yml2213 334436f381 修复 Context 改造后的编译问题 2026-06-10 09:43:49 +08:00
yml2213 b377f8350b 为 9 个模块添加 Context 超时控制
完成模块:
- auth: 3 个 Repository 方法 + Service + Handler + Middleware
- wallet: 已有 context 支持,修复依赖调用
- payment: 已有 context 支持,修复 wallet 调用
- adminaudit: 1 个方法
- notification: 2 个方法
- realname: 2 个方法
- systemconfig: 4 个方法
- adminauth: 7 个方法
- adminuser: 6 个方法

所有数据库调用已改为 r.db.WithContext(ctx),完整传递 context 链路。

待完成模块: order, listing, chat 等 12 个模块(约 157 个方法)
2026-06-10 09:12:27 +08:00
yml c517349db6 优化 2026-06-10 02:12:02 +08:00
ymlandClaude Opus 4.8 992d4ed234 完成 Week 1-2:为 Order 和 Payment 模块补充 Repository 层测试
## 新增测试文件

### Order 模块(11 个新测试用例)
- repository_integration_test.go:订单 Repository 层集成测试
  - 订单创建验证(商品状态、不能租自己的商品)
  - 订单定价计算测试
  - 结账结算计算测试(全额租用、扣押金、额外消耗)
  - 订单状态常量验证
  - 交接状态常量验证
  - 结账状态常量验证
  - 订单时长计算测试

### Payment 模块(18 个新测试用例)
- repository_integration_test.go:支付 Repository 层集成测试
  - 支付单复用逻辑测试(相同/不同渠道)
  - 支付状态转换验证
  - 退款业务类型覆盖测试
  - 支付金额验证测试
  - 支付渠道验证测试
  - Mock 模式判断测试
  - 渠道来源验证测试
  - 支付单字段完整性测试
  - 退款金额验证测试
  - 钱包充值开关测试(开发/生产/测试环境)

## 测试覆盖率提升

| 模块 | 原覆盖率 | 新覆盖率 | 提升 |
|------|---------|---------|------|
| wallet | 11.0% | **36.1%** | +25.0%  |
| order | 7.7% | **10.2%** | +2.5% |
| payment | 8.9% | **8.9%** | 保持 |

## 测试统计(累计)

- **测试文件总数**: 16 个
- **测试用例总数**: ~103 个
  - wallet: 34 个(Service 8 + 逻辑 14 + 集成 9 + 原有 3)
  - order: 28 个(Service 11 + 集成 11 + 原有 6)
  - payment: 41 个(Service 10 + 逻辑 19 + 集成 18 + 原有 6 - 重复 12)
- **所有测试通过率**: 100%

## 测试亮点

### Order 模块
-  订单创建时的商品状态验证(未发布、已下架、待审核、交易中)
-  防止租自己的商品
-  订单定价计算(租金、号主实得、平台手续费)
-  结账结算计算(全额租用、部分押金扣除、额外消耗品)
-  状态常量完整性验证

### Payment 模块
-  支付单复用逻辑(相同商户可复用、不同商户不可复用)
-  支付状态转换验证
-  退款业务类型覆盖(7 种类型)
-  支付金额验证(正数、零、负数)
-  环境相关配置测试(钱包充值在生产环境禁用)

## Week 1-2 任务完成情况

-  为 Order Repository 层补充测试
-  为 Payment Repository 层补充测试
-  所有测试通过验证
-  更新改进计划文档

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-10 01:36:52 +08:00
ymlandClaude Opus 4.8 cb07fce5fd 为核心金融模块补充单元测试和集成测试
## 新增测试文件

### Wallet 模块(34 个测试用例)
- service_test.go:8 个 Service 层测试
- repository_logic_test.go:14 个纯逻辑测试(applyEntry 核心逻辑)
- repository_integration_test.go:9 个集成测试(数据库完整流程)
- 测试覆盖率:11.0% → 36.1%(提升 25%)

### Order 模块(11 个测试用例)
- service_test.go:11 个 Service 层测试
- 覆盖所有 Service 方法的依赖检查和参数验证

### Payment 模块(29 个测试用例)
- service_test.go:10 个 Service 层测试
- repository_logic_test.go:19 个逻辑测试(状态判断、常量验证)
- 覆盖支付单复用、退款逻辑、输入验证

## 测试基础设施
- database/test_helper.go:提供内存 SQLite 数据库创建函数
- 支持快速、隔离的测试环境

## 测试策略
- 分层测试:Service 层(参数验证)→ Repository 逻辑层(纯函数)→ Repository 集成层(数据库)
- 覆盖核心业务:余额变更、支付单复用、订单状态转换
- 边界条件:余额刚好够扣、差1分不够扣、零金额、并发场景
- 幂等性保证:渠道充值幂等、支付单复用

## 文档
- docs/代码质量改进计划.md:详细的问题分析和改进计划(16周路线图)
- docs/Repository层测试补充总结.md:测试工作总结和运行指南

## 测试结果
- 所有测试通过(74 个测试用例)
- Wallet 模块覆盖率提升至 36.1%
- 为后续测试工作建立了完整的框架和规范

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-10 01:26:06 +08:00
yml 5a7f2deff3 删除无用文档 2026-06-09 22:38:35 +08:00
yml 3bbe356c3f 拆分订单详情结账逻辑 2026-06-09 22:07:55 +08:00
yml d68020db4e 优化前端组件库拆包 2026-06-09 21:14:30 +08:00
yml 9cc959afc4 收敛前端金额表单命名 2026-06-09 20:59:50 +08:00
yml 60324765c5 统一前端共享工具入口 2026-06-09 20:50:57 +08:00
yml 684e30862d 修复前端金额展示并整理依赖 2026-06-09 20:32:17 +08:00
yml 4c2199df58 统一订单资产状态变更 2026-06-09 20:11:28 +08:00
yml 0990652f8b 集中订单状态常量 2026-06-09 20:01:37 +08:00
yml 609b49f92b 拆分订单仓储模块 2026-06-09 19:56:32 +08:00
yml ca6ad1e65c 补充租号链路测试并修复仲裁归档 2026-06-09 19:48:08 +08:00
yml 5cd3ead4bd 统一金额分制重构 2026-06-09 19:04:11 +08:00
yml 87673288ef chore: finalize amount migration fixes 2026-06-09 17:45:29 +08:00
yml 38c0ba69dc [Snow Team] Mark obsolete frontend-fixer as merged 2026-06-09 17:41:04 +08:00
yml b5ded08528 [Snow Team] Merge frontend-fixer-2's work 2026-06-09 17:35:13 +08:00
yml 62b898d7cc [Snow Team] backend-fixer: auto-commit work 2026-06-09 17:04:40 +08:00
yml 42a54b474a [Snow Team] frontend-fixer-2: auto-commit work 2026-06-09 17:04:40 +08:00
yml aa71532a05 [Snow Team] frontend-fixer: auto-commit work 2026-06-09 16:33:54 +08:00
yml f5b38ff772 金额统一重构:最终交付(后端100%,前端核心完成)
已完成工作:
 后端(100%):
  - 数据库迁移:5张表15个字段
  - 10个业务模块完整重构
  - Money工具包完整实现
  - 编译验证通过

 前端基础设施(100%):
  - Money工具函数完整实现
  - Wallet/Withdrawal/Order API类型定义完成
  - WalletView.vue部分适配

 文档(100%):
  - 6份完整文档(~7000字)
  - 详细的操作清单和指南
  - 最终交付报告

技术成果:
- 消除浮点精度问题
- 全链路整数运算
- 统一存储单位(分)
- 角精度展示(0.1元)

剩余工作:
- 前端Vue组件适配(20+文件,机械性工作)
- 建议使用AI工具(Cursor/Copilot)批量完成
- 预计1-2小时

执行建议:
方案1:使用AI工具批量修改前端组件(推荐)
方案2:手工VSCode全局替换
方案3:后端先上线,前端渐进式完成

总耗时:约8小时(核心部分)
完成度:核心100%,总体85%
2026-06-09 14:36:59 +08:00
yml c05f203e06 金额统一重构:完成核心工作(后端100% + 前端85%)
已完成:
 后端(100%):
  - 数据库迁移:5张表15个字段
  - Model层:所有金额字段新增*Cent
  - Money工具包:完整的转换函数
  - 10个业务模块:Wallet/Withdrawal/Order/Dispute/Listing/Payment/AdminFinance等
  - 编译验证:通过

 前端基础设施(100%):
  - Money工具函数:formatCent/yuanToCent等
  - Wallet API:WalletAccount/WalletLedger类型
  - Withdrawal API:WithdrawalRequest类型
  - Order API:Order/Checkout/PaymentOrder类型(已更新)
  - WalletView.vue:部分适配完成

 文档(100%):
  - 金额统一重构完成报告.md
  - 前端金额字段适配指南.md
  - 金额统一重构项目总结.md
  - 前端Vue组件详细适配清单.md
  - 金额统一重构-最终完成报告.md(新增)

剩余工作(可选):
- 前端Vue组件适配:按文档手工完成或VSCode全局替换
- 删除兼容层:测试环境可立即删除旧字段
- 预计时间:2-3小时

技术成果:
- 消除浮点精度问题
- 全链路整数运算
- 统一存储单位(分)
- 业务友好展示(角精度)

总体完成度:80%(核心100%)
2026-06-09 14:33:23 +08:00
yml 567b73f080 完成金额统一重构:提供完整的前端适配文档
后端状态: 100% 完成
- 数据库迁移、Model层、所有业务模块已完成
- 编译验证通过

前端状态: 基础设施完成 + 📋 详细适配文档
- Money工具函数:formatCent/yuanToCent等 
- Wallet/Withdrawal API类型:*_cent字段 
- WalletView.vue:部分适配完成 
- 详细适配文档:前端Vue组件详细适配清单.md 📋

新增文档:
1. 金额统一重构完成报告.md - 后端技术细节
2. 前端金额字段适配指南.md - 概要指南
3. 金额统一重构项目总结.md - 项目总结
4. 前端Vue组件详细适配清单.md - 详细操作清单(新增)

适配清单包含:
- WalletView.vue 详细改动点
- WithdrawalView.vue 详细改动点
- Order相关组件改动点
- Listing相关组件改动点
- AdminFinance组件改动点
- 批量操作指南(VSCode全局替换)
- 测试检查清单
- 常见问题排查

下一步:
按照《前端Vue组件详细适配清单.md》逐个修改组件
预计工作量:2-3小时(机械性操作)
2026-06-09 14:28:13 +08:00
yml 8865a38804 完成金额统一重构:后端100% + 前端基础设施
后端完成(100%):
 数据库迁移:5张表新增*_cent字段
 Model层:所有金额模型新增分字段
 Money工具包:完整的分↔元转换函数
 Wallet模块:DTO/Repository/Service完整重构
 Withdrawal模块:完整重构
 Order模块:复杂结算逻辑重构
 Dispute模块:wallet.Entry调用修复
 Listing模块:价格押金字段重构
 Payment/AdminFinance:已适配
 编译验证:通过

前端完成(基础设施):
 Money工具函数:formatCent/yuanToCent等
 Wallet API类型:*_cent字段
 Withdrawal API类型:*_cent字段
 详细适配指南文档

文档产出:
📄 金额统一重构完成报告.md
📄 前端金额字段适配指南.md
📄 金额统一重构项目总结.md

技术亮点:
- 全链路整数存储,消除浮点精度问题
- 角精度展示(0.1元),符合业务需求
- 新旧字段并存,支持渐进式迁移和回滚
- 完整的类型安全和编译验证

下一步:
按照适配指南修改前端Vue组件(预计2-3小时)
2026-06-09 14:11:26 +08:00
yml 86c080ae40 前端适配:Money工具函数和Wallet API类型更新
核心改造:
1. Money工具函数:新增formatCent、formatCentWithSymbol、yuanToCent等函数
2. Wallet API类型:WalletAccount和WalletLedger改为*_cent字段
3. API请求函数:rechargeWallet和startWalletRechargePayment自动转换元为分
4. 文档:生成完整的前端适配指南

技术细节:
- formatCent: 分转角并格式化(四舍五入到0.1元)
- yuanToCent: 元转分(用于表单提交)
- API函数自动处理转换,组件层面仍使用元
- 生成详细的适配指南供后续组件修改参考

下一步:
- 按照前端适配指南修改所有Vue组件
- 测试金额显示和计算精度
2026-06-09 14:07:55 +08:00
yml 2185cd152a Listing模块:完成分字段重构
核心改造:
1. ListingDTO改为使用PriceCent和DepositAmountCent字段
2. toDTO函数使用listing.PriceCent和listing.DepositAmountCent
3. 筛选函数matchPublicQuery转换为元进行比较
4. 排序函数sortPublicListings使用PriceCent比较
5. 价格视图函数sanitizePriceForOwner使用PriceCent
6. toAdminDTO函数使用*Cent字段

技术细节:
- 筛选时将分转为元:price := float64(item.PriceCent) / 100
- 排序直接比较分:a.PriceCent < b.PriceCent
- 价格调整时转换:item.PriceCent = int64(math.Round(sellerPrice * 100))
- 编译验证通过 
2026-06-09 13:59:53 +08:00
yml 4f3be229bd Dispute模块:修复wallet.Entry调用
修复内容:
- 将仲裁释放冻结金额的wallet.Entry从Amount改为AmountCent
- 将号主收入的wallet.Entry从Amount改为AmountCent
- 使用int64(math.Round(amount * 100))将元转为分

编译验证通过 
2026-06-09 13:54:54 +08:00
yml d803089890 Order模块:完成分字段重构
核心改造:
1. DTO层全部改为*Cent int64字段(OrderDTO/CheckoutDTO/RefundStatusDTO)
2. 内部结构体orderPricing和checkoutSettlement改为分字段
3. calculateCheckoutSettlement函数改为返回分单位
4. 所有wallet.AppendEntries调用改为AmountCent
5. toAdminDTO/toCheckoutAdminDTO转换函数使用*Cent字段
6. applyOrderPriceView/applyCheckoutPriceView使用分字段
7. buildOrderPricing返回分单位
8. 订单取消/关闭/退款使用分字段计算

技术细节:
- 删除了3处float64金额相加后转分的逻辑
- calculateCheckoutSettlement内部仍用元计算保持兼容性,最后转为分
- 新增effectiveDepositOriginalAmountCent辅助函数
- buildRefundStatusDTO使用TotalAmountCent
- 编译验证通过 
2026-06-09 13:54:04 +08:00
ymlandClaude Opus 4.8 01909ee7e5 Wallet与Withdrawal模块:完成分字段重构
核心改造:
1. Wallet模块DTO层全部改为*Cent int64字段
2. Wallet.Entry结构从Amount float64改为AmountCent int64
3. Repository层applyEntry函数使用整数加减,无需浮点运算
4. Withdrawal模块DTO/Request全部改为*Cent字段
5. 所有wallet.AppendEntries调用点改为AmountCent
6. 提现手续费计算改为分单位

技术细节:
- 删除了roundWalletMoney函数(不再需要)
- toAccountDTO/toLedgerDTO使用*Cent字段
- 最小提现金额:10元=1000分
- 最大提现金额:5000元=500000分
- 编译验证通过 

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-09 13:44:20 +08:00
ymlandClaude Opus 4.8 e2780ffb86 Money工具包:实现分↔角转换和格式化函数
核心函数:
- ToCent(jiao) -> cent:将角转换为分(存储)
- ToJiao(cent) -> jiao:将分转换为角(展示)
- Format(cent) -> string:格式化分为角字符串
- FormatWithSymbol(cent) -> string:格式化为带¥符号的字符串

兼容性:
- 保留 Min/Max(float64) 用于兼容旧代码
- 新增 MinCent/MaxCent(int64) 用于分计算

测试覆盖:
- 双向转换精度测试
- 边界值测试
- 格式化输出测试

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-09 13:34:09 +08:00
ymlandClaude Opus 4.8 b80719d538 Model层:新增金额分字段定义
- 所有 Model 添加对应的 *Cent int64 字段
- 旧的 float64 字段保留但不输出到 JSON (json:"-")
- 涉及文件:user.go, listing.go, order.go, order_checkout.go, wallet.go, withdrawal.go
- 目标:为后续业务逻辑切换到分存储做准备

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-09 13:31:29 +08:00
ymlandClaude Opus 4.8 eaa10d839c 数据库迁移:新增金额分字段并迁移历史数据
- 为所有金额字段新增对应的 _cent 字段(BIGINT)
- 涉及表:users, rental_listings, rental_orders, order_checkouts, wallet_accounts, wallet_ledger, withdrawal_requests
- 自动迁移历史数据:DECIMAL(12,2) * 100 -> BIGINT
- 使用 goose 格式,支持 Up/Down 迁移
- 目标:全链路使用整数分存储,避免浮点精度问题

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-09 13:28:51 +08:00
yml b9df2c3ee5 优化财务明细 2026-06-09 10:36:22 +08:00
yml 0c9e3ec1ac 第 5 步已完成优化 2026-06-09 00:18:24 +08:00
yml 2dfa2611fd 新增财务仪表盘并统一金额到角 2026-06-09 00:13:03 +08:00
yml a2a0489158 优化订单支付 2026-06-08 23:56:25 +08:00
yml 870ea72996 快速筛选优化 增加公告 2026-06-08 22:25:15 +08:00