all(), MonitorModeFilter::class)->get();//有推荐,排序字段,不过目前没开放; return $this->json(MonitorModeResource::collection($monitors)); } /** * 获取监控点位数据-可指定字段 */ public function getMonitorDeviceData(Request $request) { $monitorId = $request->input('monitor_id'); $column = $request->input('column'); //指定字段 //监控类型(气象,土壤为折线图数据;虫情数据柱状图;监控设备rtsp流;其他类型无数据) $data = []; $monitor = MonitorMode::find($monitorId); if($monitor){ switch($monitor->type){ case MonitorMode::TYPE_MONITOR://监控视频 $data = DeviceResource::collection($monitor->devices); break; case MonitorMode::TYPE_SOIL://土壤设备--只拿最近6小时数据 $startTime = now()->subHours(6)->format('Y-m-d H:i:s'); $endTime = now()->format('Y-m-d H:i:s'); $data = (new DeviceService())->getMonitorModeDeviceData($monitor, $startTime, $endTime); if($column){ $data = $data[$column] ?? []; } break; case MonitorMode::TYPE_METEOROLOGICAL://气象设备--只拿最新的一个值 $fieldNameMap = MonitorMode::fieldMap(MonitorMode::TYPE_METEOROLOGICAL); $fieldUnitMap = MonitorMode::fieldUnitMap(MonitorMode::TYPE_METEOROLOGICAL); foreach($monitor->devices as $device){ $_fields = explode(',', $device->pivot->fields); $reportData = MeteorologicalDailyReport::where('device_id', $device->id)->orderBy('reported_at', 'desc')->first()?->toArray() ?? []; foreach($_fields as $field){ $data[$field] = [ 'name' => $fieldNameMap[$field], 'unit' => $fieldUnitMap[$field], 'value' => $reportData[$field] ?? 0, ]; if($field == 'wind_direction'){//单独处理风向 $formatData = ['北风','东北风','东风','东南风','南风','西南风','西风','西北风']; $data[$field]['value'] = $formatData[$reportData[$field]]??'未知'; } } } break; case MonitorMode::TYPE_INSECT://虫情设备 $startTime = now()->subDays(7)->startOfDay()->format('Y-m-d H:i:s'); $endTime = now()->subDays(1)->endOfDay()->format('Y-m-d H:i:s'); $data = (new DeviceService())->getMonitorModeDeviceData($monitor, $startTime, $endTime); break; default: break; } } 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)); } }