Quellcode durchsuchen

feat : SDK修改

bilingfeng vor 2 Jahren
Ursprung
Commit
136e99644b

+ 0 - 10
game-module/game-mybatis/src/main/java/com/zanxiang/mybatis/entity/GameUser.java

@@ -52,16 +52,6 @@ public class GameUser {
      */
     private String nickname;
 
-    /**
-     * 最近默认 2 默认 1 不默认
-     */
-    private Boolean isDefault;
-
-    /**
-     * 状态 2正常 1锁定
-     */
-    private Boolean status;
-
     /**
      * 充值次数
      */

+ 5 - 0
game-module/game-mybatis/src/main/java/com/zanxiang/mybatis/entity/UserLoginLog.java

@@ -41,6 +41,11 @@ public class UserLoginLog {
      */
     private String roleId;
 
+    /**
+     * 角色名称
+     */
+    private String roleName;
+
     /**
      * 操作系统
      */

+ 34 - 0
game-module/game-sdk/src/main/java/com/zanxiang/sdk/enums/LoginTypeEnum.java

@@ -0,0 +1,34 @@
+package com.zanxiang.sdk.enums;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+/**
+ * @author : lingfeng
+ * @time : 2022-11-11
+ * @description : 用户登录枚举
+ */
+@Getter
+@AllArgsConstructor
+public enum LoginTypeEnum {
+
+    /**
+     * 登录
+     */
+    LOGIN_IN(0, "登录"),
+
+    /**
+     * 退出
+     */
+    LOGIN_OUT(1, "退出");
+
+    /**
+     * 登录类型
+     */
+    private Integer loginType;
+
+    /**
+     * 描述
+     */
+    private String name;
+}

+ 80 - 35
game-module/game-sdk/src/main/java/com/zanxiang/sdk/service/Impl/GameUserRoleServiceImpl.java

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

+ 9 - 3
game-module/game-sdk/src/main/java/com/zanxiang/sdk/service/Impl/GameUserServiceImpl.java

@@ -19,11 +19,18 @@ import java.time.LocalDateTime;
 @Service
 public class GameUserServiceImpl extends ServiceImpl<GameUserMapper, GameUser> implements GameUserService {
 
+    /**
+     * 创建游戏用户
+     *
+     * @param user 用户
+     */
     @Override
     public void createGameUser(User user) {
         //查询玩家信息
-        GameUser gameUser = super.getOne(new LambdaQueryWrapper<GameUser>().eq(GameUser::getGameId, user.getGameId())
+        GameUser gameUser = super.getOne(new LambdaQueryWrapper<GameUser>()
+                .eq(GameUser::getGameId, user.getGameId())
                 .eq(GameUser::getUserId, user.getId()));
+        //玩家信息已存在
         if (gameUser != null) {
             return;
         }
@@ -31,8 +38,7 @@ public class GameUserServiceImpl extends ServiceImpl<GameUserMapper, GameUser> i
                 .userId(user.getId())
                 .agentId(user.getAgentId())
                 .gameId(user.getGameId())
-                .roleCount(0)
-                .roleVipMax(0)
+                .nickname(user.getNickname())
                 .createTime(LocalDateTime.now())
                 .updateTime(LocalDateTime.now())
                 .build());

+ 9 - 11
game-module/game-sdk/src/main/java/com/zanxiang/sdk/service/Impl/LoginServiceImpl.java

@@ -9,7 +9,6 @@ import com.zanxiang.common.exception.BaseException;
 import com.zanxiang.common.text.UUID;
 import com.zanxiang.common.utils.URIUtil;
 import com.zanxiang.module.util.JsonUtil;
-import com.zanxiang.module.web.util.IpUtil;
 import com.zanxiang.mybatis.entity.GameExt;
 import com.zanxiang.mybatis.entity.User;
 import com.zanxiang.mybatis.entity.UserCard;
@@ -21,6 +20,7 @@ import com.zanxiang.sdk.domain.params.LoginPasswordParam;
 import com.zanxiang.sdk.domain.params.QqLoginCallbackParam;
 import com.zanxiang.sdk.domain.params.UserData;
 import com.zanxiang.sdk.domain.vo.UserLoginVO;
+import com.zanxiang.sdk.enums.LoginTypeEnum;
 import com.zanxiang.sdk.service.*;
 import com.zanxiang.sdk.util.RedisUtil;
 import com.zanxiang.sdk.util.RegexUtil;
@@ -171,6 +171,7 @@ public class LoginServiceImpl implements RegisterLoginService {
                     .build();
             userService.save(user);
             gameUserService.createGameUser(user);
+            callBackService.userCallBack(user);
         }
         //返回登录信息
         return new ResultVO<>(this.createUserLoginVO(user, userData));
@@ -220,6 +221,7 @@ public class LoginServiceImpl implements RegisterLoginService {
                     .build();
             userService.save(user);
             gameUserService.createGameUser(user);
+            callBackService.userCallBack(user);
         } else {
             //判断账号是否停用
             if (Objects.equals(AccountStatusEnum.FROZEN_STATUS.getStatus(), user.getStatus())) {
@@ -241,7 +243,7 @@ public class LoginServiceImpl implements RegisterLoginService {
         //获取token
         String userToken = userTokenService.getUserToken(user.getId(), userData.getDeviceType());
         //插入用户登录记录
-        userLoginLogService.addUserLoginLog(userData.getIp(), user, userData.getGameId(), 0);
+        userLoginLogService.createUserLoginLog(user, LoginTypeEnum.LOGIN_IN.getLoginType());
         //查询用户实名信息
         UserCard userCard = userCardService.getOne(new LambdaQueryWrapper<UserCard>().eq(UserCard::getUserId, user.getId()));
         //查询游戏
@@ -260,7 +262,6 @@ public class LoginServiceImpl implements RegisterLoginService {
                 .checkSwitch(gameExt.getCheckSwitch())
                 .build();
         log.error("用户登录返回登录信息, userLoginVO : {}", JsonUtil.toString(userLoginVO));
-        callBackService.userCallBack(user);
         return userLoginVO;
     }
 
@@ -273,8 +274,9 @@ public class LoginServiceImpl implements RegisterLoginService {
     @Override
     @Transactional(rollbackFor = Exception.class)
     public Boolean loginOut(UserData userData) {
+        User user = userService.getById(userData.getUserId());
         //新增用户退出记录
-        return Boolean.TRUE;
+        return userLoginLogService.createUserLoginLog(user, LoginTypeEnum.LOGIN_OUT.getLoginType());
     }
 
     /**
@@ -365,10 +367,8 @@ public class LoginServiceImpl implements RegisterLoginService {
         User user = this.getUserByUserOauth(deviceType, userInfoMap, userOauthDTO);
         //用户登录成功
         String userToken = userTokenService.getUserToken(userOauthDTO.getId(), deviceType);
-        //登录的ip
-        String realIp = IpUtil.getRealIp(request);
         //插入用户登录记录
-        userLoginLogService.addUserLoginLog(realIp, user, Long.valueOf(param.getGameId()), 0);
+        userLoginLogService.createUserLoginLog(user, LoginTypeEnum.LOGIN_IN.getLoginType());
         //移出state
         redisUtil.removeOfSet(RedisKeyConstant.AUTH_STATE_KEY, state);
         //构造返回
@@ -422,12 +422,10 @@ public class LoginServiceImpl implements RegisterLoginService {
         UserOauthDTO userOauthDTO = userOauthService.getUserOauthByOpenId(userInfoMap.get("openId"));
         //获取用户信息
         User user = this.getUserByUserOauth(deviceType, userInfoMap, userOauthDTO);
-        //登录的ip
-        String realIp = IpUtil.getRealIp(request);
+        //插入用户登录记录
+        userLoginLogService.createUserLoginLog(user, LoginTypeEnum.LOGIN_IN.getLoginType());
         //用户登录成功
         String userToken = userTokenService.getUserToken(userOauthDTO.getId(), deviceType);
-        //插入用户登录记录
-        userLoginLogService.addUserLoginLog(realIp, user, Long.valueOf(param.getGameId()), 0);
         //移出state
         redisUtil.removeOfSet(RedisKeyConstant.AUTH_STATE_KEY, state);
         //构造返回

+ 48 - 10
game-module/game-sdk/src/main/java/com/zanxiang/sdk/service/Impl/UserLoginLogServiceImpl.java

@@ -1,14 +1,21 @@
 package com.zanxiang.sdk.service.Impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.zanxiang.common.enums.DeviceTypeEnum;
+import com.zanxiang.mybatis.entity.GameUserRole;
 import com.zanxiang.mybatis.entity.User;
 import com.zanxiang.mybatis.entity.UserLoginLog;
 import com.zanxiang.mybatis.mapper.UserLoginLogMapper;
+import com.zanxiang.sdk.domain.params.UserData;
+import com.zanxiang.sdk.service.GameUserRoleService;
 import com.zanxiang.sdk.service.UserLoginLogService;
 import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.time.LocalDateTime;
+
 /**
  * @author : lingfeng
  * @time : 2022-06-13
@@ -18,23 +25,54 @@ import org.springframework.stereotype.Service;
 @Service
 public class UserLoginLogServiceImpl extends ServiceImpl<UserLoginLogMapper, UserLoginLog> implements UserLoginLogService {
 
+    @Autowired
+    private GameUserRoleService gameUserRoleService;
+
     /**
-     * 添加用户登录日志
+     * 创建角色登录日志
      *
-     * @param realIp : 用户ip
-     * @param user   : 用户信息
-     * @param gameId : 游戏id
+     * @param userData 用户
+     * @param type     类型
+     * @param roleId   角色id
+     * @return {@link Boolean}
      */
     @Override
-    public void addUserLoginLog(String realIp, User user, Long gameId, Integer type) {
+    public Boolean createRoleLoginLog(UserData userData, String roleId, Integer type) {
+        //查询玩家角色信息
+        GameUserRole userRole = gameUserRoleService.getOne(new LambdaQueryWrapper<GameUserRole>()
+                .eq(GameUserRole::getGameId, userData.getGameId())
+                .eq(GameUserRole::getRoleId, roleId));
         //创建对象
-        UserLoginLog userLoginLog = UserLoginLog.builder()
+        return super.save(UserLoginLog.builder()
+                .userId(userData.getUserId())
+                .gameId(userData.getGameId())
+                .roleId(userRole == null ? null : userRole.getRoleId())
+                .roleName(userRole == null ? null : userRole.getRoleName())
+                .os(userData.getDeviceSystem())
+                .ip(userData.getIp())
+                .deviceType(DeviceTypeEnum.DEVICE_TYPE_ANDROID.getDeviceType())
+                .type(type)
+                .createTime(LocalDateTime.now())
+                .build());
+    }
+
+    /**
+     * 创建用户登录日志
+     *
+     * @param user 用户
+     * @param type 类型
+     * @return {@link Boolean}
+     */
+    @Override
+    public Boolean createUserLoginLog(User user, Integer type) {
+        return super.save(UserLoginLog.builder()
                 .userId(user.getId())
-                .gameId(gameId)
-                .ip(realIp)
+                .gameId(user.getGameId())
+                .os(user.getDeviceSystem())
+                .ip(user.getIp())
                 .deviceType(DeviceTypeEnum.DEVICE_TYPE_ANDROID.getDeviceType())
                 .type(type)
-                .build();
-        super.save(userLoginLog);
+                .createTime(LocalDateTime.now())
+                .build());
     }
 }

+ 16 - 6
game-module/game-sdk/src/main/java/com/zanxiang/sdk/service/UserLoginLogService.java

@@ -1,6 +1,7 @@
 package com.zanxiang.sdk.service;
 
 import com.zanxiang.mybatis.entity.User;
+import com.zanxiang.sdk.domain.params.UserData;
 
 /**
  * @author : lingfeng
@@ -10,12 +11,21 @@ import com.zanxiang.mybatis.entity.User;
 public interface UserLoginLogService {
 
     /**
-     * 添加用户登录日志
+     * 创建角色登录日志
      *
-     * @param realIp : 用户ip
-     * @param user   : 用户信息
-     * @param gameId : 游戏id
-     * @param type   : 类型, 0 : 登录, 1 : 注销
+     * @param userData 用户
+     * @param type     类型
+     * @param roleId   角色id
+     * @return {@link Boolean}
      */
-    void addUserLoginLog(String realIp, User user, Long gameId, Integer type);
+    Boolean createRoleLoginLog(UserData userData, String roleId, Integer type);
+
+    /**
+     * 创建用户登录日志
+     *
+     * @param user 用户
+     * @param type 类型
+     * @return {@link Boolean}
+     */
+    Boolean createUserLoginLog(User user, Integer type);
 }