分销系统
# 分销系统设计
# 分销的目的以及意义
分销的主要目的是通过建立庞大的销售网络和渠道来扩大产品的市场覆盖面,提高产品的销量和市场份额。该设计支持二级分销返佣,支持商家设置默认的一二级返佣比例,商家添加商品的时候支持按照不同商品单独设置商品一二级返佣比例(商品单独设置返佣比例优先级高于默认设置)
# 功能需求
# 客户端
# 成为推广员
当商家开启分销功能时,用户可以通过一笔订单下单金额大于满额分销最低金额成为推广员,同时也支持商家手动开启用户的推广权限
# 查看我的推广数据
若用户不是推广员,不会展示【我的推广】入口;只有已经是推广员的用户才可以进入我的推广数据页面
- 查看提现记录
- 提现
- 查看推广名片
- 查看推广统计
- 查看佣金明细
- 查看推广订单
- 查看推广排行
- 查看佣金排行
# 商家端
# 分销规则配置
# 统一设置
位置:分销 -> 分销配置 分销开关:是否开启分销 1.开启分销后指定用户成为分销员 2.设置分销门槛成为分销员 分销关系绑定:所有用户:所有无上级的用户都可以绑定 默认返佣设置:设置一二级返佣百分比,例如:一级佣金设置为20%,则一级返佣比例为20% 提现最低金额:满足提现金额后才可以提现 提现银行卡:填写用户申请佣金时可以选择的银行,按回车键可以继续填写 冻结时间:可设置返佣后的佣金冻结期,冻结的佣金不可以提现,达到解冻时间后方可提现;冻结期从用户获得返佣时间开始计算
# 商品单独设置返佣
在商品详情中有单项选:
- 默认佣金设置:计算使用商城默认佣金配置
- 单独设置:根据自定义设置计算佣金
# 佣金提现
用户需要在前台申请提现 可以选择银行卡,微信,支付宝三种方式 商家通过后台的申请记录,线下人工转账
财务 > 申请提现 线下转账
冻结的佣金不可以提现,达到解冻时间后方可提提现;冻结期从用户获得返佣时间开始计算
# 推广员管理
商家可以查看所有推广员,查看推广员详情,推广订单,佣金总额,已提现,未提现,冻结佣金等,清除上级推广员
# 推广方式
推广员可以分享自己的推广海报,或者将商品详情发送他人(新用户/没有绑定上级的用户),他人登录之后绑定分享关系
# 分销规则
# 分佣模式
- 支持平台开启/关闭分销功能
- 取消了人人分销的概念,默认就是指定分销,也可以设置分销门槛让新分销员满足条件后自动成为分销员。平台可以自由设置满额分销最低金额,用户一笔订单下单金额大于满额分销最低金额即可成为推广员
- 支持平台直接设置用户推广员状态(开启/关闭),平台关闭的推广员可以通过满额分销再次成为推广员
# 分佣等级
- 平台默认的一二级返佣比例,商家添加商品的时候支持按照不同商品单独设置商品一二级返佣比例;分销产生的相关费用由商家承担
# 返佣规则
A推广了B,B推广了C;
A购买商品后,自己没有返佣;
B购买商品后,A获得一级返佣;
C购买商品后,B获得一级返佣,A获得二级返佣;

- 不返佣的情况
- 用户没有推广员身份
- 产品售价为0
- 下级用户购买拼团,砍价,秒杀商品
- 下级用户购买商品后,没有确认收货,暂不返佣,确认收货之后才会返佣
# 商品返佣
商品返佣分为"默认返佣"和"商品单独返佣" 默认返佣: 商城统一设置商品的返佣比例 一级佣金 = 产品成交价 * 一级返佣比例 二级佣金 = 产品成交价 * 二级返佣比例 商品单独返佣:(固定佣金) 每个商品可以选择单独设置返佣 每个商品规格设置一二级返佣 单独设置后,商品的返佣以固定佣金为准,不受其他因素影响
# 佣金冻结及提现
- 支持平台维护用户可提现的银行卡
- 当下线在商城有成交,订单支付之后推广佣金处于冻结期,待冻结期过了没有发生售后相关情况,佣金给与推广员解冻,已解冻的佣金才支持提现,若冻结期发生售后,冻结佣金会进行收回;若解冻之后发生售后,已解冻佣金不进行收回,损失由商家承担;冻结期设置为0,则无冻结期;冻结期时间单位为"天"
- 计算佣金的任务一天执行一次,如果有需要可以自行更改。
# 分销关系
- 分销关系绑定,支持平台设置为新用户/所有用户,新用户指的是只能发展新用户成为自己的下级,所有用户指的是只要是没有上级推广人的用户,均可被发展成为下线。 注意:能成功绑定分销关系的前提是,必须具有分销权限的账号 通过扫描分销码,绑定分销关系 商品分享,在已开通分销权限的前提下,对方打开链接并成功登录后绑定分销关系。 订单必须已完成之后才会触发分佣流程
# 解除推广关系
推广订单问题 用户之间的上下级关系解除后,推广员之前记录的推广订单依然保留,之后下级消费的订单因推广关系已解除所以不再记录
# 实现
# 数据库设计
# 分销配置
分销配置表:eb_system_config brokerage_func_status是否启用分销:1-启用,0-禁止 store_brokerage_quota分销额度:-1-关闭,0--用户购买金额大于等于设置金额时,用户自动成为分销员 store_brokerage_ratio一级返佣比例 store_brokerage_two二级返佣比例 brokerage_bindind分销关系绑定:0-所有用户,1-新用户 user_extract_min_price用户提现最低金额 user_extract_bank提现银行 extract_time冻结时间 store_brokerage_is_bubble是否展示分销气泡:0-展示,1-展示
# 商品表
商品表:eb_store_product is_sub是否单独分佣
商品属性值表:eb_store_product_attr_value brokerage一级返佣 brokerage_two二级返佣
# 用户表
用户表:eb_user brokerage_price佣金金额 spread_uid推广员id spread_time推广员关联时间 is_promoter是否为推广员 spread_count下级人数 path推广等级记录 promoter_time成为分销员时间
# 用户佣金记录表
用户佣金记录表:eb_user_brokerage_record uid用户uid link_id关联id(orderNo,提现id) link_type关联类型(order,extract,yue) type类型:1-增加,2-扣减(提现) title标题 price金额 balance剩余 status状态:1-订单创建,2-冻结期,3-完成,4-失效(订单退款),5-提现申请 frozen_time冻结期时间(天) thaw_time解冻时间 create_time添加时间 update_time更新时间 brokerage_level分销等级
# 用户提现表
用户提现表:eb_user_extract uid用户uid real_name名称 extract_typebank = 银行卡 alipay = 支付宝 weixin=微信 bank_code银行卡 bank_name银行名称 bank_address开户地址 alipay_code支付宝账号 extract_price提现金额 fail_msg无效原因 fail_time失败时间 status-1 未通过 0 审核中 1 已提现 wechat微信号 qrcode_url微信收款二维码
# 编码设计
# 后台
# 分销配置实现
查表eb_system_config,key为: brokerage_func_status是否启用分销:1-启用,0-禁止 store_brokerage_quota分销额度:-1-关闭,0--用户购买金额大于等于设置金额时,用户自动成为分销员 store_brokerage_ratio一级返佣比例 store_brokerage_two二级返佣比例 brokerage_bindind分销关系绑定:0-所有用户,1-新用户 user_extract_min_price用户提现最低金额 user_extract_bank提现银行 extract_time冻结时间 store_brokerage_is_bubble是否展示分销气泡:0-展示,1-展示
# 用户管理
- /api/admin/user/list查询用户列表信息(spreadUid,spreadNickname,spreadTime,spreadCount,isPromoter,promoter_time,brokerage_price)的用户信息
- /api/admin/user/info查询用户详情信息(spreadUid,spreadTime,spreadCount,isPromoter,promoter_time,brokerage_price)
- /api/admin/user/update更新用户信息
- /api/admin/user/update/spread修改当前用户的推广人
- /api/admin/store/retail/spread/clean/5清除当前用户的推广人
# 分销员管理
- /api/admin/store/retail/list查询分销员列表
- 查询用户表中isPromoter=1的记录
- /api/admin/store/retail/spread/userlist下级推广员列表
- 获取全部推广人
- 传入当前用户的id,spreadId=uid查询用户表,即得到当前用户下的所有推广员
- 获取一级推广人
- 传入当前用户的id,spreadId=uid查询用户表,即得到当前用户下的所有推广员
- 获取二级推广人
- 先获取一级推广员,再获取一级推广员下的所有推广员
- 获取全部推广人
- /api/admin/store/retail/spread/orderlist推广订单列表
- 根据uid查询userBrokerageRecord
# 用户提现
- /api/admin/finance/apply/list提现申请列表
# 前台
# 我的推广
- /api/front/qrcode/base64获取推广二维码
- /api/front/commission推广数据接口(昨天的佣金 累计提现金额 当前佣金)
- /api/front/spread/people推广人统计
- 根据uid查询用户表,spreadUid=uid,grade=0查询当前用户一级推广员,grade=1查询当前用户二级推广员,还查询推广员所拥有的推广订单和佣金
- /api/front/spread/commission/detail佣金明细
- 根据uid查UserBrokerageRecord
- /api/front/spread/order推广人订单
- 根据uid查UserBrokerageRecord
- /api/front/rank推广人排行
- 根据用户表的spread_count字段,降序排列
- /api/front/brokerage_rank佣金排行
- 查UserBrokerageRecord的sum(price) AS price,groupby uid,降序排列
- /api/front/extract/record提现记录
- 查UserExtract,根据uid
- /api/front/extract/bank
- 可用银行
- /api/front/extract/user当前可以提现佣金,冻结佣金
- /api/front/extract/cash提交提现记录
# 绑定推广关系
- /api/front/user/bindSpread登录之后若链接上带有spread=n,则前端调用this.isLogin && silenceBindingSpread();绑定推广关系,前提是当前用户没有成为推广员,且当前用户没有绑定过推广关系
# 分销单
- /api/front/order/create
- OrderPaySuccessTask
- com.zbkj.service.service.impl.OrderPayServiceImpl#assignCommission计算佣金,生成佣金记录
- OrderPaySuccessTask
- com.zbkj.service.service.impl.OrderTaskServiceImpl#orderReceiving完单冻结佣金