BusinessDataController.py 4.3 KB

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