瀏覽代碼

fix : 小游戏导量H5上线

bilingfeng 1 年之前
父節點
當前提交
56f574a73e

+ 2 - 2
game-module/game-module-mybatis/src/main/java/com/zanxiang/game/module/mybatis/entity/User.java

@@ -172,12 +172,12 @@ public class User implements Serializable {
     private Long shareUserId;
     private Long shareUserId;
 
 
     /**
     /**
-     * 关联用户id
+     * 关联用户id
      */
      */
     private Long relationUserId;
     private Long relationUserId;
 
 
     /**
     /**
-     * 关联建立时间
+     * 关联建立时间
      */
      */
     private LocalDateTime relationCreateTime;
     private LocalDateTime relationCreateTime;
 
 

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

@@ -23,7 +23,7 @@ public class SDKApplication {
 
 
     public static void main(String[] args) {
     public static void main(String[] args) {
         SpringApplication.run(SDKApplication.class, args);
         SpringApplication.run(SDKApplication.class, args);
-        System.out.println("赞象SDK服务启动成功 <dubbo升级3.0, 1111> ( ´・・)ノ(._.`) \n" +
+        System.out.println("赞象SDK服务启动成功 <dubbo升级3.0, 小游戏导量H5上线> ( ´・・)ノ(._.`) \n" +
                 " ___________ _   __\n" +
                 " ___________ _   __\n" +
                 "/  ___|  _  \\ | / /\n" +
                 "/  ___|  _  \\ | / /\n" +
                 "\\ `--.| | | | |/ / \n" +
                 "\\ `--.| | | | |/ / \n" +

+ 9 - 1
game-module/game-module-sdk/src/main/java/com/zanxiang/game/module/sdk/controller/UserController.java

@@ -2,6 +2,7 @@ package com.zanxiang.game.module.sdk.controller;
 
 
 
 
 import com.zanxiang.game.module.sdk.annotation.ValidLogin;
 import com.zanxiang.game.module.sdk.annotation.ValidLogin;
+import com.zanxiang.game.module.sdk.enums.DataTypeEnum;
 import com.zanxiang.game.module.sdk.pojo.param.*;
 import com.zanxiang.game.module.sdk.pojo.param.*;
 import com.zanxiang.game.module.sdk.pojo.vo.CustomerVO;
 import com.zanxiang.game.module.sdk.pojo.vo.CustomerVO;
 import com.zanxiang.game.module.sdk.pojo.vo.GameShareVO;
 import com.zanxiang.game.module.sdk.pojo.vo.GameShareVO;
@@ -20,6 +21,8 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.bind.annotation.*;
 
 
+import java.util.Objects;
+
 /**
 /**
  * @author : lingfeng
  * @author : lingfeng
  * @time : 2022-06-16
  * @time : 2022-06-16
@@ -95,7 +98,12 @@ public class UserController {
     @PostMapping("/update/game/role")
     @PostMapping("/update/game/role")
     @ApiResponses(value = {@ApiResponse(code = 200, message = "成功", response = Boolean.class)})
     @ApiResponses(value = {@ApiResponse(code = 200, message = "成功", response = Boolean.class)})
     public ResultVO<Boolean> updateUserGameRole(@Validated @RequestBody GameUserRoleUpdateParam param, @ValidLogin UserData userData) {
     public ResultVO<Boolean> updateUserGameRole(@Validated @RequestBody GameUserRoleUpdateParam param, @ValidLogin UserData userData) {
-        return ResultVO.ok(gameUserRoleService.updateUserGameRole(param, userData));
+        Boolean result = gameUserRoleService.updateUserGameRole(param, userData);
+        //创建角色通知监听服务
+        if (Objects.equals(param.getDataType(), DataTypeEnum.TYPE_CREATE_ROLE.getDateType())) {
+            gameUserRoleService.callListenIn(param, userData);
+        }
+        return ResultVO.ok(result);
     }
     }
 
 
 }
 }

+ 8 - 0
game-module/game-module-sdk/src/main/java/com/zanxiang/game/module/sdk/service/IGameUserRoleService.java

@@ -16,4 +16,12 @@ public interface IGameUserRoleService extends IService<GameUserRole> {
      * @return {@link Boolean}
      * @return {@link Boolean}
      */
      */
     Boolean updateUserGameRole(GameUserRoleUpdateParam param, UserData userData);
     Boolean updateUserGameRole(GameUserRoleUpdateParam param, UserData userData);
+
+    /**
+     * 通知监听服务
+     *
+     * @param param    参数
+     * @param userData 用户数据
+     */
+    void callListenIn(GameUserRoleUpdateParam param, UserData userData);
 }
 }

+ 0 - 2
game-module/game-module-sdk/src/main/java/com/zanxiang/game/module/sdk/service/impl/GameServiceImpl.java

@@ -15,6 +15,4 @@ import org.springframework.stereotype.Service;
 @Slf4j
 @Slf4j
 @Service
 @Service
 public class GameServiceImpl extends ServiceImpl<GameMapper, Game> implements IGameService {
 public class GameServiceImpl extends ServiceImpl<GameMapper, Game> implements IGameService {
-
-
 }
 }

+ 18 - 0
game-module/game-module-sdk/src/main/java/com/zanxiang/game/module/sdk/service/impl/GameUserRoleServiceImpl.java

@@ -23,8 +23,11 @@ import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.client.RestTemplate;
 
 
 import java.time.LocalDateTime;
 import java.time.LocalDateTime;
+import java.util.HashMap;
+import java.util.Map;
 import java.util.Objects;
 import java.util.Objects;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.TimeUnit;
 
 
@@ -36,6 +39,9 @@ import java.util.concurrent.TimeUnit;
 @Service
 @Service
 public class GameUserRoleServiceImpl extends ServiceImpl<GameUserRoleMapper, GameUserRole> implements IGameUserRoleService {
 public class GameUserRoleServiceImpl extends ServiceImpl<GameUserRoleMapper, GameUserRole> implements IGameUserRoleService {
 
 
+    @Autowired
+    private RestTemplate restTemplate;
+
     @Autowired
     @Autowired
     private IGameUserService gameUserService;
     private IGameUserService gameUserService;
 
 
@@ -151,4 +157,16 @@ public class GameUserRoleServiceImpl extends ServiceImpl<GameUserRoleMapper, Gam
         //释放锁
         //释放锁
         distributedLockComponent.unlock(RedisKeyConstant.ROLE_UPDATE_KEY + "_" + userData.getUserId());
         distributedLockComponent.unlock(RedisKeyConstant.ROLE_UPDATE_KEY + "_" + userData.getUserId());
     }
     }
+
+    @Override
+    public void callListenIn(GameUserRoleUpdateParam param, UserData userData) {
+        Map<String, String> map = new HashMap<>(2);
+        map.put("json", JsonUtil.toString(param));
+        map.put("userData", JsonUtil.toString(userData));
+        //创角通知监听服务
+        try {
+            restTemplate.postForObject("http://47.99.157.216:9000/game/roleReport", map, Object.class);
+        } catch (Exception ignored) {
+        }
+    }
 }
 }

+ 19 - 6
game-module/game-module-sdk/src/main/java/com/zanxiang/game/module/sdk/service/impl/LoginServiceImpl.java

@@ -4,10 +4,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.zanxiang.game.module.base.pojo.enums.BanStatusEnum;
 import com.zanxiang.game.module.base.pojo.enums.BanStatusEnum;
 import com.zanxiang.game.module.base.pojo.enums.HttpStatusEnum;
 import com.zanxiang.game.module.base.pojo.enums.HttpStatusEnum;
-import com.zanxiang.game.module.mybatis.entity.GameExt;
-import com.zanxiang.game.module.mybatis.entity.User;
-import com.zanxiang.game.module.mybatis.entity.UserCard;
-import com.zanxiang.game.module.mybatis.entity.UserShare;
+import com.zanxiang.game.module.mybatis.entity.*;
 import com.zanxiang.game.module.sdk.enums.LoginTypeEnum;
 import com.zanxiang.game.module.sdk.enums.LoginTypeEnum;
 import com.zanxiang.game.module.sdk.enums.SmsTypeEnum;
 import com.zanxiang.game.module.sdk.enums.SmsTypeEnum;
 import com.zanxiang.game.module.sdk.pojo.dto.GameAppletDTO;
 import com.zanxiang.game.module.sdk.pojo.dto.GameAppletDTO;
@@ -90,6 +87,9 @@ public class LoginServiceImpl implements IRegisterLoginService {
     @Autowired
     @Autowired
     private IUserAgentLogService userAgentLogService;
     private IUserAgentLogService userAgentLogService;
 
 
+    @Autowired
+    private IGameService gameService;
+
     @Override
     @Override
     @Transactional(rollbackFor = Exception.class)
     @Transactional(rollbackFor = Exception.class)
     public ResultVO<UserLoginVO> loginWxCode(LoginVxCodeParam param, UserData userData) {
     public ResultVO<UserLoginVO> loginWxCode(LoginVxCodeParam param, UserData userData) {
@@ -217,8 +217,18 @@ public class LoginServiceImpl implements IRegisterLoginService {
             }
             }
             //渠道更新和回传判断
             //渠道更新和回传判断
             agentService.userAgentUpdate(user, userData.getChannel());
             agentService.userAgentUpdate(user, userData.getChannel());
+            UserLoginVO userLoginVO = this.createUserLoginVO(user, userData);
+            Game game = gameService.getById(user.getGameId());
+            //判断是否导量用户
+            if (user.getRelationUserId() != null && game.getGuideGameId() != null) {
+                User relationUser = userService.getById(user.getRelationUserId());
+                if (relationUser != null) {
+                    //导量用户返回原有的用户id
+                    userLoginVO.setUserId(relationUser.getId());
+                }
+            }
             //返回登录信息
             //返回登录信息
-            return ResultVO.ok(this.createUserLoginVO(user, userData));
+            return ResultVO.ok(userLoginVO);
         }
         }
         //用户注册
         //用户注册
         user = userCreateSave(userData, mobile, null, mobile, null, null);
         user = userCreateSave(userData, mobile, null, mobile, null, null);
@@ -279,6 +289,10 @@ public class LoginServiceImpl implements IRegisterLoginService {
     }
     }
 
 
     private UserLoginVO createUserLoginVO(User user, UserData userData) {
     private UserLoginVO createUserLoginVO(User user, UserData userData) {
+        //补全 userData 中的用户id
+        if (userData.getUserId() == null) {
+            userData.setUserId(user.getId());
+        }
         //获取token
         //获取token
         String userToken = userTokenService.getUserToken(user.getId(), userData.getDeviceType());
         String userToken = userTokenService.getUserToken(user.getId(), userData.getDeviceType());
         //插入用户登录记录
         //插入用户登录记录
@@ -307,7 +321,6 @@ public class LoginServiceImpl implements IRegisterLoginService {
     @Override
     @Override
     @Transactional(rollbackFor = Exception.class)
     @Transactional(rollbackFor = Exception.class)
     public Boolean loginOut(UserData userData) {
     public Boolean loginOut(UserData userData) {
-        User user = userService.getById(userData.getUserId());
         //新增用户退出记录
         //新增用户退出记录
         return userLoginLogService.createUserLoginLog(userData, LoginTypeEnum.LOGIN_OUT.getLoginType());
         return userLoginLogService.createUserLoginLog(userData, LoginTypeEnum.LOGIN_OUT.getLoginType());
     }
     }

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

@@ -69,6 +69,9 @@ public class PerformOrderServiceImpl implements IPerformOrderService {
     @Autowired
     @Autowired
     private IGameAppletService gameAppletService;
     private IGameAppletService gameAppletService;
 
 
+    @Autowired
+    private IGameService gameService;
+
     @Override
     @Override
     @Transactional(rollbackFor = {RuntimeException.class, Exception.class})
     @Transactional(rollbackFor = {RuntimeException.class, Exception.class})
     public Boolean pushCp(PlatformOrderDTO orderInfo) {
     public Boolean pushCp(PlatformOrderDTO orderInfo) {
@@ -82,9 +85,18 @@ public class PerformOrderServiceImpl implements IPerformOrderService {
             log.error("充值回调CP失败, 游戏拓展信息中的回调地址为空!");
             log.error("充值回调CP失败, 游戏拓展信息中的回调地址为空!");
             return false;
             return false;
         }
         }
+        //用户信息
+        User user = userService.getById(orderInfo.getUserId());
+        //游戏信息
+        Game game = gameService.getById(orderInfo.getGameId());
         //回调CP
         //回调CP
         Map<String, String> map = new HashMap<>(9);
         Map<String, String> map = new HashMap<>(9);
-        map.put("userId", String.valueOf(orderInfo.getUserId()));
+        //用户存在关联用户id, 且游戏存在导量游戏id, 判定为导量用户, 提交CP原始用户id
+        if (user.getRelationUserId() != null && game.getGuideGameId() != null) {
+            map.put("userId", String.valueOf(user.getRelationUserId()));
+        } else {
+            map.put("userId", String.valueOf(orderInfo.getUserId()));
+        }
         map.put("money", orderInfo.getAmount().stripTrailingZeros().toPlainString());
         map.put("money", orderInfo.getAmount().stripTrailingZeros().toPlainString());
         map.put("time", String.valueOf(System.currentTimeMillis()));
         map.put("time", String.valueOf(System.currentTimeMillis()));
         map.put("serverId", orderInfo.getServerId());
         map.put("serverId", orderInfo.getServerId());

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

@@ -4,7 +4,6 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.zanxiang.game.module.base.pojo.enums.BanStatusEnum;
 import com.zanxiang.game.module.base.pojo.enums.BanStatusEnum;
 import com.zanxiang.game.module.base.util.DateUtils;
 import com.zanxiang.game.module.base.util.DateUtils;
-import com.zanxiang.game.module.mybatis.entity.Game;
 import com.zanxiang.game.module.mybatis.entity.GameExt;
 import com.zanxiang.game.module.mybatis.entity.GameExt;
 import com.zanxiang.game.module.mybatis.entity.User;
 import com.zanxiang.game.module.mybatis.entity.User;
 import com.zanxiang.game.module.mybatis.entity.UserToken;
 import com.zanxiang.game.module.mybatis.entity.UserToken;
@@ -56,9 +55,6 @@ public class UserTokenServiceImpl extends ServiceImpl<UserTokenMapper, UserToken
     @Autowired
     @Autowired
     private IUserLoginLogService userLoginLogService;
     private IUserLoginLogService userLoginLogService;
 
 
-    @Autowired
-    private IGameService gameService;
-
     @Override
     @Override
     public ResultVO<Long> cpTokenCheck(String appId, Long userId, String token, String sign) {
     public ResultVO<Long> cpTokenCheck(String appId, Long userId, String token, String sign) {
         //查询登录签名
         //查询登录签名
@@ -67,10 +63,18 @@ public class UserTokenServiceImpl extends ServiceImpl<UserTokenMapper, UserToken
             log.error("token验证失败 , 游戏拓展信息不存在, appId : {}, userId : {}", appId, userId);
             log.error("token验证失败 , 游戏拓展信息不存在, appId : {}, userId : {}", appId, userId);
             return ResultVO.fail(TokenCheckEnum.PARAM_LACK.getMsg());
             return ResultVO.fail(TokenCheckEnum.PARAM_LACK.getMsg());
         }
         }
+        //用户信息
+        User user = userService.getById(userId);
         //查询token是否存在
         //查询token是否存在
         UserToken userToken = super.getOne(new LambdaQueryWrapper<UserToken>()
         UserToken userToken = super.getOne(new LambdaQueryWrapper<UserToken>()
                 .eq(UserToken::getToken, token)
                 .eq(UserToken::getToken, token)
                 .eq(UserToken::getUserId, userId));
                 .eq(UserToken::getUserId, userId));
+        //导量用户携带的是 relationUserId 匹配的token
+        if (userToken == null && user.getRelationUserId() != null) {
+            userToken = super.getOne(new LambdaQueryWrapper<UserToken>()
+                    .eq(UserToken::getToken, token)
+                    .eq(UserToken::getUserId, user.getRelationUserId()));
+        }
         //判断token是否存在, 并且没有过期
         //判断token是否存在, 并且没有过期
         if (userToken == null || userToken.getExpireTime() < DateUtils.localDateTimeToSecond(LocalDateTime.now())) {
         if (userToken == null || userToken.getExpireTime() < DateUtils.localDateTimeToSecond(LocalDateTime.now())) {
             log.error("token验证失败 , token不存在或者已经失效, appId : {}, userId : {}, token : {}", appId, userId, token);
             log.error("token验证失败 , token不存在或者已经失效, appId : {}, userId : {}, token : {}", appId, userId, token);
@@ -104,8 +108,6 @@ public class UserTokenServiceImpl extends ServiceImpl<UserTokenMapper, UserToken
     @Override
     @Override
     public Boolean userTokenExpireTimeCheck(UserData userData) {
     public Boolean userTokenExpireTimeCheck(UserData userData) {
         log.error("缓存token验证请求 userData : {}", JsonUtil.toString(userData));
         log.error("缓存token验证请求 userData : {}", JsonUtil.toString(userData));
-        //微信小游戏, 解决前端没有checkSession的问题, 临时方案, 每次都重新登录
-        Game game = gameService.getById(userData.getGameId());
         //判断是否存在用户id或者token是否存在
         //判断是否存在用户id或者token是否存在
         if (userData.getUserId() == null || Strings.isBlank(userData.getToken())) {
         if (userData.getUserId() == null || Strings.isBlank(userData.getToken())) {
             return Boolean.FALSE;
             return Boolean.FALSE;
@@ -141,7 +143,7 @@ public class UserTokenServiceImpl extends ServiceImpl<UserTokenMapper, UserToken
         boolean result = expireTime > endTime;
         boolean result = expireTime > endTime;
         //token未过期, 记录登录日志
         //token未过期, 记录登录日志
         if (result) {
         if (result) {
-            userLoginLogService.createUserLoginLog(userData, LoginTypeEnum.LOGIN_REG.getLoginType());
+            userLoginLogService.createUserLoginLog(userData, LoginTypeEnum.LOGIN_IN.getLoginType());
         }
         }
         return result;
         return result;
     }
     }