| 
					
				 | 
			
			
				@@ -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 = { 
			 |