|
@@ -11,7 +11,7 @@ import requests
|
|
|
from django.db.models import Q, Count, Sum
|
|
|
from django.views.generic.base import View
|
|
|
|
|
|
-from Model.models import VodHlsModel, VideoPlaybackTimeModel
|
|
|
+from Model.models import VodHlsModel, VideoPlaybackTimeModel, VodHlsSummary
|
|
|
from Service.CommonService import CommonService
|
|
|
|
|
|
|
|
@@ -54,15 +54,31 @@ class BusinessDataView(View):
|
|
|
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__range=(start_time, end_time)).values()
|
|
|
vod_hls_qs = VodHlsModel.objects.filter(time__range=(start_time, end_time))
|
|
|
video_play_qs = VideoPlaybackTimeModel.objects.filter(startTime__range=(start_time, end_time),
|
|
|
playMode='could')
|
|
|
upload_duration_qs = vod_hls_qs.values('uid').annotate(uploadFrequency=Count('uid')).order_by(
|
|
|
'uploadFrequency')
|
|
|
- upload_device_count = len(upload_duration_qs) # 上传设备数量
|
|
|
+ upload_device_count = len(upload_duration_qs) + len(vod_hls_summary_qs) # 上传设备数量
|
|
|
uid_list = []
|
|
|
for item in upload_duration_qs:
|
|
|
item['uploadDuration'] = vod_hls_qs.filter(uid=item['uid']).aggregate(total=Sum('sec'))['total']
|
|
|
+ upload_duration_list = list(upload_duration_qs)
|
|
|
+ for each in vod_hls_summary_qs:
|
|
|
+ flag = 0
|
|
|
+ for item in upload_duration_list:
|
|
|
+ if each['uid'] == item['uid']:
|
|
|
+ item['uploadDuration'] += each['sec']
|
|
|
+ item['uploadFrequency'] += each['upload_frequency']
|
|
|
+ flag = 1
|
|
|
+ if flag == 0:
|
|
|
+ upload_duration_list.append({
|
|
|
+ 'uid': each['uid'],
|
|
|
+ 'uploadDuration': each['sec'],
|
|
|
+ 'uploadFrequency': each['upload_frequency']
|
|
|
+ })
|
|
|
+ for item in upload_duration_list:
|
|
|
item['playDuration'] = video_play_qs.filter(uid=item['uid']).aggregate(total=Sum('duration'))['total']
|
|
|
item['playDuration'] = item['playDuration'] if item['playDuration'] else 0
|
|
|
item['playFrequency'] = video_play_qs.filter(uid=item['uid'], playMode='cloud').count()
|
|
@@ -80,7 +96,7 @@ class BusinessDataView(View):
|
|
|
res = {
|
|
|
'uploadDeviceCount': upload_device_count,
|
|
|
'playDeviceCount': play_device_count,
|
|
|
- 'vodData': list(upload_duration_qs) + list(play_duration_qs)
|
|
|
+ 'vodData': upload_duration_list + list(play_duration_qs)
|
|
|
}
|
|
|
return response.json(0, res)
|
|
|
except Exception as e:
|