suyuan-breed/app/api/controller/dataview/DeviceController.php

131 lines
5.2 KiB
PHP
Raw Normal View History

2024-01-09 15:59:23 +08:00
<?php
namespace app\api\controller\dataview;
use app\api\controller\BaseApiController;
2024-02-19 13:45:28 +08:00
use app\common\logic\RemoteRequestLogic;
2024-01-09 15:59:23 +08:00
use app\common\model\device\Device;
use app\common\model\device\MonitorAlarm;
2024-02-04 15:25:26 +08:00
use app\common\model\farm\Farm;
use app\common\model\fence_house\FenceHouse;
2024-01-09 15:59:23 +08:00
use app\common\model\land\LandPlant;
2024-02-04 15:25:26 +08:00
use app\common\model\land\Product;
use app\common\model\product\ProductDevice;
2024-01-09 15:59:23 +08:00
use think\App;
use think\Exception;
use think\exception\ErrorException;
use think\exception\HttpResponseException;
use think\exception\ValidateException;
class DeviceController extends BaseApiController
{
2024-02-21 16:18:41 +08:00
public array $notNeedLogin = ['deviceAlarmCount', 'deviceCount', 'deviceDesc'];
2024-01-09 15:59:23 +08:00
public $areaCode;
public $streetCode;
public function initialize()
{
parent::initialize();
$this->areaCode = $this->request->param('areaCode', '');
$this->streetCode = $this->request->param('streetCode', '');
if ($this->areaCode == '') {
throw new ValidateException('未获取到位置信息');
}
}
// 设备告警统计
public function deviceAlarmCount()
{
2024-02-19 13:45:28 +08:00
$deviceList = Device::alias('d')->where(function ($query) {
if ($this->streetCode != '') {
$farmIds = Farm::where('street', $this->streetCode)->column('id');
$fenceHouseIds = FenceHouse::whereIn('farm_id', $farmIds)->column('id');
$productIds = Product::whereIn('fence_house_id', $fenceHouseIds)->column('id');
$deviceIds = ProductDevice::whereIn('product_id', $productIds)->column('device_id');
$query->whereIn('d.id', $deviceIds);
} else {
$farmIds = Farm::where('area', $this->areaCode)->column('id');
$fenceHouseIds = FenceHouse::whereIn('farm_id', $farmIds)->column('id');
$productIds = Product::whereIn('fence_house_id', $fenceHouseIds)->column('id');
$deviceIds = ProductDevice::whereIn('product_id', $productIds)->column('device_id');
$query->whereIn('d.id', $deviceIds);
}
})->select()->toArray();
// 请求mqtt接口
$list = RemoteRequestLogic::getAlarmData($deviceList);
2024-01-09 15:59:23 +08:00
return $this->success('成功', compact('list'));
}
// 监测设备数量统计
public function deviceCount()
{
2024-02-19 13:45:28 +08:00
$query = Device::alias('d')->where(function ($query) {
2024-01-09 15:59:23 +08:00
if ($this->streetCode != '') {
2024-02-04 15:25:26 +08:00
$farmIds = Farm::where('street', $this->streetCode)->column('id');
$fenceHouseIds = FenceHouse::whereIn('farm_id', $farmIds)->column('id');
$productIds = Product::whereIn('fence_house_id', $fenceHouseIds)->column('id');
$deviceIds = ProductDevice::whereIn('product_id', $productIds)->column('device_id');
$query->whereIn('d.id', $deviceIds);
2024-01-09 15:59:23 +08:00
} else {
2024-02-04 15:25:26 +08:00
$farmIds = Farm::where('area', $this->areaCode)->column('id');
$fenceHouseIds = FenceHouse::whereIn('farm_id', $farmIds)->column('id');
$productIds = Product::whereIn('fence_house_id', $fenceHouseIds)->column('id');
$deviceIds = ProductDevice::whereIn('product_id', $productIds)->column('device_id');
$query->whereIn('d.id', $deviceIds);
2024-01-09 15:59:23 +08:00
}
2024-02-19 13:45:28 +08:00
});
2024-02-21 11:11:16 +08:00
$deviceList = $query->select()->toArray();
2024-02-19 13:45:28 +08:00
$total = $query->count();
2024-02-04 15:25:26 +08:00
2024-02-19 13:45:28 +08:00
$online = $query->where('d.is_online', 1)->count();
$offline = $query->where('d.is_online', 2)->count();
2024-02-04 15:25:26 +08:00
2024-02-21 11:11:16 +08:00
2024-02-19 13:45:28 +08:00
// 请求mqtt
[$alarmCount,$todayAlarmCount] = RemoteRequestLogic::getAlarmCount($deviceList);
2024-01-09 15:59:23 +08:00
2024-02-04 15:25:26 +08:00
return $this->success('成功', compact('total', 'online', 'offline', 'alarmCount', 'todayAlarmCount'));
2024-01-09 15:59:23 +08:00
}
2024-02-21 16:18:41 +08:00
public function deviceDesc()
{
2024-02-21 17:31:01 +08:00
$data = [
[
2024-02-26 11:30:26 +08:00
'name'=>'项圈中转站',
2024-02-21 17:31:01 +08:00
'desc'=>'4G中转站设备',
'icon'=>'https://lihai001.oss-cn-chengdu.aliyuncs.com/def/15fc3202402211610238016.png'
],
[
'name'=>'噪音监测',
'desc'=>'噪音监测设备',
'icon'=>'https://lihai001.oss-cn-chengdu.aliyuncs.com/def/15fc3202402211610238016.png'
],
[
'name'=>'温湿度监测',
'desc'=>'温湿度监测设备',
'icon'=>'https://lihai001.oss-cn-chengdu.aliyuncs.com/def/15fc3202402211610238016.png'
],
[
'name'=>'烟雾监测',
'desc'=>'烟雾监测设备',
'icon'=>'https://lihai001.oss-cn-chengdu.aliyuncs.com/def/15fc3202402211610238016.png'
],
[
'name'=>'甲烷监测',
'desc'=>'甲烷监测设备',
'icon'=>'https://lihai001.oss-cn-chengdu.aliyuncs.com/def/15fc3202402211610238016.png'
],
[
'name'=>'氮气监测',
'desc'=>'氮气监测设备',
'icon'=>'https://lihai001.oss-cn-chengdu.aliyuncs.com/def/15fc3202402211610238016.png'
]
];
return $this->success('成功', $data);
2024-02-21 16:18:41 +08:00
}
2024-01-09 15:59:23 +08:00
}