|
@@ -1,14 +1,18 @@
|
|
|
# @Author : Rocky
|
|
|
# @File : VodHlsService.py
|
|
|
# @Time : 2023/2/1 15:57
|
|
|
-import datetime
|
|
|
-
|
|
|
+import random
|
|
|
from django.db import connection
|
|
|
-from django.db.models import Count
|
|
|
+from django.db.models import Value, CharField, Count, Case, When, IntegerField, Sum
|
|
|
+from Model.models import VodHls01, VodHls02, VodHls03, VodHls04, VodHls05, VodHls06, VodHls07, VodHls08, VodHls09, \
|
|
|
+ VodHls10, VodHls11, VodHls12, VodHls13, VodHls14, VodHls15, VodHls16, VodHls17, VodHls18, VodHls19, VodHls20, \
|
|
|
+ VodHls21, VodHls22, VodHls23, VodHls24, VodHls25, VodHls26, VodHls27, VodHls28, VodHls29, VodHls30, VodHls31, \
|
|
|
+ VodHls32, VodHls33, VodHls34, VodHls35, VodHls36, VodHls37, VodHls38, VodHls39, VodHls40, VodHlsTag
|
|
|
|
|
|
-from Model.models import VodHlsMon, VodHlsTues, VodHlsWed, VodHlsThur, VodHlsFri, VodHlsSat, VodHlsSun, VodHlsTag, \
|
|
|
- AiService, VodHlsTagType
|
|
|
-from Service.CommonService import CommonService
|
|
|
+Vod_Hls_List = [VodHls01, VodHls02, VodHls03, VodHls04, VodHls05, VodHls06, VodHls07, VodHls08, VodHls09, VodHls10,
|
|
|
+ VodHls11, VodHls12, VodHls13, VodHls14, VodHls15, VodHls16, VodHls17, VodHls18, VodHls19, VodHls20,
|
|
|
+ VodHls21, VodHls22, VodHls23, VodHls24, VodHls25, VodHls26, VodHls27, VodHls28, VodHls29, VodHls30,
|
|
|
+ VodHls31, VodHls32, VodHls33, VodHls34, VodHls35, VodHls36, VodHls37, VodHls38, VodHls39, VodHls40]
|
|
|
|
|
|
|
|
|
class SplitVodHlsObject:
|
|
@@ -19,159 +23,66 @@ class SplitVodHlsObject:
|
|
|
"""
|
|
|
分表保存云存信息数据
|
|
|
"""
|
|
|
- start_time = kwargs.get('start_time')
|
|
|
- week = datetime.datetime.fromtimestamp(int(start_time)).isoweekday()
|
|
|
- if week == 1:
|
|
|
- vod_hls_mon = VodHlsMon.objects.create(**kwargs)
|
|
|
- return vod_hls_mon, week
|
|
|
- elif week == 2:
|
|
|
- vod_hls_tues = VodHlsTues.objects.create(**kwargs)
|
|
|
- return vod_hls_tues, week
|
|
|
- elif week == 3:
|
|
|
- vod_hls_wed = VodHlsWed.objects.create(**kwargs)
|
|
|
- return vod_hls_wed, week
|
|
|
- elif week == 4:
|
|
|
- vod_hls_thur = VodHlsThur.objects.create(**kwargs)
|
|
|
- return vod_hls_thur, week
|
|
|
- elif week == 5:
|
|
|
- vod_hls_fri = VodHlsFri.objects.create(**kwargs)
|
|
|
- return vod_hls_fri, week
|
|
|
- elif week == 6:
|
|
|
- vod_hls_sat = VodHlsSat.objects.create(**kwargs)
|
|
|
- return vod_hls_sat, week
|
|
|
- elif week == 7:
|
|
|
- vod_hls_sun = VodHlsSun.objects.create(**kwargs)
|
|
|
- return vod_hls_sun, week
|
|
|
+ vod_hls_model = random.choice(Vod_Hls_List)
|
|
|
+ tal_num = Vod_Hls_List.index(vod_hls_model) + 1
|
|
|
+ vod_hls_obj = vod_hls_model.objects.create(**kwargs)
|
|
|
+ return vod_hls_obj, tal_num
|
|
|
|
|
|
def del_vod_hls_data(self, **kwargs):
|
|
|
"""
|
|
|
分表删除云存信息数据
|
|
|
"""
|
|
|
- VodHlsMon.objects.filter(**kwargs).delete()
|
|
|
- VodHlsTues.objects.filter(**kwargs).delete()
|
|
|
- VodHlsWed.objects.filter(**kwargs).delete()
|
|
|
- VodHlsThur.objects.filter(**kwargs).delete()
|
|
|
- VodHlsFri.objects.filter(**kwargs).delete()
|
|
|
- VodHlsSat.objects.filter(**kwargs).delete()
|
|
|
- VodHlsSun.objects.filter(**kwargs).delete()
|
|
|
+ if 'id__in' in kwargs:
|
|
|
+ for vod_id in kwargs['id__in']:
|
|
|
+ tal_index = int(vod_id[:2]) - 11
|
|
|
+ temp_id = vod_id[2:]
|
|
|
+ Vod_Hls_List[tal_index].objects.filter(id=temp_id).delete()
|
|
|
+ else:
|
|
|
+ for model in Vod_Hls_List:
|
|
|
+ model.objects.filter(**kwargs).delete()
|
|
|
|
|
|
def get_vod_hls_data(self, **kwargs):
|
|
|
"""
|
|
|
分表获取云存信息数据
|
|
|
@return: vod_hls
|
|
|
"""
|
|
|
- vod_hls = VodHlsMon.objects.filter(pk=-1)
|
|
|
- if 'start_time' in kwargs:
|
|
|
- start_time = kwargs.get('start_time')
|
|
|
- week = datetime.datetime.fromtimestamp(int(start_time)).isoweekday()
|
|
|
- if week == 1:
|
|
|
- vod_hls = VodHlsMon.objects.filter(**kwargs)
|
|
|
- elif week == 2:
|
|
|
- vod_hls = VodHlsTues.objects.filter(**kwargs)
|
|
|
- elif week == 3:
|
|
|
- vod_hls = VodHlsWed.objects.filter(**kwargs)
|
|
|
- elif week == 4:
|
|
|
- vod_hls = VodHlsThur.objects.filter(**kwargs)
|
|
|
- elif week == 5:
|
|
|
- vod_hls = VodHlsFri.objects.filter(**kwargs)
|
|
|
- elif week == 6:
|
|
|
- vod_hls = VodHlsSat.objects.filter(**kwargs)
|
|
|
- elif week == 7:
|
|
|
- vod_hls = VodHlsSun.objects.filter(**kwargs)
|
|
|
- return vod_hls
|
|
|
- if 'start_time__range' in kwargs:
|
|
|
- start_time, end_time = kwargs.get('start_time__range')
|
|
|
- vod_hls_mon = VodHlsMon.objects.filter(pk=-1)
|
|
|
- vod_hls_tus = VodHlsTues.objects.filter(pk=-1)
|
|
|
- vod_hls_wed = VodHlsWed.objects.filter(pk=-1)
|
|
|
- vod_hls_thur = VodHlsThur.objects.filter(pk=-1)
|
|
|
- vod_hls_fri = VodHlsFri.objects.filter(pk=-1)
|
|
|
- vod_hls_sat = VodHlsSat.objects.filter(pk=-1)
|
|
|
- vod_hls_sun = VodHlsSun.objects.filter(pk=-1)
|
|
|
- start_time = datetime.datetime.fromtimestamp(int(start_time))
|
|
|
- end_time = datetime.datetime.fromtimestamp(int(end_time))
|
|
|
- time_list = CommonService.cutting_time_stamp(start_time, end_time)
|
|
|
- day_list = []
|
|
|
- type_list = kwargs.get('type_list')
|
|
|
- for time_item in time_list:
|
|
|
- week = datetime.datetime.fromtimestamp(int(time_item[0])).isoweekday()
|
|
|
- if week not in day_list:
|
|
|
- day_list.append(week)
|
|
|
- for week in day_list:
|
|
|
- kwargs['type_list'] = type_list
|
|
|
- if week == 1:
|
|
|
- kwargs = self.vod_query_param(week, **kwargs)
|
|
|
- if not kwargs:
|
|
|
- return vod_hls_mon
|
|
|
- vod_hls_mon = VodHlsMon.objects.filter(**kwargs)
|
|
|
- elif week == 2:
|
|
|
- kwargs = self.vod_query_param(week, **kwargs)
|
|
|
- if not kwargs:
|
|
|
- return vod_hls_tus
|
|
|
- vod_hls_tus = VodHlsTues.objects.filter(**kwargs)
|
|
|
- elif week == 3:
|
|
|
- kwargs = self.vod_query_param(week, **kwargs)
|
|
|
- if not kwargs:
|
|
|
- return vod_hls_wed
|
|
|
- vod_hls_wed = VodHlsWed.objects.filter(**kwargs)
|
|
|
- elif week == 4:
|
|
|
- kwargs = self.vod_query_param(week, **kwargs)
|
|
|
- if not kwargs:
|
|
|
- return vod_hls_thur
|
|
|
- vod_hls_thur = VodHlsThur.objects.filter(**kwargs)
|
|
|
- elif week == 5:
|
|
|
- kwargs = self.vod_query_param(week, **kwargs)
|
|
|
- if not kwargs:
|
|
|
- return vod_hls_fri
|
|
|
- vod_hls_fri = VodHlsFri.objects.filter(**kwargs)
|
|
|
- elif week == 6:
|
|
|
- kwargs = self.vod_query_param(week, **kwargs)
|
|
|
- if not kwargs:
|
|
|
- return vod_hls_sat
|
|
|
- vod_hls_sat = VodHlsSat.objects.filter(**kwargs)
|
|
|
- elif week == 7:
|
|
|
- kwargs = self.vod_query_param(week, **kwargs)
|
|
|
- if not kwargs:
|
|
|
- return vod_hls_sun
|
|
|
- vod_hls_sun = VodHlsSun.objects.filter(**kwargs)
|
|
|
- vod_hls = vod_hls.union(vod_hls_mon, vod_hls_tus, vod_hls_wed, vod_hls_thur, vod_hls_fri, vod_hls_sat,
|
|
|
- vod_hls_sun)
|
|
|
- return vod_hls
|
|
|
- vod_hls_mon = VodHlsMon.objects.filter(**kwargs)
|
|
|
- vod_hls_tus = VodHlsTues.objects.filter(**kwargs)
|
|
|
- vod_hls_wed = VodHlsWed.objects.filter(**kwargs)
|
|
|
- vod_hls_thur = VodHlsThur.objects.filter(**kwargs)
|
|
|
- vod_hls_fri = VodHlsFri.objects.filter(**kwargs)
|
|
|
- vod_hls_sat = VodHlsSat.objects.filter(**kwargs)
|
|
|
- vod_hls_sun = VodHlsSun.objects.filter(**kwargs)
|
|
|
-
|
|
|
- vod_hls = vod_hls.union(vod_hls_mon, vod_hls_tus, vod_hls_wed, vod_hls_thur, vod_hls_fri, vod_hls_sat,
|
|
|
- vod_hls_sun)
|
|
|
- return vod_hls
|
|
|
+ vod_hls_union = VodHls01.objects.none()
|
|
|
+ if kwargs['type_list']:
|
|
|
+ kwargs = self.vod_query_param(**kwargs)
|
|
|
+ for item in kwargs['id__in']:
|
|
|
+ tab_val = str(item['tab_val'] + 10)
|
|
|
+ vod_hls_union = vod_hls_union.union(
|
|
|
+ Vod_Hls_List[item['tab_val'] - 1].objects.filter(id=item['vod_id']).annotate(
|
|
|
+ tab_val=Value(tab_val, output_field=CharField())))
|
|
|
+ else:
|
|
|
+ kwargs.pop('type_list')
|
|
|
+ for index, vod_hls_model in enumerate(Vod_Hls_List):
|
|
|
+ tab_val = str(index + 11)
|
|
|
+ vod_hls_union = vod_hls_union.union(vod_hls_model.objects.filter(**kwargs).annotate(
|
|
|
+ tab_val=Value(tab_val, output_field=CharField())))
|
|
|
+ return vod_hls_union
|
|
|
|
|
|
def get_vod_hls_date(self, **kwargs):
|
|
|
"""
|
|
|
分表获取云存日期信息数据
|
|
|
@return: vod_hls
|
|
|
"""
|
|
|
-
|
|
|
- vod_hls_mon = VodHlsMon.objects.extra(select={'date': "FROM_UNIXTIME(start_time,'%%Y-%%m-%%d')"}).values(
|
|
|
- 'date').filter(**kwargs).annotate(count=Count('start_time')).order_by('-date')
|
|
|
- vod_hls_tus = VodHlsTues.objects.extra(select={'date': "FROM_UNIXTIME(start_time,'%%Y-%%m-%%d')"}).values(
|
|
|
- 'date').filter(**kwargs).annotate(count=Count('start_time')).order_by('-date')
|
|
|
- vod_hls_wed = VodHlsWed.objects.extra(select={'date': "FROM_UNIXTIME(start_time,'%%Y-%%m-%%d')"}).values(
|
|
|
- 'date').filter(**kwargs).annotate(count=Count('start_time')).order_by('-date')
|
|
|
- vod_hls_thur = VodHlsThur.objects.extra(select={'date': "FROM_UNIXTIME(start_time,'%%Y-%%m-%%d')"}).values(
|
|
|
- 'date').filter(**kwargs).annotate(count=Count('start_time')).order_by('-date')
|
|
|
- vod_hls_fri = VodHlsFri.objects.extra(select={'date': "FROM_UNIXTIME(start_time,'%%Y-%%m-%%d')"}).values(
|
|
|
- 'date').filter(**kwargs).annotate(count=Count('start_time')).order_by('-date')
|
|
|
- vod_hls_sat = VodHlsSat.objects.extra(select={'date': "FROM_UNIXTIME(start_time,'%%Y-%%m-%%d')"}).values(
|
|
|
- 'date').filter(**kwargs).annotate(count=Count('start_time')).order_by('-date')
|
|
|
- vod_hls_sun = VodHlsSun.objects.extra(select={'date': "FROM_UNIXTIME(start_time,'%%Y-%%m-%%d')"}).values(
|
|
|
- 'date').filter(**kwargs).annotate(count=Count('start_time')).order_by('-date')
|
|
|
-
|
|
|
- vod_hls = vod_hls_mon.union(vod_hls_tus, vod_hls_wed, vod_hls_thur, vod_hls_fri, vod_hls_sat, vod_hls_sun)
|
|
|
- return vod_hls
|
|
|
+ vod_hls_union = VodHls01.objects.none()
|
|
|
+ for vod_hls_model in Vod_Hls_List:
|
|
|
+ vod_hls_union = vod_hls_union.union(vod_hls_model.objects.extra(
|
|
|
+ select={'date': "FROM_UNIXTIME(start_time,'%%Y-%%m-%%d')"}).values('date', 'start_time').filter(
|
|
|
+ **kwargs).annotate(
|
|
|
+ count=Count('start_time')).order_by('-date'))
|
|
|
+ result = {}
|
|
|
+ for item in vod_hls_union:
|
|
|
+ if item['date'] not in result:
|
|
|
+ result[item['date']] = item['count']
|
|
|
+ else:
|
|
|
+ result[item['date']] += item['count']
|
|
|
+ res = []
|
|
|
+ for key, value in result.items():
|
|
|
+ res.append({'date': key, 'count': value})
|
|
|
+ return res
|
|
|
|
|
|
@classmethod
|
|
|
def cloud_vod_hls_tag(cls, vod_id, num, uid, start_time, sec):
|
|
@@ -193,15 +104,16 @@ class SplitVodHlsObject:
|
|
|
vod_tag_qs.update(vod_hls_id=vod_id, tab_num=num)
|
|
|
return True
|
|
|
except Exception as e:
|
|
|
- print('cloud_vod_hls_tag异常详情,uid:{},errLine:{},errMsg:{}'.format(uid, e.__traceback__.tb_lineno, repr(e)))
|
|
|
+ print(
|
|
|
+ 'cloud_vod_hls_tag异常详情,uid:{},errLine:{},errMsg:{}'.format(uid, e.__traceback__.tb_lineno, repr(e)))
|
|
|
return False
|
|
|
|
|
|
@classmethod
|
|
|
- def vod_query_param(cls, week, **kwargs):
|
|
|
+ def vod_query_param(cls, **kwargs):
|
|
|
types = kwargs.get('type_list')
|
|
|
vod_ids = cls.query_tag_by_types(kwargs.get('uid'),
|
|
|
kwargs.get('start_time__range'),
|
|
|
- kwargs.get('type_list'), week)
|
|
|
+ kwargs.get('type_list'))
|
|
|
if vod_ids:
|
|
|
kwargs['id__in'] = vod_ids
|
|
|
if types and not vod_ids:
|
|
@@ -210,7 +122,7 @@ class SplitVodHlsObject:
|
|
|
return kwargs
|
|
|
|
|
|
@classmethod
|
|
|
- def query_tag_by_types(cls, uid, time, types, num):
|
|
|
+ def query_tag_by_types(cls, uid, time, types):
|
|
|
"""
|
|
|
根据类型查询云存标签关联ID
|
|
|
@return:
|
|
@@ -219,36 +131,37 @@ class SplitVodHlsObject:
|
|
|
if not types or len(types) == 0:
|
|
|
return []
|
|
|
cursor = connection.cursor()
|
|
|
- param_list = [int(time[0]), int(time[1]), uid, num]
|
|
|
- sql = 'SELECT vod_hls_id FROM '
|
|
|
+ param_list = [int(time[0]), int(time[1]), uid]
|
|
|
+ sql = 'SELECT vod_hls_id, tab_num FROM '
|
|
|
sql += 'vod_hls_tag vht INNER JOIN vod_hls_tag_type vhtt ON vht.id = vhtt.tag_id '
|
|
|
sql += 'WHERE vht.ai_event_time >= %s AND vht.ai_event_time <= %s '
|
|
|
sql += 'AND vht.uid = %s '
|
|
|
- sql += 'AND tab_num = %s '
|
|
|
if types:
|
|
|
sql += 'AND vhtt.type IN %s '
|
|
|
param_list.append(types)
|
|
|
- sql += 'GROUP BY vht.vod_hls_id '
|
|
|
|
|
|
cursor.execute(sql, param_list)
|
|
|
data_list = cursor.fetchall()
|
|
|
cursor.close() # 执行完,关闭
|
|
|
connection.close()
|
|
|
- data_list = [val[0] for val in data_list]
|
|
|
+ data_list = [{'vod_id': val[0], 'tab_val': val[1]} for val in data_list]
|
|
|
return data_list
|
|
|
except Exception as e:
|
|
|
print('异常详情,errLine:{}, errMsg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
|
|
|
return False
|
|
|
|
|
|
@classmethod
|
|
|
- def query_tag_type_list(cls, start_time, vod_ids):
|
|
|
+ def query_tag_type_list(cls, vod_ids):
|
|
|
"""
|
|
|
根据云存ID获取AI类型
|
|
|
@return:
|
|
|
"""
|
|
|
try:
|
|
|
- week = datetime.datetime.fromtimestamp(int(start_time)).isoweekday()
|
|
|
- qs = VodHlsTag.objects.filter(vod_hls_id__in=vod_ids, tab_num=int(week)).values('id', 'vod_hls_id')
|
|
|
+ qs = VodHlsTag.objects.none()
|
|
|
+ for vod_id in vod_ids:
|
|
|
+ tab_val = int(vod_id[:2]) - 10
|
|
|
+ temp_id = vod_id[2:]
|
|
|
+ qs = qs.union(VodHlsTag.objects.filter(vod_hls_id=temp_id, tab_num=tab_val).values('id', 'vod_hls_id'))
|
|
|
if not qs:
|
|
|
return []
|
|
|
return list(qs)
|