From 1c89c25edec36b209b5c520b8bb38659c5664c3a Mon Sep 17 00:00:00 2001 From: khalil Date: Sat, 12 Oct 2024 18:40:48 +0800 Subject: [PATCH] =?UTF-8?q?ip-=E6=8E=A5=E5=85=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../accompany/core/vo/RegionNetworkVo.java | 23 ++++++++ .../partition/PartitionInfoService.java | 14 ++--- .../region/RegionNetworkSearchService.java | 52 +++++++++++++++++++ .../service/region/RegionNetworkService.java | 28 ++++++++++ .../business/service/ip/IpRegionService.java | 3 +- .../service/MyUserDetailsServiceImpl.java | 3 +- 6 files changed, 115 insertions(+), 8 deletions(-) create mode 100644 accompany-base/accompany-basic/accompany-basic-sdk/src/main/java/com/accompany/core/vo/RegionNetworkVo.java create mode 100644 accompany-base/accompany-basic/accompany-basic-service/src/main/java/com/accompany/core/service/region/RegionNetworkSearchService.java create mode 100644 accompany-base/accompany-basic/accompany-basic-service/src/main/java/com/accompany/core/service/region/RegionNetworkService.java diff --git a/accompany-base/accompany-basic/accompany-basic-sdk/src/main/java/com/accompany/core/vo/RegionNetworkVo.java b/accompany-base/accompany-basic/accompany-basic-sdk/src/main/java/com/accompany/core/vo/RegionNetworkVo.java new file mode 100644 index 000000000..b6cc4aa31 --- /dev/null +++ b/accompany-base/accompany-basic/accompany-basic-sdk/src/main/java/com/accompany/core/vo/RegionNetworkVo.java @@ -0,0 +1,23 @@ +package com.accompany.core.vo; + +import com.accompany.core.util.StringUtils; +import lombok.Data; + +@Data +public class RegionNetworkVo { + + private String status; + private String country = "0"; + private String regionName = "0"; + private String city = "0"; + private String isp = "0"; + + public boolean isSuccess(){ + return StringUtils.equals("success", status); + } + + public String format() { + return String.join("|", country, "0", regionName, city, isp); + } + +} diff --git a/accompany-base/accompany-basic/accompany-basic-service/src/main/java/com/accompany/core/service/partition/PartitionInfoService.java b/accompany-base/accompany-basic/accompany-basic-service/src/main/java/com/accompany/core/service/partition/PartitionInfoService.java index bcc8f9295..89a92901a 100644 --- a/accompany-base/accompany-basic/accompany-basic-service/src/main/java/com/accompany/core/service/partition/PartitionInfoService.java +++ b/accompany-base/accompany-basic/accompany-basic-service/src/main/java/com/accompany/core/service/partition/PartitionInfoService.java @@ -6,12 +6,11 @@ import com.accompany.core.exception.ServiceException; import com.accompany.core.model.PartitionInfo; import com.accompany.core.model.Users; import com.accompany.core.mybatismapper.PartitionInfoMapper; -import com.accompany.core.service.region.RegionSearchService; +import com.accompany.core.service.region.RegionNetworkSearchService; import com.accompany.core.service.user.UsersBaseService; import com.accompany.core.vo.partition.UserPartitionInfoVo; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; -import com.github.houbb.opencc4j.util.ZhConverterUtil; import org.springframework.beans.factory.InitializingBean; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -23,8 +22,10 @@ import java.util.*; @Service public class PartitionInfoService implements InitializingBean { + //@Autowired + //private RegionSearchService regionSearchService; @Autowired - private RegionSearchService regionSearchService; + private RegionNetworkSearchService regionNetworkSearchService; @Autowired private UsersBaseService usersBaseService; @Autowired @@ -38,9 +39,10 @@ public class PartitionInfoService implements InitializingBean { //先根据ip划分地区 if (StringUtils.hasText(registerIp)) { - String dbCountry = regionSearchService.getCountry(registerIp); - String zhCountry = ZhConverterUtil.toTraditional(dbCountry); - Optional partitionInfoOptional = partitionInfoList.stream().filter(p -> p.getCountry().contains(zhCountry)) + /*String dbCountry = regionSearchService.getCountry(registerIp); + String zhCountry = ZhConverterUtil.toTraditional(dbCountry);*/ + String dbCountry = regionNetworkSearchService.getCountry(registerIp); + Optional partitionInfoOptional = partitionInfoList.stream().filter(p -> p.getCountry().contains(dbCountry)) .findFirst(); if (partitionInfoOptional.isPresent()) { return partitionInfoOptional.get().getId(); diff --git a/accompany-base/accompany-basic/accompany-basic-service/src/main/java/com/accompany/core/service/region/RegionNetworkSearchService.java b/accompany-base/accompany-basic/accompany-basic-service/src/main/java/com/accompany/core/service/region/RegionNetworkSearchService.java new file mode 100644 index 000000000..fa4a52cf9 --- /dev/null +++ b/accompany-base/accompany-basic/accompany-basic-service/src/main/java/com/accompany/core/service/region/RegionNetworkSearchService.java @@ -0,0 +1,52 @@ +package com.accompany.core.service.region; + +import com.accompany.common.status.BusiStatus; +import com.accompany.common.utils.HttpUtils; +import com.accompany.core.exception.ServiceException; +import com.accompany.core.vo.RegionNetworkVo; +import com.alibaba.fastjson.JSON; +import lombok.SneakyThrows; +import org.springframework.stereotype.Service; + +import java.util.Collections; + +@Service +public class RegionNetworkSearchService { + + /** + * field可以配置对应返回的字段 + * 官网:https://members.ip-api.com/(登录之后才有doc) + */ + private static final String IP_API = "https://pro.ip-api.com/json/%s?key=CNziZ12dU01uo0f&fields=60415"; + + @SneakyThrows + private String search(String ipStr){ + String requestUrl = String.format(IP_API, ipStr); + String s = HttpUtils.doGet(requestUrl, Collections.emptyMap()); + RegionNetworkVo result = JSON.parseObject(s, RegionNetworkVo.class); + if (!result.isSuccess()){ + throw new ServiceException(BusiStatus.SERVERBUSY); + } + return result.format(); + } + + @SneakyThrows + public String getCountry(String ip){ + //国家|区域|省份|城市|ISP + String region = search(ip); + return region.split("\\|")[0]; + } + + @SneakyThrows + public String getRegion(String ip){ + //国家|区域|省份|城市|ISP + String region = search(ip); + String[] array = region.split("\\|"); + return String.join("|", array[0], array[2], array[4]); + } + + public static void main(String[] args) { + System.out.println(new RegionNetworkSearchService().search("185.200.37.244")); + } + +} diff --git a/accompany-base/accompany-basic/accompany-basic-service/src/main/java/com/accompany/core/service/region/RegionNetworkService.java b/accompany-base/accompany-basic/accompany-basic-service/src/main/java/com/accompany/core/service/region/RegionNetworkService.java new file mode 100644 index 000000000..b9a50a7d1 --- /dev/null +++ b/accompany-base/accompany-basic/accompany-basic-service/src/main/java/com/accompany/core/service/region/RegionNetworkService.java @@ -0,0 +1,28 @@ +package com.accompany.core.service.region; + +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +@Service +@Slf4j +public class RegionNetworkService { + + @Autowired + private RegionNetworkSearchService regionSearchService; + + private final String CHINA = "China"; + //private final String HK = "Hong Kong"; + //private final String MO = "Macao"; + //private final String TW = "Taiwan"; + + public String getRegion(String registerIp) { + return regionSearchService.getRegion(registerIp); + } + + public boolean isChineseMainland(String ipRegion){ + String[] ipRegionArray = ipRegion.split("\\|"); + return CHINA.equals(ipRegionArray[0]); + } + +} diff --git a/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/ip/IpRegionService.java b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/ip/IpRegionService.java index 53c083ea9..69102a508 100644 --- a/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/ip/IpRegionService.java +++ b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/ip/IpRegionService.java @@ -9,6 +9,7 @@ import com.accompany.core.exception.ServiceException; import com.accompany.core.model.Account; import com.accompany.core.service.SysConfService; import com.accompany.core.service.account.AccountService; +import com.accompany.core.service.region.RegionNetworkService; import com.accompany.core.service.region.RegionService; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; @@ -28,7 +29,7 @@ public class IpRegionService { @Autowired private AccountService accountService; @Autowired - private RegionService regionService; + private RegionNetworkService regionService; @Autowired private EnvComponent envComponent; diff --git a/accompany-oauth2/accompany-oauth2-service/src/main/java/com/accompany/oauth2/service/MyUserDetailsServiceImpl.java b/accompany-oauth2/accompany-oauth2-service/src/main/java/com/accompany/oauth2/service/MyUserDetailsServiceImpl.java index 9274df794..ba43dbdde 100644 --- a/accompany-oauth2/accompany-oauth2-service/src/main/java/com/accompany/oauth2/service/MyUserDetailsServiceImpl.java +++ b/accompany-oauth2/accompany-oauth2-service/src/main/java/com/accompany/oauth2/service/MyUserDetailsServiceImpl.java @@ -16,6 +16,7 @@ import com.accompany.core.service.account.AccountService; import com.accompany.core.service.account.LoginRecordService; import com.accompany.core.service.account.UserAppService; import com.accompany.core.service.common.JedisService; +import com.accompany.core.service.region.RegionNetworkService; import com.accompany.core.service.region.RegionService; import com.accompany.core.service.user.PhoneBlackService; import com.accompany.core.service.user.UsersBaseService; @@ -70,7 +71,7 @@ public class MyUserDetailsServiceImpl implements MyUserDetailsService { @Autowired private PhoneBlackService phoneBlackService; @Autowired - private RegionService regionService; + private RegionNetworkService regionService; @Autowired private PrettyNumberRecordMapper prettyNumberRecordMapper;