User.php 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170
  1. <?php
  2. namespace app\controller\v2;
  3. use app\extra\basic\Base;
  4. use app\extra\tools\CodeExtend;
  5. use app\extra\weMini\Crypt;
  6. use app\extra\weMini\UserInfo;
  7. use app\middleware\WxMiddleware;
  8. use app\model\blue\BlueExpert;
  9. use app\model\blue\BlueExpertPlatform;
  10. use app\model\blue\BlueTaskRevenue;
  11. use app\model\blue\BlueUserOpen;
  12. use DI\Attribute\Inject;
  13. use LinFly\Annotation\Route\Controller;
  14. use LinFly\Annotation\Route\Middleware;
  15. use LinFly\Annotation\Route\Route;
  16. use Shopwwi\WebmanAuth\Facade\Auth as AuthMode;
  17. use support\Request;
  18. use support\Response;
  19. #[Controller(prefix: "/wx_v2/user"),Middleware(WxMiddleware::class)]
  20. class User extends Base
  21. {
  22. protected array $noNeedLogin = ["loginMobile","loginQuick"];
  23. #[Inject]
  24. protected BlueUserOpen $model;
  25. /**
  26. * wx.login快速验证是否注册
  27. * @param Request $request
  28. * @return Response
  29. */
  30. #[Route(path: "quick",methods: "post")]
  31. public function loginQuick(Request $request): Response
  32. {
  33. try {
  34. $param = $this->_valid([
  35. "code.require" => trans("empty.require"),
  36. "pid.default" => 0
  37. ],$request->method());
  38. if (!is_array($param)) return error($param);
  39. $userinfo = (new Crypt([
  40. "appid" => sConf("wechat.mini_appid"),
  41. "appsecret" => sConf("wechat.mini_secret")
  42. ]))->session($param['code']);
  43. if (!isset($userinfo['openid'])) return error("获取数据失败");
  44. $map = ['openid' => $userinfo['openid']];
  45. $userOpen = $this->model->where($map)->findOrEmpty();
  46. if ($userOpen->isEmpty()) return error("new");
  47. $userAuth = get_object_vars(AuthMode::guard("member")->login($userOpen->toArray()));
  48. return success("ok",['token' => $userAuth]);
  49. } catch (\Throwable $throwable) {
  50. return error($throwable->getMessage());
  51. }
  52. }
  53. /**
  54. * 新用户登录-自动完成注册
  55. * @param Request $request
  56. * @return Response
  57. */
  58. #[Route(path: "login",methods: "post")]
  59. public function loginMobile(Request $request): Response
  60. {
  61. try {
  62. $param = $this->_valid([
  63. "code.require" => trans("empty.require"),
  64. "login.require" => trans("empty.require"),
  65. "pid.default" => 0
  66. ],$request->method());
  67. if (!is_array($param)) return error($param);
  68. $userinfo = (new Crypt([
  69. "appid" => sConf("wechat.mini_appid"),
  70. "appsecret" => sConf("wechat.mini_secret")
  71. ]))->session($param['login']);
  72. if (!isset($userinfo['openid'])) return error("获取数据失败");
  73. $mobile = (new UserInfo([
  74. "appid" => sConf("wechat.mini_appid"),
  75. "appsecret" => sConf("wechat.mini_secret")
  76. ]))->getPhoneNumber($param['code']);
  77. if ($mobile['errcode'] <> 0) return error($mobile['errmsg']);
  78. $map = ['openid' => $userinfo['openid'],'mobile' => $mobile['phone_info']['purePhoneNumber']];
  79. $userOpen = $this->model->where($map)->findOrEmpty();
  80. if ($userOpen->isEmpty()) {
  81. $userOpen->insertGetId([
  82. 'openid' => $userinfo['openid'],
  83. 'parent' => $param['pid'],
  84. 'uuid' => CodeExtend::uniqidNumber(),
  85. 'mobile' => $mobile['phone_info']['purePhoneNumber'],
  86. "create_ip" => $request->getRealIp(),
  87. "nickname" => "微信用户",
  88. "headimg" => "https://blue-data.oss-cn-guangzhou.aliyuncs.com/logo.png"
  89. ]);
  90. $userOpen = $this->model->where($map)->findOrEmpty();
  91. }
  92. $userAuth = get_object_vars(AuthMode::guard("member")->login($userOpen->toArray()));
  93. return success("ok",['token' => $userAuth]);
  94. } catch (\Throwable $throwable) {
  95. return error($throwable->getMessage());
  96. }
  97. }
  98. #[Route(path: "data",methods: "get")]
  99. public function getUserData(Request $request): Response
  100. {
  101. try {
  102. $data = $this->model->where("openid",$request->user['openid'])->field("uuid,nickname,headimg,openid")->with(['star' => function($query) {
  103. $query->field("openid,group_id,level_exp")->with(['level' => function($query) {
  104. $query->field("id,level,name,exp");
  105. }]);
  106. }])->append(['fans','job','income','level','sign'])->withAttr([
  107. "fans" => function($query,$resp) {
  108. $fans = (new BlueExpertPlatform)->where("openid",$resp['openid'])->sum("follower_count");
  109. return formatMoneyKw($fans); // 全网粉丝数
  110. },
  111. "job" => function($query,$resp) {
  112. return "0"; // 任务数
  113. },
  114. "income" => function($query,$resp) {
  115. $income = (new BlueTaskRevenue)->where("openid",$resp['openid'])->sum("indicator_agg_data_20022");
  116. return formatMoneyKw($income/1000); // 收益
  117. },
  118. "sign" => function($query,$resp) {
  119. if ($resp['star']) return 1;
  120. return 0;
  121. },
  122. "level" => function($query,$resp) {
  123. if ($resp['star']) {
  124. return [
  125. "level_exp" => $resp['star']['level_exp'],
  126. "level_num" => $resp['star']['level']['level']??'0',
  127. "level_name" => $resp['star']['level']['name']??'0',
  128. "need_exp" => $resp['star']['level']['exp']??'0',
  129. ];
  130. } else {
  131. return [];
  132. }
  133. }
  134. ])->findOrEmpty();
  135. if ($data->isEmpty()) return errorTrans("error.data");
  136. $return = $data->toArray();
  137. unset($return['star'],$return['openid']);
  138. return success("ok",$return);
  139. } catch (\Throwable $throwable) {
  140. return error($throwable->getMessage());
  141. }
  142. }
  143. /**
  144. * 收益
  145. * @param Request $request
  146. * @return Response
  147. */
  148. #[Route(path: "income",methods: "get")]
  149. public function getIncomeData(Request $request): Response
  150. {
  151. try {
  152. } catch (\Throwable $throwable) {
  153. return error($throwable->getMessage());
  154. }
  155. }
  156. }