Ver Fonte

Merge branch 'refs/heads/package' into dev

wcc há 8 meses atrás
pai
commit
325e081d2e
31 ficheiros alterados com 467 adições e 201 exclusões
  1. 2 0
      game-back/game-back-base/src/main/java/com/zanxiang/game/back/base/pojo/dto/TencentRoleRegisterAppApiRpcDTO.java
  2. 2 0
      game-back/game-back-base/src/main/java/com/zanxiang/game/back/base/pojo/dto/TencentRoleRegisterAppRpcDTO.java
  3. 2 0
      game-back/game-back-base/src/main/java/com/zanxiang/game/back/base/pojo/dto/TencentRoleRegisterRpcDTO.java
  4. 2 0
      game-back/game-back-base/src/main/java/com/zanxiang/game/back/base/pojo/dto/TtRoleRegisterAppRpcDTO.java
  5. 2 0
      game-back/game-back-base/src/main/java/com/zanxiang/game/back/base/pojo/dto/TtRoleRegisterRpcDTO.java
  6. 4 0
      game-back/game-back-base/src/main/java/com/zanxiang/game/back/base/pojo/vo/GameBackPolicyRpcVO.java
  7. 4 0
      game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/pojo/dto/GameBackPolicyDTO.java
  8. 4 0
      game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/pojo/entity/GameBackPolicy.java
  9. 7 0
      game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/pojo/entity/GameOceanengineAppRoleRegisterLog.java
  10. 7 0
      game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/pojo/entity/GameOceanengineRoleRegisterLog.java
  11. 2 0
      game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/pojo/entity/GameTencentAppApiRoleRegister.java
  12. 2 0
      game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/pojo/entity/GameTencentAppRoleRegister.java
  13. 7 0
      game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/pojo/entity/GameTencentMiniGameRoleRegister.java
  14. 2 0
      game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/pojo/entity/GameTencentRoleRegister.java
  15. 4 0
      game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/pojo/vo/GameBackPolicyVO.java
  16. 64 40
      game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/rpc/impl/TencentAppApiBackRpcImpl.java
  17. 61 37
      game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/rpc/impl/TencentAppBackRpcImpl.java
  18. 47 24
      game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/rpc/impl/TencentMiniGameBackRpcImpl.java
  19. 40 14
      game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/rpc/impl/TencentUserActionBackRpcImpl.java
  20. 68 43
      game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/rpc/impl/TtAppBackRpcImpl.java
  21. 42 19
      game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/rpc/impl/TtMiniGameBackRpcImpl.java
  22. 2 0
      game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/service/impl/GameBackPolicyServiceImpl.java
  23. 11 0
      game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/service/impl/GameOceanengineAppRoleRegisterLogServiceImpl.java
  24. 13 0
      game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/service/impl/GameOceanengineRoleRegisterLogServiceImpl.java
  25. 17 7
      game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/service/impl/GameTencentAppApiRoleRegisterServiceImpl.java
  26. 13 0
      game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/service/impl/GameTencentMiniGameRoleRegisterServiceImpl.java
  27. 14 0
      game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/service/impl/GameTencentRoleRegisterServiceImpl.java
  28. 1 1
      game-module/game-module-sdk/src/main/java/com/zanxiang/game/module/sdk/SDKApplication.java
  29. 4 0
      game-module/game-module-sdk/src/main/java/com/zanxiang/game/module/sdk/service/impl/CallBackServiceImpl.java
  30. 6 0
      game-module/game-module-sdk/src/main/java/com/zanxiang/game/module/sdk/service/impl/CpPushDataServiceImpl.java
  31. 11 16
      game-module/game-module-sdk/src/main/java/com/zanxiang/game/module/sdk/service/impl/GameUserRoleServiceImpl.java

+ 2 - 0
game-back/game-back-base/src/main/java/com/zanxiang/game/back/base/pojo/dto/TencentRoleRegisterAppApiRpcDTO.java

@@ -47,6 +47,8 @@ public class TencentRoleRegisterAppApiRpcDTO implements Serializable {
 
     private String roleName;
 
+    private Long roleLevel;
+
     /**
      * 用户设备mac地址
      */

+ 2 - 0
game-back/game-back-base/src/main/java/com/zanxiang/game/back/base/pojo/dto/TencentRoleRegisterAppRpcDTO.java

@@ -47,6 +47,8 @@ public class TencentRoleRegisterAppRpcDTO implements Serializable {
 
     private String roleName;
 
+    private Long roleLevel;
+
     /**
      * 数据源ID
      */

+ 2 - 0
game-back/game-back-base/src/main/java/com/zanxiang/game/back/base/pojo/dto/TencentRoleRegisterRpcDTO.java

@@ -57,4 +57,6 @@ public class TencentRoleRegisterRpcDTO implements Serializable {
     private String roleId;
 
     private String roleName;
+
+    private Long roleLevel;
 }

+ 2 - 0
game-back/game-back-base/src/main/java/com/zanxiang/game/back/base/pojo/dto/TtRoleRegisterAppRpcDTO.java

@@ -41,6 +41,8 @@ public class TtRoleRegisterAppRpcDTO implements Serializable {
     private String roleId;
 
     private String roleName;
+
+    private Long roleLevel;
     /**
      * 激活/注册时间
      */

+ 2 - 0
game-back/game-back-base/src/main/java/com/zanxiang/game/back/base/pojo/dto/TtRoleRegisterRpcDTO.java

@@ -49,6 +49,8 @@ public class TtRoleRegisterRpcDTO implements Serializable {
     private String roleId;
 
     private String roleName;
+
+    private Long roleLevel;
     /**
      * 激活/注册时间
      */

+ 4 - 0
game-back/game-back-base/src/main/java/com/zanxiang/game/back/base/pojo/vo/GameBackPolicyRpcVO.java

@@ -97,6 +97,10 @@ public class GameBackPolicyRpcVO implements Serializable {
      * 降档级别
      */
     private Integer levelDown;
+    /**
+     * 最小回传等级
+     */
+    private Long roleLevelMin;
 
     private LocalDateTime createTime;
 

+ 4 - 0
game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/pojo/dto/GameBackPolicyDTO.java

@@ -261,4 +261,8 @@ public class GameBackPolicyDTO implements Serializable {
      * 激活回传开关
      */
     private Boolean activeBackSwitch;
+    /**
+     * 最小回传等级
+     */
+    private Long roleLevelMin;
 }

+ 4 - 0
game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/pojo/entity/GameBackPolicy.java

@@ -228,4 +228,8 @@ public class GameBackPolicy implements Serializable {
      * 激活回传开关
      */
     private Boolean activeBackSwitch;
+    /**
+     * 最小回传等级
+     */
+    private Long roleLevelMin;
 }

+ 7 - 0
game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/pojo/entity/GameOceanengineAppRoleRegisterLog.java

@@ -30,6 +30,11 @@ public class GameOceanengineAppRoleRegisterLog implements Serializable {
     @TableId(value = "id", type = IdType.AUTO)
     private Long id;
 
+    /**
+     * 回传策略id
+     */
+    private Long backPolicyId;
+
     private String userId;
 
     /**
@@ -87,6 +92,8 @@ public class GameOceanengineAppRoleRegisterLog implements Serializable {
      */
     private String roleName;
 
+    private Long roleLevel;
+
     /**
      * 创角时间
      */

+ 7 - 0
game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/pojo/entity/GameOceanengineRoleRegisterLog.java

@@ -24,6 +24,11 @@ public class GameOceanengineRoleRegisterLog implements Serializable {
 
     @TableId(value = "id", type = IdType.AUTO)
     private Long id;
+
+    /**
+     * 回传策略id
+     */
+    private Long backPolicyId;
     /**
      * 小游戏 id
      */
@@ -64,6 +69,8 @@ public class GameOceanengineRoleRegisterLog implements Serializable {
      * 角色名称
      */
     private String roleName;
+
+    private Long roleLevel;
     /**
      * 支付时间
      */

+ 2 - 0
game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/pojo/entity/GameTencentAppApiRoleRegister.java

@@ -104,6 +104,8 @@ public class GameTencentAppApiRoleRegister implements Serializable {
 
     private String roleName;
 
+    private Long roleLevel;
+
     /**
      * 回传信息
      */

+ 2 - 0
game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/pojo/entity/GameTencentAppRoleRegister.java

@@ -108,6 +108,8 @@ public class GameTencentAppRoleRegister implements Serializable {
 
     private String roleName;
 
+    private Long roleLevel;
+
     /**
      * 回传信息
      */

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

@@ -29,6 +29,11 @@ public class GameTencentMiniGameRoleRegister implements Serializable {
 
     @TableId(value = "id", type = IdType.AUTO)
     private Long id;
+
+    /**
+     * 回传策略id
+     */
+    private Long backPolicyId;
     /**
      * 渠道号
      */
@@ -66,6 +71,8 @@ public class GameTencentMiniGameRoleRegister implements Serializable {
 
     private String roleName;
 
+    private Long roleLevel;
+
     /**
      * 注册时间
      */

+ 2 - 0
game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/pojo/entity/GameTencentRoleRegister.java

@@ -85,5 +85,7 @@ public class GameTencentRoleRegister implements Serializable {
 
     private String roleName;
 
+    private Long roleLevel;
+
     private String backMsg;
 }

+ 4 - 0
game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/pojo/vo/GameBackPolicyVO.java

@@ -251,6 +251,10 @@ public class GameBackPolicyVO implements Serializable {
      * 激活回传开关
      */
     private Boolean activeBackSwitch;
+    /**
+     * 最小回传等级
+     */
+    private Long roleLevelMin;
 
     @Data
     @NoArgsConstructor

+ 64 - 40
game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/rpc/impl/TencentAppApiBackRpcImpl.java

@@ -1,6 +1,7 @@
 package com.zanxiang.game.back.serve.rpc.impl;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.github.sd4324530.jtuple.Tuple2;
 import com.zanxiang.game.back.base.pojo.dto.*;
 import com.zanxiang.game.back.base.pojo.enums.OrderStatusEnum;
@@ -39,22 +40,22 @@ public class TencentAppApiBackRpcImpl implements ITencentAppApiBackRpc {
         if (StringUtils.isBlank(dto.getMac())) {
             dto.setMac("");
         }
-        if(StringUtils.isBlank(dto.getImei())) {
+        if (StringUtils.isBlank(dto.getImei())) {
             dto.setImei("");
         }
-        if(StringUtils.isBlank(dto.getOaid())) {
+        if (StringUtils.isBlank(dto.getOaid())) {
             dto.setOaid("");
         }
-        if(StringUtils.isBlank(dto.getAndroidId())) {
+        if (StringUtils.isBlank(dto.getAndroidId())) {
             dto.setAndroidId("");
         }
-        if(StringUtils.isBlank(dto.getIdfa())) {
+        if (StringUtils.isBlank(dto.getIdfa())) {
             dto.setIdfa("");
         }
-        if(StringUtils.isBlank(dto.getCaid())) {
+        if (StringUtils.isBlank(dto.getCaid())) {
             dto.setCaid("");
         }
-        if(StringUtils.isBlank(dto.getImei())
+        if (StringUtils.isBlank(dto.getImei())
                 && StringUtils.isBlank(dto.getOaid())
                 && StringUtils.isBlank(dto.getAndroidId())
                 && StringUtils.isBlank(dto.getIdfa())
@@ -79,9 +80,9 @@ public class TencentAppApiBackRpcImpl implements ITencentAppApiBackRpc {
                 .createTime(LocalDateTime.now())
                 .build();
 
-        if(dto.getCallbackId() != null) {
+        if (dto.getCallbackId() != null) {
             userLog.setCallbackId(dto.getCallbackId());
-        } else  {
+        } else {
             GameTencentAppCallback callback = gameTencentAppCallbackService.getUserCallback(userLog.getGameId(), userLog.getImei(), userLog.getOaid(), userLog.getAndroidId(), userLog.getIdfa(), userLog.getCaid(), userLog.getIp(), userLog.getRegisterTime());
             userLog.setCallbackId(callback == null ? -1L : callback.getId());
         }
@@ -97,47 +98,70 @@ public class TencentAppApiBackRpcImpl implements ITencentAppApiBackRpc {
         if (StringUtils.isBlank(dto.getMac())) {
             dto.setMac("");
         }
-        if(StringUtils.isBlank(dto.getImei())) {
+        if (StringUtils.isBlank(dto.getImei())) {
             dto.setImei("");
         }
-        if(StringUtils.isBlank(dto.getOaid())) {
+        if (StringUtils.isBlank(dto.getOaid())) {
             dto.setOaid("");
         }
-        if(StringUtils.isBlank(dto.getAndroidId())) {
+        if (StringUtils.isBlank(dto.getAndroidId())) {
             dto.setAndroidId("");
         }
-        if(StringUtils.isBlank(dto.getIdfa())) {
+        if (StringUtils.isBlank(dto.getIdfa())) {
             dto.setIdfa("");
         }
-        if(StringUtils.isBlank(dto.getCaid())) {
+        if (StringUtils.isBlank(dto.getCaid())) {
             dto.setCaid("");
         }
-        if(StringUtils.isBlank(dto.getImei())
+        if (StringUtils.isBlank(dto.getImei())
                 && StringUtils.isBlank(dto.getOaid())
                 && StringUtils.isBlank(dto.getAndroidId())
                 && StringUtils.isBlank(dto.getIdfa())
                 && StringUtils.isBlank(dto.getCaid())) {
             return ResultVO.fail("找不到用户唯一标识");
         }
-        GameTencentAppApiRoleRegister roleRegister = GameTencentAppApiRoleRegister.builder()
-                .userId(dto.getUserId())
-                .backPolicyId(dto.getBackPolicyId())
-                .channel(dto.getChannel())
-                .gameId(dto.getGameId())
-                .adAccountId(dto.getAdAccountId())
-                .registerTime(dto.getRegisterTime())
-                .mac(dto.getMac())
-                .imei(dto.getImei())
-                .oaid(dto.getOaid())
-                .androidId(dto.getAndroidId())
-                .idfa(dto.getIdfa())
-                .caid(dto.getCaid())
-                .isBack(BackStatusEnum.NO.getBackStatus())
-                .createTime(LocalDateTime.now())
-                .roleId(dto.getRoleId())
-                .roleName(dto.getRoleName())
-                .build();
-        gameTencentAppApiRoleRegisterService.save(roleRegister);
+        GameTencentAppApiRoleRegister roleRegister;
+        GameTencentAppApiRoleRegister oldRole = gameTencentAppApiRoleRegisterService.getOne(new LambdaQueryWrapper<GameTencentAppApiRoleRegister>()
+                .eq(GameTencentAppApiRoleRegister::getGameId, dto.getGameId())
+                .eq(GameTencentAppApiRoleRegister::getUserId, dto.getUserId())
+                .eq(GameTencentAppApiRoleRegister::getRoleId, dto.getRoleId())
+                .last("limit 1")
+        );
+        if (oldRole != null) {
+            roleRegister = oldRole;
+            if (dto.getRoleLevel() != null && (oldRole.getRoleLevel() == null || oldRole.getRoleLevel() < dto.getRoleLevel())) {
+                gameTencentAppApiRoleRegisterService.update(new LambdaUpdateWrapper<GameTencentAppApiRoleRegister>()
+                        .set(GameTencentAppApiRoleRegister::getRoleLevel, dto.getRoleLevel())
+                        .set(GameTencentAppApiRoleRegister::getRoleName, dto.getRoleName())
+                        .eq(GameTencentAppApiRoleRegister::getId, oldRole.getId())
+                );
+            }
+            if (Objects.equals(oldRole.getIsBack(), BackStatusEnum.SUCCESS.getBackStatus())) {
+                // 创角已回传。不重复传了
+                return ResultVO.ok(true);
+            }
+        } else {
+            roleRegister = GameTencentAppApiRoleRegister.builder()
+                    .userId(dto.getUserId())
+                    .backPolicyId(dto.getBackPolicyId())
+                    .channel(dto.getChannel())
+                    .gameId(dto.getGameId())
+                    .adAccountId(dto.getAdAccountId())
+                    .registerTime(dto.getRegisterTime())
+                    .mac(dto.getMac())
+                    .imei(dto.getImei())
+                    .oaid(dto.getOaid())
+                    .androidId(dto.getAndroidId())
+                    .idfa(dto.getIdfa())
+                    .caid(dto.getCaid())
+                    .isBack(BackStatusEnum.NO.getBackStatus())
+                    .createTime(LocalDateTime.now())
+                    .roleId(dto.getRoleId())
+                    .roleName(dto.getRoleName())
+                    .roleLevel(dto.getRoleLevel())
+                    .build();
+            gameTencentAppApiRoleRegisterService.save(roleRegister);
+        }
         return ResultVO.ok(gameTencentAppApiRoleRegisterService.roleRegisterBack(roleRegister));
     }
 
@@ -152,22 +176,22 @@ public class TencentAppApiBackRpcImpl implements ITencentAppApiBackRpc {
         if (StringUtils.isBlank(dto.getMac())) {
             dto.setMac("");
         }
-        if(StringUtils.isBlank(dto.getImei())) {
+        if (StringUtils.isBlank(dto.getImei())) {
             dto.setImei("");
         }
-        if(StringUtils.isBlank(dto.getOaid())) {
+        if (StringUtils.isBlank(dto.getOaid())) {
             dto.setOaid("");
         }
-        if(StringUtils.isBlank(dto.getAndroidId())) {
+        if (StringUtils.isBlank(dto.getAndroidId())) {
             dto.setAndroidId("");
         }
-        if(StringUtils.isBlank(dto.getIdfa())) {
+        if (StringUtils.isBlank(dto.getIdfa())) {
             dto.setIdfa("");
         }
-        if(StringUtils.isBlank(dto.getCaid())) {
+        if (StringUtils.isBlank(dto.getCaid())) {
             dto.setCaid("");
         }
-        if(StringUtils.isBlank(dto.getImei())
+        if (StringUtils.isBlank(dto.getImei())
                 && StringUtils.isBlank(dto.getOaid())
                 && StringUtils.isBlank(dto.getAndroidId())
                 && StringUtils.isBlank(dto.getIdfa())
@@ -215,7 +239,7 @@ public class TencentAppApiBackRpcImpl implements ITencentAppApiBackRpc {
     @Override
     public ResultVO<Tuple2<String, Long>> queryUserAgentFromCallback(TencentAppApiUserAgentQueryRpcDTO dto) {
         GameTencentAppCallback callback = gameTencentAppCallbackService.getUserCallback(dto.getGameId(), dto.getImei(), dto.getOaid(), dto.getAndroidId(), dto.getIdfa(), dto.getCaid(), dto.getRegIp(), dto.getRegisterTime());
-        if(callback == null) {
+        if (callback == null) {
             return ResultVO.ok(null);
         }
         return ResultVO.ok(Tuple2.with(callback.getAgentKey(), callback.getId()));

+ 61 - 37
game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/rpc/impl/TencentAppBackRpcImpl.java

@@ -1,6 +1,7 @@
 package com.zanxiang.game.back.serve.rpc.impl;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.zanxiang.game.back.base.pojo.dto.*;
 import com.zanxiang.game.back.base.pojo.enums.OrderStatusEnum;
 import com.zanxiang.game.back.base.rpc.ITencentAppBackRpc;
@@ -38,22 +39,22 @@ public class TencentAppBackRpcImpl implements ITencentAppBackRpc {
         if (StringUtils.isBlank(dto.getMac())) {
             dto.setMac("");
         }
-        if(StringUtils.isBlank(dto.getImei())) {
+        if (StringUtils.isBlank(dto.getImei())) {
             dto.setImei("");
         }
-        if(StringUtils.isBlank(dto.getOaid())) {
+        if (StringUtils.isBlank(dto.getOaid())) {
             dto.setOaid("");
         }
-        if(StringUtils.isBlank(dto.getAndroidId())) {
+        if (StringUtils.isBlank(dto.getAndroidId())) {
             dto.setAndroidId("");
         }
-        if(StringUtils.isBlank(dto.getIdfa())) {
+        if (StringUtils.isBlank(dto.getIdfa())) {
             dto.setIdfa("");
         }
-        if(StringUtils.isBlank(dto.getCaid())) {
+        if (StringUtils.isBlank(dto.getCaid())) {
             dto.setCaid("");
         }
-        if(StringUtils.isBlank(dto.getImei())
+        if (StringUtils.isBlank(dto.getImei())
                 && StringUtils.isBlank(dto.getOaid())
                 && StringUtils.isBlank(dto.getAndroidId())
                 && StringUtils.isBlank(dto.getIdfa())
@@ -89,47 +90,70 @@ public class TencentAppBackRpcImpl implements ITencentAppBackRpc {
         if (StringUtils.isBlank(dto.getMac())) {
             dto.setMac("");
         }
-        if(StringUtils.isBlank(dto.getImei())) {
+        if (StringUtils.isBlank(dto.getImei())) {
             dto.setImei("");
         }
-        if(StringUtils.isBlank(dto.getOaid())) {
+        if (StringUtils.isBlank(dto.getOaid())) {
             dto.setOaid("");
         }
-        if(StringUtils.isBlank(dto.getAndroidId())) {
+        if (StringUtils.isBlank(dto.getAndroidId())) {
             dto.setAndroidId("");
         }
-        if(StringUtils.isBlank(dto.getIdfa())) {
+        if (StringUtils.isBlank(dto.getIdfa())) {
             dto.setIdfa("");
         }
-        if(StringUtils.isBlank(dto.getCaid())) {
+        if (StringUtils.isBlank(dto.getCaid())) {
             dto.setCaid("");
         }
-        if(StringUtils.isBlank(dto.getImei())
+        if (StringUtils.isBlank(dto.getImei())
                 && StringUtils.isBlank(dto.getOaid())
                 && StringUtils.isBlank(dto.getAndroidId())
                 && StringUtils.isBlank(dto.getIdfa())
                 && StringUtils.isBlank(dto.getCaid())) {
             return ResultVO.fail("找不到用户唯一标识");
         }
-        GameTencentAppRoleRegister roleRegister = GameTencentAppRoleRegister.builder()
-                .backPolicyId(dto.getBackPolicyId())
-                .channel(dto.getChannel())
-                .userId(dto.getUserId())
-                .gameId(dto.getGameId())
-                .adAccountId(dto.getAdAccountId())
-                .registerTime(dto.getRegisterTime())
-                .mac(dto.getMac())
-                .imei(dto.getImei())
-                .oaid(dto.getOaid())
-                .androidId(dto.getAndroidId())
-                .idfa(dto.getIdfa())
-                .caid(dto.getCaid())
-                .isBack(BackStatusEnum.NO.getBackStatus())
-                .userActionSetId(dto.getUserActionSetId())
-                .createTime(LocalDateTime.now())
-                .roleId(dto.getRoleId())
-                .roleName(dto.getRoleName())
-                .build();
+        GameTencentAppRoleRegister roleRegister;
+        GameTencentAppRoleRegister oldRole = gameTencentAppRoleRegisterService.getOne(new LambdaQueryWrapper<GameTencentAppRoleRegister>()
+                .eq(GameTencentAppRoleRegister::getGameId, dto.getGameId())
+                .eq(GameTencentAppRoleRegister::getUserId, dto.getUserId())
+                .eq(GameTencentAppRoleRegister::getRoleId, dto.getRoleId())
+                .last("limit 1")
+        );
+        if (oldRole != null) {
+            roleRegister = oldRole;
+            if (dto.getRoleLevel() != null && (oldRole.getRoleLevel() == null || oldRole.getRoleLevel() < dto.getRoleLevel())) {
+                gameTencentAppRoleRegisterService.update(new LambdaUpdateWrapper<GameTencentAppRoleRegister>()
+                        .set(GameTencentAppRoleRegister::getRoleLevel, dto.getRoleLevel())
+                        .set(GameTencentAppRoleRegister::getRoleName, dto.getRoleName())
+                        .eq(GameTencentAppRoleRegister::getId, oldRole.getId())
+                );
+            }
+            if (Objects.equals(oldRole.getIsBack(), BackStatusEnum.SUCCESS.getBackStatus())) {
+                // 创角已回传。不重复传了
+                return ResultVO.ok(true);
+            }
+        } else {
+            roleRegister = GameTencentAppRoleRegister.builder()
+                    .backPolicyId(dto.getBackPolicyId())
+                    .channel(dto.getChannel())
+                    .userId(dto.getUserId())
+                    .gameId(dto.getGameId())
+                    .adAccountId(dto.getAdAccountId())
+                    .registerTime(dto.getRegisterTime())
+                    .mac(dto.getMac())
+                    .imei(dto.getImei())
+                    .oaid(dto.getOaid())
+                    .androidId(dto.getAndroidId())
+                    .idfa(dto.getIdfa())
+                    .caid(dto.getCaid())
+                    .isBack(BackStatusEnum.NO.getBackStatus())
+                    .userActionSetId(dto.getUserActionSetId())
+                    .createTime(LocalDateTime.now())
+                    .roleId(dto.getRoleId())
+                    .roleName(dto.getRoleName())
+                    .roleLevel(dto.getRoleLevel())
+                    .build();
+        }
         gameTencentAppRoleRegisterService.save(roleRegister);
         // return ResultVO.ok(gameTencentAppRoleRegisterService.roleRegisterBack(roleRegister));
         return ResultVO.ok(true);
@@ -146,22 +170,22 @@ public class TencentAppBackRpcImpl implements ITencentAppBackRpc {
         if (StringUtils.isBlank(dto.getMac())) {
             dto.setMac("");
         }
-        if(StringUtils.isBlank(dto.getImei())) {
+        if (StringUtils.isBlank(dto.getImei())) {
             dto.setImei("");
         }
-        if(StringUtils.isBlank(dto.getOaid())) {
+        if (StringUtils.isBlank(dto.getOaid())) {
             dto.setOaid("");
         }
-        if(StringUtils.isBlank(dto.getAndroidId())) {
+        if (StringUtils.isBlank(dto.getAndroidId())) {
             dto.setAndroidId("");
         }
-        if(StringUtils.isBlank(dto.getIdfa())) {
+        if (StringUtils.isBlank(dto.getIdfa())) {
             dto.setIdfa("");
         }
-        if(StringUtils.isBlank(dto.getCaid())) {
+        if (StringUtils.isBlank(dto.getCaid())) {
             dto.setCaid("");
         }
-        if(StringUtils.isBlank(dto.getImei())
+        if (StringUtils.isBlank(dto.getImei())
                 && StringUtils.isBlank(dto.getOaid())
                 && StringUtils.isBlank(dto.getAndroidId())
                 && StringUtils.isBlank(dto.getIdfa())

+ 47 - 24
game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/rpc/impl/TencentMiniGameBackRpcImpl.java

@@ -1,15 +1,13 @@
 package com.zanxiang.game.back.serve.rpc.impl;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.zanxiang.game.back.base.pojo.dto.TencentOrderDTO;
 import com.zanxiang.game.back.base.pojo.dto.TencentRoleRegisterRpcDTO;
 import com.zanxiang.game.back.base.pojo.dto.TencentUserDTO;
 import com.zanxiang.game.back.base.pojo.enums.OrderStatusEnum;
 import com.zanxiang.game.back.base.rpc.ITencentMiniGameBackRpc;
-import com.zanxiang.game.back.serve.pojo.entity.GameBackPolicy;
-import com.zanxiang.game.back.serve.pojo.entity.GameTencentMiniGameOrder;
-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.entity.*;
 import com.zanxiang.game.back.serve.pojo.enums.BackStatusEnum;
 import com.zanxiang.game.back.serve.service.IGameBackPolicyService;
 import com.zanxiang.game.back.serve.service.IGameTencentMiniGameOrderService;
@@ -125,28 +123,53 @@ public class TencentMiniGameBackRpcImpl implements ITencentMiniGameBackRpc {
     @Override
     public ResultVO<Boolean> backRoleRegister(TencentRoleRegisterRpcDTO dto) {
         log.error("腾讯小游戏创角回传收到:{}", JsonUtil.toString(dto));
-        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)
+        GameTencentMiniGameRoleRegister roleRegisterLog;
+        GameTencentMiniGameRoleRegister oldRole = gameTencentMiniGameRoleRegisterService.getOne(new LambdaQueryWrapper<GameTencentMiniGameRoleRegister>()
+                .eq(GameTencentMiniGameRoleRegister::getGameId, dto.getGameId())
+                .eq(GameTencentMiniGameRoleRegister::getWechatAppId, dto.getWechatAppId())
+                .eq(GameTencentMiniGameRoleRegister::getWechatOpenid, dto.getWechatOpenid())
+                .eq(GameTencentMiniGameRoleRegister::getRoleId, dto.getRoleId())
                 .last("limit 1")
         );
-        GameTencentMiniGameRoleRegister roleRegisterLog = GameTencentMiniGameRoleRegister.builder()
-                .agentKey(dto.getChannel())
-                .gameId(dto.getGameId())
-                .adAccountId(dto.getAdAccountId())
-                .wechatAppId(dto.getWechatAppId())
-                .wechatOpenid(dto.getWechatOpenid())
-                .clickId(userLog == null ? null : userLog.getClickId())
-                .registerTime(dto.getRegisterTime())
-                .backStatus(BackStatusEnum.NO.getBackStatus())
-                .createTime(LocalDateTime.now())
-                .roleId(dto.getRoleId())
-                .roleName(dto.getRoleName())
-                .build();
+        if (oldRole != null) {
+            roleRegisterLog = oldRole;
+            if (dto.getRoleLevel() != null && (oldRole.getRoleLevel() == null || oldRole.getRoleLevel() < dto.getRoleLevel())) {
+                gameTencentMiniGameRoleRegisterService.update(new LambdaUpdateWrapper<GameTencentMiniGameRoleRegister>()
+                        .set(GameTencentMiniGameRoleRegister::getRoleLevel, dto.getRoleLevel())
+                        .set(GameTencentMiniGameRoleRegister::getRoleName, dto.getRoleName())
+                        .eq(GameTencentMiniGameRoleRegister::getId, oldRole.getId())
+                );
+            }
+            if (Objects.equals(oldRole.getBackStatus(), BackStatusEnum.SUCCESS.getBackStatus())) {
+                // 创角已回传。不重复传了
+                return ResultVO.ok(true);
+            }
+        } else {
+            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")
+            );
+            roleRegisterLog = GameTencentMiniGameRoleRegister.builder()
+                    .backPolicyId(dto.getBackPolicyId())
+                    .agentKey(dto.getChannel())
+                    .gameId(dto.getGameId())
+                    .adAccountId(dto.getAdAccountId())
+                    .wechatAppId(dto.getWechatAppId())
+                    .wechatOpenid(dto.getWechatOpenid())
+                    .clickId(userLog == null ? null : userLog.getClickId())
+                    .registerTime(dto.getRegisterTime())
+                    .backStatus(BackStatusEnum.NO.getBackStatus())
+                    .createTime(LocalDateTime.now())
+                    .roleId(dto.getRoleId())
+                    .roleName(dto.getRoleName())
+                    .roleLevel(dto.getRoleLevel())
+                    .build();
+        }
         gameTencentMiniGameRoleRegisterService.save(roleRegisterLog);
         return ResultVO.ok(gameTencentMiniGameRoleRegisterService.roleRegisterBack(roleRegisterLog));
     }

+ 40 - 14
game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/rpc/impl/TencentUserActionBackRpcImpl.java

@@ -2,11 +2,13 @@ package com.zanxiang.game.back.serve.rpc.impl;
 
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.zanxiang.game.back.base.pojo.dto.TencentOrderDTO;
 import com.zanxiang.game.back.base.pojo.dto.TencentRoleRegisterRpcDTO;
 import com.zanxiang.game.back.base.pojo.dto.TencentUserDTO;
 import com.zanxiang.game.back.base.pojo.enums.OrderStatusEnum;
 import com.zanxiang.game.back.base.rpc.ITencentUserActionBackRpc;
+import com.zanxiang.game.back.serve.pojo.entity.GameTencentAppApiRoleRegister;
 import com.zanxiang.game.back.serve.pojo.entity.GameTencentOrder;
 import com.zanxiang.game.back.serve.pojo.entity.GameTencentRoleRegister;
 import com.zanxiang.game.back.serve.pojo.entity.GameTencentUser;
@@ -101,20 +103,44 @@ public class TencentUserActionBackRpcImpl implements ITencentUserActionBackRpc {
     @Override
     public ResultVO<Boolean> backRoleRegister(TencentRoleRegisterRpcDTO dto) {
         log.error("腾讯H5创角回传收到:{}", JsonUtil.toString(dto));
-        GameTencentRoleRegister roleRegister = GameTencentRoleRegister.builder()
-                .backPolicyId(dto.getBackPolicyId())
-                .channel(dto.getChannel())
-                .gameId(dto.getGameId())
-                .adAccountId(dto.getAdAccountId())
-                .registerTime(dto.getRegisterTime())
-                .wechatAppId(dto.getWechatAppId())
-                .wechatOpenid(dto.getWechatOpenid())
-                .isBack(BackStatusEnum.NO.getBackStatus())
-                .userActionSetId(dto.getUserActionSetId())
-                .createTime(LocalDateTime.now())
-                .roleId(dto.getRoleId())
-                .roleName(dto.getRoleName())
-                .build();
+        GameTencentRoleRegister roleRegister;
+        GameTencentRoleRegister oldRole = gameTencentRoleRegisterService.getOne(new LambdaQueryWrapper<GameTencentRoleRegister>()
+                .eq(GameTencentRoleRegister::getGameId, dto.getGameId())
+                .eq(GameTencentRoleRegister::getWechatAppId, dto.getWechatAppId())
+                .eq(GameTencentRoleRegister::getWechatOpenid, dto.getWechatOpenid())
+                .eq(GameTencentRoleRegister::getRoleId, dto.getRoleId())
+                .last("limit 1")
+        );
+        if (oldRole != null) {
+            roleRegister = oldRole;
+            if (dto.getRoleLevel() != null && (oldRole.getRoleLevel() == null || oldRole.getRoleLevel() < dto.getRoleLevel())) {
+                gameTencentRoleRegisterService.update(new LambdaUpdateWrapper<GameTencentRoleRegister>()
+                        .set(GameTencentRoleRegister::getRoleLevel, dto.getRoleLevel())
+                        .set(GameTencentRoleRegister::getRoleName, dto.getRoleName())
+                        .eq(GameTencentRoleRegister::getId, oldRole.getId())
+                );
+            }
+            if (Objects.equals(oldRole.getIsBack(), BackStatusEnum.SUCCESS.getBackStatus())) {
+                // 创角已回传。不重复传了
+                return ResultVO.ok(true);
+            }
+        } else {
+            roleRegister = GameTencentRoleRegister.builder()
+                    .backPolicyId(dto.getBackPolicyId())
+                    .channel(dto.getChannel())
+                    .gameId(dto.getGameId())
+                    .adAccountId(dto.getAdAccountId())
+                    .registerTime(dto.getRegisterTime())
+                    .wechatAppId(dto.getWechatAppId())
+                    .wechatOpenid(dto.getWechatOpenid())
+                    .isBack(BackStatusEnum.NO.getBackStatus())
+                    .userActionSetId(dto.getUserActionSetId())
+                    .createTime(LocalDateTime.now())
+                    .roleId(dto.getRoleId())
+                    .roleName(dto.getRoleName())
+                    .roleLevel(dto.getRoleLevel())
+                    .build();
+        }
         gameTencentRoleRegisterService.save(roleRegister);
         return ResultVO.ok(gameTencentRoleRegisterService.roleRegisterBack(roleRegister));
     }

+ 68 - 43
game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/rpc/impl/TtAppBackRpcImpl.java

@@ -1,6 +1,7 @@
 package com.zanxiang.game.back.serve.rpc.impl;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.zanxiang.game.back.base.pojo.dto.*;
 import com.zanxiang.game.back.base.pojo.enums.OrderStatusEnum;
 import com.zanxiang.game.back.base.pojo.vo.OrderBackQueryRpcVO;
@@ -57,22 +58,22 @@ public class TtAppBackRpcImpl implements ITtAppBackRpc {
         if (StringUtils.isBlank(dto.getMac())) {
             dto.setMac("");
         }
-        if(StringUtils.isBlank(dto.getImei())) {
+        if (StringUtils.isBlank(dto.getImei())) {
             dto.setImei("");
         }
-        if(StringUtils.isBlank(dto.getOaid())) {
+        if (StringUtils.isBlank(dto.getOaid())) {
             dto.setOaid("");
         }
-        if(StringUtils.isBlank(dto.getAndroidId())) {
+        if (StringUtils.isBlank(dto.getAndroidId())) {
             dto.setAndroidId("");
         }
-        if(StringUtils.isBlank(dto.getIdfa())) {
+        if (StringUtils.isBlank(dto.getIdfa())) {
             dto.setIdfa("");
         }
-        if(StringUtils.isBlank(dto.getCaid())) {
+        if (StringUtils.isBlank(dto.getCaid())) {
             dto.setCaid("");
         }
-        if(StringUtils.isBlank(dto.getUserId()) || (StringUtils.isBlank(dto.getImei())
+        if (StringUtils.isBlank(dto.getUserId()) || (StringUtils.isBlank(dto.getImei())
                 && StringUtils.isBlank(dto.getOaid())
                 && StringUtils.isBlank(dto.getAndroidId())
                 && StringUtils.isBlank(dto.getIdfa())
@@ -111,22 +112,22 @@ public class TtAppBackRpcImpl implements ITtAppBackRpc {
         if (StringUtils.isBlank(dto.getMac())) {
             dto.setMac("");
         }
-        if(StringUtils.isBlank(dto.getImei())) {
+        if (StringUtils.isBlank(dto.getImei())) {
             dto.setImei("");
         }
-        if(StringUtils.isBlank(dto.getOaid())) {
+        if (StringUtils.isBlank(dto.getOaid())) {
             dto.setOaid("");
         }
-        if(StringUtils.isBlank(dto.getAndroidId())) {
+        if (StringUtils.isBlank(dto.getAndroidId())) {
             dto.setAndroidId("");
         }
-        if(StringUtils.isBlank(dto.getIdfa())) {
+        if (StringUtils.isBlank(dto.getIdfa())) {
             dto.setIdfa("");
         }
-        if(StringUtils.isBlank(dto.getCaid())) {
+        if (StringUtils.isBlank(dto.getCaid())) {
             dto.setCaid("");
         }
-        if(StringUtils.isBlank(dto.getUserId()) || (StringUtils.isBlank(dto.getImei())
+        if (StringUtils.isBlank(dto.getUserId()) || (StringUtils.isBlank(dto.getImei())
                 && StringUtils.isBlank(dto.getOaid())
                 && StringUtils.isBlank(dto.getAndroidId())
                 && StringUtils.isBlank(dto.getIdfa())
@@ -182,45 +183,69 @@ public class TtAppBackRpcImpl implements ITtAppBackRpc {
         if (StringUtils.isBlank(dto.getMac())) {
             dto.setMac("");
         }
-        if(StringUtils.isBlank(dto.getImei())) {
+        if (StringUtils.isBlank(dto.getImei())) {
             dto.setImei("");
         }
-        if(StringUtils.isBlank(dto.getOaid())) {
+        if (StringUtils.isBlank(dto.getOaid())) {
             dto.setOaid("");
         }
-        if(StringUtils.isBlank(dto.getAndroidId())) {
+        if (StringUtils.isBlank(dto.getAndroidId())) {
             dto.setAndroidId("");
         }
-        if(StringUtils.isBlank(dto.getIdfa())) {
+        if (StringUtils.isBlank(dto.getIdfa())) {
             dto.setIdfa("");
         }
-        if(StringUtils.isBlank(dto.getCaid())) {
+        if (StringUtils.isBlank(dto.getCaid())) {
             dto.setCaid("");
         }
-        if(StringUtils.isBlank(dto.getUserId()) || (StringUtils.isBlank(dto.getImei())
+        if (StringUtils.isBlank(dto.getUserId()) || (StringUtils.isBlank(dto.getImei())
                 && StringUtils.isBlank(dto.getOaid())
                 && StringUtils.isBlank(dto.getAndroidId())
                 && StringUtils.isBlank(dto.getIdfa())
                 && StringUtils.isBlank(dto.getCaid()))) {
             return ResultVO.fail("找不到用户唯一标识");
         }
-        GameOceanengineAppRoleRegisterLog roleRegisterLog = GameOceanengineAppRoleRegisterLog.builder()
-                .userId(dto.getUserId())
-                .mac(dto.getMac())
-                .imei(dto.getImei())
-                .oaid(dto.getOaid())
-                .androidId(dto.getAndroidId())
-                .idfa(dto.getIdfa())
-                .caid(dto.getCaid())
-                .gameId(dto.getGameId())
-                .accountId(dto.getAccountReport().getAccountId())
-                .agentKey(dto.getAgentKey())
-                .roleId(dto.getRoleId())
-                .roleName(dto.getRoleName())
-                .registerTime(dto.getRegisterTime())
-                .backStatus(BackStatusEnum.NO.getBackStatus())
-                .createTime(LocalDateTime.now())
-                .build();
+        GameOceanengineAppRoleRegisterLog roleRegisterLog;
+        GameOceanengineAppRoleRegisterLog oldRole = gameOceanengineAppRoleRegisterLogService.getOne(new LambdaQueryWrapper<GameOceanengineAppRoleRegisterLog>()
+                .eq(GameOceanengineAppRoleRegisterLog::getGameId, dto.getGameId())
+                .eq(GameOceanengineAppRoleRegisterLog::getUserId, dto.getUserId())
+                .eq(GameOceanengineAppRoleRegisterLog::getRoleId, dto.getRoleId())
+                .last("limit 1")
+        );
+        if (oldRole != null) {
+            roleRegisterLog = oldRole;
+            if (dto.getRoleLevel() != null && (oldRole.getRoleLevel() == null || oldRole.getRoleLevel() < dto.getRoleLevel())) {
+                gameOceanengineAppRoleRegisterLogService.update(new LambdaUpdateWrapper<GameOceanengineAppRoleRegisterLog>()
+                        .set(GameOceanengineAppRoleRegisterLog::getRoleLevel, dto.getRoleLevel())
+                        .set(GameOceanengineAppRoleRegisterLog::getRoleName, dto.getRoleName())
+                        .eq(GameOceanengineAppRoleRegisterLog::getId, oldRole.getId())
+                );
+            }
+            if (Objects.equals(oldRole.getBackStatus(), BackStatusEnum.SUCCESS.getBackStatus())) {
+                // 创角已回传。不重复传了
+                return ResultVO.ok(true);
+            }
+        } else {
+            roleRegisterLog = GameOceanengineAppRoleRegisterLog.builder()
+                    .backPolicyId(dto.getBackPolicyId())
+                    .userId(dto.getUserId())
+                    .mac(dto.getMac())
+                    .imei(dto.getImei())
+                    .oaid(dto.getOaid())
+                    .androidId(dto.getAndroidId())
+                    .idfa(dto.getIdfa())
+                    .caid(dto.getCaid())
+                    .gameId(dto.getGameId())
+                    .accountId(dto.getAccountReport().getAccountId())
+                    .agentKey(dto.getAgentKey())
+                    .roleId(dto.getRoleId())
+                    .roleName(dto.getRoleName())
+                    .roleLevel(dto.getRoleLevel())
+                    .registerTime(dto.getRegisterTime())
+                    .backStatus(BackStatusEnum.NO.getBackStatus())
+                    .createTime(LocalDateTime.now())
+                    .build();
+        }
         gameOceanengineAppRoleRegisterLogService.save(roleRegisterLog);
         return ResultVO.ok(gameOceanengineAppRoleRegisterLogService.callback(roleRegisterLog));
     }
@@ -238,16 +263,16 @@ public class TtAppBackRpcImpl implements ITtAppBackRpc {
         GameOceanengineAppOrderLog orderLog = queryOrder(dto);
         if (orderLog == null) {
             try {
-                Thread.sleep(5 *  1000L);
+                Thread.sleep(5 * 1000L);
             } catch (Exception e) {
                 log.error(e.getMessage(), e);
             }
             orderLog = queryOrder(dto);
         }
-        if  (orderLog == null) {
+        if (orderLog == null) {
             return ResultVO.ok(OrderBackQueryRpcVO.builder()
-                            .doBack(Boolean.FALSE)
-                            .backMsg("回传异常,找不到订单:" + dto.getOrderId())
+                    .doBack(Boolean.FALSE)
+                    .backMsg("回传异常,找不到订单:" + dto.getOrderId())
                     .build());
         }
         List<Long> splitMoney = gameOceanengineAppOrderSplitLogService.list(new LambdaQueryWrapper<GameOceanengineAppOrderSplitLog>()
@@ -255,9 +280,9 @@ public class TtAppBackRpcImpl implements ITtAppBackRpc {
                 .orderByAsc(GameOceanengineAppOrderSplitLog::getBackIndex)
         ).stream().map(GameOceanengineAppOrderSplitLog::getSplitMoney).collect(Collectors.toList());
         return ResultVO.ok(OrderBackQueryRpcVO.builder()
-                        .doBack(BackStatusEnum.getByValue(orderLog.getBackStatus()) ==  BackStatusEnum.SUCCESS)
-                        .backMoney(CollectionUtils.isEmpty(splitMoney) ? Collections.singletonList(orderLog.getBackMoney()) : splitMoney)
-                        .backMsg(orderLog.getBackMsg())
+                .doBack(BackStatusEnum.getByValue(orderLog.getBackStatus()) == BackStatusEnum.SUCCESS)
+                .backMoney(CollectionUtils.isEmpty(splitMoney) ? Collections.singletonList(orderLog.getBackMoney()) : splitMoney)
+                .backMsg(orderLog.getBackMsg())
                 .build());
     }
 
@@ -270,7 +295,7 @@ public class TtAppBackRpcImpl implements ITtAppBackRpc {
     @Override
     public ResultVO<String> queryUserAgentFromCallback(TtAppUserAgentQueryRpcDTO dto) {
         GameOceanengineAppUserLog userLog = gameOceanengineAppUserLogService.getOne(new LambdaQueryWrapper<GameOceanengineAppUserLog>()
-                        .eq(GameOceanengineAppUserLog::getGameId, dto.getGameId())
+                .eq(GameOceanengineAppUserLog::getGameId, dto.getGameId())
                 .eq(GameOceanengineAppUserLog::getUserId, dto.getUserId())
         );
         if (userLog == null) {

+ 42 - 19
game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/rpc/impl/TtMiniGameBackRpcImpl.java

@@ -1,16 +1,14 @@
 package com.zanxiang.game.back.serve.rpc.impl;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.zanxiang.game.back.base.pojo.dto.TtOrderRpcDTO;
 import com.zanxiang.game.back.base.pojo.dto.TtRoleRegisterRpcDTO;
 import com.zanxiang.game.back.base.pojo.dto.TtUserActiveRpcDTO;
 import com.zanxiang.game.back.base.pojo.enums.OrderStatusEnum;
 import com.zanxiang.game.back.base.rpc.ITtMiniGameBackRpc;
-import com.zanxiang.game.back.serve.pojo.entity.GameBackPolicy;
-import com.zanxiang.game.back.serve.pojo.entity.GameOceanengineOrderLog;
-import com.zanxiang.game.back.serve.pojo.entity.GameOceanengineRoleRegisterLog;
-import com.zanxiang.game.back.serve.pojo.entity.GameOceanengineUserLog;
+import com.zanxiang.game.back.serve.pojo.entity.*;
 import com.zanxiang.game.back.serve.pojo.enums.BackStatusEnum;
 import com.zanxiang.game.back.serve.service.IGameBackPolicyService;
 import com.zanxiang.game.back.serve.service.IGameOceanengineOrderLogService;
@@ -133,21 +131,46 @@ public class TtMiniGameBackRpcImpl implements ITtMiniGameBackRpc {
     @Override
     public ResultVO<Boolean> roleRegisterReport(TtRoleRegisterRpcDTO dto) {
         log.error("头条小游戏创角回传收到:{}", JsonUtil.toString(dto));
-        GameOceanengineRoleRegisterLog roleRegisterLog = GameOceanengineRoleRegisterLog.builder()
-                .appId(dto.getWechatAppId())
-                .openId(dto.getWechatOpenId())
-                .unionId(dto.getWechatUnionId())
-                .gameId(dto.getGameId())
-                .accountId(dto.getAccountReport().getAccountId())
-                .accountReportToken(dto.getAccountReport().getReportToken())
-                .accountReportUrl(dto.getAccountReport().getReportUrl())
-                .agentKey(dto.getAgentKey())
-                .roleId(dto.getRoleId())
-                .roleName(dto.getRoleName())
-                .registerTime(dto.getRegisterTime())
-                .backStatus(BackStatusEnum.NO.getBackStatus())
-                .createTime(LocalDateTime.now())
-                .build();
+        GameOceanengineRoleRegisterLog roleRegisterLog;
+        GameOceanengineRoleRegisterLog oldRole = gameOceanengineRoleRegisterLogService.getOne(new LambdaQueryWrapper<GameOceanengineRoleRegisterLog>()
+                .eq(GameOceanengineRoleRegisterLog::getGameId, dto.getGameId())
+                .eq(GameOceanengineRoleRegisterLog::getAppId, dto.getWechatAppId())
+                .eq(GameOceanengineRoleRegisterLog::getOpenId, dto.getWechatOpenId())
+                .eq(GameOceanengineRoleRegisterLog::getRoleId, dto.getRoleId())
+                .last("limit 1")
+        );
+        if (oldRole != null) {
+            roleRegisterLog = oldRole;
+            if (dto.getRoleLevel() != null && (oldRole.getRoleLevel() == null || oldRole.getRoleLevel() < dto.getRoleLevel())) {
+                gameOceanengineRoleRegisterLogService.update(new LambdaUpdateWrapper<GameOceanengineRoleRegisterLog>()
+                        .set(GameOceanengineRoleRegisterLog::getRoleLevel, dto.getRoleLevel())
+                        .set(GameOceanengineRoleRegisterLog::getRoleName, dto.getRoleName())
+                        .eq(GameOceanengineRoleRegisterLog::getId, oldRole.getId())
+                );
+            }
+            if (Objects.equals(oldRole.getBackStatus(), BackStatusEnum.SUCCESS.getBackStatus())) {
+                // 创角已回传。不重复传了
+                return ResultVO.ok(true);
+            }
+        } else  {
+            roleRegisterLog = GameOceanengineRoleRegisterLog.builder()
+                    .backPolicyId(dto.getBackPolicyId())
+                    .appId(dto.getWechatAppId())
+                    .openId(dto.getWechatOpenId())
+                    .unionId(dto.getWechatUnionId())
+                    .gameId(dto.getGameId())
+                    .accountId(dto.getAccountReport().getAccountId())
+                    .accountReportToken(dto.getAccountReport().getReportToken())
+                    .accountReportUrl(dto.getAccountReport().getReportUrl())
+                    .agentKey(dto.getAgentKey())
+                    .roleId(dto.getRoleId())
+                    .roleName(dto.getRoleName())
+                    .roleLevel(dto.getRoleLevel())
+                    .registerTime(dto.getRegisterTime())
+                    .backStatus(BackStatusEnum.NO.getBackStatus())
+                    .createTime(LocalDateTime.now())
+                    .build();
+        }
         gameOceanengineRoleRegisterLogService.save(roleRegisterLog);
         return ResultVO.ok(gameOceanengineRoleRegisterLogService.callback(roleRegisterLog));
     }

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

@@ -121,6 +121,7 @@ public class GameBackPolicyServiceImpl extends ServiceImpl<GameBackPolicyMapper,
                 .supperSmallAmount(dto.getSupperSmallAmount() == null ? null : NumberUtil.multiply100(dto.getSupperSmallAmount()).longValue())
                 .splitStrategy(CollectionUtils.isEmpty(dto.getSplitStrategy()) ? null : JsonUtil.toString(dto.getSplitStrategy()))
                 .activeBackSwitch(dto.getActiveBackSwitch())
+                .roleLevelMin(dto.getRoleLevelMin())
                 .build();
         return gameBackPolicyService.save(backPolicy);
     }
@@ -175,6 +176,7 @@ public class GameBackPolicyServiceImpl extends ServiceImpl<GameBackPolicyMapper,
                 .supperSmallAmount(dto.getSupperSmallAmount() == null ? null : NumberUtil.multiply100(dto.getSupperSmallAmount()).longValue())
                 .splitStrategy(CollectionUtils.isEmpty(dto.getSplitStrategy()) ? null : JsonUtil.toString(dto.getSplitStrategy()))
                 .activeBackSwitch(dto.getActiveBackSwitch())
+                .roleLevelMin(dto.getRoleLevelMin())
                 .build();
         return gameBackPolicyService.updateById(backPolicy);
     }

+ 11 - 0
game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/service/impl/GameOceanengineAppRoleRegisterLogServiceImpl.java

@@ -3,6 +3,7 @@ package com.zanxiang.game.back.serve.service.impl;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.github.sd4324530.jtuple.Tuple2;
 import com.zanxiang.game.back.serve.dao.mapper.GameOceanengineAppRoleRegisterLogMapper;
 import com.zanxiang.game.back.serve.oceanengine.MiniGameCallback;
 import com.zanxiang.game.back.serve.pojo.entity.*;
@@ -28,6 +29,8 @@ implements IGameOceanengineAppRoleRegisterLogService {
     private IGameOceanengineAppBackLogService gameOceanengineAppBackLogService;
     @DubboReference(providedBy = ServerInfo.SERVER_DUBBO_NAME)
     private IAgentRpc agentRpc;
+    @Autowired
+    private IGameBackPolicyService gameBackPolicyService;
 
     @Override
     @Transactional(rollbackFor = Exception.class)
@@ -77,6 +80,14 @@ implements IGameOceanengineAppRoleRegisterLogService {
             //创角已回传
             return BackStatusEnum.NO;
         }
+
+        if (roleRegisterLog.getBackPolicyId() != null) {
+            GameBackPolicy gameBackPolicy = gameBackPolicyService.getById(roleRegisterLog.getBackPolicyId());
+            if (gameBackPolicy.getRoleLevelMin() != null && roleRegisterLog.getRoleLevel() != null
+                    && roleRegisterLog.getRoleLevel() >= gameBackPolicy.getRoleLevelMin()) {
+                return BackStatusEnum.NO;
+            }
+        }
         BackStatusEnum backStatus = BackStatusEnum.SUCCESS;
         String errMsg = null;
         gameOceanengineAppBackLogService.save(GameOceanengineAppBackLog.builder()

+ 13 - 0
game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/service/impl/GameOceanengineRoleRegisterLogServiceImpl.java

@@ -5,15 +5,18 @@ import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 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.github.sd4324530.jtuple.Tuple2;
 import com.zanxiang.game.back.serve.dao.mapper.GameOceanengineRoleRegisterLogMapper;
 import com.zanxiang.game.back.serve.oceanengine.MiniGameCallback;
 import com.zanxiang.game.back.serve.oceanengine.OceanengineCallbackException;
 import com.zanxiang.game.back.serve.pojo.dto.GameOceanengineRoleRegisterLogDTO;
+import com.zanxiang.game.back.serve.pojo.entity.GameBackPolicy;
 import com.zanxiang.game.back.serve.pojo.entity.GameOceanengineBackLog;
 import com.zanxiang.game.back.serve.pojo.entity.GameOceanengineRoleRegisterLog;
 import com.zanxiang.game.back.serve.pojo.entity.GameOceanengineUserLog;
 import com.zanxiang.game.back.serve.pojo.enums.BackStatusEnum;
 import com.zanxiang.game.back.serve.pojo.vo.GameOceanengineRoleRegisterLogVO;
+import com.zanxiang.game.back.serve.service.IGameBackPolicyService;
 import com.zanxiang.game.back.serve.service.IGameOceanengineBackLogService;
 import com.zanxiang.game.back.serve.service.IGameOceanengineRoleRegisterLogService;
 import com.zanxiang.game.back.serve.service.IGameOceanengineUserLogService;
@@ -45,6 +48,8 @@ public class GameOceanengineRoleRegisterLogServiceImpl extends ServiceImpl<GameO
     @Autowired
     private IGameOceanengineUserLogService gameOceanengineUserLogService;
     @Autowired
+    private IGameBackPolicyService gameBackPolicyService;
+    @Autowired
     private IGameOceanengineBackLogService gameOceanengineBackLogService;
     @DubboReference(providedBy = ServerInfo.SERVER_DUBBO_NAME)
     private IAgentRpc agentRpc;
@@ -147,6 +152,14 @@ public class GameOceanengineRoleRegisterLogServiceImpl extends ServiceImpl<GameO
             //创角已回传
             return BackStatusEnum.NO;
         }
+
+        if (roleRegisterLog.getBackPolicyId() != null) {
+            GameBackPolicy gameBackPolicy = gameBackPolicyService.getById(roleRegisterLog.getBackPolicyId());
+            if (gameBackPolicy.getRoleLevelMin() != null && roleRegisterLog.getRoleLevel() != null
+                    && roleRegisterLog.getRoleLevel() >= gameBackPolicy.getRoleLevelMin()) {
+                return BackStatusEnum.NO;
+            }
+        }
         //创角回传
         MiniGameCallback.MiniGameCallbackRequest request = MiniGameCallback.MiniGameCallbackRequest.builder()
                 .clue_token(userLog.getClueToken())

+ 17 - 7
game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/service/impl/GameTencentAppApiRoleRegisterServiceImpl.java

@@ -30,13 +30,15 @@ import java.util.Map;
 @Slf4j
 @Service
 public class GameTencentAppApiRoleRegisterServiceImpl extends ServiceImpl<GameTencentAppApiRoleRegisterMapper, GameTencentAppApiRoleRegister>
-implements IGameTencentAppApiRoleRegisterService {
+        implements IGameTencentAppApiRoleRegisterService {
 
     @Autowired
     private IGameTencentAppApiBackLogService gameTencentAppApiBackLogService;
     @Autowired
     private IGameTencentAppApiUserService gameTencentAppApiUserService;
     @Autowired
+    private IGameBackPolicyService gameBackPolicyService;
+    @Autowired
     private IGameTencentAppCallbackService gameTencentAppCallbackService;
     @DubboReference(providedBy = AdvertisingTencentServer.SERVER_DUBBO_NAME)
     private IUserActionSetV3Rpc userActionSetRpc;
@@ -83,25 +85,33 @@ implements IGameTencentAppApiRoleRegisterService {
                 // 注册已回传,则默认认为创角也回传了
                 return Tuple2.with(BackStatusEnum.NO, "用户第二+次创角不回传");
             }
-        } else  {
+        } else {
             return Tuple2.with(BackStatusEnum.FAILED, "找不到用户");
         }
 
+        if (roleRegisterLog.getBackPolicyId() != null) {
+            GameBackPolicy gameBackPolicy = gameBackPolicyService.getById(roleRegisterLog.getBackPolicyId());
+            if (gameBackPolicy.getRoleLevelMin() != null && roleRegisterLog.getRoleLevel() != null
+                    && roleRegisterLog.getRoleLevel() >= gameBackPolicy.getRoleLevelMin()) {
+                return Tuple2.with(BackStatusEnum.NO, "等级小于回传策略等级 " + gameBackPolicy.getRoleLevelMin() + "。不回传");
+            }
+        }
+
         GameTencentAppCallback callback = gameTencentAppCallbackService.getById(user.getCallbackId());
 
         UserActionV3RpcDTO.UserIdRpcDTO userId = UserActionV3RpcDTO.UserIdRpcDTO.builder().build();
-        if ("android".equalsIgnoreCase(callback.getDeviceOsType()))  {
-            if(StringUtils.isNotBlank(callback.getMuid())) {
+        if ("android".equalsIgnoreCase(callback.getDeviceOsType())) {
+            if (StringUtils.isNotBlank(callback.getMuid())) {
                 userId.setHashImei(callback.getMuid());
             }
-            if(StringUtils.isNotBlank(callback.getHashOaid())) {
+            if (StringUtils.isNotBlank(callback.getHashOaid())) {
                 userId.setHashOaid(callback.getHashOaid());
             }
-            if(StringUtils.isNotBlank(callback.getHashAndroidId())) {
+            if (StringUtils.isNotBlank(callback.getHashAndroidId())) {
                 userId.setHashAndroidId(callback.getHashAndroidId());
             }
         } else {
-            if(StringUtils.isNotBlank(callback.getMuid())) {
+            if (StringUtils.isNotBlank(callback.getMuid())) {
                 userId.setHashIdfa(callback.getMuid());
             }
         }

+ 13 - 0
game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/service/impl/GameTencentMiniGameRoleRegisterServiceImpl.java

@@ -10,12 +10,14 @@ import com.zanxiang.advertising.tencent.base.AdvertisingTencentServer;
 import com.zanxiang.advertising.tencent.base.rpc.IUserActionSetRpc;
 import com.zanxiang.game.back.serve.dao.mapper.GameTencentMiniGameRoleRegisterMapper;
 import com.zanxiang.game.back.serve.pojo.dto.GameTencentMiniGameRoleRegisterDTO;
+import com.zanxiang.game.back.serve.pojo.entity.GameBackPolicy;
 import com.zanxiang.game.back.serve.pojo.entity.GameTencentMiniGameBackLog;
 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.vo.GameTencentMiniGameRoleRegisterVO;
+import com.zanxiang.game.back.serve.service.IGameBackPolicyService;
 import com.zanxiang.game.back.serve.service.IGameTencentMiniGameBackLogService;
 import com.zanxiang.game.back.serve.service.IGameTencentMiniGameRoleRegisterService;
 import com.zanxiang.game.back.serve.service.IGameTencentMiniGameUserService;
@@ -50,6 +52,8 @@ public class GameTencentMiniGameRoleRegisterServiceImpl extends ServiceImpl<Game
     private IAgentRpc agentRpc;
     @Autowired
     private IGameTencentMiniGameUserService gameTencentMiniGameUserService;
+    @Autowired
+    private IGameBackPolicyService gameBackPolicyService;
 
     @Override
     @Transactional(rollbackFor = Exception.class)
@@ -144,6 +148,15 @@ public class GameTencentMiniGameRoleRegisterServiceImpl extends ServiceImpl<Game
             //创角已回传
             return Tuple2.with(BackStatusEnum.NO, "创角已回传,默认不重复传");
         }
+
+        if (roleRegisterLog.getBackPolicyId() != null) {
+            GameBackPolicy gameBackPolicy = gameBackPolicyService.getById(roleRegisterLog.getBackPolicyId());
+            if (gameBackPolicy.getRoleLevelMin() != null && roleRegisterLog.getRoleLevel() != null
+                    && roleRegisterLog.getRoleLevel() >= gameBackPolicy.getRoleLevelMin()) {
+                return Tuple2.with(BackStatusEnum.NO, "等级小于回传策略等级 " + gameBackPolicy.getRoleLevelMin() + "。不回传");
+            }
+        }
+
         //创角回传
         return gameTencentMiniGameBackLogService.roleRegisterBack(roleRegisterLog);
     }

+ 14 - 0
game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/service/impl/GameTencentRoleRegisterServiceImpl.java

@@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 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.github.sd4324530.jtuple.Tuple2;
 import com.zanxiang.advertising.tencent.base.AdvertisingTencentServer;
 import com.zanxiang.advertising.tencent.base.pojo.dto.DataReportOfAppIdRpcDTO;
 import com.zanxiang.advertising.tencent.base.pojo.dto.UserActionRpcDTO;
@@ -14,12 +15,14 @@ import com.zanxiang.erp.base.ErpServer;
 import com.zanxiang.erp.base.rpc.ISysUserRpc;
 import com.zanxiang.game.back.serve.dao.mapper.GameTencentRoleRegisterMapper;
 import com.zanxiang.game.back.serve.pojo.dto.GameTencentRoleRegisterDTO;
+import com.zanxiang.game.back.serve.pojo.entity.GameBackPolicy;
 import com.zanxiang.game.back.serve.pojo.entity.GameTencentBackLog;
 import com.zanxiang.game.back.serve.pojo.entity.GameTencentRoleRegister;
 import com.zanxiang.game.back.serve.pojo.entity.GameTencentUser;
 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.vo.GameTencentRoleRegisterVO;
+import com.zanxiang.game.back.serve.service.IGameBackPolicyService;
 import com.zanxiang.game.back.serve.service.IGameTencentBackLogService;
 import com.zanxiang.game.back.serve.service.IGameTencentRoleRegisterService;
 import com.zanxiang.game.back.serve.service.IGameTencentUserService;
@@ -57,6 +60,8 @@ public class GameTencentRoleRegisterServiceImpl extends ServiceImpl<GameTencentR
     @DubboReference(providedBy = ErpServer.SERVER_DUBBO_NAME)
     private ISysUserRpc sysUserRpc;
     @Autowired
+    private IGameBackPolicyService gameBackPolicyService;
+    @Autowired
     private IGameTencentBackLogService gameTencentBackLogService;
     @DubboReference(providedBy = ServerInfo.SERVER_DUBBO_NAME)
     private IAgentRpc agentRpc;
@@ -146,6 +151,15 @@ public class GameTencentRoleRegisterServiceImpl extends ServiceImpl<GameTencentR
                 return BackStatusEnum.NO;
             }
         }
+
+        if (roleRegisterLog.getBackPolicyId() != null) {
+            GameBackPolicy gameBackPolicy = gameBackPolicyService.getById(roleRegisterLog.getBackPolicyId());
+            if (gameBackPolicy.getRoleLevelMin() != null && roleRegisterLog.getRoleLevel() != null
+                    && roleRegisterLog.getRoleLevel() >= gameBackPolicy.getRoleLevelMin()) {
+                return BackStatusEnum.NO;
+            }
+        }
+
         Map<String, Object> actionParam = new HashMap<>(2);
         actionParam.put("claim_type", 0);
         DataReportOfAppIdRpcDTO dataReportOfAppIdRpcDTO = DataReportOfAppIdRpcDTO.builder()

+ 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服务启动成功 <解决微信支付精度丢失的问题> ( ´・・)ノ(._.`) \n" +
+        System.out.println("赞象SDK服务启动成功 <创角回传, 新增角色等级参数> ( ´・・)ノ(._.`) \n" +
                 " ___________ _   __\n" +
                 "/  ___|  _  \\ | / /\n" +
                 "\\ `--.| | | | |/ / \n" +

+ 4 - 0
game-module/game-module-sdk/src/main/java/com/zanxiang/game/module/sdk/service/impl/CallBackServiceImpl.java

@@ -377,6 +377,7 @@ public class CallBackServiceImpl implements ICallBackService {
                 .userActionSetId(agent.getUserActionSetId())
                 .roleId(gameUserRole.getRoleId())
                 .roleName(gameUserRole.getRoleName())
+                .roleLevel(gameUserRole.getRoleLevel())
                 .build();
     }
 
@@ -390,6 +391,7 @@ public class CallBackServiceImpl implements ICallBackService {
                 .agentKey(agent.getAgentKey())
                 .roleId(gameUserRole.getRoleId())
                 .roleName(gameUserRole.getRoleName())
+                .roleLevel(gameUserRole.getRoleLevel())
                 .registerTime(gameUserRole.getCreateTime())
                 .build();
     }
@@ -521,6 +523,7 @@ public class CallBackServiceImpl implements ICallBackService {
                 .agentKey(agent.getAgentKey())
                 .roleId(gameUserRole.getRoleId())
                 .roleName(gameUserRole.getRoleName())
+                .roleLevel(gameUserRole.getRoleLevel())
                 .registerTime(gameUserRole.getCreateTime())
                 .mac(user.getMac())
                 .imei(user.getImei())
@@ -587,6 +590,7 @@ public class CallBackServiceImpl implements ICallBackService {
                 .channel(agent.getAgentKey())
                 .roleId(gameUserRole.getRoleId())
                 .roleName(gameUserRole.getRoleName())
+                .roleLevel(gameUserRole.getRoleLevel())
                 .mac(user.getMac())
                 .imei(user.getImei())
                 .oaid(user.getOaid())

+ 6 - 0
game-module/game-module-sdk/src/main/java/com/zanxiang/game/module/sdk/service/impl/CpPushDataServiceImpl.java

@@ -392,6 +392,8 @@ public class CpPushDataServiceImpl implements ICpPushDataService {
                 0L, 20L, TimeUnit.SECONDS)) {
             return Boolean.TRUE;
         }
+        //判断是否等级变更
+        boolean updateRoleLevel = gameUserRole.getRoleLevel() != null && param.getRoleLevel() > gameUserRole.getRoleLevel();
         //玩家角色信息更新
         if (param.getExtra() != null && Strings.isNotBlank(JsonUtil.toString(param.getExtra()))) {
             gameUserRole.setExtra(JsonUtil.toString(param.getExtra()));
@@ -410,6 +412,10 @@ public class CpPushDataServiceImpl implements ICpPushDataService {
         gameUserRole.setServerName(param.getServerName());
         gameUserRole.setUpdateTime(LocalDateTime.now());
         boolean result = gameUserRoleService.updateById(gameUserRole);
+        //等级更新, 创角回传
+        if (updateRoleLevel) {
+            callBackService.roleCallBack(gameUserRole);
+        }
         //角色更新数据埋点发送到卡夫卡
         kafkaService.eventTrack(KafkaEventTrackEnum.KAFKA_EVENT_TRACK_ROLE_UPDATE, JsonUtil.toString(gameUserRole));
         return result;

+ 11 - 16
game-module/game-module-sdk/src/main/java/com/zanxiang/game/module/sdk/service/impl/GameUserRoleServiceImpl.java

@@ -111,15 +111,8 @@ public class GameUserRoleServiceImpl extends ServiceImpl<GameUserRoleMapper, Gam
                 .eq(GameUserRole::getRoleId, gameUserRoleParam.getRoleId()));
         //更新游戏角色
         if (gameUserRole != null) {
-            //判断是否等级变更
-            boolean updateRoleLevel = gameUserRoleParam.getRoleLevel() > gameUserRole.getRoleLevel();
             //角色更新
-            this.gameRoleUpdate(gameUserRoleParam, gameUserRole, userData);
-            //玩家消息推送
-            if (updateRoleLevel) {
-                pushMsgService.pushMsgByLevelUpdate(gameUserRoleParam, userData);
-            }
-            return Boolean.TRUE;
+            return this.gameRoleUpdate(gameUserRoleParam, gameUserRole, userData);
         }
         //新建游戏角色
         this.gameRoleCreate(gameUserRoleParam, userData);
@@ -168,15 +161,8 @@ public class GameUserRoleServiceImpl extends ServiceImpl<GameUserRoleMapper, Gam
         }
         //等级提升更新
         if (gameUserRole != null && Objects.equals(dataType, DataTypeEnum.TYPE_LEVEL_UP.getDateType())) {
-            //判断是否等级变更
-            boolean updateRoleLevel = param.getRoleLevel() > gameUserRole.getRoleLevel();
             //角色更新
-            boolean result = this.gameRoleUpdate(param, gameUserRole, userData);
-            //玩家消息推送
-            if (updateRoleLevel) {
-                pushMsgService.pushMsgByLevelUpdate(param, userData);
-            }
-            return result;
+            return this.gameRoleUpdate(param, gameUserRole, userData);
         }
         //退出游戏
         if (Objects.equals(dataType, DataTypeEnum.TYPE_EXIT_GAME.getDateType())) {
@@ -193,6 +179,8 @@ public class GameUserRoleServiceImpl extends ServiceImpl<GameUserRoleMapper, Gam
                 0L, 20L, TimeUnit.SECONDS)) {
             return Boolean.TRUE;
         }
+        //判断是否等级变更
+        boolean updateRoleLevel = param.getRoleLevel() > gameUserRole.getRoleLevel();
         //玩家信息
         GameUser gameUser = gameUserService.getOne(new LambdaQueryWrapper<GameUser>()
                 .eq(GameUser::getGameId, userData.getGameId())
@@ -218,6 +206,13 @@ public class GameUserRoleServiceImpl extends ServiceImpl<GameUserRoleMapper, Gam
         gameUserRole.setServerName(param.getServerName());
         gameUserRole.setUpdateTime(LocalDateTime.now());
         boolean result = super.updateById(gameUserRole);
+        //等级变更
+        if (updateRoleLevel) {
+            //用户创角回传
+            callBackService.roleCallBack(gameUserRole);
+            //玩家消息推送
+            pushMsgService.pushMsgByLevelUpdate(param, userData);
+        }
         //角色更新数据埋点发送到卡夫卡
         kafkaService.eventTrack(KafkaEventTrackEnum.KAFKA_EVENT_TRACK_ROLE_UPDATE, JsonUtil.toString(gameUserRole));
         return result;