60 lines
1.7 KiB
PHP
60 lines
1.7 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);
|
|
}
|
|
|
|
/**
|
|
* 农机短信提醒-todo
|
|
*/
|
|
public function deviceNotice(){
|
|
return $this->success('操作成功');
|
|
}
|
|
}
|