Laravel实现间接上线推荐奖金发放功能
Laravel 推荐系统间接奖励实现方案
你现有的用户表结构、User模型关联关系已经完全满足需求,不需要新增字段或调整关联定义,只需要修改注册后的奖励发放逻辑,沿推荐链路向上溯源1层给间接上线发奖即可。
核心实现代码
直接替换原有注册逻辑中的发奖段即可:
$referrer = User::whereUsername(session()->pull('referrer'))->first(); $user = User::create([ 'username' => $request->username, 'name' => $request->name, 'referrer_id' => $referrer ? $referrer->id : null, 'email' => $request->email, 'password' => Hash::make($request->password), ]); // 奖励金额可根据业务自行调整 $direct_reward = 400; $indirect_reward = 200; if ($user->referrer !== null) { // 发放直接推荐奖励 $directReferrer = $user->referrer; $directReferrer->deposit($direct_reward); // Notification::send($directReferrer, new ReferrerBonus($user)); // 查找间接上线(直接推荐人的上级),存在则发放间接奖励 $indirectReferrer = $directReferrer->referrer; if ($indirectReferrer !== null) { $indirectReferrer->deposit($indirect_reward); // 如需给间接上线发通知,可自行解开注释、新建对应通知类 // Notification::send($indirectReferrer, new IndirectReferrerBonus($user, $directReferrer)); } }
逻辑匹配验证
对应你给出的推荐链路规则,验证如下:
- 链路A→B→C(A推荐B,B推荐C):C注册时,直接推荐人B拿400直接奖励,B的上级A拿200间接奖励,符合「B成功推荐新用户时为A发放奖励」的要求
- 链路延伸到A→B→C→D(C推荐D):D注册时,直接推荐人C拿400直接奖励,C的上级B拿200间接奖励,符合「C成功推荐新用户时为B发放奖励」的要求
扩展方案(按需选用)
如果后续业务需要支持2级以上的多级推荐奖励,不需要调整表结构,把单层溯源改成循环向上遍历即可,支持自定义最大奖励层级和每层奖励金额:
// 多级奖励配置示例:最多支持3级奖励,每层对应奖励金额 $max_reward_level = 3; $reward_config = [ 1 => 400, 2 => 200, 3 => 100 ]; $current_trace_user = $user; $current_level = 1; // 沿推荐链路向上遍历,直到达到最大层级或没有上级为止 while ($current_level <= $max_reward_level && $current_trace_user->referrer !== null) { $up_referrer = $current_trace_user->referrer; $up_referrer->deposit($reward_config[$current_level]); // 对应层级通知逻辑可自行添加 $current_trace_user = $up_referrer; $current_level++; }
注意:如果站点用户量级较大、推荐链路较长,建议把奖励发放逻辑放到队列中异步执行,避免注册接口响应耗时过长。
内容的提问来源于stack exchange,提问作者Hyanu Oluwa
相关产品推荐
相关产品推荐

