# -*- encoding: utf-8 -*- """ @File : UserDataController.py @Time : 2022/8/16 10:44 @Author : peng @Email : zhangdongming@asj6.wecom.work @Software: PyCharm """ import requests from django.db.models import Count, Sum from django.views.generic.base import View from Model.models import VodHlsModel, VodHlsSummary from Service.CommonService import CommonService # 业务数据 class BusinessDataView(View): def get(self, request, *args, **kwargs): request.encoding = 'utf-8' operation = kwargs.get('operation') return self.validation(request.GET, request, operation) def post(self, request, *args, **kwargs): request.encoding = 'utf-8' operation = kwargs.get('operation') return self.validation(request.POST, request, operation) def validation(self, request_dict, request, operation): token_code, user_id, response = CommonService.verify_token_get_user_id(request_dict, request) if token_code != 0: return response.json(token_code) if operation == 'vodData': # 查询设备云存储数据 return self.query_device_vod_business(request_dict, response) elif operation == 'global/vodData': # 查询全球设备云存储数据 return self.query_global_device_vod_business(request, request_dict, response) else: return response.json(414) @classmethod def query_device_vod_business(cls, request_dict, response): """ 查询设备云存储数据 @param request_dict:请求参数 @request_dict startTime:开始时间 @request_dict endTime:结束时间 @param response:响应对象 @return: """ start_time = request_dict.get('startTime', None) end_time = request_dict.get('endTime', None) if not all([start_time, end_time]): 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'], 'uploadDuration': item['upload_duration'], 'uploadFrequency': item['upload_frequency'], 'playFrequency': 0, 'playDuration': 0 }) upload_device_count = len(vod_hls_summary_list) # 上传设备数量 res = { 'uploadDeviceCount': upload_device_count, 'vodData': vod_hls_summary_list } return response.json(0, res) except Exception as e: return response.json(500, repr(e)) @classmethod def query_global_device_vod_business(cls, request, request_dict, response): """ 查询全球设备云存储数据 @param request:请求 @param request_dict:请求参数 @param response:响应对象 @return: """ url_list = CommonService.get_domain_name() try: headers = { 'Authorization': request.META.get('HTTP_AUTHORIZATION') } upload_device_count = 0 vod_list = [] for url in url_list: url = url + request.path.replace('global/', '') res = requests.get(url=url, params=request_dict, headers=headers) result = res.json() if result['result_code'] == 0: upload_device_count += int(result['result']['uploadDeviceCount']) vod_list += result['result']['vodData'] else: return response.json(result['result_code'], result['result']) res = { 'uploadDeviceCount': upload_device_count, 'vodData': vod_list } return response.json(0, res) except Exception as e: return response.json(500, repr(e))