DeviceTypeController.py 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146
  1. #!/usr/bin/env python3
  2. # -*- coding: utf-8 -*-
  3. import operator
  4. import time
  5. import oss2
  6. from django.db.models import F
  7. from django.views import View
  8. from Ansjer.config import OSS_STS_ACCESS_KEY, OSS_STS_ACCESS_SECRET
  9. from Model.models import DeviceTypeModel, AppBundle, DeviceNameLanguage
  10. from Object.ResponseObject import ResponseObject
  11. from Object.TokenObject import TokenObject
  12. from Service.CommonService import CommonService
  13. from Service.ModelService import ModelService
  14. class DeviceTypeView(View):
  15. def get(self, request, *args, **kwargs):
  16. request.encoding = 'utf-8'
  17. request_dict = request.GET
  18. operation = kwargs.get('operation', None)
  19. return self.validate(request_dict, operation)
  20. def post(self, request, *args, **kwargs):
  21. request.encoding = 'utf-8'
  22. request_dict = request.POST
  23. operation = kwargs.get('operation', None)
  24. return self.validate(request_dict, operation)
  25. def validate(self, request_dict, operation):
  26. token = request_dict.get('token', None)
  27. lang = request_dict.get('lang', None)
  28. response = ResponseObject(lang=lang)
  29. token = TokenObject(token)
  30. if token.code != 0:
  31. return response.json(token.code)
  32. if operation == 'add':
  33. return self.do_admin_add(token.userID, request_dict, response)
  34. elif operation == 'query':
  35. return self.do_query(request_dict, response)
  36. elif operation == 'delete':
  37. return self.do_admin_delete(token.userID, request_dict, response)
  38. elif operation == 'getUploadUrl':
  39. return self.get_upload_url(request_dict, response)
  40. else:
  41. return response.json(404)
  42. def get_upload_url(self, request_dict, response):
  43. upload_type = request_dict.get('upload_type', None)
  44. if upload_type:
  45. auth = oss2.Auth(OSS_STS_ACCESS_KEY, OSS_STS_ACCESS_SECRET)
  46. bucket = oss2.Bucket(auth, 'oss-cn-shenzhen.aliyuncs.com', 'ansjer-static-resources')
  47. name = CommonService.createOrderID()
  48. filename = str(name) + '.' + upload_type
  49. obj = 'device_type/' + filename
  50. url = bucket.sign_url('PUT', obj, 7200)
  51. return response.json(0, {'put_url': url, 'filename': filename})
  52. else:
  53. return response.json(444)
  54. def do_admin_add(self, userID, request_dict, response):
  55. own_perm = ModelService.check_perm(userID, 10)
  56. if not own_perm:
  57. return response.json(404)
  58. name = request_dict.get('name', None)
  59. model = request_dict.get('model', None)
  60. type = request_dict.get('type', None)
  61. ptz_type = request_dict.get('ptz_type', None)
  62. icon = request_dict.get('icon', None)
  63. if name and model and type and ptz_type and icon:
  64. now_time = int(time.time())
  65. device_type = DeviceTypeModel()
  66. device_type.name = name
  67. device_type.model = model
  68. device_type.type = type
  69. device_type.ptz_type = ptz_type
  70. device_type.icon = icon
  71. device_type.add_time = now_time
  72. device_type.update_time = now_time
  73. device_type.save()
  74. return response.json(0)
  75. else:
  76. return response.json(444)
  77. def do_query(self, request_dict, response):
  78. """
  79. 获取设备图标
  80. @param request_dict:请求参数
  81. @request_dict app_bundle_id:包名
  82. """
  83. app_bundle_id = request_dict.get('app_bundle_id', None)
  84. if not app_bundle_id:
  85. return response.json(444, {'error param': 'app_bundle_id'})
  86. try:
  87. lang = response.lang
  88. app_device_qs = DeviceNameLanguage.objects.filter(lang=lang)
  89. if not app_device_qs.exists():
  90. lang = 'en'
  91. # 同步设备图标
  92. app_bundle_qs = AppBundle.objects.filter(app_bundle_id=app_bundle_id).values_list(
  93. 'app_device_type__app_version_number_id').distinct().order_by('app_device_type__app_version_number_id')
  94. version_number_list = [app_bundle for app_bundle in app_bundle_qs]
  95. versions_filtered = version_number_list[:-1]
  96. app_bundle_list = []
  97. for version in versions_filtered:
  98. version = ''.join(map(str, version))
  99. app_bundle_qs = AppBundle.objects.filter(app_bundle_id=app_bundle_id,
  100. app_device_type__devicenamelanguage__lang=lang,
  101. app_device_type__app_version_number_id=version). \
  102. annotate(
  103. model=F('app_device_type__model'), type=F('app_device_type__type'), icon=F('app_device_type__icon'),
  104. name=F('app_device_type__devicenamelanguage__name'),
  105. sort=F('app_device_type__devicenamelanguage__sort')).values('model', 'type', 'icon',
  106. 'name', 'sort')
  107. for app_bundle in app_bundle_qs:
  108. app_bundle_list.append({
  109. 'model': app_bundle['model'],
  110. 'type': app_bundle['type'],
  111. 'icon': app_bundle['icon'],
  112. 'name': app_bundle['name'],
  113. 'sort': app_bundle['sort'],
  114. })
  115. app_bundle_list = sorted(app_bundle_list, key=operator.itemgetter('sort'))
  116. return response.json(0, {'data': app_bundle_list})
  117. except Exception as e:
  118. print(e)
  119. return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
  120. def do_admin_delete(self, userID, request_dict, response):
  121. own_perm = ModelService.check_perm(userID, 10)
  122. if not own_perm:
  123. return response.json(404)
  124. id = request_dict.get('id', None)
  125. if id:
  126. DeviceTypeModel.objects.filter(id=id).delete()
  127. return response.json(0)
  128. else:
  129. return response.json(444)