quanwei
2025-11-21 1db9a4130699636cabe7e0c9f7f15d004aadada0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
<?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]);
    }
}