From 11ddc374afeb5f071aa20d1dc5c2410c4b333480 Mon Sep 17 00:00:00 2001 From: zhuangtianxiang <2913129173@qq.com> Date: Fri, 28 Mar 2025 15:58:01 +0800 Subject: [PATCH] =?UTF-8?q?refactor(iot):=20=E5=88=A0=E9=99=A4=E8=AE=BE?= =?UTF-8?q?=E5=A4=87=E5=92=8C=E4=BA=A7=E5=93=81=E5=9B=BE=E7=89=87=E6=88=96?= =?UTF-8?q?=E9=A2=84=E8=A7=88=E5=9B=BE=E5=8A=9F=E8=83=BD-=20=E7=A7=BB?= =?UTF-8?q?=E9=99=A4=20DeviceController=E3=80=81DeviceService=20=E5=92=8C?= =?UTF-8?q?=20DeviceServiceImpl=20=E4=B8=AD=E7=9A=84=20deleteIconOrPreview?= =?UTF-8?q?=20=E6=96=B9=E6=B3=95=20-=20=E5=9C=A8=20ProductController=20?= =?UTF-8?q?=E4=B8=AD=E6=B7=BB=E5=8A=A0=20deleteIconOrPreview=20=E6=96=B9?= =?UTF-8?q?=E6=B3=95-=20=E5=9C=A8=20ProductService=20=E4=B8=AD=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0=20deleteIconOrPreview=20=E6=96=B9=E6=B3=95=20-=20?= =?UTF-8?q?=E5=9C=A8=20ProductServiceImpl=20=E4=B8=AD=E5=AE=9E=E7=8E=B0=20?= =?UTF-8?q?deleteIconOrPreview=20=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../device/controller/DeviceController.java | 8 ------- .../iot/device/service/DeviceService.java | 1 - .../service/impl/DeviceServiceImpl.java | 16 -------------- .../product/controller/ProductController.java | 10 +++++++++ .../iot/product/service/ProductService.java | 2 ++ .../service/impl/ProductServiceImpl.java | 20 ++++++++++++++++++ .../83908a0b3bc79d1d94d966c8e860b4559fee8776 | Bin 5253 -> 0 bytes .../87dcbb41f9208e9da32c400a2b04201631ec9ecc | Bin 5840 -> 0 bytes 8 files changed, 32 insertions(+), 25 deletions(-) delete mode 100644 storage/attachment/83908a0b3bc79d1d94d966c8e860b4559fee8776 delete mode 100644 storage/attachment/87dcbb41f9208e9da32c400a2b04201631ec9ecc diff --git a/src/main/java/com/zsc/edu/gateway/modules/iot/device/controller/DeviceController.java b/src/main/java/com/zsc/edu/gateway/modules/iot/device/controller/DeviceController.java index d5d2ef4..216a4e6 100644 --- a/src/main/java/com/zsc/edu/gateway/modules/iot/device/controller/DeviceController.java +++ b/src/main/java/com/zsc/edu/gateway/modules/iot/device/controller/DeviceController.java @@ -171,12 +171,4 @@ public class DeviceController { return service.toggle(id); } - /** - * 删除图片或预览图 - */ - @DeleteMapping("/attachment/{id}") - @OperationLogAnnotation(content = "'设备图片或预览图'", operationType = "删除") - public Boolean deleteIconOrPreview(@PathVariable("id") Long id, String attachmentId) { - return service.deleteIconOrPreview(id, attachmentId); - } } diff --git a/src/main/java/com/zsc/edu/gateway/modules/iot/device/service/DeviceService.java b/src/main/java/com/zsc/edu/gateway/modules/iot/device/service/DeviceService.java index 4ba2474..04b8b34 100644 --- a/src/main/java/com/zsc/edu/gateway/modules/iot/device/service/DeviceService.java +++ b/src/main/java/com/zsc/edu/gateway/modules/iot/device/service/DeviceService.java @@ -39,5 +39,4 @@ public interface DeviceService extends IService { int toggle(Long id); - boolean deleteIconOrPreview(Long id, String attachmentId); } diff --git a/src/main/java/com/zsc/edu/gateway/modules/iot/device/service/impl/DeviceServiceImpl.java b/src/main/java/com/zsc/edu/gateway/modules/iot/device/service/impl/DeviceServiceImpl.java index 2f7f331..181451e 100644 --- a/src/main/java/com/zsc/edu/gateway/modules/iot/device/service/impl/DeviceServiceImpl.java +++ b/src/main/java/com/zsc/edu/gateway/modules/iot/device/service/impl/DeviceServiceImpl.java @@ -254,20 +254,4 @@ public class DeviceServiceImpl extends ServiceImpl imp return baseMapper.updateById(device); } - /** - * 删除设备头像 - */ - @Override - public boolean deleteIconOrPreview(Long id, String attachmentId) { - Device device = baseMapper.selectById(id); - if (device.getIconId().equals(attachmentId)) { - device.setIconId(""); - } - if (device.getPreviewId().equals(attachmentId)) { - device.setPreviewId(""); - } - attachmentService.delete(attachmentId); - baseMapper.updateById(device); - return true; - } } \ No newline at end of file diff --git a/src/main/java/com/zsc/edu/gateway/modules/iot/product/controller/ProductController.java b/src/main/java/com/zsc/edu/gateway/modules/iot/product/controller/ProductController.java index 47b1d67..165357b 100644 --- a/src/main/java/com/zsc/edu/gateway/modules/iot/product/controller/ProductController.java +++ b/src/main/java/com/zsc/edu/gateway/modules/iot/product/controller/ProductController.java @@ -112,5 +112,15 @@ public class ProductController { public Object status() { return service.status(); } + + + /** + * 删除图片或预览图 + */ + @DeleteMapping("/attachment/{id}") + @OperationLogAnnotation(content = "'设备图片或预览图'", operationType = "删除") + public Boolean deleteIconOrPreview(@PathVariable("id") Long id, String attachmentId) { + return service.deleteIconOrPreview(id, attachmentId); + } } diff --git a/src/main/java/com/zsc/edu/gateway/modules/iot/product/service/ProductService.java b/src/main/java/com/zsc/edu/gateway/modules/iot/product/service/ProductService.java index 73f89c7..24b01d9 100644 --- a/src/main/java/com/zsc/edu/gateway/modules/iot/product/service/ProductService.java +++ b/src/main/java/com/zsc/edu/gateway/modules/iot/product/service/ProductService.java @@ -25,4 +25,6 @@ public interface ProductService extends IService { List list(ProductQuery query); ProductStatusVo status(); + + boolean deleteIconOrPreview(Long id, String attachmentId); } diff --git a/src/main/java/com/zsc/edu/gateway/modules/iot/product/service/impl/ProductServiceImpl.java b/src/main/java/com/zsc/edu/gateway/modules/iot/product/service/impl/ProductServiceImpl.java index 3a4df6a..21ba1ce 100644 --- a/src/main/java/com/zsc/edu/gateway/modules/iot/product/service/impl/ProductServiceImpl.java +++ b/src/main/java/com/zsc/edu/gateway/modules/iot/product/service/impl/ProductServiceImpl.java @@ -3,6 +3,7 @@ package com.zsc.edu.gateway.modules.iot.product.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.zsc.edu.gateway.exception.ConstraintException; +import com.zsc.edu.gateway.modules.attachment.service.AttachmentService; import com.zsc.edu.gateway.modules.iot.product.dto.ProductDto; import com.zsc.edu.gateway.modules.iot.product.entity.Product; import com.zsc.edu.gateway.modules.iot.product.mapper.ProductMapper; @@ -27,6 +28,7 @@ import java.util.List; public class ProductServiceImpl extends ServiceImpl implements ProductService { private final ProductMapper mapper; private final ParamService paramService; + private final AttachmentService attachmentService; /** * 新建产品 @@ -100,4 +102,22 @@ public class ProductServiceImpl extends ServiceImpl vo.disabledCount = baseMapper.selectCount(new LambdaQueryWrapper().eq(Product::getEnabled, false)); return vo; } + + + /** + * 删除设备头像 + */ + @Override + public boolean deleteIconOrPreview(Long id, String attachmentId) { + Product product = baseMapper.selectById(id); + if (product.getIconId().equals(attachmentId)) { + product.setIconId(""); + } + if (product.getPreviewId().equals(attachmentId)) { + product.setPreviewId(""); + } + attachmentService.delete(attachmentId); + baseMapper.updateById(product); + return true; + } } diff --git a/storage/attachment/83908a0b3bc79d1d94d966c8e860b4559fee8776 b/storage/attachment/83908a0b3bc79d1d94d966c8e860b4559fee8776 deleted file mode 100644 index be3826cd6e9feff17b4b387f63d111684cd2b8ed..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5253 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 a%Krg#T|9mMnx7v40000