All checks were successful
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 5m39s
- 新增企业设备授权模块(Model、DTO、Service、Handler、Store) - 实现设备授权的创建、查询、更新、删除等完整业务逻辑 - 添加企业卡授权与设备授权的关联关系 - 新增 2 个数据库迁移脚本 - 同步 OpenSpec delta specs 到 main specs - 归档 add-enterprise-device-authorization 变更 - 更新 API 文档和路由配置 - 新增完整的集成测试和单元测试覆盖
62 lines
2.0 KiB
Markdown
62 lines
2.0 KiB
Markdown
# 一次性佣金修复 - 设计
|
||
|
||
## 目标
|
||
|
||
1. 通过 `ShopSeriesAllocation` 创建/更新接口即可配置一次性佣金并生效(你确认 B=1)。
|
||
2. “累计充值触发”场景每次支付成功都累加保存,达到阈值触发一次性佣金发放。
|
||
3. 发放具备幂等:同一资源(卡/设备)只发放一次。
|
||
|
||
## 1) 配置落库
|
||
|
||
### 固定类型(fixed)
|
||
|
||
在 `tb_shop_series_allocation` 写入:
|
||
- enable_one_time_commission
|
||
- one_time_commission_type = fixed
|
||
- one_time_commission_trigger
|
||
- one_time_commission_threshold
|
||
- one_time_commission_mode(fixed/percent)
|
||
- one_time_commission_value
|
||
|
||
### 梯度类型(tiered)
|
||
|
||
在 `tb_shop_series_allocation` 写入:
|
||
- enable_one_time_commission
|
||
- one_time_commission_type = tiered
|
||
- one_time_commission_trigger
|
||
- one_time_commission_threshold
|
||
|
||
并在 `tb_shop_series_one_time_commission_tier` 维护档位:
|
||
- allocation_id
|
||
- tier_type(sales_count/sales_amount)
|
||
- threshold_value
|
||
- commission_mode(fixed/percent)
|
||
- commission_value
|
||
|
||
更新策略建议:
|
||
- 更新配置时:先删除 allocation_id 对应的旧 tiers,再批量插入新 tiers(实现简单且可控)
|
||
|
||
## 2) 累计触发逻辑
|
||
|
||
针对 `accumulated_recharge`:
|
||
- 每次支付成功都更新 `AccumulatedRecharge += orderAmount`
|
||
- 若累计达到阈值且未发放过:
|
||
- 计算佣金金额
|
||
- 创建佣金记录并入账
|
||
- 标记 `FirstCommissionPaid = true`
|
||
|
||
注意:累计的更新应当以“支付成功”为准,避免未支付订单污染累计值。
|
||
|
||
## 3) 测试
|
||
|
||
- 配置落库测试:创建/更新分配后,查询数据库字段与 tiers 表是否一致
|
||
- 累计触发测试:模拟多次支付累计到阈值,验证只发放一次且累计值递增
|
||
- 修复现有单测字段不匹配导致的编译失败
|
||
|
||
## 验收标准
|
||
|
||
- 创建/更新 `ShopSeriesAllocation` 时,一次性佣金配置能正确落库并在查询响应中返回。
|
||
- 累计触发场景下,多次支付能累加并在达到阈值时发放一次性佣金;之后不重复发放。
|
||
- `go test ./...` 通过。
|
||
|