From 7a574df4fcdf783a42895eb32a20b61224c7f10c Mon Sep 17 00:00:00 2001 From: vine_liutk <961510893@qq.com> Date: Wed, 9 Nov 2022 15:46:46 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E7=9B=91=E6=B5=8B=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E7=BB=9F=E8=AE=A1=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Http/Controllers/DeviceController.php | 98 +++++++++++++++++++++++ routes/api.php | 1 + 2 files changed, 99 insertions(+) diff --git a/app/Http/Controllers/DeviceController.php b/app/Http/Controllers/DeviceController.php index 80a40f0..2498734 100644 --- a/app/Http/Controllers/DeviceController.php +++ b/app/Http/Controllers/DeviceController.php @@ -9,10 +9,14 @@ use App\Http\Requestes\DeviceRequest; use App\Http\Resources\DeviceResource; use App\Models\Device; use App\Models\MeteorologicalMonitoringLog; +use App\Models\MeteorologicalMonitoringDailyLog; use App\Models\SoilMonitoringLog; +use App\Models\SoilMonitoringDailyLog; use App\Models\WaterQualityMonitoringLog; +use App\Models\WaterQualityMonitoringDailyLog; use Illuminate\Http\Request; use Illuminate\Support\Facades\DB; +use Carbon\Carbon; class DeviceController extends Controller { @@ -218,4 +222,98 @@ class DeviceController extends Controller return $this->json($data); } + + /** + * 查询设备今天(按天),近一周(按天),近一个月(按天) + */ + public function timeZoneList(Request $request){ + $deviceId = $request->input('device_id'); + //不传开始时间,结束时间,则默认是查当天(按小时) + $startTime = $request->input('start_time'); + $endTime = $request->input('end_time'); + $diffDays = 0; + //如果传了开始时间和结束时间,计算中间天数 + if($startTime && $endTime){ + $startDay = Carbon::parse($startTime); + $endDay = Carbon::parse($endTime); + $diffDays = $startDay->diffInDays($endDay, false); + } + + $xKeys = []; + if($diffDays){ + for ($i = 0; $i<=$diffDays; $i++) { + $xKeys[] =(clone $startDay)->addDays($i)->startOfDay()->format('Y-m-d H:i:s'); + } + }else{ + for ($i = 0; $i < 24; $i++) { + $xKeys[] = date('Y-m-d').' '.str_pad($i, 2, '0', STR_PAD_LEFT).':00:00'; + } + } + $device = Device::find($deviceId); + $dataList = null; + $getArr = []; + switch ($device->type) { + case DeviceType::Meteorological://气象设备 + $getArr = [ + 'wind_speed', + 'wind_direction', + 'wind_degree', + 'air_humidity', + 'air_temperature', + 'air_pressure', + 'co2', + 'noise', + 'illumination', + 'daily_rainfall', + 'pm25', + 'pm10', + ]; + if($diffDays) { + $modelQuery = MeteorologicalMonitoringDailyLog::query()->whereBetween('monitored_at', [$startTime, $endTime]); + }else{ + $modelQuery = MeteorologicalMonitoringLog::query()->whereDate('monitored_at', now()); + } + break; + case DeviceType::Soil://土壤设备 + $getArr = [ + 'conductivity', + 'humidity', + 'temperature', + 'n', + 'p', + 'k', + ]; + if($diffDays) { + $modelQuery = SoilMonitoringDailyLog::query()->whereBetween('monitored_at', [$startTime, $endTime]); + }else{ + $modelQuery = SoilMonitoringLog::query()->whereDate('monitored_at', now()); + } + break; + case DeviceType::WaterQuality://水质设备 + $getArr = [ + 'chlorine', + 'conductivity', + 'oxygen', + 'ph', + 'temperature', + 'turbidity', + ]; + if($diffDays) { + $modelQuery = WaterQualityMonitoringDailyLog::query()->whereBetween('monitored_at', [$startTime, $endTime]); + }else{ + $modelQuery = WaterQualityMonitoringLog::query()->whereDate('monitored_at', now()); + } + break; + } + if($modelQuery){ + $datalist = $modelQuery->where('device_id', $deviceId)->get()->keyBy('monitored_at')->toArray(); + } + foreach ($getArr as $column){ + $data[$column] = []; + foreach($xKeys as $key){ + $data[$column][$key] = $datalist[$key][$column] ?? null; + } + } + return $this->json($data); + } } diff --git a/routes/api.php b/routes/api.php index 63ca145..3afcb82 100644 --- a/routes/api.php +++ b/routes/api.php @@ -47,6 +47,7 @@ Route::group(['middleware' => 'auth:sanctum'], function () { //设备管理 Route::apiResource('devices', DeviceController::class)->names('device'); Route::get('devices-num', [DeviceController::class, 'typeStatusNum'])->name('device.type_status_num'); + Route::get('monitoring-data', [DeviceController::class, 'timeZoneList']); //设备警报配置 Route::get('device-warning-rules', [DeviceWarningController::class, 'rules']); //预警规则 Route::put('device-warning-rules', [DeviceWarningController::class, 'updateRule']); //预警规则