This commit is contained in:
2025-12-02 19:57:10 +08:00
parent 3440744179
commit 08ff223ff8
188 changed files with 12337 additions and 7212 deletions

View File

@@ -59,20 +59,20 @@
#### 2.1.1 agent代理基本信息表
| 字段 | 类型 | 说明 |
|------|------|------|
| id | bigint | 主键ID |
| user_id | bigint | 用户ID唯一 |
| level | tinyint | 代理等级1=普通2=黄金3=钻石 |
| region | varchar(50) | 区域(可选) |
| mobile | varchar(50) | 手机号(加密) |
| wechat_id | varchar(100) | 微信号(可选) |
| team_leader_id | bigint | 团队首领ID钻石代理的ID |
| create_time | datetime | 创建时间 |
| update_time | datetime | 更新时间 |
| delete_time | datetime | 删除时间 |
| del_state | tinyint | 删除状态0=未删除1=已删除 |
| version | bigint | 版本号(乐观锁) |
| 字段 | 类型 | 说明 |
| -------------- | ------------ | -------------------------------- |
| id | bigint | 主键ID |
| user_id | bigint | 用户ID唯一 |
| level | tinyint | 代理等级1=普通2=黄金3=钻石 |
| region | varchar(50) | 区域(可选) |
| mobile | varchar(50) | 手机号(加密) |
| wechat_id | varchar(100) | 微信号(可选) |
| team_leader_id | bigint | 团队首领ID钻石代理的ID |
| create_time | datetime | 创建时间 |
| update_time | datetime | 更新时间 |
| delete_time | datetime | 删除时间 |
| del_state | tinyint | 删除状态0=未删除1=已删除 |
| version | bigint | 版本号(乐观锁) |
**索引**:
- PRIMARY KEY (`id`)
@@ -83,35 +83,35 @@
#### 2.1.2 agent_wallet代理钱包表
| 字段 | 类型 | 说明 |
|------|------|------|
| id | bigint | 主键ID |
| agent_id | bigint | 代理ID唯一 |
| balance | decimal(10,2) | 可用余额 |
| frozen_balance | decimal(10,2) | 冻结余额 |
| total_earnings | decimal(10,2) | 累计收益 |
| withdrawn_amount | decimal(10,2) | 已提现金额 |
| create_time | datetime | 创建时间 |
| update_time | datetime | 更新时间 |
| delete_time | datetime | 删除时间 |
| del_state | tinyint | 删除状态 |
| version | bigint | 版本号 |
| 字段 | 类型 | 说明 |
| ---------------- | ------------- | -------------- |
| id | bigint | 主键ID |
| agent_id | bigint | 代理ID唯一 |
| balance | decimal(10,2) | 可用余额 |
| frozen_balance | decimal(10,2) | 冻结余额 |
| total_earnings | decimal(10,2) | 累计收益 |
| withdrawn_amount | decimal(10,2) | 已提现金额 |
| create_time | datetime | 创建时间 |
| update_time | datetime | 更新时间 |
| delete_time | datetime | 删除时间 |
| del_state | tinyint | 删除状态 |
| version | bigint | 版本号 |
#### 2.1.4 agent_relation代理关系表
| 字段 | 类型 | 说明 |
|------|------|------|
| id | bigint | 主键ID |
| parent_id | bigint | 上级代理ID |
| child_id | bigint | 下级代理ID |
| relation_type | tinyint | 关系类型1=直接关系2=已脱离 |
| detach_reason | varchar(200) | 脱离原因 |
| detach_time | datetime | 脱离时间 |
| create_time | datetime | 创建时间 |
| update_time | datetime | 更新时间 |
| delete_time | datetime | 删除时间 |
| del_state | tinyint | 删除状态 |
| version | bigint | 版本号 |
| 字段 | 类型 | 说明 |
| ------------- | ------------ | ------------------------------ |
| id | bigint | 主键ID |
| parent_id | bigint | 上级代理ID |
| child_id | bigint | 下级代理ID |
| relation_type | tinyint | 关系类型1=直接关系2=已脱离 |
| detach_reason | varchar(200) | 脱离原因 |
| detach_time | datetime | 脱离时间 |
| create_time | datetime | 创建时间 |
| update_time | datetime | 更新时间 |
| delete_time | datetime | 删除时间 |
| del_state | tinyint | 删除状态 |
| version | bigint | 版本号 |
**关系类型说明**:
- `relation_type = 1`: 直接关系(正常上下级)
@@ -122,45 +122,45 @@
#### 2.1.5 agent_link推广链接表
| 字段 | 类型 | 说明 |
|------|------|------|
| id | bigint | 主键ID |
| agent_id | bigint | 代理ID |
| user_id | bigint | 用户ID |
| product_id | bigint | 产品ID |
| link_identifier | varchar(200) | 链接标识(加密) |
| set_price | decimal(10,2) | 设定价格 |
| 字段 | 类型 | 说明 |
| ----------------- | ------------- | ----------------------------- |
| id | bigint | 主键ID |
| agent_id | bigint | 代理ID |
| user_id | bigint | 用户ID |
| product_id | bigint | 产品ID |
| link_identifier | varchar(200) | 链接标识(加密) |
| set_price | decimal(10,2) | 设定价格 |
| actual_base_price | decimal(10,2) | 实际底价(基础底价+等级加成) |
| create_time | datetime | 创建时间 |
| update_time | datetime | 更新时间 |
| delete_time | datetime | 删除时间 |
| del_state | tinyint | 删除状态 |
| version | bigint | 版本号 |
| create_time | datetime | 创建时间 |
| update_time | datetime | 更新时间 |
| delete_time | datetime | 删除时间 |
| del_state | tinyint | 删除状态 |
| version | bigint | 版本号 |
**唯一约束**:
- UNIQUE KEY `uk_agent_product_price` (`agent_id`, `product_id`, `set_price`, `del_state`)
#### 2.1.6 agent_order代理订单表
| 字段 | 类型 | 说明 |
|------|------|------|
| id | bigint | 主键ID |
| agent_id | bigint | 代理ID |
| order_id | bigint | 订单ID |
| product_id | bigint | 产品ID |
| order_amount | decimal(10,2) | 订单金额SetPrice |
| set_price | decimal(10,2) | 设定价格 |
| actual_base_price | decimal(10,2) | 实际底价 |
| price_cost | decimal(10,2) | 提价成本 |
| agent_profit | decimal(10,2) | 代理收益 |
| process_status | tinyint | 处理状态0=待处理1=处理成功2=处理失败 |
| process_time | datetime | 处理时间 |
| process_remark | varchar(500) | 处理备注 |
| create_time | datetime | 创建时间 |
| update_time | datetime | 更新时间 |
| delete_time | datetime | 删除时间 |
| del_state | tinyint | 删除状态 |
| version | bigint | 版本号 |
| 字段 | 类型 | 说明 |
| ----------------- | ------------- | ------------------------------------------ |
| id | bigint | 主键ID |
| agent_id | bigint | 代理ID |
| order_id | bigint | 订单ID |
| product_id | bigint | 产品ID |
| order_amount | decimal(10,2) | 订单金额SetPrice |
| set_price | decimal(10,2) | 设定价格 |
| actual_base_price | decimal(10,2) | 实际底价 |
| price_cost | decimal(10,2) | 提价成本 |
| agent_profit | decimal(10,2) | 代理收益 |
| process_status | tinyint | 处理状态0=待处理1=处理成功2=处理失败 |
| process_time | datetime | 处理时间 |
| process_remark | varchar(500) | 处理备注 |
| create_time | datetime | 创建时间 |
| update_time | datetime | 更新时间 |
| delete_time | datetime | 删除时间 |
| del_state | tinyint | 删除状态 |
| version | bigint | 版本号 |
**处理状态说明**:
- `process_status = 0`: 待处理(订单创建后)
@@ -169,38 +169,38 @@
#### 2.1.7 agent_commission代理佣金表
| 字段 | 类型 | 说明 |
|------|------|------|
| id | bigint | 主键ID |
| agent_id | bigint | 代理ID |
| order_id | bigint | 订单ID |
| product_id | bigint | 产品ID |
| amount | decimal(10,2) | 佣金金额(代理收益) |
| status | tinyint | 状态1=已发放 |
| create_time | datetime | 创建时间 |
| update_time | datetime | 更新时间 |
| delete_time | datetime | 删除时间 |
| del_state | tinyint | 删除状态 |
| version | bigint | 版本号 |
| 字段 | 类型 | 说明 |
| ----------- | ------------- | -------------------- |
| id | bigint | 主键ID |
| agent_id | bigint | 代理ID |
| order_id | bigint | 订单ID |
| product_id | bigint | 产品ID |
| amount | decimal(10,2) | 佣金金额(代理收益) |
| status | tinyint | 状态1=已发放 |
| create_time | datetime | 创建时间 |
| update_time | datetime | 更新时间 |
| delete_time | datetime | 删除时间 |
| del_state | tinyint | 删除状态 |
| version | bigint | 版本号 |
#### 2.1.8 agent_rebate代理返佣表
| 字段 | 类型 | 说明 |
|------|------|------|
| id | bigint | 主键ID |
| agent_id | bigint | 获得返佣的代理ID |
| source_agent_id | bigint | 来源代理ID产生订单的代理 |
| order_id | bigint | 订单ID |
| product_id | bigint | 产品ID |
| rebate_type | tinyint | 返佣类型1=直接上级返佣2=钻石上级返佣3=黄金上级返佣 |
| level_bonus | decimal(10,2) | 等级加成金额 |
| rebate_amount | decimal(10,2) | 返佣金额 |
| status | tinyint | 状态1=已发放 |
| create_time | datetime | 创建时间 |
| update_time | datetime | 更新时间 |
| delete_time | datetime | 删除时间 |
| del_state | tinyint | 删除状态 |
| version | bigint | 版本号 |
| 字段 | 类型 | 说明 |
| --------------- | ------------- | -------------------------------------------------------- |
| id | bigint | 主键ID |
| agent_id | bigint | 获得返佣的代理ID |
| source_agent_id | bigint | 来源代理ID产生订单的代理 |
| order_id | bigint | 订单ID |
| product_id | bigint | 产品ID |
| rebate_type | tinyint | 返佣类型1=直接上级返佣2=钻石上级返佣3=黄金上级返佣 |
| level_bonus | decimal(10,2) | 等级加成金额 |
| rebate_amount | decimal(10,2) | 返佣金额 |
| status | tinyint | 状态1=已发放 |
| create_time | datetime | 创建时间 |
| update_time | datetime | 更新时间 |
| delete_time | datetime | 删除时间 |
| del_state | tinyint | 删除状态 |
| version | bigint | 版本号 |
**返佣类型说明**:
- `rebate_type = 1`: 直接上级返佣(普通代理的等级加成给直接上级)
@@ -209,25 +209,25 @@
#### 2.1.9 agent_upgrade代理升级表
| 字段 | 类型 | 说明 |
|------|------|------|
| id | bigint | 主键ID |
| agent_id | bigint | 代理ID |
| from_level | tinyint | 原等级 |
| to_level | tinyint | 目标等级 |
| upgrade_type | tinyint | 升级类型1=自主付费2=钻石升级下级 |
| upgrade_fee | decimal(10,2) | 升级费用 |
| rebate_amount | decimal(10,2) | 返佣金额(给原直接上级) |
| rebate_agent_id | bigint | 返佣代理ID原直接上级 |
| operator_agent_id | bigint | 操作代理ID钻石升级下级时使用 |
| order_no | varchar(100) | 支付订单号 |
| status | tinyint | 状态1=待处理2=已完成3=已失败 |
| remark | varchar(500) | 备注 |
| create_time | datetime | 创建时间 |
| update_time | datetime | 更新时间 |
| delete_time | datetime | 删除时间 |
| del_state | tinyint | 删除状态 |
| version | bigint | 版本号 |
| 字段 | 类型 | 说明 |
| ----------------- | ------------- | ------------------------------------ |
| id | bigint | 主键ID |
| agent_id | bigint | 代理ID |
| from_level | tinyint | 原等级 |
| to_level | tinyint | 目标等级 |
| upgrade_type | tinyint | 升级类型1=自主付费2=钻石升级下级 |
| upgrade_fee | decimal(10,2) | 升级费用 |
| rebate_amount | decimal(10,2) | 返佣金额(给原直接上级) |
| rebate_agent_id | bigint | 返佣代理ID原直接上级 |
| operator_agent_id | bigint | 操作代理ID钻石升级下级时使用 |
| order_no | varchar(100) | 支付订单号 |
| status | tinyint | 状态1=待处理2=已完成3=已失败 |
| remark | varchar(500) | 备注 |
| create_time | datetime | 创建时间 |
| update_time | datetime | 更新时间 |
| delete_time | datetime | 删除时间 |
| del_state | tinyint | 删除状态 |
| version | bigint | 版本号 |
**升级类型说明**:
- `upgrade_type = 1`: 自主付费升级(代理自己付费)
@@ -235,23 +235,23 @@
#### 2.1.10 agent_withdrawal代理提现表
| 字段 | 类型 | 说明 |
|------|------|------|
| id | bigint | 主键ID |
| agent_id | bigint | 代理ID |
| withdraw_no | varchar(100) | 提现单号(唯一) |
| payee_account | varchar(100) | 收款账户(支付宝账号) |
| payee_name | varchar(100) | 收款人姓名 |
| amount | decimal(10,2) | 提现金额 |
| tax_amount | decimal(10,2) | 税费金额 |
| actual_amount | decimal(10,2) | 实际到账金额 |
| status | tinyint | 状态1=待审核2=审核通过3=审核拒绝4=提现中5=提现成功6=提现失败 |
| remark | varchar(500) | 备注 |
| create_time | datetime | 创建时间 |
| update_time | datetime | 更新时间 |
| delete_time | datetime | 删除时间 |
| del_state | tinyint | 删除状态 |
| version | bigint | 版本号 |
| 字段 | 类型 | 说明 |
| ------------- | ------------- | ------------------------------------------------------------------------ |
| id | bigint | 主键ID |
| agent_id | bigint | 代理ID |
| withdraw_no | varchar(100) | 提现单号(唯一) |
| payee_account | varchar(100) | 收款账户(支付宝账号) |
| payee_name | varchar(100) | 收款人姓名 |
| amount | decimal(10,2) | 提现金额 |
| tax_amount | decimal(10,2) | 税费金额 |
| actual_amount | decimal(10,2) | 实际到账金额 |
| status | tinyint | 状态1=待审核2=审核通过3=审核拒绝4=提现中5=提现成功6=提现失败 |
| remark | varchar(500) | 备注 |
| create_time | datetime | 创建时间 |
| update_time | datetime | 更新时间 |
| delete_time | datetime | 删除时间 |
| del_state | tinyint | 删除状态 |
| version | bigint | 版本号 |
**状态说明**:
- `status = 1`: 待审核(代理申请后)
@@ -263,25 +263,25 @@
#### 2.1.11 agent_withdrawal_tax代理提现扣税表
| 字段 | 类型 | 说明 |
|------|------|------|
| id | bigint | 主键ID |
| agent_id | bigint | 代理ID |
| withdrawal_id | bigint | 提现记录ID |
| year_month | bigint | 年月格式YYYYMM如202401 |
| withdrawal_amount | decimal(10,2) | 提现金额 |
| taxable_amount | decimal(10,2) | 应税金额 |
| tax_rate | decimal(5,4) | 税率 |
| tax_amount | decimal(10,2) | 税费金额 |
| actual_amount | decimal(10,2) | 实际到账金额 |
| tax_status | tinyint | 扣税状态1=待扣税2=已扣税 |
| tax_time | datetime | 扣税时间 |
| remark | varchar(500) | 备注 |
| create_time | datetime | 创建时间 |
| update_time | datetime | 更新时间 |
| delete_time | datetime | 删除时间 |
| del_state | tinyint | 删除状态 |
| version | bigint | 版本号 |
| 字段 | 类型 | 说明 |
| ----------------- | ------------- | ------------------------------ |
| id | bigint | 主键ID |
| agent_id | bigint | 代理ID |
| withdrawal_id | bigint | 提现记录ID |
| year_month | bigint | 年月格式YYYYMM如202401 |
| withdrawal_amount | decimal(10,2) | 提现金额 |
| taxable_amount | decimal(10,2) | 应税金额 |
| tax_rate | decimal(5,4) | 税率 |
| tax_amount | decimal(10,2) | 税费金额 |
| actual_amount | decimal(10,2) | 实际到账金额 |
| tax_status | tinyint | 扣税状态1=待扣税2=已扣税 |
| tax_time | datetime | 扣税时间 |
| remark | varchar(500) | 备注 |
| create_time | datetime | 创建时间 |
| update_time | datetime | 更新时间 |
| delete_time | datetime | 删除时间 |
| del_state | tinyint | 删除状态 |
| version | bigint | 版本号 |
**扣税状态说明**:
- `tax_status = 1`: 待扣税(提现申请后)
@@ -289,18 +289,18 @@
#### 2.1.12 agent_config代理系统配置表
| 字段 | 类型 | 说明 |
|------|------|------|
| id | bigint | 主键ID |
| config_key | varchar(100) | 配置键(唯一) |
| config_value | varchar(500) | 配置值 |
| config_type | varchar(50) | 配置类型price=价格bonus=等级加成upgrade=升级费用rebate=返佣tax=税费 |
| description | varchar(500) | 配置描述 |
| create_time | datetime | 创建时间 |
| update_time | datetime | 更新时间 |
| delete_time | datetime | 删除时间 |
| del_state | tinyint | 删除状态 |
| version | bigint | 版本号 |
| 字段 | 类型 | 说明 |
| ------------ | ------------ | ----------------------------------------------------------------------------- |
| id | bigint | 主键ID |
| config_key | varchar(100) | 配置键(唯一) |
| config_value | varchar(500) | 配置值 |
| config_type | varchar(50) | 配置类型price=价格bonus=等级加成upgrade=升级费用rebate=返佣tax=税费 |
| description | varchar(500) | 配置描述 |
| create_time | datetime | 创建时间 |
| update_time | datetime | 更新时间 |
| delete_time | datetime | 删除时间 |
| del_state | tinyint | 删除状态 |
| version | bigint | 版本号 |
**配置键列表**:
- `base_price`: 基础底价
@@ -319,36 +319,36 @@
#### 2.1.13 agent_product_config代理产品配置表
| 字段 | 类型 | 说明 |
|------|------|------|
| id | bigint | 主键ID |
| product_id | bigint | 产品ID唯一 |
| product_name | varchar(100) | 产品名称 |
| base_price | decimal(10,2) | 基础底价(可覆盖系统配置) |
| system_max_price | decimal(10,2) | 系统价格上限(可覆盖系统配置) |
| price_threshold | decimal(10,2) | 提价标准阈值(可选,覆盖系统配置) |
| price_fee_rate | decimal(5,4) | 提价手续费比例(可选,覆盖系统配置) |
| create_time | datetime | 创建时间 |
| update_time | datetime | 更新时间 |
| delete_time | datetime | 删除时间 |
| del_state | tinyint | 删除状态 |
| version | bigint | 版本号 |
| 字段 | 类型 | 说明 |
| ---------------- | ------------- | ------------------------------------ |
| id | bigint | 主键ID |
| product_id | bigint | 产品ID唯一 |
| product_name | varchar(100) | 产品名称 |
| base_price | decimal(10,2) | 基础底价(可覆盖系统配置) |
| system_max_price | decimal(10,2) | 系统价格上限(可覆盖系统配置) |
| price_threshold | decimal(10,2) | 提价标准阈值(可选,覆盖系统配置) |
| price_fee_rate | decimal(5,4) | 提价手续费比例(可选,覆盖系统配置) |
| create_time | datetime | 创建时间 |
| update_time | datetime | 更新时间 |
| delete_time | datetime | 删除时间 |
| del_state | tinyint | 删除状态 |
| version | bigint | 版本号 |
#### 2.1.14 agent_real_name代理实名认证表
| 字段 | 类型 | 说明 |
|------|------|------|
| id | bigint | 主键ID |
| agent_id | bigint | 代理ID唯一 |
| name | varchar(50) | 真实姓名 |
| id_card | varchar(50) | 身份证号(加密) |
| mobile | varchar(50) | 手机号(加密) |
| verify_time | datetime | 验证时间三要素验证通过时间NULL表示未验证 |
| create_time | datetime | 创建时间 |
| update_time | datetime | 更新时间 |
| delete_time | datetime | 删除时间 |
| del_state | tinyint | 删除状态 |
| version | bigint | 版本号 |
| 字段 | 类型 | 说明 |
| ----------- | ----------- | ---------------------------------------------- |
| id | bigint | 主键ID |
| agent_id | bigint | 代理ID唯一 |
| name | varchar(50) | 真实姓名 |
| id_card | varchar(50) | 身份证号(加密) |
| mobile | varchar(50) | 手机号(加密) |
| verify_time | datetime | 验证时间三要素验证通过时间NULL表示未验证 |
| create_time | datetime | 创建时间 |
| update_time | datetime | 更新时间 |
| delete_time | datetime | 删除时间 |
| del_state | tinyint | 删除状态 |
| version | bigint | 版本号 |
**验证说明**:
- `verify_time IS NULL`: 未验证(未通过三要素核验或未提交)
@@ -382,19 +382,19 @@ agent (代理表)
#### 3.1.1 等级定义
| 等级 | 数值 | 名称 | 说明 |
|------|------|------|------|
| Level 1 | 1 | 普通代理 | 初始等级,所有新代理默认等级 |
| Level 2 | 2 | 黄金代理 | 中级等级,可通过付费或钻石升级获得 |
| Level 3 | 3 | 钻石代理 | 最高等级,团队首领,可通过付费获得 |
| 等级 | 数值 | 名称 | 说明 |
| ------- | ---- | -------- | ---------------------------------- |
| Level 1 | 1 | 普通代理 | 初始等级,所有新代理默认等级 |
| Level 2 | 2 | 黄金代理 | 中级等级,可通过付费或钻石升级获得 |
| Level 3 | 3 | 钻石代理 | 最高等级,团队首领,可通过付费获得 |
#### 3.1.2 等级加成规则
| 等级 | 等级加成 | 说明 |
|------|---------|------|
| 普通代理 | +6元 | 实际底价 = 基础底价 + 6元 |
| 黄金代理 | +3元 | 实际底价 = 基础底价 + 3元 |
| 钻石代理 | +0元 | 实际底价 = 基础底价 |
| 等级 | 等级加成 | 说明 |
| -------- | -------- | ------------------------- |
| 普通代理 | +6元 | 实际底价 = 基础底价 + 6元 |
| 黄金代理 | +3元 | 实际底价 = 基础底价 + 3元 |
| 钻石代理 | +0元 | 实际底价 = 基础底价 |
**计算公式**:
```
@@ -414,13 +414,12 @@ agent (代理表)
**核心原则**:
1. **下级不能比上级等级高**: 下级等级必须 ≤ 上级等级
2. **同级不能作为上下级**(除了普通代理): 黄金和钻石不能作为同级上下级
3. **钻石 → 黄金禁止**: 钻石代理不能直接管理黄金代理(特殊规则)
**允许的关系**:
- 普通 → 普通 ✓(同级普通允许)
- 黄金 → 普通 ✓(上级等级高于下级)
- 钻石 → 普通 ✓(上级等级高于下级)
- 钻石 → 黄金 ✓(上级等级高于下级,但实际禁止见规则3
- 钻石 → 黄金 ✓(上级等级高于下级,允许建立关系
**禁止的关系**:
- 普通 → 黄金 ✗(下级等级高于上级)
@@ -428,7 +427,11 @@ agent (代理表)
- 黄金 → 黄金 ✗(同级不能作为上下级)
- 钻石 → 钻石 ✗(同级不能作为上下级)
- 黄金 → 钻石 ✗(下级等级高于上级)
- 钻石 → 黄金 ✗(特殊规则禁止)
**升级后脱离关系的规则**:
- 下级等级 > 上级等级 → 脱离关系
- 同级(黄金或钻石)→ 脱离关系
- 普通代理同级 → 不脱离关系(允许保持)
#### 3.2.3 升级规则
@@ -437,7 +440,10 @@ agent (代理表)
**升级场景**:
1. **普通 → 黄金**:
- 升级后必须脱离直接上级关系(因为黄金等级高于普通,或与黄金同级)
- 升级后根据上级等级决定是否脱离关系:
* 如果上级是普通代理:必须脱离(下级等级高于上级)
* 如果上级是黄金代理:必须脱离(同级不能作为上下级)
* 如果上级是钻石代理:不脱离(钻石等级高于黄金,允许保持关系)
- 保留团队关系(通过团队首领钻石代理)
- 仍属于原团队
- 所有下级(直接+间接)继续跟随该代理
@@ -468,12 +474,12 @@ agent (代理表)
**升级费用和返佣规则**:
| 升级类型 | 升级费用 | 直接上级返佣 | 说明 |
|---------|---------|-------------|------|
| 普通→黄金 | 199元 | 139元 | 付费后立即返佣给直接上级 |
| 普通→钻石 | 980元 | 680元 | 付费后立即返佣给直接上级 |
| 黄金→钻石 | 980元 | 680元 | 付费后立即返佣给直接上级 |
| 钻石升级下级(普通→黄金) | 免费 | 无 | 钻石代理操作,被升级代理无需付费 |
| 升级类型 | 升级费用 | 直接上级返佣 | 说明 |
| ------------------------- | -------- | ------------ | -------------------------------- |
| 普通→黄金 | 199元 | 139元 | 付费后立即返佣给直接上级 |
| 普通→钻石 | 980元 | 680元 | 付费后立即返佣给直接上级 |
| 黄金→钻石 | 980元 | 680元 | 付费后立即返佣给直接上级 |
| 钻石升级下级(普通→黄金) | 免费 | 无 | 钻石代理操作,被升级代理无需付费 |
**重要规则**:
-**返佣给原直接上级**: 即使升级后脱离直接上下级关系,返佣仍然给原直接上级
@@ -515,25 +521,47 @@ agent (代理表)
#### 3.4.2 等级加成返佣分配
**普通代理等级加成6元**:
1. **优先级1**: 给直接上级最多3元
- 如果直接上级存在分配3元给直接上级
- 剩余金额 = 6 - 3 = 3元
2. **优先级2**: 给钻石上级(剩余金额全部)
- 查找上级链中的钻石代理
- 如果找到,剩余金额全部给钻石上级
3. **优先级3**: 给黄金上级最多3元如果钻石上级不存在
- 如果钻石上级不存在,查找黄金上级
- 如果找到最多分配3元给黄金上级
- 如果剩余金额 > 3元超出部分归平台
4. **优先级4**: 都没有,剩余金额归平台
**核心原则**
- **基础底价BasePrice**:无论哪个等级,全部归平台(固定收入
- **等级加成部分**:作为返佣分配给上级
**黄金代理等级加成3元**:
1. 全部给钻石上级(如有)
2. 如果找不到钻石上级,归平台
**分配规则总结表**
**钻石代理等级加成0元**:
- 无返佣分配
| 代理等级 | 等级加成 | 直接上级 | 等级加成返佣分配规则 |
| -------- | -------- | -------- | ------------------------------------------------------------------------------------------------------------------ |
| 钻石 | 0元 | 无 | 无返佣分配加成为0 |
| 黄金 | 3元 | 钻石 | 3元全部给钻石上级 |
| 普通 | 6元 | 钻石 | 6元全部给钻石上级 |
| 普通 | 6元 | 黄金 | 3元给黄金上级3元给钻石上级上上级 |
| 普通 | 6元 | 普通 | 2元给直接上级普通剩余4元<br>- 有钻石4元全部给钻石<br>- 只有黄金3元给黄金1元归平台<br>- 都没有4元归平台 |
**详细规则说明**
1. **普通代理等级加成例如6元**:
- **直接上级是钻石**:等级加成全部给钻石上级
- **直接上级是黄金**:一部分给黄金上级(配置:`normal_to_gold_rebate`默认3元剩余给钻石上级上上级
- **直接上级是普通**
- 一部分给直接上级普通(配置:`normal_to_normal_rebate`默认2元
- 剩余金额:
- 有钻石上级:剩余全部给钻石上级
- 只有黄金上级:最多给黄金上级(配置:`normal_to_gold_rebate_max`默认3元超出部分归平台
- 都没有:全部归平台
- **注意**:如果在团队上下级链路中这中间有很多层普通代理,给直接上级的金额只给推广人的直接上级,对于中间的会直接跳过,然后到黄金/钻石代理
2. **黄金代理等级加成例如3元**:
- 全部给钻石上级(如有)
- 如果找不到钻石上级,归平台
3. **钻石代理等级加成0元**:
- 无返佣分配
**配置项说明**
- 返佣金额的具体取值从配置表读取,支持动态配置
- 配置键:
- `normal_to_normal_rebate`普通代理给直接上级普通的金额默认2元
- `normal_to_gold_rebate`普通代理给直接上级黄金的金额默认3元
- `normal_to_gold_rebate_max`普通代理给黄金上级的最大金额默认3元
- 如果配置不存在,使用默认值
#### 3.4.3 返佣记录
@@ -923,8 +951,7 @@ agent (代理表)
┌─────────────────────────────────────────────────────────────┐
│ 12. 检查是否需要脱离直接上级关系 │
│ - 检查升级后等级是否高于上级 │
│ - 检查是否同级(黄金/钻石
│ - 检查是否钻石→黄金(禁止) │
│ - 检查是否同级(黄金/钻石,普通代理同级除外)
└─────────────────────────────────────────────────────────────┘
┌───────────────────────────────┐
@@ -1377,50 +1404,50 @@ func calculateTax(ctx context.Context, agentId int64, amount float64, yearMonth
#### 6.1.1 公开接口(无需登录)
| 接口 | 方法 | 路径 | 说明 |
|------|------|------|------|
| 获取推广链接数据 | GET | `/api/v1/agent/link` | 根据LinkIdentifier获取推广链接信息 |
| 接口 | 方法 | 路径 | 说明 |
| ---------------------- | ---- | --------------------- | -------------------------------------------- |
| 获取推广链接数据 | GET | `/api/v1/agent/link` | 根据LinkIdentifier获取推广链接信息 |
| 通过邀请码申请成为代理 | POST | `/api/v1/agent/apply` | 用户通过邀请码申请成为代理(必须提供邀请码) |
#### 6.1.2 需要登录的接口
| 接口 | 方法 | 路径 | 说明 |
|------|------|------|------|
| ~~查询代理申请状态~~ | ~~GET~~ | ~~`/api/v1/agent/audit/status`~~ | ~~查询当前用户的代理申请审核状态(已废弃:无需审核)~~ |
| 查看代理信息 | GET | `/api/v1/agent/info` | 获取当前代理的详细信息 |
| 生成推广链接 | POST | `/api/v1/agent/generating_link` | 生成产品推广链接 |
| 获取产品配置 | GET | `/api/v1/agent/product_config` | 获取代理可配置的产品价格信息 |
| 获取团队统计 | GET | `/api/v1/agent/team/statistics` | 获取团队统计数据 |
| 获取下级列表 | GET | `/api/v1/agent/subordinate/list` | 分页查询直接下级列表 |
| 获取收益信息 | GET | `/api/v1/agent/revenue` | 获取钱包余额和收益信息 |
| 获取佣金记录 | GET | `/api/v1/agent/commission/list` | 分页查询佣金记录 |
| 获取返佣记录 | GET | `/api/v1/agent/rebate/list` | 分页查询返佣记录 |
| 获取升级记录 | GET | `/api/v1/agent/upgrade/list` | 分页查询升级记录 |
| 申请升级 | POST | `/api/v1/agent/upgrade/apply` | 自主付费升级 |
| 钻石升级下级 | POST | `/api/v1/agent/upgrade/subordinate` | 钻石代理升级下级 |
| 获取提现列表 | GET | `/api/v1/agent/withdrawal/list` | 分页查询提现记录 |
| 申请提现 | POST | `/api/v1/agent/withdrawal/apply` | 申请提现 |
| 实名认证 | POST | `/api/v1/agent/real_name` | 提交实名认证信息(三要素核验,自动通过) |
| 接口 | 方法 | 路径 | 说明 |
| -------------------- | ------- | ----------------------------------- | ------------------------------------------------------ |
| ~~查询代理申请状态~~ | ~~GET~~ | ~~`/api/v1/agent/audit/status`~~ | ~~查询当前用户的代理申请审核状态(已废弃:无需审核)~~ |
| 查看代理信息 | GET | `/api/v1/agent/info` | 获取当前代理的详细信息 |
| 生成推广链接 | POST | `/api/v1/agent/generating_link` | 生成产品推广链接 |
| 获取产品配置 | GET | `/api/v1/agent/product_config` | 获取代理可配置的产品价格信息 |
| 获取团队统计 | GET | `/api/v1/agent/team/statistics` | 获取团队统计数据 |
| 获取下级列表 | GET | `/api/v1/agent/subordinate/list` | 分页查询直接下级列表 |
| 获取收益信息 | GET | `/api/v1/agent/revenue` | 获取钱包余额和收益信息 |
| 获取佣金记录 | GET | `/api/v1/agent/commission/list` | 分页查询佣金记录 |
| 获取返佣记录 | GET | `/api/v1/agent/rebate/list` | 分页查询返佣记录 |
| 获取升级记录 | GET | `/api/v1/agent/upgrade/list` | 分页查询升级记录 |
| 申请升级 | POST | `/api/v1/agent/upgrade/apply` | 自主付费升级 |
| 钻石升级下级 | POST | `/api/v1/agent/upgrade/subordinate` | 钻石代理升级下级 |
| 获取提现列表 | GET | `/api/v1/agent/withdrawal/list` | 分页查询提现记录 |
| 申请提现 | POST | `/api/v1/agent/withdrawal/apply` | 申请提现 |
| 实名认证 | POST | `/api/v1/agent/real_name` | 提交实名认证信息(三要素核验,自动通过) |
### 6.2 后台管理接口admin_agent.api
| 接口 | 方法 | 路径 | 说明 |
|------|------|------|------|
| 代理分页查询 | GET | `/api/v1/admin/agent/list` | 分页查询代理列表 |
| ~~代理审核~~ | ~~POST~~ | ~~`/api/v1/admin/agent/audit`~~ | ~~审核代理申请(已废弃:通过邀请码直接成为代理,无需审核)~~ |
| 推广链接分页查询 | GET | `/api/v1/admin/agent/link/list` | 分页查询推广链接 |
| 代理订单分页查询 | GET | `/api/v1/admin/agent/order/list` | 分页查询代理订单 |
| 代理佣金分页查询 | GET | `/api/v1/admin/agent/commission/list` | 分页查询佣金记录 |
| 代理返佣分页查询 | GET | `/api/v1/admin/agent/rebate/list` | 分页查询返佣记录 |
| 代理升级记录分页查询 | GET | `/api/v1/admin/agent/upgrade/list` | 分页查询升级记录 |
| 代理提现分页查询 | GET | `/api/v1/admin/agent/withdrawal/list` | 分页查询提现记录 |
| 代理提现审核 | POST | `/api/v1/admin/agent/withdrawal/audit` | 审核提现申请 |
| 代理实名认证分页查询 | GET | `/api/v1/admin/agent/real_name/list` | 分页查询实名认证记录 |
| ~~代理实名认证审核~~ | ~~POST~~ | ~~`/api/v1/admin/agent/real_name/audit`~~ | ~~审核实名认证(已废弃:改为三要素核验,无需审核)~~ |
| 系统配置查询 | GET | `/api/v1/admin/agent/config` | 查询系统配置 |
| 系统配置更新 | POST | `/api/v1/admin/agent/config/update` | 更新系统配置 |
| 产品配置分页查询 | GET | `/api/v1/admin/agent/product_config/list` | 分页查询产品配置 |
| 产品配置更新 | POST | `/api/v1/admin/agent/product_config/update` | 更新产品配置 |
| 接口 | 方法 | 路径 | 说明 |
| -------------------- | -------- | ------------------------------------------- | ------------------------------------------------------------ |
| 代理分页查询 | GET | `/api/v1/admin/agent/list` | 分页查询代理列表 |
| ~~代理审核~~ | ~~POST~~ | ~~`/api/v1/admin/agent/audit`~~ | ~~审核代理申请(已废弃:通过邀请码直接成为代理,无需审核)~~ |
| 推广链接分页查询 | GET | `/api/v1/admin/agent/link/list` | 分页查询推广链接 |
| 代理订单分页查询 | GET | `/api/v1/admin/agent/order/list` | 分页查询代理订单 |
| 代理佣金分页查询 | GET | `/api/v1/admin/agent/commission/list` | 分页查询佣金记录 |
| 代理返佣分页查询 | GET | `/api/v1/admin/agent/rebate/list` | 分页查询返佣记录 |
| 代理升级记录分页查询 | GET | `/api/v1/admin/agent/upgrade/list` | 分页查询升级记录 |
| 代理提现分页查询 | GET | `/api/v1/admin/agent/withdrawal/list` | 分页查询提现记录 |
| 代理提现审核 | POST | `/api/v1/admin/agent/withdrawal/audit` | 审核提现申请 |
| 代理实名认证分页查询 | GET | `/api/v1/admin/agent/real_name/list` | 分页查询实名认证记录 |
| ~~代理实名认证审核~~ | ~~POST~~ | ~~`/api/v1/admin/agent/real_name/audit`~~ | ~~审核实名认证(已废弃:改为三要素核验,无需审核)~~ |
| 系统配置查询 | GET | `/api/v1/admin/agent/config` | 查询系统配置 |
| 系统配置更新 | POST | `/api/v1/admin/agent/config/update` | 更新系统配置 |
| 产品配置分页查询 | GET | `/api/v1/admin/agent/product_config/list` | 分页查询产品配置 |
| 产品配置更新 | POST | `/api/v1/admin/agent/product_config/update` | 更新产品配置 |
---
@@ -1428,32 +1455,32 @@ func calculateTax(ctx context.Context, agentId int64, amount float64, yearMonth
### 7.1 系统配置项agent_config表
| 配置键 | 配置类型 | 默认值 | 说明 |
|--------|---------|--------|------|
| `base_price` | price | - | 基础底价(系统默认) |
| `system_max_price` | price | - | 系统价格上限 |
| `price_threshold` | price | - | 提价标准阈值 |
| `price_fee_rate` | price | - | 提价手续费比例0-1之间的小数 |
| `level_1_bonus` | bonus | 6 | 普通代理等级加成(元) |
| `level_2_bonus` | bonus | 3 | 黄金代理等级加成(元) |
| `level_3_bonus` | bonus | 0 | 钻石代理等级加成(元) |
| `upgrade_to_gold_fee` | upgrade | 199 | 升级为黄金费用(元) |
| `upgrade_to_diamond_fee` | upgrade | 980 | 升级为钻石费用(元) |
| `upgrade_to_gold_rebate` | rebate | 139 | 升级为黄金返佣(元) |
| `upgrade_to_diamond_rebate` | rebate | 680 | 升级为钻石返佣(元) |
| `tax_rate` | tax | 0.06 | 税率默认6%即0.06 |
| `tax_exemption_amount` | tax | 0 | 免税额度默认0 |
| 配置键 | 配置类型 | 默认值 | 说明 |
| --------------------------- | -------- | ------ | ------------------------------- |
| `base_price` | price | - | 基础底价(系统默认) |
| `system_max_price` | price | - | 系统价格上限 |
| `price_threshold` | price | - | 提价标准阈值 |
| `price_fee_rate` | price | - | 提价手续费比例0-1之间的小数 |
| `level_1_bonus` | bonus | 6 | 普通代理等级加成(元) |
| `level_2_bonus` | bonus | 3 | 黄金代理等级加成(元) |
| `level_3_bonus` | bonus | 0 | 钻石代理等级加成(元) |
| `upgrade_to_gold_fee` | upgrade | 199 | 升级为黄金费用(元) |
| `upgrade_to_diamond_fee` | upgrade | 980 | 升级为钻石费用(元) |
| `upgrade_to_gold_rebate` | rebate | 139 | 升级为黄金返佣(元) |
| `upgrade_to_diamond_rebate` | rebate | 680 | 升级为钻石返佣(元) |
| `tax_rate` | tax | 0.06 | 税率默认6%即0.06 |
| `tax_exemption_amount` | tax | 0 | 免税额度默认0 |
### 7.2 产品配置项agent_product_config表
每个产品可以单独配置以下参数,覆盖系统默认配置:
| 字段 | 说明 |
|------|------|
| `base_price` | 产品基础底价(覆盖系统配置) |
| `system_max_price` | 产品价格上限(覆盖系统配置) |
| `price_threshold` | 产品提价标准阈值(可选,覆盖系统配置) |
| `price_fee_rate` | 产品提价手续费比例(可选,覆盖系统配置) |
| 字段 | 说明 |
| ------------------ | ---------------------------------------- |
| `base_price` | 产品基础底价(覆盖系统配置) |
| `system_max_price` | 产品价格上限(覆盖系统配置) |
| `price_threshold` | 产品提价标准阈值(可选,覆盖系统配置) |
| `price_fee_rate` | 产品提价手续费比例(可选,覆盖系统配置) |
### 7.3 配置优先级
@@ -1712,13 +1739,12 @@ func calculateAgentProfit(setPrice, actualBasePrice, priceCost float64) float64
### 11.1 升级后关系脱离规则
**Q**: 为什么普通代理升级为黄金后脱离直接上级关系?
**Q**: 普通代理升级为黄金后什么情况下会脱离直接上级关系?
**A**: 根据关系约束规则:
- 下级不能比上级等级高
- 同级不能作为上下级(除了普通代理)
- 如果直接上级是普通代理,升级后黄金等级高于普通,必须脱离
- 如果直接上级是黄金/钻石,升级后同级,也必须脱离
- **下级不能比上级等级高**:如果直接上级是普通代理,升级后黄金等级高于普通,必须脱离
- **同级不能作为上下级(除了普通代理)**:如果直接上级是黄金代理,升级后同级,必须脱离
- **钻石可以拥有黄金下级**如果直接上级是钻石代理,升级后钻石等级高于黄金,不脱离关系,保持直接下级关系
### 11.2 返佣分配规则