交换机数据采集唯一标识改为clientId。

优化收益计算
This commit is contained in:
gaoyutao
2026-01-05 18:32:49 +08:00
parent 2593c58741
commit a2659d0c6b
4 changed files with 106 additions and 172 deletions
@@ -635,7 +635,8 @@ public class MessageHandler {
"systemSwArchCollect",
"systemSwOsCollect",
"systemUnameCollect",
"systemUptimeCollect"
"systemUptimeCollect",
"procNumCollect"
);
// 如果collectType在特殊列表中,先删除上个时间段的记录
@@ -1132,21 +1133,36 @@ public class MessageHandler {
}
boolean isSingleInterface = networkInfoList.size() == 1;
boolean isMultiInterface = networkInfoList.size() > 1;
// 查询数据库中当前的网卡数量
RmNetworkInterface countQuery = new RmNetworkInterface();
countQuery.setClientId(clientId);
countQuery.setNewFlag(1);
List<RmNetworkInterface> currentInterfaces = rmNetworkInterfaceService.selectRmNetworkInterfaceList(countQuery);
int currentInterfaceCount = currentInterfaces.size();
// 构建数据库中当前网卡MAC地址的集合
Set<String> currentMacSet = currentInterfaces.stream()
.map(RmNetworkInterface::getMacAddress)
.collect(Collectors.toSet());
// 构建新数据中网卡MAC地址的集合
Set<String> newMacSet = networkInfoList.stream()
.map(NetworkInfo::getMac)
.filter(Objects::nonNull)
.collect(Collectors.toSet());
// 找出需要删除的网卡(数据库中有但新数据中没有的)
Set<String> macsToDelete = new HashSet<>(currentMacSet);
macsToDelete.removeAll(newMacSet);
int currentInterfaceCount = currentInterfaces.size();
// 判断网卡数量是否发生变化
boolean interfaceCountChanged = false;
if (!isRegister && currentInterfaceCount != networkInfoList.size()) {
interfaceCountChanged = true;
}
// 执行删除操作
if (!macsToDelete.isEmpty() && !isRegister) {
deleteNetworkInterfaces(clientId, macsToDelete);
}
for (NetworkInfo networkInfo : networkInfoList) {
List<NetworkInfo> childList = networkInfo.getSubInterfaces();
// 查询该网卡信息是否存在
@@ -1179,7 +1195,7 @@ public class MessageHandler {
}
}
// 如果网卡数量有变动,需要更新网卡绑定状态
if (!isRegister && interfaceCountChanged) {
if (!isRegister && interfaceCountChanged && !isSingleInterface) {
RmResourceRegistrationRemote updateParam = new RmResourceRegistrationRemote();
updateParam.setClientId(clientId);
updateParam.setMultiPublicIpStatus("0");
@@ -1188,7 +1204,7 @@ public class MessageHandler {
} else {
// 更新网卡信息
RmNetworkInterface oldInterfaceMsg = exits.get(0);
cleanChildOldRecords(clientId, networkInfo.getMac());
// cleanChildOldRecords(clientId, networkInfo.getMac());
// 判断是否需要创建新记录
boolean needCreateNew = (!StringUtils.equals(networkInfo.getName(), oldInterfaceMsg.getInterfaceName())
|| !StringUtils.equals(networkInfo.getGateway(), oldInterfaceMsg.getGateway())) && StringUtils.equals(networkInfo.getMac(), oldInterfaceMsg.getMacAddress());
@@ -1200,35 +1216,33 @@ public class MessageHandler {
rmNetworkInterfaceChildService.insertRmNetworkInterfaceChild(insertChild);
}
}
if(needCreateNew) {
// 清理旧的历史数据
cleanOldRecords(clientId, networkInfo.getMac());
// 将已存在的记录标记为旧数据
RmNetworkInterface oldData = new RmNetworkInterface();
oldData.setNewFlag(0);
oldData.setClientId(clientId);
oldData.setMacAddress(oldInterfaceMsg.getMacAddress());
rmNetworkInterfaceService.updateRmNetworkInterfaceByMac(oldData);
// 创建新记录
RmNetworkInterface insertData = new RmNetworkInterface();
setNetworkInterfaceData(insertData, networkInfo, clientId);
rmNetworkInterfaceService.insertRmNetworkInterface(insertData);
// 如果网卡名称有变化,需要更新网卡绑定状态
if(!isRegister && !StringUtils.equals(networkInfo.getName(), oldInterfaceMsg.getInterfaceName())){
RmResourceRegistrationRemote updateParam = new RmResourceRegistrationRemote();
updateParam.setClientId(clientId);
updateParam.setMultiPublicIpStatus("0");
remoteRevenueConfigService.updateStatusByResource(updateParam, SecurityConstants.INNER);
}
} else {
// 更新现有记录
updateNetworkInterface(networkInfo, clientId, oldInterfaceMsg, isSingleInterface, isRegister);
}
// 更新现有记录
updateNetworkInterface(networkInfo, clientId, oldInterfaceMsg, isSingleInterface, isRegister);
}
}
}
/**
* 删除过时的网卡信息
* @param clientId 客户端ID
* @param macsToDelete 需要删除的MAC地址集合
*/
private void deleteNetworkInterfaces(String clientId, Set<String> macsToDelete) {
for (String macAddress : macsToDelete) {
RmNetworkInterface query = new RmNetworkInterface();
query.setClientId(clientId);
query.setMacAddress(macAddress);
query.setNewFlag(1);
List<RmNetworkInterface> oldExits = rmNetworkInterfaceService.selectRmNetworkInterfaceList(query);
if(!oldExits.isEmpty()) {
oldExits.forEach(oldMsg -> {
rmNetworkInterfaceService.deleteRmNetworkInterfaceById(oldMsg.getId());
});
}
}
// 记录删除操作日志
log.info("删除客户端 {} 的过时网卡信息,MAC地址: {}", clientId, macsToDelete);
}
/**
* 设置网卡信息公共字段