Explorar o código

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

zhimo hai 4 meses
pai
achega
273a1d4908
Modificáronse 17 ficheiros con 230 adicións e 292 borrados
  1. 1 1
      game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/GameBackApplication.java
  2. 6 1
      game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/pojo/entity/GameTencentMiniGameBackLog.java
  3. 27 0
      game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/pojo/entity/GameTencentMiniGameOrder.java
  4. 1 1
      game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/pojo/entity/GameTencentMiniGameOrderSplitLog.java
  5. 9 0
      game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/pojo/entity/GameTencentMiniGameRoleRegister.java
  6. 7 4
      game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/pojo/entity/GameTencentMiniGameUser.java
  7. 29 0
      game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/pojo/enums/BackTypeEnum.java
  8. 53 46
      game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/rpc/impl/TencentMiniGameBackRpcImpl.java
  9. 0 2
      game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/service/IGameTencentMiniGameBackLogService.java
  10. 5 20
      game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/service/impl/GameTencentMiniGameBackLogServiceImpl.java
  11. 19 6
      game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/service/impl/GameTencentMiniGameOrderServiceImpl.java
  12. 33 26
      game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/service/impl/GameTencentMiniGameRoleRegisterServiceImpl.java
  13. 4 13
      game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/service/impl/GameTencentMiniGameUserServiceImpl.java
  14. 5 0
      game-module/game-module-mybatis/src/main/java/com/zanxiang/game/module/mybatis/entity/Game.java
  15. 1 1
      game-module/game-module-sdk/src/main/java/com/zanxiang/game/module/sdk/SDKApplication.java
  16. 0 11
      game-module/game-module-sdk/src/main/java/com/zanxiang/game/module/sdk/service/ICallBackService.java
  17. 30 160
      game-module/game-module-sdk/src/main/java/com/zanxiang/game/module/sdk/service/impl/CallBackServiceImpl.java

+ 1 - 1
game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/GameBackApplication.java

@@ -18,7 +18,7 @@ public class GameBackApplication {
 
     public static void main(String[] args) {
         SpringApplication.run(GameBackApplication.class, args);
-        System.out.println("修改问题, 新增腾讯小游戏手动上报创角接口 ( ´・・)ノ(._.`)  \n" +
+        System.out.println("腾讯小游戏上报新增类型 (腾讯小游戏回传新增回传类型´・・)ノ(._.`)  \n" +
                 " ______  __     __     \n" +
                 "/_____/\\/__/\\ /__/\\    \n" +
                 "\\:::__\\/\\ \\::\\\\:.\\ \\   \n" +

+ 6 - 1
game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/pojo/entity/GameTencentMiniGameBackLog.java

@@ -79,14 +79,19 @@ public class GameTencentMiniGameBackLog implements Serializable {
      * 回传时间
      */
     private LocalDateTime createTime;
+
     /**
      * 回传状态
      */
     private Integer backStatus;
+
     /**
      * 回传失败的错误日志
      */
     private String errMsg;
 
-
+    /**
+     * 回传方式
+     */
+    private String backType;
 }

+ 27 - 0
game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/pojo/entity/GameTencentMiniGameOrder.java

@@ -27,8 +27,12 @@ import java.time.LocalDateTime;
 public class GameTencentMiniGameOrder implements Serializable {
     private static final long serialVersionUID = 1L;
 
+    /**
+     * 主键id
+     */
     @TableId(value = "id", type = IdType.AUTO)
     private Long id;
+
     /**
      * 渠道号
      */
@@ -99,15 +103,38 @@ public class GameTencentMiniGameOrder implements Serializable {
      */
     private Integer backStatus;
 
+    /**
+     * 创建时间
+     */
     private LocalDateTime createTime;
 
+    /**
+     * 角色id
+     */
     private String roleId;
 
+    /**
+     * 角色名称
+     */
     private String roleName;
 
+    /**
+     * 是否首单
+     */
     private Boolean isFirstOrder;
 
+    /**
+     * 回传金额
+     */
     private Long backMoney;
 
+    /**
+     * 回传信息
+     */
     private String backMsg;
+
+    /**
+     * 回传方式
+     */
+    private String backType;
 }

+ 1 - 1
game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/pojo/entity/GameTencentMiniGameOrderSplitLog.java

@@ -46,5 +46,5 @@ public class GameTencentMiniGameOrderSplitLog implements Serializable {
 
     private LocalDateTime createTime;
 
-
+    private String backType;
 }

+ 9 - 0
game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/pojo/entity/GameTencentMiniGameRoleRegister.java

@@ -28,6 +28,9 @@ public class GameTencentMiniGameRoleRegister implements Serializable {
 
     private static final long serialVersionUID = 1L;
 
+    /**
+     * 主键id
+     */
     @TableId(value = "id", type = IdType.AUTO)
     private Long id;
 
@@ -35,6 +38,7 @@ public class GameTencentMiniGameRoleRegister implements Serializable {
      * 回传策略id
      */
     private Long backPolicyId;
+
     /**
      * 渠道号
      */
@@ -104,4 +108,9 @@ public class GameTencentMiniGameRoleRegister implements Serializable {
      * 回传信息
      */
     private String backMsg;
+
+    /**
+     * 回传方式
+     */
+    private String backType;
 }

+ 7 - 4
game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/pojo/entity/GameTencentMiniGameUser.java

@@ -28,6 +28,9 @@ public class GameTencentMiniGameUser implements Serializable {
 
     private static final long serialVersionUID = 1L;
 
+    /**
+     * 主键id
+     */
     @TableId(value = "id", type = IdType.AUTO)
     private Long id;
 
@@ -77,12 +80,12 @@ public class GameTencentMiniGameUser implements Serializable {
     private Integer backStatus;
 
     /**
-     * 回传状态-沉默唤起
+     * 创建时间
      */
-    private Integer reActiveBackStatus;
+    private LocalDateTime createTime;
 
     /**
-     * 创建时间
+     * 回传方式
      */
-    private LocalDateTime createTime;
+    private String backType;
 }

+ 29 - 0
game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/pojo/enums/BackTypeEnum.java

@@ -0,0 +1,29 @@
+package com.zanxiang.game.back.serve.pojo.enums;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+/**
+ * @author : lingfeng
+ * @time : 2024-12-03
+ * @description :
+ */
+@Getter
+@AllArgsConstructor
+public enum BackTypeEnum {
+
+    /**
+     * API回传
+     */
+    BACK_API("BACK_API"),
+
+    /**
+     * 媒体SDK回传
+     */
+    BACK_MEDIA_SDK("BACK_MEDIA_SDK");
+
+    /**
+     * 回传类型
+     */
+    private final String backType;
+}

+ 53 - 46
game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/rpc/impl/TencentMiniGameBackRpcImpl.java

@@ -12,6 +12,7 @@ import com.zanxiang.game.back.base.pojo.vo.OrderBackQueryRpcVO;
 import com.zanxiang.game.back.base.rpc.ITencentMiniGameBackRpc;
 import com.zanxiang.game.back.serve.pojo.entity.*;
 import com.zanxiang.game.back.serve.pojo.enums.BackStatusEnum;
+import com.zanxiang.game.back.serve.pojo.enums.BackTypeEnum;
 import com.zanxiang.game.back.serve.service.*;
 import com.zanxiang.module.util.JsonUtil;
 import com.zanxiang.module.util.pojo.ResultVO;
@@ -25,6 +26,7 @@ import java.time.LocalDateTime;
 import java.util.Collections;
 import java.util.List;
 import java.util.Objects;
+import java.util.concurrent.TimeUnit;
 import java.util.stream.Collectors;
 
 @Slf4j
@@ -69,6 +71,7 @@ public class TencentMiniGameBackRpcImpl implements ITencentMiniGameBackRpc {
         }
         List<Long> splitMoney = gameTencentMiniGameOrderSplitLogService.list(new LambdaQueryWrapper<GameTencentMiniGameOrderSplitLog>()
                 .eq(GameTencentMiniGameOrderSplitLog::getOrderNo, orderLog.getOrderId())
+                .eq(GameTencentMiniGameOrderSplitLog::getBackType, BackTypeEnum.BACK_MEDIA_SDK.getBackType())
                 .orderByAsc(GameTencentMiniGameOrderSplitLog::getBackIndex)
         ).stream().map(GameTencentMiniGameOrderSplitLog::getSplitMoney).collect(Collectors.toList());
         return ResultVO.ok(OrderBackQueryRpcVO.builder()
@@ -99,6 +102,7 @@ public class TencentMiniGameBackRpcImpl implements ITencentMiniGameBackRpc {
                 .eq(GameTencentMiniGameOrder::getGameId, dto.getGameId())
                 .eq(GameTencentMiniGameOrder::getAgentKey, dto.getAgentKey())
                 .eq(GameTencentMiniGameOrder::getWechatOpenid, dto.getWechatOpenid())
+                .eq(GameTencentMiniGameOrder::getBackType, BackTypeEnum.BACK_MEDIA_SDK.getBackType())
         );
     }
 
@@ -117,8 +121,8 @@ public class TencentMiniGameBackRpcImpl implements ITencentMiniGameBackRpc {
                 .eq(GameTencentMiniGameOrder::getAdAccountId, dto.getAdAccountId())
                 .eq(GameTencentMiniGameOrder::getOrderStatus, OrderStatusEnum.SUCCESS_PAY.getValue())
                 .eq(GameTencentMiniGameOrder::getWechatOpenid, dto.getWechatOpenid())
-                .last("limit 1")
-        ) == null;
+                .eq(GameTencentMiniGameOrder::getBackType, BackTypeEnum.BACK_API.getBackType())
+                .last("limit 1")) == null;
         GameTencentMiniGameUser userLog = gameTencentMiniGameUserService.getOne(new LambdaQueryWrapper<GameTencentMiniGameUser>()
                 .select(GameTencentMiniGameUser::getBackStatus, GameTencentMiniGameUser::getClickId)
                 .eq(GameTencentMiniGameUser::getGameId, dto.getGameId())
@@ -126,6 +130,7 @@ public class TencentMiniGameBackRpcImpl implements ITencentMiniGameBackRpc {
                 .eq(GameTencentMiniGameUser::getWechatOpenid, dto.getWechatOpenid())
                 .eq(GameTencentMiniGameUser::getAdAccountId, dto.getAdAccountId())
                 .orderByDesc(GameTencentMiniGameUser::getCreateTime)
+                .eq(GameTencentMiniGameUser::getBackType, BackTypeEnum.BACK_API.getBackType())
                 .last("limit 1")
         );
         GameTencentMiniGameOrder orderLog = GameTencentMiniGameOrder.builder()
@@ -148,6 +153,7 @@ public class TencentMiniGameBackRpcImpl implements ITencentMiniGameBackRpc {
                 .roleId(dto.getRoleId())
                 .roleName(dto.getRoleName())
                 .isFirstOrder(isFirstOrder)
+                .backType(BackTypeEnum.BACK_API.getBackType())
                 .build();
         gameTencentMiniGameOrderService.save(orderLog);
         if (userLog == null) {
@@ -166,51 +172,44 @@ public class TencentMiniGameBackRpcImpl implements ITencentMiniGameBackRpc {
             log.error("腾讯小游戏订单媒体SDK回传收到:{}。订单未支付,直接过滤", JsonUtil.toString(dto));
             return ResultVO.ok(true);
         }
-        boolean isFirstOrder = gameTencentMiniGameOrderService.getOne(new LambdaQueryWrapper<GameTencentMiniGameOrder>()
-                .select(GameTencentMiniGameOrder::getOrderId)
-                .eq(GameTencentMiniGameOrder::getGameId, dto.getGameId())
-                .eq(GameTencentMiniGameOrder::getWechatAppId, dto.getWechatAppId())
-                .eq(GameTencentMiniGameOrder::getAdAccountId, dto.getAdAccountId())
-                .eq(GameTencentMiniGameOrder::getOrderStatus, OrderStatusEnum.SUCCESS_PAY.getValue())
-                .eq(GameTencentMiniGameOrder::getWechatOpenid, dto.getWechatOpenid())
-                .last("limit 1")
-        ) == null;
-        GameTencentMiniGameUser userLog = gameTencentMiniGameUserService.getOne(new LambdaQueryWrapper<GameTencentMiniGameUser>()
-                .select(GameTencentMiniGameUser::getBackStatus, GameTencentMiniGameUser::getClickId)
-                .eq(GameTencentMiniGameUser::getGameId, dto.getGameId())
-                .eq(GameTencentMiniGameUser::getWechatAppId, dto.getWechatAppId())
-                .eq(GameTencentMiniGameUser::getWechatOpenid, dto.getWechatOpenid())
-                .eq(GameTencentMiniGameUser::getAdAccountId, dto.getAdAccountId())
-                .orderByDesc(GameTencentMiniGameUser::getCreateTime)
-                .last("limit 1")
-        );
-        GameTencentMiniGameOrder orderLog = GameTencentMiniGameOrder.builder()
-                .adAccountId(dto.getAdAccountId())
-                .gameId(dto.getGameId())
-                .orderId(dto.getOrderId())
-                .agentKey(dto.getChannel())
-                .rechargeMoney(dto.getRechargeMoney())
-                .rechargeTime(dto.getRechargeTime())
-                .subscribeTime(dto.getSubscribeTime())
-                .registerTime(dto.getRegisterTime())
-                .wechatAppId(dto.getWechatAppId())
-                .wechatOpenid(dto.getWechatOpenid())
-                .orderStatus(dto.getOrderStatus())
-                .payTime(dto.getPayTime())
-                .createTime(LocalDateTime.now())
-                .backStatus(BackStatusEnum.NO.getBackStatus())
-                .backPolicyId(dto.getBackPolicyId())
-                .clickId(userLog == null ? null : userLog.getClickId())
-                .roleId(dto.getRoleId())
-                .roleName(dto.getRoleName())
-                .isFirstOrder(isFirstOrder)
-                .build();
-        gameTencentMiniGameOrderService.save(orderLog);
-        if (userLog == null) {
-            log.error("腾讯小游戏订单媒体SDK回传失败,找不到回传的用户 orderId: {}", orderLog.getOrderId());
-            return ResultVO.fail("找不到回传用户");
-        } else {
+        // 此处加锁防止 cp 方调用过快,导致查询回传结果时判断逻辑没走完
+        String lockKey = ServerInfo.SERVER_NAME + ":TencentMiniGameOrderBack:" + dto.getGameId() + ":" + dto.getOrderId();
+        redisTemplate.opsForValue().set(lockKey, dto.getOrderId(), 2L, TimeUnit.MINUTES);
+        try {
+            boolean isFirstOrder = gameTencentMiniGameOrderService.getOne(new LambdaQueryWrapper<GameTencentMiniGameOrder>()
+                    .select(GameTencentMiniGameOrder::getOrderId)
+                    .eq(GameTencentMiniGameOrder::getGameId, dto.getGameId())
+                    .eq(GameTencentMiniGameOrder::getWechatAppId, dto.getWechatAppId())
+                    .eq(GameTencentMiniGameOrder::getAdAccountId, dto.getAdAccountId())
+                    .eq(GameTencentMiniGameOrder::getOrderStatus, OrderStatusEnum.SUCCESS_PAY.getValue())
+                    .eq(GameTencentMiniGameOrder::getWechatOpenid, dto.getWechatOpenid())
+                    .eq(GameTencentMiniGameOrder::getBackType, BackTypeEnum.BACK_MEDIA_SDK.getBackType())
+                    .last("limit 1")) == null;
+            GameTencentMiniGameOrder orderLog = GameTencentMiniGameOrder.builder()
+                    .adAccountId(dto.getAdAccountId())
+                    .gameId(dto.getGameId())
+                    .orderId(dto.getOrderId())
+                    .agentKey(dto.getChannel())
+                    .rechargeMoney(dto.getRechargeMoney())
+                    .rechargeTime(dto.getRechargeTime())
+                    .subscribeTime(dto.getSubscribeTime())
+                    .registerTime(dto.getRegisterTime())
+                    .wechatAppId(dto.getWechatAppId())
+                    .wechatOpenid(dto.getWechatOpenid())
+                    .orderStatus(dto.getOrderStatus())
+                    .payTime(dto.getPayTime())
+                    .createTime(LocalDateTime.now())
+                    .backStatus(BackStatusEnum.NO.getBackStatus())
+                    .backPolicyId(dto.getBackPolicyId())
+                    .roleId(dto.getRoleId())
+                    .roleName(dto.getRoleName())
+                    .isFirstOrder(isFirstOrder)
+                    .backType(BackTypeEnum.BACK_MEDIA_SDK.getBackType())
+                    .build();
+            gameTencentMiniGameOrderService.save(orderLog);
             return ResultVO.ok(gameTencentMiniGameOrderService.callback(orderLog));
+        } finally {
+            redisTemplate.delete(lockKey);
         }
     }
 
@@ -228,6 +227,7 @@ public class TencentMiniGameBackRpcImpl implements ITencentMiniGameBackRpc {
                 .backStatus(BackStatusEnum.NO.getBackStatus())
                 .clickId(dto.getClickId())
                 .createTime(LocalDateTime.now())
+                .backType(BackTypeEnum.BACK_API.getBackType())
                 .build();
         gameTencentMiniGameUserService.save(userLog);
         //查询回传策略
@@ -253,6 +253,7 @@ public class TencentMiniGameBackRpcImpl implements ITencentMiniGameBackRpc {
                 .backStatus(BackStatusEnum.NO.getBackStatus())
                 .clickId(dto.getClickId())
                 .createTime(LocalDateTime.now())
+                .backType(BackTypeEnum.BACK_MEDIA_SDK.getBackType())
                 .build();
         gameTencentMiniGameUserService.save(userLog);
         return ResultVO.ok(gameTencentMiniGameUserService.callback(userLog));
@@ -267,6 +268,7 @@ public class TencentMiniGameBackRpcImpl implements ITencentMiniGameBackRpc {
                 .eq(GameTencentMiniGameRoleRegister::getWechatAppId, dto.getWechatAppId())
                 .eq(GameTencentMiniGameRoleRegister::getWechatOpenid, dto.getWechatOpenid())
                 .eq(GameTencentMiniGameRoleRegister::getRoleId, dto.getRoleId())
+                .eq(GameTencentMiniGameRoleRegister::getBackType, BackTypeEnum.BACK_API.getBackType())
                 .last("limit 1")
         );
         if (oldRole != null) {
@@ -298,6 +300,7 @@ public class TencentMiniGameBackRpcImpl implements ITencentMiniGameBackRpc {
                     .eq(GameTencentMiniGameUser::getWechatAppId, dto.getWechatAppId())
                     .eq(GameTencentMiniGameUser::getWechatOpenid, dto.getWechatOpenid())
                     .eq(GameTencentMiniGameUser::getAdAccountId, dto.getAdAccountId())
+                    .eq(GameTencentMiniGameUser::getBackType, BackTypeEnum.BACK_API.getBackType())
                     .orderByDesc(GameTencentMiniGameUser::getCreateTime)
                     .last("limit 1")
             );
@@ -315,6 +318,7 @@ public class TencentMiniGameBackRpcImpl implements ITencentMiniGameBackRpc {
                     .roleId(dto.getRoleId())
                     .roleName(dto.getRoleName())
                     .roleLevel(dto.getRoleLevel())
+                    .backType(BackTypeEnum.BACK_API.getBackType())
                     .build();
             gameTencentMiniGameRoleRegisterService.save(roleRegisterLog);
         }
@@ -330,6 +334,7 @@ public class TencentMiniGameBackRpcImpl implements ITencentMiniGameBackRpc {
                 .eq(GameTencentMiniGameRoleRegister::getWechatAppId, dto.getWechatAppId())
                 .eq(GameTencentMiniGameRoleRegister::getWechatOpenid, dto.getWechatOpenid())
                 .eq(GameTencentMiniGameRoleRegister::getRoleId, dto.getRoleId())
+                .eq(GameTencentMiniGameRoleRegister::getBackType, BackTypeEnum.BACK_MEDIA_SDK.getBackType())
                 .last("limit 1")
         );
         if (oldRole != null) {
@@ -352,6 +357,7 @@ public class TencentMiniGameBackRpcImpl implements ITencentMiniGameBackRpc {
                     .eq(GameTencentMiniGameUser::getWechatAppId, dto.getWechatAppId())
                     .eq(GameTencentMiniGameUser::getWechatOpenid, dto.getWechatOpenid())
                     .eq(GameTencentMiniGameUser::getAdAccountId, dto.getAdAccountId())
+                    .eq(GameTencentMiniGameUser::getBackType, BackTypeEnum.BACK_MEDIA_SDK.getBackType())
                     .orderByDesc(GameTencentMiniGameUser::getCreateTime)
                     .last("limit 1")
             );
@@ -369,6 +375,7 @@ public class TencentMiniGameBackRpcImpl implements ITencentMiniGameBackRpc {
                     .roleId(dto.getRoleId())
                     .roleName(dto.getRoleName())
                     .roleLevel(dto.getRoleLevel())
+                    .backType(BackTypeEnum.BACK_MEDIA_SDK.getBackType())
                     .build();
             gameTencentMiniGameRoleRegisterService.save(roleRegisterLog);
         }

+ 0 - 2
game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/service/IGameTencentMiniGameBackLogService.java

@@ -14,8 +14,6 @@ public interface IGameTencentMiniGameBackLogService extends IService<GameTencent
 
     Tuple2<BackStatusEnum, String> userBack(GameTencentMiniGameUser userLog);
 
-    Tuple2<BackStatusEnum, String> reActiveBack(GameTencentMiniGameUser userLog);
-
     Tuple2<BackStatusEnum, String> orderBack(GameTencentMiniGameOrder orderLog, LocalDateTime backTime, Long backMoney);
 
     Tuple2<BackStatusEnum, String> roleRegisterBack(GameTencentMiniGameRoleRegister roleRegisterLog);

+ 5 - 20
game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/service/impl/GameTencentMiniGameBackLogServiceImpl.java

@@ -10,6 +10,7 @@ import com.zanxiang.game.back.serve.pojo.entity.GameTencentMiniGameRoleRegister;
 import com.zanxiang.game.back.serve.pojo.entity.GameTencentMiniGameUser;
 import com.zanxiang.game.back.serve.pojo.enums.ActionTypeEnum;
 import com.zanxiang.game.back.serve.pojo.enums.BackStatusEnum;
+import com.zanxiang.game.back.serve.pojo.enums.BackTypeEnum;
 import com.zanxiang.game.back.serve.service.IGameTencentMiniGameBackLogService;
 import com.zanxiang.module.util.DateUtil;
 import com.zanxiang.module.util.JsonUtil;
@@ -46,26 +47,7 @@ public class GameTencentMiniGameBackLogServiceImpl extends ServiceImpl<GameTence
                 .wechatAppId(userLog.getWechatAppId())
                 .actionType(ActionTypeEnum.REGISTER.getActionType())
                 .createTime(LocalDateTime.now())
-                .build();
-        Tuple2<BackStatusEnum, String> backResult = callback(backLog);
-        backLog.setBackStatus(backResult.first.getBackStatus());
-        backLog.setErrMsg(backResult.second);
-        save(backLog);
-        return backResult;
-    }
-
-    @Override
-    @Transactional(rollbackFor = Exception.class)
-    public Tuple2<BackStatusEnum, String> reActiveBack(GameTencentMiniGameUser userLog) {
-        GameTencentMiniGameBackLog backLog = GameTencentMiniGameBackLog.builder()
-                .gameId(userLog.getGameId())
-                .adAccountId(userLog.getAdAccountId())
-                .clickId(userLog.getClickId())
-                .actionTime(LocalDateTime.now())
-                .wechatOpenid(userLog.getWechatOpenid())
-                .wechatAppId(userLog.getWechatAppId())
-                .actionType(ActionTypeEnum.RE_ACTIVE.getActionType())
-                .createTime(LocalDateTime.now())
+                .backType(BackTypeEnum.BACK_API.getBackType())
                 .build();
         Tuple2<BackStatusEnum, String> backResult = callback(backLog);
         backLog.setBackStatus(backResult.first.getBackStatus());
@@ -90,6 +72,7 @@ public class GameTencentMiniGameBackLogServiceImpl extends ServiceImpl<GameTence
                 .amount(backMoney)
                 .orderId(orderLog.getOrderId())
                 .createTime(LocalDateTime.now())
+                .backType(BackTypeEnum.BACK_API.getBackType())
                 .build();
         Tuple2<BackStatusEnum, String> backResult = callback(backLog);
         backLog.setBackStatus(backResult.first.getBackStatus());
@@ -110,6 +93,7 @@ public class GameTencentMiniGameBackLogServiceImpl extends ServiceImpl<GameTence
                 .wechatAppId(roleRegisterLog.getWechatAppId())
                 .actionType(ActionTypeEnum.CREATE_ROLE.getActionType())
                 .createTime(LocalDateTime.now())
+                .backType(BackTypeEnum.BACK_API.getBackType())
                 .build();
         Tuple2<BackStatusEnum, String> backResult = callback(backLog);
         backLog.setBackStatus(backResult.first.getBackStatus());
@@ -130,6 +114,7 @@ public class GameTencentMiniGameBackLogServiceImpl extends ServiceImpl<GameTence
                 .wechatAppId(roleRegisterLog.getWechatAppId())
                 .actionType(ActionTypeEnum.TUTORIAL_FINISH.getActionType())
                 .createTime(LocalDateTime.now())
+                .backType(BackTypeEnum.BACK_API.getBackType())
                 .build();
         Tuple2<BackStatusEnum, String> backResult = callback(backLog);
         backLog.setBackStatus(backResult.first.getBackStatus());

+ 19 - 6
game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/service/impl/GameTencentMiniGameOrderServiceImpl.java

@@ -19,6 +19,7 @@ import com.zanxiang.game.back.serve.pojo.dto.OrderReportDTO;
 import com.zanxiang.game.back.serve.pojo.entity.*;
 import com.zanxiang.game.back.serve.pojo.enums.ActionTypeEnum;
 import com.zanxiang.game.back.serve.pojo.enums.BackStatusEnum;
+import com.zanxiang.game.back.serve.pojo.enums.BackTypeEnum;
 import com.zanxiang.game.back.serve.pojo.enums.BackUnitEnum;
 import com.zanxiang.game.back.serve.pojo.vo.GameTencentMiniGameOrderVO;
 import com.zanxiang.game.back.serve.pojo.vo.GameTencentMiniOrderSplitLogVO;
@@ -53,18 +54,24 @@ import java.util.stream.Collectors;
 public class GameTencentMiniGameOrderServiceImpl extends ServiceImpl<GameTencentMiniGameOrderMapper, GameTencentMiniGameOrder>
         implements IGameTencentMiniGameOrderService {
 
-    @DubboReference(providedBy = AdvertisingTencentServer.SERVER_DUBBO_NAME)
-    private IUserActionSetRpc userActionSetRpc;
+    @DubboReference(providedBy = ServerInfo.SERVER_DUBBO_NAME)
+    private IAgentRpc agentRpc;
+
     @DubboReference(providedBy = ErpServer.SERVER_DUBBO_NAME)
     private ISysUserRpc sysUserRpc;
+
+    @DubboReference(providedBy = AdvertisingTencentServer.SERVER_DUBBO_NAME)
+    private IUserActionSetRpc userActionSetRpc;
+
     @Autowired
     private IGameTencentMiniGameBackLogService gameTencentMiniGameBackLogService;
+
     @Autowired
     private IGameTencentMiniGameUserService gameTencentMiniGameUserService;
+
     @Autowired
     private IGameBackPolicyService gameBackPolicyService;
-    @DubboReference(providedBy = ServerInfo.SERVER_DUBBO_NAME)
-    private IAgentRpc agentRpc;
+
     @Autowired
     private IGameTencentMiniGameOrderSplitLogService gameTencentMiniGameOrderSplitLogService;
 
@@ -84,6 +91,7 @@ public class GameTencentMiniGameOrderServiceImpl extends ServiceImpl<GameTencent
                 .eq(GameTencentMiniGameUser::getWechatAppId, orderLog.getWechatAppId())
                 .eq(GameTencentMiniGameUser::getWechatOpenid, orderLog.getWechatOpenid())
                 .eq(GameTencentMiniGameUser::getAdAccountId, orderLog.getAdAccountId())
+                .eq(GameTencentMiniGameUser::getBackType, BackTypeEnum.BACK_API.getBackType())
                 .orderByDesc(GameTencentMiniGameUser::getCreateTime)
                 .last("limit 1")
         );
@@ -132,6 +140,7 @@ public class GameTencentMiniGameOrderServiceImpl extends ServiceImpl<GameTencent
                         .backTime(splitOrder.second)
                         .backStatus(BackStatusEnum.NO.getBackStatus())
                         .createTime(LocalDateTime.now())
+                        .backType(BackTypeEnum.BACK_API.getBackType())
                         .build());
             }
             gameTencentMiniGameOrderSplitLogService.saveBatch(splitOrderLogList);
@@ -206,13 +215,14 @@ public class GameTencentMiniGameOrderServiceImpl extends ServiceImpl<GameTencent
                         .backCount(backInfo.fourth.size())
                         .splitMoney(splitOrder.first)
                         .backTime(splitOrder.second)
-                        .backStatus(BackStatusEnum.NO.getBackStatus())
+                        .backStatus(BackStatusEnum.SUCCESS.getBackStatus())
                         .createTime(LocalDateTime.now())
+                        .backType(BackTypeEnum.BACK_MEDIA_SDK.getBackType())
                         .build());
             }
             gameTencentMiniGameOrderSplitLogService.saveBatch(splitOrderLogList);
             return update(new LambdaUpdateWrapper<GameTencentMiniGameOrder>()
-                    .set(GameTencentMiniGameOrder::getBackStatus, BackStatusEnum.NO.getBackStatus())
+                    .set(GameTencentMiniGameOrder::getBackStatus, BackStatusEnum.SUCCESS.getBackStatus())
                     .set(GameTencentMiniGameOrder::getBackMoney, backInfo.second)
                     .set(GameTencentMiniGameOrder::getBackMsg, backMsg)
                     .eq(GameTencentMiniGameOrder::getId, orderLog.getId())
@@ -249,6 +259,7 @@ public class GameTencentMiniGameOrderServiceImpl extends ServiceImpl<GameTencent
                     .createTime(LocalDateTime.now())
                     .backStatus(BackStatusEnum.FAILED.getBackStatus())
                     .errMsg("找不到用户注册信息")
+                    .backType(BackTypeEnum.BACK_MEDIA_SDK.getBackType())
                     .build());
             return Tuple2.with(BackStatusEnum.FAILED, "找不到用户注册信息");
         }
@@ -266,6 +277,7 @@ public class GameTencentMiniGameOrderServiceImpl extends ServiceImpl<GameTencent
                 .createTime(LocalDateTime.now())
                 .backStatus(backStatus.getBackStatus())
                 .errMsg(null)
+                .backType(BackTypeEnum.BACK_MEDIA_SDK.getBackType())
                 .build());
         return Tuple2.with(backStatus, null);
     }
@@ -276,6 +288,7 @@ public class GameTencentMiniGameOrderServiceImpl extends ServiceImpl<GameTencent
                 .eq(GameTencentMiniGameUser::getWechatAppId, orderLog.getWechatAppId())
                 .eq(GameTencentMiniGameUser::getWechatOpenid, orderLog.getWechatOpenid())
                 .eq(GameTencentMiniGameUser::getAdAccountId, orderLog.getAdAccountId())
+                .eq(GameTencentMiniGameUser::getBackType, BackTypeEnum.BACK_MEDIA_SDK.getBackType())
                 .orderByDesc(GameTencentMiniGameUser::getCreateTime)
                 .last("limit 1"));
     }

+ 33 - 26
game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/service/impl/GameTencentMiniGameRoleRegisterServiceImpl.java

@@ -17,6 +17,7 @@ import com.zanxiang.game.back.serve.pojo.entity.GameTencentMiniGameRoleRegister;
 import com.zanxiang.game.back.serve.pojo.entity.GameTencentMiniGameUser;
 import com.zanxiang.game.back.serve.pojo.enums.ActionTypeEnum;
 import com.zanxiang.game.back.serve.pojo.enums.BackStatusEnum;
+import com.zanxiang.game.back.serve.pojo.enums.BackTypeEnum;
 import com.zanxiang.game.back.serve.pojo.vo.GameTencentMiniGameRoleRegisterVO;
 import com.zanxiang.game.back.serve.service.IGameBackPolicyService;
 import com.zanxiang.game.back.serve.service.IGameTencentMiniGameBackLogService;
@@ -47,14 +48,18 @@ import java.util.stream.Collectors;
 public class GameTencentMiniGameRoleRegisterServiceImpl extends ServiceImpl<GameTencentMiniGameRoleRegisterMapper, GameTencentMiniGameRoleRegister>
         implements IGameTencentMiniGameRoleRegisterService {
 
+    @DubboReference(providedBy = ServerInfo.SERVER_DUBBO_NAME)
+    private IAgentRpc agentRpc;
+
     @DubboReference(providedBy = AdvertisingTencentServer.SERVER_DUBBO_NAME)
     private IUserActionSetRpc userActionSetRpc;
+
     @Autowired
     private IGameTencentMiniGameBackLogService gameTencentMiniGameBackLogService;
-    @DubboReference(providedBy = ServerInfo.SERVER_DUBBO_NAME)
-    private IAgentRpc agentRpc;
+
     @Autowired
     private IGameTencentMiniGameUserService gameTencentMiniGameUserService;
+
     @Autowired
     private IGameBackPolicyService gameBackPolicyService;
 
@@ -131,7 +136,13 @@ public class GameTencentMiniGameRoleRegisterServiceImpl extends ServiceImpl<Game
             }
             return vo;
         }).collect(Collectors.toList());
+    }
 
+    private GameTencentMiniGameRoleRegisterVO toVOSimple(GameTencentMiniGameRoleRegister roleRegisterLog) {
+        if (roleRegisterLog == null) {
+            return null;
+        }
+        return BeanUtil.copy(roleRegisterLog, GameTencentMiniGameRoleRegisterVO.class);
     }
 
     private Tuple2<BackStatusEnum, String> doCallback(GameTencentMiniGameRoleRegister roleRegisterLog) {
@@ -141,6 +152,7 @@ public class GameTencentMiniGameRoleRegisterServiceImpl extends ServiceImpl<Game
                 .eq(GameTencentMiniGameUser::getWechatAppId, roleRegisterLog.getWechatAppId())
                 .eq(GameTencentMiniGameUser::getWechatOpenid, roleRegisterLog.getWechatOpenid())
                 .eq(GameTencentMiniGameUser::getAdAccountId, roleRegisterLog.getAdAccountId())
+                .eq(GameTencentMiniGameUser::getBackType, BackTypeEnum.BACK_API.getBackType())
                 .orderByDesc(GameTencentMiniGameUser::getCreateTime)
                 .last("limit 1"));
         //回传策略
@@ -155,6 +167,7 @@ public class GameTencentMiniGameRoleRegisterServiceImpl extends ServiceImpl<Game
                 .eq(GameTencentMiniGameBackLog::getAdAccountId, roleRegisterLog.getAdAccountId())
                 .eq(GameTencentMiniGameBackLog::getActionType, ActionTypeEnum.CREATE_ROLE.getActionType())
                 .eq(GameTencentMiniGameBackLog::getBackStatus, BackStatusEnum.SUCCESS.getBackStatus())
+                .eq(GameTencentMiniGameBackLog::getBackType, BackTypeEnum.BACK_API.getBackType())
         ) > 0) {
             //新手引导回传
             this.tutorialFinishBack(roleRegisterLog, gameBackPolicy);
@@ -168,13 +181,10 @@ public class GameTencentMiniGameRoleRegisterServiceImpl extends ServiceImpl<Game
             return Tuple2.with(BackStatusEnum.NO, "等级小于回传策略等级 " + gameBackPolicy.getRoleLevelMin() + "。不回传");
         }
 
-        //判断注册或者沉默唤起是否回传
-        if (user != null) {
-            if (Objects.equals(BackStatusEnum.NO.getBackStatus(), user.getBackStatus())
-                    || Objects.equals(BackStatusEnum.NO.getBackStatus(), user.getReActiveBackStatus())) {
-                //注册或者沉默唤起回传
-                gameTencentMiniGameUserService.userBack(user);
-            }
+        //判断注册是否回传
+        if (user != null && Objects.equals(BackStatusEnum.NO.getBackStatus(), user.getBackStatus())) {
+            //执行注册回传
+            gameTencentMiniGameUserService.userBack(user);
         }
 
         //创角回传
@@ -184,10 +194,12 @@ public class GameTencentMiniGameRoleRegisterServiceImpl extends ServiceImpl<Game
     @Override
     public void tutorialFinishBack(GameTencentMiniGameRoleRegister roleRegisterLog, GameBackPolicy gameBackPolicy) {
         //角色判断完成新手引导回传
-        if (super.count(new LambdaQueryWrapper<GameTencentMiniGameRoleRegister>()
-                .eq(GameTencentMiniGameRoleRegister::getGameId, roleRegisterLog.getGameId())
-                .eq(GameTencentMiniGameRoleRegister::getRoleId, roleRegisterLog.getRoleId())
-                .eq(GameTencentMiniGameRoleRegister::getTutorialFinishBackStatus, BackStatusEnum.SUCCESS.getBackStatus())
+        if (gameTencentMiniGameBackLogService.count(new LambdaQueryWrapper<GameTencentMiniGameBackLog>()
+                .eq(GameTencentMiniGameBackLog::getGameId, roleRegisterLog.getGameId())
+                .eq(GameTencentMiniGameBackLog::getWechatAppId, roleRegisterLog.getWechatAppId())
+                .eq(GameTencentMiniGameBackLog::getWechatOpenid, roleRegisterLog.getWechatOpenid())
+                .eq(GameTencentMiniGameBackLog::getActionType, ActionTypeEnum.TUTORIAL_FINISH.getActionType())
+                .eq(GameTencentMiniGameBackLog::getBackStatus, BackStatusEnum.SUCCESS.getBackStatus())
         ) > 0) {
             return;
         }
@@ -195,13 +207,11 @@ public class GameTencentMiniGameRoleRegisterServiceImpl extends ServiceImpl<Game
         if (gameBackPolicy == null || Strings.isBlank(gameBackPolicy.getTutorialFinishJson())) {
             return;
         }
-        TutorialFinish tutorialFinish = JsonUtil.toObj(gameBackPolicy.getTutorialFinishJson(), TutorialFinish.class);
-        //条件设置为空, 不回传
-        if (tutorialFinish == null || tutorialFinish.getRoleLevel() == null) {
-            return;
-        }
+        //获取新手回传等级限制
+        Long roleLevel = Optional.ofNullable(JsonUtil.toObj(gameBackPolicy.getTutorialFinishJson(), TutorialFinish.class))
+                .map(TutorialFinish::getRoleLevel).orElse(null);
         //不满足等级条件判断, 不回传
-        if (roleRegisterLog.getRoleLevel() < tutorialFinish.getRoleLevel()) {
+        if (roleLevel != null && roleRegisterLog.getRoleLevel() < roleLevel) {
             return;
         }
         //执行完成新手引导回传
@@ -212,19 +222,13 @@ public class GameTencentMiniGameRoleRegisterServiceImpl extends ServiceImpl<Game
                 .eq(GameTencentMiniGameRoleRegister::getId, roleRegisterLog.getId()));
     }
 
-    private GameTencentMiniGameRoleRegisterVO toVOSimple(GameTencentMiniGameRoleRegister roleRegisterLog) {
-        if (roleRegisterLog == null) {
-            return null;
-        }
-        return BeanUtil.copy(roleRegisterLog, GameTencentMiniGameRoleRegisterVO.class);
-    }
-
     private BackStatusEnum doCallbackMediaSdk(GameTencentMiniGameRoleRegister roleRegisterLog) {
         GameTencentMiniGameUser user = gameTencentMiniGameUserService.getOne(new LambdaQueryWrapper<GameTencentMiniGameUser>()
                 .eq(GameTencentMiniGameUser::getGameId, roleRegisterLog.getGameId())
                 .eq(GameTencentMiniGameUser::getWechatAppId, roleRegisterLog.getWechatAppId())
                 .eq(GameTencentMiniGameUser::getWechatOpenid, roleRegisterLog.getWechatOpenid())
                 .eq(GameTencentMiniGameUser::getAdAccountId, roleRegisterLog.getAdAccountId())
+                .eq(GameTencentMiniGameUser::getBackType, BackTypeEnum.BACK_MEDIA_SDK.getBackType())
                 .orderByDesc(GameTencentMiniGameUser::getCreateTime)
                 .last("limit 1"));
         if (user == null) {
@@ -239,6 +243,7 @@ public class GameTencentMiniGameRoleRegisterServiceImpl extends ServiceImpl<Game
                     .createTime(LocalDateTime.now())
                     .backStatus(BackStatusEnum.FAILED.getBackStatus())
                     .errMsg("找不到用户注册信息")
+                    .backType(BackTypeEnum.BACK_MEDIA_SDK.getBackType())
                     .build());
             return BackStatusEnum.FAILED;
         }
@@ -250,6 +255,7 @@ public class GameTencentMiniGameRoleRegisterServiceImpl extends ServiceImpl<Game
                 .eq(GameTencentMiniGameBackLog::getAdAccountId, roleRegisterLog.getAdAccountId())
                 .eq(GameTencentMiniGameBackLog::getActionType, ActionTypeEnum.CREATE_ROLE.getActionType())
                 .eq(GameTencentMiniGameBackLog::getBackStatus, BackStatusEnum.SUCCESS.getBackStatus())
+                .eq(GameTencentMiniGameBackLog::getBackType, BackTypeEnum.BACK_MEDIA_SDK.getBackType())
         ) > 0) {
             //创角已回传
             return BackStatusEnum.NO;
@@ -266,6 +272,7 @@ public class GameTencentMiniGameRoleRegisterServiceImpl extends ServiceImpl<Game
                 .createTime(LocalDateTime.now())
                 .backStatus(backStatus.getBackStatus())
                 .errMsg(null)
+                .backType(BackTypeEnum.BACK_MEDIA_SDK.getBackType())
                 .build());
         return backStatus;
     }

+ 4 - 13
game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/service/impl/GameTencentMiniGameUserServiceImpl.java

@@ -14,6 +14,7 @@ import com.zanxiang.game.back.serve.pojo.entity.GameTencentMiniGameBackLog;
 import com.zanxiang.game.back.serve.pojo.entity.GameTencentMiniGameUser;
 import com.zanxiang.game.back.serve.pojo.enums.ActionTypeEnum;
 import com.zanxiang.game.back.serve.pojo.enums.BackStatusEnum;
+import com.zanxiang.game.back.serve.pojo.enums.BackTypeEnum;
 import com.zanxiang.game.back.serve.pojo.vo.GameTencentMiniGameUserVO;
 import com.zanxiang.game.back.serve.service.IGameTencentMiniGameBackLogService;
 import com.zanxiang.game.back.serve.service.IGameTencentMiniGameUserService;
@@ -133,20 +134,8 @@ public class GameTencentMiniGameUserServiceImpl extends ServiceImpl<GameTencentM
                 .eq(GameTencentMiniGameBackLog::getAdAccountId, userLog.getAdAccountId())
                 .eq(GameTencentMiniGameBackLog::getActionType, ActionTypeEnum.REGISTER.getActionType())
                 .eq(GameTencentMiniGameBackLog::getBackStatus, BackStatusEnum.SUCCESS.getBackStatus())
+                .eq(GameTencentMiniGameBackLog::getBackType, BackTypeEnum.BACK_API.getBackType())
         ) > 0) {
-            //该广告账号渠道未回传, 执行沉默唤起回传
-            if (super.count(new LambdaQueryWrapper<GameTencentMiniGameUser>()
-                    .eq(GameTencentMiniGameUser::getGameId, userLog.getGameId())
-                    .eq(GameTencentMiniGameUser::getWechatAppId, userLog.getWechatAppId())
-                    .eq(GameTencentMiniGameUser::getWechatOpenid, userLog.getWechatOpenid())
-                    .eq(GameTencentMiniGameUser::getAdAccountId, userLog.getAdAccountId())
-                    .eq(GameTencentMiniGameUser::getAgentKey, userLog.getAgentKey())
-            ) <= 0) {
-                BackStatusEnum backStatus = gameTencentMiniGameBackLogService.reActiveBack(userLog).first;
-                super.update(new LambdaUpdateWrapper<GameTencentMiniGameUser>()
-                        .set(GameTencentMiniGameUser::getReActiveBackStatus, backStatus.getBackStatus())
-                        .eq(GameTencentMiniGameUser::getId, userLog.getId()));
-            }
             //返回注册已回传
             return Tuple2.with(BackStatusEnum.NO, null);
         }
@@ -168,6 +157,7 @@ public class GameTencentMiniGameUserServiceImpl extends ServiceImpl<GameTencentM
                 .eq(GameTencentMiniGameBackLog::getAdAccountId, userLog.getAdAccountId())
                 .eq(GameTencentMiniGameBackLog::getActionType, ActionTypeEnum.REGISTER.getActionType())
                 .eq(GameTencentMiniGameBackLog::getBackStatus, BackStatusEnum.SUCCESS.getBackStatus())
+                .eq(GameTencentMiniGameBackLog::getBackType, BackTypeEnum.BACK_MEDIA_SDK.getBackType())
         ) > 0) {
             return BackStatusEnum.NO;
         }
@@ -183,6 +173,7 @@ public class GameTencentMiniGameUserServiceImpl extends ServiceImpl<GameTencentM
                 .createTime(LocalDateTime.now())
                 .backStatus(backStatus.getBackStatus())
                 .errMsg(null)
+                .backType(BackTypeEnum.BACK_MEDIA_SDK.getBackType())
                 .build());
         return backStatus;
     }

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

@@ -163,4 +163,9 @@ public class Game implements Serializable {
      */
     private Boolean isMonitorLink;
 
+    /**
+     * API回传开关
+     */
+    private Boolean apiBackSwitch;
+
 }

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

@@ -23,7 +23,7 @@ public class SDKApplication {
 
     public static void main(String[] args) {
         SpringApplication.run(SDKApplication.class, args);
-        System.out.println("赞象SDK服务启动成功 <腾讯媒体sdk测试修改2002> ( ´・・)ノ(._.`) \n" +
+        System.out.println("赞象SDK服务启动成功 <腾讯媒体sdk回传兼容API同步回传> ( ´・・)ノ(._.`) \n" +
                 " ___________ _   __\n" +
                 "/  ___|  _  \\ | / /\n" +
                 "\\ `--.| | | | |/ / \n" +

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

@@ -3,8 +3,6 @@ package com.zanxiang.game.module.sdk.service;
 import com.zanxiang.game.module.mybatis.entity.GameUserRole;
 import com.zanxiang.game.module.mybatis.entity.User;
 import com.zanxiang.game.module.sdk.pojo.dto.PlatformOrderDTO;
-import com.zanxiang.game.module.sdk.pojo.param.CallBackControlParam;
-import com.zanxiang.game.module.sdk.pojo.param.UserData;
 
 import java.util.Map;
 
@@ -15,15 +13,6 @@ import java.util.Map;
  */
 public interface ICallBackService {
 
-    /**
-     * 回传判断
-     *
-     * @param param    : 参数
-     * @param userData : 玩家信息
-     * @return : 返回是否回传
-     */
-    Map<String, Object> callBackJudge(CallBackControlParam param, UserData userData);
-
     /**
      * 用户回传
      *

+ 30 - 160
game-module/game-module-sdk/src/main/java/com/zanxiang/game/module/sdk/service/impl/CallBackServiceImpl.java

@@ -4,18 +4,12 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.zanxiang.game.back.base.ServerInfo;
 import com.zanxiang.game.back.base.pojo.dto.*;
-import com.zanxiang.game.back.base.pojo.vo.OrderBackQueryRpcVO;
 import com.zanxiang.game.back.base.rpc.*;
 import com.zanxiang.game.module.base.pojo.enums.AccountTypeEnum;
 import com.zanxiang.game.module.base.pojo.enums.GameCategoryEnum;
 import com.zanxiang.game.module.mybatis.entity.*;
-import com.zanxiang.game.module.sdk.constant.RedisKeyConstant;
-import com.zanxiang.game.module.sdk.enums.CallBackTypeEnum;
 import com.zanxiang.game.module.sdk.pojo.dto.PlatformOrderDTO;
-import com.zanxiang.game.module.sdk.pojo.param.CallBackControlParam;
-import com.zanxiang.game.module.sdk.pojo.param.UserData;
 import com.zanxiang.game.module.sdk.service.*;
-import com.zanxiang.module.redis.service.IDistributedLockComponent;
 import com.zanxiang.module.util.JsonUtil;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.dubbo.config.annotation.DubboReference;
@@ -25,14 +19,13 @@ import org.springframework.stereotype.Service;
 
 import java.math.BigDecimal;
 import java.time.LocalDateTime;
-import java.util.*;
-import java.util.concurrent.TimeUnit;
-import java.util.stream.Collectors;
+import java.util.Map;
+import java.util.Objects;
 
 /**
  * @author : lingfeng
  * @time : 2022-11-10
- * @description : 回传
+ * @description : IAP游戏SDK回传方法
  */
 @Slf4j
 @Service
@@ -68,137 +61,9 @@ public class CallBackServiceImpl implements ICallBackService {
     @Autowired
     private IGameExtService gameExtService;
 
-    @Autowired
-    private IOrderService orderService;
-
     @Autowired
     private IGameBackLogService gameBackLogService;
 
-    @Autowired
-    private IDistributedLockComponent distributedLockComponent;
-
-    @Autowired
-    private IUserEventService userEventService;
-
-    @Override
-    public Map<String, Object> callBackJudge(CallBackControlParam param, UserData userData) {
-        log.error("事件回传判断请求, param : {},  userData : {}", JsonUtil.toString(param), JsonUtil.toString(userData));
-        Map<String, Object> resultMap = new HashMap<>(7);
-        resultMap.put("callBackTypeEnum", param.getCallBackTypeEnum().getValue());
-        resultMap.put("userId", userData.getUserId());
-        resultMap.put("gameId", userData.getGameId());
-        //事件类型枚举
-        CallBackTypeEnum callBackTypeEnum = param.getCallBackTypeEnum();
-        Game game = gameService.getById(userData.getGameId());
-        //判断游戏状态, 对接上包过程中, 全量回传
-        if (this.isUserEvent(game, userData.getUserId())) {
-            resultMap.put("callBack", Boolean.TRUE);
-            if (Objects.equals(callBackTypeEnum, CallBackTypeEnum.CALL_BACK_PAY_ORDER)) {
-                PlatformOrderDTO platformOrderDTO = orderService.getByOrderId(param.getOrderId());
-                if (platformOrderDTO != null) {
-                    resultMap.put("amount", Collections.singletonList(platformOrderDTO.getAmount().intValue()));
-                }
-            }
-            return resultMap;
-        }
-        //线程锁
-        String lockKey = RedisKeyConstant.CALL_BACK_JUDGE_LOCK + callBackTypeEnum.getValue() + "_" + userData.getUserId();
-        if (Objects.equals(callBackTypeEnum, CallBackTypeEnum.CALL_BACK_ACTIVATE)) {
-            lockKey = lockKey + "_" + param.getRoleId();
-        }
-        if (Objects.equals(callBackTypeEnum, CallBackTypeEnum.CALL_BACK_PAY_ORDER)) {
-            lockKey = lockKey + "_" + param.getOrderId();
-        }
-        //上锁
-        if (!distributedLockComponent.doLock(lockKey, 0L, 1L, TimeUnit.MINUTES)) {
-            log.error("重复请求触发线程锁, 直接返回false, lockKey : {}", lockKey);
-            resultMap.put("callBack", Boolean.FALSE);
-            return resultMap;
-        }
-        //查询玩家
-        User user = userService.getById(userData.getUserId());
-        //不存在渠道
-        Agent agent = agentService.getById(user.getAgentId());
-        if (agent == null) {
-            resultMap.put("callBack", Boolean.FALSE);
-            return resultMap;
-        }
-        //判断回传
-        try {
-            this.checkCallBack(user.getId(), agent, callBackTypeEnum, resultMap, param);
-        } catch (Exception e) {
-            log.error("事件回传判断, 出现异常, param : {},  userData : {}, e : {}", JsonUtil.toString(param),
-                    JsonUtil.toString(userData), e.getMessage(), e);
-            resultMap.put("callBack", Boolean.FALSE);
-        }
-        //返回结果
-        return resultMap;
-    }
-
-    private boolean isUserEvent(Game game, Long userId) {
-        if (Objects.equals(game.getStatus(), 2)) {
-            return true;
-        }
-        //查询玩家
-        User user = userService.getById(userId);
-        //判断是否测试过事件用户
-        return userEventService.count(new LambdaQueryWrapper<UserEvent>()
-                .eq(UserEvent::getGameId, game.getId())
-                .and(qw -> qw.eq(UserEvent::getUsername, user.getUsername())
-                        .or().eq(UserEvent::getMobile, user.getMobile())
-                )
-        ) > 0;
-    }
-
-    private void checkCallBack(Long userId, Agent agent, CallBackTypeEnum callBackTypeEnum, Map<String, Object> resultMap,
-                               CallBackControlParam param) {
-        switch (callBackTypeEnum) {
-            case CALL_BACK_REGISTER:
-                // 注册
-                TtAppUserBackQueryRpcDTO userTransform = this.transform(userId, agent);
-                resultMap.put("callBack", ttAppBackRpc.userBackQuery(userTransform).getData());
-                break;
-            case CALL_BACK_LOGIN_IN:
-                // 登录
-                resultMap.put("callBack", Boolean.FALSE);
-                break;
-            case CALL_BACK_ACTIVATE:
-                // 激活(创角)
-                if (Strings.isBlank(param.getRoleId())) {
-                    resultMap.put("callBack", Boolean.FALSE);
-                    resultMap.put("roleId", "unknown");
-                    break;
-                }
-                TtAppRoleRegisterBackQueryRpcDTO roleTransform = this.transform(userId, agent, param.getRoleId());
-                resultMap.put("roleId", param.getRoleId());
-                resultMap.put("callBack", ttAppBackRpc.roleRegisterBackQuery(roleTransform).getData());
-                break;
-            case CALL_BACK_PAY_ORDER:
-                // 支付
-                if (Strings.isBlank(param.getOrderId())) {
-                    resultMap.put("callBack", Boolean.FALSE);
-                    resultMap.put("orderId", "unknown");
-                    break;
-                }
-                TtAppOrderBackQueryRpcDTO orderTransform = this.transform(userId, param.getOrderId(), agent);
-                OrderBackQueryRpcVO orderBackQueryRpcVO = ttAppBackRpc.orderBackQuery(orderTransform).getData();
-                resultMap.put("orderId", param.getOrderId());
-                resultMap.put("callBack", orderBackQueryRpcVO.getDoBack());
-                resultMap.put("backMsg", orderBackQueryRpcVO.getBackMsg());
-                if (Objects.equals(orderBackQueryRpcVO.getDoBack(), Boolean.TRUE)) {
-                    //传过来的金额是分, 换算成元, 存在小数直接舍弃
-                    List<Long> backMoney = orderBackQueryRpcVO.getBackMoney()
-                            .stream().map(money -> money / 100)
-                            .collect(Collectors.toList());
-                    resultMap.put("amount", backMoney);
-                }
-                break;
-            default:
-                // 处理未知类型
-                resultMap.put("callBack", Boolean.FALSE);
-        }
-    }
-
     @Override
     public void userCallBack(User user, Map<String, String> urlParamMap) {
         //判断游戏是否开启广告回传, 未开启, 不回传
@@ -266,17 +131,18 @@ public class CallBackServiceImpl implements ICallBackService {
         //解析设置clickId
         Map<String, String> channelMap = agentService.channelTransform(user.getChannel());
         tencentUserDTO.setClickId(channelMap.get("gdt_vid"));
-        //没有配置媒体SDK, 执行API回传
-        String describe;
-        if (Strings.isBlank(game.getAdSdkConfig())) {
+        //判断API回传开关是否关掉, 未设置关掉, 则执行API回传
+        if (game.getApiBackSwitch() == null || game.getApiBackSwitch()) {
             tencentMiniGameBackRpc.backUser(tencentUserDTO);
-            describe = "腾讯小游戏用户回传提交";
-        } else {
-            //执行媒体SDK回传
+            gameBackLogService.addLog(user.getId(), null, "腾讯小游戏用户回传提交",
+                    JsonUtil.toString(tencentUserDTO));
+        }
+        //判断是否配置了媒体SDK, 配置了则执行媒体SDK回传
+        if (Strings.isNotBlank(game.getAdSdkConfig())) {
             tencentMiniGameBackRpc.callBackUser(tencentUserDTO);
-            describe = "腾讯小游戏用户媒体SDK回传提交";
+            gameBackLogService.addLog(user.getId(), null, "腾讯小游戏用户媒体SDK回传提交",
+                    JsonUtil.toString(tencentUserDTO));
         }
-        gameBackLogService.addLog(user.getId(), null, describe, JsonUtil.toString(tencentUserDTO));
     }
 
     @Override
@@ -339,16 +205,18 @@ public class CallBackServiceImpl implements ICallBackService {
         //查询游戏信息
         Game game = gameService.getById(agent.getGameId());
         TencentRoleRegisterRpcDTO tencentRoleRegisterRpcDTO = this.transform(user, agent, gameApplet, gameUserRole);
-        //没有配置媒体SDK, 执行API回传
-        String describe;
-        if (Strings.isBlank(game.getAdSdkConfig())) {
+        //判断API回传开关是否关掉, 未设置关掉, 则执行API回传
+        if (game.getApiBackSwitch() == null || game.getApiBackSwitch()) {
             tencentMiniGameBackRpc.backRoleRegister(tencentRoleRegisterRpcDTO);
-            describe = "腾讯小游戏创角回传提交";
-        } else {
+            gameBackLogService.addLog(user.getId(), gameUserRole.getRoleId(), "腾讯小游戏创角回传提交",
+                    JsonUtil.toString(tencentRoleRegisterRpcDTO));
+        }
+        //判断是否配置了媒体SDK, 配置了则执行媒体SDK回传
+        if (Strings.isNotBlank(game.getAdSdkConfig())) {
             tencentMiniGameBackRpc.callBackRole(tencentRoleRegisterRpcDTO);
-            describe = "腾讯小游戏创角媒体SDK回传提交";
+            gameBackLogService.addLog(user.getId(), gameUserRole.getRoleId(), "腾讯小游戏创角媒体SDK回传提交",
+                    JsonUtil.toString(tencentRoleRegisterRpcDTO));
         }
-        gameBackLogService.addLog(user.getId(), gameUserRole.getRoleId(), describe, JsonUtil.toString(tencentRoleRegisterRpcDTO));
     }
 
     @Override
@@ -415,16 +283,18 @@ public class CallBackServiceImpl implements ICallBackService {
         //解析设置clickId
         Map<String, String> channelMap = agentService.channelTransform(user.getChannel());
         tencentOrderDTO.setClickId(channelMap.get("gdt_vid"));
-        //没有配置媒体SDK, 执行API回传
-        String describe;
-        if (Strings.isBlank(game.getAdSdkConfig())) {
+        //判断API回传开关是否关掉, 未设置关掉, 则执行API回传
+        if (game.getApiBackSwitch() == null || game.getApiBackSwitch()) {
             tencentMiniGameBackRpc.backOrder(tencentOrderDTO);
-            describe = "腾讯小游戏订单回传提交";
-        } else {
+            gameBackLogService.addLog(user.getId(), platformOrderDTO.getOrderId(), "腾讯小游戏订单回传提交",
+                    JsonUtil.toString(tencentOrderDTO));
+        }
+        //判断是否配置了媒体SDK, 配置了则执行媒体SDK回传
+        if (Strings.isNotBlank(game.getAdSdkConfig())) {
             tencentMiniGameBackRpc.callBackOrder(tencentOrderDTO);
-            describe = "腾讯小游戏订单媒体SDK回传提交";
+            gameBackLogService.addLog(user.getId(), platformOrderDTO.getOrderId(), "腾讯小游戏订单媒体SDK回传提交",
+                    JsonUtil.toString(tencentOrderDTO));
         }
-        gameBackLogService.addLog(user.getId(), platformOrderDTO.getOrderId(), describe, JsonUtil.toString(tencentOrderDTO));
     }
 
     private TencentRoleRegisterRpcDTO transform(User user, Agent agent, GameApplet gameApplet, GameUserRole gameUserRole) {