ip-接入

This commit is contained in:
khalil
2024-10-12 18:40:48 +08:00
parent 20bf24a6e5
commit 1c89c25ede
6 changed files with 115 additions and 8 deletions

View File

@@ -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);
}
}

View File

@@ -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<PartitionInfo> 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<PartitionInfo> partitionInfoOptional = partitionInfoList.stream().filter(p -> p.getCountry().contains(dbCountry))
.findFirst();
if (partitionInfoOptional.isPresent()) {
return partitionInfoOptional.get().getId();

View File

@@ -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"));
}
}

View File

@@ -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]);
}
}

View File

@@ -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;

View File

@@ -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;