1、优化服务器管理列表运营商、省、ip展示。

2、服务器管理列表搜索条件增加子网卡ip筛选。
This commit is contained in:
gaoyutao
2026-02-09 13:45:12 +08:00
parent 0fdce6b13b
commit 5b28479625
6 changed files with 144 additions and 11 deletions
@@ -58,7 +58,11 @@ public class RmNetworkInterfaceRemote extends BaseEntity {
private String clientIds; private String clientIds;
/** 查询所有网卡的clientId集合 */ /** 查询所有网卡的clientId集合 */
private String allClientIds; private String allClientIds;
// 如果是子接口,存储父接口名称 // 如果是子接口,存储父接口名称
private String parentInterface; private String parentInterface;
/** 服务器列表传参 */
private String queryParam;
/** 有ipv4的标识 */
private boolean ipv4Flag;
} }
@@ -287,4 +287,6 @@ public class RmResourceRegistration extends BaseEntity
private String maxAgentVersion; private String maxAgentVersion;
/** id集合 */ /** id集合 */
private Long[] ids; private Long[] ids;
/** 批量查询 */
private String clientIds;
} }
@@ -29,6 +29,7 @@ import java.time.Duration;
import java.time.Instant; import java.time.Instant;
import java.util.*; import java.util.*;
import java.util.concurrent.CompletableFuture; import java.util.concurrent.CompletableFuture;
import java.util.function.Function;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import static com.tongran.common.core.utils.PageUtils.startPage; import static com.tongran.common.core.utils.PageUtils.startPage;
@@ -112,9 +113,25 @@ public class RmResourceRegistrationServiceImpl implements IRmResourceRegistratio
resultMap.put("list", list); resultMap.put("list", list);
return resultMap; return resultMap;
} }
// 情况2: 有查询参数或需要排序,全量查询+内存处理 // 情况2: 有查询参数或需要排序,全量查询+内存处理
// 先查询ip是否存在子网卡列表中
StringBuilder clientIdsBuilder = new StringBuilder();
List<RmResourceRegistration> allData = rmResourceRegistrationMapper.getRegistrationTableInfoList(rmResourceRegistration); List<RmResourceRegistration> allData = rmResourceRegistrationMapper.getRegistrationTableInfoList(rmResourceRegistration);
List<RmResourceRegistration> childData = new ArrayList<>();
RmNetworkInterfaceRemote query = new RmNetworkInterfaceRemote();
query.setQueryParam(queryParam);
R<List<RmNetworkInterfaceRemote>> children = remoteRocketMqService.innerGetChildList(query, SecurityConstants.INNER);
if(children != null && children.getData()!=null && !children.getData().isEmpty()){
for (RmNetworkInterfaceRemote datum : children.getData()) {
if(clientIdsBuilder.length() > 0) {
clientIdsBuilder.append(",");
}
clientIdsBuilder.append(datum.getClientId());
}
String clientIds = clientIdsBuilder.toString();
rmResourceRegistration.setClientIds(clientIds);
childData = rmResourceRegistrationMapper.getRegistrationTableInfoList(rmResourceRegistration);
}
batchSetNetWorkMsg(allData); batchSetNetWorkMsg(allData);
// 1. 过滤 // 1. 过滤
@@ -124,7 +141,21 @@ public class RmResourceRegistrationServiceImpl implements IRmResourceRegistratio
.filter(item -> item != null && quickMatches(item, queryValue)) .filter(item -> item != null && quickMatches(item, queryValue))
.collect(Collectors.toList()); .collect(Collectors.toList());
} }
if(!childData.isEmpty()){
filteredList.addAll(childData);
}
// 按 clientId 去重(保留第一个出现的元素)
filteredList = filteredList.stream()
.filter(Objects::nonNull)
.collect(Collectors.collectingAndThen(
Collectors.toMap(
RmResourceRegistration::getClientId,
Function.identity(),
(first, second) -> first,
LinkedHashMap::new
),
map -> new ArrayList<>(map.values())
));
// 2. 排序 // 2. 排序
if (bandwidthResultSort != null && bandwidthResultSort != 3) { if (bandwidthResultSort != null && bandwidthResultSort != 3) {
sortList(filteredList, bandwidthResultSort); sortList(filteredList, bandwidthResultSort);
@@ -168,14 +199,35 @@ public class RmResourceRegistrationServiceImpl implements IRmResourceRegistratio
*/ */
@Override @Override
public List<RmResourceRegistration> selectRmResourceRegistrationList(RmResourceRegistration rmResourceRegistration) { public List<RmResourceRegistration> selectRmResourceRegistrationList(RmResourceRegistration rmResourceRegistration) {
List<RmResourceRegistration> allData = rmResourceRegistrationMapper.getRegistrationTableInfoList(rmResourceRegistration);
batchSetNetWorkMsg(allData);
// 获取参数 // 获取参数
String queryParam = rmResourceRegistration.getQueryParam(); String queryParam = rmResourceRegistration.getQueryParam();
Integer bandwidthResultSort = rmResourceRegistration.getBandwidthResultSort(); Integer bandwidthResultSort = rmResourceRegistration.getBandwidthResultSort();
boolean hasQueryParam = queryParam != null && !queryParam.trim().isEmpty(); boolean hasQueryParam = queryParam != null && !queryParam.trim().isEmpty();
String queryValue = hasQueryParam ? queryParam.trim().toLowerCase() : null; String queryValue = hasQueryParam ? queryParam.trim().toLowerCase() : null;
List<RmResourceRegistration> allData = rmResourceRegistrationMapper.getRegistrationTableInfoList(rmResourceRegistration);
List<RmResourceRegistration> childData = new ArrayList<>();
if(hasQueryParam){
// 先查询ip是否存在子网卡列表中
StringBuilder clientIdsBuilder = new StringBuilder();
RmNetworkInterfaceRemote query = new RmNetworkInterfaceRemote();
query.setQueryParam(queryParam);
R<List<RmNetworkInterfaceRemote>> children = remoteRocketMqService.innerGetChildList(query, SecurityConstants.INNER);
if(children != null && children.getData()!=null && !children.getData().isEmpty()){
for (RmNetworkInterfaceRemote datum : children.getData()) {
if(clientIdsBuilder.length() > 0) {
clientIdsBuilder.append(",");
}
clientIdsBuilder.append(datum.getClientId());
}
String clientIds = clientIdsBuilder.toString();
rmResourceRegistration.setClientIds(clientIds);
childData = rmResourceRegistrationMapper.getRegistrationTableInfoList(rmResourceRegistration);
}else{
allData = rmResourceRegistrationMapper.getRegistrationTableInfoList(rmResourceRegistration);
}
}
batchSetNetWorkMsg(allData);
// 过滤 // 过滤
List<RmResourceRegistration> filteredList = allData; List<RmResourceRegistration> filteredList = allData;
@@ -184,7 +236,21 @@ public class RmResourceRegistrationServiceImpl implements IRmResourceRegistratio
.filter(item -> item != null && quickMatches(item, queryValue)) .filter(item -> item != null && quickMatches(item, queryValue))
.collect(Collectors.toList()); .collect(Collectors.toList());
} }
if(!childData.isEmpty()){
filteredList.addAll(childData);
}
// 按 clientId 去重(保留第一个出现的元素)
filteredList = filteredList.stream()
.filter(Objects::nonNull)
.collect(Collectors.collectingAndThen(
Collectors.toMap(
RmResourceRegistration::getClientId,
Function.identity(),
(first, second) -> first,
LinkedHashMap::new
),
map -> new ArrayList<>(map.values())
));
// 排序 // 排序
if (bandwidthResultSort != null && bandwidthResultSort != 3) { if (bandwidthResultSort != null && bandwidthResultSort != 3) {
sortList(filteredList, bandwidthResultSort); sortList(filteredList, bandwidthResultSort);
@@ -501,15 +567,63 @@ public class RmResourceRegistrationServiceImpl implements IRmResourceRegistratio
} }
if ("2".equals(network.getBindIp()) || "3".equals(network.getBindIp())) { if ("2".equals(network.getBindIp()) || "3".equals(network.getBindIp())) {
// ip提前 // ip提前
if(registration.getIp1PublicIp() == null){ // 先尝试从当前network对象设置值
if(registration.getIp1PublicIp() == null && network.getPublicIp() != null){
registration.setIp1PublicIp(network.getPublicIp()); registration.setIp1PublicIp(network.getPublicIp());
} }
if(registration.getIp1Isp() == null){ if(registration.getIp1Isp() == null && network.getIsp() != null){
registration.setIp1Isp(network.getIsp()); registration.setIp1Isp(network.getIsp());
} }
if(registration.getIp1Province() == null){ if(registration.getIp1Province() == null && network.getProvince() != null){
registration.setIp1Province(network.getProvince()); registration.setIp1Province(network.getProvince());
} }
// 如果还有字段为null,再尝试从子网卡中获取
if(registration.getIp1PublicIp() == null || registration.getIp1Isp() == null || registration.getIp1Province() == null){
// 查询子网卡信息
RmNetworkInterfaceRemote query = new RmNetworkInterfaceRemote();
query.setClientId(registration.getClientId());
query.setIpv4Flag(true);
R<List<RmNetworkInterfaceRemote>> children = remoteRocketMqService.innerGetChildList(query, SecurityConstants.INNER);
if(children != null && children.getData() != null && !children.getData().isEmpty()){
// 按ip最后一位排序取最小的
RmNetworkInterfaceRemote minIpChild = null;
int minLastOctet = Integer.MAX_VALUE;
for (RmNetworkInterfaceRemote child : children.getData()) {
if (child.getIpv4Address() != null && !child.getIpv4Address().isEmpty()) {
String ip = child.getIpv4Address();
String[] ipParts = ip.split("\\.");
if (ipParts.length == 4) {
try {
int lastOctet = Integer.parseInt(ipParts[3]);
if (lastOctet < minLastOctet) {
minLastOctet = lastOctet;
minIpChild = child;
}
} catch (NumberFormatException e) {
// 忽略格式错误的IP
}
}
}
}
if (minIpChild != null) {
// 只设置还为空的值
if(registration.getIp1PublicIp() == null){
registration.setIp1PublicIp(minIpChild.getPublicIp());
}
if(registration.getIp1Isp() == null){
registration.setIp1Isp(minIpChild.getIsp());
}
if(registration.getIp1Province() == null){
registration.setIp1Province(minIpChild.getProvince());
}
}
}
}
// 管理网IP处理 // 管理网IP处理
registration.setMgmtIsp(network.getIsp()); registration.setMgmtIsp(network.getIsp());
registration.setMgmtProvince(network.getProvince()); registration.setMgmtProvince(network.getProvince());
@@ -302,6 +302,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="multiPublicIpStatus != null and multiPublicIpStatus != ''"> and a.multi_public_ip_status = #{multiPublicIpStatus}</if> <if test="multiPublicIpStatus != null and multiPublicIpStatus != ''"> and a.multi_public_ip_status = #{multiPublicIpStatus}</if>
<if test="businessEmpty"> and a.business_name is null</if> <if test="businessEmpty"> and a.business_name is null</if>
<if test="logicalNodeEmpty"> and a.logical_node_id is null</if> <if test="logicalNodeEmpty"> and a.logical_node_id is null</if>
<if test="clientIds != null">
and a.client_id in
<foreach collection="clientIds.split(',')" item="clientId" open="(" separator="," close=")">
#{clientId}
</foreach>
</if>
</where> </where>
order by a.create_time desc order by a.create_time desc
</select> </select>
@@ -86,4 +86,6 @@ public class RmNetworkInterfaceChild extends BaseEntity
private String tableName; private String tableName;
/** ping丢包率 */ /** ping丢包率 */
private Double pingDropped; private Double pingDropped;
/** 服务器列表传参 */
public String queryParam;
} }
@@ -42,6 +42,11 @@
<if test="province != null and province != ''"> and province = #{province}</if> <if test="province != null and province != ''"> and province = #{province}</if>
<if test="city != null and city != ''"> and city = #{city}</if> <if test="city != null and city != ''"> and city = #{city}</if>
<if test="publicIp != null and publicIp != ''"> and public_ip = #{publicIp}</if> <if test="publicIp != null and publicIp != ''"> and public_ip = #{publicIp}</if>
<if test="queryParam != null and queryParam != ''">
and (public_ip like concat('%', #{queryParam}, '%')
or ipv4_address like concat('%', #{queryParam}, '%')
or ipv6_address like concat('%', #{queryParam}, '%'))
</if>
<if test="interfaceName != null and interfaceName != ''"> and interface_name like concat('%', #{interfaceName}, '%')</if> <if test="interfaceName != null and interfaceName != ''"> and interface_name like concat('%', #{interfaceName}, '%')</if>
<if test="macAddress != null and macAddress != ''"> and mac_address = #{macAddress}</if> <if test="macAddress != null and macAddress != ''"> and mac_address = #{macAddress}</if>
<if test="interfaceType != null and interfaceType != ''"> and interface_type = #{interfaceType}</if> <if test="interfaceType != null and interfaceType != ''"> and interface_type = #{interfaceType}</if>