Эх сурвалжийг харах

网关新增参数网关ID和子设备ID

peng 2 жил өмнө
parent
commit
bbbb6512f8

+ 52 - 29
Controller/SensorGateway/SmartSceneController.py

@@ -773,40 +773,59 @@ class SmartSceneView(View):
 
 
         if not all([family_id, page, size]):
         if not all([family_id, page, size]):
             return response.json(444, {'error param': 'familyId or page or size'})
             return response.json(444, {'error param': 'familyId or page or size'})
-        if not any([device_id, sub_device_id]):
-            return response.json(444, {'error param': 'deviceId and subDeviceId'})
-        if sub_device_id:
+
+        device_list = []
+        sub_device_list = []
+        if not device_id and not sub_device_id:
+            family_room_device_qs = FamilyRoomDevice.objects.filter(family_id=family_id)
+            family_device_qs = family_room_device_qs.values('device', 'sub_device')
+            for device in family_device_qs:
+                if device['device'] not in device_list:
+                    device_list.append(device['device'])
+                if device['sub_device']:
+                    sub_device_list.append(device['sub_device'])
+        elif sub_device_id:
             family_room_device_qs = FamilyRoomDevice.objects.filter(family_id=family_id, sub_device=sub_device_id)
             family_room_device_qs = FamilyRoomDevice.objects.filter(family_id=family_id, sub_device=sub_device_id)
+            sub_device_list.append(sub_device_id)
         else:
         else:
             family_room_device_qs = FamilyRoomDevice.objects.filter(family_id=family_id, device=device_id)
             family_room_device_qs = FamilyRoomDevice.objects.filter(family_id=family_id, device=device_id)
+            device_list.append(device_id)
         if not family_room_device_qs.exists():
         if not family_room_device_qs.exists():
             return response.json(173)
             return response.json(173)
-
         try:
         try:
             page, size = int(page), int(size)
             page, size = int(page), int(size)
-            if sub_device_id:
-                scene_log_qs = SceneLog.objects.filter(sub_device_id=sub_device_id)
-                device_qs = GatewaySubDevice.objects.filter(id=sub_device_id).values('device_type')
-            else:
-                scene_log_qs = SceneLog.objects.filter(device_id=device_id)
-                device_qs = Device_Info.objects.filter(id=device_id).values('Type')
+            scene_log_qs = SceneLog.objects.filter(Q(device_id__in=device_list) | Q(sub_device_id__in=sub_device_list))
+
             if start_time and end_time:
             if start_time and end_time:
                 scene_log_qs = scene_log_qs.filter(created_time__range=(start_time, end_time)).values(
                 scene_log_qs = scene_log_qs.filter(created_time__range=(start_time, end_time)).values(
                     'status',
                     'status',
                     'created_time',
                     'created_time',
+                    'device_id',
+                    'sub_device_id',
                     'scene_name',
                     'scene_name',
                     'tasks').order_by(
                     'tasks').order_by(
                     '-created_time')[(page - 1) * size:page * size]
                     '-created_time')[(page - 1) * size:page * size]
             else:
             else:
-                scene_log_qs = scene_log_qs.values('status', 'created_time', 'scene_name', 'tasks').order_by(
+                scene_log_qs = scene_log_qs.values('status', 'created_time', 'device_id', 'sub_device_id', 'scene_name',
+                                                   'tasks').order_by(
                     '-created_time')[(page - 1) * size:page * size]
                     '-created_time')[(page - 1) * size:page * size]
             if not scene_log_qs.exists():
             if not scene_log_qs.exists():
                 return response.json(0, [])
                 return response.json(0, [])
             for item in scene_log_qs:
             for item in scene_log_qs:
-                if sub_device_id:
-                    item['device_type'] = device_qs[0]['device_type']
+                if not device_id and not sub_device_id:
+                    if not item['sub_device_id']:
+                        device_qs = Device_Info.objects.filter(id=device_id).values('Type')
+                        item['device_type'] = device_qs[0]['Type'] if device_qs.exists() else ''
+                    else:
+                        device_qs = GatewaySubDevice.objects.filter(id=sub_device_id).values('device_type')
+                        item['device_type'] = device_qs[0]['device_type'] if device_qs.exists() else ''
+
+                elif sub_device_id:
+                    device_qs = GatewaySubDevice.objects.filter(id=sub_device_id).values('device_type')
+                    item['device_type'] = device_qs[0]['device_type'] if device_qs.exists() else ''
                 else:
                 else:
-                    item['device_type'] = device_qs[0]['Type']
+                    device_qs = Device_Info.objects.filter(id=device_id).values('Type')
+                    item['device_type'] = device_qs[0]['Type'] if device_qs.exists() else ''
                 item['tasks'] = eval(item['tasks'])
                 item['tasks'] = eval(item['tasks'])
             return response.json(0, list(scene_log_qs))
             return response.json(0, list(scene_log_qs))
         except Exception as e:
         except Exception as e:
@@ -828,28 +847,32 @@ class SmartSceneView(View):
         sub_device_id = request_dict.get('subDeviceId', None)
         sub_device_id = request_dict.get('subDeviceId', None)
         if not family_id:
         if not family_id:
             return response.json(444, {'error param': 'familyId'})
             return response.json(444, {'error param': 'familyId'})
-        if not any([device_id, sub_device_id]):
-            return response.json(444, {'error param': 'deviceId and subDeviceId'})
-        if sub_device_id:
+
+        device_list = []
+        sub_device_list = []
+        if not device_id and not sub_device_id:
+            family_room_device_qs = FamilyRoomDevice.objects.filter(family_id=family_id)
+            family_device_qs = family_room_device_qs.values('device', 'sub_device')
+            for device in family_device_qs:
+                if device['device'] not in device_list:
+                    device_list.append(device['device'])
+                if device['sub_device']:
+                    sub_device_list.append(device['sub_device'])
+        elif sub_device_id:
             family_room_device_qs = FamilyRoomDevice.objects.filter(family_id=family_id, sub_device=sub_device_id)
             family_room_device_qs = FamilyRoomDevice.objects.filter(family_id=family_id, sub_device=sub_device_id)
+            sub_device_list.append(sub_device_id)
         else:
         else:
             family_room_device_qs = FamilyRoomDevice.objects.filter(family_id=family_id, device=device_id)
             family_room_device_qs = FamilyRoomDevice.objects.filter(family_id=family_id, device=device_id)
+            device_list.append(device_id)
         if not family_room_device_qs.exists():
         if not family_room_device_qs.exists():
             return response.json(173)
             return response.json(173)
 
 
         try:
         try:
-            if sub_device_id:
-                scene_log_qs = SceneLog.objects.extra(
-                    select={'date': "FROM_UNIXTIME(created_time,'%%Y-%%m-%%d')"}).values('date'). \
-                                   filter(sub_device_id=sub_device_id). \
-                                   annotate(count=Count('created_time')). \
-                                   order_by('-date')[:31]
-            else:
-                scene_log_qs = SceneLog.objects.extra(
-                    select={'date': "FROM_UNIXTIME(created_time,'%%Y-%%m-%%d')"}).values('date'). \
-                                   filter(device_id=device_id). \
-                                   annotate(count=Count('created_time')). \
-                                   order_by('-date')[:31]
+            scene_log_qs = SceneLog.objects.extra(
+                select={'date': "FROM_UNIXTIME(created_time,'%%Y-%%m-%%d')"}).values('date'). \
+                               filter(Q(device_id__in=device_list) | Q(sub_device_id__in=sub_device_list)). \
+                               annotate(count=Count('created_time')). \
+                               order_by('-date')[:31]
             log_date_list = []
             log_date_list = []
             for scene_log in scene_log_qs:
             for scene_log in scene_log_qs:
                 log_date_list.append({
                 log_date_list.append({