Pārlūkot izejas kodu

重构pc端获取设备图标

guanhailong 2 gadi atpakaļ
vecāks
revīzija
d625226475
1 mainītis faili ar 35 papildinājumiem un 18 dzēšanām
  1. 35 18
      Controller/DeviceTypeController.py

+ 35 - 18
Controller/DeviceTypeController.py

@@ -1,12 +1,14 @@
 #!/usr/bin/env python3
 # -*- coding: utf-8 -*-
+import operator
 import time
 
 import oss2
+from django.db.models import F
 from django.views import View
 
 from Ansjer.config import OSS_STS_ACCESS_KEY, OSS_STS_ACCESS_SECRET
-from Model.models import DeviceTypeModel
+from Model.models import DeviceTypeModel, AppBundle
 from Object.ResponseObject import ResponseObject
 from Object.TokenObject import TokenObject
 from Service.CommonService import CommonService
@@ -39,7 +41,7 @@ class DeviceTypeView(View):
         if operation == 'add':
             return self.do_admin_add(token.userID, request_dict, response)
         elif operation == 'query':
-            return self.do_query(request_dict, response)
+            return self.do_query(response)
         elif operation == 'delete':
             return self.do_admin_delete(token.userID, request_dict, response)
         elif operation == 'getUploadUrl':
@@ -87,22 +89,37 @@ class DeviceTypeView(View):
         else:
             return response.json(444)
 
-    def do_query(self, request_dict, response):
-        device_type_qs = DeviceTypeModel.objects.filter().values('id', 'type', 'ptz_type', 'model', 'icon', 'name')
-        res = {}
-        data = []
-        res['data'] = data
-        if device_type_qs.exists():
-            for device_type in device_type_qs:
-                auth = oss2.Auth(OSS_STS_ACCESS_KEY, OSS_STS_ACCESS_SECRET)
-                bucket = oss2.Bucket(auth, 'oss-cn-shenzhen.aliyuncs.com', 'ansjer-static-resources')
-
-                icon = device_type['icon']
-                url = 'device_type/' + icon
-                device_type['icon'] = bucket.sign_url('GET', url, 3600)
-                data.append(device_type)
-
-        return response.json(0, res)
+    def do_query(self, response):
+        try:
+            app_bundle_id = 'com.ansjer.zccloud'
+            app_bundle_qs = AppBundle.objects.filter(app_bundle_id=app_bundle_id).values_list(
+                'app_device_type__app_version_number_id').distinct().order_by('app_device_type__app_version_number_id')
+            version_number_list = [app_bundle for app_bundle in app_bundle_qs]
+            versions_filtered = version_number_list[:-1]
+            app_bundle_list = []
+            for version in versions_filtered:
+                version = ''.join(map(str, version))
+                app_bundle_qs = AppBundle.objects.filter(app_bundle_id=app_bundle_id,
+                                                         app_device_type__devicenamelanguage__lang=response.lang,
+                                                         app_device_type__app_version_number_id=version). \
+                    annotate(
+                    model=F('app_device_type__model'), type=F('app_device_type__type'), icon=F('app_device_type__icon'),
+                    name=F('app_device_type__devicenamelanguage__name'),
+                    sort=F('app_device_type__devicenamelanguage__sort')).values('model', 'type', 'icon',
+                                                                                'name', 'sort')
+                for app_bundle in app_bundle_qs:
+                    app_bundle_list.append({
+                        'model': app_bundle['model'],
+                        'type': app_bundle['type'],
+                        'icon': app_bundle['icon'],
+                        'name': app_bundle['name'],
+                        'sort': app_bundle['sort'],
+                    })
+            app_bundle_list = sorted(app_bundle_list, key=operator.itemgetter('sort'))
+            return response.json(0, app_bundle_list)
+        except Exception as e:
+            print(e)
+            return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
 
     def do_admin_delete(self, userID, request_dict, response):
         own_perm = ModelService.check_perm(userID, 10)