From 644b37da280a75e2f42bd0e1cee2c0dc8e269b0b Mon Sep 17 00:00:00 2001 From: Jing Li Date: Tue, 29 Aug 2023 20:48:37 +0800 Subject: [PATCH] Update --- .../Commands/BiAng/DeviceLogSyncCommand.php | 10 +++ app/Http/Controllers/DeviceController.php | 72 +++++++++++++++---- ..._08_25_144027_create_worm_photos_table.php | 2 + 3 files changed, 72 insertions(+), 12 deletions(-) diff --git a/app/Console/Commands/BiAng/DeviceLogSyncCommand.php b/app/Console/Commands/BiAng/DeviceLogSyncCommand.php index 75fb623..0e1074a 100644 --- a/app/Console/Commands/BiAng/DeviceLogSyncCommand.php +++ b/app/Console/Commands/BiAng/DeviceLogSyncCommand.php @@ -8,6 +8,7 @@ use App\Iot\BiAng\HttpClient; use App\Models\Device; use App\Models\DeviceLog; use App\Models\InsecticidalLampReport; +use App\Models\WormPhoto; use Illuminate\Console\Command; use Illuminate\Support\Arr; use RuntimeException; @@ -136,6 +137,15 @@ class DeviceLogSyncCommand extends Command case DeviceType::InsectSexLure: $data = $httpClient->getWormPhotos($device->sn, $now->copy()->subHours(24), $now); + foreach ($data['imgUrl'] as $item) { + WormPhoto::firstOrCreate([ + 'device_id' => $device->id, + 'uploaded_at' => $item['time'], + ], [ + 'url' => $item['url'], + ]); + } + $device->update([ 'status' => count($data['imgUrl'] ?? []) > 0 ? DeviceStatus::Online : DeviceStatus::Offline, ]); diff --git a/app/Http/Controllers/DeviceController.php b/app/Http/Controllers/DeviceController.php index 4a070c8..ee54770 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\WormPhoto; use App\Models\WormReport; use App\Services\BiAngDeviceService; use App\Services\OperationLogService; @@ -644,15 +645,27 @@ class DeviceController extends Controller 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'], + 'start_time' => ['bail', 'required_with:end_time', 'date_format:Y-m-d'], + 'end_time' => ['bail', 'required_with:start_time', 'date_format:Y-m-d'], + ], [], [ + 'start_time' => '开始时间', + 'end_time' => '结束时间', ]); - $startAt = Carbon::parse($request->input('start_time')); + // 结束时间 + $endTime = $request->whenFilled( + 'end_time', + fn ($time) => Carbon::parse($time)->startOfDay(), + fn () => now()->startOfDay(), + ); + // 开始时间 + $startTime = $request->whenFilled( + 'start_time', + fn ($time) => Carbon::parse($time)->startOfDay(), + fn () => $endTime->copy()->subDays(6), + ); - $endAt = Carbon::parse($request->input('end_time')); - - if ($startAt->gt($endAt)) { + if ($startTime->gt($endTime)) { throw ValidationException::withMessages([ 'start_time' => ['开始时间不能大于结束时间'], ]); @@ -661,16 +674,16 @@ class DeviceController extends Controller $device = Device::findOrFail($id); $wormReports = WormReport::where('device_id', $device->id) - ->whereBetween('reported_at', [$startAt->toDateString(), $endAt->toDateString()]) + ->whereBetween('reported_at', [$startTime->toDateString(), $endTime->toDateString()]) ->pluck('worm_num', 'reported_at'); $data = []; do { - $key = $startAt->toDateString(); + $key = $startTime->toDateString(); $data[$key] = $wormReports->get($key); - $startAt->addDay(); - } while ($startAt->lte($endAt)); + $startTime->addDay(); + } while ($startTime->lte($endTime)); return $this->json($data); } @@ -681,10 +694,32 @@ class DeviceController extends Controller public function wormPhotos($id, Request $request, BiAngDeviceService $biAngDeviceService) { $request->validate([ - 'start_time' => ['bail', 'required', 'date_format:Y-m-d'], - 'end_time' => ['bail', 'required', 'date_format:Y-m-d'], + 'start_time' => ['bail', 'required_with:end_time', 'date_format:Y-m-d'], + 'end_time' => ['bail', 'required_with:start_time', 'date_format:Y-m-d'], + ], [], [ + 'start_time' => '开始时间', + 'end_time' => '结束时间', ]); + // 结束时间 + $endTime = $request->whenFilled( + 'end_time', + fn ($time) => Carbon::parse($time)->endOfDay(), + fn () => now()->endOfDay(), + ); + // 开始时间 + $startTime = $request->whenFilled( + 'start_time', + fn ($time) => Carbon::parse($time)->startOfDay(), + fn () => $endTime->copy()->startOfDay(), + ); + + if ($startTime->gt($endTime)) { + throw ValidationException::withMessages([ + 'start_time' => ['开始时间不能大于结束时间'], + ]); + } + $device = Device::findOrFail($id); $data = []; @@ -698,6 +733,19 @@ class DeviceController extends Controller ); $data = $result['imgUrl']; break; + + default: + $wormPhotos = WormPhoto::where('device_id', $device->id) + ->whereBetween('uploaded_at', [$startTime, $endTime]) + ->latest('uploaded_at') + ->get(); + + $data = $wormPhotos->map(fn ($item) => [ + 'id' => $item->id, + 'url' => $item->url, + 'time' => $item->created_at->toDateTimeString(), + ]); + break; } return $this->json($data); 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 index dcc0635..56812b5 100644 --- a/database/migrations/2023_08_25_144027_create_worm_photos_table.php +++ b/database/migrations/2023_08_25_144027_create_worm_photos_table.php @@ -19,6 +19,8 @@ return new class extends Migration $table->text('url')->nullable(); $table->timestamp('uploaded_at')->comment('上传时间'); $table->timestamps(); + + $table->index('uploaded_at'); }); }