Browse Source

feat : sdk新增小游戏的登录

bilingfeng 2 years ago
parent
commit
e5405b972c
30 changed files with 833 additions and 285 deletions
  1. 1 1
      game-module/game-common/src/main/java/com/zanxiang/common/domain/ResultVO.java
  2. 57 0
      game-module/game-common/src/main/java/com/zanxiang/common/enums/PayBoxTypeEnum.java
  3. 19 0
      game-module/game-manage/src/main/java/com/zanxiang/manage/controller/ChoiceController.java
  4. 1 1
      game-module/game-manage/src/main/java/com/zanxiang/manage/controller/PromoChannelController.java
  5. 34 30
      game-module/game-manage/src/main/java/com/zanxiang/manage/domain/dto/PayApplicationDTO.java
  6. 1 1
      game-module/game-manage/src/main/java/com/zanxiang/manage/domain/mapper/PayBoxListMapper.java
  7. 0 106
      game-module/game-manage/src/main/java/com/zanxiang/manage/domain/params/PayApplicationParam.java
  8. 58 0
      game-module/game-manage/src/main/java/com/zanxiang/manage/domain/params/PayBoxAddUpdateParam.java
  9. 15 30
      game-module/game-manage/src/main/java/com/zanxiang/manage/domain/params/PayBoxListParam.java
  10. 6 12
      game-module/game-manage/src/main/java/com/zanxiang/manage/domain/params/PayBoxParam.java
  11. 25 0
      game-module/game-manage/src/main/java/com/zanxiang/manage/domain/vo/PayApplicationChoiceVO.java
  12. 44 46
      game-module/game-manage/src/main/java/com/zanxiang/manage/domain/vo/PayBoxListVO.java
  13. 25 0
      game-module/game-manage/src/main/java/com/zanxiang/manage/domain/vo/PayBoxTypeChoiceVO.java
  14. 63 0
      game-module/game-manage/src/main/java/com/zanxiang/manage/service/Impl/PayApplicationServiceImpl.java
  15. 90 25
      game-module/game-manage/src/main/java/com/zanxiang/manage/service/Impl/PayBoxServiceImpl.java
  16. 28 0
      game-module/game-manage/src/main/java/com/zanxiang/manage/service/PayApplicationService.java
  17. 9 1
      game-module/game-manage/src/main/java/com/zanxiang/manage/service/PayBoxService.java
  18. 11 9
      game-module/game-mybatis/src/main/java/com/zanxiang/mybatis/entity/PayBox.java
  19. 5 0
      game-module/game-mybatis/src/main/java/com/zanxiang/mybatis/entity/User.java
  20. 35 0
      game-module/game-sdk/src/main/java/com/zanxiang/sdk/controller/InitController.java
  21. 8 0
      game-module/game-sdk/src/main/java/com/zanxiang/sdk/controller/LoginController.java
  22. 37 0
      game-module/game-sdk/src/main/java/com/zanxiang/sdk/domain/dto/GameAppletDTO.java
  23. 22 0
      game-module/game-sdk/src/main/java/com/zanxiang/sdk/domain/params/LoginVxCodeParam.java
  24. 20 0
      game-module/game-sdk/src/main/java/com/zanxiang/sdk/domain/vo/GameAppletVO.java
  25. 31 0
      game-module/game-sdk/src/main/java/com/zanxiang/sdk/service/GameAppletService.java
  26. 56 0
      game-module/game-sdk/src/main/java/com/zanxiang/sdk/service/Impl/GameAppletServiceImpl.java
  27. 65 7
      game-module/game-sdk/src/main/java/com/zanxiang/sdk/service/Impl/LoginServiceImpl.java
  28. 5 12
      game-module/game-sdk/src/main/java/com/zanxiang/sdk/service/Impl/UserTokenServiceImpl.java
  29. 10 4
      game-module/game-sdk/src/main/java/com/zanxiang/sdk/service/RegisterLoginService.java
  30. 52 0
      game-module/game-sdk/src/main/java/com/zanxiang/sdk/service/api/WxApiService.java

+ 1 - 1
game-module/game-common/src/main/java/com/zanxiang/common/domain/ResultVO.java

@@ -90,7 +90,7 @@ public class ResultVO<T> implements Serializable {
     }
 
     public static <T> ResultVO<T> fail(String msg) {
-        return new ResultVO<>(HttpStatusEnum.FAIL.getCode(), msg);
+        return new ResultVO<>(HttpStatusEnum.ERROR.getCode(), msg);
     }
 
     public static <T> ResultVO<T> ok(int code, String msg, T data) {

+ 57 - 0
game-module/game-common/src/main/java/com/zanxiang/common/enums/PayBoxTypeEnum.java

@@ -0,0 +1,57 @@
+package com.zanxiang.common.enums;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+import java.util.Objects;
+
+/**
+ * @author : lingfeng
+ * @time : 2022-11-29
+ * @description : 支付盒子类型
+ */
+@Getter
+@AllArgsConstructor
+public enum PayBoxTypeEnum {
+
+    /**
+     * 商城百货
+     */
+    STORE_GOODS(1, "商城百货"),
+
+    /**
+     * 商城美妆
+     */
+    STORE_BEAUTY(2, "商城美妆"),
+
+    /**
+     * 商城内容
+     */
+    STORE_CONTENT(3, "商城内容");
+
+    /**
+     * 账号类型
+     */
+    private Integer type;
+
+    /**
+     * 账号类型名称
+     */
+    private String name;
+
+    /**
+     * 被类型名称
+     *
+     * @param type 类型
+     * @return {@link String}
+     */
+    public static String getNameByType(Integer type) {
+        PayBoxTypeEnum[] values = PayBoxTypeEnum.values();
+        for (PayBoxTypeEnum payBoxTypeEnum : values) {
+            if (Objects.equals(payBoxTypeEnum.getType(), type)) {
+                return payBoxTypeEnum.getName();
+            }
+        }
+        return null;
+    }
+}

+ 19 - 0
game-module/game-manage/src/main/java/com/zanxiang/manage/controller/ChoiceController.java

@@ -60,6 +60,9 @@ public class ChoiceController {
     @Autowired
     private PromoSiteService promoSiteService;
 
+    @Autowired
+    private PayApplicationService payApplicationService;
+
     @ApiOperation(value = "vip等级选择列表")
     @GetMapping(value = "/vip/level/list")
     @PreAuthorize(permissionKey = "sdk:choiceVipLevel:list")
@@ -204,4 +207,20 @@ public class ChoiceController {
         return ResultVO.ok(BeanUtils.copyList(Arrays.asList(ApplicationTypeEnum.values()), ApplicationTypeChoiceVO.class));
     }
 
+    @ApiOperation(value = "支付应用选择列表")
+    @GetMapping(value = "/pay/application/list")
+    @PreAuthorize(permissionKey = "sdk:payApplicationChoice:list")
+    @ApiResponses(value = {@ApiResponse(code = 200, message = "成功", response = PayApplicationChoiceVO.class, responseContainer = "list")})
+    public ResultVO<List<PayApplicationChoiceVO>> payApplicationChoiceList() {
+        return new ResultVO<>(payApplicationService.payApplicationChoiceList());
+    }
+
+    @ApiOperation(value = "支付盒子类型选择列表")
+    @GetMapping(value = "/pay/box/list")
+    @PreAuthorize(permissionKey = "sdk:payBoxChoice:list")
+    @ApiResponses(value = {@ApiResponse(code = 200, message = "成功", response = PayBoxTypeChoiceVO.class, responseContainer = "list")})
+    public ResultVO<List<PayBoxTypeChoiceVO>> payBoxChoiceList() {
+        return ResultVO.ok(BeanUtils.copyList(Arrays.asList(PayBoxTypeEnum.values()), PayBoxTypeChoiceVO.class));
+    }
+
 }

+ 1 - 1
game-module/game-manage/src/main/java/com/zanxiang/manage/controller/PromoChannelController.java

@@ -46,7 +46,7 @@ public class PromoChannelController {
 
     @ApiOperation(value = "推广渠道状态变更")
     @PatchMapping(value = "/status/update")
-    @PreAuthorize(permissionKey = "manage:promoAccount:statusUpdate")
+    @PreAuthorize(permissionKey = "manage:promoChannel:statusUpdate")
     @ApiResponses(value = {@ApiResponse(code = 200, message = "成功", response = Boolean.class)})
     public ResultVO<Boolean> statusUpdate(@RequestParam Long id, @RequestParam Integer status) {
         return new ResultVO<>(promoChannelService.statusUpdate(id, status));

+ 34 - 30
game-module/game-manage/src/main/java/com/zanxiang/manage/domain/dto/PayApplicationDTO.java

@@ -1,11 +1,6 @@
 package com.zanxiang.manage.domain.dto;
 
-import lombok.AllArgsConstructor;
 import lombok.Data;
-import lombok.NoArgsConstructor;
-
-import java.io.Serializable;
-import java.util.Date;
 
 /**
  * 注释游戏应用表
@@ -14,12 +9,11 @@ import java.util.Date;
  * @date 2022-06-20 15:16
  */
 @Data
-@NoArgsConstructor
-@AllArgsConstructor
-public class PayApplicationDTO implements Serializable {
-
-    private static final long serialVersionUID = 1L;
+public class PayApplicationDTO {
 
+    /**
+     * 主键
+     */
     private Long id;
 
     /**
@@ -32,6 +26,36 @@ public class PayApplicationDTO implements Serializable {
      */
     private Integer type;
 
+    /**
+     * 应用AppSecret
+     */
+    private String appSecret;
+
+    /**
+     * 版本
+     */
+    private String version;
+
+    /**
+     * 应用描述
+     */
+    private String appDesc;
+
+    /**
+     * 应用地址
+     */
+    private String appUrl;
+
+    /**
+     * 应用头像
+     */
+    private String appLogo;
+
+    /**
+     * 小程序码
+     */
+    private String miniCode;
+
     /**
      * 应用appid
      */
@@ -66,24 +90,4 @@ public class PayApplicationDTO implements Serializable {
      * 备注
      */
     private String remark;
-
-    /**
-     * 状态 1 不可用 2 可用
-     */
-    private Integer status;
-
-    /**
-     * 是否已删除 1 已删除 2 正常
-     */
-    private Integer isDelete;
-
-    /**
-     * 创建时间
-     */
-    private Date createTime;
-
-    /**
-     * 更新时间
-     */
-    private Date updateTime;
 }

+ 1 - 1
game-module/game-manage/src/main/java/com/zanxiang/manage/domain/mapper/PayBoxListMapper.java

@@ -15,7 +15,7 @@ import org.apache.ibatis.annotations.Select;
 public interface PayBoxListMapper extends BaseMapper<PayBox> {
 
     // '微信小程序' as payApplicationTypeName
-    @Select("<script> SELECT b.*,a.company,a.type as payApplicationType,a.app_id as appId,a.primeval_id as primevalId,a.name as payApplicationName, a.id as payApplicationId, '微信小程序' as payApplicationTypeName from h_pay_box b " +
+    @Select("<script> SELECT b.*,a.company,a.type as payApplicationType,a.app_id as appId,a.primeval_id as primevalId,a.name as payApplicationName, a.id as payApplicationId, '微信小程序' as payApplicationTypeName from t_pay_box b " +
             "LEFT JOIN h_pay_application a ON b.pay_application_id = a.id " +
             "where b.is_delete=0 " +
             "<when test='name != null'> and b.name like CONCAT('%', #{name}, '%') </when>" +

+ 0 - 106
game-module/game-manage/src/main/java/com/zanxiang/manage/domain/params/PayApplicationParam.java

@@ -1,106 +0,0 @@
-package com.zanxiang.manage.domain.params;
-
-import io.swagger.annotations.ApiModelProperty;
-import lombok.AllArgsConstructor;
-import lombok.Data;
-import lombok.NoArgsConstructor;
-
-import java.io.Serializable;
-
-/**
- * 注释游戏应用表
- *
- * @author xufeng
- * @date 2022-06-20 15:16
- */
-@Data
-@NoArgsConstructor
-@AllArgsConstructor
-public class PayApplicationParam implements Serializable {
-
-    private static final long serialVersionUID = 1L;
-
-    private Long id;
-
-    @ApiModelProperty(notes = "应用名称")
-    private String name;
-
-    @ApiModelProperty(notes = "应用AppSecret")
-    private String appSecret;
-
-    @ApiModelProperty(notes = "版本")
-    private String version;
-
-    @ApiModelProperty(notes = "应用描述")
-    private String appDesc;
-
-    @ApiModelProperty(notes = "应用地址")
-    private String appUrl;
-
-    @ApiModelProperty(notes = "应用头像")
-    private String appLogo;
-
-    @ApiModelProperty(notes = "小程序码")
-    private String miniCode;
-
-    /**
-     * 类型 1 微信小程序
-     */
-    @ApiModelProperty(notes = "类型 1 微信小程序")
-    private Integer type;
-
-    /**
-     * 应用appid
-     */
-    @ApiModelProperty(notes = "应用appid")
-    private String appId;
-
-    /**
-     * 应用原始id
-     */
-    @ApiModelProperty(notes = "应用原始id")
-    private String primevalId;
-
-    /**
-     * 应用主体
-     */
-    @ApiModelProperty(notes = "应用主体")
-    private String company;
-
-    /**
-     * 登录账号
-     */
-    @ApiModelProperty(notes = "登录账号")
-    private String loginName;
-
-    /**
-     * 登录密码
-     */
-    @ApiModelProperty(notes = "登录密码")
-    private String loginPassword;
-
-    /**
-     * 管理员
-     */
-    @ApiModelProperty(notes = "管理员")
-    private String managePerson;
-
-    /**
-     * 备注
-     */
-    @ApiModelProperty(notes = "备注")
-    private String remark;
-
-    /**
-     * 状态 1 不可用 2 可用
-     */
-    @ApiModelProperty(notes = "状态 1 不可用 0正常")
-    private Integer status;
-
-    /**
-     * 是否已删除 1 已删除 2 正常
-     */
-    @ApiModelProperty(notes = "删除状态 1 已删除 0 正常")
-    private Integer isDelete;
-
-}

+ 58 - 0
game-module/game-manage/src/main/java/com/zanxiang/manage/domain/params/PayBoxAddUpdateParam.java

@@ -0,0 +1,58 @@
+package com.zanxiang.manage.domain.params;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.NotNull;
+import java.util.List;
+
+/**
+ * @author : lingfeng
+ * @time : 2022-11-29
+ * @description : 支付盒子
+ */
+@Data
+public class PayBoxAddUpdateParam {
+
+    /**
+     * 主键
+     */
+    @ApiModelProperty(notes = "主键, 不传是新建, 传是更新")
+    private Long id;
+
+    /**
+     * 支付盒子名称
+     */
+    @ApiModelProperty(notes = "支付盒子名称")
+    @NotBlank(message = "支付盒子名称不可为空")
+    private String name;
+
+    /**
+     * 应用id
+     */
+    @ApiModelProperty(notes = "应用id")
+    @NotNull(message = "应用id不可为空")
+    private Long payApplicationId;
+
+    /**
+     * 商户号id列表
+     */
+    @ApiModelProperty(notes = "商户号id列表")
+    @NotEmpty(message = "商户id列表不可为空")
+    private List<Long> payMerchantIds;
+
+    /**
+     * 盒子类型 1、商城百货 2、商城美妆 2、商城内容
+     */
+    @ApiModelProperty(notes = "盒子类型 1、金币 2、红包")
+    @NotNull(message = "盒子类型不可为空")
+    private Integer type;
+
+    /**
+     * 描述
+     */
+    @ApiModelProperty(notes = "描述")
+    private String remark;
+}

+ 15 - 30
game-module/game-manage/src/main/java/com/zanxiang/manage/domain/params/PayBoxListParam.java

@@ -4,18 +4,16 @@ import com.zanxiang.common.base.BasePage;
 import com.zanxiang.mybatis.entity.PayBox;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
-import lombok.NoArgsConstructor;
+import lombok.EqualsAndHashCode;
 
 /**
  * @author xufeng
  * @date 2022/6/16 19:14
  */
 @Data
-@NoArgsConstructor
+@EqualsAndHashCode(callSuper = true)
 public class PayBoxListParam extends BasePage<PayBox> {
 
-    private Integer id;
-
     /**
      * 名称
      */
@@ -23,45 +21,32 @@ public class PayBoxListParam extends BasePage<PayBox> {
     private String name;
 
     /**
-     * 支付名称
+     * 关联应用id
      */
-    @ApiModelProperty(notes = "支付名称")
-    private String payName;
+    @ApiModelProperty(notes = "关联应用id")
+    private Integer payApplicationId;
 
     /**
-     * 应用id
+     * 关联应用类型
      */
-    @ApiModelProperty(notes = "应用id")
-    private Integer payApplicationId;
+    @ApiModelProperty(notes = "关联应用类型")
+    private Integer payApplicationType;
 
     /**
-     * 商户号id(多个逗号分割,id,)
+     * 关联应用appId
      */
-    @ApiModelProperty(notes = "商户号id")
-    private String payMerchantId;
-
     @ApiModelProperty(notes = "关联应用appId")
     private String appId;
 
-    @ApiModelProperty(notes = "应用名称")
-    private String payApplicationName;
-
-    @ApiModelProperty(notes = "应用类型")
-    private String payApplicationType;
-
-    @ApiModelProperty(notes = "应用主体")
-    private String company;
-
-
     /**
-     * 盒子类型 1、金币 2、红包
+     * 关联应用主体
      */
-    @ApiModelProperty(notes = "盒子类型 1、金币 2、红包")
-    private Integer type;
+    @ApiModelProperty(notes = "关联应用主体")
+    private String company;
 
     /**
-     * 描述
+     * 商户号id
      */
-    @ApiModelProperty(notes = "描述")
-    private String remark;
+    @ApiModelProperty(notes = "商户号id")
+    private String payMerchantId;
 }

+ 6 - 12
game-module/game-manage/src/main/java/com/zanxiang/manage/domain/params/PayBoxParam.java

@@ -4,17 +4,19 @@ import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import lombok.NoArgsConstructor;
 
-import java.io.Serializable;
-
 /**
  * @author xufeng
  * @date 2022/6/16 19:14
  */
 @Data
 @NoArgsConstructor
-public class PayBoxParam implements Serializable {
+public class PayBoxParam {
 
-    private Integer id;
+    /**
+     * 主键
+     */
+    @ApiModelProperty(notes = "主键, 不传是新建, 传是更新")
+    private Long id;
 
     /**
      * 名称
@@ -51,12 +53,4 @@ public class PayBoxParam implements Serializable {
      */
     @ApiModelProperty(notes = "描述")
     private String remark;
-
-    
-    @ApiModelProperty(notes = "状态 1 不可用 0正常")
-    private Integer status;
-
-
-    @ApiModelProperty(notes = "删除状态 1 已删除 0 正常")
-    private Integer isDelete;
 }

+ 25 - 0
game-module/game-manage/src/main/java/com/zanxiang/manage/domain/vo/PayApplicationChoiceVO.java

@@ -0,0 +1,25 @@
+package com.zanxiang.manage.domain.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * @author : lingfeng
+ * @time : 2022-11-29
+ * @description : 支付应用选择
+ */
+@Data
+public class PayApplicationChoiceVO {
+
+    /**
+     * 主键id
+     */
+    @ApiModelProperty(notes = "主键id")
+    private Long id;
+
+    /**
+     * 应用名称
+     */
+    @ApiModelProperty(notes = "应用名称")
+    private String name;
+}

+ 44 - 46
game-module/game-manage/src/main/java/com/zanxiang/manage/domain/vo/PayBoxListVO.java

@@ -5,7 +5,7 @@ import lombok.AllArgsConstructor;
 import lombok.Data;
 import lombok.NoArgsConstructor;
 
-import java.io.Serializable;
+import java.util.Map;
 
 /**
  * 支付盒子
@@ -16,85 +16,83 @@ import java.io.Serializable;
 @Data
 @NoArgsConstructor
 @AllArgsConstructor
-public class PayBoxListVO implements Serializable {
-
-    private static final long serialVersionUID = 1L;
+public class PayBoxListVO {
 
+    /**
+     * 盒子id
+     */
+    @ApiModelProperty(notes = "盒子id")
     private Integer id;
 
-
     /**
-     * 名称
+     * 盒子名称
      */
-    @ApiModelProperty(notes = "名称")
+    @ApiModelProperty(notes = "盒子名称")
     private String name;
 
     /**
-     * 支付名称
+     * 关联应用id
      */
-    @ApiModelProperty(notes = "支付名称")
-    private String payName;
+    @ApiModelProperty(notes = "关联应用id")
+    private Integer payApplicationId;
 
     /**
-     * 应用id
+     * 关联应用名称
      */
-    @ApiModelProperty(notes = "应用id")
-    private Integer payApplicationId;
-
-    @ApiModelProperty(notes = "应用名称")
+    @ApiModelProperty(notes = "关联应用名称")
     private String payApplicationName;
 
-    @ApiModelProperty(notes = "应用类型")
+    /**
+     * 关联应用类型
+     */
+    @ApiModelProperty(notes = "关联应用类型")
     private String payApplicationType;
 
-    @ApiModelProperty(notes = "应用类型名称")
+    /**
+     * 关联应用类型名称
+     */
+    @ApiModelProperty(notes = "关联应用类型名称")
     private String payApplicationTypeName;
 
-    @ApiModelProperty(notes = "应用appid")
+    /**
+     * 关联应用appid
+     */
+    @ApiModelProperty(notes = "关联应用appid")
     private String appId;
 
-    @ApiModelProperty(notes = "应用原始id")
+    /**
+     * 关联应用原始appid
+     */
+    @ApiModelProperty(notes = "关联应用原始appid")
     private String primevalId;
 
-    @ApiModelProperty(notes = "应用主体")
-    private String company;
-
     /**
-     * 商户号id(多个逗号分割,id,)
+     * 关联应用主体名称
      */
-    @ApiModelProperty(notes = "商户号id(多个逗号分割,id,)")
-    private String payMerchantId;
-
-    @ApiModelProperty(notes = "商户号id_商户名称(多个,分割)")
-    private String payMerchantDetail;
+    @ApiModelProperty(notes = "关联应用主体名称")
+    private String company;
 
     /**
-     * 盒子类型 1、金币 2、红包
+     * 商户信息列表
      */
-    @ApiModelProperty(notes = "盒子类型 1、金币 2、红包")
-    private Integer type;
+    @ApiModelProperty(notes = "商户信息列表")
+    private Map<Long, String> payMerchantMap;
 
     /**
-     * 描述
+     * 盒子类型 1、商城百货 2、商城美妆 2、商城内容
      */
-    @ApiModelProperty(notes = "描述")
-    private String remark;
+    @ApiModelProperty(notes = "盒子类型 1、商城百货 2、商城美妆 2、商城内容")
+    private Integer type;
 
     /**
-     * 状态 1 不可用 2 可用
+     * 盒子类型名称
      */
-    @ApiModelProperty(notes = "状态 1 不可用 2 可用")
-    private Integer status;
+    @ApiModelProperty(notes = "盒子类型名称")
+    private String typeName;
 
     /**
-     * 是否已删除 1 已删除 0 正常
+     * 描述
      */
-    @ApiModelProperty(notes = "是否已删除 1 已删除 0 正常")
-    private Integer isDelete;
-
-    @ApiModelProperty(notes = "支付盒子id")
-    private Long payBoxId;
-
-    @ApiModelProperty(notes = "支付盒子")
-    private Long payBoxName;
+    @ApiModelProperty(notes = "描述")
+    private String remark;
 }

+ 25 - 0
game-module/game-manage/src/main/java/com/zanxiang/manage/domain/vo/PayBoxTypeChoiceVO.java

@@ -0,0 +1,25 @@
+package com.zanxiang.manage.domain.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * @author : lingfeng
+ * @time : 2022-11-29
+ * @description : 支付盒子类型
+ */
+@Data
+public class PayBoxTypeChoiceVO {
+
+    /**
+     * 支付盒子类型
+     */
+    @ApiModelProperty(notes = "支付盒子类型")
+    private Integer type;
+
+    /**
+     * 支付盒子名称
+     */
+    @ApiModelProperty(notes = "支付盒子名称")
+    private String name;
+}

+ 63 - 0
game-module/game-manage/src/main/java/com/zanxiang/manage/service/Impl/PayApplicationServiceImpl.java

@@ -10,9 +10,11 @@ import com.zanxiang.common.enums.StatusEnum;
 import com.zanxiang.common.exception.BaseException;
 import com.zanxiang.common.utils.bean.BeanUtils;
 import com.zanxiang.manage.domain.bo.PayApplicationBO;
+import com.zanxiang.manage.domain.dto.PayApplicationDTO;
 import com.zanxiang.manage.domain.params.PayApplicationAddUpdateParam;
 import com.zanxiang.manage.domain.params.PayApplicationListNoPageParam;
 import com.zanxiang.manage.domain.params.PayApplicationListParam;
+import com.zanxiang.manage.domain.vo.PayApplicationChoiceVO;
 import com.zanxiang.manage.domain.vo.PayApplicationVO;
 import com.zanxiang.manage.service.PayApplicationService;
 import com.zanxiang.manage.service.api.MiniAppletApiService;
@@ -22,10 +24,15 @@ 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;
+import org.springframework.util.CollectionUtils;
 
 import java.time.LocalDateTime;
+import java.util.Collections;
 import java.util.List;
+import java.util.Map;
 import java.util.Objects;
+import java.util.function.Function;
+import java.util.stream.Collectors;
 
 /**
  * 支付应用管理
@@ -39,6 +46,18 @@ public class PayApplicationServiceImpl extends ServiceImpl<PayApplicationMapper,
     @Autowired
     private MiniAppletApiService miniAppletApiService;
 
+    /**
+     * 支付应用选择列表
+     *
+     * @return : 返回所有支付应用信息
+     */
+    @Override
+    public List<PayApplicationChoiceVO> payApplicationChoiceList() {
+        List<PayApplication> payApplicationList = super.list(new LambdaQueryWrapper<PayApplication>()
+                .select(PayApplication::getId, PayApplication::getName));
+        return BeanUtils.copyList(payApplicationList, PayApplicationChoiceVO.class);
+    }
+
     /**
      * 分页获取应用列表
      *
@@ -185,6 +204,50 @@ public class PayApplicationServiceImpl extends ServiceImpl<PayApplicationMapper,
     }
 
 
+    /**
+     * 支付应用情况
+     *
+     * @param payApplicationId   : 支付应用程序id
+     * @param payApplicationType : 支付应用程序类型
+     * @param appId              : 应用程序id
+     * @param company            : 公司
+     * @return {@link Map}<{@link Long}, {@link PayApplicationDTO}>
+     */
+    @Override
+    public Map<Long, PayApplicationDTO> payApplicationCondition(Integer payApplicationId, Integer payApplicationType,
+                                                                String appId, String company) {
+        //条件判断
+        if (payApplicationId == null && payApplicationType == null && Strings.isBlank(appId) && Strings.isBlank(company)) {
+            return null;
+        }
+        List<PayApplication> payApplicationList = this.list(new LambdaQueryWrapper<PayApplication>()
+                .eq(payApplicationId != null, PayApplication::getId, payApplicationId)
+                .eq(payApplicationType != null, PayApplication::getType, payApplicationType)
+                .like(Strings.isNotBlank(appId), PayApplication::getAppId, appId)
+                .like(Strings.isNotBlank(company), PayApplication::getCompany, company));
+        if (CollectionUtils.isEmpty(payApplicationList)) {
+            return Collections.emptyMap();
+        }
+        return BeanUtils.copyList(payApplicationList, PayApplicationDTO.class)
+                .stream().collect(Collectors.toMap(PayApplicationDTO::getId, Function.identity()));
+    }
+
+    /**
+     * 支付应用程序地图
+     *
+     * @return {@link Map}<{@link Long}, {@link PayApplicationDTO}>
+     */
+    @Override
+    public Map<Long, PayApplicationDTO> payApplicationMap() {
+        List<PayApplication> payApplicationList = this.list();
+        if (CollectionUtils.isEmpty(payApplicationList)) {
+            return Collections.emptyMap();
+        }
+        return BeanUtils.copyList(payApplicationList, PayApplicationDTO.class)
+                .stream().collect(Collectors.toMap(PayApplicationDTO::getId, Function.identity()));
+    }
+
+
     //------------------------------------------------- 准备删除的旧代码 -------------------------------------------------
 
     @Override

+ 90 - 25
game-module/game-manage/src/main/java/com/zanxiang/manage/service/Impl/PayBoxServiceImpl.java

@@ -1,28 +1,35 @@
 package com.zanxiang.manage.service.Impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.zanxiang.common.enums.ApplicationTypeEnum;
 import com.zanxiang.common.enums.DeleteEnum;
+import com.zanxiang.common.enums.StatusEnum;
+import com.zanxiang.common.exception.BaseException;
 import com.zanxiang.common.utils.StringUtils;
 import com.zanxiang.common.utils.bean.BeanUtils;
 import com.zanxiang.manage.domain.mapper.PayBoxListMapper;
+import com.zanxiang.manage.domain.params.PayBoxAddUpdateParam;
 import com.zanxiang.manage.domain.params.PayBoxListParam;
-import com.zanxiang.manage.domain.params.PayBoxParam;
 import com.zanxiang.manage.domain.vo.PayBoxListVO;
+import com.zanxiang.manage.service.PayApplicationService;
 import com.zanxiang.manage.service.PayBoxService;
 import com.zanxiang.manage.service.PayMerchantService;
 import com.zanxiang.mybatis.entity.PayBox;
 import com.zanxiang.mybatis.entity.PayMerchant;
 import com.zanxiang.mybatis.mapper.PayBoxMapper;
 import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
 import javax.annotation.Resource;
+import java.time.LocalDateTime;
 import java.util.ArrayList;
-import java.util.List;
 import java.util.Map;
+import java.util.Objects;
 import java.util.stream.Collectors;
 
 /**
@@ -42,36 +49,94 @@ public class PayBoxServiceImpl extends ServiceImpl<PayBoxMapper, PayBox> impleme
     @Resource
     private PayMerchantService payMerchantService;
 
+    @Autowired
+    private PayApplicationService payApplicationService;
+
+    /**
+     * 分页获取应用列表
+     *
+     * @param param : 查询参数
+     * @return : 返回列表
+     */
     @Override
-    public Boolean saveOrUpdate(PayBoxParam bo) {
-        PayBox app = BeanUtils.copy(bo, PayBox.class);
-        if (StringUtils.isNotEmpty(bo.getPayMerchantId())) {
-            app.setPayMerchantId("," + bo.getPayMerchantId() + ",");
-        }
-        if (bo.getIsDelete() != null && bo.getIsDelete() == DeleteEnum.YES.getCode()) {
-            return removeById(bo.getId());
+    public IPage<PayBoxListVO> list(PayBoxListParam param) {
+//        return page(param.toPage(), new LambdaQueryWrapper<PayBox>()
+//                .like(Strings.isNotBlank(param.getName()), PayBox::getName, param.getName())
+//                .eq(param.getPayApplicationType() != null, PayBox::getPayApplicationId, param.getPayApplicationId())
+//                .like(Strings.isNotBlank(param.getAppId()), PayApplication::getAppId, param.getAppId())
+//                .like(Strings.isNotBlank(param.getCompany()), PayApplication::getCompany, param.getCompany())
+//                .orderByDesc(PayApplication::getCreateTime))
+//                .convert(this::toVo);
+        return null;
+    }
+
+    /**
+     * 给签证官
+     *
+     * @param payBox 支付盒子
+     * @return {@link PayBoxListVO}
+     */
+    private PayBoxListVO toVo(PayBox payBox) {
+        PayBoxListVO payBoxListVO = BeanUtils.copy(payBox, PayBoxListVO.class);
+        if (Objects.isNull(payBoxListVO)) {
+            return null;
         }
-        return saveOrUpdate(app);
+        payBoxListVO.setTypeName(ApplicationTypeEnum.getDescByType(payBoxListVO.getType()));
+        return payBoxListVO;
     }
 
+    /**
+     * 支付应用添加或者更新
+     *
+     * @param param : 参数
+     * @return : 返回结果
+     */
     @Override
-    public IPage<PayBoxListVO> list(PayBoxListParam param) {
-        Page<PayBox> page = new Page<>(param.getPageNum(), param.getPageSize());
-        IPage<PayBoxListVO> payBoxList = payBoxListMapper.payBoxList(page, param.getName(), param.getPayApplicationName(), param.getAppId(), param.getCompany(), param.getPayMerchantId(), param.getPayApplicationType()
-        );
-        if (payBoxList.getSize() == 0) {
-            return null;
+    @Transactional(rollbackFor = Exception.class)
+    public Boolean addOrUpdate(PayBoxAddUpdateParam param) {
+        Long id = param.getId();
+        //更新
+        if (id != null) {
+            PayBox payBox = super.getById(id);
+            if (payBox == null) {
+                throw new BaseException("参数错误, 支付盒子信息不存在");
+            }
+            //更新时, 盒子名字不可重复
+            if (!Objects.equals(payBox.getName(), param.getName())) {
+                //判断应用是否已经存在
+                int count = super.count(new LambdaQueryWrapper<PayBox>().eq(PayBox::getName, param.getName()));
+                if (count > 0) {
+                    throw new BaseException("支付盒子名称已经存在");
+                }
+            }
+            payBox.setName(param.getName());
+            payBox.setPayApplicationId(param.getPayApplicationId());
+            payBox.setPayMerchantId(StringUtils.join(param.getPayMerchantIds(), ","));
+            payBox.setType(param.getType());
+            payBox.setRemark(param.getRemark());
+            payBox.setUpdateTime(LocalDateTime.now());
+            return super.updateById(payBox);
+        }
+        //判断名称是否已经存在
+        int count = super.count(new LambdaQueryWrapper<PayBox>().eq(PayBox::getName, param.getName()));
+        if (count > 0) {
+            throw new BaseException("支付盒子名称已经存在");
         }
-        //获取商户号列表
-        List<PayMerchant> payMerchantList = payMerchantService.list();
-        Map<String, PayMerchant> payMerchantData = payMerchantList.stream().collect(Collectors.toMap(PayMerchant::getMerchantNo, PayMerchant -> PayMerchant));
-        //循环set商户号详情
-        payBoxList.getRecords().stream().filter(t -> StringUtils.isNotEmpty(t.getPayMerchantId())).forEach(t -> {
-            t.setPayMerchantDetail(getMerchantDetail(payMerchantData, t.getPayMerchantId()));
-        });
-        return payBoxList;
+        //创建
+        return super.save(PayBox.builder()
+                .name(param.getName())
+                .payApplicationId(param.getPayApplicationId())
+                .payMerchantId(StringUtils.join(param.getPayMerchantIds(), ","))
+                .type(param.getType())
+                .remark(param.getRemark())
+                .status(StatusEnum.YES.getCode())
+                .isDelete(DeleteEnum.NO.getCode())
+                .createTime(LocalDateTime.now())
+                .updateTime(LocalDateTime.now())
+                .build());
     }
 
+    //------------------------------------------------- 准备删除的旧代码 -------------------------------------------------
 
     /**
      * 通过商户号id获取商户号简介

+ 28 - 0
game-module/game-manage/src/main/java/com/zanxiang/manage/service/PayApplicationService.java

@@ -3,13 +3,16 @@ package com.zanxiang.manage.service;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.zanxiang.manage.domain.bo.PayApplicationBO;
+import com.zanxiang.manage.domain.dto.PayApplicationDTO;
 import com.zanxiang.manage.domain.params.PayApplicationAddUpdateParam;
 import com.zanxiang.manage.domain.params.PayApplicationListNoPageParam;
 import com.zanxiang.manage.domain.params.PayApplicationListParam;
+import com.zanxiang.manage.domain.vo.PayApplicationChoiceVO;
 import com.zanxiang.manage.domain.vo.PayApplicationVO;
 import com.zanxiang.mybatis.entity.PayApplication;
 
 import java.util.List;
+import java.util.Map;
 
 /**
  * 游戏应用表 服务类接口
@@ -19,6 +22,31 @@ import java.util.List;
  */
 public interface PayApplicationService extends IService<PayApplication> {
 
+    /**
+     * 支付应用程序地图
+     *
+     * @return {@link Map}<{@link Long}, {@link PayApplicationDTO}>
+     */
+    Map<Long, PayApplicationDTO> payApplicationMap();
+
+    /**
+     * 支付应用情况
+     *
+     * @param payApplicationId   : 支付应用程序id
+     * @param payApplicationType : 支付应用程序类型
+     * @param appId              : 应用程序id
+     * @param company            : 公司
+     * @return {@link Map}<{@link Long}, {@link PayApplicationDTO}>
+     */
+    Map<Long, PayApplicationDTO> payApplicationCondition(Integer payApplicationId, Integer payApplicationType, String appId, String company);
+
+    /**
+     * 支付应用选择列表
+     *
+     * @return : 返回所有支付应用信息
+     */
+    List<PayApplicationChoiceVO> payApplicationChoiceList();
+
     /**
      * 支付应用添加或者更新
      *

+ 9 - 1
game-module/game-manage/src/main/java/com/zanxiang/manage/service/PayBoxService.java

@@ -2,6 +2,7 @@ package com.zanxiang.manage.service;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.zanxiang.manage.domain.params.PayBoxAddUpdateParam;
 import com.zanxiang.manage.domain.params.PayBoxListParam;
 import com.zanxiang.manage.domain.params.PayBoxParam;
 import com.zanxiang.manage.domain.vo.PayBoxListVO;
@@ -18,7 +19,14 @@ import java.util.Map;
  */
 
 public interface PayBoxService extends IService<PayBox> {
-    Boolean saveOrUpdate(PayBoxParam bo);
+
+    /**
+     * 支付应用添加或者更新
+     *
+     * @param param : 参数
+     * @return : 返回结果
+     */
+    Boolean addOrUpdate(PayBoxAddUpdateParam param);
 
     IPage<PayBoxListVO> list(PayBoxListParam param);
 

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

@@ -5,11 +5,12 @@ import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableLogic;
 import com.baomidou.mybatisplus.annotation.TableName;
 import lombok.AllArgsConstructor;
+import lombok.Builder;
 import lombok.Data;
 import lombok.NoArgsConstructor;
 
 import java.io.Serializable;
-import java.util.Date;
+import java.time.LocalDateTime;
 
 /**
  * 支付盒子
@@ -20,6 +21,7 @@ import java.util.Date;
 @Data
 @NoArgsConstructor
 @AllArgsConstructor
+@Builder
 @TableName("t_pay_box")
 public class PayBox implements Serializable {
 
@@ -34,22 +36,22 @@ public class PayBox implements Serializable {
     private String name;
 
     /**
-     * 支付名称
+     * 应用id
      */
-    private String payName;
+    private Long payApplicationId;
 
     /**
-     * 应用id
+     * 应用类型
      */
-    private Integer payApplicationId;
+    private Integer payApplicationType;
 
     /**
-     * 商户号id(多个逗号分割,id,
+     * 商户号(多个逗号分割)
      */
     private String payMerchantId;
 
     /**
-     * 盒子类型 1金币 2、红包
+     * 盒子类型 1商城百货 2、商城美妆 2、商城内容
      */
     private Integer type;
 
@@ -72,10 +74,10 @@ public class PayBox implements Serializable {
     /**
      * 创建时间
      */
-    private Date createTime;
+    private LocalDateTime createTime;
 
     /**
      * 更新时间
      */
-    private Date updateTime;
+    private LocalDateTime updateTime;
 }

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

@@ -63,6 +63,11 @@ public class User {
      */
     private String mobile;
 
+    /**
+     * 微信小游戏用户openId
+     */
+    private String openId;
+
     /**
      * 绑定支付宝账号
      */

+ 35 - 0
game-module/game-sdk/src/main/java/com/zanxiang/sdk/controller/InitController.java

@@ -0,0 +1,35 @@
+package com.zanxiang.sdk.controller;
+
+import com.zanxiang.common.domain.ResultVO;
+import com.zanxiang.sdk.domain.params.UserData;
+import com.zanxiang.sdk.domain.vo.GameAppletVO;
+import com.zanxiang.sdk.service.GameAppletService;
+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.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * @author : lingfeng
+ * @time : 2023-01-03
+ * @description : sdk初始化接口
+ */
+@Api(tags = "sdk初始化接口")
+@RestController
+@RequestMapping(value = "/api/init")
+public class InitController {
+
+    @Autowired
+    private GameAppletService gameAppletService;
+
+    @ApiOperation(value = "微信小游戏sdk初始化")
+    @PostMapping("/applet")
+    @ApiResponses(value = {@ApiResponse(code = 200, message = "成功", response = GameAppletVO.class)})
+    public ResultVO<GameAppletVO> gameAppletInit(UserData userData) {
+        return new ResultVO<>(gameAppletService.gameAppletInit(userData));
+    }
+}

+ 8 - 0
game-module/game-sdk/src/main/java/com/zanxiang/sdk/controller/LoginController.java

@@ -5,6 +5,7 @@ import com.zanxiang.sdk.annotation.UnSignCheck;
 import com.zanxiang.sdk.annotation.ValidLogin;
 import com.zanxiang.sdk.domain.params.LoginMobileParam;
 import com.zanxiang.sdk.domain.params.LoginPasswordParam;
+import com.zanxiang.sdk.domain.params.LoginVxCodeParam;
 import com.zanxiang.sdk.domain.params.UserData;
 import com.zanxiang.sdk.domain.vo.UserLoginVO;
 import com.zanxiang.sdk.service.RegisterLoginService;
@@ -33,6 +34,13 @@ public class LoginController {
     @Autowired
     private UserTokenService userTokenService;
 
+    @ApiOperation(value = "微信小游戏code授权登录")
+    @PostMapping("/wx/code")
+    @ApiResponses(value = {@ApiResponse(code = 200, message = "成功", response = UserLoginVO.class)})
+    public ResultVO<UserLoginVO> loginWxCode(@Validated @RequestBody LoginVxCodeParam param, UserData userData) {
+        return registerLoginService.loginWxCode(param, userData);
+    }
+
     @UnSignCheck
     @ApiOperation(value = "登录凭证验证")
     @GetMapping("/token/check")

+ 37 - 0
game-module/game-sdk/src/main/java/com/zanxiang/sdk/domain/dto/GameAppletDTO.java

@@ -0,0 +1,37 @@
+package com.zanxiang.sdk.domain.dto;
+
+import lombok.Data;
+
+/**
+ * @author : lingfeng
+ * @time : 2023-01-03
+ * @description : 游戏小程序信息
+ */
+@Data
+public class GameAppletDTO {
+
+    /**
+     * 主键
+     */
+    private Long id;
+
+    /**
+     * 游戏id
+     */
+    private Long gameId;
+
+    /**
+     * 小程序appId
+     */
+    private String appId;
+
+    /**
+     * 小程序密钥
+     */
+    private String appSecret;
+
+    /**
+     * 小程序原始id
+     */
+    private String ghId;
+}

+ 22 - 0
game-module/game-sdk/src/main/java/com/zanxiang/sdk/domain/params/LoginVxCodeParam.java

@@ -0,0 +1,22 @@
+package com.zanxiang.sdk.domain.params;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+
+/**
+ * @author : lingfeng
+ * @time : 2023-01-03
+ * @description : 微信code授权登录小程序
+ */
+@Data
+public class LoginVxCodeParam {
+
+    /**
+     * 微信授权code
+     */
+    @ApiModelProperty(notes = "微信授权code")
+    @NotBlank(message = "微信授权code不可为空")
+    private String code;
+}

+ 20 - 0
game-module/game-sdk/src/main/java/com/zanxiang/sdk/domain/vo/GameAppletVO.java

@@ -0,0 +1,20 @@
+package com.zanxiang.sdk.domain.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * @author : lingfeng
+ * @time : 2023-01-03
+ * @description : 微信小游戏初始化
+ */
+@Data
+public class GameAppletVO {
+
+    /**
+     * 微信小游戏appId
+     */
+    @ApiModelProperty(notes = "微信小游戏appId")
+    private String appId;
+
+}

+ 31 - 0
game-module/game-sdk/src/main/java/com/zanxiang/sdk/service/GameAppletService.java

@@ -0,0 +1,31 @@
+package com.zanxiang.sdk.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.zanxiang.mybatis.entity.GameApplet;
+import com.zanxiang.sdk.domain.dto.GameAppletDTO;
+import com.zanxiang.sdk.domain.params.UserData;
+import com.zanxiang.sdk.domain.vo.GameAppletVO;
+
+/**
+ * @author : lingfeng
+ * @time : 2022-07-08
+ * @description : 微信小游戏(小程序)
+ */
+public interface GameAppletService extends IService<GameApplet> {
+
+    /**
+     * 通过游戏id和app id
+     *
+     * @param gameId 游戏id
+     * @return {@link GameAppletDTO}
+     */
+    GameAppletDTO getByGameId(Long gameId);
+
+    /**
+     * 微信小游戏初始化获取信息
+     *
+     * @param userData : 用户信息
+     * @return {@link GameAppletVO}
+     */
+    GameAppletVO gameAppletInit(UserData userData);
+}

+ 56 - 0
game-module/game-sdk/src/main/java/com/zanxiang/sdk/service/Impl/GameAppletServiceImpl.java

@@ -0,0 +1,56 @@
+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.exception.BaseException;
+import com.zanxiang.module.util.bean.BeanUtil;
+import com.zanxiang.mybatis.entity.GameApplet;
+import com.zanxiang.mybatis.mapper.GameAppletMapper;
+import com.zanxiang.sdk.domain.dto.GameAppletDTO;
+import com.zanxiang.sdk.domain.params.UserData;
+import com.zanxiang.sdk.domain.vo.GameAppletVO;
+import com.zanxiang.sdk.service.GameAppletService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+/**
+ * @author : lingfeng
+ * @time : 2022-07-08
+ * @description : 微信小游戏
+ */
+@Slf4j
+@Service
+public class GameAppletServiceImpl extends ServiceImpl<GameAppletMapper, GameApplet> implements GameAppletService {
+
+    /**
+     * 通过游戏id和app id
+     *
+     * @param gameId 游戏id
+     * @return {@link GameAppletDTO}
+     */
+    @Override
+    public GameAppletDTO getByGameId(Long gameId) {
+        GameApplet gameApplet = super.getOne(new LambdaQueryWrapper<GameApplet>()
+                .eq(GameApplet::getGameId, gameId));
+        if (gameApplet == null) {
+            throw new BaseException("参数错误, 游戏小程序信息不存在");
+        }
+        return BeanUtil.copy(gameApplet, GameAppletDTO.class);
+    }
+
+    /**
+     * 微信小游戏初始化获取信息
+     *
+     * @param userData : 用户信息
+     * @return {@link GameAppletVO}
+     */
+    @Override
+    public GameAppletVO gameAppletInit(UserData userData) {
+        GameApplet gameApplet = super.getOne(new LambdaQueryWrapper<GameApplet>()
+                .eq(GameApplet::getGameId, userData.getGameId()));
+        if (gameApplet == null) {
+            throw new BaseException("参数错误, 游戏小程序信息不存在");
+        }
+        return BeanUtil.copy(gameApplet, GameAppletVO.class);
+    }
+}

+ 65 - 7
game-module/game-sdk/src/main/java/com/zanxiang/sdk/service/Impl/LoginServiceImpl.java

@@ -14,14 +14,13 @@ import com.zanxiang.mybatis.entity.User;
 import com.zanxiang.mybatis.entity.UserCard;
 import com.zanxiang.sdk.constant.ApiUrlConstant;
 import com.zanxiang.sdk.constant.RedisKeyConstant;
+import com.zanxiang.sdk.domain.dto.GameAppletDTO;
 import com.zanxiang.sdk.domain.dto.UserOauthDTO;
-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.params.*;
 import com.zanxiang.sdk.domain.vo.UserLoginVO;
 import com.zanxiang.sdk.enums.LoginTypeEnum;
 import com.zanxiang.sdk.service.*;
+import com.zanxiang.sdk.service.api.WxApiService;
 import com.zanxiang.sdk.util.RedisUtil;
 import com.zanxiang.sdk.util.RegexUtil;
 import com.zanxiang.sdk.util.RegisterUtil;
@@ -94,6 +93,12 @@ public class LoginServiceImpl implements RegisterLoginService {
     @Autowired
     private CallBackService callBackService;
 
+    @Autowired
+    private GameAppletService gameAppletService;
+
+    @Autowired
+    private WxApiService wxApiService;
+
     /**
      * QQ开发者应用id
      */
@@ -106,6 +111,56 @@ public class LoginServiceImpl implements RegisterLoginService {
     @Value("${auth.vx-appId}")
     private String vxAppId;
 
+    /**
+     * 微信小游戏code授权登录
+     *
+     * @param param    : 授权参数
+     * @param userData : 用户信息
+     * @return : 返回用户登录信息
+     */
+    @Override
+    public ResultVO<UserLoginVO> loginWxCode(LoginVxCodeParam param, UserData userData) {
+        //验证登录ip是否封禁
+        if (ipBanService.checkIpBan(userData.getIp())) {
+            return new ResultVO<>(HttpStatusEnum.IP_HALT);
+        }
+        //查询微信小游戏信息
+        GameAppletDTO gameAppletDTO = gameAppletService.getByGameId(userData.getGameId());
+        //获取用户微信小游戏的openId
+        String openId = wxApiService.getOpenId(param.getCode(), gameAppletDTO.getAppId(), gameAppletDTO.getAppSecret());
+        //根据openId查询用户
+        User user = userService.getOne(new LambdaQueryWrapper<User>()
+                .eq(User::getGameId, userData.getGameId()).eq(User::getOpenId, openId));
+        if (user == null) {
+            user = User.builder()
+                    .agentId(promoChannelService.getAgentIdByChannel(userData.getChannel()))
+                    .gameId(userData.getGameId())
+                    .username(openId)
+                    .nickname(RegisterUtil.randomNickName(openId))
+                    .deviceType(userData.getDeviceType())
+                    .status(BanStatusEnum.NORMAL_STATUS.getStatus())
+                    .authentication(0)
+                    .createTime(LocalDateTime.now())
+                    .updateTime(LocalDateTime.now())
+                    .deviceSystem(userData.getDeviceSystem())
+                    .mac(userData.getMac())
+                    .imei(userData.getImei())
+                    .androidId(userData.getAndroidId())
+                    .ip(userData.getIp())
+                    .build();
+            userService.save(user);
+            gameUserService.createGameUser(user);
+            callBackService.userCallBack(user);
+        } else {
+            //判断账号是否停用
+            if (Objects.equals(BanStatusEnum.BAN_STATUS.getStatus(), user.getStatus())) {
+                return new ResultVO<>(HttpStatusEnum.ACCOUNT_HALT);
+            }
+        }
+        //返回登录信息
+        return new ResultVO<>(this.createUserLoginVO(user, userData));
+    }
+
     /**
      * 用户名注册或者登录
      *
@@ -128,10 +183,12 @@ public class LoginServiceImpl implements RegisterLoginService {
         if (Objects.equals(param.getType(), LoginPasswordParam.LOGIN)) {
             //判断是否手机号
             if (RegexUtil.checkPhone(username)) {
-                user = userService.getOne(new LambdaQueryWrapper<User>().eq(User::getMobile, username));
+                user = userService.getOne(new LambdaQueryWrapper<User>()
+                        .eq(User::getGameId, userData.getGameId()).eq(User::getMobile, username));
             } else {
                 //根据用户名查询
-                user = userService.getOne(new LambdaQueryWrapper<User>().eq(User::getUsername, username));
+                user = userService.getOne(new LambdaQueryWrapper<User>()
+                        .eq(User::getGameId, userData.getGameId()).eq(User::getUsername, username));
             }
             //用户信息不存在
             if (user == null) {
@@ -199,7 +256,8 @@ public class LoginServiceImpl implements RegisterLoginService {
             return new ResultVO<>(httpStatusEnum);
         }
         //获取用户信息
-        User user = userService.getOne(new LambdaQueryWrapper<User>().eq(User::getMobile, mobile));
+        User user = userService.getOne(new LambdaQueryWrapper<User>()
+                .eq(User::getGameId, userData.getGameId()).eq(User::getMobile, mobile));
         //用户信息不存在, 直接注册
         if (user == null) {
             user = User.builder()

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

@@ -11,7 +11,6 @@ import com.zanxiang.common.text.UUID;
 import com.zanxiang.common.utils.DateUtils;
 import com.zanxiang.common.utils.MD5Util;
 import com.zanxiang.common.utils.bean.BeanUtils;
-import com.zanxiang.module.util.JsonUtil;
 import com.zanxiang.mybatis.entity.GameExt;
 import com.zanxiang.mybatis.entity.User;
 import com.zanxiang.mybatis.entity.UserToken;
@@ -66,7 +65,6 @@ public class UserTokenServiceImpl extends ServiceImpl<UserTokenMapper, UserToken
      */
     @Override
     public ResultVO<Long> userTokenCheck(String appId, Long userId, String token, String sign) {
-        log.error("登录验证, appId : {}, userId : {}, token : {}, sign : {}", appId, userId, token, sign);
         //查询登录签名
         GameExt gameExt = gameExtService.getByGameAppId(appId);
         if (gameExt == null || Strings.isBlank(gameExt.getLoginKey())) {
@@ -95,13 +93,11 @@ public class UserTokenServiceImpl extends ServiceImpl<UserTokenMapper, UserToken
             log.error("md5工具类加密异常, str : {}, e : {}", sb.toString(), e.getMessage());
             throw new BaseException("MD5加密异常");
         }
-        log.error("登录验证结果, mySign : {}", mySign);
+        //签名错误
+        if (!Objects.equals(mySign, sign)) {
+            return ResultVO.ok(TokenCheckEnum.CHECK_FAIL.getCode(), TokenCheckEnum.CHECK_FAIL.getMsg());
+        }
         return ResultVO.ok(userId);
-//        //签名错误
-//        if (!Objects.equals(mySign, sign)) {
-//            return ResultVO.ok(TokenCheckEnum.CHECK_FAIL.getCode(), TokenCheckEnum.CHECK_FAIL.getMsg());
-//        }
-//        return ResultVO.ok(userId);
     }
 
     /**
@@ -112,7 +108,6 @@ public class UserTokenServiceImpl extends ServiceImpl<UserTokenMapper, UserToken
      */
     @Override
     public Boolean userTokenExpireTimeCheck(UserData userData) {
-        log.error("-----------------> 时效验证, userData : {}", JsonUtil.toString(userData));
         //验证ip是否封禁
         if (ipBanService.checkIpBan(userData.getIp())) {
             return Boolean.FALSE;
@@ -131,9 +126,7 @@ public class UserTokenServiceImpl extends ServiceImpl<UserTokenMapper, UserToken
         //判断token是否过期
         long endTime = DateUtils.localDateTimeToSecond(LocalDateTime.now().plusDays(1));
         //判断有效期时间是否大于1天
-        boolean b = expireTime > endTime;
-        log.error("-----------------> expireTime : {}, endTime : {}, b : {}", expireTime, endTime, b);
-        return b;
+        return expireTime > endTime;
     }
 
     /**

+ 10 - 4
game-module/game-sdk/src/main/java/com/zanxiang/sdk/service/RegisterLoginService.java

@@ -1,10 +1,7 @@
 package com.zanxiang.sdk.service;
 
 import com.zanxiang.common.domain.ResultVO;
-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.params.*;
 import com.zanxiang.sdk.domain.vo.UserLoginVO;
 
 import javax.servlet.http.HttpServletRequest;
@@ -17,6 +14,15 @@ import javax.servlet.http.HttpServletResponse;
  */
 public interface RegisterLoginService {
 
+    /**
+     * 微信小游戏code授权登录
+     *
+     * @param param    : 授权参数
+     * @param userData : 用户信息
+     * @return : 返回用户登录信息
+     */
+    ResultVO<UserLoginVO> loginWxCode(LoginVxCodeParam param, UserData userData);
+
     /**
      * 用户名注册或者登录
      *

+ 52 - 0
game-module/game-sdk/src/main/java/com/zanxiang/sdk/service/api/WxApiService.java

@@ -0,0 +1,52 @@
+package com.zanxiang.sdk.service.api;
+
+import com.zanxiang.common.exception.BaseException;
+import com.zanxiang.common.utils.URIUtil;
+import com.zanxiang.module.util.JsonUtil;
+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.web.client.RestTemplate;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * @author : lingfeng
+ * @time : 2023-01-03
+ * @description : 微信通用api接口
+ */
+@Slf4j
+@Service
+public class WxApiService {
+
+    @Autowired
+    private RestTemplate restTemplate;
+
+    /**
+     * 获取用户应用openId
+     *
+     * @param code   : 授权code
+     * @param appId  : 应用id
+     * @param secret : 应用密钥
+     * @return {@link String}
+     */
+    public String getOpenId(String code, String appId, String secret) {
+        // 请求微信服务器,使用code获取openid
+        Map<String, String> paramMap = new HashMap<>(4);
+        paramMap.put("appid", appId);
+        paramMap.put("secret", secret);
+        paramMap.put("js_code", code);
+        paramMap.put("grant_type", "authorization_code");
+        // 发送请求
+        String url = URIUtil.fillUrlParams("https://api.weixin.qq.com/sns/jscode2session", paramMap, Boolean.FALSE);
+        String sr = restTemplate.getForObject(url, String.class);
+        // 解析相应内容(转换成json对象)
+        Map<String, String> userMap = JsonUtil.toMap(sr, Map.class, String.class);
+        if (userMap == null || Strings.isBlank(userMap.get("openid"))) {
+            throw new BaseException("获取用户小程序/小游戏openId失败");
+        }
+        return userMap.get("openid");
+    }
+}