feat: 实现企业设备授权功能并归档 OpenSpec 变更
All checks were successful
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 5m39s
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 文档和路由配置 - 新增完整的集成测试和单元测试覆盖
This commit is contained in:
@@ -0,0 +1,3 @@
|
||||
schema: spec-driven
|
||||
created: 2026-01-29
|
||||
|
||||
@@ -0,0 +1,61 @@
|
||||
# 一次性佣金修复 - 设计
|
||||
|
||||
## 目标
|
||||
|
||||
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 ./...` 通过。
|
||||
|
||||
@@ -0,0 +1,30 @@
|
||||
# 一次性佣金修复:配置可落库 + 累计触发可累加 + 单测修复
|
||||
|
||||
## Why
|
||||
|
||||
一次性佣金能力已引入配置字段与计算逻辑,但目前存在两类关键问题:
|
||||
|
||||
1. **配置无法生效**:你确认希望通过 `ShopSeriesAllocation` 的创建/更新接口(B=1)直接配置一次性佣金并落库生效;否则会出现“接口看起来支持配置,但实际不生效”的问题。
|
||||
2. **累计触发无法累加**:你确认累计规则为“每次购买都要累加,达到阈值就发放佣金”;如果不写回累计值,阈值永远达不到。
|
||||
|
||||
此外,相关单测目前编译失败,需要修复以保证回归可控。
|
||||
|
||||
## What Changes
|
||||
|
||||
- **一次性佣金配置落库**:
|
||||
- 在 `ShopSeriesAllocation` 创建/更新时写入一次性佣金相关字段
|
||||
- 若类型为梯度(tiered),同步维护 `tb_shop_series_one_time_commission_tier` 档位数据(更新时先清理再重建或做差量更新)
|
||||
- **累计触发逻辑修复**:
|
||||
- 对“累计充值触发”场景,每次支付成功都写回累计金额
|
||||
- 达到阈值的那次发放一次性佣金,并标记 `FirstCommissionPaid` 防止重复发放
|
||||
- **测试修复与补充**:
|
||||
- 修复 `tests/unit/my_commission_service_test.go` 字段不匹配导致的编译失败
|
||||
- 新增测试覆盖:配置落库与累计逻辑
|
||||
|
||||
## Impact
|
||||
|
||||
涉及模块(预期):
|
||||
- 分配配置:`internal/service/shop_series_allocation/service.go`、`internal/store/postgres/shop_series_one_time_commission_tier_store.go`
|
||||
- 佣金计算:`internal/service/commission_calculation/service.go`
|
||||
- 测试:`tests/unit/my_commission_service_test.go` 及新增用例
|
||||
|
||||
@@ -0,0 +1,24 @@
|
||||
# 一次性佣金修复 - 实现任务
|
||||
|
||||
## 1. 配置落库(ShopSeriesAllocation)
|
||||
|
||||
- [ ] 1.1 更新 `internal/service/shop_series_allocation/service.go`:在创建分配时处理 `EnableOneTimeCommission/OneTimeCommissionConfig` 并落库
|
||||
- [ ] 1.2 更新 `internal/service/shop_series_allocation/service.go`:在更新分配时支持更新一次性佣金配置并落库
|
||||
- [ ] 1.3 梯度配置:使用 `ShopSeriesOneTimeCommissionTierStore` 在创建/更新时写入 tiers(更新时先清理再重建)
|
||||
- [ ] 1.4 参数校验:启用一次性佣金时必须提供配置;fixed 必须有 mode/value;tiered 必须有 tiers
|
||||
|
||||
## 2. 累计触发逻辑修复
|
||||
|
||||
- [ ] 2.1 更新 `internal/service/commission_calculation/service.go`:累计触发场景每次支付成功都写回累计金额
|
||||
- [ ] 2.2 达到阈值时仅发放一次,发放后标记 `FirstCommissionPaid=true`
|
||||
|
||||
## 3. 测试修复与补充
|
||||
|
||||
- [ ] 3.1 修复 `tests/unit/my_commission_service_test.go`:将 `CommissionType` 调整为 `CommissionSource`
|
||||
- [ ] 3.2 新增测试:一次性佣金配置落库(含 tiered tiers 落库)
|
||||
- [ ] 3.3 新增测试:累计触发多次支付后达到阈值触发一次性佣金且不重复
|
||||
|
||||
## 4. 验证
|
||||
|
||||
- [ ] 4.1 运行 `go test ./...` 确保通过
|
||||
|
||||
Reference in New Issue
Block a user