CRMEB系统实现了完整的分销功能,支持二级分销、分销等级、佣金计算、分销申请审核等核心功能。分销系统通过推广关系链实现用户之间的推广和佣金分配,帮助商家扩大销售渠道,提高用户粘性。
分销功能的核心配置项在系统配置中管理,主要包括:
| 配置项 | 描述 | 默认值 |
|---|---|---|
| brokerage_func_status | 分销功能开关 | 0 |
| store_brokerage_ratio | 一级分销佣金比例 | 0 |
| store_brokerage_two | 二级分销佣金比例 | 0 |
| brokerage_level | 分销层级(1或2) | 2 |
| store_brokerage_statu | 分销员申请开关 | 0 |
| store_brokerage_binding_status | 分销绑定模式 | 0 |
| is_self_brokerage | 是否开启自购返佣 | 0 |
// 获取分销功能开关状态
sys_config('brokerage_func_status');
// 获取一级分销佣金比例
sys_config('store_brokerage_ratio');
// 获取二级分销佣金比例
sys_config('store_brokerage_two');
分销等级模型定义了分销员的等级信息,包括佣金比例、升级条件等:
class AgentLevel extends BaseModel
{
protected $pk = 'id';
protected $name = 'agent_level';
// 关联等级任务
public function task()
{
return $this->hasMany(AgentLevelTask::class, 'level_id', 'id')->where('is_del', 0);
}
}
用户可以通过完成指定任务升级分销等级,享受更高的佣金比例:
// 检查用户等级任务完成情况
public function checkUserLevelFinish($uid)
{
// 获取用户当前等级
$userInfo = app()->make(UserServices::class)->getUserInfo($uid);
if (!$userInfo) return false;
// 获取下一级等级信息
$levelList = $this->dao->getList(['is_del' => 0, 'status' => 1], '*', [], 0, 0, $userInfo['agent_level']);
// 检查任务完成情况
foreach ($levelList as $levelInfo) {
// 获取等级任务
$task_list = $levelInfo['task'] ?? [];
// 检查每个任务是否完成
foreach ($task_list as $task) {
$levelTaskServices->checkLevelTaskFinish($uid, (int)$task['id'], $task);
}
// 统计完成的任务数量
$finish_task = $levelTaskRecordServices->count([
'level_id' => $levelInfo['id'],
'uid' => $uid,
'task_id' => array_column($task_list, 'id')
]);
// 任务完成升级
if ($finish_task >= $levelInfo['task_num']) {
$userServices->update($uid, ['agent_level' => $levelInfo['id']]);
}
}
}
佣金计算在订单创建时完成,根据商品售价和佣金比例计算:
public function computeOrderProductTruePrice($cartInfo, $priceData, $addressId, $uid, $orderInfo)
{
// 获取分销佣金比例和返佣人员
[$storeBrokerageRatio, $storeBrokerageTwo, $spread_one_uid, $spread_two_uid] = $this->getSpreadDate($uid);
// 计算佣金
if ($storeBrokerageRatio > 0 || $storeBrokerageTwo > 0 || $staffPercent > 0 || $agentPercent > 0 || $divisionPercent > 0) {
// 计算商品售价
$price = bcsub((string)$cart['truePrice'], (string)$cart['truePostage'], 2);
// 计算一级佣金
if ($storeBrokerageRatio > 0) {
$brokerageRatio = bcdiv($storeBrokerageRatio, 100, 4);
$oneBrokerage = bcmul((string)$price, (string)$brokerageRatio, 2);
}
// 计算二级佣金
if ($storeBrokerageTwo > 0) {
$brokerageTwo = bcdiv($storeBrokerageTwo, 100, 4);
$twoBrokerage = bcmul((string)$price, (string)$brokerageTwo, 2);
}
// 记录佣金信息
$cart['one_brokerage'] = $oneBrokerage;
$cart['two_brokerage'] = $twoBrokerage;
}
return [$cartInfo, [$spread_one_uid, $spread_two_uid]];
}
系统支持配置分销层级(1或2级),可根据配置调整佣金计算:
// 判断返佣层级为一级时,将二级用户uid和二级分佣比例改为0
if (sys_config('brokerage_level') == 1) {
$storeBrokerageTwo = $spread_two_uid = 0;
}
系统支持配置用户自购返佣功能:
// 获取上级和上上级的uid,开启自购获取自己和上级的uid
$spread_one_uid = $userServices->getSpreadUid($uid, $userInfo);
用户可以申请成为分销员,申请信息存储在数据库中等待管理员审核:
// 分销申请接口
public function apply()
{
// 检查分销功能是否开启
if (!sys_config('brokerage_func_status')) {
throw new ApiException(100209);
}
// 检查是否已经是分销员
if ($this->services->checkUserPromoter($this->uid)) {
throw new ApiException(100210);
}
// 提交申请
$this->services->applySpread($this->uid, $this->request->post());
return app('json')->success(100211);
}
管理员可以审核用户的分销申请,审核通过后用户成为分销员:
// 分销申请审核接口
public function applyExamine($id, $uid, $status)
{
// 检查参数
if (!$id || !$uid || !in_array($status, [0, 1])) {
throw new AdminException(100026);
}
// 审核申请
$this->services->examineSpreadApply($id, $uid, $status);
return app('json')->success(100014);
}
用户通过分享链接或二维码注册时,会自动绑定推广关系:
// 保存用户信息并绑定推广关系
public function setUserInfo($user, int $spreadUid = 0, string $userType = 'wechat')
{
$data = [
// 用户基本信息
'nickname' => $user['nickname'] ?? '',
'avatar' => $user['headimgurl'] ?? '',
// ... 其他字段
];
// 绑定推广关系
if ($spreadUid) {
$data['spread_uid'] = $spreadUid;
$data['spread_time'] = time();
}
// 保存用户信息
$res = $this->dao->save($data);
// 触发用户注册事件
event('UserRegisterListener', [$spreadUid, $userType, $user['nickname'], $res->uid, 1]);
return $res;
}
系统提供接口查询用户的推广关系链:
// 获取用户的一级和二级推广用户
public function getSpreadList(int $uid, array $where, bool $is_page = true)
{
// 获取一级推广用户
$one_list = $this->dao->getSpreadUserList($where, $uid, 1, $is_page);
// 获取二级推广用户
$two_list = $this->dao->getSpreadUserList($where, $uid, 2, $is_page);
return ['one_list' => $one_list, 'two_list' => $two_list];
}
系统支持多种分销等级任务类型:
系统会定期检查用户的任务完成情况,满足条件时自动升级:
// 检查任务完成情况
public function checkLevelTaskFinish($uid, $taskId, $task)
{
// 根据任务类型检查完成情况
switch ($task['type']) {
case 1: // 推广人数
$count = $this->dao->getSpreadUserCount($uid);
break;
case 2: // 订单金额
$count = $this->dao->getUserOrderAmount($uid);
break;
case 3: // 订单数量
$count = $this->dao->getUserOrderCount($uid);
break;
// ... 其他任务类型
}
// 更新任务完成记录
if ($count >= $task['value']) {
$this->taskRecordServices->updateTaskRecord($uid, $taskId);
}
}
提示:该文档由AI生成,仅供参考。