Browse Source

Merge branch 'master' of http://192.168.136.99:3000/servers/ASJServer into cheng

keiSenFront 2 năm trước cách đây
mục cha
commit
a1acfc1e05
2 tập tin đã thay đổi với 70 bổ sung78 xóa
  1. 51 77
      AdminController/DeviceManagementController.py
  2. 19 1
      Service/CommonService.py

+ 51 - 77
AdminController/DeviceManagementController.py

@@ -627,48 +627,52 @@ class DeviceManagement(View):
         model = request_dict.get('model', None)
         type = request_dict.get('type', None)
         # device_name_language表数据
-        lang = request_dict.get('lang', None)
         name = request_dict.get('name', None)
         sort = request_dict.get('sort', None)
         # 上传图标
         file = request.FILES.get('iconFile', None)
+        if not all([model, type, name, sort, version_number, file]):
+            return response.json(444, 'model, type, file, name, sort, version_number')
         fileName = file.name
-        if not all([model, type, lang, name, sort, version_number]):
-            return response.json(444, 'model, type, lang, name, sort, version_number')
         type = int(type)
+        data_name = eval(name)
         try:
             with transaction.atomic():
-                app_bundle_qs = AppBundle.objects.filter(id__in=app_bundle_id,
-                                                         app_device_type__devicenamelanguage__lang=lang,
-                                                         app_device_type__app_version_number_id=version_number,
-                                                         app_device_type__type=type,
-                                                         app_device_type__model=model)
-                #  数据是否重复
-                if app_bundle_qs.exists():
-                    return response.json(174)
-                # 是否存在相同的url
-                response_url = 'https://ansjerfilemanager.s3.amazonaws.com/app/device_type_images/' + format(fileName)
-                app_bundle_qs = AppDeviceType.objects.filter(appbundle__id__in=app_bundle_id, type=type, model=model)
-                if not app_bundle_qs.exists():
-                    #  上传设备图标至存储桶
-                    bucket_name = 'ansjerfilemanager'
-                    file_key = 'app/device_type_images/{}'.format(fileName)
-                    s3 = AmazonS3Util(AWS_ACCESS_KEY_ID[1], AWS_SECRET_ACCESS_KEY[1], AWS_SES_ACCESS_REGION)
-                    # 地址:https://ansjerfilemanager.s3.amazonaws.com/app/device_type_images/camera_c190.png
-                    s3.upload_file_obj(
-                        bucket_name,
-                        file_key,
-                        file,
-                        {'ContentType': file.content_type, 'ACL': 'public-read'})
+                for k, v in data_name.items():
+                    app_bundle_qs = AppBundle.objects.filter(id__in=app_bundle_id,
+                                                             app_device_type__devicenamelanguage__lang=k,
+                                                             app_device_type__app_version_number_id=version_number,
+                                                             app_device_type__type=type,
+                                                             app_device_type__model=model)
+                    #  数据是否重复
+                    if app_bundle_qs.exists():
+                        return response.json(174)
+                    # 是否存在相同的url
+                    response_url = 'https://ansjerfilemanager.s3.amazonaws.com/app/device_type_images/' + format(
+                        fileName)
+                    app_bundle_qs = AppDeviceType.objects.filter(appbundle__id__in=app_bundle_id, type=type,
+                                                                 model=model, icon=response_url)
+                    if not app_bundle_qs.exists():
+                        # 上传设备图标至存储桶
+                        bucket_name = 'ansjerfilemanager'
+                        file_key = 'app/device_type_images/{}'.format(fileName)
+                        s3 = AmazonS3Util(AWS_ACCESS_KEY_ID[1], AWS_SECRET_ACCESS_KEY[1], AWS_SES_ACCESS_REGION)
+                        # 地址:https://ansjerfilemanager.s3.amazonaws.com/app/device_type_images/camera_c190.png
+                        s3.upload_file_obj(
+                            bucket_name,
+                            file_key,
+                            file,
+                            {'ContentType': file.content_type, 'ACL': 'public-read'})
                 #  创建
-                for app_id in app_bundle_id:
-                    app_bundle_qs = AppBundle.objects.filter(id=app_id).values('id')
-                    app_device_type_qs = AppDeviceType.objects.create(model=model, type=type, icon=response_url,
-                                                                      app_version_number_id=version_number)
-                    DeviceNameLanguage.objects.create(lang=lang, name=name, sort=sort,
-                                                      app_device_type_id=app_device_type_qs.id)
-                    #  关联app包
-                    app_device_type_qs.appbundle_set.add(app_bundle_qs[0]['id'])
+                for k, v in data_name.items():
+                    for app_id in app_bundle_id:
+                        app_bundle_qs = AppBundle.objects.filter(id=app_id).values('id')
+                        app_device_type_qs = AppDeviceType.objects.create(model=model, type=type, icon=response_url,
+                                                                          app_version_number_id=version_number)
+                        DeviceNameLanguage.objects.create(lang=k, name=v, sort=sort,
+                                                          app_device_type_id=app_device_type_qs.id)
+                        #  关联app包
+                        app_device_type_qs.appbundle_set.add(app_bundle_qs[0]['id'])
                 return response.json(0)
         except Exception as e:
             print(e)
@@ -690,43 +694,19 @@ class DeviceManagement(View):
         if not all([lang, app_bundle_id, version_number]):
             return response.json(444)
         try:
-            version_number = list(map(int, version_number.split('.')))
             app_bundle_qs = AppBundle.objects.filter(app_bundle_id=app_bundle_id).values(
                 'app_device_type__app_version_number_id').distinct().order_by('app_device_type__app_version_number_id')
             #  判断版本是否存在, 不存在则获取输入版本范围内最接近的输入版本
             version_number_list = []
             app_bundle_list = []
-            id_list = []
             for version in app_bundle_qs:
-                version = version['app_device_type__app_version_number_id']
-                # 必须是版本号
-                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)
+                version_number_list.append(version['app_device_type__app_version_number_id'])
+            new_version_number = CommonService.compare_version_number(version_number, version_number_list)
+            app_device_qs = DeviceNameLanguage.objects.filter(lang=lang)
+            if not app_device_qs.exists():
+                lang = 'en'
             # 版本号对应的设备信息图标
-            for version_number in version_number_list:
+            for version_number in new_version_number:
                 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). \
@@ -738,20 +718,14 @@ class DeviceManagement(View):
                                                                                               'name', 'sort',
                                                                                               'app_device_type__app_version_number_id')
                 for app_bundle in app_bundle_qs:
-                    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'],
-                        })
-            # 去重
+                    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]
             res = {

+ 19 - 1
Service/CommonService.py

@@ -5,6 +5,7 @@ import time
 from base64 import encodebytes
 from pathlib import Path
 from random import Random
+from distutils.version import LooseVersion
 
 import OpenSSL.crypto as ct
 import requests
@@ -737,4 +738,21 @@ GCqvlyw5dfxNA+EtxNE2wCW/LW7ENJlACgcfgPlBZtpLheWoZB/maw4=
         if any(i < 0 for i in number_list):
             return False
         else:
-            return True
+            return True
+
+    @staticmethod
+    def compare_version_number(version_number, version_number_list):
+        """
+        比对版本号大小
+        @param version_number: 版本号
+        @param version_number_list: 版本号列表
+        """
+        version_list = []
+        input_version = LooseVersion(version_number)
+        for version in version_number_list:
+            version = LooseVersion(version)
+            if input_version >= version:
+                version_list.append(version)
+            else:
+                continue
+        return version_list