diff --git a/pom.xml b/pom.xml
index 0ae4ba0..6c044a5 100644
--- a/pom.xml
+++ b/pom.xml
@@ -145,7 +145,6 @@
org.springframework.boot
spring-boot-starter-websocket
- 3.4.0
org.slf4j
diff --git a/src/main/java/com/zsc/edu/gateway/framework/message/websocket/WebSocketInterceptor.java b/src/main/java/com/zsc/edu/gateway/framework/message/websocket/WebSocketInterceptor.java
index 60c332a..795ff42 100644
--- a/src/main/java/com/zsc/edu/gateway/framework/message/websocket/WebSocketInterceptor.java
+++ b/src/main/java/com/zsc/edu/gateway/framework/message/websocket/WebSocketInterceptor.java
@@ -26,16 +26,14 @@ public class WebSocketInterceptor implements HandshakeInterceptor {
private ProductService productService;
@Override
- public boolean beforeHandshake(ServerHttpRequest request, ServerHttpResponse response, WebSocketHandler wsHandler, Map attributes) throws Exception {
+ public boolean beforeHandshake(ServerHttpRequest request, ServerHttpResponse response, WebSocketHandler wsHandler, Map attributes) {
if (request instanceof ServletServerHttpRequest) {
HttpServletRequest servletRequest = ((ServletServerHttpRequest) request).getServletRequest();
- // 获取路径变量
+ // 获取完整路径
String path = servletRequest.getRequestURI();
- String[] pathParts = path.split("/");
- String pathVariable = pathParts[pathParts.length - 1];
- // 根据路径变量设置不同的业务逻辑 Supplier
- switch (pathVariable) {
+ // 根据路径设置不同的业务逻辑 Supplier
+ switch (path) {
case "/api/rest/device/ws/device/status":
attributes.put("dataSupplier", (Supplier) () -> String.valueOf(deviceService.status()));
break;
@@ -46,7 +44,7 @@ public class WebSocketInterceptor implements HandshakeInterceptor {
attributes.put("dataSupplier", (Supplier) () -> String.valueOf(productService.status()));
break;
default:
- attributes.put("dataSupplier", (Supplier) () -> "Unknown path: " + pathVariable);
+ attributes.put("dataSupplier", (Supplier) () -> "Unknown path: " + path);
break;
}
}
diff --git a/src/main/java/com/zsc/edu/gateway/modules/attachment/controller/AttachmentController.java b/src/main/java/com/zsc/edu/gateway/modules/attachment/controller/AttachmentController.java
index a991499..f951c76 100644
--- a/src/main/java/com/zsc/edu/gateway/modules/attachment/controller/AttachmentController.java
+++ b/src/main/java/com/zsc/edu/gateway/modules/attachment/controller/AttachmentController.java
@@ -1,6 +1,7 @@
package com.zsc.edu.gateway.modules.attachment.controller;
import com.zsc.edu.gateway.exception.StorageException;
+import com.zsc.edu.gateway.framework.storage.exception.StorageFileNotFoundException;
import com.zsc.edu.gateway.modules.attachment.entity.Attachment;
import com.zsc.edu.gateway.modules.attachment.service.AttachmentService;
import com.zsc.edu.gateway.modules.operationLog.entity.OperationLogAnnotation;
@@ -8,6 +9,7 @@ import lombok.AllArgsConstructor;
import org.springframework.core.io.Resource;
import org.springframework.http.ContentDisposition;
import org.springframework.http.HttpHeaders;
+import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.security.core.parameters.P;
import org.springframework.web.bind.annotation.*;
@@ -73,6 +75,43 @@ public class AttachmentController {
}
return ResponseEntity.ok(wrapper.resource);
}
+
+ /**
+ * 预览附件
+ *
+ * @param id 附件ID
+ * @return 附件文件内容(直接预览)
+ */
+ @GetMapping("/preview/{id}")
+ public ResponseEntity> preview(
+ @PathVariable("id") String id
+ ) {
+ try {
+ Attachment.Wrapper wrapper = service.loadAsWrapper(id);
+ String mimeType = wrapper.attachment.mimeType;
+
+ // 如果是图片或 PDF,直接返回文件流
+ if (mimeType.startsWith("image/") || mimeType.equals("application/pdf")) {
+ ContentDisposition contentDisposition = ContentDisposition.builder("inline")
+ .filename(wrapper.attachment.fileName, StandardCharsets.UTF_8)
+ .build();
+
+ return ResponseEntity.ok()
+ .header(HttpHeaders.CONTENT_DISPOSITION, contentDisposition.toString())
+ .header(HttpHeaders.CONTENT_TYPE, mimeType)
+ .body(wrapper.resource);
+ } else {
+ // 如果是文本文件,直接返回文本内容
+ String content = new String(wrapper.resource.getInputStream().readAllBytes(), StandardCharsets.UTF_8);
+ return ResponseEntity.ok(content);
+ }
+ } catch (StorageFileNotFoundException e) {
+ return ResponseEntity.notFound().build();
+ } catch (IOException e) {
+ return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("文件读取失败");
+ }
+ }
+
/**
* 根据附件ID获取附件信息
* */
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 173a276..3315907 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
@@ -4,7 +4,6 @@ import com.alibaba.fastjson2.JSONException;
import com.alibaba.fastjson2.JSONObject;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.zsc.edu.gateway.framework.message.sse.SseConfig;
import com.zsc.edu.gateway.framework.mybatisplus.DataPermission;
import com.zsc.edu.gateway.modules.iot.device.dto.BatchDeviceDto;
import com.zsc.edu.gateway.modules.iot.device.dto.DeviceDto;
@@ -38,8 +37,6 @@ public class DeviceController {
DeviceService service;
RecordDataService recordService;
- @Resource
- private SseConfig sseConfig;
/**
* 创建设备
diff --git a/src/main/java/com/zsc/edu/gateway/modules/iot/device/dto/DeviceDto.java b/src/main/java/com/zsc/edu/gateway/modules/iot/device/dto/DeviceDto.java
index 9a7d190..19d2e91 100644
--- a/src/main/java/com/zsc/edu/gateway/modules/iot/device/dto/DeviceDto.java
+++ b/src/main/java/com/zsc/edu/gateway/modules/iot/device/dto/DeviceDto.java
@@ -64,4 +64,5 @@ public class DeviceDto {
*/
public String previewId;
+
}
diff --git a/src/main/java/com/zsc/edu/gateway/modules/iot/device/entity/Device.java b/src/main/java/com/zsc/edu/gateway/modules/iot/device/entity/Device.java
index fafa3da..7c673bb 100644
--- a/src/main/java/com/zsc/edu/gateway/modules/iot/device/entity/Device.java
+++ b/src/main/java/com/zsc/edu/gateway/modules/iot/device/entity/Device.java
@@ -121,7 +121,7 @@ public class Device extends BaseEntity {
* 设备预览图附件ID
*/
public String previewId;
-
+//TODO 设备运行状态
public enum Status implements IEnum, IState {
UNACTIVATED(0, "未激活"),
diff --git a/src/main/java/com/zsc/edu/gateway/modules/iot/device/query/DeviceQuery.java b/src/main/java/com/zsc/edu/gateway/modules/iot/device/query/DeviceQuery.java
index 76d4892..7c3a25b 100644
--- a/src/main/java/com/zsc/edu/gateway/modules/iot/device/query/DeviceQuery.java
+++ b/src/main/java/com/zsc/edu/gateway/modules/iot/device/query/DeviceQuery.java
@@ -43,10 +43,7 @@ public class DeviceQuery {
* 设态是否在线
*/
public Boolean isOnline;
- /**
- * 产品名称
- */
- public String productName;
+
public LambdaQueryWrapper wrapper() {
LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>();
diff --git a/src/main/java/com/zsc/edu/gateway/modules/iot/device/repo/DeviceRepository.java b/src/main/java/com/zsc/edu/gateway/modules/iot/device/repo/DeviceRepository.java
index 4ce1a5a..46bc9e4 100644
--- a/src/main/java/com/zsc/edu/gateway/modules/iot/device/repo/DeviceRepository.java
+++ b/src/main/java/com/zsc/edu/gateway/modules/iot/device/repo/DeviceRepository.java
@@ -32,4 +32,6 @@ public interface DeviceRepository extends BaseMapper {
Device findByClientId(@Param("clientId") String clientId);
List selectListByName(@Param("name") String name);
+
+ IPage selectPageByConditions(Page page, @Param("query") DeviceQuery query);
}
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 836c872..2f8e107 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
@@ -172,9 +172,10 @@ public class DeviceServiceImpl extends ServiceImpl imp
/**
* 查询设备列表
*/
+ //TODO 解决分页条件问题
@Override
public IPage query(Page page, DeviceQuery query) {
- return deviceRepo.selectPage(page, query.wrapper());
+ return baseMapper.selectPageByConditions(page, query);
}
/**
diff --git a/src/main/java/com/zsc/edu/gateway/modules/iot/device/vo/DeviceVo.java b/src/main/java/com/zsc/edu/gateway/modules/iot/device/vo/DeviceVo.java
index 3095526..094bafa 100644
--- a/src/main/java/com/zsc/edu/gateway/modules/iot/device/vo/DeviceVo.java
+++ b/src/main/java/com/zsc/edu/gateway/modules/iot/device/vo/DeviceVo.java
@@ -126,7 +126,6 @@ public class DeviceVo {
*/
public Attachment preview;
-
/**
* 所属产品ID
*/
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 f32cbf7..47b1d67 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
@@ -1,14 +1,12 @@
package com.zsc.edu.gateway.modules.iot.product.controller;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.zsc.edu.gateway.framework.message.sse.SseConfig;
import com.zsc.edu.gateway.framework.mybatisplus.DataPermission;
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.query.ProductQuery;
import com.zsc.edu.gateway.modules.iot.product.service.ProductService;
import com.zsc.edu.gateway.modules.operationLog.entity.OperationLogAnnotation;
-import jakarta.annotation.Resource;
import lombok.AllArgsConstructor;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;
@@ -25,8 +23,6 @@ public class ProductController {
private final ProductService service;
- @Resource
- SseConfig sseConfig;
/**
* 创建产品
diff --git a/src/main/resources/mappers/iot/DeviceMapper.xml b/src/main/resources/mappers/iot/DeviceMapper.xml
index 8016eb9..6f4ad9c 100644
--- a/src/main/resources/mappers/iot/DeviceMapper.xml
+++ b/src/main/resources/mappers/iot/DeviceMapper.xml
@@ -82,10 +82,27 @@
where d.id = #{id}
-