Sfoglia il codice sorgente

fix : 登录日志优化

bilingfeng 1 mese fa
parent
commit
721bddeee3

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

@@ -39,6 +39,11 @@ public class UserLoginLog implements Serializable {
      */
     private Long gameId;
 
+    /**
+     * 区服id
+     */
+    private String serverId;
+
     /**
      * 角色id
      */

+ 1 - 1
game-module/game-module-sdk/src/main/java/com/zanxiang/game/module/sdk/SDKApplication.java

@@ -25,7 +25,7 @@ public class SDKApplication {
 
     public static void main(String[] args) {
         SpringApplication.run(SDKApplication.class, args);
-        System.out.println("赞象SDK服务启动成功 <回传逻辑修正> ( ´・・)ノ(._.`) \n" +
+        System.out.println("赞象SDK服务启动成功 <登录日志优化> ( ´・・)ノ(._.`) \n" +
                 " ___________ _   __\n" +
                 "/  ___|  _  \\ | / /\n" +
                 "\\ `--.| | | | |/ / \n" +

+ 9 - 8
game-module/game-module-sdk/src/main/java/com/zanxiang/game/module/sdk/service/IUserLoginLogService.java

@@ -2,6 +2,8 @@ package com.zanxiang.game.module.sdk.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.zanxiang.game.module.mybatis.entity.UserLoginLog;
+import com.zanxiang.game.module.sdk.enums.LoginTypeEnum;
+import com.zanxiang.game.module.sdk.pojo.param.GameUserRoleUpdateParam;
 import com.zanxiang.game.module.sdk.pojo.param.UserData;
 
 /**
@@ -14,20 +16,19 @@ public interface IUserLoginLogService extends IService<UserLoginLog> {
     /**
      * 创建角色登录日志
      *
-     * @param userData 用户
-     * @param type     类型
-     * @param roleId   角色id
-     * @param roleName 角色名字
+     * @param userData      用户
+     * @param param         上报参数
+     * @param loginTypeEnum 登录类型
      * @return {@link Boolean}
      */
-    Boolean createRoleLoginLog(UserData userData, String roleId, String roleName, Integer type);
+    Boolean createRoleLoginLog(UserData userData, GameUserRoleUpdateParam param, LoginTypeEnum loginTypeEnum);
 
     /**
      * 创建用户登录日志
      *
-     * @param type     类型
-     * @param userData 用户数据
+     * @param userData      用户数据
+     * @param loginTypeEnum 登录类型
      * @return {@link Boolean}
      */
-    Boolean createUserLoginLog(UserData userData, Integer type);
+    Boolean createUserLoginLog(UserData userData, LoginTypeEnum loginTypeEnum);
 }

+ 3 - 6
game-module/game-module-sdk/src/main/java/com/zanxiang/game/module/sdk/service/impl/GameUserRoleServiceImpl.java

@@ -136,8 +136,7 @@ public class GameUserRoleServiceImpl extends ServiceImpl<GameUserRoleMapper, Gam
             //新建游戏角色
             this.gameRoleCreate(param, userData);
             //插入用户登录记录
-            return userLoginLogService.createRoleLoginLog(userData, param.getRoleId(), param.getRoleName(),
-                    LoginTypeEnum.LOGIN_IN.getLoginType());
+            return userLoginLogService.createRoleLoginLog(userData, param, LoginTypeEnum.LOGIN_IN);
         }
         //判断角色是否存在
         GameUserRole gameUserRole = super.getOne(new LambdaQueryWrapper<GameUserRole>()
@@ -154,13 +153,11 @@ public class GameUserRoleServiceImpl extends ServiceImpl<GameUserRoleMapper, Gam
         }
         //进入游戏, 插入用户登录记录
         if (Objects.equals(dataType, DataTypeEnum.TYPE_ENTER_GAME.getDateType())) {
-            userLoginLogService.createRoleLoginLog(userData, param.getRoleId(), param.getRoleName(),
-                    LoginTypeEnum.LOGIN_IN.getLoginType());
+            userLoginLogService.createRoleLoginLog(userData, param, LoginTypeEnum.LOGIN_IN);
         }
         //退出游戏, 插入用户退出记录
         if (Objects.equals(dataType, DataTypeEnum.TYPE_EXIT_GAME.getDateType())) {
-            userLoginLogService.createRoleLoginLog(userData, param.getRoleId(), param.getRoleName(),
-                    LoginTypeEnum.LOGIN_OUT.getLoginType());
+            userLoginLogService.createRoleLoginLog(userData, param, LoginTypeEnum.LOGIN_OUT);
         }
         return Boolean.TRUE;
     }

+ 11 - 16
game-module/game-module-sdk/src/main/java/com/zanxiang/game/module/sdk/service/impl/LoginServiceImpl.java

@@ -147,8 +147,7 @@ public class LoginServiceImpl implements IRegisterLoginService {
             //渠道更新和回传判断
             agentService.userAgentUpdate(user, userData);
             //返回登录信息
-            UserLoginVO userLoginVO = this.createUserLoginVO(user, userData);
-            userLoginVO.setRegUser(Boolean.FALSE);
+            UserLoginVO userLoginVO = this.createUserLoginVO(user, userData, Boolean.FALSE);
             userLoginVO.setAppletShellSwitch(gameAppletShellService.getUserShellSwitch(user, Boolean.FALSE, request));
             userLoginVO.setAccessToken(wxApiService.getAccessToken(gameAppletDTO.getAppId(), gameAppletDTO.getAppSecret()));
             log.error("返回用户登录信息, userLoginVO : {}", JsonUtil.toString(userLoginVO));
@@ -157,8 +156,7 @@ public class LoginServiceImpl implements IRegisterLoginService {
         //用户注册
         user = userCreateSave(userData, openId, null, null, openId, sessionKey);
         //返回登录信息
-        UserLoginVO userLoginVO = this.createUserLoginVO(user, userData);
-        userLoginVO.setRegUser(Boolean.TRUE);
+        UserLoginVO userLoginVO = this.createUserLoginVO(user, userData, Boolean.TRUE);
         userLoginVO.setAppletShellSwitch(gameAppletShellService.getUserShellSwitch(user, Boolean.TRUE, request));
         userLoginVO.setAccessToken(wxApiService.getAccessToken(gameAppletDTO.getAppId(), gameAppletDTO.getAppSecret()));
         log.error("返回用户登录信息, userLoginVO : {}", JsonUtil.toString(userLoginVO));
@@ -205,13 +203,12 @@ public class LoginServiceImpl implements IRegisterLoginService {
             //渠道更新和回传判断
             agentService.userAgentUpdate(user, userData);
             //登录信息
-            UserLoginVO userLoginVO = this.createUserLoginVO(user, userData);
+            UserLoginVO userLoginVO = this.createUserLoginVO(user, userData, Boolean.FALSE);
             Tuple2<Boolean, Long> tuple2 = this.userGuideCheck(user);
             //导量用户返回原有的用户id
             if (tuple2.getT1()) {
                 userLoginVO.setUserId(tuple2.getT2());
             }
-            userLoginVO.setRegUser(Boolean.FALSE);
             //返回登录信息
             return ResultVO.ok(userLoginVO);
         }
@@ -223,8 +220,7 @@ public class LoginServiceImpl implements IRegisterLoginService {
         //用户注册
         user = userCreateSave(userData, username, RegisterUtil.cmfPassword(password), null, null, null);
         //返回登录信息
-        UserLoginVO userLoginVO = this.createUserLoginVO(user, userData);
-        userLoginVO.setRegUser(Boolean.TRUE);
+        UserLoginVO userLoginVO = this.createUserLoginVO(user, userData, Boolean.TRUE);
         return ResultVO.ok(userLoginVO);
     }
 
@@ -253,7 +249,7 @@ public class LoginServiceImpl implements IRegisterLoginService {
             }
             //渠道更新和回传判断
             agentService.userAgentUpdate(user, userData);
-            UserLoginVO userLoginVO = this.createUserLoginVO(user, userData);
+            UserLoginVO userLoginVO = this.createUserLoginVO(user, userData, Boolean.FALSE);
             //判断是否导量用户
             Tuple2<Boolean, Long> tuple2 = this.userGuideCheck(user);
             //导量用户返回原有的用户id
@@ -261,15 +257,13 @@ public class LoginServiceImpl implements IRegisterLoginService {
                 userLoginVO.setUserId(tuple2.getT2());
                 log.error("导量用户返回用户信息, userLoginVO : {}", JsonUtil.toString(userLoginVO));
             }
-            userLoginVO.setRegUser(Boolean.FALSE);
             //返回登录信息
             return ResultVO.ok(userLoginVO);
         }
         //用户注册
         user = userCreateSave(userData, mobile, null, mobile, null, null);
         //返回登录信息
-        UserLoginVO userLoginVO = this.createUserLoginVO(user, userData);
-        userLoginVO.setRegUser(Boolean.TRUE);
+        UserLoginVO userLoginVO = this.createUserLoginVO(user, userData, Boolean.TRUE);
         return ResultVO.ok(userLoginVO);
     }
 
@@ -332,7 +326,7 @@ public class LoginServiceImpl implements IRegisterLoginService {
         //注册信息埋点数据发送到卡夫卡
         kafkaService.eventTrack(KafkaEventTrackEnum.KAFKA_EVENT_TRACK_REG, JsonUtil.toString(user));
         //发送到IP解析任务队列
-        redisUtil.addToSet(RedisKeyConstant.IP_DATA_ASSAY_QUEUE, "REG:" + user.getId()+ ":" + user.getIp());
+        redisUtil.addToSet(RedisKeyConstant.IP_DATA_ASSAY_QUEUE, "REG:" + user.getId() + ":" + user.getIp());
         //返回用户信息
         return user;
     }
@@ -360,7 +354,7 @@ public class LoginServiceImpl implements IRegisterLoginService {
                 .build();
     }
 
-    private UserLoginVO createUserLoginVO(User user, UserData userData) {
+    private UserLoginVO createUserLoginVO(User user, UserData userData, Boolean regUser) {
         //注册, 补全 userData 中的用户id
         if (userData.getUserId() == null) {
             userData.setUserId(user.getId());
@@ -371,7 +365,7 @@ public class LoginServiceImpl implements IRegisterLoginService {
         //获取token
         String userToken = userTokenService.getUserToken(user.getId(), userData.getDeviceType());
         //插入用户登录记录
-        userLoginLogService.createUserLoginLog(userData, LoginTypeEnum.LOGIN_REG.getLoginType());
+        userLoginLogService.createUserLoginLog(userData, regUser ? LoginTypeEnum.LOGIN_REG : LoginTypeEnum.LOGIN_IN);
         //查询用户实名信息
         UserCard userCard = userCardService.getOne(new LambdaQueryWrapper<UserCard>()
                 .eq(UserCard::getUserId, user.getId())
@@ -392,6 +386,7 @@ public class LoginServiceImpl implements IRegisterLoginService {
                 .cardName(userCard == null ? null : userCard.getShowCardName())
                 .cardId(userCard == null ? null : userCard.getShowCardId())
                 .checkSwitch(gameExt.getCheckSwitch())
+                .regUser(regUser)
                 .build();
         log.error("用户登录返回登录信息, userLoginVO : {}", JsonUtil.toString(userLoginVO));
         return userLoginVO;
@@ -401,7 +396,7 @@ public class LoginServiceImpl implements IRegisterLoginService {
     @Transactional(rollbackFor = Exception.class)
     public Boolean loginOut(UserData userData) {
         //新增用户退出记录
-        return userLoginLogService.createUserLoginLog(userData, LoginTypeEnum.LOGIN_OUT.getLoginType());
+        return userLoginLogService.createUserLoginLog(userData, LoginTypeEnum.LOGIN_OUT);
     }
 
     @Override

+ 13 - 8
game-module/game-module-sdk/src/main/java/com/zanxiang/game/module/sdk/service/impl/UserLoginLogServiceImpl.java

@@ -4,6 +4,8 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.zanxiang.game.module.mybatis.entity.UserLoginLog;
 import com.zanxiang.game.module.mybatis.mapper.UserLoginLogMapper;
 import com.zanxiang.game.module.sdk.constant.RedisKeyConstant;
+import com.zanxiang.game.module.sdk.enums.LoginTypeEnum;
+import com.zanxiang.game.module.sdk.pojo.param.GameUserRoleUpdateParam;
 import com.zanxiang.game.module.sdk.pojo.param.UserData;
 import com.zanxiang.game.module.sdk.service.IUserLoginLogService;
 import com.zanxiang.game.module.sdk.util.RedisUtil;
@@ -26,39 +28,42 @@ public class UserLoginLogServiceImpl extends ServiceImpl<UserLoginLogMapper, Use
     private RedisUtil<String> redisUtil;
 
     @Override
-    public Boolean createRoleLoginLog(UserData userData, String roleId, String roleName, Integer type) {
+    public Boolean createRoleLoginLog(UserData userData, GameUserRoleUpdateParam param, LoginTypeEnum loginTypeEnum) {
         UserLoginLog loginLog = UserLoginLog.builder()
                 .userId(userData.getUserId())
                 .gameId(userData.getGameId())
-                .roleId(roleId)
-                .roleName(roleName)
+                .serverId(param.getServerId())
+                .roleId(param.getRoleId())
+                .roleName(param.getRoleName())
                 .os(userData.getDeviceSystem())
                 .ip(userData.getIp())
                 .deviceType(userData.getDeviceType())
-                .type(type)
+                .type(loginTypeEnum.getLoginType())
                 .createTime(LocalDateTime.now())
                 .build();
         boolean result = super.save(loginLog);
         if (result) {
-            redisUtil.addToSet(RedisKeyConstant.IP_DATA_ASSAY_QUEUE, "LOGIN:" + loginLog.getId() + ":" + loginLog.getIp());
+            redisUtil.addToSet(RedisKeyConstant.IP_DATA_ASSAY_QUEUE,
+                    "LOGIN:" + loginLog.getId() + ":" + loginLog.getIp());
         }
         return result;
     }
 
     @Override
-    public Boolean createUserLoginLog(UserData userData, Integer type) {
+    public Boolean createUserLoginLog(UserData userData, LoginTypeEnum loginTypeEnum) {
         UserLoginLog loginLog = UserLoginLog.builder()
                 .userId(userData.getUserId())
                 .gameId(userData.getGameId())
                 .os(userData.getDeviceSystem())
                 .ip(userData.getIp())
                 .deviceType(userData.getDeviceType())
-                .type(type)
+                .type(loginTypeEnum.getLoginType())
                 .createTime(LocalDateTime.now())
                 .build();
         boolean result = super.save(loginLog);
         if (result) {
-            redisUtil.addToSet(RedisKeyConstant.IP_DATA_ASSAY_QUEUE, "LOGIN:" + loginLog.getId() + ":" + loginLog.getIp());
+            redisUtil.addToSet(RedisKeyConstant.IP_DATA_ASSAY_QUEUE,
+                    "LOGIN:" + loginLog.getId() + ":" + loginLog.getIp());
         }
         return result;
     }

+ 1 - 1
game-module/game-module-sdk/src/main/java/com/zanxiang/game/module/sdk/service/impl/UserTokenServiceImpl.java

@@ -243,7 +243,7 @@ public class UserTokenServiceImpl extends ServiceImpl<UserTokenMapper, UserToken
         boolean result = expireTime > endTime;
         //token未过期, 记录登录日志
         if (result) {
-            userLoginLogService.createUserLoginLog(userData, LoginTypeEnum.LOGIN_IN.getLoginType());
+            userLoginLogService.createUserLoginLog(userData, LoginTypeEnum.LOGIN_IN);
         }
         return result;
     }