From 34233e055959508c1ec8980c249faa44fb0698d9 Mon Sep 17 00:00:00 2001 From: yeungchihang <842328916@qq.com> Date: Mon, 27 Feb 2023 16:39:13 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B8=AA=E4=BA=BA=E8=B5=84=E6=96=99=E9=A1=B5?= =?UTF-8?q?=E6=94=B9=E9=80=A0-=E5=9C=B0=E5=8C=BA=E5=88=9D=E5=A7=8B?= =?UTF-8?q?=E5=8C=96=E5=B0=8F=E5=B7=A5=E5=85=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/AccountLoginRecordService.java | 2 +- .../admin/service/api/MyApiService.java | 42 +++++++++++++++++++ .../admin/controller/api/MyApiController.java | 10 +++++ .../AccountLoginRecordController.java | 2 +- .../AccountLoginRecordMapper.java | 5 ++- .../service/account/LoginRecordService.java | 2 +- .../oauth/AccountLoginRecordMapper.xml | 12 +++++- .../service/region/RegionService.java | 10 ++++- .../service/MyUserDetailsServiceImpl.java | 3 -- pom.xml | 7 ++++ 10 files changed, 83 insertions(+), 12 deletions(-) diff --git a/accompany-admin/accompany-admin-service/src/main/java/com/accompany/admin/service/AccountLoginRecordService.java b/accompany-admin/accompany-admin-service/src/main/java/com/accompany/admin/service/AccountLoginRecordService.java index d0c7e1a5e..6399c58fd 100644 --- a/accompany-admin/accompany-admin-service/src/main/java/com/accompany/admin/service/AccountLoginRecordService.java +++ b/accompany-admin/accompany-admin-service/src/main/java/com/accompany/admin/service/AccountLoginRecordService.java @@ -18,7 +18,7 @@ import java.util.List; @Service public class AccountLoginRecordService extends BaseService { @Autowired - AccountLoginRecordMapper accountLoginRecordMapper; + private AccountLoginRecordMapper accountLoginRecordMapper; public PageInfo getAccountLoginRecordList(Integer pageSize, Integer pageNum, Long erbanNo, String phone, Integer loginType, String deviceId) { AccountLoginRecordExample accountLoginRecordExample = new AccountLoginRecordExample(); diff --git a/accompany-admin/accompany-admin-service/src/main/java/com/accompany/admin/service/api/MyApiService.java b/accompany-admin/accompany-admin-service/src/main/java/com/accompany/admin/service/api/MyApiService.java index 34e567ff4..421b52046 100644 --- a/accompany-admin/accompany-admin-service/src/main/java/com/accompany/admin/service/api/MyApiService.java +++ b/accompany-admin/accompany-admin-service/src/main/java/com/accompany/admin/service/api/MyApiService.java @@ -10,14 +10,21 @@ import com.accompany.business.service.activities.vo.LuckySeaRankListVo; import com.accompany.business.service.clan.ClanGoldDayFlowService; import com.accompany.business.service.headwear.HeadwearService; import com.accompany.business.service.push.EnterpriseWechatPushService; +import com.accompany.business.service.region.RegionService; import com.accompany.business.service.room.RoomReciveRankingService; import com.accompany.business.service.room.RoomSendRankingService; +import com.accompany.business.service.user.UsersService; import com.accompany.common.config.WebSecurityConfig; import com.accompany.common.push.MarkdownMessage; import com.accompany.common.redis.RedisKey; import com.accompany.common.status.BusiStatus; import com.accompany.common.utils.DateTimeUtil; import com.accompany.core.exception.ServiceException; +import com.accompany.core.model.AccountLoginRecord; +import com.accompany.core.model.Users; +import com.accompany.core.model.UsersExample; +import com.accompany.core.mybatismapper.AccountLoginRecordMapper; +import com.accompany.core.mybatismapper.UsersMapper; import com.accompany.core.service.common.JedisService; import com.alibaba.fastjson.JSONObject; import com.google.common.collect.Lists; @@ -25,6 +32,7 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.TaskScheduler; import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; import java.time.LocalDate; import java.time.LocalDateTime; @@ -67,6 +75,14 @@ public class MyApiService { private EnterpriseWechatPushService enterpriseWechatPushService; @Autowired private WebSecurityConfig webSecurityConfig; + @Autowired + private UsersService usersService; + @Autowired + private UsersMapper usersMapper; + @Autowired + private AccountLoginRecordMapper accountLoginRecordMapper; + @Autowired + private RegionService regionService; private Map futureMap = new ConcurrentHashMap<>(); @@ -193,4 +209,30 @@ public class MyApiService { enterpriseWechatPushService.pushMessageByKey(webSecurityConfig.getActivityEnterpriseWechatPushKey(), msg); } } + + public void initRegion() { + UsersExample example = new UsersExample(); + example.createCriteria().andRegionIsNull(); + List nullRegionUser = usersMapper.selectByExample(example); + if (CollectionUtils.isEmpty(nullRegionUser)){ + return; + } + List> userList = Lists.partition(nullRegionUser, 100); + for (List a: userList){ + bizExecutor.execute(()->{ + List uids = a.stream().map(Users::getUid).collect(Collectors.toList()); + List b = accountLoginRecordMapper.getLastLoginIpByUids(uids); + for (AccountLoginRecord alr: b){ + String region = regionService.getCountry(alr.getLoginIp()); + Users u = new Users(); + u.setRegion(region); + UsersExample e = new UsersExample(); + e.createCriteria().andUidEqualTo(alr.getUid()); + usersMapper.updateByExampleSelective(u, e); + usersService.deleteUserRelateCachesByUid(alr.getUid()); + } + }); + } + + } } diff --git a/accompany-admin/accompany-admin-web/src/main/java/com/accompany/admin/controller/api/MyApiController.java b/accompany-admin/accompany-admin-web/src/main/java/com/accompany/admin/controller/api/MyApiController.java index 578c21a7a..13d82f05d 100644 --- a/accompany-admin/accompany-admin-web/src/main/java/com/accompany/admin/controller/api/MyApiController.java +++ b/accompany-admin/accompany-admin-web/src/main/java/com/accompany/admin/controller/api/MyApiController.java @@ -110,4 +110,14 @@ public class MyApiController { myApiService.pushLuckySeaAWechat(date); return new BusiResult<>(BusiStatus.SUCCESS); } + + @RequestMapping("/initRegion") + @ResponseBody + public BusiResult initRegion(Long roomId) { + if (null == roomId || !roomId.equals(603L)){ + throw new ServiceException(BusiStatus.PARAMERROR); + } + myApiService.initRegion(); + return new BusiResult<>(BusiStatus.SUCCESS); + } } diff --git a/accompany-admin/accompany-admin-web/src/main/java/com/accompany/admin/controller/feedback/AccountLoginRecordController.java b/accompany-admin/accompany-admin-web/src/main/java/com/accompany/admin/controller/feedback/AccountLoginRecordController.java index 147498246..410394855 100644 --- a/accompany-admin/accompany-admin-web/src/main/java/com/accompany/admin/controller/feedback/AccountLoginRecordController.java +++ b/accompany-admin/accompany-admin-web/src/main/java/com/accompany/admin/controller/feedback/AccountLoginRecordController.java @@ -19,7 +19,7 @@ import org.springframework.web.bind.annotation.ResponseBody; @Controller @RequestMapping("/admin") public class AccountLoginRecordController extends BaseController { - private static final Logger logger = LoggerFactory.getLogger(AccountLoginRecordController.class); + @Autowired private AccountLoginRecordService accountLoginRecordService; /** diff --git a/accompany-base/accompany-core/src/main/java/com/accompany/core/mybatismapper/AccountLoginRecordMapper.java b/accompany-base/accompany-core/src/main/java/com/accompany/core/mybatismapper/AccountLoginRecordMapper.java index f4f6c88aa..da64122d6 100644 --- a/accompany-base/accompany-core/src/main/java/com/accompany/core/mybatismapper/AccountLoginRecordMapper.java +++ b/accompany-base/accompany-core/src/main/java/com/accompany/core/mybatismapper/AccountLoginRecordMapper.java @@ -1,7 +1,5 @@ package com.accompany.core.mybatismapper; -import com.accompany.core.model.AccountLoginRecord; -import com.accompany.core.model.AccountLoginRecordExample; import com.accompany.core.model.AccountLoginRecord; import com.accompany.core.model.AccountLoginRecordExample; import org.apache.ibatis.annotations.Param; @@ -34,4 +32,7 @@ public interface AccountLoginRecordMapper { String getLastDeviceId(Long uid); AccountLoginRecord getLatestLoginRecordFromDB(long uid); + + List getLastLoginIpByUids(@Param("uids") List uids); + } \ No newline at end of file diff --git a/accompany-base/accompany-core/src/main/java/com/accompany/core/service/account/LoginRecordService.java b/accompany-base/accompany-core/src/main/java/com/accompany/core/service/account/LoginRecordService.java index 8d2d127a7..29ff7baa4 100644 --- a/accompany-base/accompany-core/src/main/java/com/accompany/core/service/account/LoginRecordService.java +++ b/accompany-base/accompany-core/src/main/java/com/accompany/core/service/account/LoginRecordService.java @@ -18,7 +18,7 @@ import java.util.Date; public class LoginRecordService { @Autowired - AccountLoginRecordMapper accountLoginRecordMapper; + private AccountLoginRecordMapper accountLoginRecordMapper; public int addAccountLoginRecord(AccountLoginRecord accountLoginRecord) { return accountLoginRecordMapper.insert(accountLoginRecord); diff --git a/accompany-base/accompany-core/src/main/resources/oauth/AccountLoginRecordMapper.xml b/accompany-base/accompany-core/src/main/resources/oauth/AccountLoginRecordMapper.xml index 768b1a923..ff9c6c611 100644 --- a/accompany-base/accompany-core/src/main/resources/oauth/AccountLoginRecordMapper.xml +++ b/accompany-base/accompany-core/src/main/resources/oauth/AccountLoginRecordMapper.xml @@ -441,11 +441,19 @@ where record_id = #{recordId,jdbcType=BIGINT} - + select device_id from account_login_record where uid = #{uid} and device_id is not null order by create_time desc limit 0,1; + + \ No newline at end of file diff --git a/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/region/RegionService.java b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/region/RegionService.java index 058237420..37d2c14fd 100644 --- a/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/region/RegionService.java +++ b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/region/RegionService.java @@ -3,11 +3,13 @@ package com.accompany.business.service.region; import com.accompany.business.service.user.UsersService; import com.accompany.common.constant.Constant; import com.accompany.common.status.BusiStatus; +import com.accompany.common.utils.RandomUtil; import com.accompany.core.exception.ServiceException; import com.accompany.core.model.Users; import com.accompany.core.service.SysConfService; import com.accompany.core.service.user.UsersBaseService; import com.alibaba.fastjson.JSON; +import com.github.houbb.opencc4j.util.ZhConverterUtil; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -56,11 +58,15 @@ public class RegionService { public String getCountry(String registerIp) { String dbRegion = regionSearchService.getCountry(registerIp); - log.info("ip2region ip {} region {}", registerIp, dbRegion); + String zhRegion = ZhConverterUtil.toTraditional(dbRegion); + log.info("ip2region ip {} region {} zhRegion {}", registerIp, dbRegion, zhRegion); List configs = getConfig(); if (configs.contains(dbRegion)){ return dbRegion; + } else if (configs.contains("中國")) { + return "香港"; } - return configs.get(0); + int index = RandomUtil.randomByRange(0, configs.size()-1); + return configs.get(index); } } 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 90565bae2..bbf7ff0a5 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 @@ -17,7 +17,6 @@ import com.accompany.core.service.account.UserAppService; import com.accompany.core.service.common.JedisService; import com.accompany.core.service.user.PhoneBlackService; import com.accompany.core.service.user.UsersBaseService; -import com.accompany.oauth2.config.OAuthConfig; import com.accompany.oauth2.constant.LoginTypeEnum; import com.accompany.oauth2.constant.OAuthStatus; import com.accompany.oauth2.exception.CustomOAuth2Exception; @@ -25,7 +24,6 @@ import com.accompany.oauth2.model.AccountDetails; import com.accompany.oauth2.service.account.AccountBlockCheckService; import com.accompany.oauth2.service.account.AccountManageService; import com.accompany.sms.service.SmsService; -import com.google.gson.Gson; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.core.userdetails.UserDetails; @@ -39,7 +37,6 @@ import org.springframework.util.StringUtils; import java.util.Arrays; import java.util.Date; import java.util.List; -import java.util.Optional; @Slf4j public class MyUserDetailsServiceImpl implements MyUserDetailsService { diff --git a/pom.xml b/pom.xml index b87cf6ede..eb2128958 100644 --- a/pom.xml +++ b/pom.xml @@ -99,6 +99,7 @@ 3.1.5 8.12.43 2.7.0 + 1.7.2 @@ -969,6 +970,12 @@ ${ip2region.version} + + com.github.houbb + opencc4j + ${opencc4j.version} + +