User.php 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156
  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. * 用户表 Table<ai_user>
  8. */
  9. namespace app\common\model;
  10. use think\Model;
  11. class User extends Model{
  12. protected $pk = 'id';
  13. /**
  14. * 判断是否邀请用户
  15. * @param integer $user_id 当前用户ID
  16. * @param string $code 邀请码
  17. * @return int 邀请用户ID
  18. */
  19. public static function isInvite($invite_code){
  20. if(empty($invite_code)){
  21. return;
  22. }
  23. $id = de_code(strtoupper($invite_code));
  24. $is_invite = self::where(['id' => $id])->field('id')->find();
  25. return empty($is_invite) ? 0 : $is_invite['id'];
  26. }
  27. /**
  28. * 通过微信注册或更新
  29. * @param array $wechat
  30. * @param int $is_miniapp 0小程序 1公众号
  31. * @return 成功后返回用户的ID
  32. */
  33. public static function wechatReg(array $wechat,$is_miniapp = true){
  34. //参数
  35. $data = [];
  36. $updata = [];
  37. $data['member_miniapp_id'] = $wechat['miniapp_id'];
  38. $data['nickname'] = $wechat['nickname'];
  39. $data['face'] = $wechat['avatar'];
  40. $data['official_uid'] = $wechat['official_uid'];
  41. $data['miniapp_uid'] = $wechat['miniapp_uid'];
  42. $data['wechat_uid'] = $wechat['wechat_uid'];
  43. $data['login_time'] = time();
  44. $data['update_time'] = time();
  45. $data['login_ip'] = request()->ip();
  46. //查询用户类型
  47. $condition['member_miniapp_id'] = $wechat['miniapp_id'];
  48. if($is_miniapp){
  49. $data['session_key'] = $wechat['session_key'];
  50. $updata['session_key'] = $wechat['session_key'];
  51. $condition['miniapp_uid'] = $data['miniapp_uid'];
  52. }else{
  53. $condition['official_uid'] = $data['official_uid'];
  54. }
  55. $info = self::where($condition)->find();
  56. if(empty($info)){
  57. $data['create_time'] = time();
  58. $is_insert = true;
  59. //如果用户先进入公众号,后进入小程序保证账户同步
  60. if($is_miniapp && !empty($data['official_uid'])){
  61. $official_info = self::where(['member_miniapp_id' => $wechat['miniapp_id'],'official_uid' => $data['official_uid']])->find();
  62. if($official_info){
  63. $is_insert = false;
  64. $last_id = $official_info['id'];
  65. self::update(['id' => $last_id,'miniapp_uid' => $data['miniapp_uid']]);
  66. }
  67. }
  68. //判断是否需要增加
  69. if($is_insert){
  70. $last_id = self::insertGetId($data);
  71. if($last_id){
  72. self::where('id',$last_id)->data(['invite_code' => create_code($last_id)])->update();
  73. }
  74. //添加用户邀请来源
  75. if(!empty($wechat['invite_code'])){
  76. $is_invite = model('User')->isInvite($wechat['invite_code']); //临时解决邀请问题
  77. if($is_invite){
  78. model('UserLevel')->addLevel($last_id,$is_invite);
  79. }
  80. }
  81. }
  82. }else{
  83. $updata['nickname'] = $wechat['nickname'];
  84. $updata['face'] = $wechat['avatar'];
  85. $updata['login_time'] = time();
  86. $updata['login_ip'] = request()->ip();
  87. $updata['session_key'] = $wechat['session_key'];
  88. if($is_miniapp && !empty($data['official_uid'])){
  89. $updata['official_uid'] = $data['official_uid'];
  90. }
  91. self::where(['id' => $info->id])->data($updata)->update();
  92. $last_id = $info->id;
  93. }
  94. return $last_id;
  95. }
  96. /**
  97. * 更新安全密码
  98. * @param array $param 更新的用户信息
  99. */
  100. public static function updateSafePasspord(int $uid,string $safepassword){
  101. $data['safe_password'] = password_hash(md5($safepassword),PASSWORD_DEFAULT);
  102. return User::where(['id' => $uid])->update($data);
  103. }
  104. /**
  105. * 修改登录密码
  106. * @access public
  107. */
  108. public function upDatePasspowrd(int $uid,string $password){
  109. $data['password'] = password_hash(md5($password),PASSWORD_DEFAULT);
  110. return User::where(['id' => $uid])->update($data);
  111. }
  112. /**
  113. * 锁定用户
  114. * @param integer $id
  115. */
  116. public static function lock(int $appid,int $id){
  117. $result = self::where(['member_miniapp_id' => $appid,'id' => $id])->find();
  118. if($result->is_delete >= 1){
  119. return FALSE;
  120. }
  121. $result->is_lock = $result->is_lock ? 0 : 1;
  122. return $result->save();
  123. }
  124. /**
  125. * 登录用户ID
  126. */
  127. public static function edit(array $data,int $id){
  128. return User::where(['id' => $id])->update($data);
  129. }
  130. /**
  131. * 作废
  132. * @param integer $id
  133. */
  134. public static function isDelete(int $appid,int $id){
  135. $result = self::where(['member_miniapp_id' => $appid,'id' => $id])->find();
  136. if($result->is_delete >= 1){
  137. return FALSE;
  138. }
  139. $result->is_lock = 1;
  140. $result->is_delete = 1;
  141. $result->phone_uid = '';
  142. $result->wechat_uid = '';
  143. $result->official_uid = '';
  144. $result->miniapp_uid = '';
  145. return $result->save();
  146. }
  147. }