Commit 278e352a authored by libin's avatar libin

用户ip解析job

parent 51d86f6c
...@@ -229,4 +229,9 @@ public class AppUserDetailBiz extends BaseBiz<AppUserDetailMapper, AppUserDetail ...@@ -229,4 +229,9 @@ public class AppUserDetailBiz extends BaseBiz<AppUserDetailMapper, AppUserDetail
List<AppUserDetail> userDetails = mapper.selectByExample(example); List<AppUserDetail> userDetails = mapper.selectByExample(example);
return CollectionUtils.isEmpty(userDetails)?Collections.emptyList():userDetails; return CollectionUtils.isEmpty(userDetails)?Collections.emptyList():userDetails;
} }
}
public List<AppUserDetail> findAllUserDetailWithNoProinceCode() {
List<AppUserDetail> appUserDetails = mapper.selectAllWithNoProviinceCode();
return CollectionUtils.isEmpty(appUserDetails)?Collections.EMPTY_LIST:appUserDetails;
}
}
package com.github.wxiaoqi.security.admin.jobhandler;
import com.alibaba.fastjson.JSONObject;
import com.github.wxiaoqi.security.admin.biz.AppUserDetailBiz;
import com.github.wxiaoqi.security.admin.entity.AppUserDetail;
import com.xxfc.platform.universal.dto.RegionDTO;
import com.xxfc.platform.universal.feign.RegionFeign;
import com.xxl.job.core.biz.model.ReturnT;
import com.xxl.job.core.handler.IJobHandler;
import com.xxl.job.core.handler.annotation.JobHandler;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import org.springframework.web.client.RestTemplate;
import java.util.List;
/**
* @author libin
* @version 1.0
* @description
* @data 2019/12/27 11:14
*/
@JobHandler(value = "ipAnalyticalJobHandler")
@Component
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
@Slf4j
//@RefreshScope
public class IPJobHandler extends IJobHandler {
private final RestTemplate restTemplate;
private final RegionFeign regionFeign;
private final AppUserDetailBiz appUserDetailBiz;
private static final Integer PROVINCECODE = 440000;
@Value("${ip.analytical.appId:xcjtqjromfuvjjtt}")
private String appId;
@Value("${ip.analytical.secret:bzNRK3FUR2d3WGc0MmhKWGZINm5MQT09}")
private String secret;
@Override
public ReturnT<String> execute(String s) throws Exception {
List<AppUserDetail> appUserDetails = appUserDetailBiz.findAllUserDetailWithNoProinceCode();
for (AppUserDetail appUserDetail : appUserDetails) {
String crtHost = appUserDetail.getCrtHost();
if (log.isDebugEnabled()) {
log.debug("解析的地址:【{}】", crtHost + "---time===" + System.currentTimeMillis() / 1000L);
}
try {
analyticalIPByWebSiteAndIPAddress(IPAddress.BASE_IP_PARSING_URL2, crtHost, appUserDetail);
} catch (Exception e) {
try {
analyticalIPByWebSiteAndIPAddress(IPAddress.BASE_IP_PARSING_URL1, crtHost, appUserDetail);
} catch (Exception ex) {
appUserDetail.setProvinceCode(PROVINCECODE);
log.error("解析地址失败:【{}】", ex.getMessage());
}
}
appUserDetailBiz.updateSelectiveByIdRe(appUserDetail);
}
return ReturnT.SUCCESS;
}
private void analyticalIPByWebSiteAndIPAddress(String url, String crtHost, AppUserDetail appUserDetail) {
String ipAddress = restTemplate.getForObject(String.format("%s%s&app_id=%s&app_secret=%s", url, crtHost,appId,secret), String.class);
String data = JSONObject.parseObject(ipAddress).getString(IPAddress.BASE_DATA);
JSONObject ipJsonObject = JSONObject.parseObject(data);
String cityName = ipJsonObject.getString(IPAddress.CITY_NAME);
RegionDTO regionDTO = regionFeign.getRegionByCityName(StringUtils.isEmpty(cityName) ? "东莞" : cityName);
if (null != regionDTO) {
appUserDetail.setProvinceCode(Integer.valueOf(String.valueOf(regionDTO.getParentId())));
appUserDetail.setCityCode(Integer.valueOf(String.valueOf(regionDTO.getId())));
}
}
/**
* @author libin
* @version 1.0.0
* @dec ip 解析返回的地址信息
*/
private static class IPAddress {
public static final String BASE_IP_PARSING_URL1 = "http://ip.taobao.com/service/getIpInfo.php?ip=";
public static final String BASE_IP_PARSING_URL2 = "https://www.mxnzp.com/api/ip/aim_ip?ip=";
public static final String BASE_DATA = "data";
public static final String CITY_NAME = "city";
}
}
...@@ -35,4 +35,7 @@ public interface AppUserDetailMapper extends Mapper<AppUserDetail> { ...@@ -35,4 +35,7 @@ public interface AppUserDetailMapper extends Mapper<AppUserDetail> {
List<UserStaffBo> findAllStaffsByCompanyIdAndPostionId(StaffStatisticsFindDTO staffStatisticsFindDTO); List<UserStaffBo> findAllStaffsByCompanyIdAndPostionId(StaffStatisticsFindDTO staffStatisticsFindDTO);
AppUserVo getUser(Integer userId); AppUserVo getUser(Integer userId);
List<AppUserDetail> selectAllWithNoProviinceCode();
} }
\ No newline at end of file
...@@ -26,7 +26,6 @@ import com.github.wxiaoqi.security.common.util.process.SystemConfig; ...@@ -26,7 +26,6 @@ import com.github.wxiaoqi.security.common.util.process.SystemConfig;
import com.github.wxiaoqi.security.common.util.result.JsonResultUtil; import com.github.wxiaoqi.security.common.util.result.JsonResultUtil;
import com.xxfc.platform.activity.feign.ActivityFeign; import com.xxfc.platform.activity.feign.ActivityFeign;
import com.xxfc.platform.im.feign.ImFeign; import com.xxfc.platform.im.feign.ImFeign;
import com.xxfc.platform.universal.dto.RegionDTO;
import com.xxfc.platform.universal.dto.SmsTemplateDTO; import com.xxfc.platform.universal.dto.SmsTemplateDTO;
import com.xxfc.platform.universal.feign.MQSenderFeign; import com.xxfc.platform.universal.feign.MQSenderFeign;
import com.xxfc.platform.universal.feign.RegionFeign; import com.xxfc.platform.universal.feign.RegionFeign;
...@@ -1208,55 +1207,6 @@ public class AppPermissionService { ...@@ -1208,55 +1207,6 @@ public class AppPermissionService {
} }
} }
/**
* ip地址 信息解析
*
* @param appUserDetail
*/
public void setCreateIPInfo(AppUserDetail appUserDetail) {
String crtHost = appUserDetail.getCrtHost();
if (log.isDebugEnabled()) {
log.debug("解析的地址:【{}】", crtHost+"---time==="+System.currentTimeMillis()/1000L);
}
try {
analyticalIPByWebSiteAndIPAddress(IPAddress.BASE_IP_PARSING_URL2, crtHost, appUserDetail);
} catch (Exception e) {
try {
analyticalIPByWebSiteAndIPAddress(IPAddress.BASE_IP_PARSING_URL1, crtHost, appUserDetail);
} catch (Exception ex) {
log.error("解析地址失败:【{}】", ex.getMessage());
}
}
}
private void analyticalIPByWebSiteAndIPAddress(String url, String crtHost, AppUserDetail appUserDetail) {
String ipAddress = restTemplate.getForObject(String.format("%s%s", url, crtHost), String.class);
log.debug("解析的调用网站后:【{}】", crtHost+"---time==="+System.currentTimeMillis()/1000L);
String data = JSONObject.parseObject(ipAddress).getString(IPAddress.BASE_DATA);
JSONObject ipJsonObject = JSONObject.parseObject(data);
String cityName = ipJsonObject.getString(IPAddress.CITY_NAME);
RegionDTO regionDTO = regionFeign.getRegionByCityName(StringUtils.isEmpty(cityName) ? "东莞" : cityName);
log.debug("解析的调用服务后:【{}】", crtHost+"---time==="+System.currentTimeMillis()/1000L);
if (null != regionDTO) {
appUserDetail.setProvinceCode(Integer.valueOf(String.valueOf(regionDTO.getParentId())));
appUserDetail.setCityCode(Integer.valueOf(String.valueOf(regionDTO.getId())));
}
}
/**
* @author libin
* @version 1.0.0
* @dec ip 解析返回的地址信息
*/
private static class IPAddress {
public static final String BASE_IP_PARSING_URL1 = "http://ip.taobao.com/service/getIpInfo.php?ip=";
public static final String BASE_IP_PARSING_URL2 = "https://www.mxnzp.com/api/ip/aim_ip?ip=";
public static final String BASE_DATA = "data";
public static final String CITY_NAME = "city";
}
//修改手机号码 //修改手机号码
public ObjectRestResponse updUsername(Integer userId,String username,String mobileCode){ public ObjectRestResponse updUsername(Integer userId,String username,String mobileCode){
if (StringUtils.isBlank(username)||StringUtils.isBlank(mobileCode)||userId==0||userId==null){ if (StringUtils.isBlank(username)||StringUtils.isBlank(mobileCode)||userId==0||userId==null){
......
...@@ -328,4 +328,9 @@ from `app_user_detail` as `aud` left join `app_user_login` as `aul` on aul.id= ...@@ -328,4 +328,9 @@ from `app_user_detail` as `aud` left join `app_user_login` as `aul` on aul.id=
on d.userid = l.id on d.userid = l.id
where l.id = #{userId} limit 1 where l.id = #{userId} limit 1
</select> </select>
<select id="selectAllWithNoProviinceCode"
resultType="com.github.wxiaoqi.security.admin.entity.AppUserDetail">
select `id`,`crt_host` from `app_user_detail` where crt_host is not null and ( province_code = 0 or province_code is null)
</select>
</mapper> </mapper>
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment