From 67afb6bc7158544bf870552db58199fd0f2e88ef Mon Sep 17 00:00:00 2001 From: Jing Li Date: Tue, 1 Nov 2022 14:37:04 +0800 Subject: [PATCH] =?UTF-8?q?=E7=A8=BB=E8=99=BE=E4=BB=B7=E6=A0=BC=E7=AE=A1?= =?UTF-8?q?=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/RiceShrimpPriceController.php | 112 ++++++++++++++++++ .../Requestes/RiceShrimpPriceStoreRequest.php | 32 +++++ .../RiceShrimpPriceUpdateRequest.php | 28 +++++ .../Resources/RiceShrimpPriceResource.php | 29 +++++ app/ModelFilters/RiceShrimpPriceFilter.php | 18 +++ app/Models/RiceShrimpPrice.php | 26 ++++ ...133147_create_rice_shrimp_prices_table.php | 38 ++++++ routes/api.php | 3 + 8 files changed, 286 insertions(+) create mode 100644 app/Http/Controllers/RiceShrimpPriceController.php create mode 100644 app/Http/Requestes/RiceShrimpPriceStoreRequest.php create mode 100644 app/Http/Requestes/RiceShrimpPriceUpdateRequest.php create mode 100644 app/Http/Resources/RiceShrimpPriceResource.php create mode 100644 app/ModelFilters/RiceShrimpPriceFilter.php create mode 100644 app/Models/RiceShrimpPrice.php create mode 100644 database/migrations/2022_11_01_133147_create_rice_shrimp_prices_table.php diff --git a/app/Http/Controllers/RiceShrimpPriceController.php b/app/Http/Controllers/RiceShrimpPriceController.php new file mode 100644 index 0000000..37ef63c --- /dev/null +++ b/app/Http/Controllers/RiceShrimpPriceController.php @@ -0,0 +1,112 @@ +filter($request->all()) + ->latest('id') + ->paginate(20); + + return RiceShrimpPriceResource::collection($riceShrimpPrices); + } + + /** + * 创建稻虾价格 + * + * @param \App\Http\Requestes\RiceShrimpPriceStoreRequest $request + * @return \App\Http\Resources\RiceShrimpPriceResource + * + * @throws \App\Exceptions\BizException + */ + public function store(RiceShrimpPriceStoreRequest $request): RiceShrimpPriceResource + { + $riceShrimpPriceExists = RiceShrimpPrice::query() + ->where('year', $request->input('year')) + ->where('quarter', $request->input('quarter')) + ->exists(); + + if ($riceShrimpPriceExists) { + throw ValidationException::withMessages([ + 'quarter' => ['季度已经存在'], + ]); + } + + $user = $request->user(); + + $riceShrimpPrice = RiceShrimpPrice::create( + array_merge( + $request->only(['year', 'quarter', 'price']), + [ + 'created_by' => $user->id, + 'updated_by' => $user->id, + ] + ) + ); + + $riceShrimpPrice->setRelations([ + 'createdBy' => $user, + 'updatedBy' => $user, + ]); + + return RiceShrimpPriceResource::make($riceShrimpPrice); + } + + /** + * 修改稻虾价格 + * + * @param int $id + * @param \App\Http\Requestes\RiceShrimpPriceUpdateRequest $request + * @return \App\Http\Resources\RiceShrimpPriceResource + */ + public function update($id, RiceShrimpPriceUpdateRequest $request): RiceShrimpPriceResource + { + $riceShrimpPrice = RiceShrimpPrice::findOrFail($id); + + $riceShrimpPrice->price = $request->input('price'); + + if ($riceShrimpPrice->isDirty()) { + $riceShrimpPrice->updated_by = $request->user()->id; + } + + $riceShrimpPrice->save(); + + return RiceShrimpPriceResource::make( + $riceShrimpPrice->loadMissing(['createdBy', 'updatedBy']) + ); + } + + /** + * 删除稻虾价格 + * + * @param int $id + * @return \Illuminate\Http\JsonResponse + */ + public function destroy($id): JsonResponse + { + $riceShrimpPrice = RiceShrimpPrice::findOrFail($id); + + $riceShrimpPrice->delete(); + + return response()->json(null); + } +} diff --git a/app/Http/Requestes/RiceShrimpPriceStoreRequest.php b/app/Http/Requestes/RiceShrimpPriceStoreRequest.php new file mode 100644 index 0000000..276d3a1 --- /dev/null +++ b/app/Http/Requestes/RiceShrimpPriceStoreRequest.php @@ -0,0 +1,32 @@ + ['required', 'int'], + 'quarter' => ['required', 'int', Rule::in([1, 2, 3, 4])], + 'price' => ['required', 'regex:/^([1-9]\d*|0)(\.\d{1,2})?$/'], + ]; + } + + public function attributes() + { + return [ + 'year' => '年份', + 'quarter' => '季度', + 'price' => '价格', + ]; + } +} diff --git a/app/Http/Requestes/RiceShrimpPriceUpdateRequest.php b/app/Http/Requestes/RiceShrimpPriceUpdateRequest.php new file mode 100644 index 0000000..fa9f852 --- /dev/null +++ b/app/Http/Requestes/RiceShrimpPriceUpdateRequest.php @@ -0,0 +1,28 @@ + ['required', 'regex:/^([1-9]\d*|0)(\.\d{1,2})?$/'], + ]; + } + + public function attributes() + { + return [ + 'price' => '价格', + ]; + } +} diff --git a/app/Http/Resources/RiceShrimpPriceResource.php b/app/Http/Resources/RiceShrimpPriceResource.php new file mode 100644 index 0000000..a3d8006 --- /dev/null +++ b/app/Http/Resources/RiceShrimpPriceResource.php @@ -0,0 +1,29 @@ + $this->id, + 'year' => $this->year, + 'quarter' => $this->quarter, + 'price' => $this->price, + 'created_by' => AdminUserResource::make($this->whenLoaded('createdBy')), + 'updated_by' => AdminUserResource::make($this->whenLoaded('updatedBy')), + 'created_at' => $this->created_at->unix(), + 'updated_at' => $this->updated_at->unix(), + ]; + } +} diff --git a/app/ModelFilters/RiceShrimpPriceFilter.php b/app/ModelFilters/RiceShrimpPriceFilter.php new file mode 100644 index 0000000..0f5767b --- /dev/null +++ b/app/ModelFilters/RiceShrimpPriceFilter.php @@ -0,0 +1,18 @@ +where('year', $year); + } + + public function quarter($quarter) + { + return $this->where('quarter', $quarter); + } +} diff --git a/app/Models/RiceShrimpPrice.php b/app/Models/RiceShrimpPrice.php new file mode 100644 index 0000000..1d63786 --- /dev/null +++ b/app/Models/RiceShrimpPrice.php @@ -0,0 +1,26 @@ +belongsTo(AdminUser::class, 'created_by'); + } + + public function updatedBy() + { + return $this->belongsTo(AdminUser::class, 'updated_by'); + } +} diff --git a/database/migrations/2022_11_01_133147_create_rice_shrimp_prices_table.php b/database/migrations/2022_11_01_133147_create_rice_shrimp_prices_table.php new file mode 100644 index 0000000..3c491b5 --- /dev/null +++ b/database/migrations/2022_11_01_133147_create_rice_shrimp_prices_table.php @@ -0,0 +1,38 @@ +id(); + $table->integer('year')->comment('年'); + $table->tinyInteger('quarter')->comment('季度'); + $table->decimal('price', 10, 2)->comment('价格'); + $table->unsignedBigInteger('created_by')->comment('创建人ID'); + $table->unsignedBigInteger('updated_by')->comment('修改人ID'); + $table->timestamps(); + + $table->unique(['year', 'quarter']); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('rice_shrimp_prices'); + } +}; diff --git a/routes/api.php b/routes/api.php index 5c433d2..da72bd8 100644 --- a/routes/api.php +++ b/routes/api.php @@ -59,6 +59,9 @@ Route::group(['middleware' => 'auth:sanctum'], function () { Route::put('admin-users/{admin_user}/enable', [AdminUserController::class, 'endable'])->name('admin_users.enable'); Route::put('admin-users/{admin_user}/edit-password', [AdminUserController::class, 'editPassword'])->name('admin_users.edit_password'); Route::apiResource('admin-roles', AdminRoleController::class)->names('admin_roles'); + + // 稻虾价格 + Route::apiResource('rice-shrimp-prices', RiceShrimpPriceController::class)->names('rice_shrimp_prices'); }); Route::prefix('users')->group(function () {