From 8f3792077531c73979b80a080ba34e823ba61e50 Mon Sep 17 00:00:00 2001 From: vine_liutk <961510893@qq.com> Date: Mon, 17 Oct 2022 16:20:07 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=86=9C=E4=BA=A7=E5=93=81?= =?UTF-8?q?=E6=B5=81=E5=90=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Http/Controllers/CropFlowController.php | 58 +++++++++++++++++++ app/Http/Controllers/CropYieldController.php | 2 +- app/Http/Requestes/CropFlowRequest.php | 43 ++++++++++++++ app/Http/Requestes/CropFlowUpdateRequest.php | 40 +++++++++++++ .../Requestes/CropStructureUpdateRequest.php | 2 +- app/Http/Requestes/CropYieldUpdateRequest.php | 6 +- app/Http/Resources/CropFlowResource.php | 32 ++++++++++ app/ModelFilters/CropFlowFilter.php | 20 +++++++ app/Models/CropFlow.php | 34 +++++++++++ ..._10_17_111601_create_crop_yields_table.php | 6 +- ...2_10_17_145621_create_crop_flows_table.php | 36 ++++++++++++ routes/api.php | 2 + 12 files changed, 273 insertions(+), 8 deletions(-) create mode 100644 app/Http/Controllers/CropFlowController.php create mode 100644 app/Http/Requestes/CropFlowRequest.php create mode 100644 app/Http/Requestes/CropFlowUpdateRequest.php create mode 100644 app/Http/Resources/CropFlowResource.php create mode 100644 app/ModelFilters/CropFlowFilter.php create mode 100644 app/Models/CropFlow.php create mode 100644 database/migrations/2022_10_17_145621_create_crop_flows_table.php diff --git a/app/Http/Controllers/CropFlowController.php b/app/Http/Controllers/CropFlowController.php new file mode 100644 index 0000000..4d7d130 --- /dev/null +++ b/app/Http/Controllers/CropFlowController.php @@ -0,0 +1,58 @@ +input()); + $totalNum = $query->sum('sale');//总产量 + $list = $query->simplePaginate(Paginator::resolvePerPage('per_page', 20, 50)); + $list->load(['user']); + return $this->json([ + 'total' => $totalNum, + 'list' => CropFlowResource::collection($list), + ]); + } + + public function store(CropFlowRequest $request) + { + $flows = $request->input('flows'); + CropFlow::insert(array_map(function($item) use ($request){ + return array_merge($item, [ + 'time_year' => $request->input('time_year'), + 'crop_id' => $request->input('crop_id'), + 'user_id' => auth('api')->user()?->id ?? 0, + 'created_at' => now(), + 'updated_at' => now(), + ]); + }, $flows)); + return $this->success('添加成功'); + } + + public function show(CropFlow $cropFlow) + { + $cropFlow->load(['crop', 'user']); + return $this->json(CropFlowResource::make($cropFlow)); + } + + public function update(CropFlow $cropFlow, CropFlowUpdateRequest $request) + { + $cropFlow->update($request->input()); + return $this->success('修改成功'); + } + + public function destroy(CropFlow $cropFlow) + { + $cropFlow->delete(); + return $this->success('删除成功'); + } +} diff --git a/app/Http/Controllers/CropYieldController.php b/app/Http/Controllers/CropYieldController.php index 8b561b8..33981e8 100644 --- a/app/Http/Controllers/CropYieldController.php +++ b/app/Http/Controllers/CropYieldController.php @@ -16,7 +16,7 @@ class CropYieldController extends Controller $query = CropYield::filter($request->all()); $totalNum = $query->sum('yield');//总产量 $list = $query->simplePaginate(Paginator::resolvePerPage('per_page', 20, 50)); - $list->load(['base', 'crop', 'user']); + $list->load(['base', 'user']); return $this->json([ 'total' => $totalNum, 'list' => CropYieldResource::collection($list) diff --git a/app/Http/Requestes/CropFlowRequest.php b/app/Http/Requestes/CropFlowRequest.php new file mode 100644 index 0000000..2815d70 --- /dev/null +++ b/app/Http/Requestes/CropFlowRequest.php @@ -0,0 +1,43 @@ + 'required|date_format:Y', + 'crop_id' => 'required|integer|min:0', + 'flows' => 'required|array|min:1', + 'flows.*'=>'required_array_keys:flow_name,sale' + ]; + } + + public function messages() + { + $messages = [ + 'time_year' => '请选择年份', + 'crop_id' => '请选择农作物', + 'flows' => '请填写基地以及产值信息', + 'flows.*.required_array_keys' => '请填写完整基地以及产值信息', + ]; + + return $messages; + } + + protected function failedValidation(Validator $validator) + { + $error = $validator->errors()->all(); + throw new HttpResponseException(response()->json(['data' => [], 'code' => 400, 'message' => $error[0]])); + } +} diff --git a/app/Http/Requestes/CropFlowUpdateRequest.php b/app/Http/Requestes/CropFlowUpdateRequest.php new file mode 100644 index 0000000..262e0b6 --- /dev/null +++ b/app/Http/Requestes/CropFlowUpdateRequest.php @@ -0,0 +1,40 @@ + 'required|date_format:Y', + 'crop_id' => 'required|integer|min:0', + 'sale' => 'required|integer|min:1', + 'flow_name'=> 'required|string|max:100', + ]; + } + + public function messages() + { + $messages = [ + + ]; + + return $messages; + } + + protected function failedValidation(Validator $validator) + { + $error = $validator->errors()->all(); + throw new HttpResponseException(response()->json(['data' => [], 'code' => 400, 'message' => $error[0]])); + } +} diff --git a/app/Http/Requestes/CropStructureUpdateRequest.php b/app/Http/Requestes/CropStructureUpdateRequest.php index 1b134e2..c54d62e 100644 --- a/app/Http/Requestes/CropStructureUpdateRequest.php +++ b/app/Http/Requestes/CropStructureUpdateRequest.php @@ -18,7 +18,7 @@ class CropStructureUpdateRequest extends FormRequest return [ 'time_year' => 'required|date_format:Y', 'crops_cate_id' =>'required|integer|min:1', - 'crops_output' => 'required|integer|min:0' + 'crops_output' => 'required|regex:/^\d+(\.\d{1,2})?$/' ]; } diff --git a/app/Http/Requestes/CropYieldUpdateRequest.php b/app/Http/Requestes/CropYieldUpdateRequest.php index 49a4a91..b43e12f 100644 --- a/app/Http/Requestes/CropYieldUpdateRequest.php +++ b/app/Http/Requestes/CropYieldUpdateRequest.php @@ -19,9 +19,9 @@ class CropYieldUpdateRequest extends FormRequest 'time_year' => 'required|date_format:Y', 'crop_id' => 'required|integer|min:0', 'base_id' => 'required|integer|min:0', - 'yield' => 'required|integer|min:0', - 'cultivated'=> 'required|integer|min:0', - 'output' => 'required|integer|min:0' + 'yield' => 'required|regex:/^\d+(\.\d{1,2})?$/', + 'cultivated'=> 'required|regex:/^\d+(\.\d{1,2})?$/', + 'output' => 'required|regex:/^\d+(\.\d{1,2})?$/' ]; } diff --git a/app/Http/Resources/CropFlowResource.php b/app/Http/Resources/CropFlowResource.php new file mode 100644 index 0000000..d46c522 --- /dev/null +++ b/app/Http/Resources/CropFlowResource.php @@ -0,0 +1,32 @@ + $this->id, + 'flow_name' => $this->flow_name, + 'crop_name' => $this->whenLoaded('crop', function (){ + return $this->crop?->name; + }, ''), + 'crop_id' => $this->crop_id, + 'time_year' => $this->time_year, + 'sale' => $this->sale, + 'user' => $this->whenLoaded('user', function (){ + return $this->user?->name; + }, ''),//录入人 + 'created_at' => strtotime($this->created_at) ?? 0,//录入时间 + ]; + } +} diff --git a/app/ModelFilters/CropFlowFilter.php b/app/ModelFilters/CropFlowFilter.php new file mode 100644 index 0000000..5ea3713 --- /dev/null +++ b/app/ModelFilters/CropFlowFilter.php @@ -0,0 +1,20 @@ +where('time_year', $y); + } + + public function crop($cropId) + { + return $this->where('crop_id', $cropId); + } +} diff --git a/app/Models/CropFlow.php b/app/Models/CropFlow.php new file mode 100644 index 0000000..0360f78 --- /dev/null +++ b/app/Models/CropFlow.php @@ -0,0 +1,34 @@ +belongsTo(Keywords::class, 'crop_id'); + } + + /** + * 录入人 + * + * @return void + */ + public function user(){ + return $this->belongsTo(AdminUser::class, 'user_id'); + } +} diff --git a/database/migrations/2022_10_17_111601_create_crop_yields_table.php b/database/migrations/2022_10_17_111601_create_crop_yields_table.php index baf428d..2a8b3a1 100644 --- a/database/migrations/2022_10_17_111601_create_crop_yields_table.php +++ b/database/migrations/2022_10_17_111601_create_crop_yields_table.php @@ -18,9 +18,9 @@ return new class extends Migration $table->unsignedBigInteger('base_id')->comment('基地ID'); $table->unsignedBigInteger('crop_id')->comment('农产品ID'); $table->unsignedInteger('time_year')->comment('年份'); - $table->unsignedInteger('yield')->comment('产量'); - $table->unsignedInteger('cultivated')->comment('耕地面积'); - $table->unsignedInteger('output')->comment('产值'); + $table->unsignedDecimal('yield', 12, 2)->comment('产量(斤)'); + $table->unsignedDecimal('cultivated', 12, 2)->comment('耕地面积(亩)'); + $table->unsignedDecimal('output', 12, 2)->comment('产值(元)'); $table->unsignedBigInteger('user_id')->comment('录入人'); $table->timestamps(); diff --git a/database/migrations/2022_10_17_145621_create_crop_flows_table.php b/database/migrations/2022_10_17_145621_create_crop_flows_table.php new file mode 100644 index 0000000..9bbd1f2 --- /dev/null +++ b/database/migrations/2022_10_17_145621_create_crop_flows_table.php @@ -0,0 +1,36 @@ +id(); + $table->unsignedBigInteger('crop_id')->comment('农产品id'); + $table->string('flow_name')->comment('流向地'); + $table->unsignedInteger('time_year')->comment('年份'); + $table->unsignedDecimal('sale', 12, 2)->comment('销量(斤)'); + $table->unsignedBigInteger('user_id')->comment('录入人'); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('crop_flows'); + } +}; diff --git a/routes/api.php b/routes/api.php index c2c4cfe..4fe4800 100644 --- a/routes/api.php +++ b/routes/api.php @@ -32,6 +32,8 @@ Route::group(['middleware' => 'auth:sanctum'], function () { Route::apiResource('crop-structures', CropStructureController::class)->names('crops_build'); //产量 Route::apiResource('crop-yields', CropYieldController::class)->names('crops_output'); + //流向 + Route::apiResource('crop-flows', CropFlowController::class)->names('crops_flow'); /** 系统管理 **/ Route::apiResource('admin-users', AdminUserController::class)->names('admin_users');