diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/device/DeviceController.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/device/DeviceController.java index 8701134dd5..eb4430162f 100644 --- a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/device/DeviceController.java +++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/device/DeviceController.java @@ -262,6 +262,14 @@ public class DeviceController { return success(deviceService.scheduledStop(id)); } + @GetMapping("/device-attribute/batchList") + @Operation(summary = "获得多个设备的属性数据") + @Parameter(name = "deviceIds", description = "设备ID列表,用逗号分隔", required = true) + @PreAuthorize("@ss.hasPermission('iot:device:query')") + public CommonResult>> getMultiDeviceAttributes(@RequestParam("deviceIds") String deviceIds) { + return success(deviceService.getMultiDeviceAttributes(deviceIds)); + } + diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/device/DeviceService.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/device/DeviceService.java index 1322f9f7a0..02e04e3f58 100644 --- a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/device/DeviceService.java +++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/device/DeviceService.java @@ -135,4 +135,5 @@ public interface DeviceService { DeviceOperationStatusRespVO getDeviceOperationalStatus(); + List> getMultiDeviceAttributes(String deviceIds); } \ No newline at end of file diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/device/DeviceServiceImpl.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/device/DeviceServiceImpl.java index 452eb97779..af0ebe1d1c 100644 --- a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/device/DeviceServiceImpl.java +++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/device/DeviceServiceImpl.java @@ -869,4 +869,69 @@ public class DeviceServiceImpl implements DeviceService { String formattedRate = String.format("%.2f%%", faultRate); statusVO.setFaultRate(formattedRate); } + + @Override + public List> getMultiDeviceAttributes(String deviceIds) { + List> result = new ArrayList<>(); + + // 解析设备ID列表 + if (StringUtils.isBlank(deviceIds)) { + return result; + } + + List idList = Arrays.stream(deviceIds.split(",")) + .map(String::trim) + .map(Long::valueOf) + .collect(Collectors.toList()); + + // 遍历每个设备ID,获取设备属性数据 + for (Long deviceId : idList) { + // 获取设备信息 + DeviceDO device = deviceMapper.selectById(deviceId); + if (device == null) { + continue; + } + + // 创建设备层级的Map + Map deviceMap = new HashMap<>(); + deviceMap.put("deviceId", deviceId); + deviceMap.put("deviceName", device.getDeviceName()); + + // 获取设备属性列表 + List attributes = deviceContactModelMapper.selectList( + Wrappers.lambdaQuery() + .eq(DeviceContactModelDO::getDeviceId, deviceId)); + + // 获取设备最新数据 + Map> deviceDataMap = createDeviceDataMap(deviceId); + + // 创建点位集合 + List> attributeList = new ArrayList<>(); + for (DeviceContactModelDO attribute : attributes) { + Map attributeData = new HashMap<>(); + attributeData.put("attributeId", attribute.getId()); + attributeData.put("attributeName", attribute.getAttributeName()); + attributeData.put("attributeCode", attribute.getAttributeCode()); + attributeData.put("dataType", attribute.getDataType()); + attributeData.put("dataUnit", attribute.getDataUnit()); + + // 获取最新数据 + Map latestData = deviceDataMap.get(attribute.getId()); + if (latestData != null) { + attributeData.put("addressValue", adjustByRatio(latestData.get("addressValue"), attribute.getRatio())); + attributeData.put("latestCollectionTime", latestData.get("timestamp")); + } + + attributeList.add(attributeData); + } + + // 将点位集合添加到设备层级 + deviceMap.put("attributes", attributeList); + + // 添加到结果列表 + result.add(deviceMap); + } + + return result; + } } \ No newline at end of file diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/goview/vo/GoviewPageReqVO.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/goview/vo/GoviewPageReqVO.java index badaf29577..345058ef8b 100644 --- a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/goview/vo/GoviewPageReqVO.java +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/goview/vo/GoviewPageReqVO.java @@ -1,5 +1,8 @@ package cn.iocoder.yudao.module.mes.controller.admin.goview.vo; +import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat; +import cn.iocoder.yudao.framework.excel.core.convert.DictConvert; +import com.alibaba.excel.annotation.ExcelProperty; import lombok.*; import java.util.*; import io.swagger.v3.oas.annotations.media.Schema; @@ -37,4 +40,16 @@ public class GoviewPageReqVO extends PageParam { @Schema(description = "内容") private String content; + @Schema(description = "产线ID") + private Long orgId; + + @Schema(description = "产线名称") + private String orgName; + + @Schema(description = "大屏类型") + private String type; + + @Schema(description = "设备ids") + private String deviceIds; + } \ No newline at end of file diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/goview/vo/GoviewRespVO.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/goview/vo/GoviewRespVO.java index 727ab9cc21..5c8b6ebbdd 100644 --- a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/goview/vo/GoviewRespVO.java +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/goview/vo/GoviewRespVO.java @@ -1,5 +1,7 @@ package cn.iocoder.yudao.module.mes.controller.admin.goview.vo; +import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat; +import cn.iocoder.yudao.framework.excel.core.convert.DictConvert; import io.swagger.v3.oas.annotations.media.Schema; import lombok.*; import java.util.*; @@ -44,4 +46,21 @@ public class GoviewRespVO { @ExcelProperty("内容") private String content; + @Schema(description = "产线ID") + @ExcelProperty("产线ID") + private Long orgId; + + @Schema(description = "产线名称") + @ExcelProperty("产线名称") + private String orgName; + + @Schema(description = "大屏类型") + @ExcelProperty(value="大屏类型", converter = DictConvert.class) + @DictFormat("mes_goview_type") + private String type; + + @Schema(description = "设备ids") + @ExcelProperty("设备ids") + private String deviceIds; + } \ No newline at end of file diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/goview/vo/GoviewSaveReqVO.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/goview/vo/GoviewSaveReqVO.java index 8f659c22dc..89f046c589 100644 --- a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/goview/vo/GoviewSaveReqVO.java +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/goview/vo/GoviewSaveReqVO.java @@ -30,4 +30,16 @@ public class GoviewSaveReqVO { @Schema(description = "内容") private String content; + @Schema(description = "产线ID") + private Long orgId; + + @Schema(description = "产线名称") + private String orgName; + + @Schema(description = "大屏类型") + private String type; + + @Schema(description = "设备ids") + private String deviceIds; + } \ No newline at end of file diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/goview/GoviewDO.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/goview/GoviewDO.java index 69bd2918ec..a31c54ffc2 100644 --- a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/goview/GoviewDO.java +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/goview/GoviewDO.java @@ -51,5 +51,21 @@ public class GoviewDO extends BaseDO { * 内容 */ private String content; + /** + * 产线ID + */ + private Long orgId; + /** + * 产线名称 + */ + private String orgName; + /** + * 大屏类型 + */ + private String type; + /** + * 设备ids + */ + private String deviceIds; } \ No newline at end of file diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/goview/GoviewMapper.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/goview/GoviewMapper.java index 40b5612a6d..8497b47d46 100644 --- a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/goview/GoviewMapper.java +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/goview/GoviewMapper.java @@ -25,7 +25,11 @@ public interface GoviewMapper extends BaseMapperX { .eqIfPresent(GoviewDO::getIndexImage, reqVO.getIndexImage()) .eqIfPresent(GoviewDO::getRoute, reqVO.getRoute()) .betweenIfPresent(GoviewDO::getCreateTime, reqVO.getCreateTime()) - .eqIfPresent(GoviewDO::getContent, reqVO.getContent()) + .likeIfPresent(GoviewDO::getContent, reqVO.getContent()) + .eqIfPresent(GoviewDO::getOrgId, reqVO.getOrgId()) + .likeIfPresent(GoviewDO::getOrgName, reqVO.getOrgName()) + .eqIfPresent(GoviewDO::getType, reqVO.getType()) + .eqIfPresent(GoviewDO::getDeviceIds, reqVO.getDeviceIds()) .orderByDesc(GoviewDO::getId)); }