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');