私域团购系统架构设计:五级定价、自动结算与三级合规的技术实现

一、背景与技术挑战

私域团购系统本质上是一套多级分销 + 动态定价 + 自动分佣的电商平台。与普通商城相比,它有三个核心技术挑战:

  1. 五级定价引擎:同一商品需根据用户身份动态展示不同价格,且价格层级可配置。

  2. 自动结算与分佣:订单完成后需按身份差、团队关系、销售贡献自动计算多方佣金,且要保证高并发下的幂等与一致性。

  3. 合规硬约束:必须在系统层面锁定分销层级(默认三级),杜绝多级计酬、拉人头奖励,并实现全链路数据留痕。

本文从技术视角拆解这套系统的架构设计与关键实现。数据来自公开媒体报道,仅供参考,不构成收益承诺。


二、总体架构

采用前后端分离 + 微服务架构:

复制代码
┌─────────────────────────────────────────────────────┐
│                    前端层                            │
│  小程序 / H5 / APP  │  管理后台  │  分销商工作台      │
└─────────────────────────────────────────────────────┘
                          │
┌─────────────────────────────────────────────────────┐
│                    API 网关                          │
│        鉴权 / 限流 / 路由 / 日志                      │
└─────────────────────────────────────────────────────┘
                          │
┌──────────┬──────────┬──────────┬──────────┬─────────┐
│ 用户服务 │ 商品服务 │ 订单服务 │ 佣金服务 │ 合规服务 │
│ User     │ Product  │ Order    │ Commission│ Compliance│
└──────────┴──────────┴──────────┴──────────┴─────────┘
                          │
┌─────────────────────────────────────────────────────┐
│   MySQL / Redis / MQ / 对象存储 / 审计日志           │
└─────────────────────────────────────────────────────┘

核心服务说明:

  • 用户服务:管理用户身份等级(L1-L5)、上下级关系(仅三级)。

  • 商品服务:商品基础价、五级价格表。

  • 订单服务:下单、支付、发货、签收状态机。

  • 佣金服务:佣金计算、分账、结算、提现。

  • 合规服务:层级校验、计酬规则校验、全链路审计。


三、五级定价引擎设计

3.1 数据模型

商品价格表 product_price

字段 类型 说明
id bigint 主键
product_id bigint 商品ID
base_price decimal(10,2) 基准零售价(如89.00)
level_1_price decimal(10,2) 团购用户价
level_2_price decimal(10,2) 分销商价
level_3_price decimal(10,2) 小批发价
level_4_price decimal(10,2) 中批发价
level_5_price decimal(10,2) 大批发价
status tinyint 启用状态

用户身份表 user_identity

字段 类型 说明
user_id bigint 用户ID
level tinyint 1-5,对应五级
parent_id bigint 直接上级ID
grandparent_id bigint 上上级ID(仅存两级,第三级通过查询)
path varchar(255) 层级路径,如 1/10/25

3.2 价格查询逻辑

java

复制代码
public BigDecimal getPrice(Long userId, Long productId) {
    UserIdentity identity = userIdentityMapper.selectByUserId(userId);
    ProductPrice price = productPriceMapper.selectByProductId(productId);
    switch (identity.getLevel()) {
        case 1: return price.getLevel1Price();
        case 2: return price.getLevel2Price();
        case 3: return price.getLevel3Price();
        case 4: return price.getLevel4Price();
        case 5: return price.getLevel5Price();
        default: throw new BizException("未知身份等级");
    }
}

前端展示时,同一商品对五级用户展示不同价格,实现"身份越高,进价越低"。


四、自动结算与分佣引擎

4.1 订单归属

订单创建时记录 distributor_id(推广分销商),通过分享链接或邀请码绑定。订单表关键字段:

sql

复制代码
CREATE TABLE `order` (
  `id` bigint NOT NULL AUTO_INCREMENT,
  `order_no` varchar(64) NOT NULL,
  `user_id` bigint NOT NULL COMMENT '下单用户',
  `distributor_id` bigint NOT NULL COMMENT '归属分销商',
  `product_id` bigint NOT NULL,
  `quantity` int NOT NULL,
  `unit_price` decimal(10,2) NOT NULL COMMENT '实际成交单价',
  `total_amount` decimal(10,2) NOT NULL,
  `status` tinyint NOT NULL COMMENT '0待支付 1已支付 2已发货 3已签收 4已完成',
  `created_at` datetime,
  `signed_at` datetime,
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_order_no` (`order_no`)
);

4.2 佣金计算模型

佣金来源分为四类:

类型 计算方式 约束
零售差价 成交价 - 本人进价 仅本人订单
层级差价 下级进价 - 本人进价 仅直接下级、二级内
团队管理收益 直属团队真实销售额 × 比例 三级内,按销售计酬
奖励活动 后台配置 不挂钩人头

层级差价示例(以基准价89元为例):

  • 大批发(64元)供货给中批发(67元),赚3元/件

  • 中批发(67元)供货给小批发(71元),赚4元/件

  • 小批发(71元)供货给分销商(75元),赚4元/件

佣金计算伪代码

java

复制代码
public CommissionResult calculateCommission(Order order) {
    CommissionResult result = new CommissionResult();
    Long distributorId = order.getDistributorId();
    
    // 1. 零售差价:分销商本人进价与成交价差额
    BigDecimal selfPrice = getPrice(distributorId, order.getProductId());
    BigDecimal retailDiff = order.getUnitPrice().subtract(selfPrice)
                               .multiply(BigDecimal.valueOf(order.getQuantity()));
    result.addRetailCommission(distributorId, retailDiff);
    
    // 2. 层级差价:仅计算直接上级和上上级,最多两级
    UserIdentity distributor = getIdentity(distributorId);
    Long parentId = distributor.getParentId();
    if (parentId != null) {
        BigDecimal parentPrice = getPrice(parentId, order.getProductId());
        BigDecimal parentDiff = selfPrice.subtract(parentPrice)
                                   .multiply(BigDecimal.valueOf(order.getQuantity()));
        result.addSpreadCommission(parentId, parentDiff);
        
        // 上上级
        UserIdentity parent = getIdentity(parentId);
        Long grandId = parent.getParentId();
        if (grandId != null) {
            BigDecimal grandPrice = getPrice(grandId, order.getProductId());
            BigDecimal grandDiff = parentPrice.subtract(grandPrice)
                                         .multiply(BigDecimal.valueOf(order.getQuantity()));
            result.addSpreadCommission(grandId, grandDiff);
        }
    }
    
    // 3. 团队管理收益:按直属团队真实销售额计算,三级内
    // 此处省略具体实现,核心是只统计真实成交订单,不统计人头
    // ...
    
    return result;
}

4.3 幂等与并发

佣金计算在订单签收后触发,通过消息队列异步处理:

复制代码
订单签收 → 发送MQ消息 → 佣金服务消费 → 计算佣金 → 写入佣金流水 → 更新账户余额

幂等保证 :以 order_no + commission_type + user_id 作为唯一键,防止重复计算。

sql

复制代码
CREATE TABLE `commission_flow` (
  `id` bigint NOT NULL AUTO_INCREMENT,
  `order_no` varchar(64) NOT NULL,
  `user_id` bigint NOT NULL,
  `commission_type` tinyint NOT NULL COMMENT '1零售差 2层级差 3团队收益 4奖励',
  `amount` decimal(10,2) NOT NULL,
  `status` tinyint NOT NULL COMMENT '0待结算 1已结算 2已失效',
  `created_at` datetime,
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_order_user_type` (`order_no`, `user_id`, `commission_type`)
);

五、合规技术实现:三道硬约束

5.1 层级上限锁定

在用户注册和绑定上下级时,强制校验层级深度:

java

复制代码
public void bindParent(Long userId, Long parentId) {
    // 查询parent的层级深度
    int parentDepth = getDepth(parentId);
    if (parentDepth >= 3) {
        throw new BizException("分销层级已达上限,无法继续绑定");
    }
    // 绑定关系
    userIdentityMapper.updateParent(userId, parentId);
}

后台可配置最大层级,默认三级。超出层级无法发放佣金,从结构上杜绝多级计酬。

5.2 按真实销售计酬

佣金引擎只读取 order 表中状态为"已签收"的真实成交订单,不读取任何"拉人头""团队人数"数据。计酬科目仅包含:

  • 零售差价

  • 层级差价(仅两级)

  • 团队销售服务费(按真实销售额)

  • 平级/培育奖励(挂钩真实销售)

  • 团队冲量奖(后台设上限,不挂钩人头)

禁止的计酬科目:人头奖励、入门费返利、多级提成。

5.3 零门槛 + 全链路留痕

  • 零门槛:注册即成为L1团购用户,无需付费、无需强制购货。

  • 数据留痕:所有订单、佣金、结算、层级变更均写入审计日志表:

sql

复制代码
CREATE TABLE `audit_log` (
  `id` bigint NOT NULL AUTO_INCREMENT,
  `user_id` bigint,
  `action` varchar(64) COMMENT '操作类型',
  `target_id` bigint COMMENT '目标ID',
  `before_data` json,
  `after_data` json,
  `ip` varchar(45),
  `created_at` datetime,
  PRIMARY KEY (`id`)
);

审计日志不可篡改,支持按用户、时间、操作类型检索,便于配合监管核查。


六、数据库设计要点

6.1 用户层级关系表

sql

复制代码
CREATE TABLE `user_relation` (
  `user_id` bigint NOT NULL,
  `parent_id` bigint DEFAULT NULL,
  `grandparent_id` bigint DEFAULT NULL,
  `level` tinyint NOT NULL COMMENT '1-5身份等级',
  `path` varchar(255) COMMENT '层级路径',
  `created_at` datetime,
  `updated_at` datetime,
  PRIMARY KEY (`user_id`),
  KEY `idx_parent` (`parent_id`),
  KEY `idx_grand` (`grandparent_id`)
);

6.2 佣金流水表

sql

复制代码
CREATE TABLE `commission_flow` (
  `id` bigint NOT NULL AUTO_INCREMENT,
  `order_no` varchar(64) NOT NULL,
  `user_id` bigint NOT NULL,
  `commission_type` tinyint NOT NULL,
  `amount` decimal(10,2) NOT NULL,
  `status` tinyint NOT NULL DEFAULT 0,
  `settled_at` datetime,
  `created_at` datetime,
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_order_user_type` (`order_no`, `user_id`, `commission_type`),
  KEY `idx_user` (`user_id`),
  KEY `idx_status` (`status`)
);

七、性能与扩展考虑

  1. 缓存:商品五级价格、用户身份信息放入 Redis,减少数据库压力。

  2. 异步结算:佣金计算走 MQ,避免阻塞订单主流程。

  3. 分库分表:订单表和佣金流水表按用户ID哈希分片,支撑高并发。

  4. 对账系统:每日定时对账,确保订单金额、佣金金额、账户余额一致。

  5. 合规审计:审计日志独立存储,保留至少3年,支持导出。


八、总结

私域团购系统的技术核心在于:动态定价、自动分佣、合规硬约束

  • 五级定价通过价格表和身份表联动实现;

  • 自动结算通过订单归属 + 层级关系 + 佣金引擎实现,并用幂等和 MQ 保证一致性;

  • 合规通过层级上限锁定、按真实销售计酬、全链路留痕三道硬约束实现。

相关推荐
木木学AI7 小时前
2026主流大模型电话机器人系统解析:技术架构、业务执行与企业落地实践
架构·系统架构·机器人
诚心呈意共享外卖配送系统7 小时前
中秋礼品配送峰值场景下,自建同城配送平台的技术选型与架构实践
架构·系统架构·创业创新
m0_5873830013 小时前
折扣卡CPS系统源码的技术架构与实战开发指南
人工智能·小程序·数据挖掘·系统架构·需求分析
老王的笔记v2 天前
46期 Windows超级管理器 垃圾清理 预装卸载与系统优化工具箱
windows·系统架构
诚心呈意共享外卖配送系统2 天前
校园配送系统架构设计:最后100米智能调度与两段接力实践
架构·系统架构·创业创新
Vicky_time2 天前
2026美国海外仓TOP5技术评测:FBA中转海外仓系统对接与操作方案
大数据·系统架构
PHP实战开发录2 天前
PHP日志写满磁盘后接口为什么异常
开发语言·系统架构·php·开发
励志不掉头发的内向程序员2 天前
【LibreCAD 2D架构】鼠标点下的坐标为什么会被“吸”走?LibreCAD 对象捕捉系统解析
开发语言·c++·qt·学习·系统架构
dishugj3 天前
2.2.3存储器 考点整理(系统架构设计师)
系统架构