个人资料页改造-地区初始化小工具

This commit is contained in:
2023-02-27 16:39:13 +08:00
parent 8b7fd940ea
commit 34233e0559
10 changed files with 83 additions and 12 deletions

View File

@@ -18,7 +18,7 @@ import java.util.List;
@Service
public class AccountLoginRecordService extends BaseService {
@Autowired
AccountLoginRecordMapper accountLoginRecordMapper;
private AccountLoginRecordMapper accountLoginRecordMapper;
public PageInfo<AccountLoginRecord> getAccountLoginRecordList(Integer pageSize, Integer pageNum, Long erbanNo, String phone, Integer loginType, String deviceId) {
AccountLoginRecordExample accountLoginRecordExample = new AccountLoginRecordExample();

View File

@@ -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<String, Future> 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<Users> nullRegionUser = usersMapper.selectByExample(example);
if (CollectionUtils.isEmpty(nullRegionUser)){
return;
}
List<List<Users>> userList = Lists.partition(nullRegionUser, 100);
for (List<Users> a: userList){
bizExecutor.execute(()->{
List<Long> uids = a.stream().map(Users::getUid).collect(Collectors.toList());
List<AccountLoginRecord> 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());
}
});
}
}
}

View File

@@ -110,4 +110,14 @@ public class MyApiController {
myApiService.pushLuckySeaAWechat(date);
return new BusiResult<>(BusiStatus.SUCCESS);
}
@RequestMapping("/initRegion")
@ResponseBody
public BusiResult<Void> initRegion(Long roomId) {
if (null == roomId || !roomId.equals(603L)){
throw new ServiceException(BusiStatus.PARAMERROR);
}
myApiService.initRegion();
return new BusiResult<>(BusiStatus.SUCCESS);
}
}

View File

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

View File

@@ -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<AccountLoginRecord> getLastLoginIpByUids(@Param("uids") List<Long> uids);
}

View File

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

View File

@@ -441,11 +441,19 @@
where record_id = #{recordId,jdbcType=BIGINT}
</update>
<select id="getLastDeviceId" parameterType="java.lang.Long" resultType="java.lang.String">
select device_id from account_login_record where uid = #{uid} and device_id is not null order by create_time desc limit 0,1;
<select id="getLastDeviceId" parameterType="java.lang.Long" resultType="java.lang.String">
select device_id from account_login_record where uid = #{uid} and device_id is not null order by create_time desc limit 0,1;
</select>
<select id="getLatestLoginRecordFromDB" resultMap="BaseResultMap">
SELECT * from account_login_record where uid = #{uid} ORDER BY create_time DESC limit 1;
</select>
<select id="getLastLoginIpByUids" resultMap="BaseResultMap">
select alr.uid, login_ip from account_login_record alr
inner join (select `uid`, max(create_time) create_time
from account_login_record alr
where uid in <foreach collection="uids" item="uid" separator="," open="(" close=")">#{uid}</foreach> group by uid) alr2
on alr.uid = alr2.uid and alr.create_time = alr2.create_time
</select>
</mapper>

View File

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

View File

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

View File

@@ -99,6 +99,7 @@
<esayexcel.version>3.1.5</esayexcel.version>
<googlecode-libphonenumber.version>8.12.43</googlecode-libphonenumber.version>
<ip2region.version>2.7.0</ip2region.version>
<opencc4j.version>1.7.2</opencc4j.version>
</properties>
<dependencyManagement>
@@ -969,6 +970,12 @@
<version>${ip2region.version}</version>
</dependency>
<dependency>
<groupId>com.github.houbb</groupId>
<artifactId>opencc4j</artifactId>
<version>${opencc4j.version}</version>
</dependency>
</dependencies>
<build>