# 一次性佣金修复 - 设计 ## 目标 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 ./...` 通过。