From d155876f0957e0a3b84519f1530f8e444e9961c1 Mon Sep 17 00:00:00 2001 From: puhui999 Date: Mon, 24 Mar 2025 17:37:22 +0800 Subject: [PATCH] =?UTF-8?q?=E3=80=90=E4=BB=A3=E7=A0=81=E4=BC=98=E5=8C=96?= =?UTF-8?q?=E3=80=91IoT:=20=E7=89=A9=E6=A8=A1=E5=9E=8B=E5=8F=82=E6=95=B0?= =?UTF-8?q?=E6=A0=A1=E9=AA=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../thingmodel/IotThingModelController.http | 4 +-- .../dataType/ThingModelArrayDataSpecs.java | 15 +++++---- .../ThingModelBoolOrEnumDataSpecs.java | 17 +++++----- .../ThingModelDateOrTextDataSpecs.java | 2 ++ .../dataType/ThingModelNumericDataSpec.java | 11 +++++-- .../dataType/ThingModelStructDataSpecs.java | 33 +++++++++++-------- 6 files changed, 48 insertions(+), 34 deletions(-) diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/thingmodel/IotThingModelController.http b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/thingmodel/IotThingModelController.http index e041cdc8af..4f579c4536 100644 --- a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/thingmodel/IotThingModelController.http +++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/thingmodel/IotThingModelController.http @@ -174,7 +174,7 @@ GET {{baseUrl}}/iot/product-thing-model/get?id=67 tenant-id: {{adminTenentId}} Authorization: Bearer {{token}} -### 请求 /iot/product-thing-model/tsl-by-product-id 接口 => 成功 -GET {{baseUrl}}/iot/product-thing-model/tsl-by-product-id?productId=1001 +### 请求 /iot/product-thing-model/get-tsl 接口 => 成功 +GET {{baseUrl}}/iot/product-thing-model/get-tsl?productId=1001 tenant-id: {{adminTenentId}} Authorization: Bearer {{token}} \ No newline at end of file diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/thingmodel/model/dataType/ThingModelArrayDataSpecs.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/thingmodel/model/dataType/ThingModelArrayDataSpecs.java index 50011aabf4..554bd2a83d 100644 --- a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/thingmodel/model/dataType/ThingModelArrayDataSpecs.java +++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/thingmodel/model/dataType/ThingModelArrayDataSpecs.java @@ -1,6 +1,10 @@ package cn.iocoder.yudao.module.iot.controller.admin.thingmodel.model.dataType; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotEmpty; +import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Pattern; import lombok.Data; import lombok.EqualsAndHashCode; @@ -16,18 +20,17 @@ import java.util.List; @JsonIgnoreProperties({"dataType"}) // 忽略子类中的 dataType 字段,从而避免重复 public class ThingModelArrayDataSpecs extends ThingModelDataSpecs { - /** - * 数组中的元素个数 - */ + @NotNull(message = "数组元素个数不能为空") private Integer size; - /** - * 数组中的元素的数据类型。可选值:struct、int、float、double 或 text - */ + + @NotEmpty(message = "数组元素的数据类型不能为空") + @Pattern(regexp = "^(struct|int|float|double|text)$", message = "数组元素的数据类型必须为:struct、int、float、double 或 text") private String childDataType; /** * 数据类型(childDataType)为列表型 struct 的数据规范存储在 dataSpecsList 中 * 此时 struct 取值范围为:int、float、double、text、date、enum、bool */ + @Valid private List dataSpecsList; } diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/thingmodel/model/dataType/ThingModelBoolOrEnumDataSpecs.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/thingmodel/model/dataType/ThingModelBoolOrEnumDataSpecs.java index 925bc67196..80a4e0d970 100644 --- a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/thingmodel/model/dataType/ThingModelBoolOrEnumDataSpecs.java +++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/thingmodel/model/dataType/ThingModelBoolOrEnumDataSpecs.java @@ -1,6 +1,9 @@ package cn.iocoder.yudao.module.iot.controller.admin.thingmodel.model.dataType; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import jakarta.validation.constraints.NotEmpty; +import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Pattern; import lombok.Data; import lombok.EqualsAndHashCode; @@ -16,16 +19,12 @@ import lombok.EqualsAndHashCode; @JsonIgnoreProperties({"dataType"}) // 忽略子类中的 dataType 字段,从而避免重复 public class ThingModelBoolOrEnumDataSpecs extends ThingModelDataSpecs { - // TODO @puhui999:要不写下参数校验?这样,注释可以简洁一点 - /** - * 枚举项的名称。 - * 可包含中文、大小写英文字母、数字、下划线(_)和短划线(-) - * 必须以中文、英文字母或数字开头,长度不超过 20 个字符 - */ + @NotEmpty(message = "枚举项的名称不能为空") + @Pattern(regexp = "^[\\u4e00-\\u9fa5a-zA-Z0-9][\\u4e00-\\u9fa5a-zA-Z0-9_-]{0,19}$", + message = "枚举项的名称只能包含中文、大小写英文字母、数字、下划线和短划线,必须以中文、英文字母或数字开头,长度不超过 20 个字符") private String name; - /** - * 枚举值。 - */ + + @NotNull(message = "枚举值不能为空") private Integer value; } diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/thingmodel/model/dataType/ThingModelDateOrTextDataSpecs.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/thingmodel/model/dataType/ThingModelDateOrTextDataSpecs.java index 62500bc560..489833d4ba 100644 --- a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/thingmodel/model/dataType/ThingModelDateOrTextDataSpecs.java +++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/thingmodel/model/dataType/ThingModelDateOrTextDataSpecs.java @@ -1,6 +1,7 @@ package cn.iocoder.yudao.module.iot.controller.admin.thingmodel.model.dataType; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import jakarta.validation.constraints.Max; import lombok.Data; import lombok.EqualsAndHashCode; @@ -20,6 +21,7 @@ public class ThingModelDateOrTextDataSpecs extends ThingModelDataSpecs { * 数据长度,单位为字节。取值不能超过 2048。 * 当 dataType 为 text 时,需传入该参数。 */ + @Max(value = 2048, message = "数据长度不能超过 2048") private Integer length; /** * 默认值,可选参数,用于存储默认值。 diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/thingmodel/model/dataType/ThingModelNumericDataSpec.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/thingmodel/model/dataType/ThingModelNumericDataSpec.java index 8d0827c011..bd3457d7d5 100644 --- a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/thingmodel/model/dataType/ThingModelNumericDataSpec.java +++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/thingmodel/model/dataType/ThingModelNumericDataSpec.java @@ -1,6 +1,8 @@ package cn.iocoder.yudao.module.iot.controller.admin.thingmodel.model.dataType; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import jakarta.validation.constraints.NotEmpty; +import jakarta.validation.constraints.Pattern; import lombok.Data; import lombok.EqualsAndHashCode; @@ -18,18 +20,21 @@ public class ThingModelNumericDataSpec extends ThingModelDataSpecs { /** * 最大值,需转为字符串类型。值必须与 dataType 类型一致。 - * 例如,当 dataType 为 int 时,取值为 "200",而不是 200。 */ + @NotEmpty(message = "最大值不能为空") + @Pattern(regexp = "^-?\\d+(\\.\\d+)?$", message = "最大值必须为数值类型") private String max; /** * 最小值,需转为字符串类型。值必须与 dataType 类型一致。 - * 例如,当 dataType 为 int 时,取值为 "0",而不是 0。 */ + @NotEmpty(message = "最小值不能为空") + @Pattern(regexp = "^-?\\d+(\\.\\d+)?$", message = "最小值必须为数值类型") private String min; /** * 步长,需转为字符串类型。值必须与 dataType 类型一致。 - * 例如,当 dataType 为 int 时,取值为 "10",而不是 10。 */ + @NotEmpty(message = "步长不能为空") + @Pattern(regexp = "^-?\\d+(\\.\\d+)?$", message = "步长必须为数值类型") private String step; /** * 精度。当 dataType 为 float 或 double 时可选传入。 diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/thingmodel/model/dataType/ThingModelStructDataSpecs.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/thingmodel/model/dataType/ThingModelStructDataSpecs.java index 6d483eeaa9..6ab7902e9f 100644 --- a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/thingmodel/model/dataType/ThingModelStructDataSpecs.java +++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/thingmodel/model/dataType/ThingModelStructDataSpecs.java @@ -1,7 +1,11 @@ package cn.iocoder.yudao.module.iot.controller.admin.thingmodel.model.dataType; +import cn.iocoder.yudao.framework.common.validation.InEnum; import cn.iocoder.yudao.module.iot.enums.thingmodel.IotThingModelAccessModeEnum; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotEmpty; +import jakarta.validation.constraints.Pattern; import lombok.Data; import lombok.EqualsAndHashCode; @@ -17,35 +21,36 @@ import java.util.List; @JsonIgnoreProperties({"dataType"}) // 忽略子类中的 dataType 字段,从而避免重复 public class ThingModelStructDataSpecs extends ThingModelDataSpecs { - /** - * 属性标识符 - */ + @NotEmpty(message = "属性标识符不能为空") + @Pattern(regexp = "^[a-zA-Z][a-zA-Z0-9_]{0,31}$", message = "属性标识符只能由字母、数字和下划线组成,必须以字母开头,长度不超过 32 个字符") private String identifier; - /** - * 属性名称 - */ + + @NotEmpty(message = "属性名称不能为空") private String name; - /** - * 云端可以对该属性进行的操作类型 - * - * 枚举 {@link IotThingModelAccessModeEnum} - */ + + @NotEmpty(message = "操作类型不能为空") + @InEnum(IotThingModelAccessModeEnum.class) private String accessMode; + /** * 是否是标准品类的必选服务 */ private Boolean required; - /** - * struct 数据的数据类型 - */ + + @NotEmpty(message = "数据类型不能为空") + @Pattern(regexp = "^(int|float|double|text|date|enum|bool)$", message = "数据类型必须为:int、float、double、text、date、enum、bool") private String childDataType; + /** * 数据类型(dataType)为非列表型(int、float、double、text、date、array)的数据规范存储在 dataSpecs 中 */ + @Valid private ThingModelDataSpecs dataSpecs; + /** * 数据类型(dataType)为列表型(enum、bool、struct)的数据规范存储在 dataSpecsList 中 */ + @Valid private List dataSpecsList; }