Commit 6071afeae863e0e867db19a6b1b6ead10439bac5
1 parent
5fbfe493
【功能优化】Bpm:设备日志的展示
Showing
9 changed files
with
69 additions
and
73 deletions
yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/device/IotDeviceDataController.java
| ... | ... | @@ -3,10 +3,10 @@ package cn.iocoder.yudao.module.iot.controller.admin.device; |
| 3 | 3 | import cn.iocoder.yudao.framework.common.pojo.CommonResult; |
| 4 | 4 | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| 5 | 5 | import cn.iocoder.yudao.framework.common.util.object.BeanUtils; |
| 6 | -import cn.iocoder.yudao.module.iot.controller.admin.device.vo.deviceData.*; | |
| 7 | -import cn.iocoder.yudao.module.iot.dal.dataobject.device.IotDeviceLogDO; | |
| 6 | +import cn.iocoder.yudao.module.iot.controller.admin.device.vo.deviceData.IotDeviceDataPageReqVO; | |
| 7 | +import cn.iocoder.yudao.module.iot.controller.admin.device.vo.deviceData.IotDeviceDataRespVO; | |
| 8 | +import cn.iocoder.yudao.module.iot.controller.admin.device.vo.deviceData.IotTimeDataRespVO; | |
| 8 | 9 | import cn.iocoder.yudao.module.iot.dal.dataobject.device.IotDevicePropertyDO; |
| 9 | -import cn.iocoder.yudao.module.iot.service.device.data.IotDeviceLogService; | |
| 10 | 10 | import cn.iocoder.yudao.module.iot.service.device.data.IotDevicePropertyService; |
| 11 | 11 | import io.swagger.v3.oas.annotations.Operation; |
| 12 | 12 | import io.swagger.v3.oas.annotations.tags.Tag; |
| ... | ... | @@ -30,8 +30,6 @@ public class IotDeviceDataController { |
| 30 | 30 | |
| 31 | 31 | @Resource |
| 32 | 32 | private IotDevicePropertyService deviceDataService; |
| 33 | - @Resource | |
| 34 | - private IotDeviceLogService deviceLogDataService; | |
| 35 | 33 | |
| 36 | 34 | // TODO @浩浩:这里的 /latest-list,包括方法名。 |
| 37 | 35 | @GetMapping("/latest") |
| ... | ... | @@ -49,12 +47,4 @@ public class IotDeviceDataController { |
| 49 | 47 | return success(BeanUtils.toBean(list, IotTimeDataRespVO.class)); |
| 50 | 48 | } |
| 51 | 49 | |
| 52 | - // TODO:功能权限 | |
| 53 | - @GetMapping("/log/page") | |
| 54 | - @Operation(summary = "获得设备日志分页") | |
| 55 | - public CommonResult<PageResult<IotDeviceLogRespVO>> getDeviceLogPage(@Valid IotDeviceLogPageReqVO pageReqVO) { | |
| 56 | - PageResult<IotDeviceLogDO> pageResult = deviceLogDataService.getDeviceLogPage(pageReqVO); | |
| 57 | - return success(BeanUtils.toBean(pageResult, IotDeviceLogRespVO.class)); | |
| 58 | - } | |
| 59 | - | |
| 60 | 50 | } |
| 61 | 51 | \ No newline at end of file | ... | ... |
yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/device/IotDeviceLogController.java
0 → 100644
| 1 | +package cn.iocoder.yudao.module.iot.controller.admin.device; | |
| 2 | + | |
| 3 | +import cn.iocoder.yudao.framework.common.pojo.CommonResult; | |
| 4 | +import cn.iocoder.yudao.framework.common.pojo.PageResult; | |
| 5 | +import cn.iocoder.yudao.framework.common.util.object.BeanUtils; | |
| 6 | +import cn.iocoder.yudao.module.iot.controller.admin.device.vo.deviceData.IotDeviceLogPageReqVO; | |
| 7 | +import cn.iocoder.yudao.module.iot.controller.admin.device.vo.deviceData.IotDeviceLogRespVO; | |
| 8 | +import cn.iocoder.yudao.module.iot.dal.dataobject.device.IotDeviceLogDO; | |
| 9 | +import cn.iocoder.yudao.module.iot.service.device.data.IotDeviceLogService; | |
| 10 | +import io.swagger.v3.oas.annotations.Operation; | |
| 11 | +import io.swagger.v3.oas.annotations.tags.Tag; | |
| 12 | +import jakarta.annotation.Resource; | |
| 13 | +import jakarta.validation.Valid; | |
| 14 | +import org.springframework.validation.annotation.Validated; | |
| 15 | +import org.springframework.web.bind.annotation.GetMapping; | |
| 16 | +import org.springframework.web.bind.annotation.RequestMapping; | |
| 17 | +import org.springframework.web.bind.annotation.RestController; | |
| 18 | + | |
| 19 | +import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; | |
| 20 | + | |
| 21 | +@Tag(name = "管理后台 - IoT 设备日志") | |
| 22 | +@RestController | |
| 23 | +@RequestMapping("/iot/device/log") | |
| 24 | +@Validated | |
| 25 | +public class IotDeviceLogController { | |
| 26 | + | |
| 27 | + @Resource | |
| 28 | + private IotDeviceLogService deviceLogService; | |
| 29 | + | |
| 30 | + // TODO:功能权限 | |
| 31 | + @GetMapping("/page") | |
| 32 | + @Operation(summary = "获得设备日志分页") | |
| 33 | + public CommonResult<PageResult<IotDeviceLogRespVO>> getDeviceLogPage(@Valid IotDeviceLogPageReqVO pageReqVO) { | |
| 34 | + PageResult<IotDeviceLogDO> pageResult = deviceLogService.getDeviceLogPage(pageReqVO); | |
| 35 | + return success(BeanUtils.toBean(pageResult, IotDeviceLogRespVO.class)); | |
| 36 | + } | |
| 37 | + | |
| 38 | +} | |
| 0 | 39 | \ No newline at end of file | ... | ... |
yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/device/vo/deviceData/IotDeviceLogPageReqVO.java
| ... | ... | @@ -4,11 +4,6 @@ import cn.iocoder.yudao.framework.common.pojo.PageParam; |
| 4 | 4 | import io.swagger.v3.oas.annotations.media.Schema; |
| 5 | 5 | import jakarta.validation.constraints.NotEmpty; |
| 6 | 6 | import lombok.Data; |
| 7 | -import org.springframework.format.annotation.DateTimeFormat; | |
| 8 | - | |
| 9 | -import java.time.LocalDateTime; | |
| 10 | - | |
| 11 | -import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; | |
| 12 | 7 | |
| 13 | 8 | @Schema(description = "管理后台 - IoT 设备日志分页查询 Request VO") |
| 14 | 9 | @Data |
| ... | ... | @@ -18,16 +13,10 @@ public class IotDeviceLogPageReqVO extends PageParam { |
| 18 | 13 | @NotEmpty(message = "设备标识不能为空") |
| 19 | 14 | private String deviceKey; |
| 20 | 15 | |
| 21 | - // TODO @super:对应的枚举类 | |
| 22 | 16 | @Schema(description = "消息类型", example = "property") |
| 23 | - private String type; | |
| 17 | + private String type; // 参见 IotDeviceMessageTypeEnum 枚举,精准匹配 | |
| 24 | 18 | |
| 25 | 19 | @Schema(description = "标识符", example = "temperature") |
| 26 | - // TODO @super:对应的枚举类 | |
| 27 | - private String subType; | |
| 28 | - | |
| 29 | - @Schema(description = "创建时间") | |
| 30 | - @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) | |
| 31 | - private LocalDateTime[] createTime; | |
| 20 | + private String identifier; // 参见 IotDeviceMessageIdentifierEnum 枚举,模糊匹配 | |
| 32 | 21 | |
| 33 | 22 | } |
| 34 | 23 | \ No newline at end of file | ... | ... |
yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/tdengine/IotDeviceLogDataMapper.java renamed to yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/tdengine/IotDeviceLogMapper.java
| ... | ... | @@ -4,18 +4,17 @@ import cn.iocoder.yudao.module.iot.controller.admin.device.vo.deviceData.IotDevi |
| 4 | 4 | import cn.iocoder.yudao.module.iot.dal.dataobject.device.IotDeviceLogDO; |
| 5 | 5 | import cn.iocoder.yudao.module.iot.framework.tdengine.core.annotation.TDengineDS; |
| 6 | 6 | import com.baomidou.mybatisplus.annotation.InterceptorIgnore; |
| 7 | +import com.baomidou.mybatisplus.core.metadata.IPage; | |
| 7 | 8 | import org.apache.ibatis.annotations.Mapper; |
| 8 | 9 | import org.apache.ibatis.annotations.Param; |
| 9 | 10 | |
| 10 | -import java.util.List; | |
| 11 | - | |
| 12 | 11 | /** |
| 13 | 12 | * 设备日志 {@link IotDeviceLogDO} Mapper 接口 |
| 14 | 13 | */ |
| 15 | 14 | @Mapper |
| 16 | 15 | @TDengineDS |
| 17 | 16 | @InterceptorIgnore(tenantLine = "true") // 避免 SQL 解析,因为 JSqlParser 对 TDengine 的 SQL 解析会报错 |
| 18 | -public interface IotDeviceLogDataMapper { | |
| 17 | +public interface IotDeviceLogMapper { | |
| 19 | 18 | |
| 20 | 19 | /** |
| 21 | 20 | * 创建设备日志超级表 |
| ... | ... | @@ -44,7 +43,8 @@ public interface IotDeviceLogDataMapper { |
| 44 | 43 | * @param reqVO 分页查询条件 |
| 45 | 44 | * @return 设备日志列表 |
| 46 | 45 | */ |
| 47 | - List<IotDeviceLogDO> selectPage(@Param("reqVO") IotDeviceLogPageReqVO reqVO); | |
| 46 | + IPage<IotDeviceLogDO> selectPage(IPage<IotDeviceLogDO> page, | |
| 47 | + @Param("reqVO") IotDeviceLogPageReqVO reqVO); | |
| 48 | 48 | |
| 49 | 49 | /** |
| 50 | 50 | * 获得设备日志总数 | ... | ... |
yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/tdengine/IotDevicePropertyDataMapper.java renamed to yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/tdengine/IotDevicePropertyMapper.java
| ... | ... | @@ -20,7 +20,7 @@ import java.util.stream.Collectors; |
| 20 | 20 | @Mapper |
| 21 | 21 | @TDengineDS |
| 22 | 22 | @InterceptorIgnore(tenantLine = "true") // 避免 SQL 解析,因为 JSqlParser 对 TDengine 的 SQL 解析会报错 |
| 23 | -public interface IotDevicePropertyDataMapper { | |
| 23 | +public interface IotDevicePropertyMapper { | |
| 24 | 24 | |
| 25 | 25 | List<TDengineTableField> getProductPropertySTableFieldList(@Param("productKey") String productKey); |
| 26 | 26 | ... | ... |
yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/device/data/IotDeviceLogServiceImpl.java
| ... | ... | @@ -7,15 +7,15 @@ import cn.iocoder.yudao.framework.common.util.json.JsonUtils; |
| 7 | 7 | import cn.iocoder.yudao.framework.common.util.object.BeanUtils; |
| 8 | 8 | import cn.iocoder.yudao.module.iot.controller.admin.device.vo.deviceData.IotDeviceLogPageReqVO; |
| 9 | 9 | import cn.iocoder.yudao.module.iot.dal.dataobject.device.IotDeviceLogDO; |
| 10 | -import cn.iocoder.yudao.module.iot.dal.tdengine.IotDeviceLogDataMapper; | |
| 10 | +import cn.iocoder.yudao.module.iot.dal.tdengine.IotDeviceLogMapper; | |
| 11 | 11 | import cn.iocoder.yudao.module.iot.mq.message.IotDeviceMessage; |
| 12 | +import com.baomidou.mybatisplus.core.metadata.IPage; | |
| 13 | +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; | |
| 12 | 14 | import jakarta.annotation.Resource; |
| 13 | 15 | import lombok.extern.slf4j.Slf4j; |
| 14 | 16 | import org.springframework.stereotype.Service; |
| 15 | 17 | import org.springframework.validation.annotation.Validated; |
| 16 | 18 | |
| 17 | -import java.util.List; | |
| 18 | - | |
| 19 | 19 | /** |
| 20 | 20 | * IoT 设备日志数据 Service 实现类 |
| 21 | 21 | * |
| ... | ... | @@ -27,17 +27,17 @@ import java.util.List; |
| 27 | 27 | public class IotDeviceLogServiceImpl implements IotDeviceLogService { |
| 28 | 28 | |
| 29 | 29 | @Resource |
| 30 | - private IotDeviceLogDataMapper deviceLogDataMapper; | |
| 30 | + private IotDeviceLogMapper deviceLogMapper; | |
| 31 | 31 | |
| 32 | 32 | @Override |
| 33 | 33 | public void defineDeviceLog() { |
| 34 | - if (StrUtil.isNotEmpty(deviceLogDataMapper.showDeviceLogSTable())) { | |
| 34 | + if (StrUtil.isNotEmpty(deviceLogMapper.showDeviceLogSTable())) { | |
| 35 | 35 | log.info("[defineDeviceLog][设备日志超级表已存在,创建跳过]"); |
| 36 | 36 | return; |
| 37 | 37 | } |
| 38 | 38 | |
| 39 | 39 | log.info("[defineDeviceLog][设备日志超级表不存在,创建开始...]"); |
| 40 | - deviceLogDataMapper.createDeviceLogSTable(); | |
| 40 | + deviceLogMapper.createDeviceLogSTable(); | |
| 41 | 41 | log.info("[defineDeviceLog][设备日志超级表不存在,创建成功]"); |
| 42 | 42 | } |
| 43 | 43 | |
| ... | ... | @@ -46,15 +46,15 @@ public class IotDeviceLogServiceImpl implements IotDeviceLogService { |
| 46 | 46 | IotDeviceLogDO log = BeanUtils.toBean(message, IotDeviceLogDO.class) |
| 47 | 47 | .setId(IdUtil.fastSimpleUUID()) |
| 48 | 48 | .setContent(JsonUtils.toJsonString(message.getData())); |
| 49 | - deviceLogDataMapper.insert(log); | |
| 49 | + deviceLogMapper.insert(log); | |
| 50 | 50 | } |
| 51 | 51 | |
| 52 | 52 | @Override |
| 53 | 53 | public PageResult<IotDeviceLogDO> getDeviceLogPage(IotDeviceLogPageReqVO pageReqVO) { |
| 54 | 54 | // TODO @芋艿:增加一个表不存在的 try catch |
| 55 | - List<IotDeviceLogDO> list = deviceLogDataMapper.selectPage(pageReqVO); | |
| 56 | - Long total = deviceLogDataMapper.selectCount(pageReqVO); | |
| 57 | - return new PageResult<>(list, total); | |
| 55 | + IPage<IotDeviceLogDO> page = deviceLogMapper.selectPage( | |
| 56 | + new Page<>(pageReqVO.getPageNo(), pageReqVO.getPageSize()), pageReqVO); | |
| 57 | + return new PageResult<>(page.getRecords(), page.getTotal()); | |
| 58 | 58 | } |
| 59 | 59 | |
| 60 | 60 | } | ... | ... |
yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/device/data/IotDevicePropertyServiceImpl.java
| ... | ... | @@ -13,7 +13,7 @@ import cn.iocoder.yudao.module.iot.dal.dataobject.device.IotDevicePropertyDO; |
| 13 | 13 | import cn.iocoder.yudao.module.iot.dal.dataobject.product.IotProductDO; |
| 14 | 14 | import cn.iocoder.yudao.module.iot.dal.dataobject.thingmodel.IotThingModelDO; |
| 15 | 15 | import cn.iocoder.yudao.module.iot.dal.redis.device.DevicePropertyRedisDAO; |
| 16 | -import cn.iocoder.yudao.module.iot.dal.tdengine.IotDevicePropertyDataMapper; | |
| 16 | +import cn.iocoder.yudao.module.iot.dal.tdengine.IotDevicePropertyMapper; | |
| 17 | 17 | import cn.iocoder.yudao.module.iot.enums.thingmodel.IotDataSpecsDataTypeEnum; |
| 18 | 18 | import cn.iocoder.yudao.module.iot.enums.thingmodel.IotThingModelTypeEnum; |
| 19 | 19 | import cn.iocoder.yudao.module.iot.framework.tdengine.core.TDengineTableField; |
| ... | ... | @@ -68,7 +68,7 @@ public class IotDevicePropertyServiceImpl implements IotDevicePropertyService { |
| 68 | 68 | private DevicePropertyRedisDAO deviceDataRedisDAO; |
| 69 | 69 | |
| 70 | 70 | @Resource |
| 71 | - private IotDevicePropertyDataMapper devicePropertyDataMapper; | |
| 71 | + private IotDevicePropertyMapper devicePropertyMapper; | |
| 72 | 72 | |
| 73 | 73 | @Override |
| 74 | 74 | public void defineDevicePropertyData(Long productId) { |
| ... | ... | @@ -79,7 +79,7 @@ public class IotDevicePropertyServiceImpl implements IotDevicePropertyService { |
| 79 | 79 | // 1.2 解析 DB 里的字段 |
| 80 | 80 | List<TDengineTableField> oldFields = new ArrayList<>(); |
| 81 | 81 | try { |
| 82 | - oldFields.addAll(devicePropertyDataMapper.getProductPropertySTableFieldList(product.getProductKey())); | |
| 82 | + oldFields.addAll(devicePropertyMapper.getProductPropertySTableFieldList(product.getProductKey())); | |
| 83 | 83 | } catch (Exception e) { |
| 84 | 84 | if (!e.getMessage().contains("Table does not exist")) { |
| 85 | 85 | throw e; |
| ... | ... | @@ -93,11 +93,11 @@ public class IotDevicePropertyServiceImpl implements IotDevicePropertyService { |
| 93 | 93 | log.info("[defineDevicePropertyData][productId({}) 没有需要定义的属性]", productId); |
| 94 | 94 | return; |
| 95 | 95 | } |
| 96 | - devicePropertyDataMapper.createProductPropertySTable(product.getProductKey(), newFields); | |
| 96 | + devicePropertyMapper.createProductPropertySTable(product.getProductKey(), newFields); | |
| 97 | 97 | return; |
| 98 | 98 | } |
| 99 | 99 | // 2.2 情况二:如果是修改的时候,需要更新表 |
| 100 | - devicePropertyDataMapper.alterProductPropertySTable(product.getProductKey(), oldFields, newFields); | |
| 100 | + devicePropertyMapper.alterProductPropertySTable(product.getProductKey(), oldFields, newFields); | |
| 101 | 101 | } |
| 102 | 102 | |
| 103 | 103 | private List<TDengineTableField> buildTableFieldList(List<IotThingModelDO> thingModels) { |
| ... | ... | @@ -142,7 +142,7 @@ public class IotDevicePropertyServiceImpl implements IotDevicePropertyService { |
| 142 | 142 | } |
| 143 | 143 | |
| 144 | 144 | // 3.1 保存设备属性【数据】 |
| 145 | - devicePropertyDataMapper.insert(device, properties, | |
| 145 | + devicePropertyMapper.insert(device, properties, | |
| 146 | 146 | LocalDateTimeUtil.toEpochMilli(message.getReportTime())); // TODO @芋艿:后续要看看,查询的时候,能不能用 LocalDateTime |
| 147 | 147 | |
| 148 | 148 | // 3.2 保存设备属性【日志】 | ... | ... |
yudao-module-iot/yudao-module-iot-biz/src/main/resources/mapper/device/IotDeviceLogDataMapper.xml renamed to yudao-module-iot/yudao-module-iot-biz/src/main/resources/mapper/device/IotDeviceLogMapper.xml
| ... | ... | @@ -2,7 +2,7 @@ |
| 2 | 2 | <!DOCTYPE mapper |
| 3 | 3 | PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" |
| 4 | 4 | "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> |
| 5 | -<mapper namespace="cn.iocoder.yudao.module.iot.dal.tdengine.IotDeviceLogDataMapper"> | |
| 5 | +<mapper namespace="cn.iocoder.yudao.module.iot.dal.tdengine.IotDeviceLogMapper"> | |
| 6 | 6 | |
| 7 | 7 | <update id="createDeviceLogSTable"> |
| 8 | 8 | CREATE STABLE IF NOT EXISTS device_log ( |
| ... | ... | @@ -40,38 +40,17 @@ |
| 40 | 40 | </insert> |
| 41 | 41 | |
| 42 | 42 | <select id="selectPage" resultType="cn.iocoder.yudao.module.iot.dal.dataobject.device.IotDeviceLogDO"> |
| 43 | - SELECT ts, id, device_key, product_key, type, sub_type, content, report_time | |
| 43 | + SELECT ts, id, device_key, product_key, type, identifier, content, report_time | |
| 44 | 44 | FROM device_log_${reqVO.deviceKey} |
| 45 | 45 | <where> |
| 46 | 46 | <if test="reqVO.type != null and reqVO.type != ''"> |
| 47 | 47 | AND type = #{reqVO.type} |
| 48 | 48 | </if> |
| 49 | - <if test="reqVO.subType != null and reqVO.subType != ''"> | |
| 50 | - AND subType = #{reqVO.subType} | |
| 51 | - </if> | |
| 52 | - <if test="reqVO.createTime != null"> | |
| 53 | - AND ts BETWEEN #{reqVO.createTime[0]} AND #{reqVO.createTime[1]} | |
| 49 | + <if test="reqVO.identifier != null and reqVO.identifier != ''"> | |
| 50 | + AND identifier LIKE CONCAT('%',#{reqVO.identifier},'%') | |
| 54 | 51 | </if> |
| 55 | 52 | </where> |
| 56 | 53 | ORDER BY ts DESC |
| 57 | - LIMIT #{reqVO.pageSize} OFFSET #{reqVO.pageNo} | |
| 58 | - </select> | |
| 59 | - | |
| 60 | - <!-- TODO 芋艿:看看能不能复用 mybatis-plus 的 selectCount 方法 --> | |
| 61 | - <select id="selectCount" resultType="Long"> | |
| 62 | - SELECT COUNT(*) | |
| 63 | - FROM device_log_${reqVO.deviceKey} | |
| 64 | - <where> | |
| 65 | - <if test="reqVO.type != null and reqVO.type != ''"> | |
| 66 | - AND type = #{reqVO.type} | |
| 67 | - </if> | |
| 68 | - <if test="reqVO.subType != null and reqVO.subType != ''"> | |
| 69 | - AND subType = #{reqVO.subType} | |
| 70 | - </if> | |
| 71 | - <if test="reqVO.createTime != null"> | |
| 72 | - AND ts BETWEEN #{reqVO.createTime[0]} AND #{reqVO.createTime[1]} | |
| 73 | - </if> | |
| 74 | - </where> | |
| 75 | 54 | </select> |
| 76 | 55 | |
| 77 | 56 | </mapper> |
| 78 | 57 | \ No newline at end of file | ... | ... |
yudao-module-iot/yudao-module-iot-biz/src/main/resources/mapper/device/IotDevicePropertyDataMapper.xml renamed to yudao-module-iot/yudao-module-iot-biz/src/main/resources/mapper/device/IotDevicePropertyMapper.xml
| ... | ... | @@ -2,7 +2,7 @@ |
| 2 | 2 | <!DOCTYPE mapper |
| 3 | 3 | PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" |
| 4 | 4 | "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> |
| 5 | -<mapper namespace="cn.iocoder.yudao.module.iot.dal.tdengine.IotDevicePropertyDataMapper"> | |
| 5 | +<mapper namespace="cn.iocoder.yudao.module.iot.dal.tdengine.IotDevicePropertyMapper"> | |
| 6 | 6 | |
| 7 | 7 | <select id="getProductPropertySTableFieldList" resultType="cn.iocoder.yudao.module.iot.framework.tdengine.core.TDengineTableField"> |
| 8 | 8 | DESCRIBE product_property_${productKey} | ... | ... |