From e5b0a286a921d433742f9b432815300d0472ea18 Mon Sep 17 00:00:00 2001 From: vine_liutk <961510893@qq.com> Date: Tue, 25 Oct 2022 15:25:22 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E5=96=84=E9=9D=A2=E6=9D=BF=E9=83=A8?= =?UTF-8?q?=E5=88=86=E7=BB=9F=E8=AE=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Http/Controllers/CropController.php | 7 ++ app/Http/Controllers/CropYieldController.php | 108 +++++++++++++++--- .../Resources/AgriculturalBaseResource.php | 5 +- app/Models/AgriculturalBase.php | 8 +- app/Models/Crop.php | 1 + app/Models/CropYield.php | 3 +- ..._10_17_111601_create_crop_yields_table.php | 1 + routes/api.php | 8 +- 8 files changed, 118 insertions(+), 23 deletions(-) diff --git a/app/Http/Controllers/CropController.php b/app/Http/Controllers/CropController.php index b07712c..bd1f9ce 100644 --- a/app/Http/Controllers/CropController.php +++ b/app/Http/Controllers/CropController.php @@ -40,6 +40,7 @@ class CropController extends Controller { //如果原本是结点,不允许修改为非节点 //如果原本非结点,且有子节点,同样无法修改; + $input = $request->input(); if ($input['is_end'] != $crop->is_end) { if ($crop->is_end || Crop::where(['parent_id', $crop->id])->exists()) { @@ -47,6 +48,12 @@ class CropController extends Controller } } + //如果有上级,录入path + if ($input['parent_id'] ?? 0) { + $parent = Crop::findOrFail($input['parent_id']); + $input['path'] = ($parent?->path ?? '').$parent?->id.'-'; + } + $crop->update(array_merge($request->input())); return $this->success('修改成功'); diff --git a/app/Http/Controllers/CropYieldController.php b/app/Http/Controllers/CropYieldController.php index a7e9982..db46418 100644 --- a/app/Http/Controllers/CropYieldController.php +++ b/app/Http/Controllers/CropYieldController.php @@ -6,7 +6,9 @@ use App\Models\Crop; use App\Models\CropYield; use App\Helpers\Paginator; use Illuminate\Http\Request; +use App\Models\AgriculturalBase; use Illuminate\Support\Facades\DB; +use Peidikeji\Keywords\Models\Keywords; use App\Http\Requestes\CropYieldRequest; use App\Http\Resources\CropYieldResource; use App\Http\Requestes\CropYieldUpdateRequest; @@ -41,7 +43,11 @@ class CropYieldController extends Controller ])->exists()){ return $this->error('该数据已存在,无法添加,请修改'); } + + $crop = Crop::find($cropId); + CropYield::create(array_merge($request->input(), [ + 'category_id'=> $crop->category_id ?? 0, 'created_by' => auth('api')->user()?->id ?? 0, 'updated_by' => auth('api')->user()?->id ?? 0, ])); @@ -70,7 +76,11 @@ class CropYieldController extends Controller ])->where('id', '<>', $cropYield->id)->exists()){ return $this->error('该数据已存在,无法添加,请修改'); } + + $crop = Crop::find($cropId); + $cropYield->update(array_merge($request->input(), [ + 'category_id'=> $crop->category_id ?? 0, 'updated_by' => auth('api')->user()?->id ?? 0, ])); @@ -182,40 +192,104 @@ class CropYieldController extends Controller /** * 行业产值统计,查询某年,可选镇(饼状图) - * --todo + * */ - public function categoryStaticsChart(){ + public function categoryStaticsChart(Request $request){ + $baseId = $request->input('base_id');//镇 + $year = $request->input('year', date('Y'));//年份 + + $q = CropYield::query(); + $q->where('time_year', $year); + if($baseId){ + $q->where('base_id', $baseId); + } + $q->groupBy('category_id'); + $totalData = $q->select(DB::raw("category_id, sum(output) as output_total ")) + ->get() + ->keyBy('category_id')->toArray(); + + $categories = Keywords::filter($request->all())->where('type_key', 'crops-category')->get(); + + $data = []; + foreach ($categories as $category){ + $data[$category->name] = 0; + if(isset($totalData[$category->id])){ + $data[$category->name] = $totalData[$category->id]['output_total']; + } + } + return $this->json([ - '农业'=> 100, - '林业'=> 100, - '渔业'=> 100, - '畜牧业'=> 100, - '农林渔牧活动' => 200 + 'list' =>$data ]); } /** * 总产值,查询年折线图(当年往前查4年),可选镇 - * --todo + * */ - public function totalStaticsChart(){ + public function totalStaticsChart(Request $request){ + $baseId = $request->input('base_id');//镇 + $nowYear = date('Y'); + + $q = CropYield::query(); + if($baseId){ + $q->where('base_id', $baseId); + } + $q->where('time_year', '>=', $nowYear-3); + + $q->groupBy('time_year'); + $totalData = $q->select(DB::raw("time_year, sum(output) as output_total ")) + ->get() + ->keyBy('time_year')->toArray(); + + + $data = []; + for($i = 0; $i < 4; $i++){ + $_year = $nowYear-$i; + $data[$_year] = 0; + if(isset($totalData[$_year])){ + $data[$_year] = $totalData[$_year]['output_total']; + } + } + return $this->json([ - '2018'=>0, - '2019'=>0, - '2020'=>0, - '2021'=>0, - '2022'=>0, + 'list' => $data, ]); } /** * 查询镇,行业产值列表(可选年,行业) - * --todo + * * @return void */ - public function totalStaticsList(){ - return $this->json([ + public function totalStaticsList(Request $request){ + $year = $request->input('year', date('Y'));//年份 + $categoryId = $request->input('category_id');//行业ID + $q = CropYield::query(); + $q->where('time_year', $year); + if($categoryId){ + $q->where('category_id', $categoryId); + } + $q->groupBy('base_id'); + $totalData = $q->select(DB::raw("base_id, sum(output) as output_total ")) + ->get() + ->keyBy('base_id')->toArray(); + + $bases = AgriculturalBase::town()->get(); + + $data = []; + + foreach ($bases as $base){ + $data[$base->name] = 0; + if(isset($totalData[$base->id])){ + $data[$base->name] = $totalData[$base->id]['output_total']; + } + } + arsort($data); + + return $this->json([ + 'list' => $data, ]); } } diff --git a/app/Http/Resources/AgriculturalBaseResource.php b/app/Http/Resources/AgriculturalBaseResource.php index 4e2726e..d50d3dc 100644 --- a/app/Http/Resources/AgriculturalBaseResource.php +++ b/app/Http/Resources/AgriculturalBaseResource.php @@ -22,8 +22,9 @@ class AgriculturalBaseResource extends JsonResource 'address_lng' => $this->address_lng ?? '', 'description' => $this->description ?? '', 'map' => $this->map ?? '', - 'areas' => ($this->areas ?? 0.00).' 亩', - 'workforce' => $this->workforce ?? 0, + 'areas' => ($this->areas ?? 0.00).' 亩',//占地面积 + 'workforce' => $this->workforce ?? 0,//人数 + 'cultivated' =>$this->cultivated ?? 0, ]; } } diff --git a/app/Models/AgriculturalBase.php b/app/Models/AgriculturalBase.php index 7ef46dc..16a1535 100644 --- a/app/Models/AgriculturalBase.php +++ b/app/Models/AgriculturalBase.php @@ -19,7 +19,7 @@ class AgriculturalBase extends Model 'type', 'name', 'person', 'address', 'address_lat', 'address_lng', 'description', 'map', 'areas', 'workforce', - 'parent_id', + 'parent_id','cultivated', ]; public function scopeBase($q) @@ -39,6 +39,10 @@ class AgriculturalBase extends Model public function crops() { - return $this->belongsToMany(Keywords::class, 'base_crops', 'base_id', 'crop_id'); + return $this->belongsToMany(Crop::class, 'base_crops', 'base_id', 'crop_id'); + } + + public function yieldLogs(){ + return $this->hasMany(CropYield::class, 'base_id'); } } diff --git a/app/Models/Crop.php b/app/Models/Crop.php index 50118e2..0634b28 100644 --- a/app/Models/Crop.php +++ b/app/Models/Crop.php @@ -17,6 +17,7 @@ class Crop extends Model protected $fillable = [ 'category_id', 'name', 'parent_id', + 'unit', 'path', 'is_end', 'sort', 'extends', diff --git a/app/Models/CropYield.php b/app/Models/CropYield.php index 5ad98d2..0a2562c 100644 --- a/app/Models/CropYield.php +++ b/app/Models/CropYield.php @@ -16,7 +16,8 @@ class CropYield extends Model protected $fillable = [ 'base_id', 'crop_id', 'time_year', 'yield', 'cultivated', 'output', 'user_id', 'created_by', 'updated_by', - 'quarter', 'extends' + 'quarter', 'extends', + 'category_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 b5a37df..ce4e3ad 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 @@ -16,6 +16,7 @@ return new class extends Migration Schema::create('crop_yields', function (Blueprint $table) { $table->id(); $table->unsignedBigInteger('base_id')->comment('地区ID'); + $table->unsignedBigInteger('category_id')->comment('农产品行业ID'); $table->unsignedBigInteger('crop_id')->comment('农产品ID'); $table->unsignedInteger('time_year')->comment('年份'); $table->unsignedInteger('quarter')->nullable()->comment('季度'); diff --git a/routes/api.php b/routes/api.php index 69417c7..6e1662d 100644 --- a/routes/api.php +++ b/routes/api.php @@ -35,12 +35,18 @@ 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::get('crop-yield-quarter-statics', [CropYieldController::class, 'quarterStaticsChart']);//季度统计 + //流向 Route::apiResource('crop-flows', CropFlowController::class)->names('crops_flow'); //设备管理 Route::apiResource('devices', DeviceController::class)->names('device'); + /**统计 **/ + Route::get('crop-yield-quarter-statics', [CropYieldController::class, 'quarterStaticsChart']);//季度统计 + Route::get('crop-yield-category-statics', [CropYieldController::class, 'categoryStaticsChart']);//行业统计产值 + Route::get('crop-yield-total-list', [CropYieldController::class, 'totalStaticsList']);//城镇统计产值 + Route::get('crop-yield-total-chart', [CropYieldController::class, 'totalStaticsChart']);//城镇统计产值 + /** 系统管理 **/ Route::apiResource('admin-users', AdminUserController::class)->names('admin_users'); Route::put('admin-users/{admin_user}/enable', [AdminUserController::class, 'endable'])->name('admin_users.enable');