|
@@ -4,21 +4,28 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
|
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
|
import com.zanxiang.module.redis.service.IDistributedLockComponent;
|
|
|
+import com.zanxiang.module.util.DateUtil;
|
|
|
import com.zanxiang.module.util.JsonUtil;
|
|
|
import com.zanxiang.mybatis.entity.GameUser;
|
|
|
import com.zanxiang.mybatis.entity.GameUserRole;
|
|
|
+import com.zanxiang.mybatis.entity.User;
|
|
|
import com.zanxiang.mybatis.mapper.GameUserRoleMapper;
|
|
|
import com.zanxiang.sdk.constant.RedisKeyConstant;
|
|
|
import com.zanxiang.sdk.domain.params.GameUserRoleUpdateParam;
|
|
|
import com.zanxiang.sdk.domain.params.UserData;
|
|
|
+import com.zanxiang.sdk.enums.DataTypeEnum;
|
|
|
+import com.zanxiang.sdk.enums.LoginTypeEnum;
|
|
|
import com.zanxiang.sdk.service.GameUserRoleService;
|
|
|
import com.zanxiang.sdk.service.GameUserService;
|
|
|
+import com.zanxiang.sdk.service.UserLoginLogService;
|
|
|
+import com.zanxiang.sdk.service.UserService;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
|
import java.time.LocalDateTime;
|
|
|
+import java.util.Objects;
|
|
|
import java.util.concurrent.TimeUnit;
|
|
|
|
|
|
/**
|
|
@@ -32,6 +39,12 @@ public class GameUserRoleServiceImpl extends ServiceImpl<GameUserRoleMapper, Gam
|
|
|
@Autowired
|
|
|
private GameUserService gameUserService;
|
|
|
|
|
|
+ @Autowired
|
|
|
+ private UserService userService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private UserLoginLogService userLoginLogService;
|
|
|
+
|
|
|
@Autowired
|
|
|
private IDistributedLockComponent distributedLockComponent;
|
|
|
|
|
@@ -39,40 +52,20 @@ public class GameUserRoleServiceImpl extends ServiceImpl<GameUserRoleMapper, Gam
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
public Boolean updateUserGameRole(GameUserRoleUpdateParam param, UserData userData) {
|
|
|
log.error("上报用户信息, param : {}", JsonUtil.toString(param));
|
|
|
- if (!distributedLockComponent.doLock(RedisKeyConstant.ROLE_UPDATE_KEY + "_" + userData.getUserId(), 0L, 1L, TimeUnit.MINUTES)) {
|
|
|
- return Boolean.FALSE;
|
|
|
- }
|
|
|
//上报类型
|
|
|
Integer dataType = param.getDataType();
|
|
|
- //查询玩家信息
|
|
|
- GameUser gameUser = gameUserService.getOne(new LambdaQueryWrapper<GameUser>().eq(GameUser::getGameId, userData.getGameId())
|
|
|
- .eq(GameUser::getUserId, userData.getUserId()));
|
|
|
- //获取用户角色信息
|
|
|
- GameUserRole userRole = this.getOne(new LambdaQueryWrapper<GameUserRole>()
|
|
|
- .eq(GameUserRole::getGameId, userData.getGameId())
|
|
|
- .eq(GameUserRole::getRoleId, param.getRoleId()));
|
|
|
- //角色信息不存在, 创建
|
|
|
- if (userRole == null) {
|
|
|
- userRole = GameUserRole.builder()
|
|
|
- .userId(userData.getUserId())
|
|
|
- .gameUserId(gameUser.getId())
|
|
|
- .gameId(userData.getGameId())
|
|
|
- .serverId(param.getServerId())
|
|
|
- .serverName(param.getServerName())
|
|
|
- .roleId(param.getRoleId())
|
|
|
- .roleName(param.getRoleName())
|
|
|
- .roleLevel(param.getRoleLevel())
|
|
|
- .roleVipLevel(param.getRoleVipLevel())
|
|
|
- .rolePower(param.getRolePower())
|
|
|
- .platformCoin(param.getPlatformCoin())
|
|
|
- .os(userData.getDeviceSystem())
|
|
|
- .createTime(LocalDateTime.now())
|
|
|
- .updateTime(LocalDateTime.now())
|
|
|
- .lastLoginTime(LocalDateTime.now())
|
|
|
- .build();
|
|
|
- super.save(userRole);
|
|
|
- } else {
|
|
|
- super.update(new LambdaUpdateWrapper<GameUserRole>()
|
|
|
+ //创建角色
|
|
|
+ if (Objects.equals(dataType, DataTypeEnum.TYPE_CREATE_ROLE.getDateType())) {
|
|
|
+ return this.createRoleUpdate(param, userData);
|
|
|
+ }
|
|
|
+ //进入游戏
|
|
|
+ if (Objects.equals(dataType, DataTypeEnum.TYPE_ENTER_GAME.getDateType())) {
|
|
|
+ //插入用户登录记录
|
|
|
+ return userLoginLogService.createRoleLoginLog(userData, param.getRoleId(), LoginTypeEnum.LOGIN_IN.getLoginType());
|
|
|
+ }
|
|
|
+ //等级提升更新
|
|
|
+ if (Objects.equals(dataType, DataTypeEnum.TYPE_LEVEL_UP.getDateType())) {
|
|
|
+ return super.update(new LambdaUpdateWrapper<GameUserRole>()
|
|
|
.set(GameUserRole::getRoleName, param.getRoleName())
|
|
|
.set(GameUserRole::getRoleLevel, param.getRoleLevel())
|
|
|
.set(GameUserRole::getServerId, param.getServerId())
|
|
@@ -80,12 +73,64 @@ public class GameUserRoleServiceImpl extends ServiceImpl<GameUserRoleMapper, Gam
|
|
|
.set(param.getRoleVipLevel() != null, GameUserRole::getRoleVipLevel, param.getRoleVipLevel())
|
|
|
.set(param.getRolePower() != null, GameUserRole::getRolePower, param.getRolePower())
|
|
|
.set(param.getPlatformCoin() != null, GameUserRole::getPlatformCoin, param.getPlatformCoin())
|
|
|
- .set(GameUserRole::getUpdateTime, LocalDateTime.now())
|
|
|
+ .set(GameUserRole::getUpdateTime, param.getRoleGradeUpdateTime() == null ? LocalDateTime.now() : DateUtil.secondToLocalDateTime(param.getRoleGradeUpdateTime()))
|
|
|
.eq(GameUserRole::getGameId, userData.getGameId())
|
|
|
- .eq(GameUserRole::getRoleId, param.getRoleId())
|
|
|
- );
|
|
|
+ .eq(GameUserRole::getRoleId, param.getRoleId()));
|
|
|
+ }
|
|
|
+ //退出游戏
|
|
|
+ if (Objects.equals(dataType, DataTypeEnum.TYPE_EXIT_GAME.getDateType())) {
|
|
|
+ //插入用户退出记录
|
|
|
+ return userLoginLogService.createRoleLoginLog(userData, param.getRoleId(), LoginTypeEnum.LOGIN_IN.getLoginType());
|
|
|
+ }
|
|
|
+ return Boolean.FALSE;
|
|
|
+ }
|
|
|
+
|
|
|
+ private Boolean createRoleUpdate(GameUserRoleUpdateParam param, UserData userData) {
|
|
|
+ //上锁
|
|
|
+ if (!distributedLockComponent.doLock(RedisKeyConstant.ROLE_UPDATE_KEY + "_" + userData.getUserId(), 0L, 1L, TimeUnit.MINUTES)) {
|
|
|
+ return Boolean.FALSE;
|
|
|
+ }
|
|
|
+ //查询玩家信息
|
|
|
+ GameUser gameUser = gameUserService.getOne(new LambdaQueryWrapper<GameUser>().eq(GameUser::getGameId, userData.getGameId())
|
|
|
+ .eq(GameUser::getUserId, userData.getUserId()));
|
|
|
+ //查询玩家角色信息
|
|
|
+ GameUserRole userRole = this.getOne(new LambdaQueryWrapper<GameUserRole>()
|
|
|
+ .eq(GameUserRole::getGameId, userData.getGameId())
|
|
|
+ .eq(GameUserRole::getRoleId, param.getRoleId()));
|
|
|
+ if (userRole != null) {
|
|
|
+ return Boolean.TRUE;
|
|
|
}
|
|
|
+ userRole = GameUserRole.builder()
|
|
|
+ .userId(userData.getUserId())
|
|
|
+ .gameUserId(gameUser.getId())
|
|
|
+ .gameId(userData.getGameId())
|
|
|
+ .serverId(param.getServerId())
|
|
|
+ .serverName(param.getServerName())
|
|
|
+ .roleId(param.getRoleId())
|
|
|
+ .roleName(param.getRoleName())
|
|
|
+ .roleLevel(param.getRoleLevel())
|
|
|
+ .roleVipLevel(param.getRoleVipLevel())
|
|
|
+ .rolePower(param.getRolePower())
|
|
|
+ .platformCoin(param.getPlatformCoin())
|
|
|
+ .os(userData.getDeviceSystem())
|
|
|
+ .createTime(param.getRoleGradeUpdateTime() == null ? LocalDateTime.now() : DateUtil.secondToLocalDateTime(param.getRoleGradeUpdateTime()))
|
|
|
+ .updateTime(LocalDateTime.now())
|
|
|
+ .lastLoginTime(LocalDateTime.now())
|
|
|
+ .build();
|
|
|
+ super.save(userRole);
|
|
|
+ //更新玩家创角数
|
|
|
+ gameUserService.update(new LambdaUpdateWrapper<GameUser>()
|
|
|
+ .setSql("role_count=role_count+" + 1)
|
|
|
+ .set(GameUser::getUpdateTime, LocalDateTime.now())
|
|
|
+ .eq(GameUser::getId, gameUser.getId()));
|
|
|
+ //更新用户创角数
|
|
|
+ userService.update(new LambdaUpdateWrapper<User>()
|
|
|
+ .setSql("role_count=role_count+" + 1)
|
|
|
+ .set(User::getUpdateTime, LocalDateTime.now())
|
|
|
+ .eq(User::getId, gameUser.getUserId()));
|
|
|
+ //释放锁
|
|
|
distributedLockComponent.unlock(RedisKeyConstant.ROLE_UPDATE_KEY + "_" + userData.getUserId());
|
|
|
+ //返回
|
|
|
return Boolean.TRUE;
|
|
|
}
|
|
|
}
|