Ver código fonte

优化app设备类型查询(版本号)

guanhailong 3 anos atrás
pai
commit
058897c6d0
1 arquivos alterados com 14 adições e 2 exclusões
  1. 14 2
      AdminController/DeviceManagementController.py

+ 14 - 2
AdminController/DeviceManagementController.py

@@ -2,7 +2,9 @@
 # -*- coding: utf-8 -*-
 import json
 import time
+from bisect import bisect_left
 
+import numpy as np
 import oss2
 from django.db import transaction
 from django.db.models import Q, F
@@ -455,12 +457,22 @@ class DeviceManagement(View):
 
         if not all([lang, app_bundle_id, version_number]):
             return response.json(444)
-        version_number_qs = AppVersionNumber.objects.filter(version_number=version_number).values('id')
+        version_number_qs = AppVersionNumber.objects.values('version_number')
+        test_list = [item[key] for item in version_number_qs for key in item]
+        if (version_number > test_list[-1] or version_number < test_list[0]):
+            return False
+        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')
         try:
             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__lte=version_number_id). \
+                                                     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'),