Pārlūkot izejas kodu

兼容查询正式服app设备图标

guanhailong 2 gadi atpakaļ
vecāks
revīzija
3d7b11daf8
1 mainītis faili ar 41 papildinājumiem un 12 dzēšanām
  1. 41 12
      AdminController/DeviceManagementController.py

+ 41 - 12
AdminController/DeviceManagementController.py

@@ -701,11 +701,35 @@ class DeviceManagement(View):
             #  判断版本是否存在, 不存在则获取输入版本范围内最接近的输入版本
             version_number_list = []
             app_bundle_list = []
+            id_list = []
             for version in app_bundle_qs:
                 version = version['app_device_type__app_version_number_id']
-                version_parts = list(map(int, version.split('.')))
-                if version_parts <= version_number:
-                    version_number_list.append(version)
+                # 必须是版本号
+                if len(version) > 3:
+                    version_parts = list(map(int, version.split('.')))
+                    if version_parts <= version_number:
+                        version_number_list.append(version)
+                else:
+                    id_list.append(int(version))
+            # app_device_type__app_version_number_id为AppVersionNumber的主键时
+            version_list = []
+            if len(version_number_list) == 0:
+                version_qs = AppVersionNumber.objects.filter(
+                    id__in=id_list).values('version_number').distinct()
+                for version in version_qs:
+                    version_qs = AppVersionNumber.objects.filter(version_number=version['version_number'],
+                                                                 app_bundle__app_bundle_id=app_bundle_id).values('id')
+                    if not version_qs.exists():
+                        continue
+                    version_number_data = {
+                        version_qs[0]['id']: version['version_number']
+                    }
+                    version_list.append(version_number_data)
+                for version in version_list:
+                    for k, v in version.items():
+                        version_parts = list(map(int, v.split('.')))
+                        if version_parts <= version_number:
+                            version_number_list.append(k)
             # 版本号对应的设备信息图标
             for version_number in version_number_list:
                 app_bundle_qs = AppBundle.objects.filter(app_bundle_id=app_bundle_id,
@@ -719,17 +743,22 @@ class DeviceManagement(View):
                                                                                               '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'],
-                    })
+                    device_type = any(item['type'] == app_bundle['type'] for item in app_bundle_list)
+                    if device_type:
+                        break
+                    else:
+                        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': sorted(dvr_list, key=operator.itemgetter('sort')),
                 'deviceIpc': sorted(ipc_list, key=operator.itemgetter('sort')),