UserController.php 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207
  1. <?php
  2. namespace App\Http\Controllers\V1;
  3. use App\Models\User;
  4. use App\Models\UserFeedback;
  5. use App\Models\UserInfo;
  6. use App\Services\Api\SortService;
  7. use Carbon\Carbon;
  8. use Illuminate\Http\Request;
  9. use Illuminate\Support\Facades\Validator;
  10. class UserController extends Controller
  11. {
  12. public function __construct()
  13. {
  14. $this->user = auth('api')->user();
  15. $this->userId = $this->user ? $this->user->id : 0;
  16. //如果用户被删除,会自动退出登录
  17. if (!empty($this->user->deleted_at)) {
  18. $this->user->online = 0;
  19. $this->user->save();
  20. auth('api')->logout();
  21. }
  22. }
  23. //问题反馈
  24. public function feedback(Request $request)
  25. {
  26. $content = $request->input('content');
  27. $file_url = $request->input('file_url', '');
  28. $validator = Validator::make($request->all(), [
  29. 'content' => 'required|min:2|max:200',
  30. ]);
  31. if($validator->fails()){
  32. return $this->error($validator->errors()->first());
  33. }
  34. $feedback = new UserFeedback();
  35. $feedback->user_id = $this->userId;
  36. $feedback->content = $content;
  37. $feedback->file = !empty($file_url) ? json_encode($file_url) : '';
  38. $feedback->save();
  39. return $this->success();
  40. }
  41. //按照首字母进行分组排序,类似手机通讯录(注意:get()后面直接 ->toArray()在数据为空的时候导致报错)
  42. public function groupByInitial(Request $request)
  43. {
  44. $keyword = $request->input('keyword', '');
  45. $list = User::query()
  46. ->select('id', 'name', 'avatar')
  47. ->when($keyword, function ($query, $keyword){
  48. $query->where('name', 'like', '%'.$keyword.'%');
  49. })
  50. ->whereNotNull('name')
  51. ->whereNull('deleted_at')
  52. ->get();
  53. if($list->isNotEmpty()){
  54. $list = $list->toArray();
  55. $list = SortService::getResultList($list);
  56. }else{
  57. $list = [];
  58. }
  59. return $this->success($list);
  60. }
  61. public function info()
  62. {
  63. $user = auth('api')->user();
  64. $info = UserInfo::find($user->id);
  65. // 校验VIP 是否过期
  66. if($info->is_vip && $info->end_at < Carbon::now()->toDateString()){
  67. $info->is_vip = 0;
  68. $info->save();
  69. }
  70. $user = User::with(['info','parent'])->withCount('child')->where('id', $user->id)->first();
  71. (new User())->beComeShare($user->id);
  72. return $this->success($user);
  73. }
  74. // 绑定上级
  75. public function bind($id)
  76. {
  77. $user = \user();
  78. if(is_numeric($id)){
  79. $user = \user();
  80. $parent = User::find($id);
  81. }else{ // 微信扫场景码
  82. $parent = User::where('scene_code', $id)->first();
  83. }
  84. // 没有绑定上级 且上级存在其实分销商 且不是自己
  85. if(!$user->parent_id && $parent && $parent->is_share && $parent->id != $user->id){
  86. $user->parent_id = $parent->id;
  87. $user->become_child_at = Carbon::now()->toDateTimeString();
  88. // 之前不是分销商 自动成为分销商
  89. if(!$user->is_share){
  90. $user->become_share_at = Carbon::now()->toDateTimeString();
  91. $user->is_share = 1;
  92. }
  93. $user->save();
  94. }
  95. $user = User::with(['info','parent'])->where('id', $user->id)->first();
  96. return $this->success($user);
  97. }
  98. public function update(Request $request)
  99. {
  100. try
  101. {
  102. $req = $request->all();
  103. /* @var User $user*/
  104. $user = User::with(['info'])->find(\user()->id);
  105. // 微信已经更改策略了
  106. if(\user()->info->platform == 3){
  107. if(isset($req['avatar'])){
  108. $user->avatar = $req['avatar'];
  109. }
  110. if(isset($req['nickname'])){
  111. $user->nickname = $req['nickname'];
  112. }
  113. }else{
  114. $app = $this->getUniFactory(\user()->info->platform);
  115. $res = $app->login($req['code']);
  116. $user->remember_token = $res['session_key'];
  117. $decryptedData = $app->decryptData($user->remember_token, $req['iv'], $req['encryptedData']);
  118. if (isset($decryptedData['nickName'])) {
  119. $user->nickname = $decryptedData['nickName'];
  120. $user->avatar = $decryptedData['avatarUrl'];
  121. }else{
  122. $user->mobile = $decryptedData['phoneNumber'];
  123. }
  124. }
  125. $user->save();
  126. return $this->success($user);
  127. }catch (\Exception $e){
  128. return $this->error($e->getMessage());
  129. }
  130. }
  131. public function parent()
  132. {
  133. if(empty(\user()->parent_id)){
  134. return $this->success();
  135. }
  136. $parent = User::find(\user()->parent_id);
  137. return $this->success($parent);
  138. }
  139. // h5 绑定
  140. public function h5Bind()
  141. {
  142. }
  143. // h5 解绑
  144. public function h5ReBind()
  145. {
  146. }
  147. // 微信小程序 绑定
  148. public function miniProgramBind()
  149. {
  150. }
  151. // 微信小程序 解绑
  152. public function miniProgramReBind()
  153. {
  154. }
  155. // 手机号 绑定
  156. public function smsBind()
  157. {
  158. }
  159. // 手机号 解绑
  160. public function smsReBind()
  161. {
  162. }
  163. }