filter($request->input()); $list = $query->simplePaginate(Paginator::resolvePerPage('per_page', 20, 50)); return $this->json(DeviceResource::collection($list)); } public function store(DeviceRequest $request) { $input = $request->input(); //如果不是监控设备,移除extends if ($input['type'] != DeviceType::Monitor->value) { unset($input['extends']); } Device::create(array_merge($input, [ 'created_by' => auth('api')->user()?->id ?? 0, 'updated_by' => auth('api')->user()?->id ?? 0, ])); return $this->success('添加成功'); } public function show(Device $device) { return $this->json(DeviceResource::make($device)); } public function update(Device $device, DeviceRequest $request) { $input = $request->input(); //如果不是监控设备,移除extends if ($input['type'] != DeviceType::Monitor->value) { $input['extends'] = null; } $device->update(array_merge($input, [ 'updated_by' => auth('api')->user()?->id ?? 0, ])); return $this->success('修改成功'); } public function destroy(Device $device) { $device->delete(); return $this->success('删除成功'); } public function types() { return $this->json(DeviceType::types()); } /** * 设备数据 */ public function dataStatics(Request $request) { $deviceId = $request->input('device_id'); $deviceColumn = $request->input('device_column');//指定字段 $device = Device::find($deviceId); $data = null; switch ($device->type){ case DeviceType::Monitor://监控设备 $data = DeviceResource::make($device); break; case DeviceType::Meteorological://气象设备 //当天最新一条 $log = MeteorologicalMonitoringLog::where('device_id', $deviceId)->orderBy('created_at', 'desc')->first(); $data = $log->toArray(); break; case DeviceType::Soil://土壤设备 //当天 $dataList = SoilMonitoringLog::where('device_id', $deviceId)->whereDate('monitored_at', now())->get()->keyBy('monitored_at')->toArray(); $data = []; for ($i = 0; $i < 24; $i++){ $_key = date('Y-m-d').' '.str_pad($i, 2, '0',STR_PAD_LEFT).':00:00'; $data[$_key] = 0; if(isset($dataList[$_key])){ $data[$_key] = $dataList[$_key][$deviceColumn] ?? 0; } } break; case DeviceType::WaterQuality://水质设备 //当天 $dataList = WaterQualityMonitoringLog::where('device_id', $deviceId)->whereDate('monitored_at', now())->get()->keyBy('monitored_at')->toArray(); $data = []; for ($i = 0; $i < 24; $i++){ $_key = date('Y-m-d').' '.str_pad($i, 2, '0',STR_PAD_LEFT).':00:00'; $data[$_key] = 0; if(isset($dataList[$_key])){ $data[$_key] = $dataList[$_key][$deviceColumn] ?? 0; } } break; } return $this->json([ 'list' => $data, ]); } }