|
@@ -20,7 +20,7 @@ from Ansjer.config import OSS_STS_ACCESS_SECRET, OSS_STS_ACCESS_KEY
|
|
from Controller.DeviceConfirmRegion import Device_Region
|
|
from Controller.DeviceConfirmRegion import Device_Region
|
|
from Model.models import Device_Info, UID_Bucket, UID_Preview, UidSetModel, UidChannelSetModel, \
|
|
from Model.models import Device_Info, UID_Bucket, UID_Preview, UidSetModel, UidChannelSetModel, \
|
|
iotdeviceInfoModel, UIDModel, Device_User, UserFamily, FamilyMember, FamilyMemberPermission, \
|
|
iotdeviceInfoModel, UIDModel, Device_User, UserFamily, FamilyMember, FamilyMemberPermission, \
|
|
- FamilyRoomDevice, FamilyRoom, FamilyMemberJoin, GatewaySubDevice, CountryModel
|
|
|
|
|
|
+ FamilyRoomDevice, FamilyRoom, FamilyMemberJoin, GatewaySubDevice, CountryModel, DeviceTypeModel
|
|
from Object.ResponseObject import ResponseObject
|
|
from Object.ResponseObject import ResponseObject
|
|
from Object.TokenObject import TokenObject
|
|
from Object.TokenObject import TokenObject
|
|
from Service.CommonService import CommonService
|
|
from Service.CommonService import CommonService
|
|
@@ -54,9 +54,72 @@ class DeviceDataView(View):
|
|
|
|
|
|
if operation == 'increase': # 查询新增用户数据
|
|
if operation == 'increase': # 查询新增用户数据
|
|
return self.device_increase(request_dict, response)
|
|
return self.device_increase(request_dict, response)
|
|
|
|
+ if operation == 'type': # 统计设备类型
|
|
|
|
+ return self.type_statistics(response)
|
|
|
|
+ if operation == 'regional': # 设备地区分布
|
|
|
|
+ return self.regional_statistics(response)
|
|
else:
|
|
else:
|
|
return response.json(414)
|
|
return response.json(414)
|
|
|
|
|
|
|
|
+ @classmethod
|
|
|
|
+ def regional_statistics(cls, response):
|
|
|
|
+ """
|
|
|
|
+ 统计地区设备数量
|
|
|
|
+ @param response:响应对象
|
|
|
|
+ """
|
|
|
|
+ device_info_qs = Device_Info.objects.all()
|
|
|
|
+ count = device_info_qs.count()
|
|
|
|
+ device_info_qs = device_info_qs.values('userID__region_country').order_by('userID__region_country').distinct()
|
|
|
|
+ if not device_info_qs.exists():
|
|
|
|
+ return response.json(444)
|
|
|
|
+ try:
|
|
|
|
+ device_country_list = []
|
|
|
|
+ for device_user in device_info_qs:
|
|
|
|
+ country_id = device_user['userID__region_country']
|
|
|
|
+ country_qs = CountryModel.objects.filter(id=country_id).values('country_name', 'id')
|
|
|
|
+ countryName = country_qs[0]['country_name'] if country_qs.exists() else '未知区域'
|
|
|
|
+ device_info = Device_Info.objects.filter(userID__region_country=country_id).values('id').count()
|
|
|
|
+ rate = round(device_info / count * 100, 2)
|
|
|
|
+ res = {
|
|
|
|
+ 'id': country_id,
|
|
|
|
+ 'name': countryName,
|
|
|
|
+ 'total': device_info,
|
|
|
|
+ 'rate': rate
|
|
|
|
+ }
|
|
|
|
+ device_country_list.append(res)
|
|
|
|
+ return response.json(0, device_country_list)
|
|
|
|
+ except Exception as e:
|
|
|
|
+ print(e)
|
|
|
|
+ return response.json(500)
|
|
|
|
+
|
|
|
|
+ @classmethod
|
|
|
|
+ def type_statistics(cls, response):
|
|
|
|
+ """
|
|
|
|
+ 统计设备类型
|
|
|
|
+ @param response:响应对象
|
|
|
|
+ @return:
|
|
|
|
+ """
|
|
|
|
+ device_info_qs = Device_Info.objects.filter().values('Type').order_by('Type').distinct()
|
|
|
|
+ if not device_info_qs.exists():
|
|
|
|
+ return response.json(444)
|
|
|
|
+ device_type_list = []
|
|
|
|
+ try:
|
|
|
|
+ for device_info in device_info_qs:
|
|
|
|
+ type = device_info['Type']
|
|
|
|
+ device_type_qs = DeviceTypeModel.objects.filter(type=type).values('name')
|
|
|
|
+ if not device_type_qs.exists():
|
|
|
|
+ continue
|
|
|
|
+ total = Device_Info.objects.filter(Type=type).count()
|
|
|
|
+ res = {
|
|
|
|
+ 'type': device_type_qs[0]['name'],
|
|
|
|
+ 'total': total
|
|
|
|
+ }
|
|
|
|
+ device_type_list.append(res)
|
|
|
|
+ return response.json(0, device_type_list)
|
|
|
|
+ except Exception as e:
|
|
|
|
+ print(e)
|
|
|
|
+ return response.json(500)
|
|
|
|
+
|
|
@classmethod
|
|
@classmethod
|
|
def device_increase(cls, request_dict, response):
|
|
def device_increase(cls, request_dict, response):
|
|
"""
|
|
"""
|
|
@@ -80,7 +143,8 @@ class DeviceDataView(View):
|
|
'region': []
|
|
'region': []
|
|
}
|
|
}
|
|
if user_qs.exists():
|
|
if user_qs.exists():
|
|
- user_country_qs = user_qs.values('region_country').annotate(count=Count('region_country')).order_by('-count')
|
|
|
|
|
|
+ user_country_qs = user_qs.values('region_country').annotate(count=Count('region_country')).order_by(
|
|
|
|
+ '-count')
|
|
region = []
|
|
region = []
|
|
for item in user_country_qs:
|
|
for item in user_country_qs:
|
|
country_id = item['region_country']
|
|
country_id = item['region_country']
|