fix: 统一佣金状态常量并修复佣金明细关联查询
All checks were successful
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 7m33s

- 删除 model/commission.go 中与 constants 包冲突的旧常量(值=1/2)
- 所有服务层改用 constants.CommissionStatusReleased(值=3)写入和查询
- 数据库迁移:status 1→3(已发放),2→4(已失效)
- 修复佣金明细列表接口,通过 JOIN 关联返回 order_no、iccid、virtual_no、order_created_at
- 新增 seller_shop_id / seller_shop_name 销售来源字段
- 统计接口过滤条件从精确匹配改为排除无效(NOT IN 4,99)
- 更新 OpenAPI 文档及 commission-record-query spec
This commit is contained in:
2026-04-11 10:42:37 +08:00
parent d0989c66bb
commit 677d6239ce
17 changed files with 604 additions and 38 deletions

View File

@@ -0,0 +1,67 @@
## Why
佣金系统存在**状态常量定义冲突**和**接口数据不完整**两大问题:
1. **常量冲突**`model/commission.go``pkg/constants/iot.go` 定义了两套不同的佣金状态常量,值 1 在 model 包表示"已入账",在 constants 包表示"已冻结",导致佣金记录显示错误
2. **接口缺陷**`/commission-records` 接口返回的 ICCID、OrderNo、VirtualNo 等字段全部为空,且缺少销售来源店铺信息
这些问题导致:差价佣金被错误显示为"已冻结"、佣金明细无法关联到具体订单和卡、无法追溯佣金产生的销售来源。
## What Changes
### 1. 统一佣金状态常量
- 删除 `model/commission.go` 中的旧常量定义
- 统一使用 `pkg/constants/iot.go` 的四态定义(已冻结→解冻中→已发放→已失效)
- 迁移数据库中 status 值1→3, 2→4
- 修复 12 处引用旧常量的代码位置
### 2. 修复 commission-records 接口关联查询
- Store 层实现 JOIN 关联查询(订单表、卡表、设备表)
- 实现 ICCID、OrderNo、DeviceNo 的过滤条件
- Service 层正确填充 OrderNo、ICCID、VirtualNo、OrderCreatedAt 字段
### 3. 新增销售来源店铺信息
- DTO 新增 SellerShopID、SellerShopName 字段
- 关联查询订单的 `seller_shop_id` 显示销售来源
### 4. 修复佣金统计查询语义
- `GetStats``GetDailyStats` 的过滤条件从"精确匹配已发放status=1"改为"排除无效和待审status NOT IN 4,99"
- 使总佣金统计包含冻结中的佣金(面向未来的正确语义)
### 5. 数据迁移
- 编写数据库迁移脚本转换历史数据
## Capabilities
### New Capabilities
- `commission-record-query`: 佣金记录完整查询能力
- 支持关联查询订单、卡、设备信息
- 支持按 ICCID、订单号、设备号过滤
- 显示销售来源店铺信息
### Modified Capabilities
- `commission-status`: 佣金状态定义
- 状态值从二态(已入账、已失效)扩展为四态(已冻结、解冻中、已发放、已失效)
## Impact
### 受影响代码
| 文件 | 影响 |
|------|------|
| `model/commission.go` | 删除旧常量定义 |
| `pkg/constants/iot.go` | 确认常量定义正确 |
| `internal/service/commission_calculation/service.go` | 替换常量引用3处 |
| `internal/service/shop_commission/service.go` | 替换常量引用 + 填充关联字段2处 |
| `internal/service/refund/service.go` | 替换常量引用1处 |
| `internal/service/recharge/service.go` | 替换常量引用1处 |
| `internal/store/postgres/commission_record_store.go` | 实现过滤条件和 JOIN修复统计查询语义 |
| `internal/model/dto/shop_commission_dto.go` | DTO 新增字段 |
### 受影响接口
- `GET /api/admin/shops/:shop_id/commission-records` - 返回值结构变更(新增字段)
### 数据库迁移
- `tb_commission_record.status`: 1→3, 2→4
### 依赖项
- 无新增外部依赖