belongsTo('app\\common\\model\\user\\User'); } /** * 关联队长用户表 */ public function team() { return $this->belongsTo('app\\common\\model\\plus\\team\\User')->where('is_delete', '=', 0); } /** * 关联队长用户表 */ public function team1() { return $this->belongsTo('app\\common\\model\\plus\\team\\User', 'team_id')->where('is_delete', '=', 0); } /** * 获取用户的队长id */ public static function getHeadsId($user_id) { $heads_id = (new self)->where('user_id', '=', $user_id) ->value('heads_id'); //log_write('user_id'. $user_id .'的heads_id:'.$heads_id); if (!$heads_id) return 0; return User::isteamUser($heads_id) ? $heads_id : 0; } /** * 获取我的团队列表 */ public function getList($user_id) { $model = $this; return $model->with(['user']) ->alias('referee') ->field('referee.*') ->join('user', 'user.user_id = referee.user_id','left') ->where('referee.heads_id', '=', $user_id) ->where('user.is_delete', '=', 0) ->order(['referee.create_time' => 'desc']) ->paginate(15); } public static function detail($user_id) { return (new static())->where('user_id', '=', $user_id)->find(); } /** * 团队人数统计 */ public static function teamCount($heads_id) { return (new static())->where('heads_id', '=', $heads_id)->count(); } /** * 创建团队关系 */ public static function updateTeamRelation($user_id, $referee_id) { if ($user_id == $referee_id) { return false; } // 如果上级不是队长,获取上级的队长 if (!User::isteamUser($referee_id)) { $referee_id = self::getHeadsId($referee_id); } // 新增关系记录 $model = new self; $model->add($referee_id, $user_id); return true; } /** * 新增关系记录 */ private function add($heads_id, $user_id) { $model = static::detail($user_id) ?: new static; $model->save([ 'heads_id' => $heads_id, 'user_id' => $user_id, 'app_id' => self::$app_id ]); // 记录队长成员数量 User::setMemberInc($heads_id); // 更新队长等级 event('TeamUserGrade', $model['heads_id']); //根据团队人数判断股东 by yj $shareholderModel = new ShareholderApplyModel; $shareholderModel->becomeShareholderByTeam($heads_id, 80, self::$app_id); // 更新股东等级 by yj event('ShareholderUserGrade', $model['heads_id']); return true; } /** * 创建队长团队 */ public static function createTeam($user_id) { if (!User::isteamUser($user_id)) { return false; } $data = (new RelationModel)->getAllList($user_id); if (!empty($data)) { $heads = array( ); $later = array( ); $ids = array( ); foreach( $data as $k => $v ) { if( !empty($v["team1"]) ) { $heads[] = $v["user_id"]; //continue; } $ids[] = $v["user_id"]; } if( !empty($heads) ) { $later = (new RelationModel)->getListByIds($heads)->toArray(); } if( !empty($ids) ) { if( !empty($later) ) { $later = array_column($later, "user_id"); $ids = array_diff($ids, $later); } // 更新 (new self)->where('user_id' , 'in', $ids)->data([ 'heads_id' => $user_id ])->update(); User::setMemberInc($user_id); } } return true; } /** * 获取用户所有级差队长 */ public static function getAllJcUser($heads_id, $jcUser = [], $percent_total = 0, $is_add = true) { $user = User::detail($heads_id, $width = ['grade', 'referee']); $is_add && $percent_total += $user['grade']['equity'] - $percent_total; if($user['referee']['heads_id']) { $is_add = false; $parent = User::detail($user['referee']['heads_id'], $width = ['grade', 'referee']); if ($parent['grade']['weight'] > $user['grade']['weight'] && $parent['grade']['equity'] > $percent_total) { $jcUser[] = [ 'heads_id' => $user['referee']['heads_id'], 'bonus_type' => 20, 'bonus_percent' => $parent['grade']['equity'] - $percent_total //分红比例 ]; $is_add = true; } if($parent['referee']['heads_id']) { return self::getAllJcUser($user['referee']['heads_id'], $jcUser, $percent_total, $is_add); } } return $jcUser; } /** * 获取用户所有平级队长 * 每个级别都发放$pjaward_level层平级奖 */ public static function getAllPjUser($heads_id, $pjaward_level, $pjUser = []) { $user = User::detail($heads_id, $width = ['grade', 'referee']); $pj_user[$user['grade_id']][] = []; $pj_user = self::getPjUser($heads_id, $pj_user); if ($pj_user) { foreach ($pj_user as $u) { foreach ($u as $k => $item) { if ($k > 0 && $k <= $pjaward_level) { $pjUser[] = $item; } } } } return $pjUser; } /** * 获取所有平级队长 */ private static function getPjUser($heads_id, $pj_user = []) { $user = User::detail($heads_id, $width = ['grade', 'referee']); if($user['referee']['heads_id']) { $parent = User::detail($user['referee']['heads_id'], $width = ['grade', 'referee']); // 记录平级用户 if($parent && $parent['grade']['weight'] >= $user['grade']['weight']) { $pj_user[$parent['grade_id']][] = [ 'heads_id' => $parent['user_id'], 'bonus_type' => 30, 'bonus_percent' => $parent['grade']['pjaward_percent'] ? $parent['grade']['pjaward_percent'] : 0, // 平级分红比例 ]; } if($parent['referee']['heads_id']) { return self::getPjUser($parent['user_id'], $pj_user); } } return $pj_user; } }