Merge branch 'main' into hhk

plp
HuangHuiKang 5 days ago
commit 5d92f3cf9d

@ -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<List<Map<String, Object>>> getMultiDeviceAttributes(@RequestParam("deviceIds") String deviceIds) {
return success(deviceService.getMultiDeviceAttributes(deviceIds));
}

@ -135,4 +135,5 @@ public interface DeviceService {
DeviceOperationStatusRespVO getDeviceOperationalStatus();
List<Map<String, Object>> getMultiDeviceAttributes(String deviceIds);
}

@ -869,4 +869,69 @@ public class DeviceServiceImpl implements DeviceService {
String formattedRate = String.format("%.2f%%", faultRate);
statusVO.setFaultRate(formattedRate);
}
@Override
public List<Map<String, Object>> getMultiDeviceAttributes(String deviceIds) {
List<Map<String, Object>> result = new ArrayList<>();
// 解析设备ID列表
if (StringUtils.isBlank(deviceIds)) {
return result;
}
List<Long> 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<String, Object> deviceMap = new HashMap<>();
deviceMap.put("deviceId", deviceId);
deviceMap.put("deviceName", device.getDeviceName());
// 获取设备属性列表
List<DeviceContactModelDO> attributes = deviceContactModelMapper.selectList(
Wrappers.<DeviceContactModelDO>lambdaQuery()
.eq(DeviceContactModelDO::getDeviceId, deviceId));
// 获取设备最新数据
Map<Long, Map<String, Object>> deviceDataMap = createDeviceDataMap(deviceId);
// 创建点位集合
List<Map<String, Object>> attributeList = new ArrayList<>();
for (DeviceContactModelDO attribute : attributes) {
Map<String, Object> 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<String, Object> 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;
}
}

@ -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;
}

@ -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;
}

@ -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;
}

@ -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;
}

@ -25,7 +25,11 @@ public interface GoviewMapper extends BaseMapperX<GoviewDO> {
.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));
}

Loading…
Cancel
Save