<?php
|
|
namespace app\operations\model\plus\agent;
|
|
use app\common\model\plus\agent\Referee as RefereeModel;
|
use app\common\model\plus\agent\Relation as RelationModel;
|
use app\common\model\user\User as UserModel;
|
|
/**
|
* 分销商用户模型
|
*/
|
class Relation extends RelationModel
|
{
|
|
/**
|
* 创建推荐关系
|
*/
|
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;
|
}
|
|
/**
|
* 新增关系记录
|
*/
|
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]);
|
}
|
|
|
/**
|
* 获取指定用户的推荐人列表
|
*/
|
public static function getRelationList($userId)
|
{
|
return (new static)->with(['agent1'])->where('user_id', '=', $userId)->select();
|
}
|
|
/**
|
* 获取指定用户的推荐和间推团队列表
|
*/
|
public static function getTeamList($userId)
|
{
|
return (new static)->with(['agent1'])->where('agent_id', '=', $userId)->select();
|
}
|
|
/**
|
* 清空所有层级推荐关系
|
*/
|
public function onClearRelation($userId, $level = -1)
|
{
|
$model = $this;
|
if($level > -1) {
|
$model = $model->where('level', '=', $level);
|
}
|
return $model->where('user_id', '=', $userId)->delete();
|
}
|
|
}
|