Files
junhong_cmp_fiber/草稿.md
huang 353621d923
All checks were successful
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 6m33s
移除所有测试代码和测试要求
**变更说明**:
- 删除所有 *_test.go 文件(单元测试、集成测试、验收测试、流程测试)
- 删除整个 tests/ 目录
- 更新 CLAUDE.md:用"测试禁令"章节替换所有测试要求
- 删除测试生成 Skill (openspec-generate-acceptance-tests)
- 删除测试生成命令 (opsx:gen-tests)
- 更新 tasks.md:删除所有测试相关任务

**新规范**:
-  禁止编写任何形式的自动化测试
-  禁止创建 *_test.go 文件
-  禁止在任务中包含测试相关工作
-  仅当用户明确要求时才编写测试

**原因**:
业务系统的正确性通过人工验证和生产环境监控保证,测试代码维护成本高于价值。

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-11 17:13:42 +08:00

276 lines
24 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
我发现现在的关于佣金的一致性或者说接口还是有问题,在我看来接口入参都有的情况下,估计其他地方的佣金也会有问题
我们本质只有两种所谓的佣金(因为有一种我认为不算佣金)
1. 差价佣金
2. 一次性佣金
我发现现在套餐跟套餐系列的一致性已经被破坏了,套餐在创建的时候首先有以下问题
1. 真流量跟虚流量是共存的,我们本身在设计套餐的时候会先设置一个真实流量额度可能是1000M,这时候还需要决定是否需要开启虚流量,虚流量可以填小于等于1000M的值,我们未来的轮训停机模块会基于是否开启虚流量去决定以真实流量额度为目标值还是以虚流量为目标值
2. 关于价格也有问题,正常来说我们只会有三个价格,分别是 成本价,建议售价 没了,就没了,后续的业务中就算分配给代理也是变更的代理的成本价,例如平台在创建套餐时设置的成本价是100元,可能分配给代理A时会把成本价增加到110,那么代理在自己的套餐列表看到的成本价就是110了
在说套餐跟套餐系列之前,我再次跟你说明我们的佣金规则
1. 差价佣金: 在我们套餐创建时会填入一个成本价一个建议价,当平台给代理分配套餐时会去进行一个加价的操作(当然代理给自己的下级代理分配也会有这样一个逻辑),可能在创建套餐的时候设置的成本价是100,然后分配给代理把成本价加到110了,那么代理自己的套餐列表看到的成本价就是110了,所谓的差价佣金就是这10块钱,但是因为我们现在是平台视角,所以没有佣金,我们平台就是赚110,如果是代理给代理分,那么就是用110分销给下级代理,可能设置的成本价是 120,那么这个下级代理没销售一单,上级代理都赚10块,这就是差价佣金
2. 一次性佣金: 一次佣金主要是作为奖励佣金存在,我的理解是他属于套餐系列这一个层次,他本质是一个条件返佣的机制,他有两种条件,一种是第一次充值(我称之为首充),一种是累计充值,我们还有一个强充机制,对于首充而言是必须的,对于累计充值而言是可选的,强充主要是影响客户端的订单创建,当客户端用户(所谓的个人用户/客户)购买套餐时预检接口发现该套餐的套餐系列要求强充,那么此时会返回提示,告诉他需要强充xxxx元,充值后会自动扣款对应套餐,然后用户点击确定后就会创建要求强充的钱,最后付款,付款后扣对应套餐的钱,这差不多就是强充的逻辑,关于强充多少钱,取决于条件返佣的类型,如果是首充,那么强充的钱就是首充的要求,如果是累计充值,且强充则需要设置一次最少要充多少钱,又说回首充跟累计充值的逻辑,首充指的就是第一次购买套餐时必须满足充值的要求,有三种情况,一种是首充要求的金额低于所购套餐价格,则首充应当是以套餐价格为准(套餐价格 100元 首充50元返10元,此时实际支付应当是100),一种是首充要求的金额等于所购套餐价格,则首充应当是以套餐价格为准(套餐价格100元 首充100元返20元,此时实际支付应当是100元),一种是首充要求的金额大于所购套餐加,则首充应当是以首充要求为准(套餐价格100元 首充200元 返 40元,此时实际支付应当是200元),累计充值指的是只要在对应套餐系列下充值就会积累充值金额,当某一次额度符合时应当返佣(套餐系列要求累计充值 200元 返40元,第一次充值 100 不返 积累100,第二次充值50 不返 积累 50元,此时已经积累150,后续当累计>=200元时应当返40佣金),但是只有充值的钱才会累计,直接购买套餐是不积累的,除非给累计佣金设置了强充,那么用户直接购买套餐会被变成上面说的强充逻辑,此时他会变成先充值后购买(这里是系统自动的),这时候需要累计
我们的本质佣金其实只有这两种,但是我们在一次佣金的基础上发展成了梯度一次性佣金,即可以多维度的一次性佣金 我们以一次性佣金首充的规则来讲梯度佣金,梯度佣金在一次性佣金规则的基础上还会有自身的规则,他有两种梯度控制类型,一种是销量,一种是销售额,一个梯度只能是一种类型,例如销量 >= 0 时 首充 100 返 5块,销量 >= 100时 首充 100 返10块,销量 >= 200时 首充100 返 20,当他销量达量的时候就只会作用这个规则了,这就是我们的梯度佣金
基于我上面的说明,我们现在已有的东西感觉很是混乱,关于套餐系列分配接口等等 套餐,分佣相关的接口以及代码都很混乱,而且我发现之前完全没有考虑清除,现在操作步骤也好,还是操作逻辑也好很是混乱,不清楚你能不能理解我对于混乱的理解,我总感觉他现在不是一个完美的线性操作
最终业务模型总结
一、核心实体
┌─────────────────────────────────────────────────────────────────────────┐
│ 实体关系 │
└─────────────────────────────────────────────────────────────────────────┘
┌─────────────────┐
│ 套餐系列 │
│ PackageSeries │
├─────────────────┤
│ • 系列名称 │
│ • 一次性佣金规则 │ ← 可选,详见下方
└────────┬────────┘
│ 1:N
┌─────────────────┐ ┌─────────────────┐
│ 套餐 │ │ 卡/设备 │
│ Package │ │ IoT/Device │
├─────────────────┤ ├─────────────────┤
│ • 成本价 │ │ • 绑定系列ID │
│ • 建议售价 │ │ • 累计充值金额 │ ← 按系列累计
│ • 真流量(必填) │ │ • 是否已首充 │ ← 按系列记录
│ • 虚流量(可选) │ └────────┬────────┘
│ • 虚流量开关 │ │
└────────┬────────┘ │ 分配
│ ▼
│ 分配 ┌─────────────────┐
▼ │ 店铺 │
┌─────────────────┐ │ Shop │
│ 套餐分配 │◀─────────┤ • 代理层级 │
│ PkgAllocation │ │ • 上级店铺ID │
├─────────────────┤ └─────────────────┘
│ • 店铺ID │
│ • 套餐ID │
│ • 成本价(加价后)│
│ • 一次性佣金额 │ ← 给该代理的金额
└─────────────────┘
---
二、套餐字段定义
┌─────────────────────────────────────────────────────────────────────────┐
│ 套餐 Package │
├──────────────────┬──────────────────────────────────────────────────────┤
│ 字段 │ 说明 │
├──────────────────┼──────────────────────────────────────────────────────┤
│ cost_price │ 成本价(平台设置的基础成本价,分) │
├──────────────────┼──────────────────────────────────────────────────────┤
│ suggested_price │ 建议售价(给代理参考,分) │
├──────────────────┼──────────────────────────────────────────────────────┤
│ real_data_mb │ 真实流量额度必填MB
├──────────────────┼──────────────────────────────────────────────────────┤
│ enable_virtual │ 是否启用虚流量(开关) │
├──────────────────┼──────────────────────────────────────────────────────┤
│ virtual_data_mb │ 虚流量额度(启用时必填,≤ 真实流量MB
└──────────────────┴──────────────────────────────────────────────────────┘
停机判断逻辑:
目标值 = enable_virtual ? virtual_data_mb : real_data_mb
---
三、两种佣金
┌─────────────────────────────────────────────────────────────────────────┐
│ 佣金类型 │
├─────────────────┬───────────────────────┬───────────────────────────────┤
│ │ 差价佣金 │ 一次性佣金 │
├─────────────────┼───────────────────────┼───────────────────────────────┤
│ 触发时机 │ 每笔订单 │ 首充/累计充值达标时 │
├─────────────────┼───────────────────────┼───────────────────────────────┤
│ 触发次数 │ 每单都触发 │ 每张卡/设备只触发一次 │
├─────────────────┼───────────────────────┼───────────────────────────────┤
│ 计算公式 │ 下级成本价-自己成本价 │ 上级给的-给下级的 │
├─────────────────┼───────────────────────┼───────────────────────────────┤
│ 配置位置 │ 套餐分配时设置成本价 │ 系列定义规则+分配时设置额度 │
├─────────────────┼───────────────────────┼───────────────────────────────┤
│ 获得者 │ 上级代理 │ 整条代理链按约定分配 │
├─────────────────┼───────────────────────┼───────────────────────────────┤
│ 是否必须 │ 是 │ 否(系列可不启用) │
└─────────────────┴───────────────────────┴───────────────────────────────┘
---
四、一次性佣金规则配置
┌─────────────────────────────────────────────────────────────────────────┐
│ 一次性佣金规则(套餐系列层面配置) │
├──────────────────┬──────────────────────────────────────────────────────┤
│ 配置项 │ 说明 │
├──────────────────┼──────────────────────────────────────────────────────┤
│ enable │ 是否启用一次性佣金 │
├──────────────────┼──────────────────────────────────────────────────────┤
│ trigger_type │ 触发类型first_recharge(首充) / │
│ │ accumulated_recharge(累计充值) │
├──────────────────┼──────────────────────────────────────────────────────┤
│ threshold │ 触发阈值(分):首充要求金额 或 累计要求金额 │
├──────────────────┼──────────────────────────────────────────────────────┤
│ commission_type │ 返佣类型fixed(固定) / tiered(梯度) │
├──────────────────┼──────────────────────────────────────────────────────┤
│ commission_amount│ 固定返佣金额fixed类型时
├──────────────────┼──────────────────────────────────────────────────────┤
│ tiers │ 梯度配置tiered类型时
├──────────────────┼──────────────────────────────────────────────────────┤
│ validity_type │ 时效类型permanent(永久) / fixed_date(固定日期) / │
│ │ relative(相对时长) │
├──────────────────┼──────────────────────────────────────────────────────┤
│ validity_value │ 时效值(到期日期 或 月数) │
├──────────────────┼──────────────────────────────────────────────────────┤
│ 【强充配置】 │ │
├──────────────────┼──────────────────────────────────────────────────────┤
│ enable_force │ 是否启用强充(首充必选,累计可选) │
├──────────────────┼──────────────────────────────────────────────────────┤
│ force_calc_type │ 强充金额计算方式(累计充值时): │
│ │ fixed(固定金额) / dynamic(动态差额) │
├──────────────────┼──────────────────────────────────────────────────────┤
│ force_amount │ 强充金额fixed类型时
└──────────────────┴──────────────────────────────────────────────────────┘
---
五、梯度配置
┌─────────────────────────────────────────────────────────────────────────┐
│ 梯度配置 │
├──────────────────┬──────────────────────────────────────────────────────┤
│ 配置项 │ 说明 │
├──────────────────┼──────────────────────────────────────────────────────┤
│ tier_dimension │ 梯度维度sales_count(销量) / sales_amount(销售额) │
├──────────────────┼──────────────────────────────────────────────────────┤
│ stat_scope │ 统计范围self(仅自己) / self_and_sub(自己+下级) │
├──────────────────┼──────────────────────────────────────────────────────┤
│ tiers[] │ 梯度档位列表: │
│ .threshold │ 阈值(销量或销售额) │
│ .amount │ 返佣金额(分) │
└──────────────────┴──────────────────────────────────────────────────────┘
注意:
• 梯度只控制"返多少钱",不控制"触发条件"
• 触发条件(首充/累计充值阈值)仍由 trigger_type + threshold 控制
• 统计周期与一次性佣金时效一致
---
六、关键业务流程
6.1 首充流程
客户购买套餐
预检:系列是否启用一次性佣金且为首充?
否──────────────────────────▶ 正常购买流程
该卡/设备在该系列下是否已首充过?
是──────────────────────────▶ 正常购买流程(不再返佣)
计算强充金额 = max(首充要求, 套餐售价)
返回提示:"需要充值 xxx 元"
用户确认 → 创建充值订单(金额=强充金额)
用户支付
支付成功:
1. 钱进入钱包
2. 标记该卡/设备已首充
3. 自动创建套餐购买订单并完成
4. 扣款(套餐售价)
5. 触发一次性佣金,链式分配
6.2 累计充值流程
客户充值(直接充值到钱包)
累计充值金额 += 本次充值金额
该卡/设备是否已触发过累计充值返佣?
是──────────────────────────▶ 结束(不再返佣)
累计金额 >= 累计要求?
否──────────────────────────▶ 结束(继续累计)
触发一次性佣金,链式分配
标记该卡/设备已触发累计充值返佣
6.3 强充(累计充值模式)
客户购买套餐
系列是否启用累计充值强充?
否──────────────────────────▶ 直接购买(不累计)
计算强充金额:
固定模式force_amount
动态模式max(累计要求 - 已累计, 0)
返回提示:"需要充值 xxx 元"
用户确认 → 创建充值订单
支付成功后:
1. 钱进入钱包
2. 累计金额 += 充值金额
3. 自动购买套餐并扣款
4. 检查是否触发累计充值返佣
---
七、一次性佣金链式分配
┌─────────────────────────────────────────────────────────────────────────┐
│ 链式分配示例 │
└─────────────────────────────────────────────────────────────────────────┘
系列规则首充100梯度返佣销量>=100返10>=200返20
代理链:平台 → A(销量210) → A1(销量50) → A2
分配配置:
平台给A20元适用>=200档
A给A18元
A1给A25元
触发首充时:
A2 获得5元
A1 获得8 - 5 = 3元
A 获得20 - 8 = 12元
─────────────────────
合计20元 ✓
---
八、约束规则汇总
┌─────────────────────────────────────────────────────────────────────────┐
│ 约束规则 │
└─────────────────────────────────────────────────────────────────────────┘
【套餐分配】
1. 下级成本价 >= 自己成本价
2. 只能分配自己有权限的套餐
3. 只能分配给直属下级
【一次性佣金分配】
4. 给下级的金额 <= 自己能拿到的金额
5. 给下级的金额 >= 0可以设为0
【流量】
6. 虚流量 <= 真实流量
【配置修改】
7. 修改配置只影响之后的新订单
8. 代理只能修改"给下级多少钱",不能改触发规则
9. 平台修改系列规则不影响已分配的,需收回重新分配
【触发限制】
10. 一次性佣金每张卡/设备只触发一次
11. "首充"指该卡/设备在该系列下的第一次充值
12. 累计充值只统计"充值"操作,不统计"直接购买"
---