You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

54 lines
1.8 KiB

<?php
/*
* @Descripttion: 级差分佣机制
* @version:
* @Author: GuaPi
* @Date: 2021-08-02 18:30:00
* @LastEditors: GuaPi
* @LastEditTime: 2021-08-06 19:56:11
*/
namespace App\Services;
use App\Models\User;
use App\Models\AgentUser;
use Illuminate\Support\Facades\DB;
class Rebate
{
/**
* @description: 根据用户UID与金额来计算分佣结果
* @param {*} $user_id 用户UID
* @param {*} $amount 分佣金额
* @return {*} collect 返回用户分佣数组数据
*/
public static function rebateLevelDiff(int $user_id, float $amount)
{
// 查询用户上级代理
// 获取订单的上级代理列表
$agents = collect(DB::table('agent_users')->get(['id', 'rebate_rate', 'rebate_rate_contract'])); //用于获取返佣率
$parents_com_rate = collect(User::getParents($user_id))
->map(function ($v) use ($agents) {
$user = $agents->where('id', $v)->first();
$rate_default = $user->rebate_rate; // 默认汇率
$rate_contract = $user->rebate_rate_contract; // 合约汇率
return [
'aid' => $v,
'rebate_rate' => $rate_contract ?? $rate_default,
];
})->toArray();
// 开始创建分佣记录数据
for ($i = 0; $i < count($parents_com_rate); $i++) {
$this_agent = $parents_com_rate[$i];
$pre_agent = $parents_com_rate[$i - 1] ?? [];
$pre_rate = $pre_agent['rebate_rate'] ?? 0;
$this_rate = ($this_agent['rebate_rate'] - $pre_rate);
$parents_com_rate[$i]['rebate'] = $this_rate * $amount;
$parents_com_rate[$i]['user_referrer'] = $parents_com_rate[0]['aid']; //用户上级代理
}
return $parents_com_rate;
}
}