交换机数据采集唯一标识改为clientId。
优化收益计算
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置网卡信息公共字段
|
||||
|
||||
Reference in New Issue
Block a user