소스 검색

feat : 游戏对接App修改

bilingfeng 2 년 전
부모
커밋
454a6f9dfe
49개의 변경된 파일453개의 추가작업 그리고 549개의 파일을 삭제
  1. 1 6
      game-module/game-common/src/main/java/com/zanxiang/common/enums/AccountStatusEnum.java
  2. 2 72
      game-module/game-common/src/main/java/com/zanxiang/common/enums/DeviceTypeEnum.java
  3. 5 0
      game-module/game-common/src/main/java/com/zanxiang/common/enums/HttpStatusEnum.java
  4. 6 9
      game-module/game-common/src/main/java/com/zanxiang/common/enums/SmsTypeEnum.java
  5. 1 1
      game-module/game-mybatis/src/main/java/com/zanxiang/mybatis/entity/Channel.java
  6. 1 1
      game-module/game-mybatis/src/main/java/com/zanxiang/mybatis/entity/Cp.java
  7. 1 1
      game-module/game-mybatis/src/main/java/com/zanxiang/mybatis/entity/Game.java
  8. 1 1
      game-module/game-mybatis/src/main/java/com/zanxiang/mybatis/entity/GameApplet.java
  9. 1 1
      game-module/game-mybatis/src/main/java/com/zanxiang/mybatis/entity/GameCategory.java
  10. 1 1
      game-module/game-mybatis/src/main/java/com/zanxiang/mybatis/entity/GameKey.java
  11. 1 1
      game-module/game-mybatis/src/main/java/com/zanxiang/mybatis/entity/GamePayWay.java
  12. 1 1
      game-module/game-mybatis/src/main/java/com/zanxiang/mybatis/entity/GamePicture.java
  13. 1 1
      game-module/game-mybatis/src/main/java/com/zanxiang/mybatis/entity/GameServer.java
  14. 1 1
      game-module/game-mybatis/src/main/java/com/zanxiang/mybatis/entity/GameStrategy.java
  15. 1 1
      game-module/game-mybatis/src/main/java/com/zanxiang/mybatis/entity/GameUser.java
  16. 1 1
      game-module/game-mybatis/src/main/java/com/zanxiang/mybatis/entity/GameUserRole.java
  17. 1 1
      game-module/game-mybatis/src/main/java/com/zanxiang/mybatis/entity/GameVersion.java
  18. 1 1
      game-module/game-mybatis/src/main/java/com/zanxiang/mybatis/entity/IpBan.java
  19. 1 1
      game-module/game-mybatis/src/main/java/com/zanxiang/mybatis/entity/LogPayCp.java
  20. 1 1
      game-module/game-mybatis/src/main/java/com/zanxiang/mybatis/entity/Order.java
  21. 1 1
      game-module/game-mybatis/src/main/java/com/zanxiang/mybatis/entity/OrderComplete.java
  22. 1 1
      game-module/game-mybatis/src/main/java/com/zanxiang/mybatis/entity/PayApplication.java
  23. 1 1
      game-module/game-mybatis/src/main/java/com/zanxiang/mybatis/entity/PayBox.java
  24. 1 1
      game-module/game-mybatis/src/main/java/com/zanxiang/mybatis/entity/PayMerchant.java
  25. 1 1
      game-module/game-mybatis/src/main/java/com/zanxiang/mybatis/entity/PayWay.java
  26. 8 18
      game-module/game-mybatis/src/main/java/com/zanxiang/mybatis/entity/User.java
  27. 1 1
      game-module/game-mybatis/src/main/java/com/zanxiang/mybatis/entity/UserAddress.java
  28. 1 1
      game-module/game-mybatis/src/main/java/com/zanxiang/mybatis/entity/UserBan.java
  29. 50 0
      game-module/game-mybatis/src/main/java/com/zanxiang/mybatis/entity/UserCard.java
  30. 1 1
      game-module/game-mybatis/src/main/java/com/zanxiang/mybatis/entity/UserExt.java
  31. 9 14
      game-module/game-mybatis/src/main/java/com/zanxiang/mybatis/entity/UserLoginLog.java
  32. 1 1
      game-module/game-mybatis/src/main/java/com/zanxiang/mybatis/entity/UserOauth.java
  33. 1 1
      game-module/game-mybatis/src/main/java/com/zanxiang/mybatis/entity/UserToken.java
  34. 1 1
      game-module/game-mybatis/src/main/java/com/zanxiang/mybatis/entity/WordCheck.java
  35. 12 0
      game-module/game-mybatis/src/main/java/com/zanxiang/mybatis/mapper/UserCardMapper.java
  36. 4 0
      game-module/game-mybatis/src/main/resources/mapper/UserCardMapper.xml
  37. 25 26
      game-module/game-sdk/src/main/java/com/zanxiang/sdk/controller/LoginController.java
  38. 9 14
      game-module/game-sdk/src/main/java/com/zanxiang/sdk/controller/UserController.java
  39. 3 15
      game-module/game-sdk/src/main/java/com/zanxiang/sdk/domain/params/CommonParam.java
  40. 9 8
      game-module/game-sdk/src/main/java/com/zanxiang/sdk/domain/params/LoginMobileParam.java
  41. 19 6
      game-module/game-sdk/src/main/java/com/zanxiang/sdk/domain/params/LoginPasswordParam.java
  42. 2 3
      game-module/game-sdk/src/main/java/com/zanxiang/sdk/domain/params/RegisterPasswordParam.java
  43. 6 19
      game-module/game-sdk/src/main/java/com/zanxiang/sdk/domain/params/UpdatePasswordParam.java
  44. 33 6
      game-module/game-sdk/src/main/java/com/zanxiang/sdk/domain/vo/UserLoginVO.java
  45. 178 231
      game-module/game-sdk/src/main/java/com/zanxiang/sdk/service/Impl/LoginServiceImpl.java
  46. 6 10
      game-module/game-sdk/src/main/java/com/zanxiang/sdk/service/Impl/UserLoginLogServiceImpl.java
  47. 15 23
      game-module/game-sdk/src/main/java/com/zanxiang/sdk/service/Impl/UserServiceImpl.java
  48. 22 41
      game-module/game-sdk/src/main/java/com/zanxiang/sdk/service/RegisterLoginService.java
  49. 2 1
      game-module/game-sdk/src/main/java/com/zanxiang/sdk/service/UserLoginLogService.java

+ 1 - 6
game-module/game-common/src/main/java/com/zanxiang/common/enums/AccountStatusEnum.java

@@ -12,15 +12,10 @@ import lombok.Getter;
 @AllArgsConstructor
 public enum AccountStatusEnum {
 
-    /**
-     * 密码加密盐值
-     */
-    TRY_PLAY_STATUS(1, "试玩状态"),
-
     /**
      * 正常状态
      */
-    NORMAL_STATUS(2, "正常状态"),
+    NORMAL_STATUS(0, "正常状态"),
 
     /**
      * 冻结状态

+ 2 - 72
game-module/game-common/src/main/java/com/zanxiang/common/enums/DeviceTypeEnum.java

@@ -12,85 +12,15 @@ import lombok.Getter;
 @AllArgsConstructor
 public enum DeviceTypeEnum {
 
-    /**
-     * 苹果正版sdk
-     */
-    DEVICE_TYPE_IOSAPPLESDK("iosapplesdk", "苹果正版sdk"),
-
-    /**
-     * 苹果免越狱sdk
-     */
-    DEVICE_TYPE_IOSSDK("iossdk", "苹果免越狱sdk"),
-
-    /**
-     * 苹果app
-     */
-    DEVICE_TYPE_IOSAPP("iosapp", "苹果app"),
-
-    /**
-     * 苹果h5app
-     */
-    DEVICE_TYPE_IOSH5APP("iosh5app", "苹果h5app"),
-
-    /**
-     * safari浏览器
-     */
-    DEVICE_TYPE_SAFARI("safari", "safari浏览器"),
-
-    /**
-     * 安卓sdk
-     */
-    DEVICE_TYPE_ANDSDK("andsdk", "安卓sdk"),
-
     /**
      * 安卓app
      */
-    DEVICE_TYPE_ANDAPP("andapp", "安卓app"),
-
-    /**
-     * 安卓h5app
-     */
-    DEVICE_TYPE_ANDH5APP("andh5app", "安卓h5app"),
-
-    /**
-     * 安卓浏览器
-     */
-    DEVICE_TYPE_ANDBROWSER("andbrowser", "安卓浏览器"),
-
-    /**
-     * 微信
-     */
-    DEVICE_TYPE_WEIXIN("weixin", "微信"),
-
-    /**
-     * 电脑
-     */
-    DEVICE_TYPE_PC("pc", "电脑"),
-
-    /**
-     * 广告平台
-     */
-    DEVICE_TYPE_AGENT("agent", "广告平台"),
-
-    /**
-     * 普通wap
-     */
-    DEVICE_TYPE_WAP("wap", "普通wap"),
-
-    /**
-     * 微信小程序
-     */
-    DEVICE_TYPE_MP("mp", "微信小程序"),
-
-    /**
-     * 微信盒子
-     */
-    DEVICE_TYPE_BOX("box", "微信盒子");
+    DEVICE_TYPE_ANDROID_APP(1, "androidApp");
 
     /**
      * 设备类型
      */
-    private String deviceType;
+    private Integer deviceType;
 
     /**
      * 描述

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

@@ -127,6 +127,11 @@ public enum HttpStatusEnum {
      */
     PASSWORD_ERROR(41205, "密码错误"),
 
+    /**
+     * 密码错误
+     */
+    OLD_PASSWORD_ERROR(41206, "旧密码错误"),
+
     /**
      * 手机号为空
      */

+ 6 - 9
game-module/game-common/src/main/java/com/zanxiang/common/enums/SmsTypeEnum.java

@@ -16,19 +16,19 @@ import java.util.Objects;
 public enum SmsTypeEnum {
 
     /**
-     * 注册
+     * 注册登录
      */
     SMS_REG(1, "注册"),
 
     /**
-     * 注册
+     * 修改密码
      */
-    SMS_LOGIN(2, "登陆"),
+    SMS_MODIFY(2, "修改密码"),
 
     /**
-     * 修改密码
+     * 绑定手机
      */
-    SMS_MODIFY(3, "修改密码"),
+    SMS_BIND(3, "绑定手机"),
 
     /**
      * 身份验证
@@ -40,10 +40,7 @@ public enum SmsTypeEnum {
      */
     SMS_FIND_PWD(5, "找回密码"),
 
-    /**
-     * 绑定手机
-     */
-    SMS_BIND(6, "绑定手机"),
+
 
     /**
      * 其他,增加时这个放最后

+ 1 - 1
game-module/game-mybatis/src/main/java/com/zanxiang/mybatis/entity/Channel.java

@@ -18,7 +18,7 @@ import java.time.LocalDateTime;
 @AllArgsConstructor
 @ToString
 @Builder
-@TableName("h_channel")
+@TableName("t_channel")
 public class Channel {
 
     /**

+ 1 - 1
game-module/game-mybatis/src/main/java/com/zanxiang/mybatis/entity/Cp.java

@@ -15,7 +15,7 @@ import java.time.LocalDateTime;
 @AllArgsConstructor
 @ToString
 @Builder
-@TableName("h_cp")
+@TableName("t_cp")
 public class Cp {
 
     /**

+ 1 - 1
game-module/game-mybatis/src/main/java/com/zanxiang/mybatis/entity/Game.java

@@ -18,7 +18,7 @@ import java.time.LocalDateTime;
 @AllArgsConstructor
 @ToString
 @Builder
-@TableName("h_game")
+@TableName("t_game")
 public class Game {
 
     /**

+ 1 - 1
game-module/game-mybatis/src/main/java/com/zanxiang/mybatis/entity/GameApplet.java

@@ -17,7 +17,7 @@ import java.time.LocalDateTime;
 @AllArgsConstructor
 @ToString
 @Builder
-@TableName("h_game_applet")
+@TableName("t_game_applet")
 public class GameApplet {
 
     /**

+ 1 - 1
game-module/game-mybatis/src/main/java/com/zanxiang/mybatis/entity/GameCategory.java

@@ -15,7 +15,7 @@ import java.time.LocalDateTime;
 @AllArgsConstructor
 @ToString
 @Builder
-@TableName("h_game_category")
+@TableName("t_game_category")
 public class GameCategory {
 
     /**

+ 1 - 1
game-module/game-mybatis/src/main/java/com/zanxiang/mybatis/entity/GameKey.java

@@ -18,7 +18,7 @@ import java.time.LocalDateTime;
 @AllArgsConstructor
 @ToString
 @Builder
-@TableName("h_game_key")
+@TableName("t_game_key")
 public class GameKey implements Serializable {
 
     private static final long serialVersionUID = 5699964900570462660L;

+ 1 - 1
game-module/game-mybatis/src/main/java/com/zanxiang/mybatis/entity/GamePayWay.java

@@ -19,7 +19,7 @@ import java.time.LocalDateTime;
 @AllArgsConstructor
 @ToString
 @Builder
-@TableName("h_game_pay_way")
+@TableName("t_game_pay_way")
 public class GamePayWay {
 
     /**

+ 1 - 1
game-module/game-mybatis/src/main/java/com/zanxiang/mybatis/entity/GamePicture.java

@@ -17,7 +17,7 @@ import java.time.LocalDateTime;
 @AllArgsConstructor
 @ToString
 @Builder
-@TableName("h_game_picture")
+@TableName("t_game_picture")
 public class GamePicture {
 
     /**

+ 1 - 1
game-module/game-mybatis/src/main/java/com/zanxiang/mybatis/entity/GameServer.java

@@ -18,7 +18,7 @@ import java.time.LocalDateTime;
 @AllArgsConstructor
 @ToString
 @Builder
-@TableName("h_game_server")
+@TableName("t_game_server")
 public class GameServer {
 
     /**

+ 1 - 1
game-module/game-mybatis/src/main/java/com/zanxiang/mybatis/entity/GameStrategy.java

@@ -20,7 +20,7 @@ import java.util.Date;
 @AllArgsConstructor
 @ToString
 @Builder
-@TableName("h_game_strategy")
+@TableName("t_game_strategy")
 public class GameStrategy implements Serializable {
 
     private static final long serialVersionUID = 1L;

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

@@ -18,7 +18,7 @@ import java.time.LocalDateTime;
 @AllArgsConstructor
 @ToString
 @Builder
-@TableName("h_game_user")
+@TableName("t_game_user")
 public class GameUser {
 
     /**

+ 1 - 1
game-module/game-mybatis/src/main/java/com/zanxiang/mybatis/entity/GameUserRole.java

@@ -18,7 +18,7 @@ import java.time.LocalDateTime;
 @AllArgsConstructor
 @ToString
 @Builder
-@TableName("h_game_user_role")
+@TableName("t_game_user_role")
 public class GameUserRole {
 
     /**

+ 1 - 1
game-module/game-mybatis/src/main/java/com/zanxiang/mybatis/entity/GameVersion.java

@@ -18,7 +18,7 @@ import java.time.LocalDateTime;
 @AllArgsConstructor
 @ToString
 @Builder
-@TableName("h_game_version")
+@TableName("t_game_version")
 public class GameVersion {
 
     /**

+ 1 - 1
game-module/game-mybatis/src/main/java/com/zanxiang/mybatis/entity/IpBan.java

@@ -15,7 +15,7 @@ import java.time.LocalDateTime;
 @AllArgsConstructor
 @ToString
 @Builder
-@TableName("h_ip_ban")
+@TableName("t_ip_ban")
 public class IpBan {
 
     /**

+ 1 - 1
game-module/game-mybatis/src/main/java/com/zanxiang/mybatis/entity/LogPayCp.java

@@ -19,7 +19,7 @@ import java.util.Date;
 @Data
 @NoArgsConstructor
 @AllArgsConstructor
-@TableName("h_log_pay_cp")
+@TableName("t_log_pay_cp")
 public class LogPayCp implements Serializable {
 
     private static final long serialVersionUID = 1L;

+ 1 - 1
game-module/game-mybatis/src/main/java/com/zanxiang/mybatis/entity/Order.java

@@ -19,7 +19,7 @@ import java.time.LocalDateTime;
 @AllArgsConstructor
 @ToString
 @Builder
-@TableName("h_order")
+@TableName("t_order")
 public class Order {
 
     /**

+ 1 - 1
game-module/game-mybatis/src/main/java/com/zanxiang/mybatis/entity/OrderComplete.java

@@ -18,7 +18,7 @@ import java.util.Date;
 @Data
 @NoArgsConstructor
 @AllArgsConstructor
-@TableName("h_order_complete")
+@TableName("t_order_complete")
 public class OrderComplete implements Serializable {
 
     private static final long serialVersionUID = 1L;

+ 1 - 1
game-module/game-mybatis/src/main/java/com/zanxiang/mybatis/entity/PayApplication.java

@@ -20,7 +20,7 @@ import java.util.Date;
 @Data
 @NoArgsConstructor
 @AllArgsConstructor
-@TableName("h_pay_application")
+@TableName("t_pay_application")
 public class PayApplication implements Serializable {
 
     private static final long serialVersionUID = 1L;

+ 1 - 1
game-module/game-mybatis/src/main/java/com/zanxiang/mybatis/entity/PayBox.java

@@ -20,7 +20,7 @@ import java.util.Date;
 @Data
 @NoArgsConstructor
 @AllArgsConstructor
-@TableName("h_pay_box")
+@TableName("t_pay_box")
 public class PayBox implements Serializable {
 
     private static final long serialVersionUID = 1L;

+ 1 - 1
game-module/game-mybatis/src/main/java/com/zanxiang/mybatis/entity/PayMerchant.java

@@ -19,7 +19,7 @@ import java.util.Date;
  */
 @Data
 @NoArgsConstructor
-@TableName("h_pay_merchant")
+@TableName("t_pay_merchant")
 public class PayMerchant implements Serializable {
 
     private static final long serialVersionUID = 1L;

+ 1 - 1
game-module/game-mybatis/src/main/java/com/zanxiang/mybatis/entity/PayWay.java

@@ -15,7 +15,7 @@ import lombok.*;
 @AllArgsConstructor
 @ToString
 @Builder
-@TableName("h_pay_way")
+@TableName("t_pay_way")
 public class PayWay {
 
     /**

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

@@ -18,7 +18,7 @@ import java.time.LocalDateTime;
 @AllArgsConstructor
 @ToString
 @Builder
-@TableName("h_user")
+@TableName("t_user")
 public class User {
 
     /**
@@ -68,22 +68,12 @@ public class User {
     private String aliPay;
 
     /**
-     * 设备来源 mobile,android,iphone,ipad,web,pc,mac,wxapp
-     */
-    private String fromDevice;
-
-    /**
-     * 设备ID android 为imei ios 为idfa
-     */
-    private String deviceId;
-
-    /**
-     * 设备类型
+     * 客户端类型, 1 : 安卓app
      */
     private Integer deviceType;
 
     /**
-     * -1 为冻结状态, 1 为试玩状态 2为正常状态
+     * 用户状态, -1 : 为冻结状态, 0 : 为正常状态
      */
     private Integer status;
 
@@ -92,11 +82,6 @@ public class User {
      */
     private String avatar;
 
-    /**
-     * 渠道
-     */
-    private Long channel;
-
     /**
      * 充值次数
      */
@@ -137,6 +122,11 @@ public class User {
      */
     private Integer vipMax;
 
+    /**
+     * 是否实名认证,0未实名认证,1成年人,2未成年人
+     */
+    private Integer authentication;
+
     /**
      * 注册时间
      */

+ 1 - 1
game-module/game-mybatis/src/main/java/com/zanxiang/mybatis/entity/UserAddress.java

@@ -18,7 +18,7 @@ import java.time.LocalDateTime;
 @AllArgsConstructor
 @ToString
 @Builder
-@TableName("h_user_address")
+@TableName("t_user_address")
 public class UserAddress {
 
     /**

+ 1 - 1
game-module/game-mybatis/src/main/java/com/zanxiang/mybatis/entity/UserBan.java

@@ -18,7 +18,7 @@ import java.time.LocalDateTime;
 @AllArgsConstructor
 @ToString
 @Builder
-@TableName("h_user_ban")
+@TableName("t_user_ban")
 public class UserBan {
 
     /**

+ 50 - 0
game-module/game-mybatis/src/main/java/com/zanxiang/mybatis/entity/UserCard.java

@@ -0,0 +1,50 @@
+package com.zanxiang.mybatis.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.*;
+
+import java.util.Date;
+
+/**
+ * @author : lingfeng
+ * @time : 2022-09-26
+ * @description : 用户实名认证信息
+ */
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+@ToString
+@Builder
+@TableName("t_user_card")
+public class UserCard {
+
+    /**
+     * 主键
+     */
+    private Long id;
+
+    /**
+     * 用户id
+     */
+    private Long userId;
+
+    /**
+     * 身份证号
+     */
+    private String cardId;
+
+    /**
+     * 真实姓名
+     */
+    private String cardName;
+
+    /**
+     * 创建时间
+     */
+    private Date createTime;
+
+    /**
+     * 更新时间
+     */
+    private Date updateTime;
+}

+ 1 - 1
game-module/game-mybatis/src/main/java/com/zanxiang/mybatis/entity/UserExt.java

@@ -16,7 +16,7 @@ import java.time.LocalDateTime;
 @AllArgsConstructor
 @ToString
 @Builder
-@TableName("h_user_ext")
+@TableName("t_user_ext")
 public class UserExt {
 
     /**

+ 9 - 14
game-module/game-mybatis/src/main/java/com/zanxiang/mybatis/entity/UserLoginLog.java

@@ -17,7 +17,7 @@ import java.time.LocalDateTime;
 @AllArgsConstructor
 @ToString
 @Builder
-@TableName("h_user_login_log")
+@TableName("t_user_login_log")
 public class UserLoginLog {
 
     /**
@@ -31,11 +31,6 @@ public class UserLoginLog {
      */
     private Long userId;
 
-    /**
-     * 推广来源
-     */
-    private Long agentId;
-
     /**
      * 游戏id
      */
@@ -52,22 +47,22 @@ public class UserLoginLog {
     private String os;
 
     /**
-     * 设备来源
+     * ip
      */
-    private String fromDevice;
+    private String ip;
 
     /**
-     * 设备ID android 为imei ios 为idfa
+     * 客户端类型, 1 : 安卓app
      */
-    private String deviceId;
+    private Integer deviceType;
 
     /**
-     * 登录ip
+     * 类型, 0 : 登录, 1 : 注销
      */
-    private String loginIp;
+    private Integer type;
 
     /**
-     * 登录时间
+     * 创建时间
      */
-    private LocalDateTime loginTime;
+    private LocalDateTime createTime;
 }

+ 1 - 1
game-module/game-mybatis/src/main/java/com/zanxiang/mybatis/entity/UserOauth.java

@@ -17,7 +17,7 @@ import java.time.LocalDateTime;
 @AllArgsConstructor
 @ToString
 @Builder
-@TableName("h_user_oauth")
+@TableName("t_user_oauth")
 public class UserOauth {
 
     /**

+ 1 - 1
game-module/game-mybatis/src/main/java/com/zanxiang/mybatis/entity/UserToken.java

@@ -18,7 +18,7 @@ import java.time.LocalDateTime;
 @AllArgsConstructor
 @ToString
 @Builder
-@TableName("h_user_token")
+@TableName("t_user_token")
 public class UserToken implements Serializable {
 
     private static final long serialVersionUID = -6515396685604515968L;

+ 1 - 1
game-module/game-mybatis/src/main/java/com/zanxiang/mybatis/entity/WordCheck.java

@@ -17,7 +17,7 @@ import lombok.ToString;
 @NoArgsConstructor
 @AllArgsConstructor
 @ToString
-@TableName("h_word_check")
+@TableName("t_word_check")
 public class WordCheck {
 
     /**

+ 12 - 0
game-module/game-mybatis/src/main/java/com/zanxiang/mybatis/mapper/UserCardMapper.java

@@ -0,0 +1,12 @@
+package com.zanxiang.mybatis.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.zanxiang.mybatis.entity.UserCard;
+
+/**
+ * @author : lingfeng
+ * @time : 2022-09-26
+ * @description : ${description}
+ */
+public interface UserCardMapper extends BaseMapper<UserCard> {
+}

+ 4 - 0
game-module/game-mybatis/src/main/resources/mapper/UserCardMapper.xml

@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.zanxiang.mybatis.mapper.UserCardMapper">
+</mapper>

+ 25 - 26
game-module/game-sdk/src/main/java/com/zanxiang/sdk/controller/RegisterLoginController.java → game-module/game-sdk/src/main/java/com/zanxiang/sdk/controller/LoginController.java

@@ -1,9 +1,13 @@
 package com.zanxiang.sdk.controller;
 
 import com.zanxiang.common.domain.ResultVO;
-import com.zanxiang.sdk.domain.params.*;
+import com.zanxiang.sdk.domain.params.LoginMobileParam;
+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.service.RegisterLoginService;
+import com.zanxiang.sdk.service.UserTokenService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiResponse;
@@ -22,44 +26,39 @@ import javax.servlet.http.HttpServletResponse;
  */
 @Api(tags = "注册登录接口")
 @RestController
-@RequestMapping(value = "/api/user")
-public class RegisterLoginController {
+@RequestMapping(value = "/api/login")
+public class LoginController {
 
     @Autowired
     private RegisterLoginService registerPassword;
 
-    @ApiOperation(value = "用户普通注册")
-    @PostMapping("/register/password")
-    @ApiResponses(value = {@ApiResponse(code = 200, message = "成功", response = UserLoginVO.class)})
-    public ResultVO<UserLoginVO> registerPassword(@Validated @RequestBody RegisterPasswordParam registerPasswordParam,
-                                                  HttpServletRequest request, UserData userData) {
-        return registerPassword.registerPassword(registerPasswordParam, request, userData);
-    }
+    @Autowired
+    private UserTokenService userTokenService;
 
-    @ApiOperation(value = "用户手机注册")
-    @PostMapping("/register/mobile")
-    @ApiResponses(value = {@ApiResponse(code = 200, message = "成功", response = UserLoginVO.class)})
-    public ResultVO<UserLoginVO> registerMobile(@Validated @RequestBody RegisterMobileParam registerMobileParam,
-                                                HttpServletRequest request, UserData userData) {
-        return registerPassword.registerMobile(registerMobileParam, request, userData);
+    @ApiOperation(value = "登录凭证验证")
+    @GetMapping("/token/check")
+    @ApiResponses(value = {@ApiResponse(code = 200, message = "成功", response = Long.class)})
+    public ResultVO userTokenCheck(@RequestParam Long gameId, @RequestParam Long userId,
+                                   @RequestParam String token, @RequestParam String sign) {
+        return userTokenService.userTokenCheck(gameId, userId, token, sign);
     }
 
-    @ApiOperation(value = "用户名密码登录")
-    @PostMapping("/login/password")
+    @ApiOperation(value = "用户账号注册注册/登录")
+    @PostMapping("/password")
     @ApiResponses(value = {@ApiResponse(code = 200, message = "成功", response = UserLoginVO.class)})
-    public ResultVO<UserLoginVO> loginPassword(@Validated @RequestBody LoginPasswordParam userLoginParam,
-                                               HttpServletRequest request, UserData userData) {
-        return registerPassword.loginPassword(userLoginParam, request, userData);
+    public ResultVO<UserLoginVO> loginPassword(@Validated @RequestBody LoginPasswordParam param, HttpServletRequest request) {
+        return registerPassword.loginPassword(param, request);
     }
 
-    @ApiOperation(value = "用户手机号登录")
-    @PostMapping("/login/mobile")
+    @ApiOperation(value = "用户手机号注册/登录")
+    @PostMapping("/mobile")
     @ApiResponses(value = {@ApiResponse(code = 200, message = "成功", response = UserLoginVO.class)})
-    public ResultVO<UserLoginVO> loginMobile(@Validated @RequestBody LoginMobileParam loginMobileParam,
-                                             HttpServletRequest request, UserData userData) {
-        return registerPassword.loginMobile(loginMobileParam, request, userData);
+    public ResultVO<UserLoginVO> loginMobile(@Validated @RequestBody LoginMobileParam param, HttpServletRequest request) {
+        return registerPassword.loginMobile(param, request);
     }
 
+    //-------------------------------- 微信和QQ授权登录(暂时没有用到) --------------------------------
+
     @ApiOperation(value = "用户QQ授权登录")
     @GetMapping("/register/login/qq")
     @ApiResponses(value = {@ApiResponse(code = 200, message = "成功", response = UserLoginVO.class)})

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

@@ -4,14 +4,20 @@ import com.zanxiang.common.domain.ResultVO;
 import com.zanxiang.sdk.common.annotation.ValidLogin;
 import com.zanxiang.sdk.domain.params.*;
 import com.zanxiang.sdk.domain.vo.UserLoginVO;
-import com.zanxiang.sdk.service.*;
+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;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiResponse;
 import io.swagger.annotations.ApiResponses;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.*;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
 
 /**
  * @author : lingfeng
@@ -35,21 +41,10 @@ public class UserController {
     @Autowired
     private GameUserService gameUserService;
 
-    @Autowired
-    private UserTokenService userTokenService;
-
-    @ApiOperation(value = "登录凭证验证")
-    @GetMapping("/token/check")
-    @ApiResponses(value = {@ApiResponse(code = 200, message = "成功", response = Long.class)})
-    public ResultVO userTokenCheck(@RequestParam Long gameId, @RequestParam Long userId,
-                                   @RequestParam String token, @RequestParam String sign) {
-        return userTokenService.userTokenCheck(gameId, userId, token, sign);
-    }
-
     @ApiOperation(value = "用户重置密码")
     @PostMapping("/update/password")
     @ApiResponses(value = {@ApiResponse(code = 200, message = "成功", response = UserLoginVO.class)})
-    public ResultVO updatePassword(@Validated @RequestBody UpdatePasswordParam updatePasswordParam, UserData userData) {
+    public ResultVO updatePassword(@Validated @RequestBody UpdatePasswordParam updatePasswordParam, @ValidLogin UserData userData) {
         return userService.updatePassword(updatePasswordParam, userData);
     }
 

+ 3 - 15
game-module/game-sdk/src/main/java/com/zanxiang/sdk/domain/params/CommonParam.java

@@ -8,7 +8,9 @@ import java.io.Serializable;
 
 @Data
 public class CommonParam implements Serializable {
+
     //==============必须携带相关参数===========
+
     @ApiModelProperty("token")
     private String token;
 
@@ -21,6 +23,7 @@ public class CommonParam implements Serializable {
     private String mgUserId;
 
     //==============device 相关===============
+
     @ApiModelProperty("设备id")
     @JsonAlias("device-device_id")
     private String deviceId;
@@ -40,19 +43,4 @@ public class CommonParam implements Serializable {
     @ApiModelProperty("设备类型")
     @JsonAlias("device-type")
     private Integer deviceType;
-
-//            "device-os":"",
-//            "device-os_version":"",
-//            "device-screen":"",
-//            "device-net":"",
-//            "device-imsi":"",
-//            "device-longitude":"",
-//            "device-latitude":"",
-//            "device-userua":"",
-//            "device-disk_space":"",
-//            "device-open_time":"",
-//            "device-is_charge":"",
-//            "device-screen_luminance":"",
-//            "device-has_sim":"",
-//            "device-is_break":""
 }

+ 9 - 8
game-module/game-sdk/src/main/java/com/zanxiang/sdk/domain/params/LoginMobileParam.java

@@ -1,9 +1,7 @@
 package com.zanxiang.sdk.domain.params;
 
-import com.fasterxml.jackson.annotation.JsonAlias;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
-import lombok.EqualsAndHashCode;
 
 import javax.validation.constraints.NotBlank;
 import javax.validation.constraints.NotNull;
@@ -11,18 +9,16 @@ import javax.validation.constraints.NotNull;
 /**
  * @author : lingfeng
  * @time : 2022-06-07
- * @description :
+ * @description : 手机登录参数
  */
 @Data
-@EqualsAndHashCode(callSuper = true)
-public class LoginMobileParam extends CommonParam {
+public class LoginMobileParam {
 
     /**
      * 验证码类型
      */
     @ApiModelProperty(notes = "验证码类型")
     @NotNull(message = "验证码类型不可为空")
-    @JsonAlias("sms-type")
     private Integer type;
 
     /**
@@ -30,7 +26,6 @@ public class LoginMobileParam extends CommonParam {
      */
     @ApiModelProperty(notes = "手机号")
     @NotBlank(message = "手机号不可为空")
-    @JsonAlias("sms-mobile")
     private String mobile;
 
     /**
@@ -38,6 +33,12 @@ public class LoginMobileParam extends CommonParam {
      */
     @ApiModelProperty(notes = "验证码")
     @NotBlank(message = "验证码不可为空")
-    @JsonAlias("sms-code")
     private String code;
+
+    /**
+     * 游戏id
+     */
+    @ApiModelProperty(notes = "游戏id")
+    @NotBlank(message = "游戏id类型不可为空")
+    private Long gameId;
 }

+ 19 - 6
game-module/game-sdk/src/main/java/com/zanxiang/sdk/domain/params/LoginPasswordParam.java

@@ -1,9 +1,7 @@
 package com.zanxiang.sdk.domain.params;
 
-import com.fasterxml.jackson.annotation.JsonAlias;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
-import lombok.EqualsAndHashCode;
 
 import javax.validation.constraints.NotBlank;
 
@@ -13,14 +11,16 @@ import javax.validation.constraints.NotBlank;
  * @description : 用户登录参数
  */
 @Data
-@EqualsAndHashCode(callSuper = true)
-public class LoginPasswordParam extends CommonParam {
+public class LoginPasswordParam {
+
+    public static final int REGISTER = 0;
+
+    public static final int LOGIN = 1;
 
     /**
      * 用户名
      */
     @ApiModelProperty(notes = "用户名")
-    @JsonAlias("mem-username")
     @NotBlank(message = "登陆用户名字不可为空")
     private String username;
 
@@ -29,6 +29,19 @@ public class LoginPasswordParam extends CommonParam {
      */
     @ApiModelProperty(notes = "密码")
     @NotBlank(message = "登陆密码不可为空")
-    @JsonAlias("mem-password")
     private String password;
+
+    /**
+     * 类型 , 0 : 注册登录, 1 : 登录
+     */
+    @ApiModelProperty(notes = "类型 , 0 : 注册登录, 1 : 登录")
+    @NotBlank(message = "类型不可为空")
+    private Integer type;
+
+    /**
+     * 游戏id
+     */
+    @ApiModelProperty(notes = "游戏id")
+    @NotBlank(message = "游戏id类型不可为空")
+    private Long gameId;
 }

+ 2 - 3
game-module/game-sdk/src/main/java/com/zanxiang/sdk/domain/params/RegisterPasswordParam.java

@@ -1,6 +1,5 @@
 package com.zanxiang.sdk.domain.params;
 
-import com.fasterxml.jackson.annotation.JsonAlias;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
@@ -16,11 +15,12 @@ import javax.validation.constraints.NotBlank;
 @EqualsAndHashCode(callSuper = true)
 public class RegisterPasswordParam extends CommonParam {
 
+    private static final long serialVersionUID = 4303428251439433594L;
+
     /**
      * 用户名
      */
     @ApiModelProperty(notes = "用户名")
-    @JsonAlias("mem-username")
     @NotBlank(message = "注册用户名字不可为空")
     private String username;
 
@@ -29,6 +29,5 @@ public class RegisterPasswordParam extends CommonParam {
      */
     @ApiModelProperty(notes = "密码")
     @NotBlank(message = "注册密码不可为空")
-    @JsonAlias("mem-password")
     private String password;
 }

+ 6 - 19
game-module/game-sdk/src/main/java/com/zanxiang/sdk/domain/params/UpdatePasswordParam.java

@@ -1,9 +1,7 @@
 package com.zanxiang.sdk.domain.params;
 
-import com.fasterxml.jackson.annotation.JsonAlias;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
-import lombok.EqualsAndHashCode;
 
 import javax.validation.constraints.NotBlank;
 
@@ -13,30 +11,19 @@ import javax.validation.constraints.NotBlank;
  * @description : 修改密码参数
  */
 @Data
-@EqualsAndHashCode(callSuper = true)
-public class UpdatePasswordParam extends CommonParam{
+public class UpdatePasswordParam {
 
     /**
-     * 用户token
+     * 旧密码
      */
-    @ApiModelProperty(notes = "token")
-    @JsonAlias("verify_token")
-    @NotBlank(message = "注册用户名字不可为空")
-    private String token;
-
-    /**
-     * 用户名
-     */
-    @ApiModelProperty(notes = "用户名")
-    @JsonAlias("mem-username")
-    @NotBlank(message = "用户名字不可为空")
-    private String username;
+    @ApiModelProperty(notes = "旧密码")
+    @NotBlank(message = "旧密码不可为空")
+    private String oldPassword;
 
     /**
      * 新密码
      */
     @ApiModelProperty(notes = "新密码")
     @NotBlank(message = "新密码不可为空")
-    @JsonAlias("mem-password")
-    private String password;
+    private String newPassword;
 }

+ 33 - 6
game-module/game-sdk/src/main/java/com/zanxiang/sdk/domain/vo/UserLoginVO.java

@@ -1,7 +1,10 @@
 package com.zanxiang.sdk.domain.vo;
 
 import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
 import lombok.Data;
+import lombok.NoArgsConstructor;
 
 /**
  * @author : lingfeng
@@ -9,8 +12,23 @@ import lombok.Data;
  * @description : 用户登录信息返回
  */
 @Data
+@AllArgsConstructor
+@NoArgsConstructor
+@Builder
 public class UserLoginVO {
 
+    /**
+     * 用户id, 唯一标识
+     */
+    @ApiModelProperty(notes = "用户id, 唯一标识")
+    private Long userId;
+
+    /**
+     * 用户名
+     */
+    @ApiModelProperty(notes = "用户名")
+    private String userName;
+
     /**
      * 登录授权的token
      */
@@ -18,11 +36,20 @@ public class UserLoginVO {
     private String token;
 
     /**
-     * 构造方法
-     *
-     * @param token : 用户token
+     * 扩展值,可能为空
+     */
+    @ApiModelProperty(notes = "扩展值,可能为空")
+    private String extension;
+
+    /**
+     * 是否实名认证,0未实名认证,1成年人,2未成年人
+     */
+    @ApiModelProperty(notes = "是否实名认证,0未实名认证,1成年人,2未成年人")
+    private Integer authentication;
+
+    /**
+     * 是否绑定手机1:已绑定,其他:未绑定
      */
-    public UserLoginVO(String token) {
-        this.token = token;
-    }
+    @ApiModelProperty(notes = "是否绑定手机, 0 : 未绑定, 1:已绑定")
+    private Integer bindPhone;
 }

+ 178 - 231
game-module/game-sdk/src/main/java/com/zanxiang/sdk/service/Impl/RegisterLoginServiceImpl.java → game-module/game-sdk/src/main/java/com/zanxiang/sdk/service/Impl/LoginServiceImpl.java

@@ -3,12 +3,12 @@ package com.zanxiang.sdk.service.Impl;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.zanxiang.common.domain.ResultVO;
 import com.zanxiang.common.enums.AccountStatusEnum;
+import com.zanxiang.common.enums.DeviceTypeEnum;
 import com.zanxiang.common.enums.HttpStatusEnum;
 import com.zanxiang.common.exception.BaseException;
 import com.zanxiang.common.text.UUID;
 import com.zanxiang.common.utils.IpUtils;
 import com.zanxiang.common.utils.JsonUtil;
-import com.zanxiang.common.utils.StringUtils;
 import com.zanxiang.common.utils.URIUtil;
 import com.zanxiang.mybatis.entity.User;
 import com.zanxiang.sdk.common.constant.ApiUrlConstant;
@@ -16,14 +16,17 @@ import com.zanxiang.sdk.common.constant.RedisKeyConstant;
 import com.zanxiang.sdk.common.util.RedisUtil;
 import com.zanxiang.sdk.common.util.RegisterUtil;
 import com.zanxiang.sdk.domain.dto.UserOauthDTO;
-import com.zanxiang.sdk.domain.params.*;
+import com.zanxiang.sdk.domain.params.LoginMobileParam;
+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.service.*;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.logging.log4j.util.Strings;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
 
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
@@ -39,7 +42,7 @@ import java.util.Objects;
  */
 @Slf4j
 @Service
-public class RegisterLoginServiceImpl implements RegisterLoginService {
+public class LoginServiceImpl implements RegisterLoginService {
 
     @Autowired
     private RedisUtil<String> redisUtil;
@@ -80,6 +83,156 @@ public class RegisterLoginServiceImpl implements RegisterLoginService {
     @Value("${auth.vx-appId}")
     private String vxAppId;
 
+    /**
+     * 用户名注册或者登录
+     *
+     * @param param   : 注册登录参数
+     * @param request : 请求信息
+     * @return : 返回用户登录信息
+     */
+    @Override
+    public ResultVO<UserLoginVO> loginPassword(LoginPasswordParam param, HttpServletRequest request) {
+        String username = param.getUsername();
+        String password = param.getPassword();
+        Long gameId = param.getGameId();
+        Integer type = param.getType();
+        //用户信息
+        User user;
+        //登录, 进行登录检测
+        if (Objects.equals(type, LoginPasswordParam.LOGIN)) {
+            user = userService.getOne(new LambdaQueryWrapper<User>().eq(User::getUsername, username));
+            //用户信息不存在
+            if (user == null) {
+                return new ResultVO<>(HttpStatusEnum.USERNAME_OR_PASSWORD_ERR);
+            }
+            //判断账号是否停用
+            if (Objects.equals(AccountStatusEnum.FROZEN_STATUS.getStatus(), user.getStatus())) {
+                return new ResultVO<>(HttpStatusEnum.ACCOUNT_HALT);
+            }
+            //验证密码
+            if (!Objects.equals(RegisterUtil.cmfPassword(password), user.getPassword())) {
+                return new ResultVO<>(HttpStatusEnum.USERNAME_OR_PASSWORD_ERR);
+            }
+        } else {
+            //注册, 用户名密码校验
+            HttpStatusEnum checkRegisterEnum = this.checkRegister(username, password);
+            if (!Objects.equals(checkRegisterEnum, HttpStatusEnum.SUCCESS)) {
+                return new ResultVO<>(checkRegisterEnum);
+            }
+            //创建用户信息
+            user = User.builder()
+                    .gameId(gameId)
+                    .username(username)
+                    .password(RegisterUtil.cmfPassword(password))
+                    .deviceType(DeviceTypeEnum.DEVICE_TYPE_ANDROID_APP.getDeviceType())
+                    .status(AccountStatusEnum.NORMAL_STATUS.getStatus())
+                    .createTime(LocalDateTime.now())
+                    .updateTime(LocalDateTime.now())
+                    .build();
+            userService.save(user);
+        }
+        //登录的ip
+        String realIp = IpUtils.getRealIp(request);
+        //插入用户登录记录
+        userLoginLogService.addUserLoginLog(realIp, user, gameId, 0);
+        //验证通过, 获取token
+        String userToken = userTokenService.getUserToken(user.getId(), DeviceTypeEnum.DEVICE_TYPE_ANDROID_APP.getDeviceType());
+        //构造用户登录信息
+        UserLoginVO userLoginVO = UserLoginVO.builder()
+                .userId(user.getId())
+                .userName(user.getUsername())
+                .token(userToken)
+                .authentication(user.getAuthentication())
+                .bindPhone(Strings.isBlank(user.getMobile()) ? 0 : 1)
+                .build();
+        //返回登录信息
+        return new ResultVO<>(userLoginVO);
+    }
+
+    /**
+     * 手机号登录
+     *
+     * @param param   : 手机号登录参数
+     * @param request : HttpServletRequest
+     * @return : 返回登录信息
+     */
+    @Override
+    public ResultVO<UserLoginVO> loginMobile(LoginMobileParam param, HttpServletRequest request) {
+        Integer type = param.getType();
+        String mobile = param.getMobile();
+        String code = param.getCode();
+        Long gameId = param.getGameId();
+        //验证码校验
+        HttpStatusEnum httpStatusEnum = smsService.smsCheck(type, mobile, code);
+        //验证不通过, 返回
+        if (!Objects.equals(httpStatusEnum, HttpStatusEnum.SUCCESS)) {
+            return new ResultVO<>(httpStatusEnum);
+        }
+        //获取用户信息
+        User user = userService.getOne(new LambdaQueryWrapper<User>().eq(User::getMobile, mobile));
+        //用户信息不存在, 直接注册
+        if (user == null) {
+            user = User.builder()
+                    .gameId(gameId)
+                    .mobile(mobile)
+                    .deviceType(DeviceTypeEnum.DEVICE_TYPE_ANDROID_APP.getDeviceType())
+                    .status(AccountStatusEnum.NORMAL_STATUS.getStatus())
+                    .createTime(LocalDateTime.now())
+                    .updateTime(LocalDateTime.now())
+                    .build();
+            userService.save(user);
+        } else {
+            //判断账号是否停用
+            if (Objects.equals(AccountStatusEnum.FROZEN_STATUS.getStatus(), user.getStatus())) {
+                return new ResultVO<>(HttpStatusEnum.ACCOUNT_HALT);
+            }
+        }
+        //验证通过, 获取token
+        String userToken = userTokenService.getUserToken(user.getId(), DeviceTypeEnum.DEVICE_TYPE_ANDROID_APP.getDeviceType());
+        //登录的ip
+        String realIp = IpUtils.getRealIp(request);
+        //插入用户登录记录
+        userLoginLogService.addUserLoginLog(realIp, user, gameId, 0);
+        //构造返回
+        //构造用户登录信息
+        UserLoginVO userLoginVO = UserLoginVO.builder()
+                .userId(user.getId())
+                .userName(user.getUsername())
+                .token(userToken)
+                .authentication(user.getAuthentication())
+                .bindPhone(Strings.isBlank(user.getMobile()) ? 0 : 1)
+                .build();
+        //返回登录信息
+        return new ResultVO<>(userLoginVO);
+    }
+
+    /**
+     * 登录用户名密码合规检测
+     *
+     * @param username : 用户名验证
+     * @param password : 密码验证
+     * @return : 返回验证结果
+     */
+    private HttpStatusEnum checkRegister(String username, String password) {
+        //用户名合规检测
+        HttpStatusEnum checkUserNameEnum = RegisterUtil.checkUserName(username);
+        if (Objects.equals(checkUserNameEnum, HttpStatusEnum.SUCCESS)) {
+            return checkUserNameEnum;
+        }
+        //判断用户名是否存在敏感词
+        if (wordCheckService.hasWord(username)) {
+            return HttpStatusEnum.USERNAME_SENSITIVE;
+        }
+        //判断用户名是否已存在
+        if (userService.count(new LambdaQueryWrapper<User>().eq(User::getUsername, username)) > 0) {
+            return HttpStatusEnum.USERNAME_EXISTS;
+        }
+        //密码验证
+        return RegisterUtil.checkPassword(password);
+    }
+
+    //-------------------------------- 微信和QQ授权登录(暂时没有用到) --------------------------------
+
     /**
      * QQ授权注册登录
      *
@@ -107,15 +260,15 @@ public class RegisterLoginServiceImpl implements RegisterLoginService {
     /**
      * QQ授权注册登录回调
      *
-     * @param qqLoginCallbackParam : 回调参数
-     * @param request              : request
-     * @param userData             : userData
+     * @param param    : 回调参数
+     * @param request  : request
+     * @param userData : userData
      * @return : 返回登录token
      */
     @Override
-    public ResultVO<UserLoginVO> qqLoginCallback(QqLoginCallbackParam qqLoginCallbackParam, HttpServletRequest request, UserData userData) {
-        String code = qqLoginCallbackParam.getCode();
-        String state = qqLoginCallbackParam.getState();
+    public ResultVO<UserLoginVO> qqLoginCallback(QqLoginCallbackParam param, HttpServletRequest request, UserData userData) {
+        String code = param.getCode();
+        String state = param.getState();
         Integer deviceType = userData.getDeviceType();
         //验证state,如果不一致,可能被CSRF攻击
         this.checkState(state);
@@ -130,11 +283,11 @@ public class RegisterLoginServiceImpl implements RegisterLoginService {
         //登录的ip
         String realIp = IpUtils.getRealIp(request);
         //插入用户登录记录
-        userLoginLogService.addUserLoginLog(realIp, user, qqLoginCallbackParam.getGameId());
+        userLoginLogService.addUserLoginLog(realIp, user, Long.valueOf(param.getGameId()), 0);
         //移出state
         redisUtil.removeOfSet(RedisKeyConstant.AUTH_STATE_KEY, state);
         //构造返回
-        return new ResultVO<>(new UserLoginVO(userToken));
+        return new ResultVO<>(new UserLoginVO());
     }
 
     /**
@@ -166,16 +319,16 @@ public class RegisterLoginServiceImpl implements RegisterLoginService {
     /**
      * 微信授权注册登录回调
      *
-     * @param qqLoginCallbackParam : 回调参数
-     * @param request              : request
-     * @param userData             : userData
+     * @param param    : 回调参数
+     * @param request  : request
+     * @param userData : userData
      * @return : 返回登录token
      */
     @Override
-    public ResultVO<UserLoginVO> vxLoginCallback(QqLoginCallbackParam qqLoginCallbackParam, HttpServletRequest request, UserData userData) {
+    public ResultVO<UserLoginVO> vxLoginCallback(QqLoginCallbackParam param, HttpServletRequest request, UserData userData) {
         Integer deviceType = userData.getDeviceType();
-        String code = qqLoginCallbackParam.getCode();
-        String state = qqLoginCallbackParam.getState();
+        String code = param.getCode();
+        String state = param.getState();
         //验证state,如果不一致,可能被CSRF攻击
         this.checkState(state);
         //获取用户信息
@@ -189,192 +342,11 @@ public class RegisterLoginServiceImpl implements RegisterLoginService {
         //用户登录成功
         String userToken = userTokenService.getUserToken(userOauthDTO.getId(), deviceType);
         //插入用户登录记录
-        userLoginLogService.addUserLoginLog(realIp, user, qqLoginCallbackParam.getGameId());
+        userLoginLogService.addUserLoginLog(realIp, user, Long.valueOf(param.getGameId()), 0);
         //移出state
         redisUtil.removeOfSet(RedisKeyConstant.AUTH_STATE_KEY, state);
         //构造返回
-        return new ResultVO<>(new UserLoginVO(userToken));
-    }
-
-
-    /**
-     * 用户名密码注册
-     *
-     * @param registerPasswordParam : 用户名密码注册参数
-     * @param request               : request
-     * @param userData              : userData
-     * @return : 返回注册结果
-     */
-    @Override
-    @Transactional(rollbackFor = Exception.class)
-    public ResultVO<UserLoginVO> registerPassword(RegisterPasswordParam registerPasswordParam, HttpServletRequest request, UserData userData) {
-        String username = registerPasswordParam.getUsername();
-        String password = registerPasswordParam.getPassword();
-        //用户名密码校验
-        HttpStatusEnum checkRegisterEnum = this.checkRegister(username, password);
-        if (!Objects.equals(checkRegisterEnum, HttpStatusEnum.SUCCESS)) {
-            return new ResultVO<>(checkRegisterEnum);
-        }
-        //创建用户信息
-        User user = User.builder()
-                .username(registerPasswordParam.getUsername())
-                .password(RegisterUtil.cmfPassword(password))
-                .deviceId(registerPasswordParam.getDeviceId())
-                .deviceType(registerPasswordParam.getDeviceType())
-                .status(AccountStatusEnum.NORMAL_STATUS.getStatus())
-                .createTime(LocalDateTime.now())
-                .updateTime(LocalDateTime.now())
-                .build();
-        userService.save(user);
-        //登录的ip
-        String realIp = IpUtils.getRealIp(request);
-        //插入用户登录记录
-        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));
-    }
-
-    /**
-     * 手机号注册
-     *
-     * @param registerMobileParam : 手机注册参数
-     * @param request             : HttpServletRequest
-     * @param userData            : userData
-     * @return : 返回注册结果
-     */
-    @Override
-    @Transactional(rollbackFor = Exception.class)
-    public ResultVO<UserLoginVO> registerMobile(RegisterMobileParam registerMobileParam, HttpServletRequest request, UserData userData) {
-        Integer type = registerMobileParam.getType();
-        String mobile = registerMobileParam.getMobile();
-        String code = registerMobileParam.getCode();
-        String password = registerMobileParam.getPassword();
-        //校验手机验证码
-        HttpStatusEnum codeCheckEnum = smsService.smsCheck(type, mobile, code);
-        if (!Objects.equals(codeCheckEnum, HttpStatusEnum.SUCCESS)) {
-            return new ResultVO<>(codeCheckEnum);
-        }
-        //判断手机号是否已经注册
-        if (userService.count(new LambdaQueryWrapper<User>().eq(User::getMobile, mobile)) > 0) {
-            return new ResultVO<>(HttpStatusEnum.PHONE_IS_REG);
-        }
-        //验证密码是否合规
-        HttpStatusEnum passwordCheckEnum = RegisterUtil.checkPassword(password);
-        if (!Objects.equals(passwordCheckEnum, HttpStatusEnum.SUCCESS)) {
-            return new ResultVO<>(passwordCheckEnum);
-        }
-        //创建用户信息
-        User user = User.builder()
-                .username(mobile)
-                .mobile(mobile)
-                .password(RegisterUtil.cmfPassword(password))
-                .deviceId(registerMobileParam.getDeviceId())
-                .deviceType(userData.getDeviceType())
-                .status(AccountStatusEnum.NORMAL_STATUS.getStatus())
-                .createTime(LocalDateTime.now())
-                .updateTime(LocalDateTime.now())
-                .build();
-        userService.save(user);
-        //获取token
-        String userToken = userTokenService.getUserToken(user.getId(), userData.getDeviceType());
-        //登录的ip
-        String realIp = IpUtils.getRealIp(request);
-        //插入用户登录记录
-        userLoginLogService.addUserLoginLog(realIp, user, registerMobileParam.getGameId());
-        //返回用户token
-        return new ResultVO<>(new UserLoginVO(userToken));
-    }
-
-    /**
-     * 用户名密码登录
-     *
-     * @param userLoginParam : 登录参数
-     * @param request        : HttpServletRequest
-     * @param userData       : userData
-     * @return : 返回登录token
-     */
-    @Override
-    public ResultVO<UserLoginVO> loginPassword(LoginPasswordParam userLoginParam, HttpServletRequest request, UserData userData) {
-        //用户名
-        String username = userLoginParam.getUsername();
-        //密码
-        String password = userLoginParam.getPassword();
-        //用户信息
-        User user;
-        //验证用户名是否为手机号
-        if (StringUtils.checkPhone(username)) {
-            user = userService.getOne(new LambdaQueryWrapper<User>().and(qw -> qw.eq(User::getMobile, username)
-                    .or().eq(User::getUsername, username)));
-        } else {
-            user = userService.getOne(new LambdaQueryWrapper<User>().eq(User::getUsername, username));
-        }
-        //用户信息不存在
-        if (user == null) {
-            return new ResultVO<>(HttpStatusEnum.USERNAME_OR_PASSWORD_ERR);
-        }
-        //判断账号是否停用
-        if (Objects.equals(AccountStatusEnum.FROZEN_STATUS.getStatus(), user.getStatus())) {
-            return new ResultVO<>(HttpStatusEnum.ACCOUNT_HALT);
-        }
-        //验证密码
-        if (!Objects.equals(RegisterUtil.cmfPassword(password), user.getPassword())) {
-            return new ResultVO<>(HttpStatusEnum.USERNAME_OR_PASSWORD_ERR);
-        }
-        //验证通过, 获取token
-        String userToken = userTokenService.getUserToken(user.getId(), userData.getDeviceType());
-        //登录的ip
-        String realIp = IpUtils.getRealIp(request);
-        //插入用户登录记录
-        userLoginLogService.addUserLoginLog(realIp, user, userLoginParam.getGameId());
-        //构造返回
-        return new ResultVO<>(new UserLoginVO(userToken));
-    }
-
-
-    /**
-     * 手机号登录
-     *
-     * @param loginMobileParam : 手机号登录参数
-     * @param request          : HttpServletRequest
-     * @param userData         : userData
-     * @return : 返回登录信息
-     */
-    @Override
-    public ResultVO<UserLoginVO> loginMobile(LoginMobileParam loginMobileParam, HttpServletRequest request, UserData userData) {
-        Integer type = loginMobileParam.getType();
-        String mobile = loginMobileParam.getMobile();
-        String code = loginMobileParam.getCode();
-        //验证码校验
-        HttpStatusEnum httpStatusEnum = smsService.smsCheck(type, mobile, code);
-        //验证不通过, 返回
-        if (!Objects.equals(httpStatusEnum, HttpStatusEnum.SUCCESS)) {
-            return new ResultVO<>(httpStatusEnum);
-        }
-        //获取用户信息
-        User user = userService.getOne(new LambdaQueryWrapper<User>().eq(User::getMobile, mobile));
-        //用户信息不存在
-        if (user == null) {
-            return new ResultVO<>(HttpStatusEnum.PHONE_NOT_REG);
-        }
-        //判断账号是否停用
-        if (Objects.equals(AccountStatusEnum.FROZEN_STATUS.getStatus(), user.getStatus())) {
-            return new ResultVO<>(HttpStatusEnum.ACCOUNT_HALT);
-        }
-        //验证通过, 获取token
-        String userToken = userTokenService.getUserToken(user.getId(), userData.getDeviceType());
-        //登录的ip
-        String realIp = IpUtils.getRealIp(request);
-        //插入用户登录记录
-        userLoginLogService.addUserLoginLog(realIp, user, loginMobileParam.getGameId());
-        //构造返回
-        return new ResultVO<>(new UserLoginVO(userToken));
+        return new ResultVO<>(new UserLoginVO());
     }
 
     /**
@@ -406,28 +378,14 @@ public class RegisterLoginServiceImpl implements RegisterLoginService {
     }
 
     /**
-     * 登录用户名密码合规检测
+     * state参数检测
      *
-     * @param username : 用户名验证
-     * @param password : 密码验证
-     * @return : 返回验证结果
+     * @param state : 随机密钥
      */
-    private HttpStatusEnum checkRegister(String username, String password) {
-        //用户名合规检测
-        HttpStatusEnum checkUserNameEnum = RegisterUtil.checkUserName(username);
-        if (Objects.equals(checkUserNameEnum, HttpStatusEnum.SUCCESS)) {
-            return checkUserNameEnum;
-        }
-        //判断用户名是否存在敏感词
-        if (wordCheckService.hasWord(username)) {
-            return HttpStatusEnum.USERNAME_SENSITIVE;
-        }
-        //判断用户名是否已存在
-        if (userService.count(new LambdaQueryWrapper<User>().eq(User::getUsername, username)) > 0) {
-            return HttpStatusEnum.USERNAME_EXISTS;
+    private void checkState(String state) {
+        if (!redisUtil.isMemberInSet(RedisKeyConstant.AUTH_STATE_KEY, state)) {
+            throw new BaseException("State验证失败");
         }
-        //密码验证
-        return RegisterUtil.checkPassword(password);
     }
 
     /**
@@ -440,15 +398,4 @@ public class RegisterLoginServiceImpl implements RegisterLoginService {
         redisUtil.addToSet(RedisKeyConstant.AUTH_STATE_KEY, state);
         return state;
     }
-
-    /**
-     * state参数检测
-     *
-     * @param state : 随机密钥
-     */
-    private void checkState(String state) {
-        if (!redisUtil.isMemberInSet(RedisKeyConstant.AUTH_STATE_KEY, state)) {
-            throw new BaseException("State验证失败");
-        }
-    }
 }

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

@@ -1,7 +1,7 @@
 package com.zanxiang.sdk.service.Impl;
 
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.zanxiang.common.utils.StringUtils;
+import com.zanxiang.common.enums.DeviceTypeEnum;
 import com.zanxiang.mybatis.entity.User;
 import com.zanxiang.mybatis.entity.UserLoginLog;
 import com.zanxiang.mybatis.mapper.UserLoginLogMapper;
@@ -9,8 +9,6 @@ import com.zanxiang.sdk.service.UserLoginLogService;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
 
-import java.time.LocalDateTime;
-
 /**
  * @author : lingfeng
  * @time : 2022-06-13
@@ -28,16 +26,14 @@ public class UserLoginLogServiceImpl extends ServiceImpl<UserLoginLogMapper, Use
      * @param gameId : 游戏id
      */
     @Override
-    public void addUserLoginLog(String realIp, User user, String gameId) {
+    public void addUserLoginLog(String realIp, User user, Long gameId, Integer type) {
         //创建对象
         UserLoginLog userLoginLog = UserLoginLog.builder()
                 .userId(user.getId())
-                .agentId(user.getAgentId())
-                .fromDevice(user.getFromDevice())
-                .deviceId(user.getDeviceId())
-                .loginIp(realIp)
-                .gameId(StringUtils.isNotEmpty(gameId) ? Long.valueOf(gameId) : null)
-                .loginTime(LocalDateTime.now())
+                .gameId(gameId)
+                .ip(realIp)
+                .deviceType(DeviceTypeEnum.DEVICE_TYPE_ANDROID_APP.getDeviceType())
+                .type(type)
                 .build();
         super.save(userLoginLog);
     }

+ 15 - 23
game-module/game-sdk/src/main/java/com/zanxiang/sdk/service/Impl/UserServiceImpl.java

@@ -16,12 +16,16 @@ 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.*;
+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;
 import com.zanxiang.sdk.service.GameService;
 import com.zanxiang.sdk.service.UserService;
 import com.zanxiang.sdk.service.UserTokenService;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.logging.log4j.util.Strings;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -56,35 +60,23 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
     @Override
     @Transactional(rollbackFor = Exception.class)
     public ResultVO<Boolean> updatePassword(UpdatePasswordParam updatePasswordParam, UserData userData) {
-        String token = updatePasswordParam.getToken();
-        String password = updatePasswordParam.getPassword();
-        String username = updatePasswordParam.getUsername();
+        String oldPassword = updatePasswordParam.getOldPassword();
+        String newPassword = updatePasswordParam.getNewPassword();
         //查询用户信息
-        LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<>();
-        if (StringUtils.checkPhone(username)) {
-            queryWrapper.eq(User::getMobile, username);
-        } else {
-            queryWrapper.eq(User::getUsername, username);
+        User user = super.getById(userData.getUserId());
+        //旧密码校验
+        if (Strings.isBlank(user.getPassword()) || !Objects.equals(RegisterUtil.cmfPassword(oldPassword), user.getPassword())) {
+            return new ResultVO<>(HttpStatusEnum.OLD_PASSWORD_ERROR);
         }
-        User user = super.getOne(queryWrapper);
-        if (user == null) {
-            return new ResultVO<>(HttpStatusEnum.USERNAME_NOT_EXISTS);
-        }
-        //验证token是否存在
-        HttpStatusEnum checkUserTokenEnum = userTokenService.checkUserToken(token, user.getId(), userData.getDeviceType());
-        if (!Objects.equals(HttpStatusEnum.SUCCESS, checkUserTokenEnum)) {
-            return new ResultVO<>(checkUserTokenEnum);
-        }
-        //密码校验
-        HttpStatusEnum checkPasswordEnum = RegisterUtil.checkPassword(password);
+        //新密码校验
+        HttpStatusEnum checkPasswordEnum = RegisterUtil.checkPassword(newPassword);
         if (!Objects.equals(checkPasswordEnum, HttpStatusEnum.SUCCESS)) {
             return new ResultVO<>(checkPasswordEnum);
         }
         //修改用户密码
         super.update(new LambdaUpdateWrapper<User>()
-                .set(User::getPassword, RegisterUtil.cmfPassword(password))
-                .set(User::getUpdateTime, LocalDateTime.now())
-                .eq(User::getUsername, username));
+                .set(User::getPassword, RegisterUtil.cmfPassword(newPassword))
+                .set(User::getUpdateTime, LocalDateTime.now()));
         //返回修改成功
         return new ResultVO<>(HttpStatusEnum.SUCCESS, Boolean.TRUE);
     }

+ 22 - 41
game-module/game-sdk/src/main/java/com/zanxiang/sdk/service/RegisterLoginService.java

@@ -1,7 +1,10 @@
 package com.zanxiang.sdk.service;
 
 import com.zanxiang.common.domain.ResultVO;
-import com.zanxiang.sdk.domain.params.*;
+import com.zanxiang.sdk.domain.params.LoginMobileParam;
+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 javax.servlet.http.HttpServletRequest;
@@ -14,6 +17,24 @@ import javax.servlet.http.HttpServletResponse;
  */
 public interface RegisterLoginService {
 
+    /**
+     * 用户名注册或者登录
+     *
+     * @param param   : 注册登录参数
+     * @param request : 请求信息
+     * @return : 返回用户登录信息
+     */
+    ResultVO<UserLoginVO> loginPassword(LoginPasswordParam param, HttpServletRequest request);
+
+    /**
+     * 手机号登录
+     *
+     * @param param   : 手机号登录参数
+     * @param request : HttpServletRequest
+     * @return : 返回登录信息
+     */
+    ResultVO<UserLoginVO> loginMobile(LoginMobileParam param, HttpServletRequest request);
+
     /**
      * QQ授权登录
      *
@@ -47,44 +68,4 @@ public interface RegisterLoginService {
      * @return : 返回登录token
      */
     ResultVO<UserLoginVO> vxLoginCallback(QqLoginCallbackParam qqLoginCallbackParam, HttpServletRequest request, UserData userData);
-
-    /**
-     * 用户名密码注册
-     *
-     * @param registerPasswordParam : 用户名密码注册参数
-     * @param request               : request
-     * @param userData              : userData
-     * @return : 返回注册结果
-     */
-    ResultVO<UserLoginVO> registerPassword(RegisterPasswordParam registerPasswordParam, HttpServletRequest request, UserData userData);
-
-    /**
-     * 手机号注册
-     *
-     * @param registerMobileParam : 手机注册参数
-     * @param request             : HttpServletRequest
-     * @param userData            : userData
-     * @return : 返回注册结果
-     */
-    ResultVO<UserLoginVO> registerMobile(RegisterMobileParam registerMobileParam, HttpServletRequest request, UserData userData);
-
-    /**
-     * 用户名密码登录
-     *
-     * @param userLoginParam : 登录参数
-     * @param request        : HttpServletRequest
-     * @param userData       : userData
-     * @return : 返回登录token
-     */
-    ResultVO<UserLoginVO> loginPassword(LoginPasswordParam userLoginParam, HttpServletRequest request, UserData userData);
-
-    /**
-     * 手机号登录
-     *
-     * @param loginMobileParam : 手机号登录参数
-     * @param request          : HttpServletRequest
-     * @param userData         : userData
-     * @return : 返回登录信息
-     */
-    ResultVO<UserLoginVO> loginMobile(LoginMobileParam loginMobileParam, HttpServletRequest request, UserData userData);
 }

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

@@ -15,6 +15,7 @@ public interface UserLoginLogService {
      * @param realIp : 用户ip
      * @param user   : 用户信息
      * @param gameId : 游戏id
+     * @param type   : 类型, 0 : 登录, 1 : 注销
      */
-    void addUserLoginLog(String realIp, User user, String gameId);
+    void addUserLoginLog(String realIp, User user, Long gameId, Integer type);
 }