<?php
|
|
namespace app\common\model\plus\team;
|
|
use app\common\model\BaseModel;
|
use app\common\model\user\User as UserModel;
|
use app\common\model\plus\agent\Relation as RelationModel;
|
use app\common\model\plus\shareholder\Apply as ShareholderApplyModel;
|
|
/**
|
* 队长推荐关系模型
|
*/
|
|
class Referee extends BaseModel
|
{
|
protected $name = 'team_referee';
|
protected $pk = 'id';
|
|
/**
|
* 关联用户表
|
*/
|
|
public function user()
|
{
|
return $this->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;
|
|
}
|
|
}
|