فهرست منبع

重构do_query

guanhailong 2 سال پیش
والد
کامیت
839205e5da
1فایلهای تغییر یافته به همراه45 افزوده شده و 16 حذف شده
  1. 45 16
      Controller/DeviceTypeController.py

+ 45 - 16
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, DeviceNameLanguage
 from Object.ResponseObject import ResponseObject
 from Object.TokenObject import TokenObject
 from Service.CommonService import CommonService
@@ -88,21 +90,48 @@ class DeviceTypeView(View):
             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)
+        """
+        获取设备图标
+        @param request_dict:请求参数
+        @request_dict  app_bundle_id:包名
+        """
+        app_bundle_id = request_dict.get('app_bundle_id', None)
+        if not app_bundle_id:
+            app_bundle_id = 'com.ansjer.zccloud_a'
+        try:
+            lang = response.lang
+            app_device_qs = DeviceNameLanguage.objects.filter(lang=lang)
+            if not app_device_qs.exists():
+                lang = 'en'
+            # 同步设备图标
+            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=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, {'data': 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)