diff --git a/app/Http/Controllers/Api/MonitorModeController.php b/app/Http/Controllers/Api/MonitorModeController.php index 09730ea..948b362 100644 --- a/app/Http/Controllers/Api/MonitorModeController.php +++ b/app/Http/Controllers/Api/MonitorModeController.php @@ -6,6 +6,8 @@ use App\Filters\MonitorModeFilter; use App\Http\Controllers\Controller; use App\Http\Resources\DeviceResource; use App\Http\Resources\MonitorModeResource; +use App\Models\FarmWormPhoto; +use App\Http\Resources\FarmWormPhotoResource; use App\Models\MeteorologicalDailyReport; use App\Models\MonitorMode; use App\Services\Admin\DeviceService; @@ -29,7 +31,7 @@ class MonitorModeController extends Controller { $monitorId = $request->input('monitor_id'); $column = $request->input('column'); //指定字段 - //监控类型(气象,土壤为折线图数据;虫情数据待定;监控设备rtsp流;其他类型无数据) + //监控类型(气象,土壤为折线图数据;虫情数据柱状图;监控设备rtsp流;其他类型无数据) $data = []; $monitor = MonitorMode::find($monitorId); if($monitor){ @@ -76,4 +78,15 @@ class MonitorModeController extends Controller return $this->json($data); } + + public function getInsectPhoto(Request $request) + { + $monitorId = $request->input('monitor_id'); + $monitor = MonitorMode::find($monitorId); + $deviceIds = $monitor->devices()->get()->pluck('id')->toArray(); + $query = FarmWormPhoto::whereIn('device_id', $deviceIds)->orderBy('uploaded_at', 'desc'); + $list = $query->paginate($request->input('per_page')); + + return $this->json(FarmWormPhotoResource::collection($list)); + } } diff --git a/app/Http/Resources/FarmWormPhotoResource.php b/app/Http/Resources/FarmWormPhotoResource.php new file mode 100644 index 0000000..7ca7f67 --- /dev/null +++ b/app/Http/Resources/FarmWormPhotoResource.php @@ -0,0 +1,22 @@ + $this->url, + 'uploaded_at' => $this->uploaded_at->format('Y-m-d H:i:s'), + ]; + } +} diff --git a/app/Services/Admin/DeviceService.php b/app/Services/Admin/DeviceService.php index b08516f..6d08fb8 100644 --- a/app/Services/Admin/DeviceService.php +++ b/app/Services/Admin/DeviceService.php @@ -270,7 +270,14 @@ class DeviceService extends BaseService $fieldMap = []; foreach($monitorMode->devices as $device){ - $_fields = explode(',', $device->pivot->fields); + if($device->type == Device::TYPE_INSECT){ + $_fields = [ + 'worm_num' + ]; + $deviceIds[] = $device->id; + }else{ + $_fields = explode(',', $device->pivot->fields); + } if($diffDays) { $modelQuery = $dayliyReportQuery->whereBetween('reported_at', [$startTime, $endTime]); diff --git a/routes/api.php b/routes/api.php index f5e43cb..107a6ea 100644 --- a/routes/api.php +++ b/routes/api.php @@ -40,6 +40,7 @@ Route::group(['middleware' => 'auth:sanctum'], function () { Route::get('devices-notice', [DeviceController::class, 'deviceNotice'])->name('devices.notice'); Route::get('monitor-modes', [MonitorModeController::class, 'getMonitorMode'])->name('monitor_modes.list'); Route::get('monitor-modes/device-data', [MonitorModeController::class, 'getMonitorDeviceData'])->name('monitor_modes.device_data'); + Route::get('monitor-modes/farm-worm-photo', [MonitorModeController::class, 'getInsectPhoto'])->name('monitor_modes.farm_worm_photo'); Route::get('static/base-data', [SettingController::class, 'staticBaseData'])->name('static.base_data'); Route::get('static/rtsp-to-flv-host', [SettingController::class, 'rtspToFlvHost'])->name('static.rtsp_to_flv_host');