VseesController.py 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275
  1. # -*- coding: utf-8 -*-
  2. """
  3. @Author : Rocky
  4. @Time : 2023/07/13 11:30
  5. @File :VseesController.py
  6. """
  7. import time
  8. from django.db import transaction
  9. from django.views import View
  10. from Ansjer.config import AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, AWS_SES_ACCESS_REGION
  11. from Model.models import VseesDeviceType, vseesProductInfo
  12. from Object.AWS.AmazonS3Util import AmazonS3Util
  13. from Object.ResponseObject import ResponseObject
  14. from Object.TokenObject import TokenObject
  15. class VseesManagement(View):
  16. def get(self, request, *args, **kwargs):
  17. request.encoding = 'utf-8'
  18. operation = kwargs.get('operation')
  19. return self.validation(request.GET, operation, request)
  20. def post(self, request, *args, **kwargs):
  21. request.encoding = 'utf-8'
  22. operation = kwargs.get('operation')
  23. return self.validation(request.POST, operation, request)
  24. def validation(self, request_dict, operation, request):
  25. response = ResponseObject()
  26. if operation == 'get-device-info': # 查询微瞳设备类型图标信息
  27. return self.get_device_info(response)
  28. elif operation == 'get-product-info': # 获取产品信息
  29. return self.get_product_info(request_dict, request)
  30. else:
  31. tko = TokenObject(
  32. request.META.get('HTTP_AUTHORIZATION'),
  33. returntpye='pc')
  34. if tko.code != 0:
  35. return response.json(tko.code)
  36. response.lang = tko.lang
  37. user_id = tko.userID
  38. if operation == 'get-info': # 获取信息
  39. return self.get_info(request_dict, response)
  40. elif operation == 'add-info': # 新增信息
  41. return self.add_info(request_dict, request, response)
  42. elif operation == 'edit-status': # 修改状态
  43. return self.edit_status(request_dict, response)
  44. elif operation == 'upload-file': # 更新文件
  45. return self.upload_file(request_dict, request, response)
  46. elif operation == 'edit-info': # 修改信息
  47. return self.edit_info(request_dict, response)
  48. else:
  49. return response.json(404)
  50. @staticmethod
  51. def get_info(request_dict, response):
  52. """
  53. 获取微瞳产品信息
  54. @request_dict vsees_id:设备类型id
  55. @request_dict type:0:视频, 1:说明书, 2:固件
  56. return:
  57. """
  58. vsees_id = request_dict.get('vsees_id', None)
  59. product_type = request_dict.get('type', None)
  60. if not all([vsees_id, product_type]):
  61. return response.json(444, 'vsees_id, product_type')
  62. try:
  63. product_info_qs = vseesProductInfo.objects.filter(vsees__id=vsees_id, product_type=product_type,
  64. status=1).values('title', 'file_name', 'status')
  65. if not product_info_qs.exists():
  66. return response.json(173)
  67. return response.json(0, list(product_info_qs))
  68. except Exception as e:
  69. print(e)
  70. return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
  71. @classmethod
  72. def add_info(cls, request_dict, request, response):
  73. """
  74. 新增微瞳产品信息
  75. @request_dict product_id:产品信息id
  76. @request_dict file:文件
  77. @request_dict vsees_id:设备类型id
  78. @request_dict url:路径
  79. @request_dict title:标题
  80. @request_dict device_type:0:视频, 1:说明书, 2:固件
  81. @request_dict status:状态0:已上架, 1: 已下架
  82. return:
  83. """
  84. file = request.FILES.get('file', None)
  85. vsees_id = request_dict.get('vsees_id', None)
  86. url = request_dict.get('url', None)
  87. title = request_dict.get('title', None)
  88. product_type = request_dict.get('type', None)
  89. if not all([file or url, title, product_type, vsees_id]):
  90. return response.json(444, 'error: file or url, title, product_type, vsees_id')
  91. nowTime = int(time.time())
  92. fileName = str(file)
  93. device_type = int(product_type)
  94. # 判断上架状态标题是否重复
  95. product_info_qs = vseesProductInfo.objects.filter(vsees__id=vsees_id, title=title, type=product_type, status=1)
  96. if product_info_qs.exists():
  97. return response.json(174)
  98. try:
  99. with transaction.atomic():
  100. data = {
  101. 'vsees_id': vsees_id,
  102. 'title': title,
  103. 'type': device_type,
  104. 'status': 1,
  105. 'add_time': nowTime,
  106. 'upd_time': nowTime,
  107. }
  108. # 添加链接
  109. if device_type == 0:
  110. data['file_name'] = url
  111. data['url'] = url
  112. vseesProductInfo.objects.create(**data)
  113. return response.json(0)
  114. # 添加说明书
  115. elif device_type == 1:
  116. url = 'https://d2cjxvw3tr9apc.cloudfront.net/vsees/clarification'.format(fileName)
  117. file_key = 'vsees/clarification'
  118. # 添加固件
  119. elif device_type == 2:
  120. url = 'https://d2cjxvw3tr9apc.cloudfront.net/vsees/firmware'.format(fileName)
  121. file_key = 'vsees/firmware'
  122. key = file_key.format(fileName)
  123. s3 = cls.upload(file, key)
  124. if s3:
  125. data['file_name'] = fileName
  126. data['url'] = url
  127. vseesProductInfo.objects.create(**data)
  128. return response.json(0)
  129. return response.json(178)
  130. except Exception as e:
  131. print(e)
  132. return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
  133. @classmethod
  134. def upload(cls, file, key):
  135. """
  136. 上传
  137. @request_dict file:文件
  138. @request_dict key:需要上传文件路径+文件名
  139. """
  140. bucket_name = 'ansjerfilemanager'
  141. s3 = AmazonS3Util(AWS_ACCESS_KEY_ID[1], AWS_SECRET_ACCESS_KEY[1], AWS_SES_ACCESS_REGION)
  142. s3 = s3.upload_file_obj(
  143. bucket_name,
  144. key,
  145. file,
  146. {'ContentType': file.content_type, 'ACL': 'public-read'})
  147. if s3:
  148. return True
  149. else:
  150. return False
  151. @classmethod
  152. def upload_file(cls, request_dict, request, response):
  153. """
  154. 重新上传文件按钮
  155. @request_dict product_id:产品信息id
  156. @request_dict file:文件
  157. @request_dict device_type:0:视频, 1:说明书, 2:固件
  158. """
  159. file = request.FILES.get('file', None)
  160. product_id = request_dict.get('product_id', None)
  161. device_type = request_dict.get('type', None)
  162. if not all([file, device_type, product_id]):
  163. return response.json(444, 'error: file, device_type, product_id')
  164. nowTime = int(time.time())
  165. fileName = str(file)
  166. try:
  167. # 说明
  168. if device_type == 1:
  169. url = 'https://d2cjxvw3tr9apc.cloudfront.net/vsees/clarification'.format(fileName)
  170. file_key = 'vsees/clarification'
  171. # 固件
  172. else:
  173. url = 'https://d2cjxvw3tr9apc.cloudfront.net/vsees/firmware'.format(fileName)
  174. file_key = 'vsees/firmware'
  175. key = file_key.format(fileName)
  176. s3 = cls.upload(file, key)
  177. if s3:
  178. vseesProductInfo.objects.filter(id=product_id).update(url=url, upd_time=nowTime)
  179. return response.json(0)
  180. return response.json(177)
  181. except Exception as e:
  182. print(e)
  183. return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
  184. @staticmethod
  185. def edit_status(request_dict, response):
  186. """
  187. 修改状态
  188. @request_dict product_id:id
  189. @request_dict status:状态0:已上架, 1: 已下架
  190. """
  191. product_id = request_dict.get('product_id', None)
  192. status = request_dict.get('status', None)
  193. if not all([status, product_id]):
  194. return response.json(444, 'error: status, product_id')
  195. if int(status) == 2:
  196. return response.json(177)
  197. vseesProductInfo.objects.filter(id=product_id).update(status=status)
  198. return response.json(0)
  199. @staticmethod
  200. def edit_info(request_dict, response):
  201. """
  202. 修改信息
  203. @request_dict product_id:id
  204. @request_dict url:路径
  205. @request_dict title:标题
  206. """
  207. product_id = request_dict.get('product_id', None)
  208. url = request_dict.get('url', None)
  209. title = request_dict.get('title')
  210. if not product_id:
  211. return response.json(444, 'error: product_id')
  212. product_info_qs = vseesProductInfo.objects.filter(id=product_id, title=title, status=1)
  213. if product_info_qs.exists():
  214. return response.json(174)
  215. if title:
  216. product_info_qs.update(title=title)
  217. if url:
  218. product_info_qs.update(url=url)
  219. return response.json(0)
  220. # 用户界面接口 -------------------------------------------------------------------------------------------------------
  221. @staticmethod
  222. def get_device_info(response):
  223. """
  224. 获取微瞳图标信息
  225. """
  226. try:
  227. device_type_qs = VseesDeviceType.objects.all().values().order_by('id')
  228. return response.json(0, list(device_type_qs))
  229. except Exception as e:
  230. print(e)
  231. return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
  232. @staticmethod
  233. def get_product_info(request_dict, response):
  234. """
  235. 获取微瞳产品信息
  236. @request_dict deviceTypeId:设备类型id
  237. @request_dict type:0:视频, 1:说明书, 2:固件
  238. @request_dict title:标题
  239. return:
  240. """
  241. vsees_id = request_dict.get('vsees_id', None)
  242. title = request_dict.get('title', None)
  243. product_type = request_dict.get('type', None)
  244. if not vsees_id:
  245. return response.json(444, 'vsees_id')
  246. try:
  247. product_info_qs = vseesProductInfo.objects.all()
  248. if not title and product_type:
  249. product_info_qs = product_info_qs.filter(vsees__id=vsees_id, status=1).values('title').order_by(
  250. '-add_time')
  251. return response.json(0, list(product_info_qs))
  252. else:
  253. product_info_qs = product_info_qs.filter(vsees__id=vsees_id, title=title, type=product_type,
  254. status=1).values('url').order_by('-add_time')
  255. if not product_info_qs.exists():
  256. return response.json(173)
  257. return response.json(0, {'url': product_info_qs[0]['url']})
  258. except Exception as e:
  259. print(e)
  260. return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))