|
@@ -55,6 +55,12 @@ class UserDeviceShareView(View):
|
|
|
return self.synch_share_device_permission(response)
|
|
|
elif operation == 'getWallpaperList':
|
|
|
return self.get_wallpaper_list(request_dict, response)
|
|
|
+ elif operation == 'getUploadWallpaper':
|
|
|
+ return self.get_upload_wallpaper(request_dict, response)
|
|
|
+ elif operation == 'delWallpaper':
|
|
|
+ return self.del_wallpaper(request_dict, response)
|
|
|
+ elif operation == 'selectWallpaper':
|
|
|
+ return self.select_wallpaper(request_dict, response)
|
|
|
else:
|
|
|
return response.json(404)
|
|
|
|
|
@@ -274,3 +280,151 @@ class UserDeviceShareView(View):
|
|
|
except Exception as e:
|
|
|
LOGGER.error('查询设备壁纸异常:errLine:{}, errMsg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
|
|
|
return response.json(5)
|
|
|
+
|
|
|
+ @classmethod
|
|
|
+ def get_upload_wallpaper(cls, request_dict, response):
|
|
|
+ """
|
|
|
+ 获取设备壁纸上传链接
|
|
|
+ @param request_dict:
|
|
|
+ @param response:
|
|
|
+ @return:
|
|
|
+ """
|
|
|
+ try:
|
|
|
+ uid = request_dict.get('uid', None)
|
|
|
+ channel = int(request_dict.get('channel', 1))
|
|
|
+
|
|
|
+ if not uid:
|
|
|
+ return response.json(444)
|
|
|
+
|
|
|
+ device_info_qs = Device_Info.objects.filter(UID=uid).values('id', 'Type')
|
|
|
+ device_type = device_info_qs[0]['Type'] if device_info_qs.exists() else ''
|
|
|
+
|
|
|
+ # 初始化存储桶客户端
|
|
|
+ if CONFIG_CN == CONFIG_INFO or CONFIG_TEST == CONFIG_INFO:
|
|
|
+ s3 = boto3.client(
|
|
|
+ 's3',
|
|
|
+ aws_access_key_id=AWS_ACCESS_KEY_ID[0],
|
|
|
+ aws_secret_access_key=AWS_SECRET_ACCESS_KEY[0],
|
|
|
+ config=botocore.client.Config(signature_version='s3v4'),
|
|
|
+ region_name='cn-northwest-1'
|
|
|
+ )
|
|
|
+ else:
|
|
|
+ s3 = boto3.client(
|
|
|
+ 's3',
|
|
|
+ aws_access_key_id=AWS_ACCESS_KEY_ID[1],
|
|
|
+ aws_secret_access_key=AWS_SECRET_ACCESS_KEY[1],
|
|
|
+ config=botocore.client.Config(signature_version='s3v4'),
|
|
|
+ region_name='us-east-1'
|
|
|
+ )
|
|
|
+
|
|
|
+ # 生成唯一的文件名
|
|
|
+ file_name = f"{int(time.time())}.png"
|
|
|
+ obj_key = f"app/static/device-wallpaper/{uid}/{file_name}"
|
|
|
+
|
|
|
+ # 生成预签名的 URL
|
|
|
+ presigned_url = s3.generate_presigned_url(
|
|
|
+ 'put_object',
|
|
|
+ Params={
|
|
|
+ 'Bucket': 'ansjerfilemanager',
|
|
|
+ 'Key': obj_key,
|
|
|
+ },
|
|
|
+ ExpiresIn=600
|
|
|
+ )
|
|
|
+
|
|
|
+ # 考虑再写一个回调接口创建壁纸
|
|
|
+ DeviceWallpaper.objects.create(
|
|
|
+ device_type=device_type,
|
|
|
+ storage_type=1,
|
|
|
+ channel=channel,
|
|
|
+ uid=uid,
|
|
|
+ obj_prefix=f'app/static/device-wallpaper/{uid}/',
|
|
|
+ obj_name=file_name,
|
|
|
+ classification=2, # 自定义壁纸分类
|
|
|
+ status=1,
|
|
|
+ parent_id=0
|
|
|
+ )
|
|
|
+
|
|
|
+ # 返回预签名的URL和字段
|
|
|
+ return response.json(0, {
|
|
|
+ 'uploadUrl': presigned_url,
|
|
|
+ 'fileName': file_name,
|
|
|
+ })
|
|
|
+
|
|
|
+ except Exception as e:
|
|
|
+ LOGGER.error('获取上传链接异常:errLine:{}, errMsg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
|
|
|
+ return response.json(5)
|
|
|
+
|
|
|
+ @classmethod
|
|
|
+ def del_wallpaper(cls, request_dict, response):
|
|
|
+ """
|
|
|
+ 删除设备壁纸
|
|
|
+ """
|
|
|
+ wallpaper_id = request_dict.get('wallpaperId', None)
|
|
|
+ if not all([wallpaper_id]):
|
|
|
+ return response.json(444)
|
|
|
+ try:
|
|
|
+ if int(wallpaper_id) in [1, 2, 3]:
|
|
|
+ return response.json(176)
|
|
|
+ device_wallpaper_qs = DeviceWallpaper.objects.filter(id=wallpaper_id)
|
|
|
+ device_wallpaper = device_wallpaper_qs.values("obj_prefix", "obj_name", "uid", "parent_id")
|
|
|
+ uid = device_wallpaper[0]['uid']
|
|
|
+ obj_name = device_wallpaper[0]['obj_name']
|
|
|
+
|
|
|
+ # 使用中壁纸被删除
|
|
|
+ use_device_wallpaper = DeviceWallpaper.objects.filter(uid=uid, parent_id__gt=0).first()
|
|
|
+ if use_device_wallpaper and use_device_wallpaper.parent_id == wallpaper_id:
|
|
|
+ system_device_wallpaper = DeviceWallpaper.objects.filter(id=1).first()
|
|
|
+ use_device_wallpaper.parent_id = 1
|
|
|
+ use_device_wallpaper.storage_type = system_device_wallpaper.storage_type
|
|
|
+ use_device_wallpaper.obj_name = system_device_wallpaper.obj_name
|
|
|
+ use_device_wallpaper.obj_prefix = system_device_wallpaper.obj_prefix
|
|
|
+ use_device_wallpaper.classification = system_device_wallpaper.classification
|
|
|
+ use_device_wallpaper.channel = system_device_wallpaper.channel
|
|
|
+ use_device_wallpaper.save()
|
|
|
+
|
|
|
+ if CONFIG_CN == CONFIG_INFO or CONFIG_TEST == CONFIG_INFO:
|
|
|
+ s3 = AmazonS3Util(
|
|
|
+ AWS_ACCESS_KEY_ID[0], AWS_SECRET_ACCESS_KEY[0], 'cn-northwest-1'
|
|
|
+ )
|
|
|
+ else:
|
|
|
+ s3 = AmazonS3Util(
|
|
|
+ AWS_ACCESS_KEY_ID[1], AWS_SECRET_ACCESS_KEY[1], 'us-east-1'
|
|
|
+ )
|
|
|
+
|
|
|
+ s3.delete_obj("ansjerfilemanager", f"app/static/device-wallpaper/{uid}/{obj_name}")
|
|
|
+ device_wallpaper_qs.delete()
|
|
|
+
|
|
|
+ return response.json(0)
|
|
|
+
|
|
|
+ except Exception as e:
|
|
|
+ LOGGER.info('删除壁纸异常:{}'.format(e))
|
|
|
+ return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
|
|
|
+
|
|
|
+ @classmethod
|
|
|
+ def select_wallpaper(cls, request_dict, response):
|
|
|
+ """
|
|
|
+ 用户选取壁纸
|
|
|
+ @param request_dict:
|
|
|
+ @param response:
|
|
|
+ @return:
|
|
|
+ """
|
|
|
+ try:
|
|
|
+ wallpaper_id = request_dict.get('wallpaperId', None)
|
|
|
+ uid = request_dict.get('uid', None)
|
|
|
+ if not all([wallpaper_id, uid]):
|
|
|
+ return response.json(444)
|
|
|
+ device_wallpaper = DeviceWallpaper.objects.filter(id=wallpaper_id).values("storage_type", "obj_prefix",
|
|
|
+ "obj_name",
|
|
|
+ "classification",
|
|
|
+ "channel").first()
|
|
|
+ DeviceWallpaper.objects.filter(uid=uid, parent_id__gt=0).update(
|
|
|
+ storage_type=device_wallpaper["storage_type"],
|
|
|
+ classification=device_wallpaper["classification"],
|
|
|
+ obj_prefix=device_wallpaper["obj_prefix"],
|
|
|
+ obj_name=device_wallpaper["obj_name"],
|
|
|
+ parent_id=wallpaper_id
|
|
|
+ )
|
|
|
+ return response.json(0)
|
|
|
+ except Exception as e:
|
|
|
+ LOGGER.error('用户选取壁纸异常:errLine:{}, errMsg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
|
|
|
+ return response.json(5)
|