inviteByDirect($uid, $money); // 间一、间二分佣不包含A级 if ($user->level != 1) { $this->inviteOneByIndirect($uid, $money); $this->inviteTwoByIndirect($uid, $money); } $this->inviteTwoByGlobalg($uid, $money);// 全局分佣 } /** * 代理分佣-直一 * @author lyh * @date 2019/4/16 * @param int $user * @param $money * @description */ public function inviteByDirect($user, $money) { $user = User::find($user); $proxy = Proxy::getConfig($user->id); $pct = $proxy->proxy_invite; $UserByDirect = User::find($user->invitor); if (!$UserByDirect) { return false; } $commission = moneyFormat($money * ($pct / 100), 2); AccountLog::insert([ 'uid' => $UserByDirect->id, 'source_uid' => $user->id, 'type' => 20, 'status' => 1, 'money_type' => 2, 'current_money' => $UserByDirect->balance, 'remark' => sprintf('您的直推用户【id:%s】交费升级成功,获得佣金¥%s', $user->id, $commission), 'money' => $commission ]); // 添加冻结记录 UserFreeze::insert([ 'uid' => $UserByDirect->id, 'money' => $commission, ]); /*$UserByDirect->balance += $commission; $UserByDirect->save();*/ } /** * 代理分佣-间一 * @author lyh * @date 2019/4/16 * @param int $user * @param $money * @description */ public function inviteOneByIndirect($user, $money) { $user = User::find($user); // 获取间一用户、 $UserByDirect = \DB::table('user')->where('id', '=', $user->invitor)->first(); if (!$UserByDirect) { return false; } $UserByIndirectOne = \DB::table('user')->where('id', '=', $UserByDirect->invitor)->first(); if (!$UserByIndirectOne) { return false; } // 判断间一用户的邀请数量 // $inviteNumByIndirectOne = User::whereInvitor($UserByIndirectOne->id)->count('id'); $inviteNumByIndirectOne = count(User::getInviteeOne($UserByIndirectOne->id)); $proxy = Proxy::getConfig($user->id); // 获取代理的间推一的佣金数据 $proxyInvite = ProxyInvite::whereProxyId($proxy->id)->whereType(1)->whereProxyType(1)->orderBy('max','desc')->get(); if (!$proxyInvite) { abort(500, '代理间一代理数据为空'); } $pct = 0; foreach ($proxyInvite as $item) { if ($inviteNumByIndirectOne >= $item->max) { $pct = $item->pct; break; } } // 获取间一用户的佣金比例 $commission = moneyFormat($money * ($pct / 100), 2); // 添加账号余额、并添加流水记录 AccountLog::insert([ 'uid' => $UserByIndirectOne->id, 'source_uid' => $user->id, 'type' => 21, 'status' => 1, 'money_type' => 2, 'current_money' => $UserByIndirectOne->balance, 'remark' => sprintf('您的第一级间推用户【id:%s】交费升级成功,获得佣金¥%s', $user->id, $commission), 'money' => $commission ]); // 添加冻结记录 UserFreeze::insert([ 'uid' => $UserByIndirectOne->id, 'money' => $commission, ]); // \DB::table('user')->where('id', $UserByIndirectOne->id)->increment('balance', $commission); } /** * 代理分佣-间二 * @author lyh * @date 2019/4/16 * @param int $user * @param $money * @description */ public function inviteTwoByIndirect($user, $money) { $user = \DB::table('user')->where('id', '=', $user)->first(); // 获取间二用户 $UserByDirect = \DB::table('user')->where('id', '=', $user->invitor)->first(); if (!$UserByDirect) { return false; } $UserByIndirectOne = \DB::table('user')->where('id', '=', $UserByDirect->invitor)->first(); if (!$UserByIndirectOne) { return false; } $UserByIndirectTwo = \DB::table('user')->where('id', '=', $UserByIndirectOne->invitor)->first(); if (!$UserByIndirectTwo) { return false; } // 判断间二用户的邀请数量 // $inviteNumByIndirectTwo = User::whereInvitor($UserByIndirectTwo->id)->count('id'); $inviteNumByIndirectTwo = count(User::getInviteeTwo($UserByIndirectTwo->id)); $proxy = Proxy::getConfig($user->id); $proxyInvite = ProxyInvite::whereProxyId($proxy->id)->whereType(2)->whereProxyType(2)->orderBy('max','desc')->get(); if (!$proxyInvite) { abort(500, '代理间二代理数据为空'); } // 获取间二用户的佣金 $pct = 0; foreach ($proxyInvite as $item) { if ($inviteNumByIndirectTwo >= $item->max) { $pct = $item->pct; break; } } $commission = moneyFormat($money * ($pct / 100), 2); // 添加账号余额、并添加流水记录 AccountLog::insert([ 'uid' => $UserByIndirectTwo->id, 'source_uid' => $user->id, 'type' => 22, 'status' => 1, 'money_type' => 2, 'current_money' => $UserByIndirectTwo->balance, 'remark' => sprintf('您的第二级间推用户【id:%s】交费升级成功,获得佣金¥%s', $user->id, $commission), 'money' => $commission ]); // 添加冻结记录 UserFreeze::insert([ 'uid' => $UserByIndirectTwo->id, 'money' => $commission, ]); // \DB::table('user')->where('id', '=', $UserByIndirectTwo->id)->increment('balance', $commission); } /** * 全局分佣 * @author lyh * @date 2019/4/16 * @param int $user * @param $money * @description */ public function inviteTwoByGlobalg($user, $money) { $user = User::find($user); $proxy = Proxy::getConfig($user->id,null,null,null,7);//市级的配置 $pct = $proxy->proxy_invite_global; $commission = moneyFormat($money * ($pct / 100), 2); // 获取所有市级区域代理 $UserByArea = ProxyArea::whereProvince($user->province)->whereCity($user->city)->whereDistrict(0)->whereStatus(3)->get(); // 添加账号余额、并添加流水记录 foreach ($UserByArea as $UA) { AccountLog::insert([ 'uid' => $UA->uid, 'source_uid' => $user->id, 'type' => 23, 'status' => 1, 'money_type' => 2, 'current_money' => User::whereId($UA->uid)->value('balance'), 'remark' => sprintf('您作为城市运营商【市级】,用户【id:%s】交费升级成功,获得佣金¥%s', $user->id, $commission), 'money' => $commission ]); // 添加冻结记录 UserFreeze::insert([ 'uid' => $UA->uid, 'money' => $commission, ]); // User::whereId($UA->id)->increment('balance', $commission); } $city_uids = $UserByArea->pluck('uid')->toArray(); $proxy = Proxy::getConfig($user->id,null,null,null,6);//县区的配置 $pct = $proxy->proxy_invite_global; $commission = moneyFormat($money * ($pct / 100), 2); //所有区县级代理 $UserByDistrict = ProxyArea::whereProvince($user->province)->whereCity($user->city)->whereDistrict($user->district)->whereStatus(3)->get(); // 添加账号余额、并添加流水记录 foreach ($UserByDistrict as $UA) { //已经获得过市级的跳过 if (!empty($city_uids) && in_array($UA->uid, $city_uids)) { continue; } AccountLog::insert([ 'uid' => $UA->uid, 'source_uid' => $user->id, 'type' => 23, 'status' => 1, 'money_type' => 2, 'current_money' => User::whereId($UA->uid)->value('balance'), 'remark' => sprintf('您作为城市运营商【县区级】,用户【id:%s】交费升级成功,获得佣金¥%s',$user->id, $commission), 'money' => $commission ]); // 添加冻结记录 UserFreeze::insert([ 'uid' => $UA->uid, 'money' => $commission, ]); // User::whereId($UA->id)->increment('balance', $commission); } } /** * 累加用户各类代理费用 * @author zch * @date 2019/08/14 * @param integer uid 用户ID; * @param string field_name 字段名/费用类型(agent_all_money:代理费总额,ad_num:广告笔数,ad_all_money:发布广告总额,adver_commission:广告费分佣,invite_num:下级代理人数,proxy_commission:代理费分佣,); * @param string money 金额/数量 * */ public static function incUserAccount($uid,$field_name,$money) { $res = User::whereId($uid)->increment($field_name,$money); if ($res) { return true; } } }