| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247 |
- <?php
- namespace app\controller\v2;
- use app\extra\basic\Base;
- use app\extra\service\blue\UserLogService;
- use app\extra\tools\CodeExtend;
- use app\extra\weMini\Crypt;
- use app\extra\weMini\UserInfo;
- use app\middleware\WxMiddleware;
- use app\model\blue\BlueExpert;
- use app\model\blue\BlueExpertGroup;
- use app\model\blue\BlueExpertPlatform;
- use app\model\blue\BlueIncomeDay;
- use app\model\blue\BlueIncomeMon;
- use app\model\blue\BlueIncomeTotal;
- use app\model\blue\BlueTaskRevenue;
- use app\model\blue\BlueTaskUser;
- use app\model\blue\BlueUserOpen;
- use DI\Attribute\Inject;
- use LinFly\Annotation\Route\Controller;
- use LinFly\Annotation\Route\Middleware;
- use LinFly\Annotation\Route\Route;
- use Shopwwi\WebmanAuth\Facade\Auth as AuthMode;
- use support\Request;
- use support\Response;
- #[Controller(prefix: "/wx_v2/user"),Middleware(WxMiddleware::class)]
- class User extends Base
- {
- protected array $noNeedLogin = ["loginMobile","loginQuick"];
- #[Inject]
- protected BlueUserOpen $model;
- /**
- * wx.login快速验证是否注册
- * @param Request $request
- * @return Response
- */
- #[Route(path: "quick",methods: "post")]
- public function loginQuick(Request $request): Response
- {
- try {
- $param = $this->_valid([
- "code.require" => trans("empty.require"),
- "pid.default" => 0
- ],$request->method());
- if (!is_array($param)) return error($param);
- $userinfo = (new Crypt([
- "appid" => sConf("wechat.mini_appid"),
- "appsecret" => sConf("wechat.mini_secret")
- ]))->session($param['code']);
- if (!isset($userinfo['openid'])) return error("获取数据失败");
- $map = ['openid' => $userinfo['openid']];
- $userOpen = $this->model->where($map)->findOrEmpty();
- if ($userOpen->isEmpty()) return error("new");
- $userAuth = get_object_vars(AuthMode::guard("member")->login($userOpen->toArray()));
- return success("ok",['token' => $userAuth]);
- } catch (\Throwable $throwable) {
- return error($throwable->getMessage());
- }
- }
- /**
- * 新用户登录-自动完成注册
- * @param Request $request
- * @return Response
- */
- #[Route(path: "login",methods: "post")]
- public function loginMobile(Request $request): Response
- {
- try {
- $param = $this->_valid([
- "code.require" => trans("empty.require"),
- "login.require" => trans("empty.require"),
- "pid.default" => 0
- ],$request->method());
- if (!is_array($param)) return error($param);
- $userinfo = (new Crypt([
- "appid" => sConf("wechat.mini_appid"),
- "appsecret" => sConf("wechat.mini_secret")
- ]))->session($param['login']);
- if (!isset($userinfo['openid'])) return error("获取数据失败");
- $mobile = (new UserInfo([
- "appid" => sConf("wechat.mini_appid"),
- "appsecret" => sConf("wechat.mini_secret")
- ]))->getPhoneNumber($param['code']);
- if ($mobile['errcode'] <> 0) return error($mobile['errmsg']);
- $map = ['openid' => $userinfo['openid'],'mobile' => $mobile['phone_info']['purePhoneNumber']];
- $userOpen = $this->model->where($map)->findOrEmpty();
- if ($userOpen->isEmpty()) {
- $userOpen->insertGetId([
- 'openid' => $userinfo['openid'],
- 'parent' => $param['pid'],
- 'uuid' => CodeExtend::uniqidNumber(),
- 'mobile' => $mobile['phone_info']['purePhoneNumber'],
- "create_ip" => $request->getRealIp(),
- "nickname" => "微信用户",
- "headimg" => "https://blue-data.oss-cn-guangzhou.aliyuncs.com/logo.png"
- ]);
- $userOpen = $this->model->where($map)->findOrEmpty();
- }
- $userAuth = get_object_vars(AuthMode::guard("member")->login($userOpen->toArray()));
- return success("ok",['token' => $userAuth]);
- } catch (\Throwable $throwable) {
- return error($throwable->getMessage());
- }
- }
- /**
- * 个人中心数据
- * @param Request $request
- * @return Response
- */
- #[Route(path: "data",methods: "get")]
- public function getUserData(Request $request): Response
- {
- try {
- $data = $this->model->where("openid",$request->user['openid'])->field("uuid,nickname,headimg,openid")->with(['star' => function($query) {
- $query->field("openid,group_id,level_exp")->with(['level' => function($query) {
- $query->field("id,level,name,exp");
- }]);
- }])->append(['level','sign','group',"tags"])->withAttr([
- "tags" => function ($query,$resp) {
- $fans = (new BlueExpertPlatform)->where("openid",$resp['openid'])->sum("follower_count");
- $income = (new BlueTaskRevenue)->where("openid",$resp['openid'])->sum("indicator_agg_data_20022");
- return [
- [
- "name" => "完成任务",
- "value" => (new BlueTaskUser)->where("openid",$resp['openid'])->where("status",'in',[1,3])->count(),
- ],
- [
- "name" => "收益(元)",
- "value" => formatMoneyKw($income/1000)
- ],
- [
- "name" => "粉丝",
- "value" => formatMoneyKw($fans),
- ],
- [
- "name" => "总消耗",
- "value" => "0.00",
- ]
- ];
- },
- "sign" => function($query,$resp) {
- if ($resp['star']) return 1;
- return 0;
- },
- "group" => function($query,$resp) {
- $group = (new BlueExpertGroup)->where("openid",$resp['openid'])->findOrEmpty();
- if ($group->isEmpty()) return 0;
- if ($group['status'] == 1) return 1;
- return 0;
- },
- "level" => function($query,$resp) {
- if ($resp['star']) {
- return [
- "level_exp" => $resp['star']['level_exp'],
- "level_num" => $resp['star']['level']['level']??'0',
- "level_name" => $resp['star']['level']['name']??'0',
- "need_exp" => $resp['star']['level']['exp']??'0',
- ];
- } else {
- return [];
- }
- }
- ])->findOrEmpty();
- if ($data->isEmpty()) return errorTrans("error.data");
- $return = $data->toArray();
- unset($return['star'],$return['openid']);
- return success("ok",$return);
- } catch (\Throwable $throwable) {
- return error($throwable->getMessage());
- }
- }
- /**
- * 收益总览
- * @param Request $request
- * @return Response
- */
- #[Route(path: "income/total",methods: "get")]
- public function getIncomeData(Request $request): Response
- {
- try {
- $param = $this->_valid([
- "day.default" => 7
- ],$request->method());
- if (!is_array($param)) return error($param);
- // 累计已结算收益
- $total = (new BlueIncomeTotal)->where("openid",$request->user['openid'])->sum("money");
- // 今日收益
- $day = (new BlueIncomeDay)->where("openid",$request->user['openid'])->sum("money");
- // 本月收益
- $mon = (new BlueIncomeMon)->where("openid",$request->user['openid'])->sum("money");
- // 钱包余额
- $balance = (new BlueExpert)->where("openid",$request->user['openid'])->value("balance");
- if ($balance > 0) $balance = format_money($balance/100);
- // 待结算
- $echart = [];
- $fields = ['ROUND(sum(money)/100,2)' => 'total','substr(create_at,1,10)' => 'mday'];
- $orderNum = (new BlueIncomeDay)->field($fields)->where("openid",$request->user['openid'])->whereTime('create_at', '-'.$param['day'].' days')->group('mday')->select()->column(null, 'mday');
- for ($i = $param['day']; $i >= 0; $i--) {
- $date = date('Y-m-d', strtotime("-{$i}days"));
- $echart[] = [
- 'day' => date('m-d', strtotime("-{$i}days")),
- 'money' => ($orderNum[$date] ?? [])['total'] ?? 0,
- ];
- }
- return successTrans("success.data",compact("echart","total","balance","day","mon"));
- } catch (\Throwable $throwable) {
- return error($throwable->getMessage());
- }
- }
- /**
- * 收益记录
- * @param Request $request
- * @return Response
- */
- #[Route(path: "income/log",methods: "get")]
- public function getIncomeLogs(Request $request): Response
- {
- try {
- $param = $this->_valid([
- "page.default" => 1,
- "size.default" => 10,
- ],$request->method());
- if (!is_array($param)) return error($param);
- $param['pageSize'] = $param['size'];
- $param['openid'] = $request->user['openid'];
- $list = (new UserLogService)->getList($param,"type,money,remark,icon,create_at");
- return successTrans("success.data",pageFormat($list));
- } catch (\Throwable $throwable) {
- return error($throwable->getMessage());
- }
- }
- }
|