Commit Graph
67 Commits
Author SHA1 Message Date
yml2213 1a4776bba0 支持结账多轮协商与按实际消耗双比例结算
允许双方最多 6 轮修改结账方案;哈夫币按实际消耗与 buyer/seller 比例计价,打超从押金扣,押金不足禁止自动完结并引导人工争议。同步收紧结账明细展示密度。
2026-07-18 20:35:16 +08:00
yml2213 98772867a7 统一结账押金字段为押金赔付扣除
号主修正去掉无效的其他押金扣款,仅保留押金赔付扣除;
前后端与账单文案统一,修正时 other 与 deduct 对齐。
2026-07-17 17:17:29 +08:00
yml2213 e241607535 支持号主与租客查看自己的发布/订单详情
新增卖家商品详情页;订单详情底部增加可折叠账号快照,已完成订单展示结账明细。
2026-07-16 20:47:33 +08:00
yml2213 2ca6fd9306 完善测试建表并统一前端格式 2026-07-14 01:32:14 +08:00
yml2213 42b250cd2c 账号上下架增加统计 2026-07-11 23:37:24 +08:00
yml2213 090a90a268 添加订单押金暂扣与归还 2026-07-05 19:35:57 +08:00
yml2213andClaude Opus 4.8 be5d322c10 feat: 客服封存订单功能(号主失联场景)
新增客服「封存订单」动作,用于号主失联、无法联系的场景:单事务内
完成关闭订单、全量原路退款、永久封存关联商品、解散发布群、双方通知
与审计日志。

- 新增 listing 终态 sealed(封存),区别于可恢复的 offline
- listingLockedForOwnerMutation 锁定 sealed,号主无法再编辑/提审/上架
- 解散群聊按 listing_id 查发布群(listing_group)置 archived,
  阻断所有成员发言并留系统消息
- 新增 order.AdminSeal 及 /admin/orders/:id/seal 路由
- 前端:卖家页 PC/移动端 sealed 视为终态禁用操作,客服后台新增
  「封存订单」按钮与二次确认

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-29 22:52:20 +08:00
yml2213 60e6eb9d18 修复驳回退款恢复订单时交接进度被重置的问题
- 取消订单时从待交接状态取消不再覆盖 handoff_status,保留原有交接进度
- 驳回恢复时仅在 cancelled 或 renter_confirm_timeout 时重置为 pending_owner
2026-06-29 01:42:00 +08:00
yml2213 3215e1c8c5 优化退款审核逻辑:驳回分恢复订单/关闭订单两种,优化状态标签,清理无用脚本
- AdminRejectRefund 新增 action 参数:restore 恢复订单至待交接,close 关闭订单并下架
- 前端驳回改为弹窗双选项:仅驳回恢复订单 / 驳回并关闭
- 清空 frontend placeholder 文件
- handleFileUpload 并发控制优化:清空上传列表时重置计数和 OCR 槽位
- v-for key 改为 _id 避免预览串图
- preview-src-list 改为单图预览
- deploy-prod.sh 新增 docker image/builder prune 自动清理垃圾
- scripts/ 删除无用的压测文件(load_stress.go 等 4 个)
2026-06-28 22:09:24 +08:00
yml2213 c92cd03b8c 退款审核功能:待交接取消不再自动退款,改为客服审核后原路退回
- 租客在待交接状态取消订单不再自动退款,改为 refund_status=pending_review
- 新增退款审核页面 /admin/orders/refund-review,客服可逐个审核
- 新增 POST /refund/approve 通过退款、POST /refund/reject 驳回退款
- 新增 GET /orders/refund-pending 查询待审核退款订单列表
- 优化状态标签表述:已取消→租客已取消、已关闭→客服已关闭、异常→客服介入
- 新增 refund_status: pending_review 及其前端标签「待客服审核退款」
- AdminOrderDetailView 退款状态改用统一 refundStatusLabel
2026-06-28 21:14:55 +08:00
yml2213 21aabd77f1 商品已完成优化 2026-06-27 23:01:03 +08:00
yml2213 b2e52e1d75 修复归还逾期订单重置 2026-06-21 09:28:50 +08:00
yml2213 72285ed638 修复超时订单重置流程 2026-06-19 18:36:46 +08:00
yml 48af6f39c0 优化订单管理 2026-06-18 17:09:02 +08:00
yml f4361c9804 优化发布群租客清退与历史消息 2026-06-18 09:39:23 +08:00
yml 272b2cb71e 优化客服群聊订单信息展示 2026-06-18 00:44:45 +08:00
yml 0add23dedb 修复预计 截止时间 2026-06-17 23:10:38 +08:00
ymlandClaude Opus 4.8 ad70b24fb6 提交2: 发布群核心功能实现
- 实现 EnsureListingConversation: 发布时建发布群,发欢迎语+二维码
- 实现 AddRenterToListingConversation: 付款后拉租客进群
- 实现 RemoveRenterFromListingConversation: 订单终态移出租客
- 实现消息可见性过滤: 租客只能看到 joined_at 之后的消息
- listing 模块注入 ListingChatCreator 接口,发布时建群
- ListingDTO 新增 listing_group_conversation_id 字段
- 付款流程改为拉租客进发布群(替代建订单群)
- 订单完成和取消时自动移出租客
- 创建 chat 适配器实现接口解耦

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-17 15:57:10 +08:00
yml2213andClaude Opus 4.8 8192344027 优化号主交接超时卡死问题
- 号主交接超时(owner_timeout)后允许补提交交接说明,避免临时延误导致订单卡死
- 后台新增"重置交接"动作,可将超时订单恢复为待号主交接并刷新计时
- 交接超时改以进入待交接时刻为基准计算,新增 handoff_started_at 字段

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-17 04:16:31 +08:00
yml a275a006eb 修复支付取消与成功统计 2026-06-14 23:58:39 +08:00
yml 6ff7692f3e 支付确认强一致化: 订单推进与标 paid 合并为单事务
confirmPaid 原为「先 ConfirmPaidFromChannel 独立事务推进订单, 再 Updates 标 paid」两步非原子, 崩溃在中间会出现订单已 pending_handoff 但 payment 仍 paying 的不一致窗口, 恢复依赖渠道回调重发而非事务闭环。

改造:
- 新增 ConfirmPaidFromChannelTx(tx, orderID) 让 order 模块共享 payment 模块的外部事务, 订单推进与 payment 标 paid 落进同一事务, 崩溃一致性窗口消除
- NotifyNewConversation 提到事务提交后触发, 避免事务回滚后误发会话通知
- payment_orders 加行锁后 Updates, 防并发回调覆盖写
- 删除未使用的 providerBizNo 死参数

锁顺序全局一致 (order→listing→account→payment), 与 payment_start/refund/Cancel 路径无反向加锁, 无死锁风险。

新增集成测试:
- 正向: 验证 confirmPaid 后 order/listing/account/payment 全部正确推进
- 回滚: payment 更新失败时 order 不残留 pending_handoff, 验证事务原子性

go build/vet/test 通过。
2026-06-14 09:42:26 +08:00
yml2213 3ef7705776 优化申诉仲裁流程和证据展示 2026-06-13 21:26:38 +08:00
yml2213 28c4efc669 解耦订单和申诉模块外部依赖 2026-06-10 15:41:31 +08:00
yml2213 70a4d8e9ff 拆分订单 Handler 文件职责 2026-06-10 15:02:23 +08:00
yml2213 d2858c529d 继续补齐核心模块 Context 超时控制 2026-06-10 11:50:27 +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 3bbe356c3f 拆分订单详情结账逻辑 2026-06-09 22:07:55 +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 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 62b898d7cc [Snow Team] backend-fixer: auto-commit work 2026-06-09 17:04:40 +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
yml 0b419f5084 修复仲裁退款并新增免押额度 2026-06-08 21:00:39 +08:00
yml 494b2c068a 贯通商品编号全流程 2026-06-08 20:00:07 +08:00
yml2213 954c3d6be3 修复拉卡拉支付时间偏差 2026-06-07 20:42:57 +08:00
yml2213 a5e55bc045 测试修复15分钟bug 2026-06-07 20:05:56 +08:00
ymlandClaude Opus 4.8 ec9baada67 统一管理后台分页样式
- 新建 AdminTablePagination 组件,统一分页 UI
- 改造 6 个前端页面使用统一分页组件:
  - 管理员管理
  - 用户管理
  - 申诉管理
  - 审计日志
  - 公告管理
  - 钱包流水
- 订单管理前后端完整改造:
  - 后端:添加 PaginatedResult 结构,支持 page/page_size 参数
  - 前端:API 支持分页参数,页面使用统一分页组件
- 所有列表页分页样式统一为商品管理的 .table-pagination 设计

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-06 00:13:59 +08:00
yml2213 498e3d7bde 优化订单结算金额展示和钱包流水号 2026-06-05 00:37:50 +08:00
yml2213andClaude Opus 4.7 4ebf7f75fe refactor: 统一全项目金额精度为角(0.1元)
## 变更概述
将全项目金额处理从整元四舍五入统一为角精度(0.1元),提高金额计算准确性和显示一致性。

## 后端改动
- 新增 pkg/money/format.go 统一金额处理包
  - Round(): 角精度四舍五入
  - Min/Max(): 金额比较
  - Format(): 格式化字符串
- 更新业务模块使用统一金额函数
  - internal/modules/order: 订单结算改为角精度
  - internal/modules/dispute: 纠纷金额处理
  - internal/modules/listing: 商品定价和存储
- 更新测试用例期望值为角精度

## 前端改动
- 新增 shared/utils/money.ts 金额工具函数
  - roundMoney(): 角精度四舍五入
  - formatMoney(): 格式化为字符串(保留1位小数)
  - formatMoneyWithSymbol(): 添加¥符号
- 更新金额计算和显示逻辑
  - shared/utils/pricing.ts: 定价计算
  - shared/utils/listingDisplay.ts: 商品显示
  - shared/composables/useMoney.ts: 组合式函数
- 修复视图文件导入声明
  - features/listings/views: 商品详情页
  - features/seller/views: 卖家管理页

## 效果
- 金额显示:¥123.0(统一保留1位小数)
- 计算精度:12.45 -> 12.5(角精度)
- 减少误差:避免整元四舍五入损失
- 显示一致:全项目统一格式

## 测试
-  后端单元测试通过
-  TypeScript 类型检查通过
-  开发环境正常运行

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-06-04 16:42:49 +08:00
yml 0bdc5ae7a9 优化订单号生成规则 2026-06-03 23:05:57 +08:00
yml 13e3a41d63 修复完成订单自动回显 2026-06-03 22:12:09 +08:00
yml c80d3f960e 优化支付退款钱包链路 2026-06-03 21:47:04 +08:00
yml ae8928f458 开始增加支付-1 2026-06-03 12:21:23 +08:00
yml 6dcea2d56c 完善日志和审计链路 2026-06-02 21:40:23 +08:00
yml c54e3936ab 修复结账金额和后台类型 2026-05-27 10:28:05 +08:00
yml2213 8cbd06dca4 后台系统配置列表现在只返回当前真实使用的配置项 2026-05-27 08:40:03 +08:00
yml2213 a002987784 SSE 推送替代轮训 2026-05-27 06:18:55 +08:00