<?php
|
|
namespace app\common\model\plus\agent;
|
|
use app\common\model\BaseModel;
|
use app\common\model\user\User as UserModel;
|
use app\common\model\plus\agent\Referee as RefereeModel;
|
|
/**
|
* 分销商推荐关系模型(所有层级)
|
*/
|
class Relation extends BaseModel
|
{
|
protected $name = 'agent_relation';
|
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', 'user_id')->where('is_delete', '=', 0);
|
}
|
|
/**
|
* 关联分销商用户表
|
*/
|
public function agent1()
|
{
|
return $this->belongsTo('app\\common\\model\\plus\\agent\\User', 'agent_id')->where('is_delete', '=', 0);
|
}
|
|
/**
|
* 获取所有下线ID集
|
*/
|
public function getAllIds($agent_id)
|
{
|
return $this->where('agent_id', '=', $agent_id)->column('user_id');
|
}
|
|
/**
|
* 获取指定用户的下线列表
|
*/
|
public function getAllList($userId)
|
{
|
return $this->with(['team1'])->where('agent_id', '=', $userId)->select();
|
}
|
|
/**
|
* 获取指定用户的下线列表
|
*/
|
public function getListByIds($userIds, $with = [])
|
{
|
return $this->getListByInArray('agent_id', $userIds, $with);
|
}
|
|
/**
|
* 获取指定用户的下线列表
|
*/
|
private function getListByInArray($field, $data, $with = [])
|
{
|
return $this->with($with)
|
->where($field, 'in', $data)
|
->select();
|
}
|
|
/**
|
* 创建推荐关系
|
*/
|
public static function updateRelation($user_id, $referee_id, $level = 1, $later = array())
|
{
|
// 自分享
|
if ($user_id == $referee_id) {
|
return false;
|
}
|
if (!empty($later)) {
|
if (self::inArray($referee_id, $later)) {
|
return UserModel::detail($referee_id);
|
}
|
} else {
|
$later[] = $user_id;
|
}
|
$later[] = $referee_id;
|
$level = max($level, 1);
|
$model = new self;
|
if ( $level == 1 ) {
|
$model->add($referee_id, $user_id, 1);
|
}
|
$parent_id = RefereeModel::getRefereeUserId($referee_id, 1);
|
if (empty($parent_id )) {
|
return false;
|
} else {
|
if ($user_id == $parent_id) {
|
return UserModel::detail($user_id);
|
}
|
$model->add($parent_id, $user_id, ++$level);
|
return self::updateRelation($user_id, $parent_id, $level, $later);
|
}
|
return true;
|
}
|
|
/**
|
* 删除推荐关系
|
*/
|
public static function deleteRelation($user_id)
|
{
|
$model = new self;
|
$parent = $model->where('agent_id', '=', $user_id)->select();
|
if ($parent) {
|
foreach ($parent as $p) {
|
$model->where('user_id', '=', $p['user_id'])->where('level', '>=', $p['level'])->delete();
|
}
|
}
|
$model->where('user_id', '=', $user_id)->delete();
|
}
|
|
/**
|
* 删除推荐关系
|
*/
|
public static function modifyRelation($user_id, $agent_id = NULL)
|
{
|
$model = new self;
|
$model->where('user_id', '=', $user_id)->delete();
|
if( !empty($agent_id) ) {
|
self::updateRelation($user_id, $agent_id);
|
}
|
$parent = $model->where('agent_id', '=', $user_id)->select();
|
if ($parent) {
|
foreach ($parent as $p) {
|
$model->where('user_id', '=', $p['user_id'])->where('level', '>', $p['level'])->delete();
|
self::updateRelation($p['id'], $p['agent_id'], $p['level']);
|
}
|
}
|
}
|
|
/**
|
* 新增关系记录
|
*/
|
private function add($agent_id, $user_id, $level = 1)
|
{
|
// 新增推荐关系
|
$app_id = self::$app_id;
|
$create_time = time();
|
$this->insert(compact('agent_id', 'user_id', 'level', 'app_id', 'create_time'));
|
return true;
|
}
|
|
private static function inArray($item, $array)
|
{
|
$flipArray = array_flip($array);
|
return isset($flipArray[$item]);
|
}
|
}
|