VodHlsService.py 8.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178
  1. # @Author : Rocky
  2. # @File : VodHlsService.py
  3. # @Time : 2023/2/1 15:57
  4. import datetime
  5. from django.db.models import Count
  6. from Model.models import VodHlsMon, VodHlsTues, VodHlsWed, VodHlsThur, VodHlsFri, VodHlsSat, VodHlsSun, VodHlsTag, \
  7. AiService
  8. from Service.CommonService import CommonService
  9. class SplitVodHlsObject:
  10. # VodHls分表功能类
  11. @classmethod
  12. def creat_vod_hls_data(cls, **kwargs):
  13. """
  14. 分表保存云存信息数据
  15. """
  16. start_time = kwargs.get('start_time')
  17. week = datetime.datetime.fromtimestamp(int(start_time)).isoweekday()
  18. if week == 1:
  19. vod_hls_mon = VodHlsMon.objects.create(**kwargs)
  20. return vod_hls_mon, week
  21. elif week == 2:
  22. vod_hls_tues = VodHlsTues.objects.create(**kwargs)
  23. return vod_hls_tues, week
  24. elif week == 3:
  25. vod_hls_wed = VodHlsWed.objects.create(**kwargs)
  26. return vod_hls_wed, week
  27. elif week == 4:
  28. vod_hls_thur = VodHlsThur.objects.create(**kwargs)
  29. return vod_hls_thur, week
  30. elif week == 5:
  31. vod_hls_fri = VodHlsFri.objects.create(**kwargs)
  32. return vod_hls_fri, week
  33. elif week == 6:
  34. vod_hls_sat = VodHlsSat.objects.create(**kwargs)
  35. return vod_hls_sat, week
  36. elif week == 7:
  37. vod_hls_sun = VodHlsSun.objects.create(**kwargs)
  38. return vod_hls_sun, week
  39. def del_vod_hls_data(self, **kwargs):
  40. """
  41. 分表删除云存信息数据
  42. """
  43. VodHlsMon.objects.filter(**kwargs).delete()
  44. VodHlsTues.objects.filter(**kwargs).delete()
  45. VodHlsWed.objects.filter(**kwargs).delete()
  46. VodHlsThur.objects.filter(**kwargs).delete()
  47. VodHlsFri.objects.filter(**kwargs).delete()
  48. VodHlsSat.objects.filter(**kwargs).delete()
  49. VodHlsSun.objects.filter(**kwargs).delete()
  50. def get_vod_hls_data(self, **kwargs):
  51. """
  52. 分表获取云存信息数据
  53. @return: vod_hls
  54. """
  55. vod_hls = VodHlsMon.objects.filter(pk=-1)
  56. if 'start_time' in kwargs:
  57. start_time = kwargs.get('start_time')
  58. week = datetime.datetime.fromtimestamp(int(start_time)).isoweekday()
  59. if week == 1:
  60. vod_hls = VodHlsMon.objects.filter(**kwargs)
  61. elif week == 2:
  62. vod_hls = VodHlsTues.objects.filter(**kwargs)
  63. elif week == 3:
  64. vod_hls = VodHlsWed.objects.filter(**kwargs)
  65. elif week == 4:
  66. vod_hls = VodHlsThur.objects.filter(**kwargs)
  67. elif week == 5:
  68. vod_hls = VodHlsFri.objects.filter(**kwargs)
  69. elif week == 6:
  70. vod_hls = VodHlsSat.objects.filter(**kwargs)
  71. elif week == 7:
  72. vod_hls = VodHlsSun.objects.filter(**kwargs)
  73. return vod_hls
  74. if 'start_time__range' in kwargs:
  75. start_time, end_time = kwargs.get('start_time__range')
  76. vod_hls_mon = VodHlsMon.objects.filter(pk=-1)
  77. vod_hls_tus = VodHlsTues.objects.filter(pk=-1)
  78. vod_hls_wed = VodHlsWed.objects.filter(pk=-1)
  79. vod_hls_thur = VodHlsThur.objects.filter(pk=-1)
  80. vod_hls_fri = VodHlsFri.objects.filter(pk=-1)
  81. vod_hls_sat = VodHlsSat.objects.filter(pk=-1)
  82. vod_hls_sun = VodHlsSun.objects.filter(pk=-1)
  83. start_time = datetime.datetime.fromtimestamp(int(start_time))
  84. end_time = datetime.datetime.fromtimestamp(int(end_time))
  85. time_list = CommonService.cutting_time(start_time, end_time, 'day')
  86. day_list = []
  87. for time_item in time_list:
  88. week = datetime.datetime.fromtimestamp(int(time_item[0])).isoweekday()
  89. if week not in day_list:
  90. day_list.append(week)
  91. for week in day_list:
  92. if week == 1:
  93. vod_hls_mon = VodHlsMon.objects.filter(**kwargs)
  94. elif week == 2:
  95. vod_hls_tus = VodHlsTues.objects.filter(**kwargs)
  96. elif week == 3:
  97. vod_hls_wed = VodHlsWed.objects.filter(**kwargs)
  98. elif week == 4:
  99. vod_hls_thur = VodHlsThur.objects.filter(**kwargs)
  100. elif week == 5:
  101. vod_hls_fri = VodHlsFri.objects.filter(**kwargs)
  102. elif week == 6:
  103. vod_hls_sat = VodHlsSat.objects.filter(**kwargs)
  104. elif week == 7:
  105. vod_hls_sun = VodHlsSun.objects.filter(**kwargs)
  106. vod_hls = vod_hls.union(vod_hls_mon, vod_hls_tus, vod_hls_wed, vod_hls_thur, vod_hls_fri, vod_hls_sat,
  107. vod_hls_sun)
  108. return vod_hls
  109. vod_hls_mon = VodHlsMon.objects.filter(**kwargs)
  110. vod_hls_tus = VodHlsTues.objects.filter(**kwargs)
  111. vod_hls_wed = VodHlsWed.objects.filter(**kwargs)
  112. vod_hls_thur = VodHlsThur.objects.filter(**kwargs)
  113. vod_hls_fri = VodHlsFri.objects.filter(**kwargs)
  114. vod_hls_sat = VodHlsSat.objects.filter(**kwargs)
  115. vod_hls_sun = VodHlsSun.objects.filter(**kwargs)
  116. vod_hls = vod_hls.union(vod_hls_mon, vod_hls_tus, vod_hls_wed, vod_hls_thur, vod_hls_fri, vod_hls_sat,
  117. vod_hls_sun)
  118. return vod_hls
  119. def get_vod_hls_date(self, **kwargs):
  120. """
  121. 分表获取云存日期信息数据
  122. @return: vod_hls
  123. """
  124. vod_hls_mon = VodHlsMon.objects.extra(select={'date': "FROM_UNIXTIME(start_time,'%%Y-%%m-%%d')"}).values(
  125. 'date').filter(**kwargs).annotate(count=Count('start_time')).order_by('-date')
  126. vod_hls_tus = VodHlsTues.objects.extra(select={'date': "FROM_UNIXTIME(start_time,'%%Y-%%m-%%d')"}).values(
  127. 'date').filter(**kwargs).annotate(count=Count('start_time')).order_by('-date')
  128. vod_hls_wed = VodHlsWed.objects.extra(select={'date': "FROM_UNIXTIME(start_time,'%%Y-%%m-%%d')"}).values(
  129. 'date').filter(**kwargs).annotate(count=Count('start_time')).order_by('-date')
  130. vod_hls_thur = VodHlsThur.objects.extra(select={'date': "FROM_UNIXTIME(start_time,'%%Y-%%m-%%d')"}).values(
  131. 'date').filter(**kwargs).annotate(count=Count('start_time')).order_by('-date')
  132. vod_hls_fri = VodHlsFri.objects.extra(select={'date': "FROM_UNIXTIME(start_time,'%%Y-%%m-%%d')"}).values(
  133. 'date').filter(**kwargs).annotate(count=Count('start_time')).order_by('-date')
  134. vod_hls_sat = VodHlsSat.objects.extra(select={'date': "FROM_UNIXTIME(start_time,'%%Y-%%m-%%d')"}).values(
  135. 'date').filter(**kwargs).annotate(count=Count('start_time')).order_by('-date')
  136. vod_hls_sun = VodHlsSun.objects.extra(select={'date': "FROM_UNIXTIME(start_time,'%%Y-%%m-%%d')"}).values(
  137. 'date').filter(**kwargs).annotate(count=Count('start_time')).order_by('-date')
  138. vod_hls = vod_hls_mon.union(vod_hls_tus, vod_hls_wed, vod_hls_thur, vod_hls_fri, vod_hls_sat, vod_hls_sun)
  139. return vod_hls
  140. @classmethod
  141. def cloud_vod_hls_tag(cls, vod_id, num, uid, start_time):
  142. """
  143. 云存回调信息关联标签
  144. @param vod_id: 云存回放信息id
  145. @param num: 所在表编号
  146. @param uid: 设备UID
  147. @param start_time: 云存开始时间
  148. @return: True | False
  149. """
  150. try:
  151. # 查询设备是否有使用中的ai服务
  152. # ai_service_qs = AiService.objects \
  153. # .filter(uid=uid, detect_status=1, use_status=1, endTime__gt=start_time) \
  154. # .values('detect_group')
  155. # if not ai_service_qs.exists():
  156. # return False
  157. start_time = int(start_time)
  158. end_time = start_time + 5
  159. vod_tag_qs = VodHlsTag.objects.filter(ai_event_time__range=(start_time, end_time), uid=uid)
  160. if not vod_tag_qs.exists():
  161. return False
  162. vod_tag_qs.update(vod_hls_id=vod_id, tab_num=num)
  163. return True
  164. except Exception as e:
  165. print('异常详情,errLine:{}, errMsg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
  166. return False