Usercenter.php 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420
  1. <?php
  2. namespace app\api\controller;
  3. use addons\epay\library\Service;
  4. use app\common\controller\Api;
  5. use app\api\validate\user\Report;
  6. use app\common\model\UserPower;
  7. use app\common\service\TenimService;
  8. use outh\outh;
  9. use think\Db;
  10. use app\common\controller\RedisLeaderboard;
  11. use Redis;
  12. use GatewayClient\Gateway;
  13. use think\Exception;
  14. /**
  15. * 会员中心接口
  16. */
  17. class UserCenter extends Api
  18. {
  19. protected $noNeedLogin = ['shujuhuifu','getAnchorType','getRecharConfig','getExchangeConfig','getLevelExplain'];
  20. protected $noNeedRight = '*';
  21. public function _initialize()
  22. {
  23. parent::_initialize();
  24. }
  25. /**
  26. * 获取个人信息
  27. */
  28. public function getUserInfo() {
  29. $user_id = input("user_id");
  30. if (!$user_id) {
  31. $this->error(__('Invalid parameters'));
  32. }
  33. // 获取基本信息
  34. $where = [];
  35. $where["id"] = $user_id;
  36. $userInfo = Db::name('user')->field("id,nickname,mobile,avatar,gender,u_id,age_id,province_id,city_id,desc,charm_level,wealth_level,job_id")->where($where)->find();
  37. if(!$userInfo){
  38. $this->error('不存在的用户');
  39. }
  40. $userInfo = info_domain_image($userInfo,['avatar']);
  41. //用户钱包
  42. $userwallet = Db::name('user_wallet')->where('user_id',$user_id)->find();
  43. $userInfo['wallet'] = $userwallet;
  44. $userModel = new \app\common\model\User();
  45. $userInfoA = $userModel->getAppendData($userInfo);
  46. $userInfo['age_text'] = $userInfoA['age_text'];
  47. $userInfo['province_text'] = $userInfoA['province_text'];
  48. $userInfo['city_text'] = $userInfoA['city_text'];
  49. $userInfo['job_text'] = $userInfoA['job_text'];
  50. $userInfo['friends_num'] = $userInfoA['friends_num'];
  51. $userInfo['look_num'] = $userInfoA['look_num'];
  52. //关注人数,粉丝人数
  53. $follow_num = Db::name('user_follow')->where(['uid'=>$user_id])->count('id');
  54. $fans_num = Db::name('user_follow')->where(['follow_uid'=>$user_id])->count('id');
  55. $userInfo['follow_num'] = $follow_num;
  56. $userInfo['fans_num'] = $fans_num;
  57. // 查看者是否已关注
  58. $userInfo["is_follow"] = $this->is_follow($this->auth->id,$user_id);
  59. $userInfo['is_friend'] = $this->is_friend($this->auth->id,$user_id);
  60. $userInfo['is_black'] = $this->is_black($this->auth->id,$user_id);
  61. // 获取用户在派对直播间情况信息
  62. /*$redis = new Redis();
  63. $redisconfig = config("redis");
  64. $redis->connect($redisconfig["host"], $redisconfig["port"]);
  65. if ($redisconfig['redis_pwd']) {
  66. $redis->auth($redisconfig['redis_pwd']);
  67. }
  68. if($redisconfig['redis_selectdb'] > 0){
  69. $redis->select($redisconfig['redis_selectdb']);
  70. }
  71. $livingUserPartyId = $redis->hGet("livingUser", $user_id);
  72. $userInfo['party_info'] = json([]);
  73. if ($livingUserPartyId) {
  74. $party = \app\common\model\Party::where('id',$livingUserPartyId)->field('id,room_type')->find();
  75. $userInfo['party_info'] = ['party_id' => $party['id'], 'room_type' => $party['room_type']];
  76. }*/
  77. $memberinfo = Db::name('guild_member')->alias('m')->field('m.id as `member_id`,m.user_id,guild.name,guild.image,guild.member,guild.desc')->join('guild','m.guild_id = guild.id','LEFT')->where(['m.user_id'=>$user_id])->find();
  78. if ($memberinfo) {
  79. $userInfo['memberinfo'] = $memberinfo;
  80. }
  81. //家族信息
  82. $guildField = 'g.id,g.g_id,g.user_id,g.party_id,g.name,g.image,g.desc,g.member,g.status';
  83. $guildWhere['gm.user_id'] = $user_id;
  84. $guildWhere['g.status'] = 1;
  85. $guildInfo = model('Guild')->alias('g')->field($guildField)
  86. ->join('guild_member gm','gm.guild_id = g.id','LEFT')
  87. ->where($guildWhere)->order('id desc')->find();
  88. $userInfo['guild_info'] = !empty($guildInfo) ? $guildInfo : [];
  89. $guildStatus = -2;
  90. if (!empty($guildInfo)) {
  91. $guildStatus = (int)$guildInfo['status'];
  92. }
  93. $userInfo['guild_status'] = $guildStatus;//家族状态:公会状态:0=待审核,1=正常,-1=已解散,-2无公会
  94. //访客记录
  95. if ($this->auth->id != $user_id) {
  96. $visit_data = [
  97. 'user_id' => $this->auth->id,
  98. 'visit_user_id' => $user_id,
  99. ];
  100. $visit_check = Db::name('user_visitlist')->where($visit_data)->find();
  101. if(empty($visit_check)){
  102. $visit_data['updatetime'] = time();
  103. Db::name('user_visitlist')->insertGetId($visit_data);
  104. }else{
  105. Db::name('user_visitlist')->where('id',$visit_check['id'])->update(['updatetime'=>time()]);
  106. }
  107. }
  108. $this->success("获取成功!",$userInfo);
  109. }
  110. /**
  111. * 获取最近访客
  112. * (消息)
  113. */
  114. public function getMyVisitList(){
  115. $list = Db::name('user_visitlist')->alias('uv')
  116. ->field('uv.user_id,uv.updatetime,user.nickname,user.avatar,user.gender,user.desc')
  117. ->join('user','uv.user_id = user.id','LEFT')
  118. ->where('uv.visit_user_id',$this->auth->id) //被访问者
  119. ->order('uv.id desc')->autopage()->select();
  120. $list = list_domain_image($list,['avatar']);
  121. if(!empty($list)){
  122. foreach($list as $key => &$val){
  123. //关注
  124. $val['is_follow'] = $this->is_follow($this->auth->id,$val['user_id']);
  125. }
  126. }
  127. $this->success(1,$list);
  128. }
  129. /**
  130. * 获取用户财富等级配置
  131. */
  132. public function get_wealth_config() {
  133. $data = Db::name('user_config_wealth')->order('level asc')->select();
  134. $data = list_domain_image($data,['image']);
  135. return $this->success("获取成功!",$data);
  136. }
  137. /**
  138. * 获取用户财富等级信息
  139. */
  140. public function getUserwealthInfo() {
  141. $res = [];$exstart = 0;$exend = 0;
  142. $userInfo = Db::name('user')->field("id,wealth_level,wealth_empirical")->where(["id"=>$this->auth->id])->find();
  143. if(!$userInfo) {
  144. $this->error("用户信息获取失败!");
  145. }
  146. //当前的等级
  147. $where = [];
  148. $where["empirical"] = ["elt",$userInfo["wealth_empirical"]];
  149. $userexplainstart = Db::name('user_config_wealth')->where($where)->order("empirical","desc")->limit(1)->select();
  150. //即将升到的等级
  151. $where = [];
  152. $where["empirical"] = ["gt",$userInfo["wealth_empirical"]];
  153. $userexplainend = Db::name('user_config_wealth')->where($where)->order("empirical","asc")->limit(1)->select();
  154. //当前等级 与 即将升到的等级,缺省补充
  155. if(!$userexplainstart && !$userexplainend) {
  156. $this->error("经验等级信息获取失败!");
  157. } elseif(!$userexplainstart && $userexplainend) {
  158. $res["level_start"] = 0;
  159. $res["level_start_empirical"] = 0;
  160. $res["level_end"] = $userexplainend[0]["level"];
  161. $res["level_end_empirical"] = $userexplainend[0]["empirical"];
  162. } elseif($userexplainstart && !$userexplainend) {
  163. $res["level_start"] = $userexplainstart[0]["level"];
  164. $res["level_start_empirical"] = $userexplainstart[0]["empirical"];
  165. $res["level_end"] = $userexplainstart[0]["level"];
  166. $res["level_end_empirical"] = $userexplainstart[0]["empirical"];
  167. } elseif($userexplainstart && $userexplainend) {
  168. $res["level_start"] = $userexplainstart[0]["level"];
  169. $res["level_start_empirical"] = $userexplainstart[0]["empirical"];
  170. $res["level_end"] = $userexplainend[0]["level"];
  171. $res["level_end_empirical"] = $userexplainend[0]["empirical"];
  172. }
  173. $exstart = $res["level_start_empirical"];
  174. $exend = $res["level_end_empirical"];
  175. $r1 = $exend-$exstart; // 等级经验值差
  176. $r2 = $userInfo["wealth_empirical"]-$exstart; // 当前等级与最低等级经验值差
  177. $r3 = $exend-$userInfo["wealth_empirical"]; // 还需多少经验值升级
  178. if($r1 == 0) {
  179. $res["level_rate"] = 1; //百分百
  180. } elseif($r2 == 0) {
  181. $res["level_rate"] = 0; //百分0
  182. if($res["level_start"] == $res["level_end"]) {
  183. $res["level_rate"] = 1;
  184. }
  185. } else {
  186. $res["level_rate"] = intval(($r2/$r1)*100)/100;
  187. }
  188. $res["to_up_need"] = $r3>0?$r3:0;
  189. // // 满级
  190. // if($r3 == 0 && !$userexplainend) {
  191. // $res["level_rate"] = 1;
  192. // }
  193. //规则
  194. $rule = config('site.caifulevel_rule');
  195. $new_rule = [];
  196. foreach($rule as $title => $info){
  197. $new_rule[] = [
  198. 'title'=>$title,
  199. 'info'=>$info,
  200. ];
  201. }
  202. $res['rule'] = $new_rule;
  203. $this->success("获取成功!",$res);
  204. }
  205. ///////////////////////////没用到////////////////////////
  206. /**
  207. * 获取关注人列表.派对信息
  208. */
  209. public function getFollowsLive() {
  210. $is_online = $this->request->request("is_online");// 是否在线:1=直播中,0=未开播
  211. $page = $this->request->request('page',1); // 分页
  212. $pageNum = $this->request->request('pageNum',10); // 分页
  213. // 分页搜索构建
  214. $pageStart = ($page-1)*$pageNum;
  215. $is_online == 1 || $is_online = 0;
  216. $fanfollowModel = new \app\common\model\UserFansFollow();
  217. $where = [];
  218. $where["a.fans_id"] = $this->auth->id;
  219. $where["p.room_type"] = 2;
  220. $where["p.is_online"] = $is_online;
  221. if($is_online == 1) {
  222. $field = "p.id as party_id,u.u_id,u.nickname,p.party_name,p.party_hot,p.party_logo,u.avatar,t.id as party_type";
  223. } else {
  224. $field = "p.id as party_id,a.user_id,u.avatar,u.gender,u.level,u.nickname,p.party_name,p.party_logo,t.id as party_type";
  225. }
  226. $list = $fanfollowModel->alias("a")
  227. ->field($field)
  228. ->join("hx_user u","u.id = a.user_id")
  229. ->join("hx_party p","p.user_id = a.user_id")
  230. ->join("hx_party_type t","t.id = p.party_type","left")
  231. ->limit($pageStart,$pageNum)
  232. ->where($where)->select();
  233. if($list) {
  234. foreach($list as $k => $v) {
  235. $mod = isset($v["party_type"])?intval($v["party_type"])%5:1;
  236. if(isset($v["type_name"]) && $v["type_name"]) {
  237. $type_name = $v["type_name"];
  238. } else {
  239. $type_name = "普通房";
  240. }
  241. $list[$k]["party_type"] = $type_name;
  242. $list[$k]["party_type_color"] = $mod == 0?5:$mod;
  243. }
  244. $this->success("获取成功!",$list);
  245. } else {
  246. $this->success("数据为空!",[]);
  247. }
  248. }
  249. /**
  250. * redis 数据恢复---非redis数据丢失请勿使用!!!!
  251. */
  252. /*public function shujuhuifu() {
  253. $key = $this->request->request("key");// 操作验证 123456
  254. if($key != 123456) {
  255. $this->error(__('Invalid parameters'));
  256. }
  257. $giftuserpartyModel = new \app\common\model\GiftUserParty();
  258. $redis = new Redis();
  259. $redisconfig = config("redis");
  260. $redis->connect($redisconfig["host"], $redisconfig["port"]);
  261. if ($redisconfig['redis_pwd']) {
  262. $redis->auth($redisconfig['redis_pwd']);
  263. }
  264. if($redisconfig['redis_selectdb'] > 0){
  265. $redis->select($redisconfig['redis_selectdb']);
  266. }
  267. // 获取本周第一天
  268. $weekday = $this->firstOfWeek(date("Y-m-d H:i:s"));
  269. // 获取本月第一天
  270. $monthday = date("Ym01");
  271. $where = [];
  272. $where["createtime"] = ["gt",strtotime($weekday)];
  273. $list1 = $giftuserpartyModel->where($where)->select();
  274. foreach($list1 as $k => $v) {
  275. // 添加redis记录做魅力排行榜周榜用
  276. $redis->zIncrBy("jewel_get_".$v["party_id"].":".$weekday,$v["value"],$v["user_to_id"]);
  277. // 添加redis记录做财富排行榜周榜用
  278. $redis->zIncrBy("jewel_to_".$v["party_id"].":".$weekday,$v["value"],$v["user_id"]);
  279. }
  280. $where = [];
  281. $where["createtime"] = ["gt",strtotime(date("Y-m-01"))];
  282. $list2 = $giftuserpartyModel->where($where)->select();
  283. foreach($list2 as $k => $v) {
  284. // 添加redis记录做魅力排行榜月榜用
  285. $redis->zIncrBy("jewel_get_".$v["party_id"].":".$monthday,$v["value"],$v["user_to_id"]);
  286. // 添加redis记录做财富排行榜月榜用
  287. $redis->zIncrBy("jewel_to_".$v["party_id"].":".$monthday,$v["value"],$v["user_id"]);
  288. }
  289. $this->success("执行成功!");
  290. }*/
  291. /**
  292. * 获取用户等级说明
  293. */
  294. public function getLevelExplain() {
  295. $data = \app\common\model\UserLevelExplain::field("title,content")->select();
  296. return $this->success("获取成功!",$data);
  297. }
  298. /**
  299. * 获取用户等级信息
  300. */
  301. public function getUserLevelInfo() {
  302. $res = [];$exstart = 0;$exend = 0;
  303. $userModel = new \app\common\model\User();
  304. $userInfo = $userModel->field("id,nickname,avatar,level,empirical")->where(["id"=>$this->auth->id])->find();
  305. if(!$userInfo) {
  306. $this->error("用户信息获取失败!");
  307. }
  308. $res["avatar"] = $userInfo['avatar'];
  309. $res["nickname"] = $userInfo['nickname'];
  310. // 获取用户当前经验值对应等级
  311. $userconfigModel = new \app\common\model\UserLevelConfig();
  312. $where = [];
  313. $where["empirical"] = ["elt",$userInfo["empirical"]];
  314. $userexplainstart = $userconfigModel->where($where)->order("empirical","desc")->limit(1)->select();
  315. $where = [];
  316. $where["empirical"] = ["gt",$userInfo["empirical"]];
  317. $userexplainend = $userconfigModel->where($where)->order("empirical","asc")->limit(1)->select();
  318. if(!$userexplainstart && !$userexplainend) {
  319. $this->error("经验等级信息获取失败!");
  320. } elseif(!$userexplainstart && $userexplainend) {
  321. $res["level_start"] = 0;
  322. $res["level_end"] = $userexplainend[0]["level"];
  323. } elseif($userexplainstart && !$userexplainend) {
  324. $res["level_start"] = $userexplainstart[0]["level"];
  325. $res["level_end"] = $userexplainstart[0]["level"];
  326. } elseif($userexplainstart && $userexplainend) {
  327. $res["level_start"] = $userexplainstart[0]["level"];
  328. $res["level_end"] = $userexplainend[0]["level"];
  329. }
  330. $userexplainstart && $exstart = $userexplainstart[0]["empirical"];
  331. $userexplainend && $exend = $userexplainend[0]["empirical"];
  332. $r1 = $exend-$exstart; // 等级经验值差
  333. $r2 = $userInfo["empirical"]-$exstart; // 当前等级与最低等级经验值差
  334. $r3 = $exend-$userInfo["empirical"]; // 还需多少经验值升级
  335. if($r1 == 0) {
  336. $res["level_rate"] = 1;
  337. } elseif($r2 == 0) {
  338. $res["level_rate"] = 0;
  339. if($res["level_start"] == $res["level_end"]) {
  340. $res["level_rate"] = 1;
  341. }
  342. } else {
  343. $res["level_rate"] = intval(($r2/$r1)*100)/100;
  344. }
  345. $res["to_up_need"] = $r3>0?$r3:0;
  346. // // 满级
  347. // if($r3 == 0 && !$userexplainend) {
  348. // $res["level_rate"] = 1;
  349. // }
  350. $this->success("获取成功!",$res);
  351. }
  352. }