diff --git a/rc-service/rc-service-other/other-infrastructure/src/main/java/com/red/circle/other/infra/database/rds/service/user/device/LatestMobileDeviceService.java b/rc-service/rc-service-other/other-infrastructure/src/main/java/com/red/circle/other/infra/database/rds/service/user/device/LatestMobileDeviceService.java index 75b7529b..11385c49 100644 --- a/rc-service/rc-service-other/other-infrastructure/src/main/java/com/red/circle/other/infra/database/rds/service/user/device/LatestMobileDeviceService.java +++ b/rc-service/rc-service-other/other-infrastructure/src/main/java/com/red/circle/other/infra/database/rds/service/user/device/LatestMobileDeviceService.java @@ -118,7 +118,7 @@ public interface LatestMobileDeviceService extends BaseService 192.168.1) - * IPv6: 取前4段(如 2a0d:5600:24:449:xxx -> 2a0d:5600:24:449) + * 获取IP前缀段 + * IPv4: 取前2段(如 192.168.1.100 -> 192.168) + * IPv6: 取前2段(如 2402:ad80:130:d1a2::1 -> 2402:ad80) */ private String getIpPrefix(String ip) { if (StringUtils.isBlank(ip)) { return ""; } - if (ip.contains(":")) { - String[] parts = ip.split(":"); - if (parts.length >= 4) { - return parts[0] + ":" + parts[1] + ":" + parts[2] + ":" + parts[3]; - } - return ip; - } else { - String[] parts = ip.split("\\."); - if (parts.length >= 3) { - return parts[0] + "." + parts[1] + "." + parts[2]; - } - return ip; + String separator = ip.contains(":") ? ":" : "\\."; + String joinChar = ip.contains(":") ? ":" : "."; + + String[] parts = ip.split(separator); + if (parts.length >= 2) { + return parts[0] + joinChar + parts[1]; } + return ip; } @Override @@ -387,13 +380,13 @@ public class LatestMobileDeviceServiceImpl extends String requestClient = parts[0]; String phoneModel = parts[1]; - String ip = parts[2]; + String ipPrefix = parts[2]; return Optional.ofNullable(query() .select(LatestMobileDevice::getUserId) .eq(LatestMobileDevice::getRequestClient, requestClient) .eq(LatestMobileDevice::getPhoneModel, phoneModel) - .eq(LatestMobileDevice::getIp, ip) + .likeRight(LatestMobileDevice::getIp, ipPrefix) // 前缀匹配 .eq(LatestMobileDevice::getSysOrigin, sysOrigin) .last(PageConstant.formatLimit(500)) .list())