Browse Source

房间列表增加放回当前家庭所有设备,房间设备详情分组查询

zhangdongming 3 years ago
parent
commit
804f0bdef7

+ 7 - 10
SensorGateway/EquipmentFamilyController.py

@@ -12,7 +12,7 @@ import time
 import oss2
 from django.db import connection
 from django.db import transaction
-from django.db.models import Q
+from django.db.models import Q, Count
 from django.views.generic.base import View
 
 from Ansjer.config import OSS_STS_ACCESS_SECRET, OSS_STS_ACCESS_KEY
@@ -274,7 +274,7 @@ class EquipmentFamilyView(View):
             sql += ' AND l.room_id != %s '
         elif room_id:
             sql += ' AND l.room_id = %s '
-        sql += ' order by d.data_joined DESC,d.id DESC LIMIT %s,%s '
+        sql += ' GROUP BY d.id order by d.data_joined DESC,d.id DESC LIMIT %s,%s '
         if family_id and room_id:
             cursor.execute(sql, [user_id, 2, int(family_id), int(room_id), ((page_no - 1) * page_size),
                                  page_size, ])
@@ -687,22 +687,19 @@ class EquipmentFamilyView(View):
         family_id = request_dict.get('familyId', None)
         if not family_id:
             return response.json(444)
-        page_no = request_dict.get('pageNo', None)
-        page_size = request_dict.get('pageSize', None)
-        if not all([page_no, page_size]):
-            return response.json(444)
-        page_no = int(page_no)
-        page_size = int(page_size)
+        count = FamilyRoomDevice.objects.filter(family_id=family_id).values('device_id').annotate(
+            count=Count('device_id')).count()
+
         room_qs = FamilyRoom.objects.filter(family_id=family_id).order_by('sort')
         total = room_qs.count()
-        room_qs = room_qs.values('id', 'name', 'sort')[(page_no - 1) * page_size: page_no * page_size]
+        room_qs = room_qs.values('id', 'name', 'sort')
         room_list = []
         if not room_qs.exists():
             return response.json(0, room_list)
         for item in room_qs:
             item['deviceCount'] = FamilyRoomDevice.objects.filter(family_id=family_id, room_id=item['id']).count()
             room_list.append(item)
-        return response.json(0, {'total': total, 'data': room_list})
+        return response.json(0, {'total': total, 'data': room_list, 'deviceTotal': count})
 
     @classmethod
     def room_save(cls, request_dict, response):

+ 13 - 2
SensorGateway/GatewayFamilyRoomController.py

@@ -8,6 +8,7 @@
 """
 
 from django.db import transaction
+from django.db.models import Q, Count
 from django.views.generic.base import View
 
 from Model.models import FamilyRoomDevice, FamilyRoom
@@ -138,7 +139,8 @@ class GatewayFamilyRoomView(View):
         page_size = request_dict.get('pageSize', None)
         if not all([family_id, room_id, page_no, page_size]):
             return response.json(444)
-        room_count = FamilyRoomDevice.objects.filter(family_id=int(family_id), room_id=int(room_id)).count()
+        room_count = FamilyRoomDevice.objects.filter(family_id=int(family_id), room_id=int(room_id)).values(
+            'device_id').annotate(count=Count('device_id')).count()
         device_room = []
         # 房间设备列表
         if room_count > 0:
@@ -158,7 +160,8 @@ class GatewayFamilyRoomView(View):
                         'roomName': room_name,
                     })
         device_not_room = []
-        device_not_room_count = FamilyRoomDevice.objects.filter(family_id=int(family_id), room_id=0).count()
+        device_not_room_count = FamilyRoomDevice.objects.filter(family_id=int(family_id), room_id=0).values(
+            'device_id').annotate(count=Count('device_id')).count()
         if device_not_room_count > 0:
             not_room_device_list = EquipmentFamilyView.get_family_device_list(user_id=app_user_id, page_no=int(page_no),
                                                                               page_size=int(page_size),
@@ -166,9 +169,17 @@ class GatewayFamilyRoomView(View):
                                                                               is_room_other=True)
             if not_room_device_list:
                 for item in not_room_device_list:
+                    room_device_qs = FamilyRoomDevice.objects.filter(family_id=int(family_id))
+                    room_device_qs = room_device_qs.filter(~Q(room_id=0))
+                    name = ''
+                    if room_device_qs.exists():
+                        family_room_qs = FamilyRoom.objects.filter(id=room_device_qs.first().room_id)
+                        if family_room_qs.exists():
+                            name = family_room_qs.first().name
                     device_not_room.append({
                         'deviceId': item['id'],
                         'deviceType': item['Type'],
                         'nickName': item['NickName'],
+                        'roomName': name
                     })
         return response.json(0, {'deviceRooms': device_room, 'deviceNotRooms': device_not_room})