Commit b6c7937aebe7d0d7b216e7735eea543e97e1c683

Authored by YunaiV
1 parent 8203e074

【代码评审】IoT:OTA 的实现

Showing 21 changed files with 39 additions and 31 deletions
yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/rule/vo/databridge/IotDataBridgePageReqVO.java
1 1 package cn.iocoder.yudao.module.iot.controller.admin.rule.vo.databridge;
2 2  
  3 +import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
3 4 import cn.iocoder.yudao.framework.common.pojo.PageParam;
  5 +import cn.iocoder.yudao.framework.common.validation.InEnum;
4 6 import io.swagger.v3.oas.annotations.media.Schema;
5 7 import lombok.Data;
6 8 import org.springframework.format.annotation.DateTimeFormat;
... ... @@ -16,7 +18,8 @@ public class IotDataBridgePageReqVO extends PageParam {
16 18 @Schema(description = "桥梁名称", example = "赵六")
17 19 private String name;
18 20  
19   - @Schema(description = "桥梁状态", example = "2")
  21 + @Schema(description = "桥梁状态", example = "1")
  22 + @InEnum(CommonStatusEnum.class)
20 23 private Integer status;
21 24  
22 25 @Schema(description = "创建时间")
... ...
yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/rule/vo/databridge/IotDataBridgeRespVO.java
1 1 package cn.iocoder.yudao.module.iot.controller.admin.rule.vo.databridge;
2 2  
3 3 import cn.iocoder.yudao.module.iot.controller.admin.rule.vo.databridge.config.IotDataBridgeAbstractConfig;
4   -import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
5 4 import io.swagger.v3.oas.annotations.media.Schema;
6 5 import lombok.Data;
7 6  
... ... @@ -20,7 +19,7 @@ public class IotDataBridgeRespVO {
20 19 @Schema(description = "桥梁描述", example = "随便")
21 20 private String description;
22 21  
23   - @Schema(description = "桥梁状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "2")
  22 + @Schema(description = "桥梁状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
24 23 private Integer status;
25 24  
26 25 @Schema(description = "桥梁方向", requiredMode = Schema.RequiredMode.REQUIRED)
... ...
yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/rule/vo/databridge/config/IotDataBridgeAbstractConfig.java
... ... @@ -6,7 +6,7 @@ import com.fasterxml.jackson.annotation.JsonTypeInfo;
6 6 import lombok.Data;
7 7  
8 8 /**
9   - * 抽象类 IotDataBridgeConfig
  9 + * IoT IotDataBridgeConfig 抽象类
10 10 *
11 11 * 用于表示数据桥梁配置数据的通用类型,根据具体的 "type" 字段动态映射到对应的子类
12 12 * 提供多态支持,适用于不同类型的数据结构序列化和反序列化场景。
... ...
yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/rule/vo/databridge/config/IotDataBridgeHttpConfig.java
... ... @@ -5,7 +5,7 @@ import lombok.Data;
5 5 import java.util.Map;
6 6  
7 7 /**
8   - * HTTP 配置
  8 + * IoT HTTP 配置 {@link IotDataBridgeAbstractConfig} 实现类
9 9 *
10 10 * @author HUIHUI
11 11 */
... ...
yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/rule/vo/databridge/config/IotDataBridgeKafkaMQConfig.java
... ... @@ -3,7 +3,7 @@ package cn.iocoder.yudao.module.iot.controller.admin.rule.vo.databridge.config;
3 3 import lombok.Data;
4 4  
5 5 /**
6   - * Kafka 配置
  6 + * IoT Kafka 配置 {@link IotDataBridgeAbstractConfig} 实现类
7 7 *
8 8 * @author HUIHUI
9 9 */
... ...
yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/rule/vo/databridge/config/IotDataBridgeMqttConfig.java
... ... @@ -3,7 +3,7 @@ package cn.iocoder.yudao.module.iot.controller.admin.rule.vo.databridge.config;
3 3 import lombok.Data;
4 4  
5 5 /**
6   - * MQTT 配置
  6 + * IoT MQTT 配置 {@link IotDataBridgeAbstractConfig} 实现类
7 7 *
8 8 * @author HUIHUI
9 9 */
... ...
yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/rule/vo/databridge/config/IotDataBridgeRabbitMQConfig.java
... ... @@ -3,7 +3,7 @@ package cn.iocoder.yudao.module.iot.controller.admin.rule.vo.databridge.config;
3 3 import lombok.Data;
4 4  
5 5 /**
6   - * RabbitMQ 配置
  6 + * IoT RabbitMQ 配置 {@link IotDataBridgeAbstractConfig} 实现类
7 7 *
8 8 * @author HUIHUI
9 9 */
... ...
yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/rule/vo/databridge/config/IotDataBridgeRedisStreamMQConfig.java
... ... @@ -2,8 +2,9 @@ package cn.iocoder.yudao.module.iot.controller.admin.rule.vo.databridge.config;
2 2  
3 3 import lombok.Data;
4 4  
  5 +// TODO @puhui999:MQ 可以去掉哈。stream 更精准
5 6 /**
6   - * Redis Stream MQ 配置
  7 + * IoT Redis Stream 配置 {@link IotDataBridgeAbstractConfig} 实现类
7 8 *
8 9 * @author HUIHUI
9 10 */
... ...
yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/rule/vo/databridge/config/IotDataBridgeRocketMQConfig.java
... ... @@ -3,7 +3,7 @@ package cn.iocoder.yudao.module.iot.controller.admin.rule.vo.databridge.config;
3 3 import lombok.Data;
4 4  
5 5 /**
6   - * RocketMQ 配置
  6 + * IoT RocketMQ 配置 {@link IotDataBridgeAbstractConfig} 实现类
7 7 *
8 8 * @author HUIHUI
9 9 */
... ...
yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/rule/vo/package-info.java
  1 +// TODO @芋艿:占位
1 2 package cn.iocoder.yudao.module.iot.controller.admin.rule.vo;
2 3 \ No newline at end of file
... ...
yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/statistics/IotStatisticsController.java
... ... @@ -21,6 +21,8 @@ import org.springframework.web.bind.annotation.RestController;
21 21 import java.time.LocalDateTime;
22 22 import java.util.Map;
23 23  
  24 +import static cn.iocoder.yudao.framework.common.pojo.CommonResult.*;
  25 +
24 26 @Tag(name = "管理后台 - IoT 数据统计")
25 27 @RestController
26 28 @RequestMapping("/iot/statistics")
... ... @@ -61,7 +63,7 @@ public class IotStatisticsController {
61 63 respVO.setDeviceOnlineCount(deviceCountMap.getOrDefault(IotDeviceStateEnum.ONLINE.getState(), 0L));
62 64 respVO.setDeviceOfflineCount(deviceCountMap.getOrDefault(IotDeviceStateEnum.OFFLINE.getState(), 0L));
63 65 respVO.setDeviceInactiveCount(deviceCountMap.getOrDefault(IotDeviceStateEnum.INACTIVE.getState(), 0L));
64   - return CommonResult.success(respVO);
  66 + return success(respVO);
65 67 }
66 68  
67 69 // TODO @super:要不干掉 IotStatisticsReqVO 参数,直接使用 @RequestParam 接收,简单一些。
... ... @@ -69,7 +71,7 @@ public class IotStatisticsController {
69 71 @Operation(summary = "获取 IoT 设备上下行消息数据统计")
70 72 public CommonResult<IotStatisticsDeviceMessageSummaryRespVO> getIotStatisticsDeviceMessageSummary(
71 73 @Valid IotStatisticsReqVO reqVO) {
72   - return CommonResult.success(new IotStatisticsDeviceMessageSummaryRespVO()
  74 + return success(new IotStatisticsDeviceMessageSummaryRespVO()
73 75 .setDownstreamCounts(deviceLogService.getDeviceLogUpCountByHour(null, reqVO.getStartTime(), reqVO.getEndTime()))
74 76 .setDownstreamCounts((deviceLogService.getDeviceLogDownCountByHour(null, reqVO.getStartTime(), reqVO.getEndTime()))));
75 77 }
... ...
yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/thingmodel/model/ThingModelEvent.java
... ... @@ -10,7 +10,7 @@ import lombok.Data;
10 10 import java.util.List;
11 11  
12 12 /**
13   - * 物模型中的事件
  13 + * IoT 物模型中的事件
14 14 *
15 15 * @author HUIHUI
16 16 */
... ...
yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/thingmodel/model/ThingModelProperty.java
... ... @@ -11,7 +11,7 @@ import lombok.Data;
11 11 import java.util.List;
12 12  
13 13 /**
14   - * 物模型中的属性
  14 + * IoT 物模型中的属性
15 15 *
16 16 * dataSpecs 和 dataSpecsList 之中必须传入且只能传入一个
17 17 *
... ...
yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/thingmodel/model/ThingModelService.java
... ... @@ -10,7 +10,7 @@ import lombok.Data;
10 10 import java.util.List;
11 11  
12 12 /**
13   - * 物模型中的服务
  13 + * IoT 物模型中的服务
14 14 *
15 15 * @author HUIHUI
16 16 */
... ...
yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/thingmodel/model/dataType/ThingModelArrayDataSpecs.java
... ... @@ -7,25 +7,25 @@ import lombok.EqualsAndHashCode;
7 7 import java.util.List;
8 8  
9 9 /**
10   - * 物模型数据类型为数组的 DataSpec 定义
  10 + * IoT 物模型数据类型为数组的 DataSpec 定义
11 11 *
12 12 * @author HUIHUI
13 13 */
14 14 @Data
15 15 @EqualsAndHashCode(callSuper = true)
16   -@JsonIgnoreProperties({"dataType"}) // 忽略子类中的 dataType 字段,从而避免重复。
  16 +@JsonIgnoreProperties({"dataType"}) // 忽略子类中的 dataType 字段,从而避免重复
17 17 public class ThingModelArrayDataSpecs extends ThingModelDataSpecs {
18 18  
19 19 /**
20   - * 数组中的元素个数。
  20 + * 数组中的元素个数
21 21 */
22 22 private Integer size;
23 23 /**
24   - * 数组中的元素的数据类型。可选值:struct、int、float、double 或 text。
  24 + * 数组中的元素的数据类型。可选值:struct、int、float、double 或 text
25 25 */
26 26 private String childDataType;
27 27 /**
28   - * 数据类型(childDataType)为列表型 struct 的数据规范存储在 dataSpecsList 中。
  28 + * 数据类型(childDataType)为列表型 struct 的数据规范存储在 dataSpecsList 中
29 29 * 此时 struct 取值范围为:int、float、double、text、date、enum、bool
30 30 */
31 31 private List<ThingModelDataSpecs> dataSpecsList;
... ...
yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/thingmodel/model/dataType/ThingModelBoolOrEnumDataSpecs.java
... ... @@ -5,7 +5,7 @@ import lombok.Data;
5 5 import lombok.EqualsAndHashCode;
6 6  
7 7 /**
8   - * 物模型数据类型为布尔型或枚举型的 DataSpec 定义
  8 + * IoT 物模型数据类型为布尔型或枚举型的 DataSpec 定义
9 9 *
10 10 * 数据类型,取值为 bool 或 enum。
11 11 *
... ... @@ -13,13 +13,14 @@ import lombok.EqualsAndHashCode;
13 13 */
14 14 @Data
15 15 @EqualsAndHashCode(callSuper = true)
16   -@JsonIgnoreProperties({"dataType"}) // 忽略子类中的 dataType 字段,从而避免重复。
  16 +@JsonIgnoreProperties({"dataType"}) // 忽略子类中的 dataType 字段,从而避免重复
17 17 public class ThingModelBoolOrEnumDataSpecs extends ThingModelDataSpecs {
18 18  
  19 + // TODO @puhui999:要不写下参数校验?这样,注释可以简洁一点
19 20 /**
20 21 * 枚举项的名称。
21   - * 可包含中文、大小写英文字母、数字、下划线(_)和短划线(-)。
22   - * 必须以中文、英文字母或数字开头,长度不超过 20 个字符。
  22 + * 可包含中文、大小写英文字母、数字、下划线(_)和短划线(-)
  23 + * 必须以中文、英文字母或数字开头,长度不超过 20 个字符
23 24 */
24 25 private String name;
25 26 /**
... ...
yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/thingmodel/model/dataType/ThingModelDataSpecs.java
... ... @@ -5,7 +5,7 @@ import com.fasterxml.jackson.annotation.JsonTypeInfo;
5 5 import lombok.Data;
6 6  
7 7 /**
8   - * 抽象类 ThingModelDataSpecs
  8 + * IoT ThingModelDataSpecs 抽象类
9 9 *
10 10 * 用于表示物模型数据的通用类型,根据具体的 "dataType" 字段动态映射到对应的子类。
11 11 * 提供多态支持,适用于不同类型的数据结构序列化和反序列化场景。
... ...
yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/thingmodel/model/dataType/ThingModelDateOrTextDataSpecs.java
... ... @@ -5,7 +5,7 @@ import lombok.Data;
5 5 import lombok.EqualsAndHashCode;
6 6  
7 7 /**
8   - * 物模型数据类型为时间型或文本型的 DataSpec 定义
  8 + * IoT 物模型数据类型为时间型或文本型的 DataSpec 定义
9 9 *
10 10 * 数据类型,取值为 date 或 text。
11 11 *
... ... @@ -13,7 +13,7 @@ import lombok.EqualsAndHashCode;
13 13 */
14 14 @Data
15 15 @EqualsAndHashCode(callSuper = true)
16   -@JsonIgnoreProperties({"dataType"}) // 忽略子类中的 dataType 字段,从而避免重复。
  16 +@JsonIgnoreProperties({"dataType"}) // 忽略子类中的 dataType 字段,从而避免重复
17 17 public class ThingModelDateOrTextDataSpecs extends ThingModelDataSpecs {
18 18  
19 19 /**
... ...
yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/thingmodel/model/dataType/ThingModelNumericDataSpec.java
... ... @@ -5,7 +5,7 @@ import lombok.Data;
5 5 import lombok.EqualsAndHashCode;
6 6  
7 7 /**
8   - * 物模型数据类型为数值的 DataSpec 定义
  8 + * IoT 物模型数据类型为数值的 DataSpec 定义
9 9 *
10 10 * 数据类型,取值为 int、float 或 double。
11 11 *
... ... @@ -13,7 +13,7 @@ import lombok.EqualsAndHashCode;
13 13 */
14 14 @Data
15 15 @EqualsAndHashCode(callSuper = true)
16   -@JsonIgnoreProperties({"dataType"}) // 忽略子类中的 dataType 字段,从而避免重复。
  16 +@JsonIgnoreProperties({"dataType"}) // 忽略子类中的 dataType 字段,从而避免重复
17 17 public class ThingModelNumericDataSpec extends ThingModelDataSpecs {
18 18  
19 19 /**
... ...
yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/thingmodel/model/dataType/ThingModelStructDataSpecs.java
... ... @@ -8,13 +8,13 @@ import lombok.EqualsAndHashCode;
8 8 import java.util.List;
9 9  
10 10 /**
11   - * 物模型数据类型为 struct 的 DataSpec 定义
  11 + * IoT 物模型数据类型为 struct 的 DataSpec 定义
12 12 *
13 13 * @author HUIHUI
14 14 */
15 15 @Data
16 16 @EqualsAndHashCode(callSuper = true)
17   -@JsonIgnoreProperties({"dataType"}) // 忽略子类中的 dataType 字段,从而避免重复。
  17 +@JsonIgnoreProperties({"dataType"}) // 忽略子类中的 dataType 字段,从而避免重复
18 18 public class ThingModelStructDataSpecs extends ThingModelDataSpecs {
19 19  
20 20 /**
... ...
yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/device/data/IotDeviceLogService.java
... ... @@ -47,6 +47,7 @@ public interface IotDeviceLogService {
47 47 */
48 48 Long getDeviceLogCount(@Nullable LocalDateTime createTime);
49 49  
  50 + // TODO @super:deviceKey 是不是用不上哈?
50 51 /**
51 52 * 获得每个小时设备上行消息数量统计
52 53 *
... ...