浏览代码

完善app获取设备图标接口(优化版本号查询功能)

guanhailong 2 年之前
父节点
当前提交
2c2fe8eda2
共有 1 个文件被更改,包括 107 次插入35 次删除
  1. 107 35
      AdminController/DeviceManagementController.py

+ 107 - 35
AdminController/DeviceManagementController.py

@@ -455,8 +455,7 @@ class DeviceManagement(View):
             print(e)
             return response.json(500, repr(e))
 
-    @staticmethod
-    def get_device_icon(request_dict, response):
+    def get_device_icon(self, request_dict, response):
         lang = request_dict.get('lang', 'en')
         app_bundle_id = request_dict.get('appBundleId', None)
         version_number = request_dict.get('versionNumber', None)
@@ -464,43 +463,116 @@ class DeviceManagement(View):
             return response.json(444)
         if lang != 'cn':
             lang = 'en'
-        version_number_qs = AppVersionNumber.objects.filter(app_bundle__app_bundle_id=app_bundle_id,
-                                                            version_number=version_number)
-        if not version_number_qs.exists():
-            version_number_qs = AppVersionNumber.objects.filter(app_bundle__app_bundle_id=app_bundle_id)
+        if version_number >= '2.6.2.1':  # 判断是否低于2.6.2.1版本
+            return self.newAppVersion(response, app_bundle_id, lang, version_number)  # 获取2.6.2.1及以上版本设备信息图标
+        else:
+            version_number_qs = AppVersionNumber.objects.filter(app_bundle__app_bundle_id=app_bundle_id,
+                                                                version_number=version_number)
             if not version_number_qs.exists():
-                return response.json(173)
-            version_qs = version_number_qs.values('version_number')
-            test_list = [item[key] for item in version_qs for key in item]
-            if (version_number > test_list[-1] or version_number < test_list[0]):
-                version_number_qs = version_number_qs.filter().values('id').order_by('id')
-                total_list = [item[key] for item in version_number_qs for key in item]
-                version_number_id = total_list[-1]
+                version_number_qs = AppVersionNumber.objects.filter(app_bundle__app_bundle_id=app_bundle_id)
+                if not version_number_qs.exists():
+                    return response.json(173)
+                version_qs = version_number_qs.values('version_number')
+                test_list = [item[key] for item in version_qs for key in item]  # 判断该版本最靠进已有版本号
+                if version_number > test_list[-1] or version_number < test_list[0]:
+                    version_number_qs = version_number_qs.filter().values('id').order_by('id')
+                    total_list = [item[key] for item in version_number_qs for key in item]
+                    version_number_id = total_list[-1]
+                else:
+                    pos = bisect_left(test_list, version_number)
+                    if pos == 0:
+                        return test_list[0]
+                    if pos == len(test_list):
+                        return test_list[-1]
+                    before = test_list[pos - 1]
+                    version_number_qs = AppVersionNumber.objects.filter(version_number=before).values('id')
+                    version_number_id = version_number_qs[0]['id']
             else:
-                pos = bisect_left(test_list, version_number)
-                if pos == 0:
-                    return test_list[0]
-                if pos == len(test_list):
-                    return test_list[-1]
-                before = test_list[pos - 1]
-                version_number_qs = AppVersionNumber.objects.filter(version_number=before).values('id')
+                version_number_qs = AppVersionNumber.objects.filter(version_number=version_number).values('id')
                 version_number_id = version_number_qs[0]['id']
-        else:
-            version_number_qs = AppVersionNumber.objects.filter(version_number=version_number).values('id')
-            version_number_id = version_number_qs[0]['id']
+            try:
+                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_number_id). \
+                    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'),
+                    app_version_number_id=F('app_device_type__app_version_number_id')).order_by(
+                    'app_device_type__devicenamelanguage__sort').values('model', 'type', 'icon', 'name', 'sort',
+                                                                        'app_device_type__app_version_number_id')
+                dvr_list = [app_bundle for app_bundle in app_bundle_qs if app_bundle['model'] == 1]
+                ipc_list = [app_bundle for app_bundle in app_bundle_qs if app_bundle['model'] == 2]
+                print(dvr_list, ipc_list)
+                res = {
+                    'deviceDvr': dvr_list,
+                    'deviceIpc': ipc_list,
+                }
+                return response.json(0, res)
+            except Exception as e:
+                print(e)
+                return response.json(500, repr(e))
+
+    def newAppVersion(self, response, app_bundle_id, lang, version_number):
+        version_number_qs = AppVersionNumber.objects.filter(app_bundle__app_bundle_id=app_bundle_id).values(
+            'version_number')  # 获取包
+        if not version_number_qs.exists():
+            return response.json(173)
+        # 获取版本号
         try:
-            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_number_id). \
-                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'),
-                app_version_number_id=F('app_device_type__app_version_number_id')).order_by(
-                'app_device_type__devicenamelanguage__sort').values('model', 'type', 'icon', 'name', 'sort',
-                                                                    'app_device_type__app_version_number_id')
-            dvr_list = [app_bundle for app_bundle in app_bundle_qs if app_bundle['model'] == 1]
-            ipc_list = [app_bundle for app_bundle in app_bundle_qs if app_bundle['model'] == 2]
+            app_bundle_list = []
+            version_qs = version_number_qs.filter(version_number=version_number).values('version_number')  # 判断版本是否存在
+            if version_qs.exists():
+                version_number = version_qs[0]['version_number']
+            else:
+                all_version_number_qs = version_number_qs.values('version_number')  # 输入版本号不存在,则获取全部版本号
+                test_list = [item[key] for item in all_version_number_qs for key in item]
+                if version_number > test_list[-1] or version_number < test_list[0]:  # 判断该版本最靠进已有版本号
+                    version_qs = version_number_qs.filter().values('version_number').order_by('version_number')
+                    total_list = [item[key] for item in version_qs for key in item]
+                    version_number = total_list[-1]
+                else:
+                    pos = bisect_left(test_list, version_number)
+                    if pos == 0:
+                        return test_list[0]
+                    if pos == len(test_list):
+                        return test_list[-1]
+                    before = test_list[pos - 1]
+                    version_qs = AppVersionNumber.objects.filter(version_number=before).values('version_number')
+                    version_number = version_qs[0]['version_number']
+            all_version_list = [item[key] for item in version_number_qs for key in item]
+            index = all_version_list.index(version_number)  # 获取版本号的索引
+            if app_bundle_id == 'com.ansjer.zccloud' or app_bundle_id == 'com.ansjer.zccloud_a':  # 判断App包
+                version_number_qs = version_number_qs.values('version_number')[0:index + 1]
+            else:
+                version_number_qs = version_number_qs.values('version_number')[1:index + 1]
+            for version_number in version_number_qs:  # 获取版本号对应的设备信息图标
+                version_number = version_number['version_number']
+                version_number_qs = AppVersionNumber.objects.filter(version_number=version_number,
+                                                                    app_bundle__app_bundle_id=app_bundle_id).values(
+                    'id')
+                version_number_id = version_number_qs[0]['id']
+                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_number_id). \
+                    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'),
+                    app_version_number_id=F('app_device_type__app_version_number_id')).order_by(
+                    'app_device_type__devicenamelanguage__sort').values('model', 'type', 'icon', 'name', 'sort',
+                                                                        'app_device_type__app_version_number_id')
+                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_device_type__app_version_number_id': app_bundle['app_device_type__app_version_number_id'],
+                    })
+            dvr_list = [app_bundle for app_bundle in app_bundle_list if app_bundle['model'] == 1]
+            ipc_list = [app_bundle for app_bundle in app_bundle_list if app_bundle['model'] == 2]
             print(dvr_list, ipc_list)
             res = {
                 'deviceDvr': dvr_list,