[房间切换]-修改appVersion保存逻辑

This commit is contained in:
liaozetao
2024-06-21 10:11:47 +08:00
parent 8d00f91b28
commit b10f9b472c
7 changed files with 51 additions and 51 deletions

View File

@@ -10,5 +10,6 @@ public interface UpdateUserMapperExpand {
@Param("lastLoginTime") Date lastLoginTime,
@Param("lastLoginIp") String lastLoginIp,
@Param("lastLoginRegion") String lastLoginRegion,
@Param("currentApp") String currentApp);
@Param("currentApp") String currentApp,
@Param("appVersion") String appVersion);
}

View File

@@ -30,13 +30,13 @@ public class UserAppService {
* @param currentApp
*/
@Async
public void updateCurrentApp(Long uid, String currentApp, Date loginTime, String loginIp){
if(uid == null){
public void updateCurrentApp(Long uid, String currentApp, Date loginTime, String loginIp, String appVersion) {
if (uid == null) {
return;
}
String region = regionService.getRegion(loginIp);
int ret = this.mapperExpand.updateByUid(uid, loginTime, loginIp, region, currentApp);
if(ret > 0){
int ret = this.mapperExpand.updateByUid(uid, loginTime, loginIp, region, currentApp, appVersion);
if (ret > 0) {
usersBaseService.deleteUserRelateCache(uid.toString());
}
}

View File

@@ -1,8 +1,13 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.accompany.core.mybatismapper.UpdateUserMapperExpand" >
<update id="updateByUid">
UPDATE users SET last_login_time = #{lastLoginTime}, last_login_ip = #{lastLoginIp}, last_login_region = #{lastLoginRegion}, current_app = #{currentApp}
where uid = #{uid}
</update>
<mapper namespace="com.accompany.core.mybatismapper.UpdateUserMapperExpand">
<update id="updateByUid">
UPDATE users SET
last_login_time = #{lastLoginTime},
last_login_ip = #{lastLoginIp},
last_login_region = #{lastLoginRegion},
current_app = #{currentApp},
app_version = #{appVersion}
where uid = #{uid}
</update>
</mapper>

View File

@@ -74,11 +74,11 @@ public class RoomForMiniGameService extends AbstractRoomService {
public void beforeSwitchType(Room room) {
Long roomUid = room.getUid();
room.setLeaveMode(null);
jedisService.hdel(RedisKey.mini_game_room.getKey(), String.valueOf(room.getRoomId()));
room.setMgId(null);
room.setMgName(null);
room.setMgState(null);
log.info("房间 roomUid : {}原是小游戏房,更新为非小游戏房", roomUid);
jedisService.hdel(RedisKey.mini_game_room.getKey(), String.valueOf(room.getRoomId()));
//游戏状态置为无效
miniGameSwitchRecordService.invalidMiniGameSwitchRecord(roomUid);
// 查询最小的小游戏麦位,并进行解锁
@@ -224,7 +224,6 @@ public class RoomForMiniGameService extends AbstractRoomService {
@Override
public void updateRoom(Room oldRoom, Room newRoom) {
Long roomUid = newRoom.getUid();
Long roomId = newRoom.getRoomId();
Long newMgId = newRoom.getMgId();
Byte oldRoomType = oldRoom.getType();
if (newMgId == null || newMgId == 0) {
@@ -233,6 +232,7 @@ public class RoomForMiniGameService extends AbstractRoomService {
if (newMgId.equals(oldRoom.getMgId())) {
return;
}
int[] micArray = RoomServiceFactory.getServiceByType(oldRoomType).micArray();
MiniGame miniGame = miniGameService.queryMiniGameByMgId(newMgId);
if (miniGame == null) {
log.error("创建游戏房,根据mgId : {}未查询到相关的小游戏", newMgId);
@@ -244,9 +244,10 @@ public class RoomForMiniGameService extends AbstractRoomService {
if (StrUtil.isEmpty(lockVal)) {
throw new ServiceException(BusiStatus.SERVERBUSY);
}
Integer micNum = miniGame.getMicNum();
Integer micNum = micArray.length;
try {
int count = miniGameRoomService.count(Wrappers.<MiniGameRoom>lambdaQuery().eq(MiniGameRoom::getRoomUid, roomUid));
int count = miniGameRoomService.count(Wrappers.<MiniGameRoom>lambdaQuery()
.eq(MiniGameRoom::getRoomUid, roomUid));
if (count == 0) {
//第一次创建房间
log.info("创建房间{}为小游戏房", roomUid);
@@ -254,10 +255,10 @@ public class RoomForMiniGameService extends AbstractRoomService {
miniGameRoom.setRoomUid(roomUid);
miniGameRoom.setState(Constant.MiniGameRoomState.wait);
miniGameRoom.setStatus(Constant.MiniGameRoomStatus.valid);
miniGameRoom.setMicNum(micNum);
miniGameRoomService.saveMiniGameRoomToDbAndCache(miniGameRoom);
//写入游戏房表,写入游戏切换记录表
writeMiniGameSwitchRecord(newRoom, newMgId);
roomMicService.checkMiniGameMicUpdate(roomUid, null, 1, micNum, false);
} else {
if (roomType().getCode().equals(oldRoomType)) {
//当前更新为游戏房,检查游戏是否为原游戏类型
@@ -267,7 +268,6 @@ public class RoomForMiniGameService extends AbstractRoomService {
miniGameRoomService.updateStateByRoomUid(Constant.MiniGameRoomState.wait, roomUid);
//写入游戏房表,写入游戏切换记录表
writeMiniGameSwitchRecord(newRoom, newMgId);
roomMicService.checkMiniGameMicUpdate(roomUid, roomId, 1, micNum, true);
} else {
Long oldMgId = oldMiniGameSwitchRecord.getMgId();
if (oldMgId.equals(newMgId)) {
@@ -277,18 +277,6 @@ public class RoomForMiniGameService extends AbstractRoomService {
log.info("房间{}小游戏类型发生改变,写入新的游戏类型{}", roomUid, newMgId);
miniGameRoomService.updateStateByRoomUid(Constant.MiniGameRoomState.wait, roomUid);
writeMiniGameSwitchRecord(newRoom, newMgId);
MiniGame oldMiniGame = miniGameService.queryMiniGameByMgId(oldMgId);
if (oldMiniGame == null) {
log.error("创建游戏房,根据mgId : {}未查询到相关的小游戏", oldMgId);
throw new ServiceException(BusiStatus.CREATING_A_GAME_ROOM_REQUIRES_PASSING_IN_THE_CORRECT_GAME_ID);
}
// 检查原来游戏类型的麦位人数是否。原游戏麦位人数 < 现变更的游戏麦位人数 则解锁对应麦位
Integer formerMicNum = oldMiniGame.getMicNum();
if (formerMicNum < micNum) {
roomMicService.checkMiniGameMicUpdate(roomUid, roomId, 0, micNum, false);
} else {
roomMicService.checkMiniGameMicUpdate(roomUid, roomId, 1, micNum, true);
}
}
} else {
log.info("房间{}本不是小游戏房,更新为小游戏{}房", roomUid, newMgId);
@@ -301,11 +289,11 @@ public class RoomForMiniGameService extends AbstractRoomService {
miniGameRoom.setRoomUid(roomUid);
miniGameRoom.setState(Constant.MiniGameRoomState.wait);
miniGameRoom.setStatus(Constant.MiniGameRoomStatus.valid);
miniGameRoom.setMicNum(micNum);
miniGameRoomService.saveMiniGameRoomToDbAndCache(miniGameRoom);
}
//写入游戏房表,写入游戏切换记录表
writeMiniGameSwitchRecord(newRoom, newMgId);
roomMicService.checkMiniGameMicUpdate(roomUid, roomId, 1, micNum, true);
}
}
} catch (ServiceException e) {
@@ -352,6 +340,15 @@ public class RoomForMiniGameService extends AbstractRoomService {
MiniGame miniGame = Optional.ofNullable(miniGameService.getById(mgId)).orElse(new MiniGame());
room.setMgName(miniGame.getName());
room.setMgMicNum(miniGame.getMicNum());
List<MiniGameRoom> miniGameRooms = miniGameRoomService.list(Wrappers.<MiniGameRoom>lambdaQuery()
.eq(MiniGameRoom::getRoomUid, roomUid));
if (CollectionUtil.isNotEmpty(miniGameRooms)) {
MiniGameRoom miniGameRoom = miniGameRooms.get(0);
Integer micNum = miniGameRoom.getMicNum();
if (micNum != null && micNum > 0) {
room.setMgMicNum(micNum);
}
}
}
@Override

View File

@@ -162,7 +162,7 @@ public class RoomMicService extends BaseService {
//开启排麦模式的房间
try {
if (room.getRoomModeType() != null && room.getRoomModeType().equals(Constant.RoomModeType.OPEN_MICRO_MODE)) {
Integer second = Constant.DefineProtocol.CUSTOM_MESS_SUB_QUEUE_MICRO_FREE_MIC_OPEN;
int second = Constant.DefineProtocol.CUSTOM_MESS_SUB_QUEUE_MICRO_FREE_MIC_OPEN;
QueueMicroParam queueMicroParam = roomQueueMicroService.buildQueueMicroParam(null, null, position, 0);
if (state == 1) {
second = Constant.DefineProtocol.CUSTOM_MESS_SUB_QUEUE_MICRO_FREE_MIC_CLOSE;
@@ -170,7 +170,7 @@ public class RoomMicService extends BaseService {
roomQueueMicroService.sendChatRoomMsg(roomUid, Constant.DefineProtocol.CUSTOM_MESS_HEAD_QUEUE_MICRO, second, queueMicroParam);
}
} catch (Exception e) {
logger.error("send locksPos message error,error={}", e);
logger.error("send locksPos message error,error={}", e.getMessage(), e);
}
return result;
}
@@ -309,19 +309,16 @@ public class RoomMicService extends BaseService {
try {
lockPos(roomUid, pos, state);
} catch (Exception e) {
e.printStackTrace();
log.info("房间{}锁坑失败坑位信息({})", roomUid, pos);
log.error("游戏房所坑失败", e);
}
// 抱下麦位
if (downLastMicStatus) {
try {
erBanNetEaseService.queuePoll(roomId, String.valueOf(pos));
} catch (Exception e) {
e.printStackTrace();
log.info("移除队列失败roomId({}),麦位信息({})", roomId);
log.error("游戏房下麦失败", e);
log.info("移除队列失败roomId({}),麦位信息({})", roomId, micNum);
log.error("游戏房下麦失败, message : {}", e.getMessage(), e);
}
}
--pos;

View File

@@ -128,6 +128,7 @@ public class MyUserDetailsServiceImpl implements MyUserDetailsService {
String deviceId = deviceInfo.getDeviceId();
String client = deviceInfo.getClient();
String app = deviceInfo.getApp();
String appVersion = deviceInfo.getAppVersion();
Long uid = account.getUid();
Date date = new Date();
// 拦截指定账号登录
@@ -172,7 +173,7 @@ public class MyUserDetailsServiceImpl implements MyUserDetailsService {
account.setLastLoginIp(ip);
accountService.updateById(account);
//更新用户正在使用的app字段
userAppService.updateCurrentApp(uid, app, date, ip);
userAppService.updateCurrentApp(uid, app, date, ip, appVersion);
//将用户信息登记
AccountLoginRecord accountLoginRecord = buildAccountLoginRecord(ip, account, loginType.getValue(), deviceInfo, openId);
loginRecordService.addAccountLoginRecordAsync(accountLoginRecord);

View File

@@ -30,7 +30,7 @@ import java.util.*;
/**
* Created by PaperCut on 2018/8/10.
*/
public class TicketServices implements InitializingBean{
public class TicketServices implements InitializingBean {
private static final Logger logger = LoggerFactory.getLogger(TicketServices.class);
private final int ticketValiditySeconds = 60 * 60; //ticket过期时间
@@ -73,21 +73,21 @@ public class TicketServices implements InitializingBean{
public Map<String, Object> issueTicket(String accessTokenValue) {
OAuth2AccessToken accessToken = tokenStore.readAccessToken(accessTokenValue);
if(accessToken == null){
if (accessToken == null) {
throw new InvalidTokenException("Invalid access token: " + accessTokenValue);
}else if(accessToken.isExpired()){
} else if (accessToken.isExpired()) {
throw new InvalidTokenException("Access token expired: " + accessTokenValue);
}
OAuth2Authentication authentication = tokenStore.readAuthentication(accessToken);
UserDetails userDetails = userDetailsService.loadUserByUsername(authentication.getName());
AccountDetails accountDetails = userDetails instanceof AccountDetails ? (AccountDetails)userDetails : null;
if(accountDetails == null){
AccountDetails accountDetails = userDetails instanceof AccountDetails ? (AccountDetails) userDetails : null;
if (accountDetails == null) {
throw new InvalidTokenException("accountDetails null: " + accessTokenValue);
}
int ticketValidityMillSeconds = calTicketValiditySeconds(accessToken) * 1000;
if(ticketValidityMillSeconds < 2000){
if (ticketValidityMillSeconds < 2000) {
//accessToken剩余2秒超时,直接抛出过期异常
throw new InvalidTokenException("Access token expired: " + accessTokenValue);
}
@@ -96,10 +96,10 @@ public class TicketServices implements InitializingBean{
String uidStr = uid.toString();
String realAccessToken = ticketStore.readAccessToken(uidStr);
logger.info("issueTicket. uid:{},realAccessToken:{},accessTokenValue:{}", uid, realAccessToken, accessTokenValue);
if(StringUtils.isEmpty(realAccessToken)){
if (StringUtils.isEmpty(realAccessToken)) {
throw new InvalidTokenException("accessTokenCache null: " + accessTokenValue);
}
if(!realAccessToken.equals(accessTokenValue)){
if (!realAccessToken.equals(accessTokenValue)) {
throw new InvalidTokenException("acessToken error...please relogin now. " + accessTokenValue);
}
@@ -108,17 +108,17 @@ public class TicketServices implements InitializingBean{
defaultTicket.setExpiresIn(ticketValidityMillSeconds);
List<TicketVo> tickets = new ArrayList<>();
Ticket newTicket = ticketEnhancer.enhance(defaultTicket,authentication,accountDetails);
Ticket newTicket = ticketEnhancer.enhance(defaultTicket, authentication, accountDetails);
ticketStore.storeTicket(newTicket, authentication, accountDetails);
tickets.add(new TicketVo(newTicket));
Map<String,Object> maps = Maps.newHashMap();
maps.put("tickets",tickets);
Map<String, Object> maps = Maps.newHashMap();
maps.put("tickets", tickets);
maps.put("uid", uid);
return maps;
}
private int calTicketValiditySeconds(OAuth2AccessToken accessToken){
private int calTicketValiditySeconds(OAuth2AccessToken accessToken) {
int accessTokenExpiresIn = accessToken.getExpiresIn();
return accessTokenExpiresIn > ticketValiditySeconds ? ticketValiditySeconds : accessTokenExpiresIn;
}
@@ -126,8 +126,7 @@ public class TicketServices implements InitializingBean{
@Async
public void saveLoginRecord(Long uid, String ipAddress, DeviceInfo deviceInfo) {
Optional.ofNullable(uid).ifPresent(id -> {
userAppService.updateCurrentApp(uid, deviceInfo.getApp(), new Date(), ipAddress);
userAppService.updateCurrentApp(uid, deviceInfo.getApp(), new Date(), ipAddress, deviceInfo.getAppVersion());
int count = loginRecordService.countLoginRecordToday(id);
if (count == 0) {
Account account = accountService.getById(id);