SystemUserLevel.php 4.8 KB

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