generated from liutk/owl-admin-base
166 lines
5.5 KiB
PHP
166 lines
5.5 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers\Api;
|
|
|
|
use Cache;
|
|
use Carbon\Carbon;
|
|
use Slowlyo\OwlAdmin\Admin;
|
|
use Overtrue\LaravelWeChat\EasyWeChat;
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\Support\Arr;
|
|
use Illuminate\Support\Facades\Storage;
|
|
use App\Services\Api\UserService;
|
|
use App\Http\Requests\CodeRequest;
|
|
use App\Http\Requests\UserInfoRequest;
|
|
use App\Http\Requests\ReceiveGiftRequest;
|
|
use App\Models\Activity;
|
|
use App\Models\UserActivity;
|
|
use App\Models\UserGift;
|
|
use App\Http\Resources\Api\UserResource;
|
|
use App\Http\Resources\Api\UserGiftResource;
|
|
use App\Http\Resources\Api\UserActivityResource;
|
|
|
|
class UserController extends ApiController
|
|
{
|
|
protected string $serviceName = UserService::class;
|
|
|
|
public function bindPhone(CodeRequest $request)
|
|
{
|
|
$user = $request->user();
|
|
if($user->phone){
|
|
return $this->error('您已绑定手机号,请勿重复绑定');
|
|
}
|
|
|
|
$code = $request->input('code');
|
|
$app = EasyWeChat::miniApp();
|
|
|
|
try {
|
|
$response = $app->getClient()->postJson('wxa/business/getuserphonenumber', [
|
|
'code' => $code
|
|
]);
|
|
}catch (\Throwable $th) {
|
|
return $this->error($th->getMessage());
|
|
}
|
|
|
|
if (Arr::get($response, 'errcode')) {
|
|
return $this->error(Arr::get($response, 'errmsg'));
|
|
}
|
|
|
|
$phone = Arr::get($response['phone_info'], 'phoneNumber');
|
|
// $phone = '17784326301';
|
|
$res = $this->service->bindPhone($user, $phone);
|
|
|
|
if($res['status']){
|
|
return $this->success(null, '绑定成功');
|
|
}else{
|
|
return $this->error($res['message']);
|
|
}
|
|
}
|
|
|
|
public function activityList(Request $request)
|
|
{
|
|
$userActivities = UserActivity::with(['activity' => function($q) {
|
|
$q->show();
|
|
}])
|
|
->where(['user_id'=>$request->user()->id])
|
|
->orderBy('created_at', 'desc')
|
|
->simplePaginate($request->query('per_page', 20));
|
|
|
|
return $this->success(['activities' => UserActivityResource::collection($userActivities)->resolve()]);
|
|
}
|
|
|
|
public function giftList(Request $request)
|
|
{
|
|
$userGifts = $request->user()->gifts()->with(['gift', 'activity'])->sort()
|
|
->simplePaginate($request->query('per_page', 20));
|
|
|
|
return $this->success(['gifts' => UserGiftResource::collection($userGifts)->resolve()]);
|
|
}
|
|
|
|
public function userGift(UserGift $userGift, Request $request)
|
|
{
|
|
$userGift->load(['gift', 'activity']);
|
|
return UserGiftResource::make($userGift);
|
|
}
|
|
|
|
public function receiveGift(UserGift $userGift, ReceiveGiftRequest $request)
|
|
{
|
|
if($userGift->user_id === $request->user()->id){
|
|
$this->service->receiveGift($userGift, $request->input());
|
|
}else{
|
|
return $this->error('领取失败。');
|
|
}
|
|
return $this->success(null, '领取成功');
|
|
}
|
|
|
|
public function updateUserInfo(UserInfoRequest $request)
|
|
{
|
|
$user = $request->user();
|
|
$nickName = $request->input('nick_name');
|
|
$avatar = $request->input('avatar');
|
|
//处理头像;
|
|
$avatarName = substr( $avatar , strrpos($avatar , '/')+1);
|
|
$filePath = 'avatars/'.$avatarName;
|
|
$file = file_get_contents($avatar);
|
|
Storage::disk(Admin::config('admin.upload.disk'))->put($filePath, $file);
|
|
$avatar = Storage::disk(Admin::config('admin.upload.disk'))->url($filePath);
|
|
|
|
$user->update([
|
|
'avatar' => $avatar,
|
|
'nick_name' => $nickName
|
|
]);
|
|
|
|
return $this->success(null, '修改成功');
|
|
}
|
|
|
|
/**
|
|
* 执行资源上传
|
|
*/
|
|
public function uploadResource(Request $request)
|
|
{
|
|
$path = $request->input('path', 'uploads') . '/temporary/' . date('Y-m-d');
|
|
$result = [];
|
|
|
|
// file 文件
|
|
$files = $request->file();
|
|
if($files){
|
|
foreach ($files as $key => $fileData) {
|
|
$item = null;
|
|
if (is_array($fileData)) {
|
|
foreach ($fileData as $file) {
|
|
if($_save_res = $this->service->saveFile($path, $file)){
|
|
$file_path = Storage::disk(Admin::config('admin.upload.disk'))->url($_save_res);
|
|
}else{
|
|
$file_path = '';
|
|
}
|
|
$item[] = $file_path;
|
|
}
|
|
} else {
|
|
if($save_res = $this->service->saveFile($path, $fileData)){
|
|
$file_path = Storage::disk(Admin::config('admin.upload.disk'))->url($save_res);
|
|
}else{
|
|
$file_path = '';
|
|
}
|
|
$item = $file_path;
|
|
}
|
|
$result[$key] = $item;
|
|
}
|
|
}else{
|
|
$data = $request->except(['path']);
|
|
foreach ($data as $key => $files) {
|
|
$item = null;
|
|
if (is_array($files)) {
|
|
// $_stop = 0;
|
|
foreach ($files as $file) {
|
|
$item[] = Storage::disk(Admin::config('admin.upload.disk'))->url($this->service->saveFile($path, $file));
|
|
}
|
|
} else {
|
|
$item = Storage::disk(Admin::config('admin.upload.disk'))->url($this->service->saveFile($path, $files));
|
|
}
|
|
$result[$key] = $item;
|
|
}
|
|
}
|
|
|
|
return $this->json($result);
|
|
}
|
|
} |