浏览代码

优化代码格式(设备数据模块)

guanhailong 3 年之前
父节点
当前提交
723591e86c
共有 1 个文件被更改,包括 46 次插入32 次删除
  1. 46 32
      AdminController/dataSystemManagement/DeviceDataController.py

+ 46 - 32
AdminController/dataSystemManagement/DeviceDataController.py

@@ -10,7 +10,7 @@
 import datetime
 import datetime
 
 
 import requests
 import requests
-from django.db.models import Count
+from django.db.models import Count, Q
 from django.views.generic.base import View
 from django.views.generic.base import View
 
 
 from Model.models import Device_Info, CountryModel, UidSetModel, DeviceTypeModel, VideoPlaybackTimeModel
 from Model.models import Device_Info, CountryModel, UidSetModel, DeviceTypeModel, VideoPlaybackTimeModel
@@ -51,6 +51,23 @@ class DeviceDataView(View):
         if operation == 'global/addDevice':  # 全球新增设备数据
         if operation == 'global/addDevice':  # 全球新增设备数据
             return self.golbal_add_device(request, request_dict, response)
             return self.golbal_add_device(request, request_dict, response)
 
 
+    #     if operation == 'ip/country':  #
+    #         return self.ip_country(response)
+    #     else:
+    #         return response.json(414)
+    #
+    # @staticmethod
+    # def ip_country(response):
+    #     uid_set_qs = UidSetModel.objects.filter(~Q(ip='') & Q(tb_country=0)).values('ip')
+    #     for uid_set in uid_set_qs:
+    #         ip = uid_set['ip']
+    #         ipInfo = CommonService.getIpIpInfo(ip, 'CN')
+    #         country_qs = CountryModel.objects.filter(country_code=ipInfo['country_code']).values('id')
+    #         if country_qs.exists():
+    #             country = country_qs[0]['id']
+    #             uid_set_qs.filter(ip=ip).update(tb_country=country)
+    #     return response.json(0)
+
     @classmethod
     @classmethod
     def golbal_add_device(cls, request, request_dict, response):
     def golbal_add_device(cls, request, request_dict, response):
         """
         """
@@ -328,17 +345,14 @@ class DeviceDataView(View):
             null_list = []
             null_list = []
             if not video_playback_time_qs.exists():
             if not video_playback_time_qs.exists():
                 return response.json(0, null_list)
                 return response.json(0, null_list)
-            device_info = list(video_playback_time_qs.values('uid').order_by('uid').distinct())
-            device_info_list = [item[key] for item in device_info for key in item]
-            count_all = len(device_info_list)
+            video_playback_uid_qs = video_playback_time_qs.values('uid').order_by('uid').distinct()
             res = {}
             res = {}
             video_list = []
             video_list = []
             region_list = []
             region_list = []
             for item in time_list:
             for item in time_list:
                 video_playback_qs = video_playback_time_qs.filter(startTime__range=(item[0], item[1]))
                 video_playback_qs = video_playback_time_qs.filter(startTime__range=(item[0], item[1]))
                 uid_qs = video_playback_qs.values('uid').order_by('uid').distinct()
                 uid_qs = video_playback_qs.values('uid').order_by('uid').distinct()
-                uid_list = [item[key] for item in uid_qs for key in item]
-                rate = round(uid_qs.count() / count_all * 100, 2)
+                rate = round(uid_qs.count() / video_playback_uid_qs.count() * 100, 2)
                 vod_dict = {
                 vod_dict = {
                     'count': uid_qs.count(),
                     'count': uid_qs.count(),
                     'rate': rate,
                     'rate': rate,
@@ -347,13 +361,13 @@ class DeviceDataView(View):
                 }
                 }
                 video_list.append(vod_dict)
                 video_list.append(vod_dict)
             res['vodHls'] = video_list
             res['vodHls'] = video_list
-            type_country_qs = UidSetModel.objects.filter(uid__in=device_info_list).values(
+            type_country_qs = UidSetModel.objects.filter(uid__in=video_playback_uid_qs.values('uid')).values(
                 'tb_country').annotate(count=Count('tb_country')).order_by('-count')
                 'tb_country').annotate(count=Count('tb_country')).order_by('-count')
             for type_country in type_country_qs:
             for type_country in type_country_qs:
                 country_id = type_country['tb_country']
                 country_id = type_country['tb_country']
                 country_name_qs = CountryModel.objects.filter(id=country_id).values('country_name')
                 country_name_qs = CountryModel.objects.filter(id=country_id).values('country_name')
                 country_name = country_name_qs[0]['country_name'] if country_name_qs.exists() else '未知区域'
                 country_name = country_name_qs[0]['country_name'] if country_name_qs.exists() else '未知区域'
-                rate = round(type_country['count'] / count_all * 100, 2)
+                rate = round(type_country['count'] / video_playback_uid_qs.count() * 100, 2)
                 country_dict = {
                 country_dict = {
                     'countryName': country_name,
                     'countryName': country_name,
                     'count': type_country['count'],
                     'count': type_country['count'],
@@ -386,7 +400,6 @@ class DeviceDataView(View):
             if not uid_set_qs.exists():
             if not uid_set_qs.exists():
                 return response.json(0, null_list)
                 return response.json(0, null_list)
             uid_qs = uid_set_qs.values('uid')
             uid_qs = uid_set_qs.values('uid')
-            uid_list = [item[key] for item in uid_qs for key in item]
             count_all = uid_set_qs.count()
             count_all = uid_set_qs.count()
             # 统计该时间段的设备数量(已去重)
             # 统计该时间段的设备数量(已去重)
             res = {
             res = {
@@ -404,8 +417,6 @@ class DeviceDataView(View):
             time_list = CommonService.cutting_time(start_time, end_time, unit_time)
             time_list = CommonService.cutting_time(start_time, end_time, unit_time)
             for item in time_list:
             for item in time_list:
                 deivce_uid_qs = uid_set_qs.filter(addTime__range=(item[0], item[1]))
                 deivce_uid_qs = uid_set_qs.filter(addTime__range=(item[0], item[1]))
-                uid_qs = deivce_uid_qs.values('uid')
-                uid_list = [item[key] for item in uid_qs for key in item]
                 count_part = deivce_uid_qs.count()
                 count_part = deivce_uid_qs.count()
                 rate = round(count_part / count_all * 100, 2)
                 rate = round(count_part / count_all * 100, 2)
                 info_dict = {
                 info_dict = {
@@ -434,12 +445,11 @@ class DeviceDataView(View):
                 }
                 }
                 region_list.append(country_dict)
                 region_list.append(country_dict)
             # 统计设备类型数量
             # 统计设备类型数量
-            device_info_type_qs = Device_Info.objects.filter(UID__in=uid_list)
+            device_info_type_qs = Device_Info.objects.filter(UID__in=uid_qs.values('uid'))
             device_type_qs = device_info_type_qs.values('Type').annotate(
             device_type_qs = device_info_type_qs.values('Type').annotate(
                 count=Count('Type', distinct=True)).order_by('-count').distinct()
                 count=Count('Type', distinct=True)).order_by('-count').distinct()
-            count = device_info_type_qs.count()
             name = '未知类型'
             name = '未知类型'
-            count_remain = count_all - count
+            count_remain = count_all - device_info_type_qs.count()
             rate = round(count_remain / count_all * 100, 2)
             rate = round(count_remain / count_all * 100, 2)
             type_list.append({
             type_list.append({
                 'type': name,
                 'type': name,
@@ -448,8 +458,8 @@ class DeviceDataView(View):
             })
             })
             for device_type in device_type_qs:
             for device_type in device_type_qs:
                 Type = device_type['Type']
                 Type = device_type['Type']
-                device_type_qs = DeviceTypeModel.objects.filter(type=Type).values('name')
-                name = device_type_qs[0]['name'] if device_type_qs.exists() else '未知类型'
+                device_type_name_qs = DeviceTypeModel.objects.filter(type=Type).values('name')
+                name = device_type_name_qs[0]['name'] if device_type_name_qs.exists() else '未知类型'
                 type_qs = device_info_type_qs.values('Type')
                 type_qs = device_info_type_qs.values('Type')
                 test_list = [item[key] for item in type_qs for key in item]
                 test_list = [item[key] for item in type_qs for key in item]
                 type_count = test_list.count(Type)
                 type_count = test_list.count(Type)
@@ -460,13 +470,20 @@ class DeviceDataView(View):
                     'rate': rate
                     'rate': rate
                 })
                 })
             # 云存版本数量
             # 云存版本数量
-            cloud_qs = uid_set_qs.exclude(cloud_vod=2).values('uid')
-            cloud_list = [item[key] for item in cloud_qs for key in item]
-            device_info_type_qs = Device_Info.objects.filter(UID__in=cloud_list).distinct()
+            uid_cloud_qs = uid_set_qs.exclude(cloud_vod=2).values('uid')
+            device_info_type_qs = Device_Info.objects.filter(UID__in=uid_cloud_qs.values('uid')).distinct()
             cloud_type_qs = device_info_type_qs.values('Type').annotate(
             cloud_type_qs = device_info_type_qs.values('Type').annotate(
                 count=Count('Type', distinct=True)).order_by('-count').distinct()
                 count=Count('Type', distinct=True)).order_by('-count').distinct()
             type_qs = device_info_type_qs.values('Type')
             type_qs = device_info_type_qs.values('Type')
             test_list = [item[key] for item in type_qs for key in item]
             test_list = [item[key] for item in type_qs for key in item]
+            count = uid_cloud_qs.count() - device_info_type_qs.count()
+            name = '未知类型'
+            rate = round(count / count_all * 100, 2)
+            version_list.append({
+                'type': name,
+                'count': count,
+                'rate': rate
+            })
             for cloud_type in cloud_type_qs:
             for cloud_type in cloud_type_qs:
                 Type = cloud_type['Type']
                 Type = cloud_type['Type']
                 device_type_qs = DeviceTypeModel.objects.filter(type=Type).values('name')
                 device_type_qs = DeviceTypeModel.objects.filter(type=Type).values('name')
@@ -495,12 +512,10 @@ class DeviceDataView(View):
         @param response:响应对象
         @param response:响应对象
         """
         """
         uid_set_qs = UidSetModel.objects.all()
         uid_set_qs = UidSetModel.objects.all()
-        tb_country_qs = uid_set_qs.values('tb_country').annotate(
-            count=Count('tb_country')).order_by('-count')
-        uid_set = uid_set_qs.values('uid')
-        count_all = uid_set.count()
         if not uid_set_qs.exists():
         if not uid_set_qs.exists():
             return response.json(444)
             return response.json(444)
+        tb_country_qs = uid_set_qs.values('tb_country').annotate(
+            count=Count('tb_country')).order_by('-count')
         res = {}
         res = {}
         try:
         try:
             device_country_list = []
             device_country_list = []
@@ -508,10 +523,10 @@ class DeviceDataView(View):
             for device_country in tb_country_qs:
             for device_country in tb_country_qs:
                 country_id = device_country['tb_country']
                 country_id = device_country['tb_country']
                 country_qs = CountryModel.objects.filter(id=country_id).values('country_name', 'region__name')
                 country_qs = CountryModel.objects.filter(id=country_id).values('country_name', 'region__name')
-                if not country_qs.exists():
-                    name = '未知地区'
-                else:
+                if country_qs.exists():
                     name = country_qs[0]['country_name']
                     name = country_qs[0]['country_name']
+                else:
+                    name = '未知地区'
                 count = uid_set_qs.filter(
                 count = uid_set_qs.filter(
                     tb_country=device_country['tb_country']).values('uid').annotate(
                     tb_country=device_country['tb_country']).values('uid').annotate(
                     count=Count('uid', distinct=True)).order_by('-count').count()
                     count=Count('uid', distinct=True)).order_by('-count').count()
@@ -533,7 +548,7 @@ class DeviceDataView(View):
                             'count': count
                             'count': count
                         })
                         })
             for item in continent_list:
             for item in continent_list:
-                item['rate'] = round(item['count'] / count_all * 100, 2)
+                item['rate'] = round(item['count'] / uid_set_qs.count() * 100, 2)
             res['countries'] = CommonService.list_sort(device_country_list)
             res['countries'] = CommonService.list_sort(device_country_list)
             res['continent'] = CommonService.list_sort(continent_list)
             res['continent'] = CommonService.list_sort(continent_list)
             return response.json(0, res)
             return response.json(0, res)
@@ -549,11 +564,10 @@ class DeviceDataView(View):
         @return:
         @return:
         """
         """
         uid_set_qs = UidSetModel.objects.values('uid').order_by('uid')
         uid_set_qs = UidSetModel.objects.values('uid').order_by('uid')
-        uid_list = [item[key] for item in uid_set_qs for key in item]
-        device_info_qs = Device_Info.objects.filter(UID__in=uid_list)
-        device_type_qs = device_info_qs.values('Type').annotate(count=Count('Type')).order_by('-count')
-        count_all = len(uid_list)
+        count_all = uid_set_qs.count()
+        device_info_qs = Device_Info.objects.filter(UID__in=uid_set_qs.values('uid'))
         device_info_count = device_info_qs.count()
         device_info_count = device_info_qs.count()
+        device_info_type_qs = device_info_qs.values('Type').annotate(count=Count('Type')).order_by('-count')
         # 查询不到(类型)的设备数量
         # 查询不到(类型)的设备数量
         if not device_info_qs.exists():
         if not device_info_qs.exists():
             return response.json(444)
             return response.json(444)
@@ -568,7 +582,7 @@ class DeviceDataView(View):
                 'count': count,
                 'count': count,
                 'rate': rate
                 'rate': rate
             })
             })
-            for device_info in device_type_qs:
+            for device_info in device_info_type_qs:
                 Type = device_info['Type']
                 Type = device_info['Type']
                 device_type_qs = DeviceTypeModel.objects.filter(type=Type).values('name')
                 device_type_qs = DeviceTypeModel.objects.filter(type=Type).values('name')
                 name = device_type_qs[0]['name'] if device_type_qs.exists() else '未知类型'
                 name = device_type_qs[0]['name'] if device_type_qs.exists() else '未知类型'