xufeng пре 2 година
родитељ
комит
01c6f099b5
22 измењених фајлова са 435 додато и 29 уклоњено
  1. 10 0
      game-module/game-common/src/main/java/com/zanxiang/common/enums/HttpStatusEnum.java
  2. 59 0
      game-module/game-common/src/main/java/com/zanxiang/common/utils/GameSignUtil.java
  3. 2 1
      game-module/game-manage/src/main/java/com/zanxiang/manage/service/Impl/UserServiceImpl.java
  4. 1 1
      game-module/game-sdk/src/main/java/com/zanxiang/sdk/common/miPay/MiPayClient.java
  5. 2 1
      game-module/game-sdk/src/main/java/com/zanxiang/sdk/common/util/ZxingUtil.java
  6. 35 6
      game-module/game-sdk/src/main/java/com/zanxiang/sdk/controller/UserController.java
  7. 65 0
      game-module/game-sdk/src/main/java/com/zanxiang/sdk/domain/params/GameUserRoleUpdateParam.java
  8. 48 0
      game-module/game-sdk/src/main/java/com/zanxiang/sdk/domain/params/GameUserUpdateParam.java
  9. 25 0
      game-module/game-sdk/src/main/java/com/zanxiang/sdk/domain/params/UserCheckParam.java
  10. 3 1
      game-module/game-sdk/src/main/java/com/zanxiang/sdk/service/GameUserRoleService.java
  11. 9 0
      game-module/game-sdk/src/main/java/com/zanxiang/sdk/service/GameUserService.java
  12. 35 0
      game-module/game-sdk/src/main/java/com/zanxiang/sdk/service/Impl/GameUserImpl.java
  13. 49 0
      game-module/game-sdk/src/main/java/com/zanxiang/sdk/service/Impl/GameUserRoleImpl.java
  14. 2 1
      game-module/game-sdk/src/main/java/com/zanxiang/sdk/service/Impl/PerformOrderServiceImpl.java
  15. 5 0
      game-module/game-sdk/src/main/java/com/zanxiang/sdk/service/Impl/RegisterLoginServiceImpl.java
  16. 12 5
      game-module/game-sdk/src/main/java/com/zanxiang/sdk/service/Impl/UserOauthServiceImpl.java
  17. 32 4
      game-module/game-sdk/src/main/java/com/zanxiang/sdk/service/Impl/UserServiceImpl.java
  18. 2 1
      game-module/game-sdk/src/main/java/com/zanxiang/sdk/service/Impl/UserTokenServiceImpl.java
  19. 5 4
      game-module/game-sdk/src/main/java/com/zanxiang/sdk/service/Impl/pay/AlipayServiceImpl.java
  20. 4 4
      game-module/game-sdk/src/main/java/com/zanxiang/sdk/service/Impl/pay/WxpayServiceImpl.java
  21. 11 0
      game-module/game-sdk/src/main/java/com/zanxiang/sdk/service/UserService.java
  22. 19 0
      game-module/game-sdk/src/test/java/com/zanxiang/sdk/ThreadTest.java

+ 10 - 0
game-module/game-common/src/main/java/com/zanxiang/common/enums/HttpStatusEnum.java

@@ -375,6 +375,16 @@ public enum HttpStatusEnum {
      */
     WEIXIN_OPEN_ID_NULL(41510, "微信opendId为空"),
 
+    /**
+     * 游戏用户未创建成功
+     */
+    GAME_USER_UN_CREATE(41511, "更新游戏角色时,检测为先创建游戏用户"),
+
+    /**
+     * 游戏不存在
+     */
+    GAME_UN_FUND(41512, "游戏不存在"),
+
     /**
      * 参数为空
      */

+ 59 - 0
game-module/game-common/src/main/java/com/zanxiang/common/utils/GameSignUtil.java

@@ -0,0 +1,59 @@
+package com.zanxiang.common.utils;
+
+import com.zanxiang.common.constant.Constants;
+import lombok.extern.slf4j.Slf4j;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.util.*;
+
+/**
+ * @author xufeng
+ * @date 2022/7/21 19:35
+ */
+@Slf4j
+public class GameSignUtil {
+    protected static final Logger logger = LoggerFactory.getLogger(GameSignUtil.class);
+
+    /**
+     * 验证sign
+     *
+     * @param param  参数
+     * @param appKey 密钥
+     * @return
+     */
+    public static Boolean verify(SortedMap<String, String> param, String appKey) {
+        if (param.isEmpty() || param.get("sign").isEmpty()) {
+            return false;
+        }
+        if (sign(param, appKey).equals(param.get("sign"))) {
+            return true;
+        }
+        return false;
+    }
+
+    /**
+     * 生成密钥
+     *
+     * @param param  参数
+     * @param appKey 密钥
+     * @return
+     */
+    public static String sign(SortedMap<String, String> param, String appKey) {
+        StringBuffer sb = new StringBuffer();
+        Set es = param.entrySet();
+        Iterator it = es.iterator();
+        while (it.hasNext()) {
+            Map.Entry entry = (Map.Entry) it.next();
+            String k = (String) entry.getKey();
+            String v = entry.getValue() == null ? "" : (String) entry.getValue();
+            if (null != v && !"".equals(v) && !"sign".equals(k)) {
+                sb.append(k + "=" + v + "&");
+            }
+        }
+        sb.append("appKey=" + appKey);
+        String sign = MD5Util.MD5Encode(sb.toString(), Constants.UTF8).toUpperCase();
+        logger.info("param:{}, appKey:{}, sign:{}, 加密原始串:{}", param, appKey, sign, sb);
+        return sign;
+    }
+}

+ 2 - 1
game-module/game-manage/src/main/java/com/zanxiang/manage/service/Impl/UserServiceImpl.java

@@ -7,6 +7,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.zanxiang.common.constant.Constants;
 import com.zanxiang.common.exception.BaseException;
 import com.zanxiang.common.utils.MD5Util;
 import com.zanxiang.common.utils.StringUtils;
@@ -185,7 +186,7 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
      */
     private String cmfPassword(String password) {
         String passwordSalt = password + "ZX_PASSWORD_SALT";
-        String charsetName = "UTF-8";
+        String charsetName = Constants.UTF8;
         return "###" + MD5Util.MD5Encode(MD5Util.MD5Encode(passwordSalt, charsetName), charsetName);
     }
 

+ 1 - 1
game-module/game-sdk/src/main/java/com/zanxiang/sdk/common/miPay/MiPayClient.java

@@ -28,7 +28,7 @@ import java.util.Objects;
 @Component
 public class MiPayClient {
 
-    private static final Logger logger = LoggerFactory.getLogger(WxpayServiceImpl.class);
+    private static final Logger logger = LoggerFactory.getLogger(MiPayClient.class);
     @Autowired
     private RedisUtil<String> redisUtil;
 

+ 2 - 1
game-module/game-sdk/src/main/java/com/zanxiang/sdk/common/util/ZxingUtil.java

@@ -7,6 +7,7 @@ import com.google.zxing.WriterException;
 import com.google.zxing.client.j2se.MatrixToImageWriter;
 import com.google.zxing.common.BitMatrix;
 import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;
+import com.zanxiang.common.constant.Constants;
 
 import java.io.File;
 import java.io.IOException;
@@ -29,7 +30,7 @@ public class ZxingUtil {
      */
     public static void createQRCodeImage(String qrCode, String imgPath) {
         HashMap hashMap = new HashMap();
-        hashMap.put(EncodeHintType.CHARACTER_SET, "UTF-8");
+        hashMap.put(EncodeHintType.CHARACTER_SET, Constants.UTF8);
         hashMap.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.M);
         hashMap.put(EncodeHintType.MARGIN, 2);
         try {

+ 35 - 6
game-module/game-sdk/src/main/java/com/zanxiang/sdk/controller/UserController.java

@@ -2,11 +2,11 @@ package com.zanxiang.sdk.controller;
 
 import com.zanxiang.common.domain.ResultVo;
 import com.zanxiang.sdk.common.annotation.ValidLogin;
-import com.zanxiang.sdk.domain.params.UpdatePasswordParam;
-import com.zanxiang.sdk.domain.params.UserData;
-import com.zanxiang.sdk.domain.params.UserDetailParam;
-import com.zanxiang.sdk.domain.params.UserOauthlUpdateParam;
+import com.zanxiang.sdk.domain.params.*;
 import com.zanxiang.sdk.domain.vo.UserLoginVO;
+import com.zanxiang.sdk.domain.vo.UserVO;
+import com.zanxiang.sdk.service.GameUserRoleService;
+import com.zanxiang.sdk.service.GameUserService;
 import com.zanxiang.sdk.service.UserOauthService;
 import com.zanxiang.sdk.service.UserService;
 import io.swagger.annotations.Api;
@@ -36,6 +36,12 @@ public class UserController {
     @Autowired
     private UserOauthService userOauthService;
 
+    @Autowired
+    private GameUserRoleService gameUserRoleService;
+
+    @Autowired
+    private GameUserService gameUserService;
+
     @ApiOperation(value = "用户重置密码")
     @PostMapping("/update/password")
     @ApiResponses(value = {@ApiResponse(code = 200, message = "成功", response = UserLoginVO.class)})
@@ -52,10 +58,33 @@ public class UserController {
 
     @ApiOperation(value = "更新用户授权信息")
     @PostMapping("/update/user/Oauth")
-    @ApiResponses(value = {@ApiResponse(code = 200, message = "成功", response = UserLoginVO.class)})
-    public ResultVo updateUserDetail(@Validated @RequestBody UserOauthlUpdateParam param, @ValidLogin UserData userData) {
+    @ApiResponses(value = {@ApiResponse(code = 200, message = "成功", response = Boolean.class)})
+    public ResultVo updateUserOauth(@Validated @RequestBody UserOauthlUpdateParam param, @ValidLogin UserData userData) {
         return userOauthService.updateUserOauth(param, userData);
     }
 
+    @ApiOperation(value = "创建/更新游戏用户")
+    @PostMapping("/update/game/user")
+    @ApiResponses(value = {@ApiResponse(code = 200, message = "成功", response = Boolean.class)})
+    public ResultVo updateGameUser(@Validated @RequestBody GameUserUpdateParam param, @ValidLogin UserData userData) {
+        return ResultVo.ok(gameUserService.updateGameUser(param, userData));
+    }
+
+
+    @ApiOperation(value = "上传角色信息")
+    @PostMapping("/update/game/role")
+    @ApiResponses(value = {@ApiResponse(code = 200, message = "成功", response = UserLoginVO.class)})
+    public ResultVo updateUserGameRole(@Validated @RequestBody GameUserRoleUpdateParam param, @ValidLogin UserData userData) {
+        return ResultVo.ok(gameUserRoleService.updateUserGameRole(param, userData));
+    }
+
+
+    @ApiOperation(value = "用户信息检测")
+    @PostMapping("/check")
+    @ApiResponses(value = {@ApiResponse(code = 200, message = "成功", response = UserLoginVO.class)})
+    public ResultVo upUserGameRole(@Validated @RequestBody UserCheckParam param, @ValidLogin UserData userData) {
+        return ResultVo.ok(userService.userCheck(param, userData));
+    }
+
 
 }

+ 65 - 0
game-module/game-sdk/src/main/java/com/zanxiang/sdk/domain/params/GameUserRoleUpdateParam.java

@@ -0,0 +1,65 @@
+package com.zanxiang.sdk.domain.params;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import javax.validation.constraints.NotBlank;
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+
+/**
+ * 游戏角色
+ *
+ * @author : xufeng
+ * @time : 2022-07-21
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class GameUserRoleUpdateParam extends CommonParam {
+
+    @ApiModelProperty("游戏服务器id,默认为0")
+    private String serverId;
+
+    @ApiModelProperty("所在服务器名称")
+    private String serverName;
+
+    @ApiModelProperty("角色id")
+    private String roleId;
+
+    @ApiModelProperty("角色名称")
+    private String roleName;
+
+    @ApiModelProperty("角色等级")
+    private Long roleLevel;
+
+    @ApiModelProperty("角色VIP")
+    private Long roleVipLevel;
+
+    @ApiModelProperty("玩家角色战力")
+    private Long rolePower;
+
+    @ApiModelProperty("平台币余额")
+    private BigDecimal platformCoin;
+
+    @ApiModelProperty("充值金额")
+    private BigDecimal rechargeMoney;
+
+    @ApiModelProperty("充值次数")
+    private Integer rechargeCount;
+
+    @ApiModelProperty("最近充值时间")
+    private LocalDateTime lastRechargeTime;
+
+    @ApiModelProperty("扩展信息")
+    private String ext;
+
+    @ApiModelProperty("游戏区服id")
+    private Long regionalId;
+
+    @ApiModelProperty("游戏区服名称")
+    private String regionalName;
+
+    @ApiModelProperty("角色最后登录时间")
+    private LocalDateTime lastLoginTime;
+}

+ 48 - 0
game-module/game-sdk/src/main/java/com/zanxiang/sdk/domain/params/GameUserUpdateParam.java

@@ -0,0 +1,48 @@
+package com.zanxiang.sdk.domain.params;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.time.LocalDateTime;
+
+/**
+ * 游戏用户创建
+ *
+ * @author : xufeng
+ * @time : 2022-07-21
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class GameUserUpdateParam extends CommonParam {
+
+    @ApiModelProperty("所属渠道ID")
+    private Long agentId;
+
+    @ApiModelProperty("导量的渠道ID")
+    private Long guidedAgentId;
+
+    @ApiModelProperty("昵称")
+    private String nickname;
+
+    @ApiModelProperty("最近默认 2 默认 1 不默认")
+    private Boolean isDefault;
+
+    @ApiModelProperty("状态 2正常 1锁定")
+    private Boolean status;
+
+    @ApiModelProperty("是否GS")
+    private Boolean isGs;
+
+    @ApiModelProperty("客服id")
+    private Long customerId;
+
+    @ApiModelProperty("创角数")
+    private Integer roleCount;
+
+    @ApiModelProperty("拥有角色最高vip等级")
+    private Integer roleVipMax;
+
+    @ApiModelProperty("最后玩时间")
+    private LocalDateTime updateTime;
+}

+ 25 - 0
game-module/game-sdk/src/main/java/com/zanxiang/sdk/domain/params/UserCheckParam.java

@@ -0,0 +1,25 @@
+package com.zanxiang.sdk.domain.params;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+
+/**
+ * 用户检测
+ *
+ * @author : xufeng
+ * @time : 2022-07-21
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class UserCheckParam extends CommonParam {
+
+    @ApiModelProperty("签名 sign=md5(gameId&userId&appKey)")
+    @NotBlank(message = "签名不能为空")
+    private String sign;
+}

+ 3 - 1
game-module/game-sdk/src/main/java/com/zanxiang/sdk/service/GameUserRoleService.java

@@ -2,8 +2,10 @@ package com.zanxiang.sdk.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.zanxiang.mybatis.entity.GameUserRole;
+import com.zanxiang.sdk.domain.params.GameUserRoleUpdateParam;
+import com.zanxiang.sdk.domain.params.UserData;
 
 
 public interface GameUserRoleService extends IService<GameUserRole> {
-
+    Boolean updateUserGameRole(GameUserRoleUpdateParam param, UserData userData);
 }

+ 9 - 0
game-module/game-sdk/src/main/java/com/zanxiang/sdk/service/GameUserService.java

@@ -2,6 +2,8 @@ package com.zanxiang.sdk.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.zanxiang.mybatis.entity.GameUser;
+import com.zanxiang.sdk.domain.params.GameUserUpdateParam;
+import com.zanxiang.sdk.domain.params.UserData;
 
 /**
  * @author : xufeng
@@ -10,4 +12,11 @@ import com.zanxiang.mybatis.entity.GameUser;
  */
 public interface GameUserService extends IService<GameUser> {
 
+    /**
+     * 更新/创建游戏用户
+     * 12312
+     *
+     * @return
+     */
+    Boolean updateGameUser(GameUserUpdateParam param, UserData userData);
 }

+ 35 - 0
game-module/game-sdk/src/main/java/com/zanxiang/sdk/service/Impl/GameUserImpl.java

@@ -1,12 +1,21 @@
 package com.zanxiang.sdk.service.Impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.zanxiang.common.exception.ParamNullException;
+import com.zanxiang.common.utils.StringUtils;
+import com.zanxiang.common.utils.bean.BeanUtils;
 import com.zanxiang.mybatis.entity.GameUser;
 import com.zanxiang.mybatis.mapper.GameUserMapper;
+import com.zanxiang.sdk.domain.params.GameUserUpdateParam;
+import com.zanxiang.sdk.domain.params.UserData;
 import com.zanxiang.sdk.service.GameUserService;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
 
+import java.util.Objects;
+
 /**
  * @author : xufeng
  * @time : 2022-07-06
@@ -15,4 +24,30 @@ import org.springframework.stereotype.Service;
 @Service
 public class GameUserImpl extends ServiceImpl<GameUserMapper, GameUser> implements GameUserService {
 
+    @Override
+    public Boolean updateGameUser(GameUserUpdateParam param, UserData userData) {
+        if (StringUtils.isEmpty(param.getGameId())) {
+            throw new ParamNullException("GameId");
+        }
+        Long gameId = Long.valueOf(param.getGameId());
+        GameUser where = new GameUser();
+        where.setUserId(userData.getUserId());
+        where.setGameId(gameId);
+
+        GameUser one = super.getOne(new LambdaQueryWrapper<GameUser>()
+                .setEntity(where)
+                .last("limit 1")
+        );
+        GameUser GameUserData = BeanUtils.copy(param, GameUser.class);
+        GameUserData.setUserId(userData.getUserId());
+        GameUserData.setGameId(gameId);
+        if (Objects.isNull(one)) {
+            //新增
+            super.save(GameUserData);
+        } else {
+            //更新
+            super.update(GameUserData, new UpdateWrapper<GameUser>().setEntity(where));
+        }
+        return true;
+    }
 }

+ 49 - 0
game-module/game-sdk/src/main/java/com/zanxiang/sdk/service/Impl/GameUserRoleImpl.java

@@ -1,12 +1,26 @@
 package com.zanxiang.sdk.service.Impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.zanxiang.common.enums.HttpStatusEnum;
+import com.zanxiang.common.exception.CustomException;
+import com.zanxiang.common.exception.ParamNullException;
+import com.zanxiang.common.utils.StringUtils;
+import com.zanxiang.common.utils.bean.BeanUtils;
+import com.zanxiang.mybatis.entity.GameUser;
 import com.zanxiang.mybatis.entity.GameUserRole;
 import com.zanxiang.mybatis.mapper.GameUserRoleMapper;
+import com.zanxiang.sdk.domain.params.GameUserRoleUpdateParam;
+import com.zanxiang.sdk.domain.params.UserData;
 import com.zanxiang.sdk.service.GameUserRoleService;
+import com.zanxiang.sdk.service.GameUserService;
 import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.util.Objects;
+
 /**
  * @author : xufeng
  * @time : 2022-07-06
@@ -15,4 +29,39 @@ import org.springframework.stereotype.Service;
 @Service
 public class GameUserRoleImpl extends ServiceImpl<GameUserRoleMapper, GameUserRole> implements GameUserRoleService {
 
+    @Autowired
+    private GameUserService gameUserService;
+
+    @Override
+    public Boolean updateUserGameRole(GameUserRoleUpdateParam param, UserData userData) {
+        //查询gameUserId
+        if (StringUtils.isEmpty(param.getGameId())) {
+            throw new ParamNullException("GameId");
+        }
+        Long gameId = Long.valueOf(param.getGameId());
+        GameUser gameUserData = gameUserService.getOne(new LambdaQueryWrapper<GameUser>().eq(GameUser::getGameId, gameId).eq(GameUser::getUserId, userData.getUserId()).last("limit 1"));
+        if (Objects.isNull(gameUserData)) {
+            throw new CustomException(HttpStatusEnum.GAME_USER_UN_CREATE);
+        }
+        GameUserRole gameUserRoleWhere = new GameUserRole();
+        gameUserRoleWhere.setRoleId(param.getRoleId());
+        gameUserRoleWhere.setGameUserId(gameUserData.getId());
+        gameUserRoleWhere.setUserId(userData.getUserId());
+
+        GameUserRole gameUserRoleData = super.getOne(new LambdaQueryWrapper<GameUserRole>().setEntity(gameUserRoleWhere).last("limit 1"));
+        GameUserRole roleData = BeanUtils.copy(param, GameUserRole.class);
+        roleData.setOs(userData.getDeviceSystem());
+        
+        if (Objects.isNull(gameUserRoleData)) {
+            //新增
+            roleData.setRoleId(param.getRoleId());
+            roleData.setGameUserId(gameUserData.getId());
+            roleData.setUserId(userData.getUserId());
+            super.save(roleData);
+        } else {
+            //更新
+            super.update(roleData, new UpdateWrapper<GameUserRole>().setEntity(gameUserRoleWhere));
+        }
+        return true;
+    }
 }

+ 2 - 1
game-module/game-sdk/src/main/java/com/zanxiang/sdk/service/Impl/PerformOrderServiceImpl.java

@@ -4,6 +4,7 @@ import com.alipay.easysdk.kernel.util.Signer;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
+import com.zanxiang.common.constant.Constants;
 import com.zanxiang.common.enums.CpStatusEnum;
 import com.zanxiang.common.enums.OrderStateEnum;
 import com.zanxiang.common.enums.ResEnum;
@@ -110,7 +111,7 @@ public class PerformOrderServiceImpl implements PerformOrderService {
         //拼接app_key
         param += "&app_key=" + app_key;
         //生成sign
-        String sign = MD5Util.MD5Encode(param, "UTF-8");
+        String sign = MD5Util.MD5Encode(param, Constants.UTF8);
         map.remove("app_key");
         map.put("sign", sign);
         //拼接sign请求

+ 5 - 0
game-module/game-sdk/src/main/java/com/zanxiang/sdk/service/Impl/RegisterLoginServiceImpl.java

@@ -232,6 +232,11 @@ public class RegisterLoginServiceImpl implements RegisterLoginService {
         userLoginLogService.addUserLoginLog(realIp, user, registerPasswordParam.getGameId());
         //获取token
         String userToken = userTokenService.getUserToken(user.getId(), userData.getDeviceType());
+        String gameId = registerPasswordParam.getGameId();
+        //如果游戏id不为空,则自动创建游戏用户
+        if (StringUtils.isNotEmpty(gameId)) {
+
+        }
         //返回用户token
         return new ResultVo<>(new UserLoginVO(userToken));
     }

+ 12 - 5
game-module/game-sdk/src/main/java/com/zanxiang/sdk/service/Impl/UserOauthServiceImpl.java

@@ -19,6 +19,7 @@ import org.springframework.stereotype.Service;
 
 import java.util.Map;
 import java.util.Objects;
+import java.util.concurrent.Semaphore;
 
 /**
  * @author : lingfeng
@@ -40,11 +41,16 @@ public class UserOauthServiceImpl extends ServiceImpl<UserOauthMapper, UserOauth
      */
     @Override
     public UserOauthDTO getUserOauthByOpenId(String openId) {
-        //根据用户第三方唯一查询
-        UserOauth userOauth = super.getOne(new LambdaQueryWrapper<UserOauth>().eq(UserOauth::getOpenid, openId));
-        //直接查到了信息
-        if (userOauth != null) {
-            return BeanUtils.copy(userOauth, UserOauthDTO.class);
+        try {
+            //根据用户第三方唯一查询
+            UserOauth userOauth = super.getOne(new LambdaQueryWrapper<UserOauth>().eq(UserOauth::getOpenid, openId));
+            //直接查到了信息
+            if (userOauth != null) {
+                return BeanUtils.copy(userOauth, UserOauthDTO.class);
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        } finally {
         }
         return null;
     }
@@ -84,6 +90,7 @@ public class UserOauthServiceImpl extends ServiceImpl<UserOauthMapper, UserOauth
         if (Objects.isNull(user)) {
             return ResultVo.fail("获取用户信息失败");
         }
+        Semaphore semaphore = new Semaphore(10);
         return ResultVo.ok(BeanUtils.copy(user, UserVO.class));
     }
 }

+ 32 - 4
game-module/game-sdk/src/main/java/com/zanxiang/sdk/service/Impl/UserServiceImpl.java

@@ -5,18 +5,21 @@ import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.zanxiang.common.domain.ResultVo;
 import com.zanxiang.common.enums.HttpStatusEnum;
+import com.zanxiang.common.exception.CustomException;
+import com.zanxiang.common.exception.ParamNullException;
+import com.zanxiang.common.utils.GameSignUtil;
+import com.zanxiang.common.utils.MD5Util;
 import com.zanxiang.common.utils.StringUtils;
 import com.zanxiang.common.utils.bean.BeanUtils;
+import com.zanxiang.mybatis.entity.Game;
 import com.zanxiang.mybatis.entity.User;
 import com.zanxiang.mybatis.mapper.UserMapper;
 import com.zanxiang.sdk.common.util.RegisterUtil;
 import com.zanxiang.sdk.domain.dto.UserDTO;
 import com.zanxiang.sdk.domain.dto.UserTokenDTO;
-import com.zanxiang.sdk.domain.params.UpdatePasswordParam;
-import com.zanxiang.sdk.domain.params.UserData;
-import com.zanxiang.sdk.domain.params.UserDetailParam;
-import com.zanxiang.sdk.domain.params.UserOauthlUpdateParam;
+import com.zanxiang.sdk.domain.params.*;
 import com.zanxiang.sdk.domain.vo.UserVO;
+import com.zanxiang.sdk.service.GameService;
 import com.zanxiang.sdk.service.UserService;
 import com.zanxiang.sdk.service.UserTokenService;
 import lombok.extern.slf4j.Slf4j;
@@ -26,6 +29,8 @@ import org.springframework.transaction.annotation.Transactional;
 
 import java.time.LocalDateTime;
 import java.util.Objects;
+import java.util.SortedMap;
+import java.util.TreeMap;
 
 /**
  * @author : lingfeng
@@ -39,6 +44,9 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
     @Autowired
     private UserTokenService userTokenService;
 
+    @Autowired
+    private GameService gameService;
+
     /**
      * 用户重置密码
      *
@@ -118,4 +126,24 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
         return BeanUtils.copy(user, UserDTO.class);
     }
 
+    @Override
+    public Boolean userCheck(UserCheckParam param, UserData userData) {
+        if (StringUtils.isEmpty(param.getSign())) {
+            throw new ParamNullException("Sign");
+        }
+        //查询gameUserId
+        if (StringUtils.isEmpty(param.getGameId())) {
+            throw new ParamNullException("GameId");
+        }
+        Game gameData = gameService.getById(param.getGameId());
+        if (Objects.isNull(gameData)) {
+            throw new CustomException(HttpStatusEnum.GAME_UN_FUND);
+        }
+        SortedMap<String, String> map = new TreeMap<>();
+        map.put("sign", param.getSign());
+        map.put("gameId", param.getGameId());
+        map.put("userId", String.valueOf(userData.getUserId()));
+        return GameSignUtil.verify(map, gameData.getAppKey());
+    }
+
 }

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

@@ -2,6 +2,7 @@ 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.constant.Constants;
 import com.zanxiang.common.enums.ExpireTimeEnum;
 import com.zanxiang.common.enums.HttpStatusEnum;
 import com.zanxiang.common.text.UUID;
@@ -190,7 +191,7 @@ public class UserTokenServiceImpl extends ServiceImpl<UserTokenMapper, UserToken
     private String createToken(Long userId, Integer deviceType) {
         //生成随机数
         String random = userId + deviceType + UUID.randomUUID().toString() + System.currentTimeMillis();
-        String charsetName = "UTF-8";
+        String charsetName = Constants.UTF8;
         //创建token
         return MD5Util.MD5Encode(MD5Util.MD5Encode(random, charsetName), charsetName);
     }

+ 5 - 4
game-module/game-sdk/src/main/java/com/zanxiang/sdk/service/Impl/pay/AlipayServiceImpl.java

@@ -7,6 +7,7 @@ import com.alipay.easysdk.kernel.util.ResponseChecker;
 import com.alipay.easysdk.payment.app.models.AlipayTradeAppPayResponse;
 import com.alipay.easysdk.payment.page.models.AlipayTradePagePayResponse;
 import com.alipay.easysdk.payment.wap.models.AlipayTradeWapPayResponse;
+import com.zanxiang.common.constant.Constants;
 import com.zanxiang.common.domain.ResultMap;
 import com.zanxiang.common.enums.HttpStatusEnum;
 import com.zanxiang.common.enums.OsEnum;
@@ -135,11 +136,11 @@ public class AlipayServiceImpl extends PayService implements OrderPayService {
                             : valueStr + values[i] + ",";
                 }
                 //乱码解决,这段代码在出现乱码时使用
-                valueStr = new String(valueStr.getBytes("ISO-8859-1"), "utf-8");
+                valueStr = new String(valueStr.getBytes("ISO-8859-1"), Constants.UTF8);
                 params.put(name, valueStr);
             }
             //商户订单号
-            String orderNo = new String(request.getParameter("out_trade_no").getBytes("ISO-8859-1"), "UTF-8");
+            String orderNo = new String(request.getParameter("out_trade_no").getBytes("ISO-8859-1"), Constants.UTF8);
             String gamePayWayId = params.get("gamePayWayId");
             //回调地址拼接参数不参加sign验证
             params.remove("gamePayWayId");
@@ -229,8 +230,8 @@ public class AlipayServiceImpl extends PayService implements OrderPayService {
                                     JSONObject jsonObject = JSONObject.parseObject(pageData);
                                     Object invokeAlipayData = jsonObject.get("invokeAlipayData");
                                     String dataString = JSONObject.parseObject(invokeAlipayData.toString()).get("dataString").toString();
-                                    deeplink_android += URLEncoder.encode(dataString, "utf-8");
-                                    deeplink_ios += URLEncoder.encode(pageData, "utf-8");
+                                    deeplink_android += URLEncoder.encode(dataString, Constants.UTF8);
+                                    deeplink_ios += URLEncoder.encode(pageData, Constants.UTF8);
                                     if (product.getDeviceSystem().contains(OsEnum.SYSTEM_ANDROID.getOs())) {
                                         result.put("appLink", deeplink_android);
                                     } else {

+ 4 - 4
game-module/game-sdk/src/main/java/com/zanxiang/sdk/service/Impl/pay/WxpayServiceImpl.java

@@ -94,7 +94,7 @@ public class WxpayServiceImpl extends PayService implements OrderPayService {
         InputStream inputStream = request.getInputStream();
         StringBuffer sb = new StringBuffer();
         String s;
-        BufferedReader in = new BufferedReader(new InputStreamReader(inputStream, "UTF-8"));
+        BufferedReader in = new BufferedReader(new InputStreamReader(inputStream, Constants.UTF8));
         while ((s = in.readLine()) != null) {
             sb.append(s);
         }
@@ -121,7 +121,7 @@ public class WxpayServiceImpl extends PayService implements OrderPayService {
         // 账号信息
         String key = config.getApiKey(); // key
         // 判断签名是否正确
-        if (PayCommonUtil.isTenpaySign("UTF-8", packageParams, key)) {
+        if (PayCommonUtil.isTenpaySign(Constants.UTF8, packageParams, key)) {
             logger.info("微信支付成功回调");
             // ------------------------------
             // 处理业务开始
@@ -181,7 +181,7 @@ public class WxpayServiceImpl extends PayService implements OrderPayService {
         wxPayUtil.commonParams(packageParams);
         packageParams.put("attach", this.attach);
         //生成签名
-        String sign = PayCommonUtil.createSign("UTF-8", packageParams, config.getApiKey());
+        String sign = PayCommonUtil.createSign(Constants.UTF8, packageParams, config.getApiKey());
         //组装二维码信息
         StringBuffer qrCode = new StringBuffer();
         qrCode.append("weixin://wxpay/bizpayurl?");
@@ -250,7 +250,7 @@ public class WxpayServiceImpl extends PayService implements OrderPayService {
 //                scene_info.put("h5_info", value);
 //                packageParams.put("scene_info", scene_info.toString());
 //            }
-            String sign = PayCommonUtil.createSign("UTF-8", packageParams, key);
+            String sign = PayCommonUtil.createSign(Constants.UTF8, packageParams, key);
             packageParams.put("sign", sign);// 签名
             logger.info("订单号:{} 加密请求参数 packageParams:{}", product.getOutTradeNo(), packageParams);
             String requestXML = PayCommonUtil.getRequestXml(packageParams);

+ 11 - 0
game-module/game-sdk/src/main/java/com/zanxiang/sdk/service/UserService.java

@@ -3,8 +3,10 @@ package com.zanxiang.sdk.service;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.zanxiang.common.domain.ResultVo;
 import com.zanxiang.mybatis.entity.User;
+import com.zanxiang.sdk.common.annotation.ValidLogin;
 import com.zanxiang.sdk.domain.dto.UserDTO;
 import com.zanxiang.sdk.domain.params.UpdatePasswordParam;
+import com.zanxiang.sdk.domain.params.UserCheckParam;
 import com.zanxiang.sdk.domain.params.UserData;
 import com.zanxiang.sdk.domain.params.UserDetailParam;
 import com.zanxiang.sdk.domain.vo.UserVO;
@@ -43,4 +45,13 @@ public interface UserService extends IService<User> {
     UserDTO getUserInfoByMobile(String mobile);
 
 
+    /**
+     * cp用户登录检测
+     *
+     * @param param    检测参数
+     * @param userData userData
+     * @return boolean
+     */
+    Boolean userCheck(UserCheckParam param, UserData userData);
+
 }

+ 19 - 0
game-module/game-sdk/src/test/java/com/zanxiang/sdk/ThreadTest.java

@@ -0,0 +1,19 @@
+package com.zanxiang.sdk;
+
+/**
+ * @author xufeng
+ * @date 2022/7/17 00:13
+ */
+public class ThreadTest implements Runnable {
+
+    private static ThreadLocal<String> localVal = new ThreadLocal<>();
+
+    @Override
+    public void run() {
+        for (int i = 0; i < 5; i++) {
+            System.out.println(i);
+        }
+    }
+
+
+}