UserLevel.php 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  1. <?php
  2. /**
  3. * 用户层级关系表 Table<ai_user_level>
  4. */
  5. namespace app\common\model;
  6. use think\Model;
  7. use think\facade\Validate;
  8. class UserLevel extends Model{
  9. protected $pk = 'id';
  10. /**
  11. * 用户信息关联
  12. * @return void
  13. */
  14. public function user(){
  15. return $this->hasOne('User','id','user_id');
  16. }
  17. /**
  18. * 用户信息关联
  19. * @return void
  20. */
  21. public function parentUser(){
  22. return $this->hasOne('User','id','parent_id');
  23. }
  24. /**
  25. * 创建用户关系一
  26. * @param integer $user_id 当前用户ID
  27. * @param integer $parent_id 上级用户ID
  28. * @return void
  29. */
  30. public function addLevel(int $user_id,int $parent_id){
  31. if($parent_id){
  32. $data[0]['level'] = 1;
  33. $data[0]['parent_id'] = $parent_id;
  34. $data[0]['user_id'] = $user_id;
  35. $levellist = self::where(['user_id' => $parent_id])->select();
  36. foreach ($levellist as $value) {
  37. $level = $value['level'] + 1;
  38. $data[] = ['level' => $level,'parent_id' => $value['parent_id'],'user_id' => $user_id];
  39. }
  40. return self::insertAll($data);
  41. }
  42. return true;
  43. }
  44. /**
  45. * 查询某个用户的粉丝
  46. * @param int $uid
  47. * @param array $level [1,2,3,4]层级
  48. * @return void
  49. */
  50. public static function levelUser($uid,$level){
  51. $lists = self::where(['parent_id' => $uid,'level' => $level])->order('id desc')->paginate(20,false);
  52. if(empty($lists)){
  53. return;
  54. }
  55. $data = [];
  56. foreach ($lists as $key => $value) {
  57. $data[$key]['face'] = $value->user->face;
  58. $data[$key]['nickname'] = $value->user->nickname;
  59. $data[$key]['level'] = $value->level;
  60. $data[$key]['parent_id'] = $value->parent_id;
  61. $data[$key]['user_id'] = $value->user->id;
  62. $data[$key]['invite_code'] = $value->user->invite_code;
  63. $data[$key]['create_time'] = date('Y-m-d H:i',$value->user->create_time);
  64. }
  65. return $data;
  66. }
  67. /**
  68. * 查询某个用户的邀请溯源
  69. * @param int $uid 用户ID
  70. * @return void
  71. */
  72. public static function children_user(int $uid){
  73. $level = self::where(['user_id' => $uid])->field('parent_id,level,user_id')->select()->toArray();
  74. if(empty($level)){
  75. return [];
  76. }
  77. $uid = array_column($level,'parent_id');
  78. $info = model('User')->field('id,nickname,invite_code,face,phone_uid')->whereIn('id',$uid)->select()->toArray();
  79. if(empty($info)){
  80. return [];
  81. }
  82. $uida = [];
  83. foreach ($level as $value) {
  84. $uida[$value['parent_id']]['level'] = $value['level'];
  85. $uida[$value['parent_id']]['user_id'] = $value['user_id'];
  86. }
  87. $level_user = [];
  88. foreach ($info as $value) {
  89. $level_user[$uida[$value['id']]['level']]['user_id'] = $uida[$value['id']]['user_id'];
  90. $level_user[$uida[$value['id']]['level']]['invite_code'] = $value['invite_code'];
  91. $level_user[$uida[$value['id']]['level']]['nickname'] = $value['nickname'];
  92. $level_user[$uida[$value['id']]['level']]['face'] = $value['face'];
  93. $level_user[$uida[$value['id']]['level']]['phone_uid'] = $value['phone_uid'];
  94. $level_user[$uida[$value['id']]['level']]['parent_id'] = $value['id'];
  95. $level_user[$uida[$value['id']]['level']]['level'] = $uida[$value['id']]['level'];
  96. }
  97. return $level_user;
  98. }
  99. /**
  100. * 查询伞下用户
  101. * @param array $agent 代理级别
  102. * @param int $children 用户ID
  103. * @return void
  104. */
  105. public static function pyramid($uid){
  106. $level = self::where(['parent_id' => $uid,'level' => 1])->select();
  107. $level_user = [];
  108. $i = 0;
  109. foreach ($level as $value) {
  110. $level_user[$i]['user_id'] = $value['user_id'];
  111. $level_user[$i]['parent_id'] = $value['parent_id'];
  112. $level_user[$i]['level'] = $value['level'];
  113. $level_user[$i]['invite_code'] = $value->User['invite_code'];
  114. $level_user[$i]['nickname'] = $value->User['nickname'];
  115. ++$i;
  116. }
  117. if(empty($level_user)){
  118. return $level_user;
  119. }
  120. $data = [];
  121. foreach ($level_user as $key => $value) {
  122. $data[$key]['name'] = $value['nickname'];
  123. $data[$key]['title'] = $value['invite_code'];
  124. $data[$key]['id'] = $value['user_id'];
  125. $data[$key]['isParent'] = true;
  126. }
  127. return $data;
  128. }
  129. }