Преглед изворни кода

Merge branch 'package' of GameCenter/game-center into dev

zhimo пре 9 часа
родитељ
комит
9e3db07433

+ 5 - 0
game-module/game-module-base/src/main/java/com/zanxiang/game/module/base/pojo/enums/HttpStatusEnum.java

@@ -87,6 +87,11 @@ public enum HttpStatusEnum {
      */
     IP_HALT(41109, "ip封禁, 请联系客服"),
 
+    /**
+     * 实名封禁
+     */
+    CARD_ID_HALT(41109, "实名封禁, 请联系客服"),
+
     /**
      * 设备封禁
      */

+ 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服务启动成功 <角色信息上报-等级更新回传-02> ( ´・・)ノ(._.`) \n" +
+        System.out.println("赞象SDK服务启动成功 <封禁新增设备信息封禁, 实名信息封禁> ( ´・・)ノ(._.`) \n" +
                 " ___________ _   __\n" +
                 "/  ___|  _  \\ | / /\n" +
                 "\\ `--.| | | | |/ / \n" +

+ 1 - 9
game-module/game-module-sdk/src/main/java/com/zanxiang/game/module/sdk/service/IIpBanService.java

@@ -1,10 +1,10 @@
 package com.zanxiang.game.module.sdk.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
-import com.github.sd4324530.jtuple.Tuple2;
 import com.zanxiang.game.module.base.pojo.enums.HttpStatusEnum;
 import com.zanxiang.game.module.mybatis.entity.IpBan;
 import com.zanxiang.game.module.sdk.pojo.param.UserData;
+import reactor.util.function.Tuple2;
 
 /**
  * @author : lingfeng
@@ -13,14 +13,6 @@ import com.zanxiang.game.module.sdk.pojo.param.UserData;
  */
 public interface IIpBanService extends IService<IpBan> {
 
-    /**
-     * 检查ip禁令
-     *
-     * @param userData 用户数据
-     * @return boolean
-     */
-    boolean checkIpBan(UserData userData);
-
     /**
      * 封禁IP和设备检测
      *

+ 20 - 0
game-module/game-module-sdk/src/main/java/com/zanxiang/game/module/sdk/service/IUserBanService.java

@@ -1,7 +1,10 @@
 package com.zanxiang.game.module.sdk.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.zanxiang.game.module.base.pojo.enums.HttpStatusEnum;
 import com.zanxiang.game.module.mybatis.entity.UserBan;
+import com.zanxiang.game.module.sdk.pojo.param.UserData;
+import reactor.util.function.Tuple2;
 
 /**
  * @author : lingfeng
@@ -9,4 +12,21 @@ import com.zanxiang.game.module.mybatis.entity.UserBan;
  * @description : 玩家封禁管理
  */
 public interface IUserBanService extends IService<UserBan> {
+
+    /**
+     * 设备封禁检测
+     *
+     * @param userData : 用户数据
+     * @return : 返回检测结果
+     */
+    Tuple2<Boolean, HttpStatusEnum> banCheckByDevice(UserData userData);
+
+    /**
+     * 身份证号匹配
+     *
+     * @param gameId : 游戏id
+     * @param cardId : 身份证号
+     * @return : 返回匹配结果
+     */
+    boolean banCheckByCardId(Long gameId, String cardId);
 }

+ 5 - 48
game-module/game-module-sdk/src/main/java/com/zanxiang/game/module/sdk/service/impl/IpBanServiceImpl.java

@@ -1,23 +1,19 @@
 package com.zanxiang.game.module.sdk.service.impl;
 
 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.github.sd4324530.jtuple.Tuple2;
 import com.zanxiang.game.module.base.pojo.enums.BanStatusEnum;
 import com.zanxiang.game.module.base.pojo.enums.HttpStatusEnum;
 import com.zanxiang.game.module.mybatis.entity.IpBan;
-import com.zanxiang.game.module.mybatis.entity.UserBan;
 import com.zanxiang.game.module.mybatis.mapper.IpBanMapper;
 import com.zanxiang.game.module.sdk.pojo.param.UserData;
 import com.zanxiang.game.module.sdk.service.IIpBanService;
 import com.zanxiang.game.module.sdk.service.IUserBanService;
 import lombok.extern.slf4j.Slf4j;
-import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
-
-import java.util.Objects;
+import reactor.util.function.Tuple2;
+import reactor.util.function.Tuples;
 
 /**
  * @author : lingfeng
@@ -32,14 +28,6 @@ public class IpBanServiceImpl extends ServiceImpl<IpBanMapper, IpBan> implements
     private IUserBanService userBanService;
 
     @Override
-    public boolean checkIpBan(UserData userData) {
-        IpBan ipBan = super.getOne(new LambdaUpdateWrapper<IpBan>()
-                .eq(IpBan::getIp, userData.getIp())
-                .eq(IpBan::getGameId, userData.getGameId())
-        );
-        return ipBan != null && Objects.equals(ipBan.getStatus(), BanStatusEnum.BAN_STATUS.getStatus());
-    }
-
     public Tuple2<Boolean, HttpStatusEnum> banCheck(UserData userData) {
         //IP检测
         if (super.count(new LambdaQueryWrapper<IpBan>()
@@ -47,40 +35,9 @@ public class IpBanServiceImpl extends ServiceImpl<IpBanMapper, IpBan> implements
                 .eq(IpBan::getIp, userData.getIp())
                 .eq(IpBan::getStatus, BanStatusEnum.BAN_STATUS.getStatus())
         ) > 0) {
-            return Tuple2.with(Boolean.TRUE, HttpStatusEnum.IP_HALT);
-        }
-        //封禁检测
-        if (StringUtils.isAllBlank(userData.getImei(), userData.getAndroidId(), userData.getOaid())) {
-            return Tuple2.with(Boolean.FALSE, HttpStatusEnum.SUCCESS);
-        }
-        //匹配已封禁设备标识
-        LambdaQueryWrapper<UserBan> queryWrapper = new LambdaQueryWrapper<UserBan>();
-        queryWrapper.and(qw -> {
-            boolean hasCondition = false;
-            //安卓id匹配
-            if (StringUtils.isNoneBlank(userData.getAndroidId())) {
-                qw.or().eq(UserBan::getAndroidId, userData.getAndroidId());
-                hasCondition = true;
-            }
-            //imei匹配
-            if (StringUtils.isNoneBlank(userData.getImei())) {
-                qw.or().eq(UserBan::getImei, userData.getImei());
-                hasCondition = true;
-            }
-            //oaid匹配
-            if (StringUtils.isNoneBlank(userData.getOaid())) {
-                qw.or().eq(UserBan::getOaid, userData.getOaid());
-                hasCondition = true;
-            }
-            // 避免无条件的OR查询
-            if (!hasCondition) {
-                qw.or().apply("1=0");
-            }
-        });
-        //查询
-        if (userBanService.count(queryWrapper) > 0) {
-            return Tuple2.with(Boolean.TRUE, HttpStatusEnum.IP_HALT);
+            return Tuples.of(Boolean.TRUE, HttpStatusEnum.IP_HALT);
         }
-        return Tuple2.with(Boolean.FALSE, HttpStatusEnum.SUCCESS);
+        //设备检测
+        return userBanService.banCheckByDevice(userData);
     }
 }

+ 12 - 9
game-module/game-module-sdk/src/main/java/com/zanxiang/game/module/sdk/service/impl/LoginServiceImpl.java

@@ -120,9 +120,10 @@ public class LoginServiceImpl implements IRegisterLoginService {
     @Transactional(rollbackFor = Exception.class)
     public ResultVO<UserLoginVO> loginWxCode(LoginVxCodeParam param, UserData userData, HttpServletRequest request) {
         log.error("登录请求参数 , param : {}, userData : {}", JsonUtil.toString(param), JsonUtil.toString(userData));
-        //验证登录ip是否封禁
-        if (ipBanService.checkIpBan(userData)) {
-            return ResultVO.fail(HttpStatusEnum.IP_HALT.getMsg());
+        //验证是否被封禁
+        Tuple2<Boolean, HttpStatusEnum> banCheckTuple2 = ipBanService.banCheck(userData);
+        if (banCheckTuple2.getT1()) {
+            return ResultVO.fail(banCheckTuple2.getT2().getMsg());
         }
         //查询微信小游戏信息
         GameAppletDTO gameAppletDTO = gameAppletService.getByGameId(userData.getGameId());
@@ -167,9 +168,10 @@ public class LoginServiceImpl implements IRegisterLoginService {
     @Override
     @Transactional(rollbackFor = Exception.class)
     public ResultVO<UserLoginVO> loginPassword(LoginPasswordParam param, UserData userData) {
-        //验证登录ip是否封禁
-        if (ipBanService.checkIpBan(userData)) {
-            return ResultVO.fail(HttpStatusEnum.IP_HALT.getMsg());
+        //验证是否被封禁
+        Tuple2<Boolean, HttpStatusEnum> banCheckTuple2 = ipBanService.banCheck(userData);
+        if (banCheckTuple2.getT1()) {
+            return ResultVO.fail(banCheckTuple2.getT2().getMsg());
         }
         String username = param.getUsername();
         String password = param.getPassword();
@@ -230,9 +232,10 @@ public class LoginServiceImpl implements IRegisterLoginService {
     @Override
     @Transactional(rollbackFor = Exception.class)
     public ResultVO<UserLoginVO> loginMobile(LoginMobileParam param, UserData userData) {
-        //验证ip是否封禁
-        if (ipBanService.checkIpBan(userData)) {
-            return ResultVO.fail(HttpStatusEnum.IP_HALT.getMsg());
+        //验证是否被封禁
+        Tuple2<Boolean, HttpStatusEnum> banCheckTuple2 = ipBanService.banCheck(userData);
+        if (banCheckTuple2.getT1()) {
+            return ResultVO.fail(banCheckTuple2.getT2().getMsg());
         }
         String mobile = param.getMobile();
         //验证码校验

+ 53 - 0
game-module/game-module-sdk/src/main/java/com/zanxiang/game/module/sdk/service/impl/UserBanServiceImpl.java

@@ -1,11 +1,17 @@
 package com.zanxiang.game.module.sdk.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.zanxiang.game.module.base.pojo.enums.HttpStatusEnum;
 import com.zanxiang.game.module.mybatis.entity.UserBan;
 import com.zanxiang.game.module.mybatis.mapper.UserBanMapper;
+import com.zanxiang.game.module.sdk.pojo.param.UserData;
 import com.zanxiang.game.module.sdk.service.IUserBanService;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.stereotype.Service;
+import reactor.util.function.Tuple2;
+import reactor.util.function.Tuples;
 
 /**
  * @author : lingfeng
@@ -15,4 +21,51 @@ import org.springframework.stereotype.Service;
 @Slf4j
 @Service
 public class UserBanServiceImpl extends ServiceImpl<UserBanMapper, UserBan> implements IUserBanService {
+
+    @Override
+    public Tuple2<Boolean, HttpStatusEnum> banCheckByDevice(UserData userData) {
+        //设备参数不存在, 无法检测
+        if (StringUtils.isAllBlank(userData.getImei(), userData.getAndroidId(), userData.getOaid())) {
+            return Tuples.of(Boolean.FALSE, HttpStatusEnum.SUCCESS);
+        }
+        //匹配已封禁设备标识
+        LambdaQueryWrapper<UserBan> queryWrapper = new LambdaQueryWrapper<UserBan>()
+                .eq(UserBan::getGameId, userData.getGameId());
+        queryWrapper.and(qw -> {
+            boolean hasCondition = false;
+            //安卓id匹配
+            if (StringUtils.isNoneBlank(userData.getAndroidId())) {
+                qw.or().eq(UserBan::getAndroidId, userData.getAndroidId());
+                hasCondition = true;
+            }
+            //imei匹配
+            if (StringUtils.isNoneBlank(userData.getImei())) {
+                qw.or().eq(UserBan::getImei, userData.getImei());
+                hasCondition = true;
+            }
+            //oaid匹配
+            if (StringUtils.isNoneBlank(userData.getOaid())) {
+                qw.or().eq(UserBan::getOaid, userData.getOaid());
+                hasCondition = true;
+            }
+            // 避免无条件的OR查询
+            if (!hasCondition) {
+                qw.or().apply("1=0");
+            }
+        });
+        //查询
+        if (super.count(queryWrapper) > 0) {
+            return Tuples.of(Boolean.TRUE, HttpStatusEnum.DEVICES_HALT);
+        }
+        return Tuples.of(Boolean.FALSE, HttpStatusEnum.SUCCESS);
+    }
+
+    @Override
+    public boolean banCheckByCardId(Long gameId, String cardId) {
+        //身份证号匹配
+        return super.count(new LambdaQueryWrapper<UserBan>()
+                .eq(UserBan::getGameId, gameId)
+                .eq(UserBan::getCardId, cardId)
+        ) > 0;
+    }
 }

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

@@ -11,6 +11,7 @@ import com.zanxiang.game.module.sdk.constant.RegexConstant;
 import com.zanxiang.game.module.sdk.pojo.param.UserCardUpdateParam;
 import com.zanxiang.game.module.sdk.pojo.param.UserData;
 import com.zanxiang.game.module.sdk.service.IAliApiService;
+import com.zanxiang.game.module.sdk.service.IUserBanService;
 import com.zanxiang.game.module.sdk.service.IUserCardService;
 import com.zanxiang.game.module.sdk.service.IUserService;
 import com.zanxiang.module.util.pojo.ResultVO;
@@ -45,9 +46,16 @@ public class UserCardServiceImpl extends ServiceImpl<UserCardMapper, UserCard> i
     @Autowired
     private IAliApiService aliApiService;
 
+    @Autowired
+    private IUserBanService userBanService;
+
     @Override
     @Transactional(rollbackFor = Exception.class)
     public ResultVO<Boolean> userAuthentication(UserCardUpdateParam param, UserData userData) {
+        //判断实名信息是否可用
+        if (userBanService.banCheckByCardId(userData.getGameId(), param.getCardId())) {
+            return ResultVO.fail(HttpStatusEnum.CARD_ID_HALT.getMsg());
+        }
         //查询实名认证信息
         UserCard userCard = super.getOne(new LambdaQueryWrapper<UserCard>()
                 .eq(UserCard::getUserId, userData.getUserId()));

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

@@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 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.GameCategoryEnum;
+import com.zanxiang.game.module.base.pojo.enums.HttpStatusEnum;
 import com.zanxiang.game.module.base.util.DateUtils;
 import com.zanxiang.game.module.mybatis.entity.Game;
 import com.zanxiang.game.module.mybatis.entity.GameExt;
@@ -212,8 +213,9 @@ public class UserTokenServiceImpl extends ServiceImpl<UserTokenMapper, UserToken
         if (Strings.isBlank(token) || userToken.getUpdateTime().isBefore(localDateTime)) {
             return Boolean.FALSE;
         }
-        //判断是否ip封禁
-        if (ipBanService.checkIpBan(userData)) {
+        //验证是否被封禁
+        Tuple2<Boolean, HttpStatusEnum> banCheckTuple2 = ipBanService.banCheck(userData);
+        if (banCheckTuple2.getT1()) {
             return Boolean.FALSE;
         }
         //查询用户信息