Browse Source

pms功能优化 设备属性模板 BOM 代码初始化 根据设备分类id 查询设备动态属性模板

zhangcl 10 tháng trước cách đây
mục cha
commit
315a23c8da
17 tập tin đã thay đổi với 369 bổ sung39 xóa
  1. 30 0
      yudao-module-pms/yudao-module-pms-api/src/main/java/cn/iocoder/yudao/module/pms/enums/devicetemplate/DeviceTemplateAttrAccessModeEnum.java
  2. 1 1
      yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/controller/admin/IotDeviceController.java
  3. 12 1
      yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/controller/admin/iotdevicetemplate/IotDeviceTemplateController.java
  4. 68 0
      yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/controller/admin/iotdevicetemplate/model/DeviceTemplateAttrs.java
  5. 34 0
      yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/controller/admin/iotdevicetemplate/model/datatype/DeviceTemplateAttrArrayDataSpecs.java
  6. 31 0
      yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/controller/admin/iotdevicetemplate/model/datatype/DeviceTemplateAttrBoolOrEnumDataSpecs.java
  7. 35 0
      yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/controller/admin/iotdevicetemplate/model/datatype/DeviceTemplateAttrDataSpecs.java
  8. 30 0
      yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/controller/admin/iotdevicetemplate/model/datatype/DeviceTemplateAttrDateOrTextDataSpecs.java
  9. 51 0
      yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/controller/admin/iotdevicetemplate/model/datatype/DeviceTemplateAttrNumericDataSpec.java
  10. 52 0
      yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/controller/admin/iotdevicetemplate/model/datatype/DeviceTemplateAttrStructDataSpecs.java
  11. 0 7
      yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/controller/admin/iotdevicetemplate/vo/IotDeviceTemplatePageReqVO.java
  12. 3 9
      yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/controller/admin/iotdevicetemplate/vo/IotDeviceTemplateRespVO.java
  13. 0 8
      yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/controller/admin/iotdevicetemplate/vo/IotDeviceTemplateSaveReqVO.java
  14. 7 11
      yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/dal/dataobject/iotdevicetemplate/IotDeviceTemplateDO.java
  15. 3 2
      yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/dal/mysql/iotdevicetemplate/IotDeviceTemplateMapper.java
  16. 7 0
      yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/service/iotdevicetemplate/IotDeviceTemplateService.java
  17. 5 0
      yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/service/iotdevicetemplate/IotDeviceTemplateServiceImpl.java

+ 30 - 0
yudao-module-pms/yudao-module-pms-api/src/main/java/cn/iocoder/yudao/module/pms/enums/devicetemplate/DeviceTemplateAttrAccessModeEnum.java

@@ -0,0 +1,30 @@
+package cn.iocoder.yudao.module.pms.enums.devicetemplate;
+
+import cn.iocoder.yudao.framework.common.core.ArrayValuable;
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+import java.util.Arrays;
+
+/**
+ * 设备模板属性 读取类型枚举
+ *
+ * @author ahh
+ */
+@AllArgsConstructor
+@Getter
+public enum DeviceTemplateAttrAccessModeEnum implements ArrayValuable<String> {
+
+    READ_ONLY("r"),
+    READ_WRITE("rw");
+
+    public static final String[] ARRAYS = Arrays.stream(values()).map(DeviceTemplateAttrAccessModeEnum::getMode).toArray(String[]::new);
+
+    private final String mode;
+
+    @Override
+    public String[] array() {
+        return ARRAYS;
+    }
+
+}

+ 1 - 1
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/controller/admin/IotDeviceController.java

@@ -32,7 +32,7 @@ import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.*;
 
 
 @Tag(name = "管理后台 - 设备台账")
-@RestController
+@RestController(value = "PMSIotDeviceController")
 @RequestMapping("/rq/iot-device")
 @Validated
 public class IotDeviceController {

+ 12 - 1
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/controller/admin/iotdevicetemplate/IotDeviceTemplateController.java

@@ -6,7 +6,9 @@ import cn.iocoder.yudao.framework.common.pojo.PageParam;
 import cn.iocoder.yudao.framework.common.pojo.PageResult;
 import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
 import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
-import cn.iocoder.yudao.module.pms.controller.admin.iotdevicetemplate.vo.*;
+import cn.iocoder.yudao.module.pms.controller.admin.iotdevicetemplate.vo.IotDeviceTemplatePageReqVO;
+import cn.iocoder.yudao.module.pms.controller.admin.iotdevicetemplate.vo.IotDeviceTemplateRespVO;
+import cn.iocoder.yudao.module.pms.controller.admin.iotdevicetemplate.vo.IotDeviceTemplateSaveReqVO;
 import cn.iocoder.yudao.module.pms.dal.dataobject.iotdevicetemplate.IotDeviceTemplateDO;
 import cn.iocoder.yudao.module.pms.service.iotdevicetemplate.IotDeviceTemplateService;
 import io.swagger.v3.oas.annotations.Operation;
@@ -75,6 +77,15 @@ public class IotDeviceTemplateController {
         return success(BeanUtils.toBean(pageResult, IotDeviceTemplateRespVO.class));
     }
 
+    @GetMapping("/list-by-device-category-id")
+    @Operation(summary = "根据设备分类id获取模板属性列表")
+    @Parameter(name = "deviceCategoryId", description = "设备分类id", required = true, example = "1024")
+    @PreAuthorize("@ss.hasPermission('rq:iot-device-template:query')")
+    public CommonResult<IotDeviceTemplateRespVO> getAttrsByDeviceCategoryId(@RequestParam("deviceCategoryId") Long deviceCategoryId) {
+        IotDeviceTemplateDO deviceTemplate = iotDeviceTemplateService.getTemplateByDeviceCategoryId(deviceCategoryId);
+        return success(BeanUtils.toBean(deviceTemplate, IotDeviceTemplateRespVO.class));
+    }
+
     @GetMapping("/export-excel")
     @Operation(summary = "导出PMS 功能优化 设备模板 Excel")
     @PreAuthorize("@ss.hasPermission('rq:iot-device-template:export')")

+ 68 - 0
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/controller/admin/iotdevicetemplate/model/DeviceTemplateAttrs.java

@@ -0,0 +1,68 @@
+package cn.iocoder.yudao.module.pms.controller.admin.iotdevicetemplate.model;
+
+import cn.iocoder.yudao.framework.common.validation.InEnum;
+import cn.iocoder.yudao.module.pms.controller.admin.iotdevicetemplate.model.datatype.DeviceTemplateAttrDataSpecs;
+import cn.iocoder.yudao.module.pms.enums.devicetemplate.DeviceTemplateAttrAccessModeEnum;
+import lombok.Data;
+
+import javax.validation.constraints.NotEmpty;
+import java.util.List;
+
+/**
+ * 设备模板属性 json
+ *
+ * dataSpecs 和 dataSpecsList 之中必须传入且只能传入一个
+ *
+ * @author ruiqi
+ */
+@Data
+public class DeviceTemplateAttrs {
+
+    /**
+     * 属性名称
+     */
+    @NotEmpty(message = "属性名称")
+    private String name;
+    /**
+     * placeholder 提示语
+     */
+    private String placeHolder;
+    /**
+     * 属性编码
+     */
+    private String code;
+    /**
+     * 属性数据类型 string number boolean
+     *
+     */
+    @NotEmpty(message = "数据类型")
+    private String type;
+    /**
+     * 是否必填 0不必填 1必填
+     */
+    private Integer requiredFlag;
+    /**
+     * 排序
+     */
+    private Integer sort;
+    /**
+     * 属性标识符
+     */
+    private String identifier;
+    /**
+     * 云端可以对该属性进行的操作类型
+     *
+     * 枚举 {@link DeviceTemplateAttrAccessModeEnum}
+     */
+    @InEnum(DeviceTemplateAttrAccessModeEnum.class)
+    private String accessMode;
+    /**
+     * 数据类型(dataType)为非列表型(int、float、double、text、date、array)的数据规范存储在 dataSpecs 中
+     */
+    private DeviceTemplateAttrDataSpecs dataSpecs;
+    /**
+     * 数据类型(dataType)为列表型(enum、bool、struct)的数据规范存储在 dataSpecsList 中
+     */
+    private List<DeviceTemplateAttrDataSpecs> dataSpecsList;
+
+}

+ 34 - 0
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/controller/admin/iotdevicetemplate/model/datatype/DeviceTemplateAttrArrayDataSpecs.java

@@ -0,0 +1,34 @@
+package cn.iocoder.yudao.module.pms.controller.admin.iotdevicetemplate.model.datatype;
+
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.util.List;
+
+/**
+ * 设备模板属性 数据类型为数组的 DataSpec 定义
+ *
+ * @author ruiqi
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@JsonIgnoreProperties({"dataType"}) // 忽略子类中的 dataType 字段,从而避免重复
+public class DeviceTemplateAttrArrayDataSpecs extends DeviceTemplateAttrDataSpecs {
+
+    /**
+     * 数组中的元素个数
+     */
+    private Integer size;
+    /**
+     * 数组中的元素的数据类型。可选值:struct、int、float、double 或 text
+     */
+    private String childDataType;
+    /**
+     * 数据类型(childDataType)为列表型 struct 的数据规范存储在 dataSpecsList 中
+     * 此时 struct 取值范围为:int、float、double、text、date、enum、bool
+     */
+    private List<DeviceTemplateAttrDataSpecs> dataSpecsList;
+
+}
+

+ 31 - 0
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/controller/admin/iotdevicetemplate/model/datatype/DeviceTemplateAttrBoolOrEnumDataSpecs.java

@@ -0,0 +1,31 @@
+package cn.iocoder.yudao.module.pms.controller.admin.iotdevicetemplate.model.datatype;
+
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * 设备模板属性 数据类型为布尔型或枚举型的 DataSpec 定义
+ *
+ * 数据类型,取值为 bool 或 enum。
+ *
+ * @author ruiqi
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@JsonIgnoreProperties({"dataType"}) // 忽略子类中的 dataType 字段,从而避免重复
+public class DeviceTemplateAttrBoolOrEnumDataSpecs extends DeviceTemplateAttrDataSpecs {
+
+    // TODO @puhui999:要不写下参数校验?这样,注释可以简洁一点
+    /**
+     * 枚举项的名称。
+     * 可包含中文、大小写英文字母、数字、下划线(_)和短划线(-)
+     * 必须以中文、英文字母或数字开头,长度不超过 20 个字符
+     */
+    private String name;
+    /**
+     * 枚举值。
+     */
+    private Integer value;
+
+}

+ 35 - 0
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/controller/admin/iotdevicetemplate/model/datatype/DeviceTemplateAttrDataSpecs.java

@@ -0,0 +1,35 @@
+package cn.iocoder.yudao.module.pms.controller.admin.iotdevicetemplate.model.datatype;
+
+import com.fasterxml.jackson.annotation.JsonSubTypes;
+import com.fasterxml.jackson.annotation.JsonTypeInfo;
+import lombok.Data;
+
+/**
+ * 设备模板属性 DeviceTemplateAttrDataSpecs 抽象类
+ *
+ * 用于表示设备模板属性数据的通用类型,根据具体的 "dataType" 字段动态映射到对应的子类。
+ * 提供多态支持,适用于不同类型的数据结构序列化和反序列化场景。
+ *
+ * @author ruiqi
+ */
+@Data
+@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, property = "dataType", visible = true)
+@JsonSubTypes({
+        @JsonSubTypes.Type(value = DeviceTemplateAttrNumericDataSpec.class, name = "int"),
+        @JsonSubTypes.Type(value = DeviceTemplateAttrNumericDataSpec.class, name = "float"),
+        @JsonSubTypes.Type(value = DeviceTemplateAttrNumericDataSpec.class, name = "double"),
+        @JsonSubTypes.Type(value = DeviceTemplateAttrDateOrTextDataSpecs.class, name = "text"),
+        @JsonSubTypes.Type(value = DeviceTemplateAttrDateOrTextDataSpecs.class, name = "date"),
+        @JsonSubTypes.Type(value = DeviceTemplateAttrBoolOrEnumDataSpecs.class, name = "bool"),
+        @JsonSubTypes.Type(value = DeviceTemplateAttrBoolOrEnumDataSpecs.class, name = "enum"),
+        @JsonSubTypes.Type(value = DeviceTemplateAttrArrayDataSpecs.class, name = "array"),
+        @JsonSubTypes.Type(value = DeviceTemplateAttrStructDataSpecs.class, name = "struct")
+})
+public abstract class DeviceTemplateAttrDataSpecs {
+
+    /**
+     * 数据类型
+     */
+    private String dataType;
+
+}

+ 30 - 0
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/controller/admin/iotdevicetemplate/model/datatype/DeviceTemplateAttrDateOrTextDataSpecs.java

@@ -0,0 +1,30 @@
+package cn.iocoder.yudao.module.pms.controller.admin.iotdevicetemplate.model.datatype;
+
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * 设备模板 数据类型为时间型或文本型的 DataSpec 定义
+ *
+ * 数据类型,取值为 date 或 text。
+ *
+ * @author ruiqi
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@JsonIgnoreProperties({"dataType"}) // 忽略子类中的 dataType 字段,从而避免重复
+public class DeviceTemplateAttrDateOrTextDataSpecs extends DeviceTemplateAttrDataSpecs {
+
+    /**
+     * 数据长度,单位为字节。取值不能超过 2048。
+     * 当 dataType 为 text 时,需传入该参数。
+     */
+    private Integer length;
+    /**
+     * 默认值,可选参数,用于存储默认值。
+     */
+    private String defaultValue;
+
+}
+

+ 51 - 0
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/controller/admin/iotdevicetemplate/model/datatype/DeviceTemplateAttrNumericDataSpec.java

@@ -0,0 +1,51 @@
+package cn.iocoder.yudao.module.pms.controller.admin.iotdevicetemplate.model.datatype;
+
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * 设备模板属性 数据类型为数值的 DataSpec 定义
+ *
+ * 数据类型,取值为 int、float 或 double。
+ *
+ * @author ruiqi
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@JsonIgnoreProperties({"dataType"}) // 忽略子类中的 dataType 字段,从而避免重复
+public class DeviceTemplateAttrNumericDataSpec extends DeviceTemplateAttrDataSpecs {
+
+    /**
+     * 最大值,需转为字符串类型。值必须与 dataType 类型一致。
+     * 例如,当 dataType 为 int 时,取值为 "200",而不是 200。
+     */
+    private String max;
+    /**
+     * 最小值,需转为字符串类型。值必须与 dataType 类型一致。
+     * 例如,当 dataType 为 int 时,取值为 "0",而不是 0。
+     */
+    private String min;
+    /**
+     * 步长,需转为字符串类型。值必须与 dataType 类型一致。
+     * 例如,当 dataType 为 int 时,取值为 "10",而不是 10。
+     */
+    private String step;
+    /**
+     * 精度。当 dataType 为 float 或 double 时可选传入。
+     */
+    private String precise;
+    /**
+     * 默认值,可传入用于存储的默认值。
+     */
+    private String defaultValue;
+    /**
+     * 单位的符号。
+     */
+    private String unit;
+    /**
+     * 单位的名称。
+     */
+    private String unitName;
+
+}

+ 52 - 0
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/controller/admin/iotdevicetemplate/model/datatype/DeviceTemplateAttrStructDataSpecs.java

@@ -0,0 +1,52 @@
+package cn.iocoder.yudao.module.pms.controller.admin.iotdevicetemplate.model.datatype;
+
+import cn.iocoder.yudao.module.pms.enums.devicetemplate.DeviceTemplateAttrAccessModeEnum;
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.util.List;
+
+/**
+ * 设备模板属性 数据类型为 struct 的 DataSpec 定义
+ *
+ * @author ruiqi
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@JsonIgnoreProperties({"dataType"}) // 忽略子类中的 dataType 字段,从而避免重复
+public class DeviceTemplateAttrStructDataSpecs extends DeviceTemplateAttrDataSpecs {
+
+    /**
+     * 属性标识符
+     */
+    private String identifier;
+    /**
+     * 属性名称
+     */
+    private String name;
+    /**
+     * 云端可以对该属性进行的操作类型
+     *
+     * 枚举 {@link DeviceTemplateAttrAccessModeEnum}
+     */
+    private String accessMode;
+    /**
+     * 是否是标准品类的必选服务
+     */
+    private Boolean required;
+    /**
+     * struct 数据的数据类型
+     */
+    private String childDataType;
+    /**
+     * 数据类型(dataType)为非列表型(int、float、double、text、date、array)的数据规范存储在 dataSpecs 中
+     */
+    private DeviceTemplateAttrDataSpecs dataSpecs;
+    /**
+     * 数据类型(dataType)为列表型(enum、bool、struct)的数据规范存储在 dataSpecsList 中
+     */
+    private List<DeviceTemplateAttrDataSpecs> dataSpecsList;
+
+}
+

+ 0 - 7
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/controller/admin/iotdevicetemplate/vo/IotDeviceTemplatePageReqVO.java

@@ -29,13 +29,6 @@ public class IotDeviceTemplatePageReqVO extends PageParam {
     @Schema(description = "模板属性 json 格式数据")
     private String attrs;
 
-    @Schema(description = "同步状态 0未同步 1同步成功 2同步失败", example = "2")
-    private Integer syncStatus;
-
-    @Schema(description = "最后一次同步时间")
-    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
-    private LocalDateTime[] syncTime;
-
     @Schema(description = "模板描述", example = "随便")
     private String description;
 

+ 3 - 9
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/controller/admin/iotdevicetemplate/vo/IotDeviceTemplateRespVO.java

@@ -1,11 +1,13 @@
 package cn.iocoder.yudao.module.pms.controller.admin.iotdevicetemplate.vo;
 
+import cn.iocoder.yudao.module.pms.controller.admin.iotdevicetemplate.model.DeviceTemplateAttrs;
 import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
 import com.alibaba.excel.annotation.ExcelProperty;
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Data;
 
 import java.time.LocalDateTime;
+import java.util.List;
 
 @Schema(description = "管理后台 - PMS 功能优化 设备模板 Response VO")
 @Data
@@ -30,15 +32,7 @@ public class IotDeviceTemplateRespVO {
 
     @Schema(description = "模板属性 json 格式数据")
     @ExcelProperty("模板属性 json 格式数据")
-    private String attrs;
-
-    @Schema(description = "同步状态 0未同步 1同步成功 2同步失败", example = "2")
-    @ExcelProperty("同步状态 0未同步 1同步成功 2同步失败")
-    private Integer syncStatus;
-
-    @Schema(description = "最后一次同步时间")
-    @ExcelProperty("最后一次同步时间")
-    private LocalDateTime syncTime;
+    private List<DeviceTemplateAttrs> attrs;
 
     @Schema(description = "模板描述", example = "随便")
     @ExcelProperty("模板描述")

+ 0 - 8
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/controller/admin/iotdevicetemplate/vo/IotDeviceTemplateSaveReqVO.java

@@ -3,8 +3,6 @@ package cn.iocoder.yudao.module.pms.controller.admin.iotdevicetemplate.vo;
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Data;
 
-import java.time.LocalDateTime;
-
 @Schema(description = "管理后台 - PMS 功能优化 设备模板新增/修改 Request VO")
 @Data
 public class IotDeviceTemplateSaveReqVO {
@@ -24,12 +22,6 @@ public class IotDeviceTemplateSaveReqVO {
     @Schema(description = "模板属性 json 格式数据")
     private String attrs;
 
-    @Schema(description = "同步状态 0未同步 1同步成功 2同步失败", example = "2")
-    private Integer syncStatus;
-
-    @Schema(description = "最后一次同步时间")
-    private LocalDateTime syncTime;
-
     @Schema(description = "模板描述", example = "随便")
     private String description;
 

+ 7 - 11
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/dal/dataobject/iotdevicetemplate/IotDeviceTemplateDO.java

@@ -1,19 +1,22 @@
 package cn.iocoder.yudao.module.pms.dal.dataobject.iotdevicetemplate;
 
 import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
+import cn.iocoder.yudao.module.pms.controller.admin.iotdevicetemplate.model.DeviceTemplateAttrs;
 import com.baomidou.mybatisplus.annotation.KeySequence;
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
 import lombok.*;
 
-import java.time.LocalDateTime;
+import java.util.List;
 
 /**
  * PMS 功能优化 设备模板 DO
  *
  * @author 芋道源码
  */
-@TableName("rq_iot_device_template")
+@TableName(value="rq_iot_device_template", autoResultMap = true)
 @KeySequence("rq_iot_device_template_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
 @Data
 @EqualsAndHashCode(callSuper = true)
@@ -43,15 +46,8 @@ public class IotDeviceTemplateDO extends BaseDO {
     /**
      * 模板属性 json 格式数据
      */
-    private String attrs;
-    /**
-     * 同步状态 0未同步 1同步成功 2同步失败
-     */
-    private Integer syncStatus;
-    /**
-     * 最后一次同步时间
-     */
-    private LocalDateTime syncTime;
+    @TableField(typeHandler = JacksonTypeHandler.class)
+    private List<DeviceTemplateAttrs> attrs;
     /**
      * 模板描述
      */

+ 3 - 2
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/dal/mysql/iotdevicetemplate/IotDeviceTemplateMapper.java

@@ -21,8 +21,6 @@ public interface IotDeviceTemplateMapper extends BaseMapperX<IotDeviceTemplateDO
                 .likeIfPresent(IotDeviceTemplateDO::getName, reqVO.getName())
                 .eqIfPresent(IotDeviceTemplateDO::getCode, reqVO.getCode())
                 .eqIfPresent(IotDeviceTemplateDO::getAttrs, reqVO.getAttrs())
-                .eqIfPresent(IotDeviceTemplateDO::getSyncStatus, reqVO.getSyncStatus())
-                .betweenIfPresent(IotDeviceTemplateDO::getSyncTime, reqVO.getSyncTime())
                 .eqIfPresent(IotDeviceTemplateDO::getDescription, reqVO.getDescription())
                 .eqIfPresent(IotDeviceTemplateDO::getStatus, reqVO.getStatus())
                 .eqIfPresent(IotDeviceTemplateDO::getSort, reqVO.getSort())
@@ -32,4 +30,7 @@ public interface IotDeviceTemplateMapper extends BaseMapperX<IotDeviceTemplateDO
                 .orderByDesc(IotDeviceTemplateDO::getId));
     }
 
+    default IotDeviceTemplateDO selectByDeviceCategoryId(Long deviceCategoryId){
+        return selectOne(IotDeviceTemplateDO::getDeviceCategoryId, deviceCategoryId);
+    };
 }

+ 7 - 0
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/service/iotdevicetemplate/IotDeviceTemplateService.java

@@ -52,4 +52,11 @@ public interface IotDeviceTemplateService {
      */
     PageResult<IotDeviceTemplateDO> getIotDeviceTemplatePage(IotDeviceTemplatePageReqVO pageReqVO);
 
+    /**
+     * 根据设备分类id 获取设备模板(属性)
+     *
+     * @param deviceCategoryId 设备分类id
+     * @return 设备模板(包含属性列表)
+     */
+    IotDeviceTemplateDO getTemplateByDeviceCategoryId(Long deviceCategoryId);
 }

+ 5 - 0
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/service/iotdevicetemplate/IotDeviceTemplateServiceImpl.java

@@ -68,4 +68,9 @@ public class IotDeviceTemplateServiceImpl implements IotDeviceTemplateService {
         return iotDeviceTemplateMapper.selectPage(pageReqVO);
     }
 
+    @Override
+    public IotDeviceTemplateDO getTemplateByDeviceCategoryId(Long deviceCategoryId) {
+        return iotDeviceTemplateMapper.selectByDeviceCategoryId(deviceCategoryId);
+    }
+
 }