From 275b7fbe504f6f23217b92f2eadf8dcb5509abb8 Mon Sep 17 00:00:00 2001 From: zhuangtianxiang <2913129173@qq.com> Date: Wed, 8 Jan 2025 21:56:26 +0800 Subject: [PATCH] =?UTF-8?q?refactor(iot):=20=E9=87=8D=E6=9E=84=E8=AE=BE?= =?UTF-8?q?=E5=A4=87=E5=B1=9E=E6=80=A7=E5=92=8C=E6=89=A9=E5=B1=95=E5=8F=82?= =?UTF-8?q?=E6=95=B0=E7=9A=84=E5=AD=98=E5=82=A8=E6=96=B9=E5=BC=8F-=20?= =?UTF-8?q?=E5=B0=86=E8=AE=BE=E5=A4=87=E5=B1=9E=E6=80=A7=E5=92=8C=E6=89=A9?= =?UTF-8?q?=E5=B1=95=E5=8F=82=E6=95=B0=E4=BB=8E=20Map=20?= =?UTF-8?q?=E6=94=B9=E4=B8=BA=20List>=20=E7=B1=BB?= =?UTF-8?q?=E5=9E=8B=20-=20=E6=9B=B4=E6=96=B0=E4=BA=86=E7=9B=B8=E5=85=B3?= =?UTF-8?q?=E7=9A=84=20DTO=E3=80=81Entity=20=E5=92=8C=20Mapper=20=E6=96=87?= =?UTF-8?q?=E4=BB=B6=20-=20=E9=87=8D=E5=91=BD=E5=90=8D=E5=B9=B6=E9=87=8D?= =?UTF-8?q?=E6=9E=84=E4=BA=86=20JsonTypeHandler=20=E7=B1=BB=EF=BC=8C?= =?UTF-8?q?=E4=BD=BF=E5=85=B6=E6=94=AF=E6=8C=81=E5=A4=9A=E7=A7=8D=20JSON?= =?UTF-8?q?=20=E6=A0=BC=E5=BC=8F=E7=9A=84=E5=A4=84=E7=90=86=20-=20?= =?UTF-8?q?=E6=9B=B4=E6=96=B0=E4=BA=86=20Menu=20=E7=B1=BB=E4=B8=AD?= =?UTF-8?q?=E7=9A=84=20Type=20=E6=9E=9A=E4=B8=BE=EF=BC=8C=E4=BD=BF?= =?UTF-8?q?=E5=85=B6=E5=AE=9E=E7=8E=B0=20IEnum=20=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../framework/json/JsonTypeHandler.java | 78 +++++++++++++++++++ .../framework/json/MapJsonTypeHandler.java | 61 --------------- .../iot/device/dto/BatchDeviceDto.java | 6 +- .../modules/iot/device/dto/DeviceDto.java | 7 +- .../modules/iot/device/entity/Device.java | 14 ++-- .../modules/iot/device/vo/DeviceVo.java | 6 +- .../modules/iot/record/entity/RecordData.java | 4 +- .../service/impl/RecordDataServiceImpl.java | 1 - .../system/controller/UserController.java | 2 +- .../gateway/modules/system/entity/Menu.java | 35 +++++++-- .../resources/mappers/iot/DeviceMapper.xml | 4 +- 11 files changed, 132 insertions(+), 86 deletions(-) create mode 100644 src/main/java/com/zsc/edu/gateway/framework/json/JsonTypeHandler.java delete mode 100644 src/main/java/com/zsc/edu/gateway/framework/json/MapJsonTypeHandler.java diff --git a/src/main/java/com/zsc/edu/gateway/framework/json/JsonTypeHandler.java b/src/main/java/com/zsc/edu/gateway/framework/json/JsonTypeHandler.java new file mode 100644 index 0000000..bec2b7a --- /dev/null +++ b/src/main/java/com/zsc/edu/gateway/framework/json/JsonTypeHandler.java @@ -0,0 +1,78 @@ +package com.zsc.edu.gateway.framework.json; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import org.apache.ibatis.type.BaseTypeHandler; +import org.apache.ibatis.type.JdbcType; +import org.springframework.stereotype.Component; + +import java.sql.CallableStatement; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * @author zhuang + */ +@Component +public class JsonTypeHandler extends BaseTypeHandler { + + private static final ObjectMapper objectMapper = new ObjectMapper(); + + @Override + public void setNonNullParameter(PreparedStatement ps, int i, Object parameter, JdbcType jdbcType) throws SQLException { + try { + String jsonString; + if (parameter instanceof Map) { + jsonString = objectMapper.writeValueAsString(parameter); + } else if (parameter instanceof String) { + jsonString = (String) parameter; + } else if (parameter instanceof List) { + jsonString = objectMapper.writeValueAsString(parameter); + } else { + throw new SQLException("Unsupported parameter type: " + parameter.getClass().getName()); + } + ps.setString(i, jsonString); + } catch (JsonProcessingException e) { + throw new SQLException("Error converting object to JSON", e); + } + } + + @Override + public Object getNullableResult(ResultSet rs, String columnName) throws SQLException { + String json = rs.getString(columnName); + return parseJson(json); + } + + @Override + public Object getNullableResult(ResultSet rs, int columnIndex) throws SQLException { + String json = rs.getString(columnIndex); + return parseJson(json); + } + + @Override + public Object getNullableResult(CallableStatement cs, int columnIndex) throws SQLException { + String json = cs.getString(columnIndex); + return parseJson(json); + } + + private Object parseJson(String json) { + if (json == null) { + return null; + } + try { + if (json.startsWith("{")) { + return objectMapper.readValue(json, HashMap.class); + } else if (json.startsWith("[")) { + return objectMapper.readValue(json, List.class); + } else { + throw new RuntimeException("Invalid JSON format"); + } + } catch (Exception e) { + throw new RuntimeException("Error parsing JSON", e); + } + } +} diff --git a/src/main/java/com/zsc/edu/gateway/framework/json/MapJsonTypeHandler.java b/src/main/java/com/zsc/edu/gateway/framework/json/MapJsonTypeHandler.java deleted file mode 100644 index 32ee136..0000000 --- a/src/main/java/com/zsc/edu/gateway/framework/json/MapJsonTypeHandler.java +++ /dev/null @@ -1,61 +0,0 @@ -package com.zsc.edu.gateway.framework.json; - -import org.apache.ibatis.type.BaseTypeHandler; -import org.apache.ibatis.type.JdbcType; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.ObjectMapper; -import org.springframework.stereotype.Component; - -import java.sql.CallableStatement; -import java.sql.PreparedStatement; -import java.sql.ResultSet; -import java.sql.SQLException; -import java.util.HashMap; -import java.util.Map; - -/** - * @author zhuang - */ -@Component -public class MapJsonTypeHandler extends BaseTypeHandler> { - - private static final ObjectMapper objectMapper = new ObjectMapper(); - - @Override - public void setNonNullParameter(PreparedStatement ps, int i, Map parameter, JdbcType jdbcType) throws SQLException { - try { - ps.setString(i, objectMapper.writeValueAsString(parameter)); - } catch (JsonProcessingException e) { - throw new SQLException("Error converting map to JSON", e); - } - } - - @Override - public Map getNullableResult(ResultSet rs, String columnName) throws SQLException { - String json = rs.getString(columnName); - return parseJson(json); - } - - @Override - public Map getNullableResult(ResultSet rs, int columnIndex) throws SQLException { - String json = rs.getString(columnIndex); - return parseJson(json); - } - - @Override - public Map getNullableResult(CallableStatement cs, int columnIndex) throws SQLException { - String json = cs.getString(columnIndex); - return parseJson(json); - } - - private Map parseJson(String json) { - if (json == null) { - return null; - } - try { - return objectMapper.readValue(json, HashMap.class); - } catch (Exception e) { - throw new RuntimeException("Error parsing JSON to map", e); - } - } -} \ No newline at end of file diff --git a/src/main/java/com/zsc/edu/gateway/modules/iot/device/dto/BatchDeviceDto.java b/src/main/java/com/zsc/edu/gateway/modules/iot/device/dto/BatchDeviceDto.java index 95dfec3..eb82a67 100644 --- a/src/main/java/com/zsc/edu/gateway/modules/iot/device/dto/BatchDeviceDto.java +++ b/src/main/java/com/zsc/edu/gateway/modules/iot/device/dto/BatchDeviceDto.java @@ -7,7 +7,9 @@ import lombok.NoArgsConstructor; import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotNull; +import org.springframework.boot.configurationprocessor.json.JSONObject; +import java.util.List; import java.util.Map; /** @@ -33,11 +35,11 @@ public class BatchDeviceDto { /** * 扩展属性 */ - private Map extendParams; + private List> extendParams; /** * 设备物模型属性 */ - private Map properties; + private List> properties; /** * 固件版本 */ 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 184ba49..a31bae9 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 @@ -6,7 +6,9 @@ import lombok.EqualsAndHashCode; import lombok.NoArgsConstructor; import jakarta.validation.constraints.NotBlank; +import org.springframework.boot.configurationprocessor.json.JSONObject; +import java.util.List; import java.util.Map; /** @@ -36,12 +38,13 @@ public class DeviceDto { /** * 扩展属性 */ - private Map extendParams; + + private List> extendParams; /** * 设备物模型属性 */ - private Map properties; + private List> properties; /** * 所属产品 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 b50b1de..5636a4d 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 @@ -4,15 +4,16 @@ import com.baomidou.mybatisplus.annotation.IEnum; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; import com.zsc.edu.gateway.common.enums.IState; -import com.zsc.edu.gateway.framework.json.MapJsonTypeHandler; +import com.zsc.edu.gateway.framework.json.JsonTypeHandler; import com.zsc.edu.gateway.modules.iot.product.entity.Product; import com.zsc.edu.gateway.modules.system.entity.BaseEntity; import lombok.AllArgsConstructor; import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; +import org.springframework.boot.configurationprocessor.json.JSONObject; -import java.util.Map; +import java.util.List; /** * @author 15864 @@ -64,14 +65,15 @@ public class Device extends BaseEntity { /** * 扩展配置 */ - @TableField(typeHandler = MapJsonTypeHandler.class) - private Map extendParams; + //TODO String + @TableField(typeHandler = JsonTypeHandler.class) + private List extendParams; /** * 设备属性 */ - @TableField(typeHandler = MapJsonTypeHandler.class) - private Map properties; + @TableField(typeHandler = JsonTypeHandler.class) + private List properties; /** * 所属产品ID 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 ff4cccf..6fe42ed 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 @@ -6,8 +6,10 @@ import com.zsc.edu.gateway.modules.iot.device.entity.Device; import com.zsc.edu.gateway.modules.iot.product.entity.Product; import com.zsc.edu.gateway.modules.iot.tsl.entity.Param; import lombok.Data; +import org.springframework.boot.configurationprocessor.json.JSONObject; import java.time.LocalDateTime; +import java.util.List; import java.util.Map; import java.util.Set; @@ -61,12 +63,12 @@ public class DeviceVo { /** * 扩展配置 */ - private Map extendParams; + private List> extendParams; /** * 设备属性 */ - private Map properties; + private List> properties; /** * 备注说明 diff --git a/src/main/java/com/zsc/edu/gateway/modules/iot/record/entity/RecordData.java b/src/main/java/com/zsc/edu/gateway/modules/iot/record/entity/RecordData.java index d5cd90f..8d6637e 100644 --- a/src/main/java/com/zsc/edu/gateway/modules/iot/record/entity/RecordData.java +++ b/src/main/java/com/zsc/edu/gateway/modules/iot/record/entity/RecordData.java @@ -3,7 +3,7 @@ package com.zsc.edu.gateway.modules.iot.record.entity; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; -import com.zsc.edu.gateway.framework.json.MapJsonTypeHandler; +import com.zsc.edu.gateway.framework.json.JsonTypeHandler; import lombok.*; import org.springframework.format.annotation.DateTimeFormat; @@ -26,7 +26,7 @@ public class RecordData { private String attachmentId; - @TableField(typeHandler = MapJsonTypeHandler.class) + @TableField(typeHandler = JsonTypeHandler.class) private Map content; @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") diff --git a/src/main/java/com/zsc/edu/gateway/modules/iot/record/service/impl/RecordDataServiceImpl.java b/src/main/java/com/zsc/edu/gateway/modules/iot/record/service/impl/RecordDataServiceImpl.java index 11b3128..942e6fa 100644 --- a/src/main/java/com/zsc/edu/gateway/modules/iot/record/service/impl/RecordDataServiceImpl.java +++ b/src/main/java/com/zsc/edu/gateway/modules/iot/record/service/impl/RecordDataServiceImpl.java @@ -38,7 +38,6 @@ public class RecordDataServiceImpl extends ServiceImpl recordData(String clientId) { LocalDateTime recordTime = LocalDateTime.parse(redisUtils.get("serve:sendTime:photograph:" + clientId)); diff --git a/src/main/java/com/zsc/edu/gateway/modules/system/controller/UserController.java b/src/main/java/com/zsc/edu/gateway/modules/system/controller/UserController.java index 4fbadbe..277883e 100644 --- a/src/main/java/com/zsc/edu/gateway/modules/system/controller/UserController.java +++ b/src/main/java/com/zsc/edu/gateway/modules/system/controller/UserController.java @@ -191,7 +191,7 @@ public class UserController { } /** - * 根据ID查询用户 + * 获取MENU * */ @GetMapping("/menu") public List menu(@AuthenticationPrincipal UserDetailsImpl userDetails) { diff --git a/src/main/java/com/zsc/edu/gateway/modules/system/entity/Menu.java b/src/main/java/com/zsc/edu/gateway/modules/system/entity/Menu.java index 76ad607..09ce7a6 100644 --- a/src/main/java/com/zsc/edu/gateway/modules/system/entity/Menu.java +++ b/src/main/java/com/zsc/edu/gateway/modules/system/entity/Menu.java @@ -1,7 +1,9 @@ package com.zsc.edu.gateway.modules.system.entity; -import com.baomidou.mybatisplus.annotation.EnumValue; + +import com.baomidou.mybatisplus.annotation.IEnum; import com.baomidou.mybatisplus.annotation.TableName; +import com.zsc.edu.gateway.common.enums.IState; import lombok.*; /** @@ -29,14 +31,33 @@ public class Menu extends BaseEntity { private String permissions; private String authority; - @Getter - @AllArgsConstructor - public enum Type { + public enum Type implements IEnum, IState { + /** + * 页面 + */ PAGE(1, "页面"), + /** + * 操作 + */ OPERATION(2, "操作"); - @EnumValue - private final Integer code; - private final String desc; + + private final Integer value; + private final String description; + + Type(int value, String description) { + this.value = value; + this.description = description; + } + + @Override + public Integer getValue() { + return this.value; + } + + @Override + public String toString() { + return this.description; + } } } diff --git a/src/main/resources/mappers/iot/DeviceMapper.xml b/src/main/resources/mappers/iot/DeviceMapper.xml index dc7af49..d917639 100644 --- a/src/main/resources/mappers/iot/DeviceMapper.xml +++ b/src/main/resources/mappers/iot/DeviceMapper.xml @@ -14,9 +14,9 @@ + typeHandler="com.zsc.edu.gateway.framework.json.JsonTypeHandler"/> + typeHandler="com.zsc.edu.gateway.framework.json.JsonTypeHandler"/>