BusinessDataController.py 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  1. # -*- encoding: utf-8 -*-
  2. """
  3. @File : UserDataController.py
  4. @Time : 2022/8/16 10:44
  5. @Author : peng
  6. @Email : zhangdongming@asj6.wecom.work
  7. @Software: PyCharm
  8. """
  9. import requests
  10. from django.db.models import Count, Sum
  11. from django.views.generic.base import View
  12. from Model.models import VodHlsModel, VodHlsSummary
  13. from Service.CommonService import CommonService
  14. # 业务数据
  15. class BusinessDataView(View):
  16. def get(self, request, *args, **kwargs):
  17. request.encoding = 'utf-8'
  18. operation = kwargs.get('operation')
  19. return self.validation(request.GET, request, operation)
  20. def post(self, request, *args, **kwargs):
  21. request.encoding = 'utf-8'
  22. operation = kwargs.get('operation')
  23. return self.validation(request.POST, request, operation)
  24. def validation(self, request_dict, request, operation):
  25. token_code, user_id, response = CommonService.verify_token_get_user_id(request_dict, request)
  26. if token_code != 0:
  27. return response.json(token_code)
  28. if operation == 'vodData': # 查询设备云存储数据
  29. return self.query_device_vod_business(request_dict, response)
  30. elif operation == 'global/vodData': # 查询全球设备云存储数据
  31. return self.query_global_device_vod_business(request, request_dict, response)
  32. else:
  33. return response.json(414)
  34. @classmethod
  35. def query_device_vod_business(cls, request_dict, response):
  36. """
  37. 查询设备云存储数据
  38. @param request_dict:请求参数
  39. @request_dict startTime:开始时间
  40. @request_dict endTime:结束时间
  41. @param response:响应对象
  42. @return:
  43. """
  44. start_time = request_dict.get('startTime', None)
  45. end_time = request_dict.get('endTime', None)
  46. if not all([start_time, end_time]):
  47. return response.json(444, {'error param': 'startTime or endTime'})
  48. try:
  49. vod_hls_summary_qs = VodHlsSummary.objects.filter(time__gte=start_time, time__lt=end_time).values()
  50. vod_hls_qs = VodHlsModel.objects.filter(endTime__gte=start_time, endTime__lt=end_time).values(
  51. 'uid').annotate(uploadFrequency=Count('uid'), uploadDuration=Sum('sec')).order_by('uploadFrequency')
  52. vod_hls_summary_list = list(vod_hls_summary_qs)
  53. for item in vod_hls_qs:
  54. flag = 0
  55. for each in vod_hls_summary_list:
  56. if each['uid'] == item['uid']:
  57. each['upload_duration'] += item['uploadDuration']
  58. each['upload_frequency'] += item['uploadFrequency']
  59. flag = 1
  60. if flag == 0:
  61. vod_hls_summary_list.append({
  62. 'uid': item['uid'],
  63. 'upload_duration': item['uploadDuration'],
  64. 'upload_frequency': item['uploadFrequency'],
  65. 'play_frequency': 0,
  66. 'play_duration': 0
  67. })
  68. vod_hls_result = []
  69. for item in vod_hls_summary_list:
  70. vod_hls_result.append({
  71. 'uid': item['uid'],
  72. 'uploadDuration': item['upload_duration'],
  73. 'uploadFrequency': item['upload_frequency'],
  74. 'playFrequency': item['play_frequency'],
  75. 'playDuration': item['play_duration']
  76. })
  77. upload_device_count = len(vod_hls_result) # 上传设备数量
  78. res = {
  79. 'uploadDeviceCount': upload_device_count,
  80. 'vodData': vod_hls_result
  81. }
  82. return response.json(0, res)
  83. except Exception as e:
  84. return response.json(500, repr(e))
  85. @classmethod
  86. def query_global_device_vod_business(cls, request, request_dict, response):
  87. """
  88. 查询全球设备云存储数据
  89. @param request:请求
  90. @param request_dict:请求参数
  91. @param response:响应对象
  92. @return:
  93. """
  94. url_list = CommonService.get_domain_name()
  95. try:
  96. headers = {
  97. 'Authorization': request.META.get('HTTP_AUTHORIZATION')
  98. }
  99. upload_device_count = 0
  100. vod_list = []
  101. for url in url_list:
  102. url = url + request.path.replace('global/', '')
  103. res = requests.get(url=url, params=request_dict, headers=headers)
  104. result = res.json()
  105. if result['result_code'] == 0:
  106. upload_device_count += int(result['result']['uploadDeviceCount'])
  107. vod_list += result['result']['vodData']
  108. else:
  109. return response.json(result['result_code'], result['result'])
  110. res = {
  111. 'uploadDeviceCount': upload_device_count,
  112. 'vodData': vod_list
  113. }
  114. return response.json(0, res)
  115. except Exception as e:
  116. return response.json(500, repr(e))