Commit b2434b7b41b52aefff1de1412f0ebea0064524f1
1 parent
95067fd6
【代码评审】IoT:模拟设备发送的 review
Showing
8 changed files
with
40 additions
and
29 deletions
yudao-module-iot/yudao-module-iot-api/src/main/java/cn/iocoder/yudao/module/iot/enums/IotConstants.java
| @@ -40,6 +40,6 @@ public interface IotConstants { | @@ -40,6 +40,6 @@ public interface IotConstants { | ||
| 40 | * <p> | 40 | * <p> |
| 41 | * 格式为 thing_model_message_{productKey}_{deviceName} | 41 | * 格式为 thing_model_message_{productKey}_{deviceName} |
| 42 | */ | 42 | */ |
| 43 | - String THINK_MODEL_MESSAGE_TABLE_NAME_FORMAT = "thing_model_message_%s_%s"; | 43 | + String THING_MODEL_MESSAGE_TABLE_NAME_FORMAT = "thing_model_message_%s_%s"; |
| 44 | 44 | ||
| 45 | } | 45 | } |
| 46 | \ No newline at end of file | 46 | \ No newline at end of file |
yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/dataobject/tdengine/ThinkModelMessageDO.java renamed to yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/dataobject/tdengine/ThingModelMessageDO.java
| @@ -4,9 +4,8 @@ import lombok.AllArgsConstructor; | @@ -4,9 +4,8 @@ import lombok.AllArgsConstructor; | ||
| 4 | import lombok.Builder; | 4 | import lombok.Builder; |
| 5 | import lombok.Data; | 5 | import lombok.Data; |
| 6 | import lombok.NoArgsConstructor; | 6 | import lombok.NoArgsConstructor; |
| 7 | -import org.apache.xmlbeans.impl.xb.xsdschema.Public; | ||
| 8 | - | ||
| 9 | 7 | ||
| 8 | +// TODO @芋艿:纠结下字段 | ||
| 10 | /** | 9 | /** |
| 11 | * TD 物模型消息日志的数据库 | 10 | * TD 物模型消息日志的数据库 |
| 12 | */ | 11 | */ |
| @@ -14,7 +13,8 @@ import org.apache.xmlbeans.impl.xb.xsdschema.Public; | @@ -14,7 +13,8 @@ import org.apache.xmlbeans.impl.xb.xsdschema.Public; | ||
| 14 | @Builder | 13 | @Builder |
| 15 | @NoArgsConstructor | 14 | @NoArgsConstructor |
| 16 | @AllArgsConstructor | 15 | @AllArgsConstructor |
| 17 | -public class ThinkModelMessageDO { | 16 | +public class ThingModelMessageDO { |
| 17 | + | ||
| 18 | /** | 18 | /** |
| 19 | * 数据库名称 | 19 | * 数据库名称 |
| 20 | */ | 20 | */ |
| @@ -32,7 +32,7 @@ public class ThinkModelMessageDO { | @@ -32,7 +32,7 @@ public class ThinkModelMessageDO { | ||
| 32 | private String tableName; | 32 | private String tableName; |
| 33 | 33 | ||
| 34 | /** | 34 | /** |
| 35 | - * 消息ID | 35 | + * 消息 ID |
| 36 | */ | 36 | */ |
| 37 | private String id; | 37 | private String id; |
| 38 | 38 | ||
| @@ -42,7 +42,9 @@ public class ThinkModelMessageDO { | @@ -42,7 +42,9 @@ public class ThinkModelMessageDO { | ||
| 42 | private Object sys; | 42 | private Object sys; |
| 43 | 43 | ||
| 44 | /** | 44 | /** |
| 45 | - * 请求方法 例如:thing.event.property.post | 45 | + * 请求方法 |
| 46 | + * | ||
| 47 | + * 例如:thing.event.property.post | ||
| 46 | */ | 48 | */ |
| 47 | private String method; | 49 | private String method; |
| 48 | 50 | ||
| @@ -56,11 +58,9 @@ public class ThinkModelMessageDO { | @@ -56,11 +58,9 @@ public class ThinkModelMessageDO { | ||
| 56 | */ | 58 | */ |
| 57 | private Long time; | 59 | private Long time; |
| 58 | 60 | ||
| 59 | - | ||
| 60 | /** | 61 | /** |
| 61 | * 设备 key | 62 | * 设备 key |
| 62 | */ | 63 | */ |
| 63 | private String deviceKey; | 64 | private String deviceKey; |
| 64 | 65 | ||
| 65 | - | ||
| 66 | } | 66 | } |
yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/tdengine/TdThinkModelMessageMapper.java
| 1 | package cn.iocoder.yudao.module.iot.dal.tdengine; | 1 | package cn.iocoder.yudao.module.iot.dal.tdengine; |
| 2 | 2 | ||
| 3 | import cn.iocoder.yudao.framework.tenant.core.aop.TenantIgnore; | 3 | import cn.iocoder.yudao.framework.tenant.core.aop.TenantIgnore; |
| 4 | -import cn.iocoder.yudao.module.iot.dal.dataobject.tdengine.ThinkModelMessageDO; | 4 | +import cn.iocoder.yudao.module.iot.dal.dataobject.tdengine.ThingModelMessageDO; |
| 5 | import com.baomidou.dynamic.datasource.annotation.DS; | 5 | import com.baomidou.dynamic.datasource.annotation.DS; |
| 6 | import org.apache.ibatis.annotations.Mapper; | 6 | import org.apache.ibatis.annotations.Mapper; |
| 7 | 7 | ||
| @@ -17,12 +17,13 @@ public interface TdThinkModelMessageMapper { | @@ -17,12 +17,13 @@ public interface TdThinkModelMessageMapper { | ||
| 17 | * | 17 | * |
| 18 | */ | 18 | */ |
| 19 | @TenantIgnore | 19 | @TenantIgnore |
| 20 | - void createSuperTable(ThinkModelMessageDO superTable); | 20 | + void createSuperTable(ThingModelMessageDO superTable); |
| 21 | 21 | ||
| 22 | /** | 22 | /** |
| 23 | * 创建子表 | 23 | * 创建子表 |
| 24 | * | 24 | * |
| 25 | */ | 25 | */ |
| 26 | @TenantIgnore | 26 | @TenantIgnore |
| 27 | - void createTableWithTag(ThinkModelMessageDO table); | 27 | + void createTableWithTag(ThingModelMessageDO table); |
| 28 | + | ||
| 28 | } | 29 | } |
yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/mq/producer/simulatesend/SimulateSendProducer.java
| @@ -5,6 +5,7 @@ import lombok.extern.slf4j.Slf4j; | @@ -5,6 +5,7 @@ import lombok.extern.slf4j.Slf4j; | ||
| 5 | import org.springframework.context.ApplicationContext; | 5 | import org.springframework.context.ApplicationContext; |
| 6 | import org.springframework.stereotype.Component; | 6 | import org.springframework.stereotype.Component; |
| 7 | 7 | ||
| 8 | +// TODO @alwayssuper:是不是还没用起来哈?Producer 最好属于某个模块; | ||
| 8 | /** | 9 | /** |
| 9 | * SimulateSend 模拟设备上报的 Producer | 10 | * SimulateSend 模拟设备上报的 Producer |
| 10 | * | 11 | * |
| @@ -14,6 +15,7 @@ import org.springframework.stereotype.Component; | @@ -14,6 +15,7 @@ import org.springframework.stereotype.Component; | ||
| 14 | @Slf4j | 15 | @Slf4j |
| 15 | @Component | 16 | @Component |
| 16 | public class SimulateSendProducer { | 17 | public class SimulateSendProducer { |
| 18 | + | ||
| 17 | @Resource | 19 | @Resource |
| 18 | private ApplicationContext applicationContext; | 20 | private ApplicationContext applicationContext; |
| 19 | 21 |
yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/product/IotProductServiceImpl.java
| @@ -122,7 +122,7 @@ public class IotProductServiceImpl implements IotProductService { | @@ -122,7 +122,7 @@ public class IotProductServiceImpl implements IotProductService { | ||
| 122 | thingModelFunctionService.createSuperTableDataModel(id); | 122 | thingModelFunctionService.createSuperTableDataModel(id); |
| 123 | // 3.2 创建物模型日志超级表数据模型 | 123 | // 3.2 创建物模型日志超级表数据模型 |
| 124 | thingModelMessageService.createSuperTable(id); | 124 | thingModelMessageService.createSuperTable(id); |
| 125 | - } | 125 | + }x |
| 126 | productMapper.updateById(updateObj); | 126 | productMapper.updateById(updateObj); |
| 127 | } | 127 | } |
| 128 | 128 |
yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/tdengine/IotThingModelMessageServiceImpl.java
| @@ -58,11 +58,13 @@ public class IotThingModelMessageServiceImpl implements IotThingModelMessageServ | @@ -58,11 +58,13 @@ public class IotThingModelMessageServiceImpl implements IotThingModelMessageServ | ||
| 58 | @Resource | 58 | @Resource |
| 59 | private IotDeviceService iotDeviceService; | 59 | private IotDeviceService iotDeviceService; |
| 60 | @Resource | 60 | @Resource |
| 61 | + private IotProductService productService; | ||
| 62 | + | ||
| 63 | + @Resource | ||
| 61 | private TdEngineDDLMapper tdEngineDDLMapper; | 64 | private TdEngineDDLMapper tdEngineDDLMapper; |
| 62 | @Resource | 65 | @Resource |
| 63 | private TdEngineDMLMapper tdEngineDMLMapper; | 66 | private TdEngineDMLMapper tdEngineDMLMapper; |
| 64 | - @Resource | ||
| 65 | - private IotProductService productService; | 67 | + |
| 66 | @Resource | 68 | @Resource |
| 67 | private DeviceDataRedisDAO deviceDataRedisDAO; | 69 | private DeviceDataRedisDAO deviceDataRedisDAO; |
| 68 | 70 | ||
| @@ -119,11 +121,12 @@ public class IotThingModelMessageServiceImpl implements IotThingModelMessageServ | @@ -119,11 +121,12 @@ public class IotThingModelMessageServiceImpl implements IotThingModelMessageServ | ||
| 119 | IotProductDO product = productService.getProduct(productId); | 121 | IotProductDO product = productService.getProduct(productId); |
| 120 | 122 | ||
| 121 | // 2. 获取超级表的名称和数据库名称 | 123 | // 2. 获取超级表的名称和数据库名称 |
| 124 | + // TODO @alwayssuper:最好 databaseName、superTableName 的处理,放到 tdThinkModelMessageMapper 里。可以考虑,弄个 default 方法 | ||
| 122 | String databaseName = iotTdDatabaseUtils.getDatabaseName(); | 125 | String databaseName = iotTdDatabaseUtils.getDatabaseName(); |
| 123 | - String superTableName = IotTdDatabaseUtils.getThinkModelMessageSuperTableName(product.getProductKey()); | 126 | + String superTableName = IotTdDatabaseUtils.getThingModelMessageSuperTableName(product.getProductKey()); |
| 124 | 127 | ||
| 125 | // 3. 创建超级表 | 128 | // 3. 创建超级表 |
| 126 | - tdThinkModelMessageMapper.createSuperTable(ThinkModelMessageDO.builder().build() | 129 | + tdThinkModelMessageMapper.createSuperTable(ThingModelMessageDO.builder().build() |
| 127 | .setDataBaseName(databaseName) | 130 | .setDataBaseName(databaseName) |
| 128 | .setSuperTableName(superTableName)); | 131 | .setSuperTableName(superTableName)); |
| 129 | } | 132 | } |
| @@ -238,16 +241,16 @@ public class IotThingModelMessageServiceImpl implements IotThingModelMessageServ | @@ -238,16 +241,16 @@ public class IotThingModelMessageServiceImpl implements IotThingModelMessageServ | ||
| 238 | 241 | ||
| 239 | // 1. 获取超级表的名称、数据库名称、设备日志表名称 | 242 | // 1. 获取超级表的名称、数据库名称、设备日志表名称 |
| 240 | String databaseName = iotTdDatabaseUtils.getDatabaseName(); | 243 | String databaseName = iotTdDatabaseUtils.getDatabaseName(); |
| 241 | - String superTableName = IotTdDatabaseUtils.getThinkModelMessageSuperTableName(productKey); | 244 | + String superTableName = IotTdDatabaseUtils.getThingModelMessageSuperTableName(productKey); |
| 245 | + // TODO @alwayssuper:最好 databaseName、superTableName、thinkModelMessageDeviceTableName 的处理,放到 tdThinkModelMessageMapper 里。可以考虑,弄个 default 方法 | ||
| 242 | String thinkModelMessageDeviceTableName = IotTdDatabaseUtils.getThinkModelMessageDeviceTableName(productKey, deviceName); | 246 | String thinkModelMessageDeviceTableName = IotTdDatabaseUtils.getThinkModelMessageDeviceTableName(productKey, deviceName); |
| 243 | 247 | ||
| 244 | // 2. 创建物模型日志设备数据表 | 248 | // 2. 创建物模型日志设备数据表 |
| 245 | - tdThinkModelMessageMapper.createTableWithTag(ThinkModelMessageDO.builder().build() | 249 | + tdThinkModelMessageMapper.createTableWithTag(ThingModelMessageDO.builder().build() |
| 246 | .setDataBaseName(databaseName) | 250 | .setDataBaseName(databaseName) |
| 247 | .setSuperTableName(superTableName) | 251 | .setSuperTableName(superTableName) |
| 248 | .setTableName(thinkModelMessageDeviceTableName) | 252 | .setTableName(thinkModelMessageDeviceTableName) |
| 249 | .setDeviceKey(deviceKey)); | 253 | .setDeviceKey(deviceKey)); |
| 250 | - | ||
| 251 | } | 254 | } |
| 252 | 255 | ||
| 253 | /** | 256 | /** |
yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/util/IotTdDatabaseUtils.java
| @@ -4,8 +4,10 @@ import cn.iocoder.yudao.module.iot.enums.IotConstants; | @@ -4,8 +4,10 @@ import cn.iocoder.yudao.module.iot.enums.IotConstants; | ||
| 4 | import org.springframework.beans.factory.annotation.Value; | 4 | import org.springframework.beans.factory.annotation.Value; |
| 5 | import org.springframework.stereotype.Component; | 5 | import org.springframework.stereotype.Component; |
| 6 | 6 | ||
| 7 | +// TODO @芋艿:可能要思索下,有没更好的处理方式 | ||
| 8 | +// TODO @芋艿:怎么改成无状态 | ||
| 7 | /** | 9 | /** |
| 8 | - * TD数据库工具类 | 10 | + * TD 数据库工具类 |
| 9 | * | 11 | * |
| 10 | * @author AlwaysSuper | 12 | * @author AlwaysSuper |
| 11 | */ | 13 | */ |
| @@ -19,6 +21,7 @@ public class IotTdDatabaseUtils { | @@ -19,6 +21,7 @@ public class IotTdDatabaseUtils { | ||
| 19 | * 获取数据库名称 | 21 | * 获取数据库名称 |
| 20 | */ | 22 | */ |
| 21 | public String getDatabaseName() { | 23 | public String getDatabaseName() { |
| 24 | +// TODO @alwayssuper:StrUtil.subAfter("/") | ||
| 22 | int index = url.lastIndexOf("/"); | 25 | int index = url.lastIndexOf("/"); |
| 23 | return index != -1 ? url.substring(index + 1) : url; | 26 | return index != -1 ? url.substring(index + 1) : url; |
| 24 | } | 27 | } |
| @@ -31,6 +34,7 @@ public class IotTdDatabaseUtils { | @@ -31,6 +34,7 @@ public class IotTdDatabaseUtils { | ||
| 31 | * @return 产品超级表表名 | 34 | * @return 产品超级表表名 |
| 32 | */ | 35 | */ |
| 33 | public static String getProductSuperTableName(Integer deviceType, String productKey) { | 36 | public static String getProductSuperTableName(Integer deviceType, String productKey) { |
| 37 | + // TODO @alwayssuper:枚举字段,不要 1、2、3;不符合预期,抛出异常 | ||
| 34 | return switch (deviceType) { | 38 | return switch (deviceType) { |
| 35 | case 1 -> String.format(IotConstants.GATEWAY_SUB_STABLE_NAME_FORMAT, productKey).toLowerCase(); | 39 | case 1 -> String.format(IotConstants.GATEWAY_SUB_STABLE_NAME_FORMAT, productKey).toLowerCase(); |
| 36 | case 2 -> String.format(IotConstants.GATEWAY_STABLE_NAME_FORMAT, productKey).toLowerCase(); | 40 | case 2 -> String.format(IotConstants.GATEWAY_STABLE_NAME_FORMAT, productKey).toLowerCase(); |
| @@ -45,7 +49,8 @@ public class IotTdDatabaseUtils { | @@ -45,7 +49,8 @@ public class IotTdDatabaseUtils { | ||
| 45 | * @return 物模型日志超级表表名 | 49 | * @return 物模型日志超级表表名 |
| 46 | * | 50 | * |
| 47 | */ | 51 | */ |
| 48 | - public static String getThinkModelMessageSuperTableName(String productKey) { | 52 | + public static String getThingModelMessageSuperTableName(String productKey) { |
| 53 | + // TODO @alwayssuper:是不是应该 + 拼接就好,不用 format | ||
| 49 | return String.format("thing_model_message_", productKey).toLowerCase(); | 54 | return String.format("thing_model_message_", productKey).toLowerCase(); |
| 50 | } | 55 | } |
| 51 | 56 | ||
| @@ -57,7 +62,7 @@ public class IotTdDatabaseUtils { | @@ -57,7 +62,7 @@ public class IotTdDatabaseUtils { | ||
| 57 | * @return 物模型日志设备表名 | 62 | * @return 物模型日志设备表名 |
| 58 | */ | 63 | */ |
| 59 | public static String getThinkModelMessageDeviceTableName(String productKey, String deviceName) { | 64 | public static String getThinkModelMessageDeviceTableName(String productKey, String deviceName) { |
| 60 | - return String.format(IotConstants.THINK_MODEL_MESSAGE_TABLE_NAME_FORMAT, productKey.toLowerCase(), deviceName.toLowerCase()); | 65 | + return String.format(IotConstants.THING_MODEL_MESSAGE_TABLE_NAME_FORMAT, productKey.toLowerCase(), deviceName.toLowerCase()); |
| 61 | } | 66 | } |
| 62 | 67 | ||
| 63 | } | 68 | } |
yudao-module-iot/yudao-module-iot-biz/src/main/resources/mapper/tdengine/TdThinkModelMessageMapper.xml
| @@ -4,17 +4,17 @@ | @@ -4,17 +4,17 @@ | ||
| 4 | "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> | 4 | "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> |
| 5 | <mapper namespace="cn.iocoder.yudao.module.iot.dal.tdengine.TdThinkModelMessageMapper"> | 5 | <mapper namespace="cn.iocoder.yudao.module.iot.dal.tdengine.TdThinkModelMessageMapper"> |
| 6 | 6 | ||
| 7 | - | ||
| 8 | <!-- 创建物模型消息日志超级表 --> | 7 | <!-- 创建物模型消息日志超级表 --> |
| 8 | + <!-- TODO @芋艿:捉摸下字段,特别是 sys、ts 这种缩写 --> | ||
| 9 | <update id="createSuperTable"> | 9 | <update id="createSuperTable"> |
| 10 | CREATE STABLE ${dataBaseName}.${superTableName}( | 10 | CREATE STABLE ${dataBaseName}.${superTableName}( |
| 11 | - ts TIMESTAMP, | ||
| 12 | - id VARCHAR(255), | ||
| 13 | - sys VARCHAR(2048), | ||
| 14 | - method VARCHAR(255), | ||
| 15 | - params VARCHAR(2048) | 11 | + ts TIMESTAMP, |
| 12 | + id VARCHAR(255), | ||
| 13 | + sys VARCHAR(2048), | ||
| 14 | + method VARCHAR(255), | ||
| 15 | + params VARCHAR(2048) | ||
| 16 | )TAGS ( | 16 | )TAGS ( |
| 17 | - deviceKey VARCHAR(255) | 17 | + deviceKey VARCHAR(255) |
| 18 | ) | 18 | ) |
| 19 | </update> | 19 | </update> |
| 20 | 20 |