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'), ]); } }