用户使用流程图 — 推广分销
端口说明: 📱 小程序 | 🖥 管理后台 | 📋 规划师端 | ⚙️ 系统自动
分层说明: 🏠 页面 → 🔗 API → ⚙️ Service → 📦 数据实体
flowchart TD
%% ============ 颜色定义 ============
classDef page fill:#e3f2fd,stroke:#1565c0,stroke-width:2px
classDef api fill:#fff3e0,stroke:#f57c00,stroke-width:1px
classDef service fill:#e8f5e9,stroke:#388e3c,stroke-width:1px
classDef data fill:#f3e5f5,stroke:#7b1fa2,stroke-width:1px
classDef external fill:#fce4ec,stroke:#d32f2f,stroke-width:1px,stroke-dasharray:3 2
classDef actor fill:#e1f5fe,stroke:#0288d1,stroke-width:2px,stroke-dasharray:5 3
%% ============ 角色 ============
ROLE_PARENT(("👤 家长/推广员")):::actor
ROLE_TEACHER(("📋 规划师")):::actor
ROLE_ADMIN(("🖥 管理员")):::actor
%% ================================================================
%% 阶段一:推广关系绑定
%% ================================================================
subgraph 阶段一[阶段一:推广关系绑定]
P1["🏠 推广端:推广首页"]:::page
P1 -->|"输入邀请码, promoterFamilyId"| A1["🔗 POST /api/promotion/bind"]:::api
A1 -->|"inviteCode, promoterFamilyId"| S1["⚙️ FamilyCommissionService.bindByInviteCode()"]:::service
S1 -->|"写入推广绑定关系"| D_BIND["📦 promotion_binding 表"]:::data
P1 -->|"查看绑定列表"| A2["🔗 POST /api/promotion/bindings/list"]:::api
A2 -->|"familyId"| S2["⚙️ FamilyCommissionService.getBindings()"]:::service
S2 -->|"该家庭的所有绑定记录"| D_BIND
P1 -->|"查看佣金列表"| A3["🔗 POST /api/promotion/commission/list"]:::api
A3 -->|"familyId, page, size"| S3["⚙️ FamilyCommissionService.getCommissionList()"]:::service
S3 -->|"分页佣金记录"| D_FC["📦 family_commission 表"]:::data
end
%% ================================================================
%% 阶段二:邀请码与虚拟团队
%% ================================================================
subgraph 阶段二[阶段二:邀请码与虚拟团队]
P2["🏠 推广端:销售邀请页"]:::page
P2 -->|"生成邀请码"| A4["🔗 POST /api/distribution/invite/generate"]:::api
A4 -->|"systemId, userId"| S4["⚙️ DistributionService.generateInviteCode()"]:::service
S4 -->|"生成唯一邀请码"| D_RELATION["📦 distribution_relations 表"]:::data
S4 -->|"虚拟团队信息"| D_SYSTEM["📦 distribution_systems 表"]:::data
P2 -->|"校验邀请码"| A5["🔗 POST /api/distribution/invite/validate"]:::api
A5 -->|"inviteCode"| S5["⚙️ DistributionService.findByInviteCode()"]:::service
S5 -->|"inviterId, systemId, teamName"| D_RELATION
P2 -->|"查看虚拟团队"| A6["🔗 POST /api/distribution/invite/my-teams"]:::api
A6 -->|"userId"| S6["⚙️ DistributionService.getUserTeams()"]:::service
S6 -->|"我参与的所有虚拟团队"| D_SYSTEM
P2 -->|"查看团队位置"| A7["🔗 POST /api/distribution/invite/my-position"]:::api
A7 -->|"systemId, userId"| S7["⚙️ DistributionService.getUserPosition()"]:::service
S7 -->|"上级, 下级, 深度"| D_RELATION
end
%% ================================================================
%% 阶段三:佣金总览
%% ================================================================
subgraph 阶段三[阶段三:佣金总览]
P3["🏠 推广端:佣金中心"]:::page
P3 -->|"获取佣金汇总"| A8["🔗 POST /api/commission/summary"]:::api
A8 -->|"userId"| S8["⚙️ CommissionService.getSummary()"]:::service
S8 -->|"累计佣金, 可提现, 待结算, 已提现"| D_SUMMARY["📦 CommissionSummaryDTO"]:::data
P3 -->|"获取佣金统计"| A9["🔗 POST /api/commission/stats"]:::api
A9 -->|"userId"| S9["⚙️ CommissionService.getCommissionStats()"]:::service
S9 -->|"今日/本月/累计/L1/L2等面板数据"| D_STATS["📦 统计聚合(内存)"]:::data
P3 -->|"获取可提现余额"| A10["🔗 POST /api/commission/balance"]:::api
A10 -->|"userId"| S10["⚙️ CommissionService.getSummary()"]:::service
S10 -->|"availableAmount, settledAmount, pendingAmount"| D_SUMMARY
end
%% ================================================================
%% 阶段四:佣金明细与团队
%% ================================================================
subgraph 阶段四[阶段四:佣金明细与团队]
P3 -->|"查看佣金明细"| A11["🔗 POST /api/commission/list"]:::api
A11 -->|"userId, page, size"| S11["⚙️ CommissionService.getList()"]:::service
S11 -->|"分页佣金记录"| D_RECORDS["📦 commission_records 表"]:::data
P3 -->|"查看团队统计"| A12["🔗 POST /api/commission/team"]:::api
A12 -->|"userId"| S12["⚙️ CommissionService.getTeamStats()"]:::service
S12 -->|"L1/L2人数, 团队佣金"| D_RECORDS
P3 -->|"查看团队列表"| A13["🔗 POST /api/commission/team/list"]:::api
A13 -->|"userId, level, page, size"| S13["⚙️ CommissionService.getTeamList()"]:::service
S13 -->|"分页团队成员"| D_RECORDS
P3 -->|"查看转化漏斗"| A14["🔗 POST /api/commission/funnel"]:::api
A14 -->|"userId"| S14["⚙️ CommissionService.getCommissionFunnel()"]:::service
S14 -->|"转化各阶段人数/金额"| D_STATS
P1 -->|"记录佣金"| A15["🔗 POST /api/promotion/commission/record"]:::api
A15 -->|"Commission对象"| S15["⚙️ PromotionCommissionService.recordCommission()"]:::service
S15 -->|"写入佣金记录"| D_COMM["📦 promotion_commission 表"]:::data
P1 -->|"家庭佣金汇总"| A16["🔗 POST /api/promotion/commission/family-total"]:::api
A16 -->|"familyId"| S16["⚙️ PromotionCommissionService.getFamilyTotal()"]:::service
S16 -->|"该家庭佣金总额"| D_COMM
end
%% ================================================================
%% 阶段五:推广素材管理
%% ================================================================
subgraph 阶段五[阶段五:推广素材管理]
P4["🏠 推广端:素材中心"]:::page
P4 -->|"素材列表"| A17["🔗 POST /api/promotion/material/list"]:::api
A17 -->|"materialType, usageScenario, keyword"| S17["⚙️ PromotionMaterialService.getMaterials()"]:::service
S17 -->|"分页素材列表"| D_MAT["📦 promotion_materials 表"]:::data
P4 -->|"素材详情"| A18["🔗 POST /api/promotion/material/detail"]:::api
A18 -->|"id"| S18["⚙️ PromotionMaterialService.getById()"]:::service
S18 -->|"素材完整信息"| D_MAT
P4 -->|"按场景获取"| A19["🔗 POST /api/promotion/material/by-scenario"]:::api
A19 -->|"scenario"| S19["⚙️ PromotionMaterialService.getByScenario()"]:::service
S19 -->|"该场景下的所有素材"| D_MAT
P4 -->|"管理员:创建素材"| A20["🔗 POST /api/promotion/material/create"]:::api
A20 -->|"PromotionMaterial对象"| S20["⚙️ PromotionMaterialService.createMaterial()"]:::service
S20 -->|"新建素材记录"| D_MAT
P4 -->|"管理员:更新素材"| A21["🔗 POST /api/promotion/material/update"]:::api
A21 -->|"PromotionMaterial对象(id必填)"| S21["⚙️ PromotionMaterialService.updateMaterial()"]:::service
S21 -->|"更新素材记录"| D_MAT
P4 -->|"管理员:删除素材"| A22["🔗 POST /api/promotion/material/delete"]:::api
A22 -->|"id"| S22["⚙️ PromotionMaterialService.deleteMaterial()"]:::service
S22 -->|"删除素材记录"| D_MAT
end
%% ================================================================
%% 阶段六:提现
%% ================================================================
subgraph 阶段六[阶段六:提现]
P3 -->|"申请提现"| A23["🔗 POST /api/withdrawal/apply"]:::api
A23 -->|"amount, accountInfo"| S23["⚙️ WithdrawalService.apply()"]:::service
S23 -->|"新建提现申请(待审核)"| D_WITHDRAW["📦 withdrawal_requests 表"]:::data
P3 -->|"提现记录"| A24["🔗 POST /api/withdrawal/history"]:::api
A24 -->|"page, size"| S24["⚙️ WithdrawalService.getHistory()"]:::service
S24 -->|"该用户的历史提现记录"| D_WITHDRAW
P5["🖥 管理后台:佣金审核页"]:::page
P5 -->|"提现列表"| A25["🔗 POST /api/admin/commission/withdrawals"]:::api
A25 -->|"status, page, size"| S25["⚙️ WithdrawalService.getAdminList()"]:::service
S25 -->|"全平台提现申请"| D_WITHDRAW
P5 -->|"审核提现"| A26["🔗 POST /api/admin/commission/audit"]:::api
A26 -->|"requestId, status, remark"| S26["⚙️ WithdrawalService.audit()"]:::service
S26 -->|"更新提现状态(approved/rejected)"| D_WITHDRAW
P5 -->|"退款记录"| A27["🔗 POST /api/admin/commission/refunds/pending"]:::api
A27 -->|"status, orderType, page, size"| S27["⚙️ PendingRefundService.getAllPendingRefunds()"]:::service
S27 -->|"待处理退款列表"| D_REFUND["📦 pending_refunds 表"]:::data
P5 -->|"中止退款"| A28["🔗 POST /api/admin/commission/refunds/cancel"]:::api
A28 -->|"refundId"| S28["⚙️ PendingRefundService.cancelPendingRefund()"]:::service
S28 -->|"取消退款流程"| D_REFUND
end
%% ================================================================
%% 阶段七:排行榜与里程碑
%% ================================================================
subgraph 阶段七[阶段七:排行榜与里程碑]
P1 -->|"查看排行榜"| A29["🔗 POST /api/leaderboard/top"]:::api
A29 -->|"weekStart"| S29["⚙️ ReferralLeaderboardService.getTopUsers()"]:::service
S29 -->|"推广排行前20名"| D_RANK["📦 排行聚合(内存)"]:::data
P1 -->|"我的排名"| A30["🔗 POST /api/leaderboard/my-rank"]:::api
A30 -->|"userId, weekStart"| S30["⚙️ ReferralLeaderboardService.getMyRank()"]:::service
S30 -->|"当前用户排名及上下级差"| D_RANK
P1 -->|"里程碑列表"| A31["🔗 POST /api/invite/milestone/list"]:::api
A31 -->|"userId"| S31["⚙️ InviteMilestoneService.getMilestones()"]:::service
S31 -->|"已达成/未达成的里程碑"| D_MILESTONE["📦 invite_milestones 表"]:::data
P1 -->|"领取里程碑奖励"| A32["🔗 POST /api/invite/milestone/claim"]:::api
A32 -->|"userId, milestone"| S32["⚙️ InviteMilestoneService.claimReward()"]:::service
S32 -->|"发放奖励, 更新状态"| D_MILESTONE
end
%% ================================================================
%% 角色关联
%% ================================================================
ROLE_PARENT -.- P1
ROLE_PARENT -.- P2
ROLE_PARENT -.- P3
ROLE_PARENT -.- P4
ROLE_TEACHER -.- P2
ROLE_ADMIN -.- P5
端点明细
推广绑定
| 端点 |
说明 |
端口 |
请求数据 |
响应数据 |
POST /api/promotion/bind |
绑定推广关系 |
📱小程序 |
{inviteCode, promoterFamilyId} |
PromotionBinding 对象 |
POST /api/promotion/commission/list |
家庭佣金列表 |
📱小程序 |
{familyId, page, size} |
{records, total, page, size} |
POST /api/promotion/bindings/list |
绑定列表 |
📱小程序 |
{familyId} |
List<PromotionBinding> |
POST /api/promotion/commission/record |
记录佣金 |
⚙️系统自动 |
Commission 对象(含familyId, guideId, amount, type, source) |
boolean |
POST /api/promotion/commission/family-total |
家庭佣金总额 |
📱小程序 |
{familyId} |
Integer(总金额) |
销售邀请
| 端点 |
说明 |
端口 |
请求数据 |
响应数据 |
POST /api/distribution/invite/generate |
生成销售邀请码 |
📱小程序 |
{systemId} |
String(邀请码) |
POST /api/distribution/invite/validate |
校验邀请码有效性 |
📱小程序 |
{inviteCode} |
{valid, inviteCode, systemId, inviterId, teamName} |
POST /api/distribution/invite/my-teams |
我的虚拟团队列表 |
📱小程序 |
—(从token取userId) |
List<DistributionSystem> |
POST /api/distribution/invite/my-position |
团队中的位置 |
📱小程序 |
{systemId} |
{parentId, children, depth, ...} |
佣金中心
| 端点 |
说明 |
端口 |
请求数据 |
响应数据 |
POST /api/commission/summary |
佣金汇总 |
📱小程序 |
—(从token取userId) |
CommissionSummaryDTO(累计/可提现/待结算/已提现) |
POST /api/commission/list |
佣金明细 |
📱小程序 |
{page, size} |
Page<CommissionRecord> |
POST /api/commission/team |
团队统计 |
📱小程序 |
—(从token取userId) |
{l1Count, l2Count, teamCommission, ...} |
POST /api/commission/stats |
佣金统计面板 |
📱小程序 |
—(从token取userId) |
{todayAmount, monthlyAmount, totalAmount, ...} |
POST /api/commission/balance |
可提现余额 |
📱小程序 |
—(从token取userId) |
{availableAmount, settledAmount, pendingAmount, totalCommission, withdrawnAmount} |
POST /api/commission/team/list |
团队成员列表 |
📱小程序 |
{level, page, size} |
{members, total, page, size} |
POST /api/commission/funnel |
转化漏斗 |
📱小程序 |
—(从token取userId) |
{各阶段转化人数/金额} |
推广素材
| 端点 |
说明 |
端口 |
请求数据 |
响应数据 |
POST /api/promotion/material/list |
素材列表 |
📱小程序 |
{materialType, usageScenario, keyword, pageNum, pageSize} |
Page<PromotionMaterial> |
POST /api/promotion/material/detail |
素材详情 |
📱小程序 |
{id} |
PromotionMaterial |
POST /api/promotion/material/by-scenario |
按场景获取素材 |
📱小程序 |
{scenario} |
List<PromotionMaterial> |
POST /api/promotion/material/create |
创建素材(管理员) |
🖥管理后台 |
PromotionMaterial(含title, materialType, coverUrl, ...) |
PromotionMaterial |
POST /api/promotion/material/update |
更新素材(管理员) |
🖥管理后台 |
PromotionMaterial(id必填) |
null |
POST /api/promotion/material/delete |
删除素材(管理员) |
🖥管理后台 |
{id} |
null |
提现
| 端点 |
说明 |
端口 |
请求数据 |
响应数据 |
POST /api/withdrawal/apply |
申请提现 |
📱小程序 |
{amount, accountInfo} |
String(成功/失败信息) |
POST /api/withdrawal/history |
提现记录 |
📱小程序 |
{page, size} |
Page<WithdrawalRequest> |
排行榜与里程碑
| 端点 |
说明 |
端口 |
请求数据 |
响应数据 |
POST /api/leaderboard/top |
推广排行榜 |
📱小程序 |
{weekStart} |
List<{rank, userId, count, ...}>(前20名) |
POST /api/leaderboard/my-rank |
我的排名 |
📱小程序 |
{weekStart} |
{rank, totalCount, aheadCount, behindCount} |
POST /api/invite/milestone/list |
里程碑列表 |
📱小程序 |
—(从token取userId) |
List<InviteMilestone> |
POST /api/invite/milestone/claim |
领取里程碑奖励 |
📱小程序 |
{milestone} |
String(成功/失败信息) |
管理后台 — 佣金审核
| 端点 |
说明 |
端口 |
请求数据 |
响应数据 |
POST /api/admin/commission/withdrawals |
提现列表 |
🖥管理后台 |
{status, page, size} |
Page<WithdrawalRequest> |
POST /api/admin/commission/audit |
审核提现 |
🖥管理后台 |
{requestId, status, remark} |
String(已通过/已拒绝) |
POST /api/admin/commission/update-profit-rate |
设置商品利润率 |
🖥管理后台 |
{productId, profitRate} |
String(设置成功) |
POST /api/admin/commission/refunds/pending |
待处理退款 |
🖥管理后台 |
{status, orderType, page, size} |
Page<PendingRefund> |
POST /api/admin/commission/refunds/summary |
退款汇总 |
🖥管理后台 |
— |
{totalPendingAmount} |
POST /api/admin/commission/refunds/cancel |
中止退款 |
🖥管理后台 |
{refundId} |
String(已中止退款) |
数据实体关系
推广绑定 → 佣金记录 → 提现申请
邀请码 → 虚拟团队 → 分销关系
| 表名 |
主键 |
核心字段 |
说明 |
promotion_binding |
id |
promoterFamilyId, inviteeFamilyId, inviteCode, bindingType, status |
家庭间推广绑定关系 |
family_commission |
id |
promoterFamilyId, buyerFamilyId, orderId, amount, commissionRate, commissionAmount, status |
家庭级佣金记录 |
promotion_commission |
id |
familyId, guideId, memberId, amount, type(register/purchase/invite), source, status |
推广佣金明细 |
commission_records |
id |
orderId, orderType, referrerId, buyerId, commissionType, commissionAmount, status, level(1/2) |
统一佣金记录(含层级) |
distribution_systems |
id |
name, ownerId, profitRate, enabled |
虚拟团队/分销体系配置 |
distribution_relations |
id |
systemId, userId, parentId, depth, inviteCode |
分销关系树 |
promotion_materials |
id |
title, materialType, coverUrl, fileUrl, usageScenario, status |
推广素材 |
withdrawal_requests |
id |
userId, amount, accountInfo, status, adminId, remark |
提现申请记录 |
invite_milestones |
id |
userId, milestone, status, reward |
邀请里程碑 |
完整性分析
| # |
维度 |
评估 |
说明 |
| 1 |
流程完整性 |
✅ 完整 |
覆盖推广绑定、邀请码、佣金总览/明细/团队、素材管理、提现、排行榜、里程碑共7个阶段,涵盖6个Controller |
| 2 |
异常路径 |
⚠️ 部分覆盖 |
邀请码无效(validate返回404)、提现审核拒绝已覆盖;佣金结算失败、退款异常等业务逻辑在Service层处理,图中未展开 |
| 3 |
端点覆盖 |
✅ 完整 |
30个端点全部映射到流程图中,与PromotionController、CommissionController、DistributionInviteController、WithdrawalController、ReferralLeaderboardController、PromotionMaterialController、InviteMilestoneController、AdminCommissionController的@PostMapping一致 |
| 4 |
角色覆盖 |
✅ 完整 |
家长(推广员)为推广核心用户,可完成全部推广操作;规划师可生成邀请码;管理员在后台审核提现、管理素材、设置利润率 |
| 5 |
数据实体 |
✅ 完整 |
9张核心表均在图中映射,覆盖推广绑定(promotion_binding)、佣金(family_commission/promotion_commission/commission_records)、分销体系(distribution_systems/relations)、素材(promotion_materials)、提现(withdrawal_requests)、里程碑(invite_milestones) |
| 6 |
一致性 |
✅ 与代码一致 |
所有端点路径与实际Controller(PromotionController、CommissionController、DistributionInviteController、WithdrawalController、ReferralLeaderboardController、PromotionMaterialController、InviteMilestoneController、AdminCommissionController)的@PostMapping匹配 |