From 831af90170f874eb88a8e51b7429e307b89cb43d Mon Sep 17 00:00:00 2001 From: liutk <961510893@qq.com> Date: Mon, 20 May 2024 10:56:44 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A1=A5=E5=85=85=E5=90=8E=E5=8F=B0=E5=8F=91?= =?UTF-8?q?=E8=B4=A7=EF=BC=8C=E4=BB=A5=E5=8F=8A=E6=8E=A5=E5=8F=A3=E8=B0=83?= =?UTF-8?q?=E6=95=B4bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Admin/Controllers/UserGiftController.php | 44 ++++++++++-- app/Admin/routes.php | 1 + .../Api/ActivityGameController.php | 4 +- app/Http/Controllers/Api/UserController.php | 5 +- app/Http/Resources/Api/UserGiftResource.php | 5 +- app/Models/Activity.php | 4 ++ app/Models/Filters/AdFilter.php | 1 + app/Models/Filters/UserGiftFilter.php | 17 +++++ app/Models/UserGift.php | 9 +++ app/Services/Admin/ActivityService.php | 3 +- app/Services/Admin/UserGiftService.php | 12 ++++ app/Services/Api/UserService.php | 68 +++++++++---------- 12 files changed, 128 insertions(+), 45 deletions(-) diff --git a/app/Admin/Controllers/UserGiftController.php b/app/Admin/Controllers/UserGiftController.php index 1755af7..0276c29 100644 --- a/app/Admin/Controllers/UserGiftController.php +++ b/app/Admin/Controllers/UserGiftController.php @@ -6,9 +6,13 @@ use Slowlyo\OwlAdmin\Admin; use Slowlyo\OwlAdmin\Renderers\Page; use Slowlyo\OwlAdmin\Renderers\Form; use Slowlyo\OwlAdmin\Renderers\Operation; +use Slowlyo\OwlAdmin\Renderers\Dialog; +use Slowlyo\OwlAdmin\Renderers\DialogAction; use Slowlyo\OwlAdmin\Controllers\AdminController; use App\Services\Admin\UserGiftService; -use App\Admin\Components; +use App\Models\UserGift; +use App\Models\Activity; +use Illuminate\Http\Request; class UserGiftController extends AdminController { @@ -22,13 +26,23 @@ class UserGiftController extends AdminController amis('filter-toggler')->align('right'), ]) ->filter($this->baseFilter()->labelWidth('80px')->body([ - + amis()->GroupControl()->mode('horizontal')->body([ + amis()->SelectControl('activity', __('admin.activities.name'))->options(Activity::sort()->pluck('name', 'id')->toArray()), + amis()->TextControl('user_name', __('admin.users.nick_name')) + ->placeholder(__('admin.users.nick_name')), + amis()->TextControl('user_phone', __('admin.users.phone')) + ->placeholder(__('admin.users.phone')), + amis()->SelectControl('state', __('admin.user_gifts.state')) + ->options([ + 1=>'未发货',2=>'已发货',0=>'未领取' + ]), + ]) ])) ->columns([ amis()->TableColumn('activity.name', __('admin.activities.name')), amis()->TableColumn('gift.name', __('admin.activity_gifts.name')), amis()->TableColumn('user.nick_name', __('admin.users.nick_name')), - amis()->TableColumn('user.phone', __('admin.users.phone')), + amis()->TableColumn('user.phone', __('admin.users.phone'))->copyable(), amis()->TableColumn('state', __('admin.user_gifts.state'))->type('mapping')->map([ "0"=>"未领取", "1"=>"未发货", @@ -39,7 +53,19 @@ class UserGiftController extends AdminController amis()->TableColumn('address', __('admin.user_gifts.address')), amis()->TableColumn('phone', __('admin.user_gifts.phone')), amis()->TableColumn('shipping_company', __('admin.user_gifts.shipping_company')), - amis()->TableColumn('shipping_number', __('admin.user_gifts.shipping_number')), + amis()->TableColumn('shipping_number', __('admin.user_gifts.shipping_number'))->copyable(), + Operation::make()->label(__('admin.actions'))->buttons([ + amisMake()->DialogAction()->label('发货') + ->level('link') + ->dialog(Dialog::make()->title('填写发货信息')->body([ + amisMake()->form()->title('') + ->api('post:' .admin_url('user_gifts/${id}/shipping')) + ->body([ + amis()->TextControl('shipping_company', __('admin.user_gifts.shipping_company'))->required(), + amis()->TextControl('shipping_number', __('admin.user_gifts.shipping_number'))->required(), + ]) + ]))->visibleOn('${state == 1}'), + ]) ]); return $this->baseList($crud); @@ -74,4 +100,14 @@ class UserGiftController extends AdminController amis()->Button()->actionType('cancel')->label(__('admin.back'))->primary() ]; } + + /** + * 发货 + */ + public function shipping(UserGift $userGift, Request $request) + { + $res = $this->service->shippingGift($userGift, $request->input()); + + return $this->autoResponse($res, '发货'); + } } \ No newline at end of file diff --git a/app/Admin/routes.php b/app/Admin/routes.php index 4de8695..8861b88 100644 --- a/app/Admin/routes.php +++ b/app/Admin/routes.php @@ -42,6 +42,7 @@ Route::group([ $router->resource('activity_gifts', \App\Admin\Controllers\ActivityGiftController::class); + $router->post('user_gifts/{user_gift}/shipping', [\App\Admin\Controllers\UserGiftController::class, 'shipping']); $router->resource('user_gifts', \App\Admin\Controllers\UserGiftController::class); //修改上传 diff --git a/app/Http/Controllers/Api/ActivityGameController.php b/app/Http/Controllers/Api/ActivityGameController.php index 69f60d1..8d90ec0 100644 --- a/app/Http/Controllers/Api/ActivityGameController.php +++ b/app/Http/Controllers/Api/ActivityGameController.php @@ -57,9 +57,9 @@ class ActivityGameController extends ApiController return $this->success(); } - public function joinGame(ActivityGame $activityGame, JoinGameRequest $request) + public function joinGame(ActivityGame $game, JoinGameRequest $request) { - $res = $this->service->join($activityGame, $request->user(), $request->input('score')); + $res = $this->service->join($game, $request->user(), $request->input('score')); if($res['status']){ return $this->success(null, '竞猜成功'); diff --git a/app/Http/Controllers/Api/UserController.php b/app/Http/Controllers/Api/UserController.php index 0e7c05f..2d9ffd6 100644 --- a/app/Http/Controllers/Api/UserController.php +++ b/app/Http/Controllers/Api/UserController.php @@ -71,14 +71,15 @@ class UserController extends ApiController public function giftList(Request $request) { - $userGifts = $request->user()->gifts()->with(['gift', 'gift.activity'])->sort() + $userGifts = $request->user()->gifts()->with(['gift', 'activity'])->sort() ->simplePaginate($request->query('per_page', 20)); - return $this->success(['activities' => UserGiftResource::collection($userGifts)->resolve()]); + return $this->success(['gifts' => UserGiftResource::collection($userGifts)->resolve()]); } public function userGift(UserGift $userGift, Request $request) { + $userGift->load(['gift', 'activity']); return UserGiftResource::make($userGift); } diff --git a/app/Http/Resources/Api/UserGiftResource.php b/app/Http/Resources/Api/UserGiftResource.php index d0b7e6b..b0b7f04 100644 --- a/app/Http/Resources/Api/UserGiftResource.php +++ b/app/Http/Resources/Api/UserGiftResource.php @@ -16,6 +16,7 @@ class UserGiftResource extends JsonResource public function toArray($request) { return [ + 'id' => $this->id, 'gift_name'=>$this->whenLoaded('gift', function () { return $this->gift->name; }, ''), @@ -28,8 +29,8 @@ class UserGiftResource extends JsonResource 'gift_explain'=> $this->whenLoaded('gift', function () { return $this->gift->explain; }, ''), - 'activity_name' => $this->whenLoaded('gift.activity', function () { - return $this->gift->activity->name; + 'activity_name' => $this->whenLoaded('activity', function () { + return $this->activity->name; }, ''), 'consignee' => $this->consignee ?? '', diff --git a/app/Models/Activity.php b/app/Models/Activity.php index 4387ea2..3ab9aff 100644 --- a/app/Models/Activity.php +++ b/app/Models/Activity.php @@ -10,6 +10,10 @@ class Activity extends Model { use HasFactory,Filterable; + protected $fillable = [ + 'state' + ]; + protected $casts = [ 'start_at' => 'datetime', 'end_at' => 'datetime' diff --git a/app/Models/Filters/AdFilter.php b/app/Models/Filters/AdFilter.php index 5b1e5f6..029604f 100644 --- a/app/Models/Filters/AdFilter.php +++ b/app/Models/Filters/AdFilter.php @@ -29,6 +29,7 @@ class AdFilter extends ModelFilter { return $this->where('address', $address); } + public function publishedAt($publishedAt){ $publishedAt = explode(',',$publishedAt); return $this->where(function($q) use ($publishedAt) { diff --git a/app/Models/Filters/UserGiftFilter.php b/app/Models/Filters/UserGiftFilter.php index 302bfd3..2ebf6f6 100644 --- a/app/Models/Filters/UserGiftFilter.php +++ b/app/Models/Filters/UserGiftFilter.php @@ -7,5 +7,22 @@ use EloquentFilter\ModelFilter; class UserGiftFilter extends ModelFilter { + public function activityId($activity) + { + return $this->where('activity_id', $activityId); + } + public function userName($userName) + { + return $this->whereHas('user', function($q) use ($userName) { + return $q->where('nick_name', 'like', '%'.$userName.'%'); + }); + } + + public function userPhone($userPhone) + { + return $this->whereHas('user', function($q) use ($userPhone) { + return $q->where('phone', 'like', $userPhone.'%'); + }); + } } diff --git a/app/Models/UserGift.php b/app/Models/UserGift.php index 0c2e767..cbe486e 100644 --- a/app/Models/UserGift.php +++ b/app/Models/UserGift.php @@ -10,6 +10,15 @@ class UserGift extends Model { use HasFactory,Filterable; + protected $fillable = [ + 'consignee', + 'address', + 'phone', + 'shipping_company', + 'shipping_number', + 'state', + ]; + public function scopeSort($q) { $q->orderBy('created_at', 'desc'); diff --git a/app/Services/Admin/ActivityService.php b/app/Services/Admin/ActivityService.php index 13955bc..d5a7f95 100644 --- a/app/Services/Admin/ActivityService.php +++ b/app/Services/Admin/ActivityService.php @@ -2,6 +2,7 @@ namespace App\Services\Admin; +use DB; use App\Models\Activity; use App\Models\Filters\ActivityFilter; use Illuminate\Support\Arr; @@ -102,7 +103,7 @@ class ActivityService extends BaseService $activity->logs()->whereIn('user_id', $userIds)->update([ 'has_gift' => 1 ]); - + DB::commit(); }catch(Throwable $th){ DB::rollBack(); diff --git a/app/Services/Admin/UserGiftService.php b/app/Services/Admin/UserGiftService.php index ec1c518..adbd833 100644 --- a/app/Services/Admin/UserGiftService.php +++ b/app/Services/Admin/UserGiftService.php @@ -21,4 +21,16 @@ class UserGiftService extends BaseService protected string $modelFilterName = UserGiftFilter::class; protected array $withRelationships = ['user', 'gift', 'activity']; + + public function shippingGift(UserGift $userGift, $params) + { + //更新状态,结果 + $userGift->update([ + 'shipping_company' => $params['shipping_company'], + 'shipping_number' => $params['shipping_number'], + 'state' => 2, + ]); + + return true; + } } \ No newline at end of file diff --git a/app/Services/Api/UserService.php b/app/Services/Api/UserService.php index 275e829..43086ff 100644 --- a/app/Services/Api/UserService.php +++ b/app/Services/Api/UserService.php @@ -65,40 +65,40 @@ class UserService return $res; } - // public function receiveGift(UserGift $userGift, $params) - // { - // $userGift->update([ - // 'consignee' => $params['consignee'], - // 'phone' => $params['phone'], - // 'address' => $params['address'], - // 'state' => 1 - // ]); - // } + public function receiveGift(UserGift $userGift, $params) + { + $userGift->update([ + 'consignee' => $params['consignee'], + 'phone' => $params['phone'], + 'address' => $params['address'], + 'state' => 1 + ]); + } - // protected function saveFile($path, $file = null) - // { - // if (gettype($file) == 'object') { - // //获取文件大小 - // if($size = $file->getSize() > 2*1024*1024){//大于2M - // return false; - // } - // $type = $file->getClientOriginalExtension(); - // if (in_array($type, array('jpeg', 'jpg', 'bmp', 'png'))) { - // $file = Storage::disk(Admin::config('admin.upload.disk'))->putFile($path, $file); - // }else{ - // return false; - // } - // } else if (preg_match('/^(data:\s*image\/(\w+);base64,)/', $file, $result)) { - // $type = $result[2]; - // if (in_array($type, array('jpeg', 'jpg', 'bmp', 'png'))) { - // $savePath = $path . '/' . uniqid() . '.' . $type; - // Storage::disk(Admin::config('admin.upload.disk'))->put($savePath, base64_decode(str_replace($result[1], '', $file))); - // $file = $savePath; - // }else{ - // return false; - // } - // } - // return $file; - // } + protected function saveFile($path, $file = null) + { + if (gettype($file) == 'object') { + //获取文件大小 + if($size = $file->getSize() > 2*1024*1024){//大于2M + return false; + } + $type = $file->getClientOriginalExtension(); + if (in_array($type, array('jpeg', 'jpg', 'bmp', 'png'))) { + $file = Storage::disk(Admin::config('admin.upload.disk'))->putFile($path, $file); + }else{ + return false; + } + } else if (preg_match('/^(data:\s*image\/(\w+);base64,)/', $file, $result)) { + $type = $result[2]; + if (in_array($type, array('jpeg', 'jpg', 'bmp', 'png'))) { + $savePath = $path . '/' . uniqid() . '.' . $type; + Storage::disk(Admin::config('admin.upload.disk'))->put($savePath, base64_decode(str_replace($result[1], '', $file))); + $file = $savePath; + }else{ + return false; + } + } + return $file; + } } \ No newline at end of file