From f36589860177a17edc90030db96f26a848404310 Mon Sep 17 00:00:00 2001 From: Jing Li Date: Tue, 29 Aug 2023 20:03:45 +0800 Subject: [PATCH] =?UTF-8?q?=E8=99=AB=E6=83=85=E7=BB=9F=E8=AE=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Http/Controllers/DeviceController.php | 38 +++++++++++++++++++ app/Models/WormPhoto.php | 19 ++++++++++ ..._08_25_144027_create_worm_photos_table.php | 34 +++++++++++++++++ routes/api.php | 1 + 4 files changed, 92 insertions(+) create mode 100644 app/Models/WormPhoto.php create mode 100644 database/migrations/2023_08_25_144027_create_worm_photos_table.php diff --git a/app/Http/Controllers/DeviceController.php b/app/Http/Controllers/DeviceController.php index b3e8ee8..4a070c8 100644 --- a/app/Http/Controllers/DeviceController.php +++ b/app/Http/Controllers/DeviceController.php @@ -18,6 +18,7 @@ use App\Models\SoilMonitoringDailyLog; use App\Models\SoilMonitoringLog; use App\Models\WaterQualityMonitoringDailyLog; use App\Models\WaterQualityMonitoringLog; +use App\Models\WormReport; use App\Services\BiAngDeviceService; use App\Services\OperationLogService; use Illuminate\Http\Request; @@ -637,6 +638,43 @@ class DeviceController extends Controller return $this->json($data); } + /** + * 虫情统计 + */ + public function wormStatics($id, Request $request) + { + $request->validate([ + 'start_time' => ['bail', 'required', 'date_format:Y-m-d'], + 'end_time' => ['bail', 'required', 'date_format:Y-m-d'], + ]); + + $startAt = Carbon::parse($request->input('start_time')); + + $endAt = Carbon::parse($request->input('end_time')); + + if ($startAt->gt($endAt)) { + throw ValidationException::withMessages([ + 'start_time' => ['开始时间不能大于结束时间'], + ]); + } + + $device = Device::findOrFail($id); + + $wormReports = WormReport::where('device_id', $device->id) + ->whereBetween('reported_at', [$startAt->toDateString(), $endAt->toDateString()]) + ->pluck('worm_num', 'reported_at'); + + $data = []; + + do { + $key = $startAt->toDateString(); + $data[$key] = $wormReports->get($key); + $startAt->addDay(); + } while ($startAt->lte($endAt)); + + return $this->json($data); + } + /** * 虫情图片 */ diff --git a/app/Models/WormPhoto.php b/app/Models/WormPhoto.php new file mode 100644 index 0000000..2499bd8 --- /dev/null +++ b/app/Models/WormPhoto.php @@ -0,0 +1,19 @@ + 'datetime', + ]; + + protected $fillable = [ + 'device_id', 'url', 'uploaded_at', + ]; +} diff --git a/database/migrations/2023_08_25_144027_create_worm_photos_table.php b/database/migrations/2023_08_25_144027_create_worm_photos_table.php new file mode 100644 index 0000000..dcc0635 --- /dev/null +++ b/database/migrations/2023_08_25_144027_create_worm_photos_table.php @@ -0,0 +1,34 @@ +id(); + $table->unsignedBigInteger('device_id'); + $table->text('url')->nullable(); + $table->timestamp('uploaded_at')->comment('上传时间'); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('worm_photos'); + } +}; diff --git a/routes/api.php b/routes/api.php index 809b615..cde88fb 100644 --- a/routes/api.php +++ b/routes/api.php @@ -56,6 +56,7 @@ Route::group([ Route::apiResource('crop-flows', CropFlowController::class)->names('crops_flow'); //设备管理 Route::apiResource('devices', DeviceController::class)->names('device'); + Route::get('devices/{device}/worm-statics', [DeviceController::class, 'wormStatics']); Route::get('devices/{device}/worm-photos', [DeviceController::class, 'wormPhotos']); Route::put('devices-update-recommend/{device}', [DeviceController::class, 'updateRecommendStatus']); Route::get('devices-num', [DeviceController::class, 'typeStatusNum'])->name('device.type_status_num');