From 15977d3d893a5b7f1d2c7bfeaad9a1c99f9d9802 Mon Sep 17 00:00:00 2001 From: chenbo <709206448@qq.com> Date: Sun, 4 Feb 2024 15:25:26 +0800 Subject: [PATCH] update --- .../controller/dataview/DeviceController.php | 80 ++++++++++++------- 1 file changed, 50 insertions(+), 30 deletions(-) diff --git a/app/api/controller/dataview/DeviceController.php b/app/api/controller/dataview/DeviceController.php index 661fce3..b532ad9 100644 --- a/app/api/controller/dataview/DeviceController.php +++ b/app/api/controller/dataview/DeviceController.php @@ -5,7 +5,11 @@ namespace app\api\controller\dataview; use app\api\controller\BaseApiController; use app\common\model\device\Device; use app\common\model\device\MonitorAlarm; +use app\common\model\farm\Farm; +use app\common\model\fence_house\FenceHouse; use app\common\model\land\LandPlant; +use app\common\model\land\Product; +use app\common\model\product\ProductDevice; use think\App; use think\Exception; use think\exception\ErrorException; @@ -59,43 +63,59 @@ class DeviceController extends BaseApiController // 监测设备数量统计 public function deviceCount() { - $total = Device::alias('d') - ->join('product_device pd', 'd.id=pd.device_id') - ->join('land_product lp', 'pd.product_id=lp.product_id') - ->join('land l', 'l.id=lp.land_id') - ->where(function ($query) { + $total = Device::alias('d')->where(function ($query) { if ($this->streetCode != '') { - $query->where('l.town_code', $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 { - $query->where('l.county_code', $this->areaCode); + $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); } }) ->count(); - $online = Device::alias('d') - ->join('product_device pd', 'd.id=pd.device_id') - ->join('land_product lp', 'pd.product_id=lp.product_id') - ->join('land l', 'l.id=lp.land_id') - ->where(function ($query) { - if ($this->streetCode != '') { - $query->where('l.town_code', $this->streetCode); - } else { - $query->where('l.county_code', $this->areaCode); - } - })->where('d.is_online', 1)->count(); - $offline = Device::alias('d') - ->join('product_device pd', 'd.id=pd.device_id') - ->join('land_product lp', 'pd.product_id=lp.product_id') - ->join('land l', 'l.id=lp.land_id') - ->where(function ($query) { - if ($this->streetCode != '') { - $query->where('l.town_code', $this->streetCode); - } else { - $query->where('l.county_code', $this->areaCode); - } - })->where('d.is_online', 2)->count(); + $online = 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); + } + })->where('d.is_online', 1)->count(); - return $this->success('成功', compact('total', 'online', 'offline')); + $offline = 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); + } + })->where('d.is_online', 2)->count(); + + $alarmCount = 0; + $todayAlarmCount = 0; + + return $this->success('成功', compact('total', 'online', 'offline', 'alarmCount', 'todayAlarmCount')); }