1
0
Fork 0
internet-everythings-agricu.../app/Http/Controllers/Api/DeviceController.php

53 lines
1.6 KiB
PHP

<?php
namespace App\Http\Controllers\Api;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use App\Models\{Device, MonitorDevice, RegionMonitor};
use DB;
class DeviceController extends Controller
{
/**
* 统计某个实验田下所有设备状态数量
*/
public function typeStateNum(Request $request)
{
$regionId = $request->input('region_id', 0);
$monitorId = $request->input('monitor_id', 0);
$query = Device::query();
if($monitorId){
$deviceIds = MonitorDevice::where('monitor_id', $monitorId)->pluck('id')->toArray();
$query->whereIn('id', $deviceIds);
}elseif($regionId){
$monitorIds = RegionMonitor::where('region_id', $regionId)->pluck('id')->toArray();
if(count($monitorIds) > 0){
$deviceIds = MonitorDevice::whereIn('monitor_id', $monitorIds)->pluck('id')->toArray();
$query->whereIn('id', $deviceIds);
}
}
$query->groupBy('type')->groupBy('state');
$list = $query->select(DB::raw('type, state, count(1) as num '))->get();
$resData = [];
foreach ($list as $item) {
$resData[$item->type][$item->state] = $item->num;
}
//初始化数据;
$data = [];
foreach (Device::typeMap() as $typeKey => $typeName) {
foreach (Device::stateMap() as $statusKey => $statusName) {
$data[$typeKey][$statusKey] = $resData[$typeKey][$statusKey] ?? 0;
}
}
return $this->json($data);
}
}