CloudPhotoController.py 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157
  1. # -*- encoding: utf-8 -*-
  2. """
  3. @File : CronCloudPhotoController.py
  4. @Time : 2022/11/3 10:16
  5. @Author : stephen
  6. @Email : zhangdongming@asj6.wecom.work
  7. @Software: PyCharm
  8. """
  9. import logging
  10. import time
  11. from django.db import transaction
  12. from django.views import View
  13. from Ansjer.cn_config.config_test import PUSH_CLOUD_PHOTO
  14. from Ansjer.config import ACCESS_KEY_ID, SECRET_ACCESS_KEY, REGION_NAME
  15. from Model.models import DeviceCloudPhotoInfo, Device_Info, CloudPhotoBGM, DevicePicturePushInfo
  16. from Object.AWS.AmazonS3Util import AmazonS3Util
  17. from Object.ResponseObject import ResponseObject
  18. from Object.TokenObject import TokenObject
  19. LOGGER = logging.getLogger('info')
  20. class CronCloudPhotoView(View):
  21. def get(self, request, *args, **kwargs):
  22. request.encoding = 'utf-8'
  23. operation = kwargs.get('operation')
  24. return self.validation(request.GET, request, operation)
  25. def post(self, request, *args, **kwargs):
  26. request.encoding = 'utf-8'
  27. operation = kwargs.get('operation')
  28. return self.validation(request.POST, request, operation)
  29. def validation(self, request_dict, request, operation):
  30. token = TokenObject(request.META.get('HTTP_AUTHORIZATION'))
  31. lang = request_dict.get('lang', token.lang)
  32. response = ResponseObject(lang)
  33. if token.code != 0:
  34. return response.json(token.code)
  35. user_id = token.userID
  36. if operation == 'get-photo':
  37. return self.save_cloud_photo(user_id, request_dict, response)
  38. elif operation == 'bgm-list':
  39. return self.get_bgm_list(response)
  40. elif operation == 'video-list':
  41. return self.query_cloud_photo_page(user_id, request_dict, response)
  42. elif operation == 'video-del':
  43. return self.del_cloud_photo(request_dict, response)
  44. else:
  45. return response.json(404)
  46. @classmethod
  47. def save_cloud_photo(cls, user_id, request_dict, response):
  48. """
  49. 保存云相册
  50. """
  51. try:
  52. with transaction.atomic():
  53. status = request_dict.get('status', None)
  54. uid = request_dict.get('uid', None)
  55. if not all([status, uid, user_id]):
  56. return response(444)
  57. device_info_qs = Device_Info.objects.filter(vodPrimaryUserID=user_id, uid=uid).values('primaryUserID')
  58. if not device_info_qs.exists():
  59. return response.json(14)
  60. master_user_id = device_info_qs[0]['primaryUserID']
  61. if master_user_id != '' and master_user_id != user_id:
  62. return response.json(12)
  63. now_time = int(time.time())
  64. cloud_photo_qs = DeviceCloudPhotoInfo.objects.filter(uid=uid)
  65. if not cloud_photo_qs.exists():
  66. data = {'status': status, 'user_id': user_id, 'uid': uid, 'created_time': now_time,
  67. 'updated_time': now_time}
  68. DeviceCloudPhotoInfo.objects.create(**data)
  69. return response.json(0)
  70. cloud_photo_qs.update(status=status, updated_time=now_time)
  71. return response.json(0)
  72. except Exception as e:
  73. LOGGER.info('异常详情,errLine:{}, errMsg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
  74. return response.json(500)
  75. @classmethod
  76. def get_bgm_list(cls, response):
  77. """
  78. 获取背景音乐列表
  79. """
  80. photo_bgm = CloudPhotoBGM.objects.filter(is_show=1).values('name', 'link').order_by('sort')
  81. if not photo_bgm.exists():
  82. return response.json(0, [])
  83. return response.json(0, list(photo_bgm))
  84. @classmethod
  85. def query_cloud_photo_page(cls, user_id, request_dict, response):
  86. """
  87. 分页查询云相册视频
  88. @param user_id: 用户id
  89. @param request_dict: 请求参数
  90. @param response: 响应对象
  91. @return: []
  92. """
  93. try:
  94. device_name = request_dict.get('deviceName', None)
  95. start_time = request_dict.get('startTime', None)
  96. end_time = request_dict.get('endTime', None)
  97. page = request_dict.get('page', None)
  98. size = request_dict.get('size', None)
  99. video_qs = DevicePicturePushInfo.objects.filter(user_id=user_id, type=1)
  100. if device_name:
  101. video_qs = video_qs.filter(device_nick_name__icontains=device_name)
  102. if start_time:
  103. video_qs = video_qs.filter(event_time__gte=int(start_time))
  104. if end_time:
  105. video_qs = video_qs.filter(event_time__lte=int(end_time))
  106. video_qs = video_qs.values('id', 'uid', 'device_nick_name', 'event_time').order_by('-event_time')[
  107. (page - 1) * size:page * size]
  108. if not video_qs.exists():
  109. return response.json(0, [])
  110. s3 = AmazonS3Util(ACCESS_KEY_ID, SECRET_ACCESS_KEY, REGION_NAME)
  111. res_data = []
  112. for item in video_qs:
  113. data = {'id': item['id'], 'deviceNickname': item['device_nick_name']}
  114. key = '{}/video/{}.mp4'.format(item['uid'], str(item['event_time']))
  115. obj_url = s3.generate_file_obj_url(PUSH_CLOUD_PHOTO, key)
  116. data['videoLink'] = obj_url
  117. res_data.append(data)
  118. return response.json(0, res_data)
  119. except Exception as e:
  120. LOGGER.info('异常详情,errLine:{}, errMsg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
  121. return response.json(500)
  122. @classmethod
  123. def del_cloud_photo(cls, request_dict, response):
  124. """
  125. 根据id删除视频列表
  126. @param request_dict:
  127. @param response:
  128. @return:
  129. """
  130. try:
  131. ids = request_dict.get('ids', None)
  132. if not ids:
  133. return response.json(444)
  134. cloud_photo_qs = DevicePicturePushInfo.objects.filter(id__in=ids.split(',')).values('uid', 'event_time')
  135. if not cloud_photo_qs.exists():
  136. return response.json(173)
  137. s3 = AmazonS3Util(ACCESS_KEY_ID, SECRET_ACCESS_KEY, REGION_NAME)
  138. for item in cloud_photo_qs:
  139. key = '{}/video/{}.mp4'.format(item['uid'], str(item['event_time']))
  140. s3.delete_obj(PUSH_CLOUD_PHOTO, key)
  141. cloud_photo_qs.delete()
  142. return response.json(0)
  143. except Exception as e:
  144. LOGGER.info('异常详情,errLine:{}, errMsg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
  145. return response.json(500)