_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()); } } }