DeviceTypeController.py 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  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
  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(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, response):
  78. try:
  79. app_bundle_id = 'com.ansjer.zccloud'
  80. app_bundle_qs = AppBundle.objects.filter(app_bundle_id=app_bundle_id).values_list(
  81. 'app_device_type__app_version_number_id').distinct().order_by('app_device_type__app_version_number_id')
  82. version_number_list = [app_bundle for app_bundle in app_bundle_qs]
  83. versions_filtered = version_number_list[:-1]
  84. app_bundle_list = []
  85. for version in versions_filtered:
  86. version = ''.join(map(str, version))
  87. app_bundle_qs = AppBundle.objects.filter(app_bundle_id=app_bundle_id,
  88. app_device_type__devicenamelanguage__lang=response.lang,
  89. app_device_type__app_version_number_id=version). \
  90. annotate(
  91. model=F('app_device_type__model'), type=F('app_device_type__type'), icon=F('app_device_type__icon'),
  92. name=F('app_device_type__devicenamelanguage__name'),
  93. sort=F('app_device_type__devicenamelanguage__sort')).values('model', 'type', 'icon',
  94. 'name', 'sort')
  95. for app_bundle in app_bundle_qs:
  96. app_bundle_list.append({
  97. 'model': app_bundle['model'],
  98. 'type': app_bundle['type'],
  99. 'icon': app_bundle['icon'],
  100. 'name': app_bundle['name'],
  101. 'sort': app_bundle['sort'],
  102. })
  103. app_bundle_list = sorted(app_bundle_list, key=operator.itemgetter('sort'))
  104. return response.json(0, app_bundle_list)
  105. except Exception as e:
  106. print(e)
  107. return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
  108. def do_admin_delete(self, userID, request_dict, response):
  109. own_perm = ModelService.check_perm(userID, 10)
  110. if not own_perm:
  111. return response.json(404)
  112. id = request_dict.get('id', None)
  113. if id:
  114. DeviceTypeModel.objects.filter(id=id).delete()
  115. return response.json(0)
  116. else:
  117. return response.json(444)