From dd492aab710992372420d8a58bf46a3377c1c8bc Mon Sep 17 00:00:00 2001 From: "zhczyx@163.com" Date: Thu, 1 Jan 2026 22:09:06 +0800 Subject: [PATCH] =?UTF-8?q?=E8=AE=BE=E5=A4=87=E6=89=B9=E9=87=8F=E5=AF=BC?= =?UTF-8?q?=E5=85=A5=E7=9A=84=E6=97=B6=E5=80=99=EF=BC=8C=E9=92=88=E5=AF=B9?= =?UTF-8?q?=E6=B0=B8=E6=97=BAioserver=E7=9A=84=E8=AE=BE=E5=A4=87=EF=BC=8C?= =?UTF-8?q?=E5=A6=82=E6=9E=9C=E4=B8=8D=E8=AE=BE=E7=BD=AE=E7=B1=BB=E5=88=AB?= =?UTF-8?q?=EF=BC=8C=E4=B9=9F=E5=8F=AF=E4=BB=A5=E8=87=AA=E5=8A=A8=E5=AF=BC?= =?UTF-8?q?=E5=85=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dao/ex/DeviceConfigInfoExtMapper.java | 2 + .../mappers/ex/DeviceConfigInfoExtMapper.xml | 11 ++ .../ioserver/IoserverDeviceIdEntity.java | 110 ++++++++++++++++++ .../business/vo/device/DeviceVO.java | 3 +- .../service/impl/DeviceServiceImpl.java | 46 +++++--- 5 files changed, 155 insertions(+), 17 deletions(-) create mode 100644 data-center-business-model/src/main/java/com/techsor/datacenter/business/entity/ioserver/IoserverDeviceIdEntity.java diff --git a/data-center-business-dao/src/main/java/com/techsor/datacenter/business/dao/ex/DeviceConfigInfoExtMapper.java b/data-center-business-dao/src/main/java/com/techsor/datacenter/business/dao/ex/DeviceConfigInfoExtMapper.java index 0021c09..bdebd2b 100644 --- a/data-center-business-dao/src/main/java/com/techsor/datacenter/business/dao/ex/DeviceConfigInfoExtMapper.java +++ b/data-center-business-dao/src/main/java/com/techsor/datacenter/business/dao/ex/DeviceConfigInfoExtMapper.java @@ -14,6 +14,8 @@ public interface DeviceConfigInfoExtMapper extends DeviceConfigInfoMapper { List getListPage(DeviceConfigSearchParams pageSearchParam); + List getAll(); + List getDeviceCategoryListByTypeName(String deviceTypeName, Long companyId); DeviceConfigVO selectByDeviceId(String deviceId); diff --git a/data-center-business-dao/src/main/resources/mappers/ex/DeviceConfigInfoExtMapper.xml b/data-center-business-dao/src/main/resources/mappers/ex/DeviceConfigInfoExtMapper.xml index 56f62e5..32c3b3b 100644 --- a/data-center-business-dao/src/main/resources/mappers/ex/DeviceConfigInfoExtMapper.xml +++ b/data-center-business-dao/src/main/resources/mappers/ex/DeviceConfigInfoExtMapper.xml @@ -48,4 +48,15 @@ + + diff --git a/data-center-business-model/src/main/java/com/techsor/datacenter/business/entity/ioserver/IoserverDeviceIdEntity.java b/data-center-business-model/src/main/java/com/techsor/datacenter/business/entity/ioserver/IoserverDeviceIdEntity.java new file mode 100644 index 0000000..617c858 --- /dev/null +++ b/data-center-business-model/src/main/java/com/techsor/datacenter/business/entity/ioserver/IoserverDeviceIdEntity.java @@ -0,0 +1,110 @@ +package com.techsor.datacenter.business.entity.ioserver; + +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +public class IoserverDeviceIdEntity { + // 定义正则表达式模式 + private static final String DEVICE_ID_PATTERN = "^([A-Z]+)_([A-Z]+)_(\\d{4})_(\\w+)_(\\d+)(?:_S)?$"; + private static final Pattern PATTERN = Pattern.compile(DEVICE_ID_PATTERN); + + /** + * 解析设备ID格式 + * 格式: [物件Initial]_[设备分类]_[BA Device Instance]_[ObjectType, Instance]_[Property][_S(sub, 备份用)] + */ + public static DeviceInfo parseDeviceId(String deviceId) { + if (deviceId == null) { + return null; + } + + Matcher matcher = PATTERN.matcher(deviceId); + if (!matcher.matches()) { + return null; + } + + String[] groups = new String[matcher.groupCount()]; + for (int i = 0; i < groups.length; i++) { + groups[i] = matcher.group(i + 1); + } + + DeviceInfo info = new DeviceInfo(); + info.setObjectInitial(groups[0]); + info.setDeviceCategory(groups[1]); + info.setBaDeviceInstance(groups[2]); + info.setObjectTypeInstance(groups[3]); + info.setProperty(groups[4]); + info.setHasBackup(deviceId.endsWith("_S")); + + return info; + } + + /** + * 验证设备ID格式是否正确 + */ + public static boolean isValidFormat(String deviceId) { + if (deviceId == null) { + return false; + } + return PATTERN.matcher(deviceId).matches(); + } + + /** + * 批量验证和解析设备ID + */ + public static void validateAndParse(String[] deviceIds) { + System.out.println("设备ID格式验证结果:"); + System.out.println("=" + "=".repeat(80)); + + for (String deviceId : deviceIds) { + DeviceInfo info = parseDeviceId(deviceId); + if (info != null) { + System.out.printf("✓ %-30s - 格式正确\n", deviceId); + System.out.println(" - 物件Initial: " + info.getObjectInitial()); + System.out.println(" - 设备分类: " + info.getDeviceCategory()); + System.out.println(" - BA Device Instance: " + info.getBaDeviceInstance()); + System.out.println(" - ObjectType, Instance: " + info.getObjectTypeInstance()); + System.out.println(" - Property: " + info.getProperty()); + System.out.println(" - 是否备份: " + (info.isHasBackup() ? "是" : "否")); + System.out.println(); + } else { + System.out.printf("✗ %-30s - 格式错误\n", deviceId); + System.out.println(); + } + } + } + + // 设备信息类 + public static class DeviceInfo { + private String objectInitial; + private String deviceCategory; + private String baDeviceInstance; + private String objectTypeInstance; + private String property; + private boolean hasBackup; + + // Getters and Setters + public String getObjectInitial() { return objectInitial; } + public void setObjectInitial(String objectInitial) { this.objectInitial = objectInitial; } + + public String getDeviceCategory() { return deviceCategory; } + public void setDeviceCategory(String deviceCategory) { this.deviceCategory = deviceCategory; } + + public String getBaDeviceInstance() { return baDeviceInstance; } + public void setBaDeviceInstance(String baDeviceInstance) { this.baDeviceInstance = baDeviceInstance; } + + public String getObjectTypeInstance() { return objectTypeInstance; } + public void setObjectTypeInstance(String objectTypeInstance) { this.objectTypeInstance = objectTypeInstance; } + + public String getProperty() { return property; } + public void setProperty(String property) { this.property = property; } + + public boolean isHasBackup() { return hasBackup; } + public void setHasBackup(boolean hasBackup) { this.hasBackup = hasBackup; } + + @Override + public String toString() { + return String.format("DeviceInfo{物件Initial='%s', 设备分类='%s', BA Device Instance='%s', ObjectType_Instance='%s', Property='%s', 备份=%s}", + objectInitial, deviceCategory, baDeviceInstance, objectTypeInstance, property, hasBackup); + } + } +} diff --git a/data-center-business-model/src/main/java/com/techsor/datacenter/business/vo/device/DeviceVO.java b/data-center-business-model/src/main/java/com/techsor/datacenter/business/vo/device/DeviceVO.java index 0ce7ba8..635370f 100644 --- a/data-center-business-model/src/main/java/com/techsor/datacenter/business/vo/device/DeviceVO.java +++ b/data-center-business-model/src/main/java/com/techsor/datacenter/business/vo/device/DeviceVO.java @@ -44,7 +44,8 @@ public class DeviceVO { private Long typeId; private Long categoryId; - private Long categoryName; + + private String categoryName; private String typeName; diff --git a/data-center-business-service/src/main/java/com/techsor/datacenter/business/service/impl/DeviceServiceImpl.java b/data-center-business-service/src/main/java/com/techsor/datacenter/business/service/impl/DeviceServiceImpl.java index cf8d3c9..7bbf007 100644 --- a/data-center-business-service/src/main/java/com/techsor/datacenter/business/service/impl/DeviceServiceImpl.java +++ b/data-center-business-service/src/main/java/com/techsor/datacenter/business/service/impl/DeviceServiceImpl.java @@ -37,6 +37,7 @@ import com.techsor.datacenter.business.dto.device.forward.DeviceForwardBatchPara import com.techsor.datacenter.business.dto.device.forward.DeviceForwardQueryParams; import com.techsor.datacenter.business.dto.device.forward.DeviceForwardRemoveParmas; import com.techsor.datacenter.business.dto.devicegroup.DeviceGroupSearchParams; +import com.techsor.datacenter.business.entity.ioserver.IoserverDeviceIdEntity; import com.techsor.datacenter.business.importexcel.deviceAlertInfo.DeviceAlertInfoExcel; import com.techsor.datacenter.business.importexcel.deviceinfo.AlarmLevelMapping; import com.techsor.datacenter.business.importexcel.deviceinfo.DeviceGroupRelationExcel; @@ -57,11 +58,7 @@ import com.techsor.datacenter.business.util.entity.AlertContentExtractParams; import com.techsor.datacenter.business.util.redis.RedisUtil; import com.techsor.datacenter.business.vo.company.ApikeyInfo2; import com.techsor.datacenter.business.vo.data.AuroraDataVO; -import com.techsor.datacenter.business.vo.device.DeviceAlertCsvVO; -import com.techsor.datacenter.business.vo.device.DeviceInfoCsvVO; -import com.techsor.datacenter.business.vo.device.DeviceVO; -import com.techsor.datacenter.business.vo.device.LambdaEmailResult; -import com.techsor.datacenter.business.vo.device.MonitoringPointCategoryVO; +import com.techsor.datacenter.business.vo.device.*; import com.techsor.datacenter.business.vo.device.alert.DeviceAlertConfigVO; import com.techsor.datacenter.business.vo.device.forward.DeviceForwardConfigVO; import com.techsor.datacenter.business.vo.devicegroup.DeviceGroupPageVO; @@ -141,6 +138,9 @@ public class DeviceServiceImpl implements IDeviceService { @Resource private BasicFloorMapperExt basicFloorMapperExt; + @Resource + private DeviceConfigInfoExtMapper deviceTypeExtMapper; + @Resource private BasicSpaceMapperExt basicSpaceMapperExt; @@ -804,6 +804,8 @@ public class DeviceServiceImpl implements IDeviceService { Map deviceGroupMapping = deviceGroupList.stream() .collect(Collectors.toMap(DeviceGroup::getName, item -> item)); + //Prepare all device type list for futher checks + List allDeviceTypeList = deviceTypeExtMapper.getAll(); List targetFowardCodeIdListCache = new ArrayList<>(); for (int dataIndex=0; dataIndex allDeviceTypeList, DeviceInfoExcel deviceInfoExcel,String deviceType, long companyId) { + IoserverDeviceIdEntity.DeviceInfo baseDeviceInfo = IoserverDeviceIdEntity.parseDeviceId(deviceInfoExcel.getDeviceId()); + // Return false if not enter type and deviceInfo is null(Means it's not valid eaon's ioserver device, so we cannot auto fill the type) + if (StringUtils.isBlank(deviceType) && baseDeviceInfo == null) { + return false; + }else if (StringUtils.isBlank(deviceType)){ + // If DeviceType is blank but device is eaon's ioserver device,auto fill the type + for (DeviceConfigVO deviceConfigInfo : allDeviceTypeList) { + if (deviceConfigInfo.getName().contains(baseDeviceInfo.getProperty()) && deviceConfigInfo.getName().contains(baseDeviceInfo.getDeviceCategory())) { + deviceInfoExcel.setDeviceType(deviceConfigInfo.getName()); + return true; + } + } + } + + //If deviceType not blank, check if it exists in the database + DeviceConfigInfoExample deviceConfigInfoExample = new DeviceConfigInfoExample(); + deviceConfigInfoExample.createCriteria().andNameEqualTo(deviceType); + List deviceConfigInfoList = this.deviceConfigInfoExtMapper.selectByExample(deviceConfigInfoExample); + if (CollectionUtils.isEmpty(deviceConfigInfoList)) { return false; } else { - DeviceConfigInfoExample deviceConfigInfoExample = new DeviceConfigInfoExample(); - deviceConfigInfoExample.createCriteria().andNameEqualTo(deviceType); - List deviceConfigInfoList = this.deviceConfigInfoExtMapper.selectByExample(deviceConfigInfoExample); - if (CollectionUtils.isEmpty(deviceConfigInfoList)) { - return false; - } else { - return true; - } + return true; } + } private Integer checkWsClientId(String wsClientId, long companyId) {