Pārlūkot izejas kodu

优化返回分组设备数量

zhangdongming 3 nedēļas atpakaļ
vecāks
revīzija
2cf8dd06f1
1 mainītis faili ar 22 papildinājumiem un 17 dzēšanām
  1. 22 17
      Controller/DeviceManagement/DeviceGroupController.py

+ 22 - 17
Controller/DeviceManagement/DeviceGroupController.py

@@ -4,7 +4,7 @@
 from django.db import transaction
 from django.db.models import Q
 from django.views import View
-
+from django.db.models import Count, Sum
 from Model.models import DeviceGroup, Device_Info
 from Service.CommonService import CommonService
 
@@ -36,7 +36,7 @@ class DeviceGroupView(View):
             return self.update(request_dict, user_id, response)
         elif operation == 'delete':  # 删除分组
             return self.delete(request_dict, user_id, response)
-        elif operation == 'transferGroup':   # 转移分组
+        elif operation == 'transferGroup':  # 转移分组
             return self.transfer_group(request_dict, user_id, response)
         else:
             return response.json(414)
@@ -45,21 +45,26 @@ class DeviceGroupView(View):
     def query_group_quantity(request_dict, user_id, response):
         """
         查询分组数量
-        @param request_dict:
-        @param user_id:
-        @param response:
-        @return: res
+        @param request_dict: 请求参数
+        @param user_id: 用户ID
+        @param response: 响应对象
+        @return: res 包含分组信息和设备总数的响应
         """
-        # 该用户已存在该组名的分组
-        device_group_qs = DeviceGroup.objects.filter(user_id=user_id).values('id', 'group_name')
-        res = []
-        if not device_group_qs.exists():
-            return response.json(0, res)
 
-        for device_group in device_group_qs:
-            device_quantity = Device_Info.objects.filter(device_group_id=device_group['id']).count()
-            device_group['device_quantity'] = device_quantity
-            res.append(device_group)
+        # 一次查询获取所有分组及对应的设备数量
+        device_group_qs = DeviceGroup.objects.filter(user_id=user_id) \
+            .annotate(device_quantity=Count('device_info', distinct=True)) \
+            .values('id', 'group_name', 'device_quantity')
+
+        # 计算设备总数
+        total_result = device_group_qs.aggregate(total=Sum('device_quantity'))
+        device_total = total_result['total'] or 0  # 处理没有分组的情况
+
+        res = {
+            'total': device_total,
+            'device_groups': list(device_group_qs)  # 直接转换为列表
+        }
+
         return response.json(0, res)
 
     @staticmethod
@@ -110,13 +115,13 @@ class DeviceGroupView(View):
                     res.append(data)
 
             # 查询设备数量不为0的其他分组
-            device_group_qs = DeviceGroup.objects.filter(~Q(id=device_group_id), user_id=user_id).\
+            device_group_qs = DeviceGroup.objects.filter(~Q(id=device_group_id), user_id=user_id). \
                 values('id', 'group_name')
             if device_group_qs.exists():
                 # 查询各组的设备id和昵称
                 for device_group in device_group_qs:
                     device_info_list = []
-                    device_info_qs = Device_Info.objects.filter(device_group_id=device_group['id']).\
+                    device_info_qs = Device_Info.objects.filter(device_group_id=device_group['id']). \
                         values('id', 'NickName', 'Type')
                     for device_info in device_info_qs:
                         device_info_list.append(device_info)