6
0
Fork 0
jiqu-library-server/app/Services/DistributeService.php

94 lines
2.8 KiB
PHP

<?php
namespace App\Services;
use App\Models\{User, Order, SalesValueLog, Vip, OrderProfit};
/**
* 分销模块
*/
class DistributeService
{
/**
* 用户下单后, 更新成长值, 添加返现记录
*
* @param \App\Models\Order $order
*
* @return mixed
*/
public function storeByOrder(Order $order)
{
// 订单已取消
if ($order->isCancelled()) {
return false;
}
// 订单成长值
$sales_value = $order->sales_value;
$user = $order->user;
// $user->salesValueLogs()->create([
// 'order_id' => $order->id,
// 'order_user_id' => $order->user_id,
// 'type' => SalesValueLog::TYPE_INDIVIDUAL,
// 'change_sales_value' => $sales_value
// ]);
// $user->userInfo()->increment('growth_value', $sales_value);
// 上级返现
$parent_ids = array_reverse($user->userInfo->parent_ids);
$parents = User::with(['userInfo', 'userVip.vip'])->whereIn('id', $parent_ids)->get();
// 过滤掉不是代理身份的用户
// 过滤掉当前等级 大于 下一级的等级的用户
$filtered = $parents->filter(function ($item, $key) use ($parents) {
if (!$item->userVip) {
return false;
}
$next = $parents->get($key + 1);
if ($next && $next->userVip) {
return $item->userVip->vip->sort < $next->userVip->vip->sort;
}
return true;
});
// 生成返现记录
$profit_list = [];
$money_sum = 0;
foreach($filtered->reverse() as $item) {
$vip = $item->userVip->vip??'';
if (!$vip) {
continue;
}
$money = floor($sales_value * $vip->ratio) / 100 - $money_sum;
array_unshift($profit_list, [
'from_user_id' => $user->id,
'user_id' => $item->id,
'role' => $vip->slug . '-' . $vip->sort,
'role_name' => $vip->name,
'ratio' => $vip->ratio,
'growth_value' => $sales_value,
'money' => $money
]);
$money_sum += $money;
}
$order->update([
'profit' => $money_sum
]);
$order->profits()->createMany($profit_list);
}
/**
* 返现记录支付成功
*
* @param \App\Models\OrderProfit $profit
* @param mixed $data
*/
public function success(OrderProfit $profit, $data = null)
{
$profit->update([
'status' => 2,
'paid_at' => data_get($data, 'paid_at', now()),
'pay_data' => $data,
'remarks' => data_get($data, 'remarks'),
]);
}
}