فهرست منبع

登录优化、数据系统业务数据优化

peng 2 سال پیش
والد
کامیت
8c81ec38bc

+ 8 - 20
AdminController/dataSystemManagement/BusinessDataController.py

@@ -55,27 +55,9 @@ class BusinessDataView(View):
             return response.json(444, {'error param': 'startTime or endTime'})
         try:
             vod_hls_summary_qs = VodHlsSummary.objects.filter(time__gte=start_time, time__lt=end_time).values()
-            vod_hls_qs = VodHlsModel.objects.filter(endTime__gte=start_time, endTime__lt=end_time).values(
-                'uid').annotate(uploadFrequency=Count('uid'), uploadDuration=Sum('sec')).order_by('uploadFrequency')
-            vod_hls_summary_list = list(vod_hls_summary_qs)
 
-            for item in vod_hls_qs:
-                flag = 0
-                for each in vod_hls_summary_list:
-                    if each['uid'] == item['uid']:
-                        each['upload_duration'] += item['uploadDuration']
-                        each['upload_frequency'] += item['uploadFrequency']
-                        flag = 1
-                if flag == 0:
-                    vod_hls_summary_list.append({
-                        'uid': item['uid'],
-                        'upload_duration': item['uploadDuration'],
-                        'upload_frequency': item['uploadFrequency'],
-                        'play_frequency': 0,
-                        'play_duration': 0
-                    })
             vod_hls_result = []
-            for item in vod_hls_summary_list:
+            for item in vod_hls_summary_qs:
                 vod_hls_result.append({
                     'uid': item['uid'],
                     'uploadDuration': item['upload_duration'],
@@ -102,6 +84,12 @@ class BusinessDataView(View):
         @param response:响应对象
         @return:
         """
+        page_no = request_dict.get('pageNo', None)
+        page_size = request_dict.get('pageSize', None)
+        if not all([page_size, page_no]):
+            return response.json(444, {'error param': 'pageNo or pageSize'})
+        page_no = int(page_no)
+        page_size = int(page_size)
         url_list = CommonService.get_domain_name()
         try:
             headers = {
@@ -120,7 +108,7 @@ class BusinessDataView(View):
                     return response.json(result['result_code'], result['result'])
             res = {
                 'uploadDeviceCount': upload_device_count,
-                'vodData': vod_list
+                'vodData': vod_list[(page_no - 1) * page_size:page_no * page_size]
             }
             return response.json(0, res)
         except Exception as e:

+ 26 - 41
AdminController/dataSystemManagement/DeviceDataController.py

@@ -10,10 +10,10 @@
 import datetime
 
 import requests
-from django.db.models import Q, Sum
+from django.db.models import Sum
 from django.views.generic.base import View
 
-from Model.models import CountryModel, UidSetModel, DeviceInfoSummary
+from Model.models import DeviceInfoSummary
 from Service.CommonService import CommonService
 
 
@@ -90,11 +90,6 @@ class DeviceDataView(View):
                         if flag == 0:
                             device_list.append(item)
                             device_count += item['count']
-                    for item in device_list:
-                        if device_count != 0:
-                            item['rate'] = round(item['count'] / device_count * 100, 2)
-                        else:
-                            break
                     for item in result['result']['region']:
                         flag = 0
                         for each in region_list:
@@ -106,11 +101,6 @@ class DeviceDataView(View):
                         if flag == 0:
                             region_list.append(item)
                             region_count += item['count']
-                    for item in region_list:
-                        if region_count != 0:
-                            item['rate'] = round(item['count'] / region_count * 100, 2)
-                        else:
-                            break
                     for item in result['result']['type']:
                         flag = 0
                         for each in type_list:
@@ -122,11 +112,6 @@ class DeviceDataView(View):
                         if flag == 0:
                             type_list.append(item)
                             type_count += item['count']
-                    for item in type_list:
-                        if type_count != 0:
-                            item['rate'] = round(item['count'] / type_count * 100, 2)
-                        else:
-                            break
                     for item in result['result']['version']:
                         flag = 0
                         for each in order_list:
@@ -138,13 +123,21 @@ class DeviceDataView(View):
                         if flag == 0:
                             order_list.append(item)
                             order_count += item['count']
-                    for item in order_list:
+
                         if order_count != 0:
                             item['rate'] = round(item['count'] / order_count * 100, 2)
                         else:
                             break
                 else:
-                    return response.json(result['result_code'])
+                    return response.json(result['result_code'], result['result'])
+            for item in device_list:
+                item['rate'] = round(item['count'] / device_count * 100, 2) if device_count else 0
+            for item in region_list:
+                item['rate'] = round(item['count'] / region_count * 100, 2) if region_count else 0
+            for item in type_list:
+                item['rate'] = round(item['count'] / type_count * 100, 2) if type_count else 0
+            for item in order_list:
+                item['rate'] = round(item['count'] / order_count * 100, 2) if order_count else 0
             res = {
                 'device': device_list,
                 'type': CommonService.list_sort(type_list),
@@ -189,11 +182,6 @@ class DeviceDataView(View):
                         if flag == 0:
                             type_list.append(item)
                             type_count += item['count']
-                    for item in type_list:
-                        if type_count != 0:
-                            item['rate'] = round(item['count'] / type_count * 100, 2)
-                        else:
-                            break
                     for item in result['result']['region']:
                         flag = 0
                         for each in region_list:
@@ -205,14 +193,12 @@ class DeviceDataView(View):
                         if flag == 0:
                             region_list.append(item)
                             region_count += item['count']
-                    for item in region_list:
-                        if region_count != 0:
-                            item['rate'] = round(item['count'] / region_count * 100, 2)
-                        else:
-                            break
                 else:
-                    return response.json(result['result_code'])
-
+                    return response.json(result['result_code'], result['result'])
+            for item in region_list:
+                item['rate'] = round(item['count'] / region_count * 100, 2) if region_count else 0
+            for item in type_list:
+                item['rate'] = round(item['count'] / type_count * 100, 2) if type_count else 0
             res = {
                 'device': type_list,
                 'region': CommonService.list_sort(region_list)
@@ -253,10 +239,10 @@ class DeviceDataView(View):
                         if flag == 0:
                             type_list.append(item)
                             type_count += item['count']
-                    for item in type_list:
-                        item['rate'] = round(item['count'] / type_count * 100, 2)
                 else:
-                    return response.json(result['result_code'])
+                    return response.json(result['result_code'], result['result'])
+            for item in type_list:
+                item['rate'] = round(item['count'] / type_count * 100, 2) if type_count else 0
             res = {
                 'type': CommonService.list_sort(type_list)
             }
@@ -300,9 +286,6 @@ class DeviceDataView(View):
                         if flag == 0:
                             device_list.append(item)
                             device_count += int(item['count'])
-                    for item in device_list:
-                        rate = round(item['count'] / device_count * 100, 2)
-                        item['rate'] = rate
                     for item in result['result']['continent']:
                         flag = 0
                         for each in region_list:
@@ -314,12 +297,14 @@ class DeviceDataView(View):
                         if flag == 0:
                             region_list.append(item)
                             region_count += item['count']
-                    for item in region_list:
-                        item['rate'] = round(item['count'] / region_count * 100, 2)
                 else:
-                    return response.json(result['result_code'])
+                    return response.json(result['result_code'], result['result'])
+            for item in device_list:
+                item['rate'] = round(item['count'] / device_count * 100, 2) if device_count else 0
+            for item in region_list:
+                item['rate'] = round(item['count'] / region_count * 100, 2) if region_count else 0
             res = {
-                'countries': CommonService.list_sort(device_list[:20]),
+                'countries': CommonService.list_sort(device_list[:30]),
                 'continent': region_list
             }
             return response.json(0, res)

+ 15 - 1
Controller/CloudStorage.py

@@ -43,7 +43,7 @@ from Controller.CheckUserData import DataValid
 from Model.models import Device_Info, Order_Model, Store_Meal, VodHlsModel, OssCrdModel, UID_Bucket, StsCrdModel, \
     ExperienceContextModel, Pay_Type, CDKcontextModel, Device_User, SysMassModel, SysMsgModel, UidPushModel, \
     Unused_Uid_Meal, UIDMainUser, UserModel, PromotionRuleModel, VideoPlaybackTimeModel, CloudLogModel, CouponModel, \
-    VodBucketModel, UIDModel
+    VodBucketModel, UIDModel, VodHlsSummary, LogModel
 from Object.AWS.S3Email import S3Email
 from Object.AliPayObject import AliPayObject
 from Object.AliSmsObject import AliSmsObject
@@ -564,6 +564,7 @@ class CloudStorageView(View):
         if not uidToken or not storeTime or not sec:
             return response.json(0)
         pass
+        sec = int(sec)
         UID = utko.UID
         channel = utko.channel
         print('UID:')
@@ -589,6 +590,19 @@ class CloudStorageView(View):
                     fg=fg,
                     sec=sec,
                 )
+                end_time_stamp = datetime.datetime.fromtimestamp(int(end_time))
+                end_time_str = datetime.datetime(end_time_stamp.year, end_time_stamp.month, 1)
+                end_time_stamp = CommonService.str_to_timestamp(end_time_str.strftime('%Y-%m-%d %H:%M:%S'))
+                vod_hls_qs = VodHlsSummary.objects.filter(uid=UID, time=end_time_stamp)
+                if vod_hls_qs.exists():
+                    vod_hls = vod_hls_qs.first()
+                    vod_hls.upload_frequency += 1
+                    vod_hls.upload_duration += sec
+                    vod_hls.save()
+                else:
+                    VodHlsSummary.objects.create(uid=UID, time=end_time_stamp,
+                                                 upload_duration=sec, upload_frequency=1)
+
                 res = {'code': 0, 'msg': '存储成功'}
                 return HttpResponse(json.dumps(res, ensure_ascii=False),
                                     content_type="application/json,charset=utf-8")

+ 21 - 7
Controller/CloudVod.py

@@ -15,7 +15,7 @@ import json
 import math
 import time
 import urllib
-
+import datetime
 import boto3
 
 from Object.AliPayObject import AliPayObject
@@ -31,7 +31,8 @@ from django.views.generic.base import View
 
 from Ansjer.config import OSS_STS_ACCESS_KEY, OSS_STS_ACCESS_SECRET, OSS_ROLE_ARN, SERVER_DOMAIN, PAYPAL_CRD, \
     SERVER_DOMAIN_SSL
-from Model.models import Device_Info, Order_Model, Store_Meal, VodHlsModel, OssCrdModel, UID_Bucket, StsCrdModel
+from Model.models import Device_Info, Order_Model, Store_Meal, VodHlsModel, OssCrdModel, UID_Bucket, StsCrdModel, \
+    VodHlsSummary, LogModel
 from Object.ResponseObject import ResponseObject
 from Object.TokenObject import TokenObject
 from Object.UidTokenObject import UidTokenObject
@@ -405,7 +406,7 @@ class CloudVodView(View):
                             "Effect": "Allow",
                             "Action": "s3:*",
                             "Resource": ["arn:aws:s3:::azvod1/{uid_channel}/*".
-                                             format(uid_channel=storage)]
+                                         format(uid_channel=storage)]
                         }
                     ]
                 }
@@ -430,7 +431,7 @@ class CloudVodView(View):
                     'ip': ip,
                 }
                 if sts_qs.exists():
-                    sts_qs.update(data=json.dumps(res,default=str), addTime=now_time)
+                    sts_qs.update(data=json.dumps(res, default=str), addTime=now_time)
                 else:
                     StsCrdModel.objects.create(uid=uid, channel=channel, data=json.dumps(res, default=str),
                                                addTime=now_time, type=1)
@@ -619,6 +620,7 @@ class CloudVodView(View):
             return response.json(444, 'uidToken')
         if not uidToken or not storeTime or not sec:
             return response.json(444, 'uidToken,time,sec')
+        sec = int(sec)
         UID = utko.UID
         channel = utko.channel
         print(channel)
@@ -637,6 +639,20 @@ class CloudVodView(View):
         endTime = int(storeTime) + storeDay * 86400
         VodHlsModel.objects.create(uid=UID, channel=channel, time=storeTime,
                                    endTime=endTime, bucket_id=bucketID, sec=sec)
+
+        end_time_stamp = datetime.datetime.fromtimestamp(int(endTime))
+        end_time_str = datetime.datetime(end_time_stamp.year, end_time_stamp.month, 1)
+        end_time_stamp = CommonService.str_to_timestamp(end_time_str.strftime('%Y-%m-%d %H:%M:%S'))
+        vod_hls_qs = VodHlsSummary.objects.filter(uid=UID, time=end_time_stamp)
+        if vod_hls_qs.exists():
+            vod_hls = vod_hls_qs.first()
+            vod_hls.upload_frequency += 1
+            vod_hls.upload_duration += sec
+            vod_hls.save()
+        else:
+            VodHlsSummary.objects.create(uid=UID, time=end_time_stamp,
+                                         upload_duration=sec, upload_frequency=1)
+
         return response.json(0)
 
     def do_filter_playlist(self, request_dict, userID, response):
@@ -735,7 +751,7 @@ class CloudVodView(View):
 
                 url = "{SERVER_DOMAIN}web/paid2/fail.html".format(SERVER_DOMAIN=SERVER_DOMAIN)
 
-        if lang !='cn':
+        if lang != 'cn':
             status = 0
             url = "{SERVER_DOMAIN}web/paid2/en_fail.html".format(SERVER_DOMAIN=SERVER_DOMAIN)
 
@@ -892,8 +908,6 @@ class CloudVodView(View):
             return response.json(804)
 
 
-
-
 def deleteVodHls(request):
     response = ResponseObject()
     i = int(request.GET.get('i', 5))

+ 5 - 20
Controller/Cron/CronTaskController.py

@@ -110,26 +110,11 @@ class CronDelDataView(View):
     def delVodHls(response):
         nowTime = int(time.time())
         try:
-            with transaction.atomic():
-                month_ago_time = nowTime - 30 * 24 * 60 * 60  # 删除1个月前的数据
-                vod_hls_qs = VodHlsModel.objects.filter(endTime__lte=month_ago_time).order_by('endTime')
-                for vod_hls in vod_hls_qs:
-                    end_time = vod_hls.endTime
-                    end_time_str = datetime.datetime.fromtimestamp(int(end_time))
-                    this_month_start = datetime.datetime(end_time_str.year, end_time_str.month, 1)
-                    this_month_start_stamp = CommonService.str_to_timestamp(
-                        this_month_start.strftime('%Y-%m-%d %H:%M:%S'))
-                    vod_hls_summary_qs = VodHlsSummary.objects.filter(time=this_month_start_stamp,
-                                                                      uid=vod_hls.uid)
-                    if vod_hls_summary_qs.exists():
-                        vod_hls_summary = vod_hls_summary_qs.first()
-                        vod_hls_summary.upload_duration = vod_hls_summary.upload_duration + vod_hls.sec
-                        vod_hls_summary.upload_frequency = vod_hls_summary.upload_frequency + 1
-                        vod_hls_summary.save()
-                    else:
-                        VodHlsSummary.objects.create(time=this_month_start_stamp, uid=vod_hls.uid,
-                                                     upload_duration=vod_hls.sec, upload_frequency=1)
-                    vod_hls.delete()
+            cursor = connection.cursor()
+            month_ago_time = nowTime - 30 * 24 * 60 * 60  # 删除1个月前的数据
+            sql = 'DELETE FROM `vod_hls` WHERE endTime<{} LIMIT 50000'.format(month_ago_time)
+            cursor.execute(sql)
+            cursor.close()
             return response.json(0)
         except Exception as e:
             return response.json(500, repr(e))

+ 3 - 2
Controller/UserController.py

@@ -1847,7 +1847,7 @@ class noPasslogin(TemplateView):
         print("进来了")
         request.encoding = 'utf-8'
         request_dict = request.GET
-        language = request_dict.get('language', 'en')
+        language = request_dict.get('lang', 'en')
         response = ResponseObject(language)
         was_limited = getattr(request, 'limited', False)
         if was_limited is True:
@@ -2057,7 +2057,8 @@ class v3LoginView(TemplateView):
             else:
                 res['status'] = 0
                 user_qs.update(last_login=now_time, language=response.lang, region_country=number)
-        region_qs = CountryLanguageModel.objects.filter(country_id=region_country, language_id=lang_id[0]['id']).values('country_name')
+        region_qs = CountryLanguageModel.objects.filter(country_id=region_country, language_id=lang_id[0]['id']).values(
+            'country_name')
 
         res['rid'] = users['role__rid']
         res['roleName'] = users['role__roleName']