cqpCow 1 yıl önce
ebeveyn
işleme
e073d079f3

+ 40 - 4
app/Service/DeviceService.php

@@ -109,6 +109,8 @@ class DeviceService extends Service
     }
 
     public function equipmentList($data){
+        $device_map = SystemlService::getLastData();
+
         $model = Device::where('del_time',0)
             ->select('*')
             ->orderBy('id','DESC');
@@ -128,14 +130,48 @@ class DeviceService extends Service
                 $model->whereNotIn('id',array_column($id,'device_id'));
             }
         }
+        if(isset($data['is_online'])){
+            $search = [];
+            foreach ($device_map as $device_no => $value){
+                if($data['is_online'] && ! empty($value)){
+                    $search[] = $device_no;
+                }elseif(! $data['is_online'] && empty($value)){
+                    $search[] = $device_no;
+                }
+            }
+            $model->whereIn('code',$search);
+        }
+        if(isset($data['is_exception'])){
+            $search = [];
+            foreach ($device_map as $device_no => $value){
+                if($data['is_exception'] && ! empty($value)){
+                    if(in_array($value['device_type_id'],DeviceType::$node_two)){
+                        //传感器类
+                        if(in_array($value['data_point_name'],DeviceType::$normal)) $search[] = $device_no;
+                    }else{
+                        $search[] = $device_no;
+                    }
+                }elseif(! $data['is_exception']){
+                    if(empty($value)){
+                        $search[] = $device_no;
+                    }else{
+                        if(in_array($value['device_type_id'],DeviceType::$node_two)){
+                            //传感器类
+                            if(in_array($value['data_point_name'],DeviceType::$abnormal)) $search[] = $device_no;
+                        }
+                    }
+                }
+            }
+            $model->whereIn('code',$search);
+        }
 
         $list = $this->limit($model,'',$data);
-        $list = $this->fillData($list);
+        $list = $this->fillData($list,$device_map);
 
         return [true,$list];
     }
 
-    public function fillData($data){
+    public function fillData($data,$device_map){
         if(empty($data['data'])) return $data;
         $gatewayMap = Gateway::whereIn('id',array_unique(array_column($data['data'],'gateway_id')))
             ->pluck('code','id')
@@ -144,12 +180,12 @@ class DeviceService extends Service
             ->pluck('title','id')
             ->toArray();
 
-        $message = SystemlService::getLastData(array_column($data['data'],'code'));
+        $message = $device_map;
         foreach ($data['data'] as $key => $value){
             $data['data'][$key]['gateway'] = $gatewayMap[$value['gateway_id']] ?? '';
             $data['data'][$key]['device_type'] = $deviceTypeMap[$value['device_type_id']] ?? '';
             $is_online = $is_exception = 0;
-            if(isset($message[$value['code']])){
+            if(! empty($message[$value['code']])){
                 $is_online = 1;
                 $tmp = $message[$value['code']];
                 if(in_array($value['device_type_id'],DeviceType::$node_two)){

+ 2 - 1
app/Service/ScreenService.php

@@ -212,7 +212,7 @@ class ScreenService extends Service
         $message = SystemlService::getLastData(array_column($data['data'],'code'));
         foreach ($data['data'] as $key => $value){
             $is_online = $is_exception = 0;
-            if(isset($message[$value['code']])){
+            if(! empty($message[$value['code']])){
                 $is_online = 1;
                 $tmp = $message[$value['code']];
                 if(in_array($value['device_type_id'],DeviceType::$node_two)){
@@ -582,6 +582,7 @@ class ScreenService extends Service
         foreach ($data as $key => $value){
             if(isset($map[$value['id']])){
                 foreach ($return as $code => $val){
+                    if(empty($val)) continue;
                     if(in_array($code,$map[$value['id']]) && isset($map2[$code])){
                         if(empty($data[$key]['temperature']) && $map2[$code] == DeviceType::type_one && strstr($val['data_point_name'],'温度')){
                             $data[$key]['temperature'] = $val['value'] . ($map3[$code] ?? '');

+ 16 - 6
app/Service/SystemlService.php

@@ -10,7 +10,17 @@ use App\Model\SystemL;
 class SystemlService extends Service
 {
     public static function getLastData($code = [], $min = -1){
-        if(empty($code)) return [];
+        if(empty($code)) {
+            $codes = Device::where('del_time',0)->select('code','device_type_id')->get()->toArray();
+            if(empty($codes)) return [];
+            $code = array_column($codes,'code');
+            $code_type_map = array_column($codes,'device_type_id','code');
+        }
+
+        $return = [];
+        foreach ($code as $value){
+            $return[$value] = [];
+        }
 
         $time = strtotime($min.' min',time());
         $time = $time * 1000;
@@ -21,15 +31,15 @@ class SystemlService extends Service
             ->orderBy('id','desc')
             ->get()->toArray();
 
-        $return = [];
         if(! empty($result)){
             foreach ($result as $value){
-                if(isset($return[$value['device_no']])) continue;
+                if(! empty($return[$value['device_no']])) continue;
                 //只取每个设备最新的一条数据
                 $return[$value['device_no']] = [
                     'data_point_name' => $value['data_point_name'],
                     'value' => $value['value']
                 ];
+                if(! empty($code_type_map[$value['device_no']])) $return[$value['device_no']]['device_type_id'] = $code_type_map[$value['device_no']];
             }
         }
 
@@ -100,7 +110,7 @@ class SystemlService extends Service
         //获取最新设备的数据
         $data = self::getLastData(array_column($screen,'code'));
         foreach ($data as $key => $value){
-            if(isset($screen_map[$key])){
+            if(isset($screen_map[$key]) && ! empty($value)){
                 $tmp = $screen_map[$key];
                 $tmp_coordinate = $tmp['coordinate'];
                 if(isset($result[$tmp['screen_id']]) && $tmp_coordinate){
@@ -167,7 +177,7 @@ class SystemlService extends Service
         //获取最新设备的数据
         $data = self::getLastData(array_column($screen,'code'));
         foreach ($data as $key => $value){
-            if(isset($screen_map[$key])){
+            if(isset($screen_map[$key]) && ! empty($value)){
                 $tmp = $screen_map[$key];
                 if(isset($result[$tmp['screen_id']]) && $value['value'] == 1){
                     $result[$tmp['screen_id']] = 1;
@@ -201,7 +211,7 @@ class SystemlService extends Service
         foreach ($gateway_connect_device as $gateway => $value){
             if(! empty($result[$gateway])) continue;
             foreach ($value as $code){
-                if(isset($data[$code])){
+                if(! empty($data[$code])){
                     $result[$gateway] = 1;
                 }
             }