添加监测数据统计接口
parent
fc92a35521
commit
7a574df4fc
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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']); //预警规则
|
||||
|
|
|
|||
Loading…
Reference in New Issue