Sfoglia il codice sorgente

Merge remote-tracking branch 'remotes/origin/test'

Ansjer 3 anni fa
parent
commit
b2056bcbd3

+ 22 - 15
AdminController/DeviceManagementController.py

@@ -452,26 +452,33 @@ class DeviceManagement(View):
         lang = request_dict.get('lang', None)
         app_bundle_id = request_dict.get('appBundleId', None)
         version_number = request_dict.get('versionNumber', None)
-
         if not all([lang, app_bundle_id, version_number]):
             return response.json(444)
-        version_number_qs = AppVersionNumber.objects.values('version_number')
-        test_list = [item[key] for item in version_number_qs for key in item]
-        if (version_number > test_list[-1] or version_number < test_list[0]):
-            version_number_qs = AppVersionNumber.objects.filter().values('id').order_by('id')
-            total_list = [item[key] for item in version_number_qs for key in item]
-            version_number_id = total_list[-1]
+        version_number_qs = AppVersionNumber.objects.filter(app_bundle__app_bundle_id=app_bundle_id,
+                                                            version_number=version_number)
+        if not version_number_qs.exists():
+            version_number_qs = AppVersionNumber.objects.filter(app_bundle__app_bundle_id=app_bundle_id)
+            if not version_number_qs.exists():
+                return response.json(173)
+            version_qs = version_number_qs.values('version_number')
+            test_list = [item[key] for item in version_qs for key in item]
+            if (version_number > test_list[-1] or version_number < test_list[0]):
+                version_number_qs = version_number_qs.filter().values('id').order_by('id')
+                total_list = [item[key] for item in version_number_qs for key in item]
+                version_number_id = total_list[-1]
+            else:
+                pos = bisect_left(test_list, version_number)
+                if pos == 0:
+                    return test_list[0]
+                if pos == len(test_list):
+                    return test_list[-1]
+                before = test_list[pos - 1]
+                version_number_qs = AppVersionNumber.objects.filter(version_number=before).values('id')
+                version_number_id = version_number_qs[0]['id']
         else:
-            pos = bisect_left(test_list, version_number)
-            if pos == 0:
-                return test_list[0]
-            if pos == len(test_list):
-                return test_list[-1]
-            before = test_list[pos - 1]
-            version_number_qs = AppVersionNumber.objects.filter(version_number=before).values('id')
+            version_number_qs = AppVersionNumber.objects.filter(version_number=version_number).values('id')
             version_number_id = version_number_qs[0]['id']
         try:
-
             app_bundle_qs = AppBundle.objects.filter(app_bundle_id=app_bundle_id,
                                                      app_device_type__devicenamelanguage__lang=lang,
                                                      app_device_type__app_version_number_id=version_number_id). \

+ 54 - 22
AdminController/dataSystemManagement/DeviceDataController.py

@@ -14,7 +14,7 @@ from django.db.models import Count
 from django.views.generic.base import View
 
 from Ansjer.config import DEVICE_TYPE
-from Model.models import Device_Info, CountryModel, Order_Model
+from Model.models import Device_Info, CountryModel, Order_Model, VodHlsModel
 from Service.CommonService import CommonService
 
 
@@ -158,26 +158,55 @@ class DeviceDataView(View):
 
     @classmethod
     def device_active(cls, request_dict, response):
-        order_type = request_dict.get('orderType', None)
-        if not order_type:
-            return response.json(444)
-        order_type = int(order_type)
-        order_type_qs = Order_Model.objects.filter(order_type=order_type).values('UID').order_by('UID').distinct()
+        start_time = request_dict.get('startTime', None)  # 时间戳
+        end_time = request_dict.get('endTime', None)
+        unit_time = request_dict.get('unitTime', None)
+        if not all([start_time, end_time, unit_time]):
+            return response.json(444, {'error param': 'startTime or endTime or timeUnit or order_type'})
+        s_time = datetime.datetime.fromtimestamp(int(start_time))
+        e_time = datetime.datetime.fromtimestamp(int(end_time))
+        time_list = CommonService.cutting_time(s_time, e_time, unit_time)
         try:
-            order_type_list = []
-            for order in order_type_qs:
-                UID = order['UID']
-                device_info_qs = Device_Info.objects.filter(UID=UID).values('Type').order_by('Type').distinct()
-                if not device_info_qs.exists():
-                    continue
-                device_info_qs = device_info_qs[0]['Type']
-                order_type_list.append(device_info_qs)
-            type_list = []
-            for i in order_type_list:
-                if i not in type_list:
-                    type_list.append(i)
+            vod_hls_model_qs = VodHlsModel.objects.filter(time__range=(start_time, end_time))
+            device_info = list(vod_hls_model_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)
+            res = {}
+            vod_list = []
+            region_list = []
+            for item in time_list:
+                vod_hls_qs = vod_hls_model_qs.filter(time__range=(item[0], item[1]))
+                uid_qs = vod_hls_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)
+                vod_dict = {
+                    'count': uid_qs.count(),
+                    'rate': rate,
+                    'startTime': item[0],
+                    'endTime': item[1]
+                }
+                vod_list.append(vod_dict)
+                res['vodHls'] = vod_list
+                type_country_qs = Device_Info.objects.filter(UID__in=uid_list).values(
+                    'userID__region_country').annotate(count=Count('userID__region_country')).order_by('-count')
+                for item in type_country_qs:
+                    country_id = item['userID__region_country']
+                    country_qs = CountryModel.objects.filter(id=country_id).values('country_name')
+                    country_name = country_qs[0]['country_name'] if country_qs.exists() else '未知区域'
+                    country_qs = vod_hls_model_qs.filter(uid__in=uid_list).values('uid').order_by(
+                        'uid').distinct()
+                    total_list = [item[key] for item in country_qs for key in item]
+                    country_count = len(total_list)
+                    rate = round(country_count / count_all * 100, 2)
+                    country_dict = {
+                        'countryName': country_name,
+                        'count': item['count'],
+                        'rate': rate
+                    }
+                    region_list.append(country_dict)
+                    res['region'] = region_list
 
-            return response.json(0, type_list)
+            return response.json(0, res)
         except Exception as e:
             print(e)
             return response.json(500)
@@ -243,13 +272,15 @@ class DeviceDataView(View):
                 info_list.append(info_dict)
                 res['addDevice'] = info_list
                 # 统计地区设备数量
-                device_info_country_qs = device_info_qs.filter(UID__in=part_only_list).values('userID__region_country').annotate(
+                device_info_country_qs = device_info_qs.filter(UID__in=part_only_list).values(
+                    'userID__region_country').annotate(
                     count=Count('userID__region_country')).order_by('-count')
                 for item in device_info_country_qs:
                     country_id = item['userID__region_country']
                     country_qs = CountryModel.objects.filter(id=country_id).values('country_name', 'id')
                     country_name = country_qs[0]['country_name'] if country_qs.exists() else '未知区域'
-                    country_qs = device_info_qs.filter(UID__in=part_only_list).values('UID').order_by('UID').distinct().values(
+                    country_qs = device_info_qs.filter(UID__in=part_only_list).values('UID').order_by(
+                        'UID').distinct().values(
                         'userID__region_country')
                     total_list = [item[key] for item in country_qs for key in item]
                     country_count = total_list.count(country_id)
@@ -270,7 +301,8 @@ class DeviceDataView(View):
                     type = device_type['Type']
                     name = DEVICE_TYPE.get(type, '未知类型')
                     name = name if name != 'UNKOWN' else '未知类型'
-                    type_qs = device_info_qs.filter(UID__in=part_only_list).values('UID').order_by('UID').distinct().values(
+                    type_qs = device_info_qs.filter(UID__in=part_only_list).values('UID').order_by(
+                        'UID').distinct().values(
                         'Type')
                     # rate = round(total / count_unique * 100, 2)  # count_unique 有误,跟device_info_type_qs 总数合不上 (可以看151行)
                     test_list = [item[key] for item in type_qs for key in item]

+ 65 - 5
AdminController/dataSystemManagement/HomeDataController.py

@@ -10,12 +10,12 @@ import datetime
 import openpyxl
 import requests
 
-from django.db.models import Sum
+from django.db.models import Sum, Count
 from django.http import HttpResponse
 from django.utils.encoding import escape_uri_path
 from django.views.generic.base import View
 
-from Model.models import VideoPlaybackTimeModel, Device_User, Device_Info, Order_Model
+from Model.models import VideoPlaybackTimeModel, Device_User, Device_Info, Order_Model, CountryModel
 from Service.CommonService import CommonService
 
 
@@ -61,9 +61,21 @@ class HomeDataView(View):
         end_time_stamp = CommonService.str_to_timestamp(end_time.strftime('%Y-%m-%d %H:%M:%S'))
         start_time_stamp = CommonService.str_to_timestamp(start_time.strftime('%Y-%m-%d %H:%M:%S'))
         try:
-            user_increase_count = Device_User.objects.filter(data_joined__range=(start_time, end_time)).count()
+            user_increase_qs = Device_User.objects.filter(data_joined__range=(start_time, end_time))
+            user_increase_list = user_increase_qs.values('region_country').annotate(
+                count=Count('region_country')).order_by('-count')
+            for item in user_increase_list:
+                country_qs = CountryModel.objects.filter(id=item['region_country']).values('country_name')
+                item['countryName'] = country_qs[0]['country_name'] if country_qs.exists() else '未知区域'
+            user_increase_count = user_increase_qs.count()
             user_active_count = Device_User.objects.filter(last_login__range=(start_time, end_time)).count()
-            user_all_count = Device_User.objects.filter(data_joined__lte=end_time).count()
+            user_all_qs = Device_User.objects.filter(data_joined__lte=end_time)
+            user_all_list = user_all_qs.values('region_country').annotate(
+                count=Count('region_country')).order_by('-count')
+            for item in user_all_list:
+                country_qs = CountryModel.objects.filter(id=item['region_country']).values('country_name')
+                item['countryName'] = country_qs[0]['country_name'] if country_qs.exists() else '未知区域'
+            user_all_count = user_all_qs.count()
             device_increase_count = Device_Info.objects.filter(data_joined__range=(start_time, end_time)).values(
                 'UID').distinct().count()
             device_active_count = VideoPlaybackTimeModel.objects.filter(
@@ -94,6 +106,8 @@ class HomeDataView(View):
                 'vodOrderAllTotal': round(vod_order_all_total, 2) if vod_order_all_total else 0,
                 'aiOrderAllTotal': round(ai_order_all_total, 2) if ai_order_all_total else 0,
                 'unicomOrderAllTotal': round(unicom_order_all_total, 2) if unicom_order_all_total else 0,
+                'userIncreaseRegion': list(user_increase_list),
+                'userAllRegion': list(user_all_list)
             }
             return response.json(0, res)
         except Exception as e:
@@ -161,6 +175,12 @@ class HomeDataView(View):
             vod_order_all_total = 0
             ai_order_all_total = 0
             unicom_order_all_total = 0
+            user_increase_temp_list = []
+            user_increase_list = []
+            user_increase_other_dict = {'count': 0, 'countryName': '其他', 'rate': ''}
+            user_all_temp_list = []
+            user_all_list = []
+            user_all_other_dict = {'count': 0, 'countryName': '其他', 'rate': ''}
             for url in url_list:
                 url = url + request.path.replace('global/', '')
                 res = requests.get(url=url, params=request_dict, headers=headers)
@@ -179,6 +199,45 @@ class HomeDataView(View):
                 vod_order_all_total += result['result']['vodOrderAllTotal']
                 ai_order_all_total += result['result']['aiOrderAllTotal']
                 unicom_order_all_total += result['result']['unicomOrderAllTotal']
+                for item in result['result']['userIncreaseRegion']:
+                    flag = 0
+                    for each in user_increase_temp_list:
+                        if item['countryName'] == each['countryName']:
+                            each['count'] += item['count']
+                            flag = 1
+                            break
+                    if flag == 0:
+                        user_increase_temp_list.append(item)
+
+                for item in result['result']['userAllRegion']:
+                    flag = 0
+                    for each in user_all_temp_list:
+                        if item['countryName'] == each['countryName']:
+                            each['count'] += item['count']
+                            flag = 1
+                            break
+                    if flag == 0:
+                        user_all_temp_list.append(item)
+            if user_increase_temp_list:
+                for item in user_increase_temp_list:
+                    rate = round(item['count'] / user_increase_count * 100, 2)
+                    if rate >= 10:
+                        item['rate'] = rate
+                        user_increase_list.append(item)
+                    else:
+                        user_increase_other_dict['count'] += item['count']
+                user_increase_other_dict['rate'] = round(user_increase_other_dict['count'] / user_increase_count * 100, 2)
+                user_increase_list.append(user_increase_other_dict)
+            if user_all_temp_list:
+                for item in user_all_temp_list:
+                    rate = round(item['count'] / user_all_count * 100, 2)
+                    if rate >= 10:
+                        item['rate'] = rate
+                        user_all_list.append(item)
+                    else:
+                        user_all_other_dict['count'] += item['count']
+                user_all_other_dict['rate'] = round(user_all_other_dict['count'] / user_all_count * 100, 2)
+                user_all_list.append(user_all_other_dict)
             res = {
                 'userIncreaseCount': user_increase_count,
                 'userActiveCount': user_active_count,
@@ -194,6 +253,8 @@ class HomeDataView(View):
                 'vodOrderAllTotal': vod_order_all_total,
                 'aiOrderAllTotal': ai_order_all_total,
                 'unicomOrderAllTotal': unicom_order_all_total,
+                'userIncreaseRegion': user_increase_list,
+                'userAllRegion': user_all_list
             }
             return response.json(0, res)
         except Exception as e:
@@ -230,7 +291,6 @@ class HomeDataView(View):
         except Exception as e:
             return response.json(500, repr(e))
 
-
     @classmethod
     def export_data(cls, request_dict, response):
         """

+ 7 - 11
Ansjer/eur_config/config_formal.py

@@ -16,17 +16,13 @@ import os
 # 配置信息
 CONFIG_INFO = 'eur'
 
-NGINX_RTMP_STAT = 'http://www.dvema.com/stat'
-SERVER_DOMAIN_SSL = 'https://www.dvema.com/'
-SERVER_DOMAIN = 'http://www.dvema.com/'
-DOMAIN_HOST = 'www.dvema.com'
+NGINX_RTMP_STAT = 'http://www.zositeche.com/stat'
+SERVER_DOMAIN_SSL = 'https://www.zositeche.com/'
+SERVER_DOMAIN = 'http://www.zositeche.com/'
+DOMAIN_HOST = 'www.zositeche.com'
 SERVER_HOST = 'server-redis.av1kep.ng.0001.euw1.cache.amazonaws.com'
 PUSH_REDIS_ADDRESS = 'push-redis.av1kep.ng.0001.euw1.cache.amazonaws.com'
-# PAYPAL_CRD = {
-#     "mode": "live",  # sandbox or live
-#     "client_id": "AdSRd6WBn-qLl9OiQHQuNYTDFSx0ZX0RUttqa58au8bPzoGYQUrt8bc6591RmH8_pEAIPijdvVYSVXyI",
-#     "client_secret": "ENT-J08N3Fw0B0uAokg4RukljAwO9hFHPf8whE6-Dwd8oBWJO8AWMgpdTKpfB1pOy89t4bsFEzMWDowm"
-# }
+
 PAYPAL_CRD = {
     "mode": "sandbox",  # sandbox or live
     "client_id": "AVLoQVq3xHZ6FrF4mxHwlCPgVBAw4Fw5RtMkuxmYd23SkUTIY643n2g3KdK-Al8wV05I28lza5uoQbAA",
@@ -36,8 +32,8 @@ PAYPAL_WEB_HOOK_ID = '3YH86681TH784461T'
 PAYPAL_WEB_HOOK_ID_TWO = '7TN87895N70389928'
 
 
-DETECT_PUSH_DOMAIN = 'http://push.dvema.com/'
-DETECT_PUSH_DOMAINS = 'https://push.dvema.com/'
+DETECT_PUSH_DOMAIN = 'http://push.zositeche.com/'
+DETECT_PUSH_DOMAINS = 'https://push.zositeche.com/'
 DETECT_PUSH_DOMAIN_JIUAN = 'http://jiuan.push.dvema.com/'
 DETECT_PUSH_DOMAINS_JIUAN = 'https://jiuan.push.dvema.com/'
 # 数据库dyanamo品牌日志数据库

+ 2 - 2
Model/models.py

@@ -1223,12 +1223,12 @@ class UidPushModel(models.Model):
 
 class GatewayPush(models.Model):
     id = models.AutoField(primary_key=True, verbose_name='自增id')
-    user_id = models.CharField(default='', max_length=32, verbose_name=u'用户id')
+    user_id = models.CharField(default='', max_length=32, db_index=True, verbose_name=u'用户id')
     app_bundle_id = models.CharField(default='', max_length=32, verbose_name=u'app包id')
     app_type = models.IntegerField(default=0, verbose_name=u'app类型')  # 1: ios, 2: 安卓
     push_type = models.IntegerField(default=0, verbose_name=u'推送类型')  # 0: apns, 1: 安卓gcm, 2: 极光
     token_val = models.CharField(default='', max_length=500, verbose_name=u'设备验证令牌')
-    m_code = models.CharField(default='', max_length=64, verbose_name='手机唯一标识')
+    m_code = models.CharField(default='', max_length=64, db_index=True, verbose_name='手机唯一标识')
     lang = models.CharField(default='en', max_length=8, verbose_name='推送语言')
     tz = models.CharField(default='0', max_length=8, verbose_name='时区')
     logout = models.BooleanField(default=False, verbose_name=u'退出登录')