Переглянути джерело

优化 添加任务-查询设备

guanhailong 3 роки тому
батько
коміт
a19b0d2822
1 змінених файлів з 37 додано та 41 видалено
  1. 37 41
      Controller/SensorGateway/SmartSceneController.py

+ 37 - 41
Controller/SensorGateway/SmartSceneController.py

@@ -48,8 +48,8 @@ class SmartSceneView(View):
         else:
             return response.json(414)
 
-    @staticmethod
-    def condition_devices(request_dict, response):
+    @classmethod
+    def condition_devices(cls, request_dict, response):
         """
         添加条件-查询设备
         @param request_dict: 请求参数
@@ -68,23 +68,8 @@ class SmartSceneView(View):
             gateway_sub_device_qs = GatewaySubDevice.objects.filter(device_id=device_id)
             if not gateway_sub_device_qs.exists():
                 return response.json(173)
-            gateway_sub_device_qs = gateway_sub_device_qs.annotate(gatewaySubId=F('id'), deviceType=F('device_type'),
-                                                                   deviceNickName=F('nickname')). \
-                values('gatewaySubId', 'deviceType', 'deviceNickName', 'status')
-            sub_device_list = []
-            for sub_device in gateway_sub_device_qs:
-                family_room_device_qs = FamilyRoomDevice.objects.filter(sub_device=sub_device['gatewaySubId']). \
-                    values('room_id')
-                if not family_room_device_qs.exists():
-                    sub_device['roomName'] = ''
-                else:
-                    room_id = family_room_device_qs[0]['room_id']
-                    try:
-                        sub_device['roomName'] = FamilyRoom.objects.get(id=room_id).name
-                    except ObjectDoesNotExist:
-                        sub_device['roomName'] = ''
-                sub_device_list.append(sub_device)
-            return response.json(0, sub_device_list)
+            res = cls.get_sub_device_room_name(gateway_sub_device_qs)
+            return response.json(0, res)
         except Exception as e:
             return response.json(500, repr(e))
 
@@ -110,41 +95,52 @@ class SmartSceneView(View):
                 sub_device_qs = GatewaySubDevice.objects.filter(id=sub_device_id).values('device_id', 'device_type')
                 device_id = sub_device_qs[0]['device_id']
                 device_type = sub_device_qs[0]['device_type']
+
                 if device_type != 216:
                     res = cls.get_gateway_data(device_id)
                 else:
-                    sub_device_list = []
                     gateway_data = cls.get_gateway_data(device_id)
-                    sub_device_list.append(gateway_data)
                     sub_device_qs = GatewaySubDevice.objects.filter(
                         Q(device_id=device_id) & Q(device_type=215) | Q(device_type=219)).values('id', 'nickname',
                                                                                                  'status',
                                                                                                  'device_type')
-                    sub_device_qs = sub_device_qs.annotate(gatewaySubId=F('id'),
-                                                                           deviceType=F('device_type'),
-                                                                           deviceNickName=F('nickname')). \
-                        values('gatewaySubId', 'deviceType', 'deviceNickName', 'status')
-                    for sub_device in sub_device_qs:
-                        sub_device_id = sub_device['gatewaySubId']
-                        room_qs = FamilyRoomDevice.objects.filter(sub_device=sub_device_id).values('room_id')
-                        room_qs.exists()
-                        room_qs = room_qs.first()
-                        room_id = room_qs['room_id']
-                        room_id_qs = FamilyRoom.objects.filter(id=room_id).values('name')
-                        room_name = room_id_qs.first()['name'] if room_id_qs.exists() else ''
-                        try:
-                            if sub_device_qs.exists():
-                                sub_device['roomName'] = FamilyRoom.objects.get(id=room_id).name
-                        except ObjectDoesNotExist:
-                            sub_device['roomName'] = room_name
-                            sub_device.pop('id')
-                        sub_device_list.append(sub_device)
-                    res = sub_device_list
+                    if not sub_device_qs.exists():
+                        return response.json(173)
+                    res = cls.get_sub_device_room_name(sub_device_qs, gateway_data)
 
             return response.json(0, res)
         except Exception as e:
             return response.json(500, repr(e))
 
+    @staticmethod
+    def get_sub_device_room_name(sub_device_qs, gateway_data=None):
+        """
+        获取房间名称
+        @param sub_device_qs: 子设备信息
+        @param gateway_data: 网关参数
+        @return: sub_device_list
+        """
+        sub_device_list = []
+        if gateway_data:
+            sub_device_list.append(gateway_data)
+        sub_device_qs = sub_device_qs.annotate(gatewaySubId=F('id'),
+                                               deviceType=F('device_type'),
+                                               deviceNickName=F('nickname')). \
+            values('gatewaySubId', 'deviceType', 'deviceNickName', 'status')
+        for sub_device in sub_device_qs:
+            family_room_device_qs = FamilyRoomDevice.objects.filter(sub_device=sub_device['gatewaySubId']). \
+                values('room_id')
+            if not family_room_device_qs.exists():
+                sub_device['roomName'] = ''
+            else:
+                room_id = family_room_device_qs[0]['room_id']
+                try:
+                    sub_device['roomName'] = FamilyRoom.objects.get(id=room_id).name
+                except ObjectDoesNotExist:
+                    sub_device['roomName'] = ''
+            sub_device_list.append(sub_device)
+        return sub_device_list
+
     @staticmethod
     def get_gateway_data(device_id):
         """