Commit 8c9044867047f265ba8b17ff94e1d1fc3f3fd62a

Authored by YunaiV
1 parent 6071afea

【功能优化】Bpm:完善最新数据的接口

Showing 16 changed files with 120 additions and 138 deletions
yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/device/IotDeviceDataController.java deleted
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.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;  
9 -import cn.iocoder.yudao.module.iot.dal.dataobject.device.IotDevicePropertyDO;  
10 -import cn.iocoder.yudao.module.iot.service.device.data.IotDevicePropertyService;  
11 -import io.swagger.v3.oas.annotations.Operation;  
12 -import io.swagger.v3.oas.annotations.tags.Tag;  
13 -import jakarta.annotation.Resource;  
14 -import jakarta.validation.Valid;  
15 -import org.springframework.validation.annotation.Validated;  
16 -import org.springframework.web.bind.annotation.GetMapping;  
17 -import org.springframework.web.bind.annotation.RequestMapping;  
18 -import org.springframework.web.bind.annotation.RestController;  
19 -  
20 -import java.util.List;  
21 -import java.util.Map;  
22 -  
23 -import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;  
24 -  
25 -@Tag(name = "管理后台 - IoT 设备数据")  
26 -@RestController  
27 -@RequestMapping("/iot/device/data")  
28 -@Validated  
29 -public class IotDeviceDataController {  
30 -  
31 - @Resource  
32 - private IotDevicePropertyService deviceDataService;  
33 -  
34 - // TODO @浩浩:这里的 /latest-list,包括方法名。  
35 - @GetMapping("/latest")  
36 - @Operation(summary = "获取设备属性最新数据")  
37 - public CommonResult<List<IotDeviceDataRespVO>> getLatestDeviceProperties(@Valid IotDeviceDataPageReqVO deviceDataReqVO) {  
38 - List<IotDevicePropertyDO> list = deviceDataService.getLatestDeviceProperties(deviceDataReqVO);  
39 - return success(BeanUtils.toBean(list, IotDeviceDataRespVO.class));  
40 - }  
41 -  
42 - // TODO @浩浩:这里的 /history-page 包括方法名。  
43 - @GetMapping("/history")  
44 - @Operation(summary = "获取设备属性历史数据")  
45 - public CommonResult<PageResult<IotTimeDataRespVO>> getHistoryDeviceProperties(@Valid IotDeviceDataPageReqVO deviceDataReqVO) {  
46 - PageResult<Map<String, Object>> list = deviceDataService.getHistoryDeviceProperties(deviceDataReqVO);  
47 - return success(BeanUtils.toBean(list, IotTimeDataRespVO.class));  
48 - }  
49 -  
50 -}  
51 \ No newline at end of file 0 \ 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
@@ -3,8 +3,8 @@ package cn.iocoder.yudao.module.iot.controller.admin.device; @@ -3,8 +3,8 @@ package cn.iocoder.yudao.module.iot.controller.admin.device;
3 import cn.iocoder.yudao.framework.common.pojo.CommonResult; 3 import cn.iocoder.yudao.framework.common.pojo.CommonResult;
4 import cn.iocoder.yudao.framework.common.pojo.PageResult; 4 import cn.iocoder.yudao.framework.common.pojo.PageResult;
5 import cn.iocoder.yudao.framework.common.util.object.BeanUtils; 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; 6 +import cn.iocoder.yudao.module.iot.controller.admin.device.vo.data.IotDeviceLogPageReqVO;
  7 +import cn.iocoder.yudao.module.iot.controller.admin.device.vo.data.IotDeviceLogRespVO;
8 import cn.iocoder.yudao.module.iot.dal.dataobject.device.IotDeviceLogDO; 8 import cn.iocoder.yudao.module.iot.dal.dataobject.device.IotDeviceLogDO;
9 import cn.iocoder.yudao.module.iot.service.device.data.IotDeviceLogService; 9 import cn.iocoder.yudao.module.iot.service.device.data.IotDeviceLogService;
10 import io.swagger.v3.oas.annotations.Operation; 10 import io.swagger.v3.oas.annotations.Operation;
yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/device/IotDevicePropertyController.java 0 → 100644
  1 +package cn.iocoder.yudao.module.iot.controller.admin.device;
  2 +
  3 +import cn.hutool.core.collection.CollUtil;
  4 +import cn.hutool.core.lang.Assert;
  5 +import cn.iocoder.yudao.framework.common.pojo.CommonResult;
  6 +import cn.iocoder.yudao.framework.common.pojo.PageResult;
  7 +import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
  8 +import cn.iocoder.yudao.module.iot.controller.admin.device.vo.data.IotDeviceDataPageReqVO;
  9 +import cn.iocoder.yudao.module.iot.controller.admin.device.vo.data.IotDeviceDataRespVO;
  10 +import cn.iocoder.yudao.module.iot.controller.admin.device.vo.data.IotTimeDataRespVO;
  11 +import cn.iocoder.yudao.module.iot.dal.dataobject.device.IotDeviceDO;
  12 +import cn.iocoder.yudao.module.iot.dal.dataobject.device.IotDevicePropertyDO;
  13 +import cn.iocoder.yudao.module.iot.dal.dataobject.thingmodel.IotThingModelDO;
  14 +import cn.iocoder.yudao.module.iot.service.device.IotDeviceService;
  15 +import cn.iocoder.yudao.module.iot.service.device.data.IotDevicePropertyService;
  16 +import cn.iocoder.yudao.module.iot.service.thingmodel.IotThingModelService;
  17 +import io.swagger.v3.oas.annotations.Operation;
  18 +import io.swagger.v3.oas.annotations.tags.Tag;
  19 +import jakarta.annotation.Resource;
  20 +import jakarta.validation.Valid;
  21 +import org.springframework.validation.annotation.Validated;
  22 +import org.springframework.web.bind.annotation.GetMapping;
  23 +import org.springframework.web.bind.annotation.RequestMapping;
  24 +import org.springframework.web.bind.annotation.RestController;
  25 +
  26 +import java.util.List;
  27 +import java.util.Map;
  28 +
  29 +import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
  30 +import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertList;
  31 +
  32 +@Tag(name = "管理后台 - IoT 设备属性")
  33 +@RestController
  34 +@RequestMapping("/iot/device/property")
  35 +@Validated
  36 +public class IotDevicePropertyController {
  37 +
  38 + @Resource
  39 + private IotDevicePropertyService devicePropertyService;
  40 + @Resource
  41 + private IotThingModelService thingModelService;
  42 + @Resource
  43 + private IotDeviceService deviceService;
  44 +
  45 + @GetMapping("/latest")
  46 + @Operation(summary = "获取设备属性最新属性")
  47 + public CommonResult<List<IotDeviceDataRespVO>> getLatestDeviceProperties(@Valid IotDeviceDataPageReqVO pageReqVO) {
  48 + Map<String, IotDevicePropertyDO> properties = devicePropertyService.getLatestDeviceProperties(pageReqVO);
  49 +
  50 + // 拼接数据
  51 + IotDeviceDO device = deviceService.getDevice(pageReqVO.getDeviceId());
  52 + Assert.notNull(device, "设备不存在");
  53 + List<IotThingModelDO> thingModels = thingModelService.getThingModelListByProductId(device.getProductId());
  54 + return success(convertList(properties.entrySet(), entry -> {
  55 + IotThingModelDO thingModel = CollUtil.findOne(thingModels,
  56 + item -> item.getIdentifier().equals(entry.getKey()));
  57 + if (thingModel == null || thingModel.getProperty() == null) {
  58 + return null;
  59 + }
  60 + IotDevicePropertyDO property = entry.getValue();
  61 + return BeanUtils.toBean(thingModel, IotDeviceDataRespVO.class)
  62 + .setDataType(thingModel.getProperty().getDataType())
  63 + .setValue(property.getValue()).setUpdateTime(property.getUpdateTime());
  64 + }));
  65 + }
  66 +
  67 + // TODO @浩浩:这里的 /history-page 包括方法名。
  68 + @GetMapping("/history")
  69 + @Operation(summary = "获取设备属性历史数据")
  70 + public CommonResult<PageResult<IotTimeDataRespVO>> getHistoryDeviceProperties(@Valid IotDeviceDataPageReqVO pageReqVO) {
  71 + PageResult<Map<String, Object>> list = devicePropertyService.getHistoryDeviceProperties(pageReqVO);
  72 + return success(BeanUtils.toBean(list, IotTimeDataRespVO.class));
  73 + }
  74 +
  75 +}
0 \ No newline at end of file 76 \ 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/IotDeviceDataPageReqVO.java renamed to yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/device/vo/data/IotDeviceDataPageReqVO.java
1 -package cn.iocoder.yudao.module.iot.controller.admin.device.vo.deviceData; 1 +package cn.iocoder.yudao.module.iot.controller.admin.device.vo.data;
2 2
3 import cn.iocoder.yudao.framework.common.pojo.PageParam; 3 import cn.iocoder.yudao.framework.common.pojo.PageParam;
4 import io.swagger.v3.oas.annotations.media.Schema; 4 import io.swagger.v3.oas.annotations.media.Schema;
5 -import jakarta.validation.constraints.Size; 5 +import jakarta.validation.constraints.NotNull;
6 import lombok.Data; 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 @Schema(description = "管理后台 - IoT 设备数据 Request VO") 8 @Schema(description = "管理后台 - IoT 设备数据 Request VO")
14 @Data 9 @Data
15 public class IotDeviceDataPageReqVO extends PageParam { 10 public class IotDeviceDataPageReqVO extends PageParam {
16 11
17 @Schema(description = "设备编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "177") 12 @Schema(description = "设备编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "177")
  13 + @NotNull(message = "设备编号不能为空")
18 private Long deviceId; 14 private Long deviceId;
19 15
20 @Schema(description = "属性标识符", requiredMode = Schema.RequiredMode.REQUIRED) 16 @Schema(description = "属性标识符", requiredMode = Schema.RequiredMode.REQUIRED)
@@ -23,9 +19,4 @@ public class IotDeviceDataPageReqVO extends PageParam { @@ -23,9 +19,4 @@ public class IotDeviceDataPageReqVO extends PageParam {
23 @Schema(description = "属性名称", requiredMode = Schema.RequiredMode.REQUIRED) 19 @Schema(description = "属性名称", requiredMode = Schema.RequiredMode.REQUIRED)
24 private String name; 20 private String name;
25 21
26 - @Schema(description = "时间范围", requiredMode = Schema.RequiredMode.NOT_REQUIRED)  
27 - @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)  
28 - @Size(min = 2, max = 2, message = "请选择时间范围")  
29 - private LocalDateTime[] times;  
30 -  
31 } 22 }
32 \ No newline at end of file 23 \ 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/IotDeviceDataRespVO.java renamed to yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/device/vo/data/IotDeviceDataRespVO.java
1 -package cn.iocoder.yudao.module.iot.controller.admin.device.vo.deviceData; 1 +package cn.iocoder.yudao.module.iot.controller.admin.device.vo.data;
2 2
3 import io.swagger.v3.oas.annotations.media.Schema; 3 import io.swagger.v3.oas.annotations.media.Schema;
4 import lombok.Data; 4 import lombok.Data;
5 5
6 import java.time.LocalDateTime; 6 import java.time.LocalDateTime;
7 7
8 -@Schema(description = "管理后台 - IoT 设备数据 Response VO") 8 +@Schema(description = "管理后台 - IoT 设备属性 Response VO")
9 @Data 9 @Data
10 public class IotDeviceDataRespVO { 10 public class IotDeviceDataRespVO {
11 11
12 - @Schema(description = "设备编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "177")  
13 - private Long deviceId; 12 + @Schema(description = "属性标识符", requiredMode = Schema.RequiredMode.REQUIRED)
  13 + private String identifier;
14 14
15 - @Schema(description = "物模型编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "21816")  
16 - private Long thingModelId; 15 + @Schema(description = "最新值", requiredMode = Schema.RequiredMode.REQUIRED)
  16 + private Object value;
17 17
18 - @Schema(description = "产品标识", requiredMode = Schema.RequiredMode.REQUIRED)  
19 - private String productKey; 18 + @Schema(description = "更新时间", requiredMode = Schema.RequiredMode.REQUIRED)
  19 + private LocalDateTime updateTime;
20 20
21 - @Schema(description = "设备名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "王五")  
22 - private String deviceName; 21 + // ========== 基于 ThingModel 查询 ==========
23 22
24 - @Schema(description = "属性标识符", requiredMode = Schema.RequiredMode.REQUIRED)  
25 - private String identifier; 23 +// @Schema(description = "物模型编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "21816")
  24 +// private Long thingModelId;
26 25
27 @Schema(description = "属性名称", requiredMode = Schema.RequiredMode.REQUIRED) 26 @Schema(description = "属性名称", requiredMode = Schema.RequiredMode.REQUIRED)
28 private String name; 27 private String name;
@@ -30,10 +29,4 @@ public class IotDeviceDataRespVO { @@ -30,10 +29,4 @@ public class IotDeviceDataRespVO {
30 @Schema(description = "数据类型", requiredMode = Schema.RequiredMode.REQUIRED) 29 @Schema(description = "数据类型", requiredMode = Schema.RequiredMode.REQUIRED)
31 private String dataType; 30 private String dataType;
32 31
33 - @Schema(description = "更新时间", requiredMode = Schema.RequiredMode.REQUIRED)  
34 - private LocalDateTime updateTime;  
35 -  
36 - @Schema(description = "最新值", requiredMode = Schema.RequiredMode.REQUIRED)  
37 - private String value;  
38 -  
39 } 32 }
40 \ No newline at end of file 33 \ 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 renamed to yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/device/vo/data/IotDeviceLogPageReqVO.java
1 -package cn.iocoder.yudao.module.iot.controller.admin.device.vo.deviceData; 1 +package cn.iocoder.yudao.module.iot.controller.admin.device.vo.data;
2 2
3 import cn.iocoder.yudao.framework.common.pojo.PageParam; 3 import cn.iocoder.yudao.framework.common.pojo.PageParam;
4 import io.swagger.v3.oas.annotations.media.Schema; 4 import io.swagger.v3.oas.annotations.media.Schema;
yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/device/vo/deviceData/IotDeviceLogRespVO.java renamed to yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/device/vo/data/IotDeviceLogRespVO.java
1 -package cn.iocoder.yudao.module.iot.controller.admin.device.vo.deviceData; 1 +package cn.iocoder.yudao.module.iot.controller.admin.device.vo.data;
2 2
3 import io.swagger.v3.oas.annotations.media.Schema; 3 import io.swagger.v3.oas.annotations.media.Schema;
4 import lombok.Data; 4 import lombok.Data;
@@ -22,7 +22,7 @@ public class IotDeviceLogRespVO { @@ -22,7 +22,7 @@ public class IotDeviceLogRespVO {
22 private String type; 22 private String type;
23 23
24 @Schema(description = "标识符", requiredMode = Schema.RequiredMode.REQUIRED, example = "temperature") 24 @Schema(description = "标识符", requiredMode = Schema.RequiredMode.REQUIRED, example = "temperature")
25 - private String subType; 25 + private String identifier;
26 26
27 @Schema(description = "日志内容", requiredMode = Schema.RequiredMode.REQUIRED) 27 @Schema(description = "日志内容", requiredMode = Schema.RequiredMode.REQUIRED)
28 private String content; 28 private String content;
yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/device/vo/deviceData/IotTimeDataRespVO.java renamed to yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/device/vo/data/IotTimeDataRespVO.java
1 -package cn.iocoder.yudao.module.iot.controller.admin.device.vo.deviceData; 1 +package cn.iocoder.yudao.module.iot.controller.admin.device.vo.data;
2 2
3 import lombok.AllArgsConstructor; 3 import lombok.AllArgsConstructor;
4 import lombok.Data; 4 import lombok.Data;
yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/redis/device/DevicePropertyRedisDAO.java
@@ -28,8 +28,9 @@ public class DevicePropertyRedisDAO { @@ -28,8 +28,9 @@ public class DevicePropertyRedisDAO {
28 if (CollUtil.isEmpty(entries)) { 28 if (CollUtil.isEmpty(entries)) {
29 return Collections.emptyMap(); 29 return Collections.emptyMap();
30 } 30 }
31 - return convertMap(entries.values(), key -> (String) key,  
32 - value -> JsonUtils.parseObject((String) value, IotDevicePropertyDO.class)); 31 + return convertMap(entries.entrySet(),
  32 + entry -> (String) entry.getKey(),
  33 + entry -> JsonUtils.parseObject((String) entry.getValue(), IotDevicePropertyDO.class));
33 } 34 }
34 35
35 public void set(String deviceKey, Map<String, IotDevicePropertyDO> properties) { 36 public void set(String deviceKey, Map<String, IotDevicePropertyDO> properties) {
yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/tdengine/IotDeviceLogMapper.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.module.iot.controller.admin.device.vo.deviceData.IotDeviceLogPageReqVO; 3 +import cn.iocoder.yudao.module.iot.controller.admin.device.vo.data.IotDeviceLogPageReqVO;
4 import cn.iocoder.yudao.module.iot.dal.dataobject.device.IotDeviceLogDO; 4 import cn.iocoder.yudao.module.iot.dal.dataobject.device.IotDeviceLogDO;
5 import cn.iocoder.yudao.module.iot.framework.tdengine.core.annotation.TDengineDS; 5 import cn.iocoder.yudao.module.iot.framework.tdengine.core.annotation.TDengineDS;
6 import com.baomidou.mybatisplus.annotation.InterceptorIgnore; 6 import com.baomidou.mybatisplus.annotation.InterceptorIgnore;
yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/device/IotDeviceService.java
@@ -60,6 +60,14 @@ public interface IotDeviceService { @@ -60,6 +60,14 @@ public interface IotDeviceService {
60 void deleteDeviceList(Collection<Long> ids); 60 void deleteDeviceList(Collection<Long> ids);
61 61
62 /** 62 /**
  63 + * 校验设备是否存在
  64 + *
  65 + * @param id 设备 ID
  66 + * @return 设备对象
  67 + */
  68 + IotDeviceDO validateDeviceExists(Long id);
  69 +
  70 + /**
63 * 获得设备 71 * 获得设备
64 * 72 *
65 * @param id 编号 73 * @param id 编号
@@ -67,7 +75,6 @@ public interface IotDeviceService { @@ -67,7 +75,6 @@ public interface IotDeviceService {
67 */ 75 */
68 IotDeviceDO getDevice(Long id); 76 IotDeviceDO getDevice(Long id);
69 77
70 -  
71 /** 78 /**
72 * 根据设备 key 获得设备 79 * 根据设备 key 获得设备
73 * 80 *
yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/device/IotDeviceServiceImpl.java
@@ -187,13 +187,8 @@ public class IotDeviceServiceImpl implements IotDeviceService { @@ -187,13 +187,8 @@ public class IotDeviceServiceImpl implements IotDeviceService {
187 deleteDeviceCache(devices); 187 deleteDeviceCache(devices);
188 } 188 }
189 189
190 - /**  
191 - * 校验设备是否存在  
192 - *  
193 - * @param id 设备 ID  
194 - * @return 设备对象  
195 - */  
196 - private IotDeviceDO validateDeviceExists(Long id) { 190 + @Override
  191 + public IotDeviceDO validateDeviceExists(Long id) {
197 IotDeviceDO device = deviceMapper.selectById(id); 192 IotDeviceDO device = deviceMapper.selectById(id);
198 if (device == null) { 193 if (device == null) {
199 throw exception(DEVICE_NOT_EXISTS); 194 throw exception(DEVICE_NOT_EXISTS);
yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/device/data/IotDeviceLogService.java
1 package cn.iocoder.yudao.module.iot.service.device.data; 1 package cn.iocoder.yudao.module.iot.service.device.data;
2 2
3 import cn.iocoder.yudao.framework.common.pojo.PageResult; 3 import cn.iocoder.yudao.framework.common.pojo.PageResult;
4 -import cn.iocoder.yudao.module.iot.controller.admin.device.vo.deviceData.IotDeviceLogPageReqVO; 4 +import cn.iocoder.yudao.module.iot.controller.admin.device.vo.data.IotDeviceLogPageReqVO;
5 import cn.iocoder.yudao.module.iot.dal.dataobject.device.IotDeviceLogDO; 5 import cn.iocoder.yudao.module.iot.dal.dataobject.device.IotDeviceLogDO;
6 import cn.iocoder.yudao.module.iot.mq.message.IotDeviceMessage; 6 import cn.iocoder.yudao.module.iot.mq.message.IotDeviceMessage;
7 7
yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/device/data/IotDeviceLogServiceImpl.java
@@ -5,7 +5,7 @@ import cn.hutool.core.util.StrUtil; @@ -5,7 +5,7 @@ import cn.hutool.core.util.StrUtil;
5 import cn.iocoder.yudao.framework.common.pojo.PageResult; 5 import cn.iocoder.yudao.framework.common.pojo.PageResult;
6 import cn.iocoder.yudao.framework.common.util.json.JsonUtils; 6 import cn.iocoder.yudao.framework.common.util.json.JsonUtils;
7 import cn.iocoder.yudao.framework.common.util.object.BeanUtils; 7 import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
8 -import cn.iocoder.yudao.module.iot.controller.admin.device.vo.deviceData.IotDeviceLogPageReqVO; 8 +import cn.iocoder.yudao.module.iot.controller.admin.device.vo.data.IotDeviceLogPageReqVO;
9 import cn.iocoder.yudao.module.iot.dal.dataobject.device.IotDeviceLogDO; 9 import cn.iocoder.yudao.module.iot.dal.dataobject.device.IotDeviceLogDO;
10 import cn.iocoder.yudao.module.iot.dal.tdengine.IotDeviceLogMapper; 10 import cn.iocoder.yudao.module.iot.dal.tdengine.IotDeviceLogMapper;
11 import cn.iocoder.yudao.module.iot.mq.message.IotDeviceMessage; 11 import cn.iocoder.yudao.module.iot.mq.message.IotDeviceMessage;
yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/device/data/IotDevicePropertyService.java
1 package cn.iocoder.yudao.module.iot.service.device.data; 1 package cn.iocoder.yudao.module.iot.service.device.data;
2 2
3 import cn.iocoder.yudao.framework.common.pojo.PageResult; 3 import cn.iocoder.yudao.framework.common.pojo.PageResult;
4 -import cn.iocoder.yudao.module.iot.controller.admin.device.vo.deviceData.IotDeviceDataPageReqVO; 4 +import cn.iocoder.yudao.module.iot.controller.admin.device.vo.data.IotDeviceDataPageReqVO;
5 import cn.iocoder.yudao.module.iot.dal.dataobject.device.IotDevicePropertyDO; 5 import cn.iocoder.yudao.module.iot.dal.dataobject.device.IotDevicePropertyDO;
6 import cn.iocoder.yudao.module.iot.mq.message.IotDeviceMessage; 6 import cn.iocoder.yudao.module.iot.mq.message.IotDeviceMessage;
7 import jakarta.validation.Valid; 7 import jakarta.validation.Valid;
8 8
9 -import java.util.List;  
10 import java.util.Map; 9 import java.util.Map;
11 10
12 /** 11 /**
@@ -36,7 +35,7 @@ public interface IotDevicePropertyService { @@ -36,7 +35,7 @@ public interface IotDevicePropertyService {
36 * @param deviceId 设备编号 35 * @param deviceId 设备编号
37 * @return 设备属性最新数据 36 * @return 设备属性最新数据
38 */ 37 */
39 - List<IotDevicePropertyDO> getLatestDeviceProperties(@Valid IotDeviceDataPageReqVO deviceId); 38 + Map<String, IotDevicePropertyDO> getLatestDeviceProperties(@Valid IotDeviceDataPageReqVO deviceId);
40 39
41 /** 40 /**
42 * 获得设备属性历史数据 41 * 获得设备属性历史数据
yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/device/data/IotDevicePropertyServiceImpl.java
@@ -6,7 +6,7 @@ import cn.hutool.core.map.MapUtil; @@ -6,7 +6,7 @@ import cn.hutool.core.map.MapUtil;
6 import cn.hutool.core.util.StrUtil; 6 import cn.hutool.core.util.StrUtil;
7 import cn.iocoder.yudao.framework.common.pojo.PageResult; 7 import cn.iocoder.yudao.framework.common.pojo.PageResult;
8 import cn.iocoder.yudao.framework.tenant.core.aop.TenantIgnore; 8 import cn.iocoder.yudao.framework.tenant.core.aop.TenantIgnore;
9 -import cn.iocoder.yudao.module.iot.controller.admin.device.vo.deviceData.IotDeviceDataPageReqVO; 9 +import cn.iocoder.yudao.module.iot.controller.admin.device.vo.data.IotDeviceDataPageReqVO;
10 import cn.iocoder.yudao.module.iot.controller.admin.thingmodel.model.dataType.ThingModelDateOrTextDataSpecs; 10 import cn.iocoder.yudao.module.iot.controller.admin.thingmodel.model.dataType.ThingModelDateOrTextDataSpecs;
11 import cn.iocoder.yudao.module.iot.dal.dataobject.device.IotDeviceDO; 11 import cn.iocoder.yudao.module.iot.dal.dataobject.device.IotDeviceDO;
12 import cn.iocoder.yudao.module.iot.dal.dataobject.device.IotDevicePropertyDO; 12 import cn.iocoder.yudao.module.iot.dal.dataobject.device.IotDevicePropertyDO;
@@ -151,41 +151,12 @@ public class IotDevicePropertyServiceImpl implements IotDevicePropertyService { @@ -151,41 +151,12 @@ public class IotDevicePropertyServiceImpl implements IotDevicePropertyService {
151 } 151 }
152 152
153 @Override 153 @Override
154 - public List<IotDevicePropertyDO> getLatestDeviceProperties(@Valid IotDeviceDataPageReqVO deviceDataReqVO) {  
155 -// List<IotDevicePropertyDO> list = new ArrayList<>();  
156 -// // 1. 获取设备信息  
157 -// IotDeviceDO device = deviceService.getDevice(deviceDataReqVO.getDeviceId());  
158 -// // 2. 获取设备属性最新数据  
159 -// List<IotThingModelDO> thingModelList = thingModelService.getProductThingModelListByProductKey(device.getProductKey());  
160 -// thingModelList = filterList(thingModelList, thingModel -> IotThingModelTypeEnum.PROPERTY.getType()  
161 -// .equals(thingModel.getType()));  
162 -//  
163 -// // 3. 过滤标识符和属性名称  
164 -// if (deviceDataReqVO.getIdentifier() != null) {  
165 -// thingModelList = filterList(thingModelList, thingModel -> thingModel.getIdentifier()  
166 -// .toLowerCase().contains(deviceDataReqVO.getIdentifier().toLowerCase()));  
167 -// }  
168 -// if (deviceDataReqVO.getName() != null) {  
169 -// thingModelList = filterList(thingModelList, thingModel -> thingModel.getName()  
170 -// .toLowerCase().contains(deviceDataReqVO.getName().toLowerCase()));  
171 -// }  
172 -// // 4. 获取设备属性最新数据  
173 -// thingModelList.forEach(thingModel -> {  
174 -// IotDevicePropertyDO deviceData = deviceDataRedisDAO.get(device.getProductKey(), device.getDeviceName(), thingModel.getIdentifier());  
175 -// if (deviceData == null) {  
176 -// deviceData = new IotDevicePropertyDO();  
177 -// deviceData.setProductKey(device.getProductKey());  
178 -// deviceData.setDeviceName(device.getDeviceName());  
179 -// deviceData.setIdentifier(thingModel.getIdentifier());  
180 -// deviceData.setDeviceId(deviceDataReqVO.getDeviceId());  
181 -// deviceData.setThingModelId(thingModel.getId());  
182 -// deviceData.setName(thingModel.getName());  
183 -// deviceData.setDataType(thingModel.getProperty().getDataType());  
184 -// }  
185 -// list.add(deviceData);  
186 -// });  
187 -// return list;  
188 - return null; // TODO 芋艿:晚点实现 154 + public Map<String, IotDevicePropertyDO> getLatestDeviceProperties(@Valid IotDeviceDataPageReqVO pageReqVO) {
  155 + // 获取设备信息
  156 + IotDeviceDO device = deviceService.validateDeviceExists(pageReqVO.getDeviceId());
  157 +
  158 + // 获得设备属性
  159 + return deviceDataRedisDAO.get(device.getDeviceKey());
189 } 160 }
190 161
191 @Override 162 @Override