diff --git a/app/Http/Controllers/DeviceController.php b/app/Http/Controllers/DeviceController.php index da3bbc5..3acc40f 100644 --- a/app/Http/Controllers/DeviceController.php +++ b/app/Http/Controllers/DeviceController.php @@ -2,12 +2,15 @@ namespace App\Http\Controllers; +use App\Models\Device; use App\Enums\DeviceType; use App\Helpers\Paginator; +use Illuminate\Http\Request; +use App\Models\SoilMonitoringLog; use App\Http\Requestes\DeviceRequest; use App\Http\Resources\DeviceResource; -use App\Models\Device; -use Illuminate\Http\Request; +use App\Models\WaterQualityMonitoringLog; +use App\Models\MeteorologicalMonitoringLog; class DeviceController extends Controller { @@ -64,4 +67,55 @@ class DeviceController extends Controller { 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, + ]); + } + } diff --git a/app/ModelFilters/AgriculturalBaseFilter.php b/app/ModelFilters/AgriculturalBaseFilter.php index a60e2a3..4b7ab63 100644 --- a/app/ModelFilters/AgriculturalBaseFilter.php +++ b/app/ModelFilters/AgriculturalBaseFilter.php @@ -10,4 +10,8 @@ class AgriculturalBaseFilter extends ModelFilter { return $this->where('type', $type); } + + public function parentId($parentId){ + return $this->where('parent_id', $parentId); + } } diff --git a/app/ModelFilters/DeviceFilter.php b/app/ModelFilters/DeviceFilter.php index 4cc67f1..5f37d55 100644 --- a/app/ModelFilters/DeviceFilter.php +++ b/app/ModelFilters/DeviceFilter.php @@ -20,4 +20,8 @@ class DeviceFilter extends ModelFilter { return $this->where('type', $type); } + + public function status($status){ + return $this->where('status', $status); + } } diff --git a/routes/api.php b/routes/api.php index 6e1662d..719e740 100644 --- a/routes/api.php +++ b/routes/api.php @@ -47,6 +47,8 @@ Route::group(['middleware' => 'auth:sanctum'], function () { Route::get('crop-yield-total-list', [CropYieldController::class, 'totalStaticsList']);//城镇统计产值 Route::get('crop-yield-total-chart', [CropYieldController::class, 'totalStaticsChart']);//城镇统计产值 + Route::get('device-data-statics', [DeviceController::class, 'dataStatics']); + /** 系统管理 **/ Route::apiResource('admin-users', AdminUserController::class)->names('admin_users'); Route::put('admin-users/{admin_user}/enable', [AdminUserController::class, 'endable'])->name('admin_users.enable');