Commit 34453a3f70492f9dfbc8b8d70a458632321e6017

Authored by YunaiV
1 parent 27e08266

【代码评审】IoT:数据桥梁的维护

Showing 18 changed files with 38 additions and 30 deletions
yudao-module-iot/yudao-module-iot-api/src/main/java/cn/iocoder/yudao/module/iot/enums/DictTypeConstants.java
... ... @@ -15,6 +15,7 @@ public class DictTypeConstants {
15 15 public static final String VALIDATE_TYPE = "iot_validate_type";
16 16  
17 17 public static final String DEVICE_STATE = "iot_device_state";
  18 +
18 19 public static final String IOT_DATA_BRIDGE_DIRECTION_ENUM = "iot_data_bridge_direction_enum";
19 20 public static final String IOT_DATA_BRIDGE_TYPE_ENUM = "iot_data_bridge_type_enum";
20 21  
... ...
yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/rule/IotDataBridgeController.java
... ... @@ -37,14 +37,14 @@ public class IotDataBridgeController {
37 37 private IotDataBridgeService dataBridgeService;
38 38  
39 39 @PostMapping("/create")
40   - @Operation(summary = "创建IoT 数据桥梁")
  40 + @Operation(summary = "创建数据桥梁")
41 41 @PreAuthorize("@ss.hasPermission('iot:data-bridge:create')")
42 42 public CommonResult<Long> createDataBridge(@Valid @RequestBody IotDataBridgeSaveReqVO createReqVO) {
43 43 return success(dataBridgeService.createDataBridge(createReqVO));
44 44 }
45 45  
46 46 @PutMapping("/update")
47   - @Operation(summary = "更新IoT 数据桥梁")
  47 + @Operation(summary = "更新数据桥梁")
48 48 @PreAuthorize("@ss.hasPermission('iot:data-bridge:update')")
49 49 public CommonResult<Boolean> updateDataBridge(@Valid @RequestBody IotDataBridgeSaveReqVO updateReqVO) {
50 50 dataBridgeService.updateDataBridge(updateReqVO);
... ... @@ -52,7 +52,7 @@ public class IotDataBridgeController {
52 52 }
53 53  
54 54 @DeleteMapping("/delete")
55   - @Operation(summary = "删除IoT 数据桥梁")
  55 + @Operation(summary = "删除数据桥梁")
56 56 @Parameter(name = "id", description = "编号", required = true)
57 57 @PreAuthorize("@ss.hasPermission('iot:data-bridge:delete')")
58 58 public CommonResult<Boolean> deleteDataBridge(@RequestParam("id") Long id) {
... ... @@ -61,7 +61,7 @@ public class IotDataBridgeController {
61 61 }
62 62  
63 63 @GetMapping("/get")
64   - @Operation(summary = "获得IoT 数据桥梁")
  64 + @Operation(summary = "获得数据桥梁")
65 65 @Parameter(name = "id", description = "编号", required = true, example = "1024")
66 66 @PreAuthorize("@ss.hasPermission('iot:data-bridge:query')")
67 67 public CommonResult<IotDataBridgeRespVO> getDataBridge(@RequestParam("id") Long id) {
... ... @@ -70,15 +70,16 @@ public class IotDataBridgeController {
70 70 }
71 71  
72 72 @GetMapping("/page")
73   - @Operation(summary = "获得IoT 数据桥梁分页")
  73 + @Operation(summary = "获得数据桥梁分页")
74 74 @PreAuthorize("@ss.hasPermission('iot:data-bridge:query')")
75 75 public CommonResult<PageResult<IotDataBridgeRespVO>> getDataBridgePage(@Valid IotDataBridgePageReqVO pageReqVO) {
76 76 PageResult<IotDataBridgeDO> pageResult = dataBridgeService.getDataBridgePage(pageReqVO);
77 77 return success(BeanUtils.toBean(pageResult, IotDataBridgeRespVO.class));
78 78 }
79 79  
  80 + // TODO @puhui999:不用导出哈。相关的 IotDataBridgeRespVO 里的导出也注释掉哈
80 81 @GetMapping("/export-excel")
81   - @Operation(summary = "导出IoT 数据桥梁 Excel")
  82 + @Operation(summary = "导出数据桥梁 Excel")
82 83 @PreAuthorize("@ss.hasPermission('iot:data-bridge:export')")
83 84 @ApiAccessLog(operateType = EXPORT)
84 85 public void exportDataBridgeExcel(@Valid IotDataBridgePageReqVO pageReqVO,
... ...
yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/rule/vo/databridge/IotDataBridgePageReqVO.java
... ... @@ -20,6 +20,7 @@ public class IotDataBridgePageReqVO extends PageParam {
20 20 @Schema(description = "桥梁名称", example = "赵六")
21 21 private String name;
22 22  
  23 + // TODO @puhui999:description、direction、type 不过滤哈
23 24 @Schema(description = "桥梁描述", example = "随便")
24 25 private String description;
25 26  
... ... @@ -36,4 +37,5 @@ public class IotDataBridgePageReqVO extends PageParam {
36 37 @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
37 38 private LocalDateTime[] createTime;
38 39  
  40 +
39 41 }
40 42 \ No newline at end of file
... ...
yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/rule/vo/databridge/IotDataBridgeRespVO.java
... ... @@ -2,7 +2,7 @@ package cn.iocoder.yudao.module.iot.controller.admin.rule.vo.databridge;
2 2  
3 3 import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat;
4 4 import cn.iocoder.yudao.framework.excel.core.convert.DictConvert;
5   -import cn.iocoder.yudao.module.iot.controller.admin.rule.vo.databridge.config.IotDataBridgeConfig;
  5 +import cn.iocoder.yudao.module.iot.controller.admin.rule.vo.databridge.config.IotDataBridgeAbstractConfig;
6 6 import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
7 7 import com.alibaba.excel.annotation.ExcelProperty;
8 8 import io.swagger.v3.oas.annotations.media.Schema;
... ... @@ -48,7 +48,7 @@ public class IotDataBridgeRespVO {
48 48  
49 49 @Schema(description = "桥梁配置")
50 50 @ExcelProperty("桥梁配置")
51   - private IotDataBridgeConfig config;
  51 + private IotDataBridgeAbstractConfig config;
52 52  
53 53 @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
54 54 @ExcelProperty("创建时间")
... ...
yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/rule/vo/databridge/IotDataBridgeSaveReqVO.java
1 1 package cn.iocoder.yudao.module.iot.controller.admin.rule.vo.databridge;
2 2  
3   -import cn.iocoder.yudao.module.iot.controller.admin.rule.vo.databridge.config.IotDataBridgeConfig;
  3 +import cn.iocoder.yudao.module.iot.controller.admin.rule.vo.databridge.config.IotDataBridgeAbstractConfig;
4 4 import io.swagger.v3.oas.annotations.media.Schema;
5 5 import jakarta.validation.constraints.NotEmpty;
6 6 import jakarta.validation.constraints.NotNull;
... ... @@ -24,6 +24,7 @@ public class IotDataBridgeSaveReqVO {
24 24 @NotNull(message = "桥梁状态不能为空")
25 25 private Integer status;
26 26  
  27 + // TODO @puhui999:枚举的校验
27 28 @Schema(description = "桥梁方向", requiredMode = Schema.RequiredMode.REQUIRED)
28 29 @NotNull(message = "桥梁方向不能为空")
29 30 private Integer direction;
... ... @@ -34,6 +35,6 @@ public class IotDataBridgeSaveReqVO {
34 35  
35 36 @Schema(description = "桥梁配置")
36 37 @NotNull(message = "桥梁配置不能为空")
37   - private IotDataBridgeConfig config;
  38 + private IotDataBridgeAbstractConfig config;
38 39  
39 40 }
40 41 \ No newline at end of file
... ...
yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/rule/vo/databridge/config/IotDataBridgeConfig.java renamed to yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/rule/vo/databridge/config/IotDataBridgeAbstractConfig.java
... ... @@ -22,7 +22,7 @@ import lombok.Data;
22 22 @JsonSubTypes.Type(value = IotDataBridgeRedisStreamMQConfig.class, name = "REDIS_STREAM"),
23 23 @JsonSubTypes.Type(value = IotDataBridgeRocketMQConfig.class, name = "ROCKETMQ"),
24 24 })
25   -public abstract class IotDataBridgeConfig {
  25 +public abstract class IotDataBridgeAbstractConfig {
26 26  
27 27 /**
28 28 * 配置类型
... ...
yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/rule/vo/databridge/config/IotDataBridgeHttpConfig.java
... ... @@ -10,7 +10,7 @@ import java.util.Map;
10 10 * @author HUIHUI
11 11 */
12 12 @Data
13   -public class IotDataBridgeHttpConfig extends IotDataBridgeConfig {
  13 +public class IotDataBridgeHttpConfig extends IotDataBridgeAbstractConfig {
14 14  
15 15 /**
16 16 * 请求 URL
... ...
yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/rule/vo/databridge/config/IotDataBridgeKafkaMQConfig.java
... ... @@ -8,7 +8,7 @@ import lombok.Data;
8 8 * @author HUIHUI
9 9 */
10 10 @Data
11   -public class IotDataBridgeKafkaMQConfig extends IotDataBridgeConfig {
  11 +public class IotDataBridgeKafkaMQConfig extends IotDataBridgeAbstractConfig {
12 12  
13 13 /**
14 14 * Kafka 服务器地址
... ...
yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/rule/vo/databridge/config/IotDataBridgeMqttConfig.java
... ... @@ -8,7 +8,7 @@ import lombok.Data;
8 8 * @author HUIHUI
9 9 */
10 10 @Data
11   -public class IotDataBridgeMqttConfig extends IotDataBridgeConfig {
  11 +public class IotDataBridgeMqttConfig extends IotDataBridgeAbstractConfig {
12 12  
13 13 /**
14 14 * MQTT 服务器地址
... ...
yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/rule/vo/databridge/config/IotDataBridgeRabbitMQConfig.java
... ... @@ -8,7 +8,7 @@ import lombok.Data;
8 8 * @author HUIHUI
9 9 */
10 10 @Data
11   -public class IotDataBridgeRabbitMQConfig extends IotDataBridgeConfig {
  11 +public class IotDataBridgeRabbitMQConfig extends IotDataBridgeAbstractConfig {
12 12  
13 13 /**
14 14 * RabbitMQ 服务器地址
... ...
yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/rule/vo/databridge/config/IotDataBridgeRedisStreamMQConfig.java
... ... @@ -8,7 +8,7 @@ import lombok.Data;
8 8 * @author HUIHUI
9 9 */
10 10 @Data
11   -public class IotDataBridgeRedisStreamMQConfig extends IotDataBridgeConfig {
  11 +public class IotDataBridgeRedisStreamMQConfig extends IotDataBridgeAbstractConfig {
12 12  
13 13 /**
14 14 * Redis 服务器地址
... ...
yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/rule/vo/databridge/config/IotDataBridgeRocketMQConfig.java
... ... @@ -8,7 +8,7 @@ import lombok.Data;
8 8 * @author HUIHUI
9 9 */
10 10 @Data
11   -public class IotDataBridgeRocketMQConfig extends IotDataBridgeConfig {
  11 +public class IotDataBridgeRocketMQConfig extends IotDataBridgeAbstractConfig {
12 12  
13 13 /**
14 14 * RocketMQ 名称服务器地址
... ...
yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/dataobject/rule/IotDataBridgeDO.java
1 1 package cn.iocoder.yudao.module.iot.dal.dataobject.rule;
2 2  
3 3 import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
4   -import cn.iocoder.yudao.module.iot.controller.admin.rule.vo.databridge.config.IotDataBridgeConfig;
  4 +import cn.iocoder.yudao.module.iot.controller.admin.rule.vo.databridge.config.IotDataBridgeAbstractConfig;
5 5 import cn.iocoder.yudao.module.iot.enums.rule.IotDataBridgeDirectionEnum;
6 6 import cn.iocoder.yudao.module.iot.enums.rule.IotDataBridgeTypeEnum;
7 7 import com.baomidou.mybatisplus.annotation.KeySequence;
... ... @@ -63,6 +63,6 @@ public class IotDataBridgeDO extends BaseDO {
63 63 * 桥梁配置
64 64 */
65 65 @TableField(typeHandler = JacksonTypeHandler.class)
66   - private IotDataBridgeConfig config;
  66 + private IotDataBridgeAbstractConfig config;
67 67  
68 68 }
... ...
yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/rule/IotDataBridgeService.java
... ... @@ -14,7 +14,7 @@ import jakarta.validation.Valid;
14 14 public interface IotDataBridgeService {
15 15  
16 16 /**
17   - * 创建IoT 数据桥梁
  17 + * 创建数据桥梁
18 18 *
19 19 * @param createReqVO 创建信息
20 20 * @return 编号
... ... @@ -22,32 +22,32 @@ public interface IotDataBridgeService {
22 22 Long createDataBridge(@Valid IotDataBridgeSaveReqVO createReqVO);
23 23  
24 24 /**
25   - * 更新IoT 数据桥梁
  25 + * 更新数据桥梁
26 26 *
27 27 * @param updateReqVO 更新信息
28 28 */
29 29 void updateDataBridge(@Valid IotDataBridgeSaveReqVO updateReqVO);
30 30  
31 31 /**
32   - * 删除IoT 数据桥梁
  32 + * 删除数据桥梁
33 33 *
34 34 * @param id 编号
35 35 */
36 36 void deleteDataBridge(Long id);
37 37  
38 38 /**
39   - * 获得IoT 数据桥梁
  39 + * 获得数据桥梁
40 40 *
41 41 * @param id 编号
42   - * @return IoT 数据桥梁
  42 + * @return 数据桥梁
43 43 */
44 44 IotDataBridgeDO getDataBridge(Long id);
45 45  
46 46 /**
47   - * 获得IoT 数据桥梁分页
  47 + * 获得数据桥梁分页
48 48 *
49 49 * @param pageReqVO 分页查询
50   - * @return IoT 数据桥梁分页
  50 + * @return 数据桥梁分页
51 51 */
52 52 PageResult<IotDataBridgeDO> getDataBridgePage(IotDataBridgePageReqVO pageReqVO);
53 53  
... ...
yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/rule/action/databridge/AbstractCacheableDataBridgeExecute.java
1 1 package cn.iocoder.yudao.module.iot.service.rule.action.databridge;
2 2  
  3 +import cn.hutool.core.util.ObjUtil;
3 4 import cn.iocoder.yudao.module.iot.dal.dataobject.rule.IotDataBridgeDO;
4 5 import cn.iocoder.yudao.module.iot.mq.message.IotDeviceMessage;
5 6 import com.google.common.cache.CacheBuilder;
... ... @@ -56,6 +57,7 @@ public abstract class AbstractCacheableDataBridgeExecute&lt;Config, Producer&gt; imple
56 57 }
57 58 })
58 59 .build(new CacheLoader<Config, Producer>() {
  60 +
59 61 @Override
60 62 public Producer load(Config config) throws Exception {
61 63 try {
... ... @@ -67,6 +69,7 @@ public abstract class AbstractCacheableDataBridgeExecute&lt;Config, Producer&gt; imple
67 69 throw e; // 抛出异常,触发缓存加载失败机制
68 70 }
69 71 }
  72 +
70 73 });
71 74  
72 75 /**
... ... @@ -98,12 +101,9 @@ public abstract class AbstractCacheableDataBridgeExecute&lt;Config, Producer&gt; imple
98 101 @Override
99 102 @SuppressWarnings({"unchecked"})
100 103 public void execute(IotDeviceMessage message, IotDataBridgeDO dataBridge) {
101   - // 1.1 校验数据桥梁类型
102   - if (!getType().equals(dataBridge.getType())) {
  104 + if (ObjUtil.notEqual(message.getType(), getType())) {
103 105 return;
104 106 }
105   -
106   - // 1.2 执行对应的数据桥梁发送消息
107 107 try {
108 108 execute0(message, (Config) dataBridge.getConfig());
109 109 } catch (Exception e) {
... ...
yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/rule/action/databridge/IotDataBridgeExecute.java
1 1 package cn.iocoder.yudao.module.iot.service.rule.action.databridge;
2 2  
  3 +import cn.iocoder.yudao.module.iot.controller.admin.rule.vo.databridge.config.IotDataBridgeAbstractConfig;
3 4 import cn.iocoder.yudao.module.iot.dal.dataobject.rule.IotDataBridgeDO;
4 5 import cn.iocoder.yudao.module.iot.mq.message.IotDeviceMessage;
5 6  
... ...
yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/rule/action/databridge/IotRocketMQDataBridgeExecute.java
... ... @@ -66,6 +66,7 @@ public class IotRocketMQDataBridgeExecute extends
66 66 }
67 67  
68 68 // TODO @芋艿:测试代码,后续清理
  69 + // TODO @puhui999:搞到测试类里。
69 70 public static void main(String[] args) {
70 71 // 1. 创建一个共享的实例
71 72 IotRocketMQDataBridgeExecute action = new IotRocketMQDataBridgeExecute();
... ...
yudao-server/pom.xml
... ... @@ -115,6 +115,7 @@
115 115 <version>${revision}</version>
116 116 </dependency>
117 117 <!-- IoT 数据桥梁的执行器所需消息队列。如果您只需要使用 rocketmq 那么则注释掉其它消息队列即可 -->
  118 + <!-- TODO @puhui999:默认不使用哈。可以在 iot biz 那,作为 optional 进行引入 -->
118 119 <dependency>
119 120 <groupId>org.apache.rocketmq</groupId>
120 121 <artifactId>rocketmq-spring-boot-starter</artifactId>
... ...