<?php
|
|
namespace app\common\model\plus\shareholder;
|
|
use app\common\model\BaseModel;
|
use app\agent\model\plus\agent\Referee as agentRefereeModel;
|
use app\common\model\user\User as UserModel;
|
use app\common\model\plus\agent\Relation as RelationModel;
|
|
/**
|
* 股东推荐关系模型
|
*/
|
class Referee extends BaseModel
|
{
|
protected $name = 'shareholder_referee';
|
protected $pk = 'id';
|
|
/**
|
* 关联用户表
|
*/
|
public function user()
|
{
|
return $this->belongsTo('app\\common\\model\\user\\User');
|
}
|
|
/**
|
* 关联股东用户表
|
*/
|
public function shareholder()
|
{
|
return $this->belongsTo('app\\common\\model\\plus\\shareholder\\User')->where('is_delete', '=', 0);
|
}
|
|
/**
|
* 关联股东用户表
|
*/
|
public function shareholder1()
|
{
|
return $this->belongsTo('app\\common\\model\\plus\\shareholder\\User', 'shareholder_id')->where('is_delete', '=', 0);
|
}
|
|
/**
|
* 获取用户的股东id
|
*/
|
public static function getHeadsId($user_id)
|
{
|
$heads_id = (new self)->where(compact('user_id'))
|
->value('heads_id');
|
if (!$heads_id) return 0;
|
return User::isshareholderUser($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 shareholderCount($heads_id)
|
{
|
return (new static())->where('heads_id', '=', $heads_id)->count();
|
}
|
|
/**
|
* 创建团队关系
|
*/
|
public static function updateShareholderRelation($user_id, $referee_id)
|
{
|
if ($user_id == $referee_id) {
|
return false;
|
}
|
// 如果上级不是股东,获取上级的股东
|
if (!User::isshareholderUser($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('ShareholderUserGrade', $model['heads_id']);
|
return true;
|
}
|
|
/**
|
* 创建股东团队
|
*/
|
public static function createShareholder($user_id)
|
{
|
if (!User::isshareholderUser($user_id)) {
|
return false;
|
}
|
$data = (new RelationModel)->getAllList($user_id);
|
if (!empty($list)) {
|
$heads = array( );
|
$later = array( );
|
$ids = array( );
|
foreach( $data as $k => $v )
|
{
|
if( !empty($v["shareholder"]) )
|
{
|
$heads[] = $v["user_id"];
|
//continue;
|
}
|
$ids[] = $v["user_id"];
|
}
|
if( !empty($heads) )
|
{
|
$later = (new RelationModel)->getListByIds($heads);
|
}
|
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();
|
}
|
}
|
return true;
|
}
|
|
/**
|
* 获取用户所有级差股东
|
*/
|
public static function getAllJcUser($heads_id, $jcUser = [], $percent_total = 0)
|
{
|
$user = User::detail($heads_id, $width = ['grade', 'referee']);
|
$percent_total += $user['grade']['equity'];
|
if($user['referee']['heads_id']) {
|
$parent = User::detail($user['referee']['heads_id'], $width = ['grade', 'referee']);
|
if($parent['grade']['equity'] > $percent_total) {
|
$jcUser[] = [
|
'heads_id' => $user['referee']['heads_id'],
|
'bonus_type' => 20,
|
'bonus_percent' => $parent['grade']['equity'] - $percent_total //分红比例
|
];
|
}
|
if($parent['referee']['heads_id']) {
|
return self::getAllJcUser($user['referee']['heads_id'], $jcUser, $percent_total);
|
}
|
}
|
return $jcUser;
|
}
|
|
/**
|
* 获取用户所有平级股东
|
*/
|
public static function getAllPjUser($heads_id, $pjaward_level, $pjUser = [], $level = 1)
|
{
|
$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['grade_id'] == $user['grade_id']) {
|
$pjUser[] = [
|
'heads_id' => $user['referee']['heads_id'],
|
'bonus_type' => 30,
|
'bonus_percent' => $parent['grade']['pjaward_percent'] //分红比例
|
];
|
$level++;
|
}
|
if($parent['referee']['heads_id'] && $pjaward_level > $level) {
|
return self::getAllPjUser($user['referee']['heads_id'], $pjUser, $pjaward_level, $level);
|
}
|
}
|
return $pjUser;
|
}
|
}
|