DeviceTypeController.py 6.1 KB

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