Bladeren bron

Merge remote-tracking branch 'origin/master'

lipenghui 5 maanden geleden
bovenliggende
commit
c60302a66b
23 gewijzigde bestanden met toevoegingen van 454 en 42 verwijderingen
  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. 18 3
      yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/controller/admin/iotmaterialgroup/IotMaterialGroupController.java
  15. 16 0
      yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/controller/admin/iotmaterialgroup/vo/IotMaterialGroupListReqVO.java
  16. 23 0
      yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/controller/admin/iotmaterialgroup/vo/MaterialGroupSimpleRespVO.java
  17. 7 11
      yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/dal/dataobject/iotdevicetemplate/IotDeviceTemplateDO.java
  18. 3 2
      yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/dal/mysql/iotdevicetemplate/IotDeviceTemplateMapper.java
  19. 9 0
      yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/dal/mysql/iotmaterialgroup/IotMaterialGroupMapper.java
  20. 7 0
      yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/service/iotdevicetemplate/IotDeviceTemplateService.java
  21. 5 0
      yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/service/iotdevicetemplate/IotDeviceTemplateServiceImpl.java
  22. 9 0
      yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/service/iotmaterialgroup/IotMaterialGroupService.java
  23. 10 0
      yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/service/iotmaterialgroup/IotMaterialGroupServiceImpl.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

@@ -45,7 +45,7 @@ import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.
 
 
 @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;
 

+ 18 - 3
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/controller/admin/iotmaterialgroup/IotMaterialGroupController.java

@@ -1,14 +1,13 @@
 package cn.iocoder.yudao.module.pms.controller.admin.iotmaterialgroup;
 
 import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog;
+import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
 import cn.iocoder.yudao.framework.common.pojo.CommonResult;
 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.iotmaterialgroup.vo.IotMaterialGroupPageReqVO;
-import cn.iocoder.yudao.module.pms.controller.admin.iotmaterialgroup.vo.IotMaterialGroupRespVO;
-import cn.iocoder.yudao.module.pms.controller.admin.iotmaterialgroup.vo.IotMaterialGroupSaveReqVO;
+import cn.iocoder.yudao.module.pms.controller.admin.iotmaterialgroup.vo.*;
 import cn.iocoder.yudao.module.pms.dal.dataobject.iotmaterialgroup.IotMaterialGroupDO;
 import cn.iocoder.yudao.module.pms.service.iotmaterialgroup.IotMaterialGroupService;
 import io.swagger.v3.oas.annotations.Operation;
@@ -77,6 +76,22 @@ public class IotMaterialGroupController {
         return success(BeanUtils.toBean(pageResult, IotMaterialGroupRespVO.class));
     }
 
+    @GetMapping("/list")
+    @Operation(summary = "获取物料组列表")
+    @PreAuthorize("@ss.hasPermission('rq:iot-material-group:query')")
+    public CommonResult<List<IotMaterialGroupRespVO>> getMaterialGroupList(IotMaterialGroupListReqVO reqVO) {
+        List<IotMaterialGroupDO> list = iotMaterialGroupService.getMaterialGroupList(reqVO);
+        return success(BeanUtils.toBean(list, IotMaterialGroupRespVO.class));
+    }
+
+    @GetMapping(value = {"/list-all-simple", "/simple-list"})
+    @Operation(summary = "获取物料组精简信息列表", description = "只包含被开启的物料组,主要用于前端的下拉选项")
+    public CommonResult<List<MaterialGroupSimpleRespVO>> getSimpleMaterialGroupList() {
+        List<IotMaterialGroupDO> list = iotMaterialGroupService.getMaterialGroupList(
+                new IotMaterialGroupListReqVO().setStatus(CommonStatusEnum.ENABLE.getStatus()));
+        return success(BeanUtils.toBean(list, MaterialGroupSimpleRespVO.class));
+    }
+
     @GetMapping("/export-excel")
     @Operation(summary = "导出PMS 功能优化 物料组 Excel")
     @PreAuthorize("@ss.hasPermission('rq:iot-material-group:export')")

+ 16 - 0
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/controller/admin/iotmaterialgroup/vo/IotMaterialGroupListReqVO.java

@@ -0,0 +1,16 @@
+package cn.iocoder.yudao.module.pms.controller.admin.iotmaterialgroup.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+@Schema(description = "管理后台 - 物料组列表 Request VO")
+@Data
+public class IotMaterialGroupListReqVO {
+
+    @Schema(description = "物料组名称,模糊匹配", example = "pms")
+    private String name;
+
+    @Schema(description = "展示状态,参见 CommonStatusEnum 枚举类", example = "1")
+    private Integer status;
+
+}

+ 23 - 0
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/controller/admin/iotmaterialgroup/vo/MaterialGroupSimpleRespVO.java

@@ -0,0 +1,23 @@
+package cn.iocoder.yudao.module.pms.controller.admin.iotmaterialgroup.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Schema(description = "管理后台 - 物料组精简信息 Response VO")
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+public class MaterialGroupSimpleRespVO {
+
+    @Schema(description = "物料组编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
+    private Long id;
+
+    @Schema(description = "物料组名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "pms")
+    private String name;
+
+    @Schema(description = "父物料组 ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
+    private Long parentId;
+
+}

+ 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);
+    };
 }

+ 9 - 0
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/dal/mysql/iotmaterialgroup/IotMaterialGroupMapper.java

@@ -3,10 +3,13 @@ package cn.iocoder.yudao.module.pms.dal.mysql.iotmaterialgroup;
 import cn.iocoder.yudao.framework.common.pojo.PageResult;
 import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
 import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
+import cn.iocoder.yudao.module.pms.controller.admin.iotmaterialgroup.vo.IotMaterialGroupListReqVO;
 import cn.iocoder.yudao.module.pms.controller.admin.iotmaterialgroup.vo.IotMaterialGroupPageReqVO;
 import cn.iocoder.yudao.module.pms.dal.dataobject.iotmaterialgroup.IotMaterialGroupDO;
 import org.apache.ibatis.annotations.Mapper;
 
+import java.util.List;
+
 /**
  * PMS 功能优化 物料组 Mapper
  *
@@ -26,4 +29,10 @@ public interface IotMaterialGroupMapper extends BaseMapperX<IotMaterialGroupDO>
                 .orderByDesc(IotMaterialGroupDO::getId));
     }
 
+    default List<IotMaterialGroupDO> selectList(IotMaterialGroupListReqVO reqVO) {
+        return selectList(new LambdaQueryWrapperX<IotMaterialGroupDO>()
+                .likeIfPresent(IotMaterialGroupDO::getName, reqVO.getName())
+                .eqIfPresent(IotMaterialGroupDO::getStatus, reqVO.getStatus()));
+    }
+
 }

+ 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);
+    }
+
 }

+ 9 - 0
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/service/iotmaterialgroup/IotMaterialGroupService.java

@@ -1,11 +1,13 @@
 package cn.iocoder.yudao.module.pms.service.iotmaterialgroup;
 
 import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.module.pms.controller.admin.iotmaterialgroup.vo.IotMaterialGroupListReqVO;
 import cn.iocoder.yudao.module.pms.controller.admin.iotmaterialgroup.vo.IotMaterialGroupPageReqVO;
 import cn.iocoder.yudao.module.pms.controller.admin.iotmaterialgroup.vo.IotMaterialGroupSaveReqVO;
 import cn.iocoder.yudao.module.pms.dal.dataobject.iotmaterialgroup.IotMaterialGroupDO;
 
 import javax.validation.Valid;
+import java.util.List;
 
 /**
  * PMS 功能优化 物料组 Service 接口
@@ -52,4 +54,11 @@ public interface IotMaterialGroupService {
      */
     PageResult<IotMaterialGroupDO> getIotMaterialGroupPage(IotMaterialGroupPageReqVO pageReqVO);
 
+    /**
+     * 筛选物料组列表
+     *
+     * @param reqVO 筛选条件请求 VO
+     * @return 物料组列表
+     */
+    List<IotMaterialGroupDO> getMaterialGroupList(IotMaterialGroupListReqVO reqVO);
 }

+ 10 - 0
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/service/iotmaterialgroup/IotMaterialGroupServiceImpl.java

@@ -2,6 +2,7 @@ package cn.iocoder.yudao.module.pms.service.iotmaterialgroup;
 
 import cn.iocoder.yudao.framework.common.pojo.PageResult;
 import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
+import cn.iocoder.yudao.module.pms.controller.admin.iotmaterialgroup.vo.IotMaterialGroupListReqVO;
 import cn.iocoder.yudao.module.pms.controller.admin.iotmaterialgroup.vo.IotMaterialGroupPageReqVO;
 import cn.iocoder.yudao.module.pms.controller.admin.iotmaterialgroup.vo.IotMaterialGroupSaveReqVO;
 import cn.iocoder.yudao.module.pms.dal.dataobject.iotmaterialgroup.IotMaterialGroupDO;
@@ -10,6 +11,8 @@ import org.springframework.stereotype.Service;
 import org.springframework.validation.annotation.Validated;
 
 import javax.annotation.Resource;
+import java.util.Comparator;
+import java.util.List;
 
 import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
 import static cn.iocoder.yudao.module.pms.enums.ErrorCodeConstant.IOT_MATERIAL_GROUP_NOT_EXISTS;
@@ -69,4 +72,11 @@ public class IotMaterialGroupServiceImpl implements IotMaterialGroupService {
         return iotMaterialGroupMapper.selectPage(pageReqVO);
     }
 
+    @Override
+    public List<IotMaterialGroupDO> getMaterialGroupList(IotMaterialGroupListReqVO reqVO) {
+        List<IotMaterialGroupDO> list = iotMaterialGroupMapper.selectList(reqVO);
+        list.sort(Comparator.comparing(IotMaterialGroupDO::getSort));
+        return list;
+    }
+
 }