Kaynağa Gözat

获取设备壁纸上传链接、删除设备壁纸、用户选择壁纸

linhaohong 1 yıl önce
ebeveyn
işleme
d4e01fd460
1 değiştirilmiş dosya ile 154 ekleme ve 0 silme
  1. 154 0
      Controller/UserDevice/UserDeviceShareController.py

+ 154 - 0
Controller/UserDevice/UserDeviceShareController.py

@@ -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)