From 3ee1dec8eac1fc2f1107ad2c44e114b085b1dbd1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E9=9D=99?= Date: Mon, 15 May 2023 17:09:47 +0800 Subject: [PATCH] =?UTF-8?q?=E7=A8=BB=E8=99=BE=E6=AF=8F=E5=91=A8=E4=BB=B7?= =?UTF-8?q?=E6=A0=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../RiceShrimpWeeklyPriceController.php | 115 ++++++++++++++++++ .../RiceShrimpWeeklyPriceStoreRequest.php | 32 +++++ .../RiceShrimpWeeklyPriceUpdateRequest.php | 31 +++++ .../RiceShrimpWeeklyPriceResource.php | 28 +++++ app/Models/RiceShrimpWeeklyPrice.php | 26 ++++ ...e_rice_shrimp_weekly_prices_table copy.php | 36 ++++++ database/seeders/EndpointPermissionSeeder.php | 1 + database/seeders/KeywordsTableSeeder.php | 10 ++ routes/api.php | 5 +- 9 files changed, 283 insertions(+), 1 deletion(-) create mode 100644 app/Http/Controllers/RiceShrimpWeeklyPriceController.php create mode 100644 app/Http/Requestes/RiceShrimpWeeklyPriceStoreRequest.php create mode 100644 app/Http/Requestes/RiceShrimpWeeklyPriceUpdateRequest.php create mode 100644 app/Http/Resources/RiceShrimpWeeklyPriceResource.php create mode 100644 app/Models/RiceShrimpWeeklyPrice.php create mode 100644 database/migrations/2023_05_15_164447_create_rice_shrimp_weekly_prices_table copy.php diff --git a/app/Http/Controllers/RiceShrimpWeeklyPriceController.php b/app/Http/Controllers/RiceShrimpWeeklyPriceController.php new file mode 100644 index 0000000..d38ba4e --- /dev/null +++ b/app/Http/Controllers/RiceShrimpWeeklyPriceController.php @@ -0,0 +1,115 @@ +filter($request->all()) + ->latest('id') + ->paginate(20); + + return RiceShrimpWeeklyPriceResource::collection($riceShrimpWeeklyPrices); + } + + /** + * 创建稻虾每周价格 + * + * @param \App\Http\Requestes\RiceShrimpWeeklyPriceStoreRequest $request + * @return \App\Http\Resources\RiceShrimpWeeklyPriceResource + * + * @throws \App\Exceptions\BizException + */ + public function store(RiceShrimpWeeklyPriceStoreRequest $request): RiceShrimpWeeklyPriceResource + { + $user = $request->user(); + + $riceShrimpWeeklyPrice = RiceShrimpWeeklyPrice::create( + array_merge( + $request->only(['year', 'quarter', 'price']), + [ + 'created_by' => $user->id, + 'updated_by' => $user->id, + ] + ) + ); + + $riceShrimpWeeklyPrice->setRelations([ + 'createdBy' => $user, + 'updatedBy' => $user, + ]); + + (new OperationLogService())->inLog(OperationType::Create, '', $riceShrimpWeeklyPrice, $request->input()); + + return RiceShrimpWeeklyPriceResource::make($riceShrimpWeeklyPrice); + } + + /** + * 修改稻虾每周价格 + * + * @param int $id + * @param \App\Http\Requestes\RiceShrimpWeeklyPriceUpdateRequest $request + * @return \App\Http\Resources\RiceShrimpWeeklyPriceResource + */ + public function update($id, RiceShrimpWeeklyPriceUpdateRequest $request): RiceShrimpWeeklyPriceResource + { + $riceShrimpWeeklyPrice = RiceShrimpWeeklyPrice::findOrFail($id); + + foreach ([ + 'year', + 'week', + 'price', + ] as $key) { + if ($request->filled($key)) { + $riceShrimpWeeklyPrice->{$key} = $request->input($key); + } + } + + if ($riceShrimpWeeklyPrice->isDirty()) { + $riceShrimpWeeklyPrice->updated_by = $request->user()->id; + } + + $riceShrimpWeeklyPrice->save(); + + (new OperationLogService())->inLog(OperationType::Update, '', $riceShrimpWeeklyPrice, $request->input()); + + return RiceShrimpWeeklyPriceResource::make( + $riceShrimpWeeklyPrice->loadMissing(['createdBy', 'updatedBy']) + ); + } + + /** + * 删除稻虾每周价格 + * + * @param int $id + * @return \Illuminate\Http\JsonResponse + */ + public function destroy($id): JsonResponse + { + $riceShrimpWeeklyPrice = RiceShrimpWeeklyPrice::findOrFail($id); + + $riceShrimpWeeklyPrice->delete(); + + (new OperationLogService())->inLog(OperationType::Delete, '', $riceShrimpWeeklyPrice); + + return response()->json(null); + } +} diff --git a/app/Http/Requestes/RiceShrimpWeeklyPriceStoreRequest.php b/app/Http/Requestes/RiceShrimpWeeklyPriceStoreRequest.php new file mode 100644 index 0000000..aefff22 --- /dev/null +++ b/app/Http/Requestes/RiceShrimpWeeklyPriceStoreRequest.php @@ -0,0 +1,32 @@ + ['required', 'int'], + 'week' => ['required', 'int'], + 'price' => ['required', 'int'], + ]; + } + + public function attributes() + { + return [ + 'year' => '年份', + 'week' => '周', + 'price' => '价格', + ]; + } +} diff --git a/app/Http/Requestes/RiceShrimpWeeklyPriceUpdateRequest.php b/app/Http/Requestes/RiceShrimpWeeklyPriceUpdateRequest.php new file mode 100644 index 0000000..1e19acc --- /dev/null +++ b/app/Http/Requestes/RiceShrimpWeeklyPriceUpdateRequest.php @@ -0,0 +1,31 @@ + ['filled', 'int'], + 'week' => ['filled', 'int'], + 'price' => ['filled', 'int'], + ]; + } + + public function attributes() + { + return [ + 'year' => '年份', + 'week' => '周', + 'price' => '价格', + ]; + } +} diff --git a/app/Http/Resources/RiceShrimpWeeklyPriceResource.php b/app/Http/Resources/RiceShrimpWeeklyPriceResource.php new file mode 100644 index 0000000..f395c5c --- /dev/null +++ b/app/Http/Resources/RiceShrimpWeeklyPriceResource.php @@ -0,0 +1,28 @@ + $this->id, + 'year' => $this->year, + 'week' => $this->week, + '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/Models/RiceShrimpWeeklyPrice.php b/app/Models/RiceShrimpWeeklyPrice.php new file mode 100644 index 0000000..4095511 --- /dev/null +++ b/app/Models/RiceShrimpWeeklyPrice.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/2023_05_15_164447_create_rice_shrimp_weekly_prices_table copy.php b/database/migrations/2023_05_15_164447_create_rice_shrimp_weekly_prices_table copy.php new file mode 100644 index 0000000..97d61e1 --- /dev/null +++ b/database/migrations/2023_05_15_164447_create_rice_shrimp_weekly_prices_table copy.php @@ -0,0 +1,36 @@ +id(); + $table->integer('year')->comment('年'); + $table->tinyInteger('week')->comment('第x周'); + $table->unsignedBigInteger('price')->comment('价格'); + $table->unsignedBigInteger('created_by')->comment('创建人ID'); + $table->unsignedBigInteger('updated_by')->comment('修改人ID'); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('rice_shrimp_weekly_prices'); + } +}; diff --git a/database/seeders/EndpointPermissionSeeder.php b/database/seeders/EndpointPermissionSeeder.php index 4c4dae3..fb6f696 100644 --- a/database/seeders/EndpointPermissionSeeder.php +++ b/database/seeders/EndpointPermissionSeeder.php @@ -38,6 +38,7 @@ class EndpointPermissionSeeder extends Seeder ]], 'industry_data' => ['name' => '重点产业', 'curd' => false, 'children' => [ 'rice_shrimp_prices' => ['name' => '稻虾价格', 'curd' => true], + 'rice_shrimp_weekly_prices' => ['name' => '稻虾每周价格', 'curd' => true], 'rice_shrimp_industries' => ['name' => '稻虾产业', 'curd' => true], 'rice_shrimp_flows' => ['name' => '稻虾走向', 'curd' => true], 'materiels' => ['name' => '大宗物资', 'curd' => true], diff --git a/database/seeders/KeywordsTableSeeder.php b/database/seeders/KeywordsTableSeeder.php index 90df696..02dbafe 100644 --- a/database/seeders/KeywordsTableSeeder.php +++ b/database/seeders/KeywordsTableSeeder.php @@ -34,6 +34,16 @@ class KeywordsTableSeeder extends Seeder ]], ]; + $list[] = value(function () { + $list = []; + + for ($i=1; $i <= 52; $i++) { + $list[] = ['key' => $i, 'name' => "第{$i}周", 'value' => '']; + } + + return ['key' => 'weeks-per-year', 'name' => '每年周数', 'value' => '', 'list' => $list]; + }); + if ($list) { $this->createKeywords($list); } diff --git a/routes/api.php b/routes/api.php index b34c768..82035ad 100644 --- a/routes/api.php +++ b/routes/api.php @@ -2,6 +2,7 @@ namespace App\Http\Controllers; +use App\Http\Controllers\RiceShrimpWeeklyPriceController; use Illuminate\Support\Facades\Route; /* @@ -32,7 +33,7 @@ Route::group(['middleware' => 'auth:sanctum'], function () { //全市基础数据 Route::get('citydata-statistics', [CityDataController::class, 'statistics'])->name('citydata_statistics.index'); Route::put('citydata-statistics-edit', [CityDataController::class, 'updateStatistics'])->name('citydata_statistics.edit'); - + //基地数据 Route::apiResource('agricultural-basic', AgriculturalBaseController::class)->names('agricultural_basic');//基地 Route::apiResource('town-street', AgriculturalBaseController::class)->names('town_street');//镇街 @@ -85,12 +86,14 @@ Route::group(['middleware' => 'auth:sanctum'], function () { // 重点产业 Route::apiResource('rice-shrimp-prices', RiceShrimpPriceController::class)->names('rice_shrimp_prices'); + Route::apiResource('rice-shrimp-weekly-prices', RiceShrimpWeeklyPriceController::class)->names('rice_shrimp_weekly_prices'); Route::apiResource('rice-shrimp-industries', RiceShrimpIndustryController::class)->names('rice_shrimp_industries'); Route::apiResource('rice-shrimp-flows', RiceShrimpFlowController::class)->names('rice_shrimp_flows'); Route::apiResource('materiels', MaterielController::class)->names('materiels'); // 重点产业报表 Route::get('charts/rice-shrimp-price', [ChartController::class, 'riceShrimpPrice'])->name('charts.rice_shrimp_price'); + Route::get('charts/rice-shrimp-weekly-price', [ChartController::class, 'riceShrimpWeeklyPrice'])->name('charts.rice_shrimp_weekly_price'); Route::get('charts/rice-shrimp-industry', [ChartController::class, 'riceShrimpIndustry'])->name('charts.rice_shrimp_industry'); Route::get('charts/rice-shrimp-flow', [ChartController::class, 'riceShrimpFlow'])->name('charts.rice_shrimp_flow'); Route::get('charts/materiel', [ChartController::class, 'materiel'])->name('charts.materiel');