-1,'msg'=>'未開啟分銷']; } //檢查是否已經計算過 $is_calculate = Db::name('affiliate_log')->where('order_id', $order['order_id'])->count(); if($is_calculate){ return ['code'=>-1,'msg'=>'已經計算過']; } try { //找出第一二三四層介紹人 $sso_user_id = Db::name('users')->where('user_id', $order['user_id'])->value('sso_user_id'); $parents = self::getAffiliate($sso_user_id, 1); foreach ($parents as $key => $value) { //計算分銷金額 $money[$key] = $order['order_amount'] * $affiliate['item'][$key]['level_money'] / 100; //寫入affiliate_log $affiliate_log = [ 'user_id' => Db::name('users')->where('sso_user_id', $value)->value('user_id'), 'order_id' => $order['order_id'], 'time' => time(), 'user_name' => Db::name('users')->where('sso_user_id', $value)->value('real_name'), 'money' => $money[$key], ]; Db::name('affiliate_log')->insert($affiliate_log); //增加介紹人的獎金 Db::name('users')->where('sso_user_id', $value)->inc('frozen_money', $money[$key])->update(); } return true; } catch (\Exception $e) { print_r($e->getMessage()); return false; } } private static function getAffiliate($sso_user_id, $level = 1) { $parents = []; $parent_id = Db::name('users')->where('sso_user_id', $sso_user_id)->value('parent_id'); if ($parent_id) { $parents[$level] = $parent_id; $level++; $return = self::getAffiliate($parent_id, $level); $parents = array_merge($parents, $return); } return $parents; } }