添加监测数据统计接口
parent
fc92a35521
commit
7a574df4fc
|
|
@ -9,10 +9,14 @@ use App\Http\Requestes\DeviceRequest;
|
||||||
use App\Http\Resources\DeviceResource;
|
use App\Http\Resources\DeviceResource;
|
||||||
use App\Models\Device;
|
use App\Models\Device;
|
||||||
use App\Models\MeteorologicalMonitoringLog;
|
use App\Models\MeteorologicalMonitoringLog;
|
||||||
|
use App\Models\MeteorologicalMonitoringDailyLog;
|
||||||
use App\Models\SoilMonitoringLog;
|
use App\Models\SoilMonitoringLog;
|
||||||
|
use App\Models\SoilMonitoringDailyLog;
|
||||||
use App\Models\WaterQualityMonitoringLog;
|
use App\Models\WaterQualityMonitoringLog;
|
||||||
|
use App\Models\WaterQualityMonitoringDailyLog;
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
use Illuminate\Support\Facades\DB;
|
use Illuminate\Support\Facades\DB;
|
||||||
|
use Carbon\Carbon;
|
||||||
|
|
||||||
class DeviceController extends Controller
|
class DeviceController extends Controller
|
||||||
{
|
{
|
||||||
|
|
@ -218,4 +222,98 @@ class DeviceController extends Controller
|
||||||
|
|
||||||
return $this->json($data);
|
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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -47,6 +47,7 @@ Route::group(['middleware' => 'auth:sanctum'], function () {
|
||||||
//设备管理
|
//设备管理
|
||||||
Route::apiResource('devices', DeviceController::class)->names('device');
|
Route::apiResource('devices', DeviceController::class)->names('device');
|
||||||
Route::get('devices-num', [DeviceController::class, 'typeStatusNum'])->name('device.type_status_num');
|
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::get('device-warning-rules', [DeviceWarningController::class, 'rules']); //预警规则
|
||||||
Route::put('device-warning-rules', [DeviceWarningController::class, 'updateRule']); //预警规则
|
Route::put('device-warning-rules', [DeviceWarningController::class, 'updateRule']); //预警规则
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue