|
@@ -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)
|