feat:【IoT 物联网】设备属性返回,从分页变成列表
This commit is contained in:
@@ -3,10 +3,8 @@ package cn.iocoder.yudao.module.iot.controller.admin.device;
|
|||||||
import cn.hutool.core.collection.CollUtil;
|
import cn.hutool.core.collection.CollUtil;
|
||||||
import cn.hutool.core.date.LocalDateTimeUtil;
|
import cn.hutool.core.date.LocalDateTimeUtil;
|
||||||
import cn.hutool.core.lang.Assert;
|
import cn.hutool.core.lang.Assert;
|
||||||
import cn.hutool.core.util.StrUtil;
|
|
||||||
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
|
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
|
||||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
import cn.iocoder.yudao.module.iot.controller.admin.device.vo.data.IotDevicePropertyHistoryListReqVO;
|
||||||
import cn.iocoder.yudao.module.iot.controller.admin.device.vo.data.IotDevicePropertyHistoryPageReqVO;
|
|
||||||
import cn.iocoder.yudao.module.iot.controller.admin.device.vo.data.IotDevicePropertyRespVO;
|
import cn.iocoder.yudao.module.iot.controller.admin.device.vo.data.IotDevicePropertyRespVO;
|
||||||
import cn.iocoder.yudao.module.iot.dal.dataobject.device.IotDeviceDO;
|
import cn.iocoder.yudao.module.iot.dal.dataobject.device.IotDeviceDO;
|
||||||
import cn.iocoder.yudao.module.iot.dal.dataobject.device.IotDevicePropertyDO;
|
import cn.iocoder.yudao.module.iot.dal.dataobject.device.IotDevicePropertyDO;
|
||||||
@@ -16,7 +14,6 @@ import cn.iocoder.yudao.module.iot.service.device.property.IotDevicePropertyServ
|
|||||||
import cn.iocoder.yudao.module.iot.service.thingmodel.IotThingModelService;
|
import cn.iocoder.yudao.module.iot.service.thingmodel.IotThingModelService;
|
||||||
import io.swagger.v3.oas.annotations.Operation;
|
import io.swagger.v3.oas.annotations.Operation;
|
||||||
import io.swagger.v3.oas.annotations.Parameter;
|
import io.swagger.v3.oas.annotations.Parameter;
|
||||||
import io.swagger.v3.oas.annotations.Parameters;
|
|
||||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||||
import jakarta.annotation.Resource;
|
import jakarta.annotation.Resource;
|
||||||
import jakarta.validation.Valid;
|
import jakarta.validation.Valid;
|
||||||
@@ -46,18 +43,12 @@ public class IotDevicePropertyController {
|
|||||||
@Resource
|
@Resource
|
||||||
private IotDeviceService deviceService;
|
private IotDeviceService deviceService;
|
||||||
|
|
||||||
@GetMapping("/latest")
|
@GetMapping("/get-latest")
|
||||||
@Operation(summary = "获取设备属性最新属性")
|
@Operation(summary = "获取设备属性最新属性")
|
||||||
@Parameters({
|
@Parameter(name = "deviceId", description = "设备编号", required = true)
|
||||||
@Parameter(name = "deviceId", description = "设备编号", required = true),
|
|
||||||
@Parameter(name = "identifier", description = "标识符"),
|
|
||||||
@Parameter(name = "name", description = "名称")
|
|
||||||
})
|
|
||||||
@PreAuthorize("@ss.hasPermission('iot:device:property-query')")
|
@PreAuthorize("@ss.hasPermission('iot:device:property-query')")
|
||||||
public CommonResult<List<IotDevicePropertyRespVO>> getLatestDeviceProperties(
|
public CommonResult<List<IotDevicePropertyRespVO>> getLatestDeviceProperties(
|
||||||
@RequestParam("deviceId") Long deviceId,
|
@RequestParam("deviceId") Long deviceId) {
|
||||||
@RequestParam(value = "identifier", required = false) String identifier,
|
|
||||||
@RequestParam(value = "name", required = false) String name) {
|
|
||||||
Map<String, IotDevicePropertyDO> properties = devicePropertyService.getLatestDeviceProperties(deviceId);
|
Map<String, IotDevicePropertyDO> properties = devicePropertyService.getLatestDeviceProperties(deviceId);
|
||||||
|
|
||||||
// 拼接数据
|
// 拼接数据
|
||||||
@@ -70,12 +61,6 @@ public class IotDevicePropertyController {
|
|||||||
if (thingModel == null || thingModel.getProperty() == null) {
|
if (thingModel == null || thingModel.getProperty() == null) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
if (StrUtil.isNotEmpty(identifier) && !StrUtil.contains(thingModel.getIdentifier(), identifier)) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
if (StrUtil.isNotEmpty(name) && !StrUtil.contains(thingModel.getName(), name)) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
// 构建对象
|
// 构建对象
|
||||||
IotDevicePropertyDO property = entry.getValue();
|
IotDevicePropertyDO property = entry.getValue();
|
||||||
return new IotDevicePropertyRespVO().setProperty(thingModel.getProperty())
|
return new IotDevicePropertyRespVO().setProperty(thingModel.getProperty())
|
||||||
@@ -83,13 +68,12 @@ public class IotDevicePropertyController {
|
|||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
|
|
||||||
@GetMapping("/history-page")
|
@GetMapping("/history-list")
|
||||||
@Operation(summary = "获取设备属性历史数据")
|
@Operation(summary = "获取设备属性历史数据列表")
|
||||||
@PreAuthorize("@ss.hasPermission('iot:device:property-query')")
|
@PreAuthorize("@ss.hasPermission('iot:device:property-query')")
|
||||||
public CommonResult<PageResult<IotDevicePropertyRespVO>> getHistoryDevicePropertyPage(
|
public CommonResult<List<IotDevicePropertyRespVO>> getHistoryDevicePropertyList(
|
||||||
@Valid IotDevicePropertyHistoryPageReqVO pageReqVO) {
|
@Valid IotDevicePropertyHistoryListReqVO listReqVO) {
|
||||||
Assert.notEmpty(pageReqVO.getIdentifier(), "标识符不能为空");
|
return success(devicePropertyService.getHistoryDevicePropertyList(listReqVO));
|
||||||
return success(devicePropertyService.getHistoryDevicePropertyPage(pageReqVO));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -1,6 +1,5 @@
|
|||||||
package cn.iocoder.yudao.module.iot.controller.admin.device.vo.data;
|
package cn.iocoder.yudao.module.iot.controller.admin.device.vo.data;
|
||||||
|
|
||||||
import cn.iocoder.yudao.framework.common.pojo.PageParam;
|
|
||||||
import io.swagger.v3.oas.annotations.media.Schema;
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
import jakarta.validation.constraints.NotEmpty;
|
import jakarta.validation.constraints.NotEmpty;
|
||||||
import jakarta.validation.constraints.NotNull;
|
import jakarta.validation.constraints.NotNull;
|
||||||
@@ -12,9 +11,9 @@ import java.time.LocalDateTime;
|
|||||||
|
|
||||||
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
|
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
|
||||||
|
|
||||||
@Schema(description = "管理后台 - IoT 设备属性历史分页 Request VO")
|
@Schema(description = "管理后台 - IoT 设备属性历史列表 Request VO")
|
||||||
@Data
|
@Data
|
||||||
public class IotDevicePropertyHistoryPageReqVO extends PageParam {
|
public class IotDevicePropertyHistoryListReqVO {
|
||||||
|
|
||||||
@Schema(description = "设备编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "177")
|
@Schema(description = "设备编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "177")
|
||||||
@NotNull(message = "设备编号不能为空")
|
@NotNull(message = "设备编号不能为空")
|
||||||
@@ -29,4 +28,4 @@ public class IotDevicePropertyHistoryPageReqVO extends PageParam {
|
|||||||
@Size(min = 2, max = 2, message = "请选择时间范围")
|
@Size(min = 2, max = 2, message = "请选择时间范围")
|
||||||
private LocalDateTime[] times;
|
private LocalDateTime[] times;
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -3,7 +3,7 @@ package cn.iocoder.yudao.module.iot.dal.tdengine;
|
|||||||
import cn.hutool.core.collection.CollUtil;
|
import cn.hutool.core.collection.CollUtil;
|
||||||
import cn.hutool.core.util.ObjectUtil;
|
import cn.hutool.core.util.ObjectUtil;
|
||||||
import cn.hutool.core.util.StrUtil;
|
import cn.hutool.core.util.StrUtil;
|
||||||
import cn.iocoder.yudao.module.iot.controller.admin.device.vo.data.IotDevicePropertyHistoryPageReqVO;
|
import cn.iocoder.yudao.module.iot.controller.admin.device.vo.data.IotDevicePropertyHistoryListReqVO;
|
||||||
import cn.iocoder.yudao.module.iot.controller.admin.device.vo.data.IotDevicePropertyRespVO;
|
import cn.iocoder.yudao.module.iot.controller.admin.device.vo.data.IotDevicePropertyRespVO;
|
||||||
import cn.iocoder.yudao.module.iot.dal.dataobject.device.IotDeviceDO;
|
import cn.iocoder.yudao.module.iot.dal.dataobject.device.IotDeviceDO;
|
||||||
import cn.iocoder.yudao.module.iot.framework.tdengine.core.TDengineTableField;
|
import cn.iocoder.yudao.module.iot.framework.tdengine.core.TDengineTableField;
|
||||||
@@ -84,7 +84,6 @@ public interface IotDevicePropertyMapper {
|
|||||||
@Param("properties") Map<String, Object> properties,
|
@Param("properties") Map<String, Object> properties,
|
||||||
@Param("reportTime") Long reportTime);
|
@Param("reportTime") Long reportTime);
|
||||||
|
|
||||||
IPage<IotDevicePropertyRespVO> selectPageByHistory(IPage<?> page,
|
List<IotDevicePropertyRespVO> selectListByHistory(@Param("reqVO") IotDevicePropertyHistoryListReqVO reqVO);
|
||||||
@Param("reqVO") IotDevicePropertyHistoryPageReqVO reqVO);
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
package cn.iocoder.yudao.module.iot.service.device.property;
|
package cn.iocoder.yudao.module.iot.service.device.property;
|
||||||
|
|
||||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||||
import cn.iocoder.yudao.module.iot.controller.admin.device.vo.data.IotDevicePropertyHistoryPageReqVO;
|
import cn.iocoder.yudao.module.iot.controller.admin.device.vo.data.IotDevicePropertyHistoryListReqVO;
|
||||||
import cn.iocoder.yudao.module.iot.controller.admin.device.vo.data.IotDevicePropertyRespVO;
|
import cn.iocoder.yudao.module.iot.controller.admin.device.vo.data.IotDevicePropertyRespVO;
|
||||||
import cn.iocoder.yudao.module.iot.core.mq.message.IotDeviceMessage;
|
import cn.iocoder.yudao.module.iot.core.mq.message.IotDeviceMessage;
|
||||||
import cn.iocoder.yudao.module.iot.dal.dataobject.device.IotDeviceDO;
|
import cn.iocoder.yudao.module.iot.dal.dataobject.device.IotDeviceDO;
|
||||||
@@ -9,6 +9,7 @@ import cn.iocoder.yudao.module.iot.dal.dataobject.device.IotDevicePropertyDO;
|
|||||||
import jakarta.validation.Valid;
|
import jakarta.validation.Valid;
|
||||||
|
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
@@ -47,10 +48,10 @@ public interface IotDevicePropertyService {
|
|||||||
/**
|
/**
|
||||||
* 获得设备属性历史数据
|
* 获得设备属性历史数据
|
||||||
*
|
*
|
||||||
* @param pageReqVO 分页请求
|
* @param listReqVO 列表请求
|
||||||
* @return 设备属性历史数据
|
* @return 设备属性历史数据
|
||||||
*/
|
*/
|
||||||
PageResult<IotDevicePropertyRespVO> getHistoryDevicePropertyPage(@Valid IotDevicePropertyHistoryPageReqVO pageReqVO);
|
List<IotDevicePropertyRespVO> getHistoryDevicePropertyList(@Valid IotDevicePropertyHistoryListReqVO listReqVO);
|
||||||
|
|
||||||
// ========== 设备时间相关操作 ==========
|
// ========== 设备时间相关操作 ==========
|
||||||
|
|
||||||
|
|||||||
@@ -4,8 +4,7 @@ import cn.hutool.core.collection.CollUtil;
|
|||||||
import cn.hutool.core.date.LocalDateTimeUtil;
|
import cn.hutool.core.date.LocalDateTimeUtil;
|
||||||
import cn.hutool.core.map.MapUtil;
|
import cn.hutool.core.map.MapUtil;
|
||||||
import cn.hutool.core.util.StrUtil;
|
import cn.hutool.core.util.StrUtil;
|
||||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
import cn.iocoder.yudao.module.iot.controller.admin.device.vo.data.IotDevicePropertyHistoryListReqVO;
|
||||||
import cn.iocoder.yudao.module.iot.controller.admin.device.vo.data.IotDevicePropertyHistoryPageReqVO;
|
|
||||||
import cn.iocoder.yudao.module.iot.controller.admin.device.vo.data.IotDevicePropertyRespVO;
|
import cn.iocoder.yudao.module.iot.controller.admin.device.vo.data.IotDevicePropertyRespVO;
|
||||||
import cn.iocoder.yudao.module.iot.controller.admin.thingmodel.model.dataType.ThingModelDateOrTextDataSpecs;
|
import cn.iocoder.yudao.module.iot.controller.admin.thingmodel.model.dataType.ThingModelDateOrTextDataSpecs;
|
||||||
import cn.iocoder.yudao.module.iot.core.mq.message.IotDeviceMessage;
|
import cn.iocoder.yudao.module.iot.core.mq.message.IotDeviceMessage;
|
||||||
@@ -22,8 +21,6 @@ import cn.iocoder.yudao.module.iot.enums.thingmodel.IotThingModelTypeEnum;
|
|||||||
import cn.iocoder.yudao.module.iot.framework.tdengine.core.TDengineTableField;
|
import cn.iocoder.yudao.module.iot.framework.tdengine.core.TDengineTableField;
|
||||||
import cn.iocoder.yudao.module.iot.service.product.IotProductService;
|
import cn.iocoder.yudao.module.iot.service.product.IotProductService;
|
||||||
import cn.iocoder.yudao.module.iot.service.thingmodel.IotThingModelService;
|
import cn.iocoder.yudao.module.iot.service.thingmodel.IotThingModelService;
|
||||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
|
||||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
||||||
import jakarta.annotation.Resource;
|
import jakarta.annotation.Resource;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.springframework.scheduling.annotation.Async;
|
import org.springframework.scheduling.annotation.Async;
|
||||||
@@ -157,14 +154,12 @@ public class IotDevicePropertyServiceImpl implements IotDevicePropertyService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public PageResult<IotDevicePropertyRespVO> getHistoryDevicePropertyPage(IotDevicePropertyHistoryPageReqVO pageReqVO) {
|
public List<IotDevicePropertyRespVO> getHistoryDevicePropertyList(IotDevicePropertyHistoryListReqVO listReqVO) {
|
||||||
try {
|
try {
|
||||||
IPage<IotDevicePropertyRespVO> page = devicePropertyMapper.selectPageByHistory(
|
return devicePropertyMapper.selectListByHistory(listReqVO);
|
||||||
new Page<>(pageReqVO.getPageNo(), pageReqVO.getPageSize()), pageReqVO);
|
|
||||||
return new PageResult<>(page.getRecords(), page.getTotal());
|
|
||||||
} catch (Exception exception) {
|
} catch (Exception exception) {
|
||||||
if (exception.getMessage().contains("Table does not exist")) {
|
if (exception.getMessage().contains("Table does not exist")) {
|
||||||
return PageResult.empty();
|
return Collections.emptyList();
|
||||||
}
|
}
|
||||||
throw exception;
|
throw exception;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -66,15 +66,14 @@
|
|||||||
DESCRIBE product_property_${productId}
|
DESCRIBE product_property_${productId}
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
<!-- TODO @芋艿:这里查询有点问题 -->
|
<select id="selectListByHistory"
|
||||||
<select id="selectPageByHistory"
|
|
||||||
resultType="cn.iocoder.yudao.module.iot.controller.admin.device.vo.data.IotDevicePropertyRespVO">
|
resultType="cn.iocoder.yudao.module.iot.controller.admin.device.vo.data.IotDevicePropertyRespVO">
|
||||||
SELECT ${@cn.hutool.core.util.StrUtil@toUnderlineCase(reqVO.identifier)} AS `value`, ts AS update_time
|
SELECT ${@cn.hutool.core.util.StrUtil@toUnderlineCase(reqVO.identifier)} AS `value`, ts AS update_time
|
||||||
FROM device_property_${reqVO.deviceId}
|
FROM device_property_${reqVO.deviceId}
|
||||||
WHERE ${@cn.hutool.core.util.StrUtil@toUnderlineCase(reqVO.identifier)} IS NOT NULL
|
WHERE ${@cn.hutool.core.util.StrUtil@toUnderlineCase(reqVO.identifier)} IS NOT NULL
|
||||||
AND ts BETWEEN ${@cn.hutool.core.date.LocalDateTimeUtil@toEpochMilli(reqVO.times[0])}
|
AND ts BETWEEN ${@cn.hutool.core.date.LocalDateTimeUtil@toEpochMilli(reqVO.times[0])}
|
||||||
AND ${@cn.hutool.core.date.LocalDateTimeUtil@toEpochMilli(reqVO.times[1])}
|
AND ${@cn.hutool.core.date.LocalDateTimeUtil@toEpochMilli(reqVO.times[1])}
|
||||||
ORDER BY ts DESC
|
ORDER BY ts ASC
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
</mapper>
|
</mapper>
|
||||||
Reference in New Issue
Block a user