Browse Source

fix : 腾讯小游戏回传新增策略创角激活

bilingfeng 1 month ago
parent
commit
8a9dde54aa
14 changed files with 132 additions and 1 deletions
  1. 1 1
      game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/GameBackApplication.java
  2. 3 0
      game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/pojo/BackPolicyOfSplitLevel.java
  3. 3 0
      game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/pojo/BackPolicyOfSumRecharge.java
  4. 6 0
      game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/pojo/dto/GameBackPolicyDTO.java
  5. 6 0
      game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/pojo/entity/GameBackPolicy.java
  6. 4 0
      game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/pojo/entity/GameOceanengineUserLog.java
  7. 5 0
      game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/pojo/entity/GameTencentMiniGameUser.java
  8. 2 0
      game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/rpc/impl/TencentMiniGameBackRpcImpl.java
  9. 1 0
      game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/rpc/impl/TtMiniGameBackRpcImpl.java
  10. 2 0
      game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/service/IGameTencentMiniGameBackLogService.java
  11. 6 0
      game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/service/impl/GameBackPolicyServiceImpl.java
  12. 53 0
      game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/service/impl/GameOceanengineUserLogServiceImpl.java
  13. 28 0
      game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/service/impl/GameTencentMiniGameBackLogServiceImpl.java
  14. 12 0
      game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/service/impl/GameTencentMiniGameUserServiceImpl.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" +

+ 3 - 0
game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/pojo/BackPolicyOfSplitLevel.java

@@ -31,6 +31,9 @@ public class BackPolicyOfSplitLevel {
     @ApiModelProperty("激活回传开关")
     private Boolean activeBackSwitch;
 
+    @ApiModelProperty("角色激活回传开关")
+    private Boolean roleBackSwitch;
+
     @ApiModelProperty("最小回传等级")
     private Long roleLevelMin;
 

+ 3 - 0
game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/pojo/BackPolicyOfSumRecharge.java

@@ -18,6 +18,9 @@ public class BackPolicyOfSumRecharge {
     @ApiModelProperty("激活回传开关")
     private Boolean activeBackSwitch;
 
+    @ApiModelProperty("角色激活回传开关")
+    private Boolean roleBackSwitch;
+
     @ApiModelProperty("最小回传等级")
     private Long roleLevelMin;
 

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

@@ -258,6 +258,12 @@ public class GameBackPolicyDTO implements Serializable {
      * 激活回传开关
      */
     private Boolean activeBackSwitch;
+
+    /**
+     * 角色激活回传开关
+     */
+    private Boolean roleBackSwitch;
+
     /**
      * 最小回传等级
      */

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

@@ -245,6 +245,12 @@ public class GameBackPolicy implements Serializable {
      * 激活回传开关
      */
     private Boolean activeBackSwitch;
+
+    /**
+     * 角色激活回传开关
+     */
+    private Boolean roleBackSwitch;
+
     /**
      * 最小回传等级
      */

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

@@ -24,6 +24,10 @@ public class GameOceanengineUserLog implements Serializable {
 
     @TableId(value = "id", type = IdType.AUTO)
     private Long id;
+    /**
+     * 回传策略 id
+     */
+    private Long backPolicyId;
     /**
      * 小游戏 id
      */

+ 5 - 0
game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/pojo/entity/GameTencentMiniGameUser.java

@@ -34,6 +34,11 @@ public class GameTencentMiniGameUser implements Serializable {
     @TableId(value = "id", type = IdType.AUTO)
     private Long id;
 
+    /**
+     * 回传策略id
+     */
+    private Long backPolicyId;
+
     /**
      * 渠道号
      */

+ 2 - 0
game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/rpc/impl/TencentMiniGameBackRpcImpl.java

@@ -219,6 +219,7 @@ public class TencentMiniGameBackRpcImpl implements ITencentMiniGameBackRpc {
         GameTencentMiniGameUser userLog = GameTencentMiniGameUser.builder()
                 .adAccountId(dto.getAdAccountId())
                 .gameId(dto.getGameId())
+                .backPolicyId(dto.getBackPolicyId())
                 .agentKey(dto.getChannel())
                 .subscribeTime(dto.getSubscribeTime())
                 .registerTime(dto.getRegisterTime())
@@ -245,6 +246,7 @@ public class TencentMiniGameBackRpcImpl implements ITencentMiniGameBackRpc {
         GameTencentMiniGameUser userLog = GameTencentMiniGameUser.builder()
                 .adAccountId(dto.getAdAccountId())
                 .gameId(dto.getGameId())
+                .backPolicyId(dto.getBackPolicyId())
                 .agentKey(dto.getChannel())
                 .subscribeTime(dto.getSubscribeTime())
                 .registerTime(dto.getRegisterTime())

+ 1 - 0
game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/rpc/impl/TtMiniGameBackRpcImpl.java

@@ -52,6 +52,7 @@ public class TtMiniGameBackRpcImpl implements ITtMiniGameBackRpc {
     public ResultVO<Boolean> userActiveReport(TtUserActiveRpcDTO dto) {
         log.error("头条小游戏用户回传收到:{}", JsonUtil.toString(dto));
         GameOceanengineUserLog userLog = GameOceanengineUserLog.builder()
+                .backPolicyId(dto.getBackPolicyId())
                 .appId(dto.getWechatAppId())
                 .openId(dto.getWechatOpenId())
                 .unionId(dto.getWechatUnionId())

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

@@ -12,6 +12,8 @@ import java.time.LocalDateTime;
 
 public interface IGameTencentMiniGameBackLogService extends IService<GameTencentMiniGameBackLog> {
 
+    Tuple2<BackStatusEnum, String> userAndRoleRegisterBack(GameTencentMiniGameUser userLog);
+
     Tuple2<BackStatusEnum, String> userBack(GameTencentMiniGameUser userLog);
 
     Tuple2<BackStatusEnum, String> orderBack(GameTencentMiniGameOrder orderLog, LocalDateTime backTime, Long backMoney);

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

@@ -128,18 +128,21 @@ public class GameBackPolicyServiceImpl extends ServiceImpl<GameBackPolicyMapper,
             backPolicy.setSupperSmallAmount(dto.getSupperSmallAmount() == null ? null : NumberUtil.multiply100(dto.getSupperSmallAmount()).longValue());
             backPolicy.setSplitStrategy(CollectionUtils.isEmpty(dto.getSplitStrategy()) ? null : JsonUtil.toString(dto.getSplitStrategy()));
             backPolicy.setActiveBackSwitch(dto.getActiveBackSwitch());
+            backPolicy.setRoleBackSwitch(dto.getRoleBackSwitch());
             backPolicy.setRoleLevelMin(dto.getRoleLevelMin());
             backPolicy.setTutorialFinishJson(JsonUtil.toString(dto.getTutorialFinish()));
         } else if (Objects.equals(dto.getPolicyType(), GameBackPolicy.TYPE_SUM_RECHARGE)) {
             backPolicy.setTypeOfSumRechargeJson(JsonUtil.toString(dto.getTypeOfSumRecharge()));
             backPolicy.setRegPayIntervalTime(dto.getTypeOfSumRecharge().getRegPayIntervalTime());
             backPolicy.setActiveBackSwitch(dto.getTypeOfSumRecharge().getActiveBackSwitch());
+            backPolicy.setRoleBackSwitch(dto.getTypeOfSumRecharge().getRoleBackSwitch());
             backPolicy.setRoleLevelMin(dto.getTypeOfSumRecharge().getRoleLevelMin());
             backPolicy.setTutorialFinishJson(JsonUtil.toString(dto.getTypeOfSumRecharge().getTutorialFinish()));
         } else if (Objects.equals(dto.getPolicyType(), GameBackPolicy.TYPE_SPLIT_LEVEL)) {
             backPolicy.setTypeOfSplitLevelJson(JsonUtil.toString(dto.getTypeOfSplitLevel()));
             backPolicy.setRegPayIntervalTime(dto.getTypeOfSplitLevel().getRegPayIntervalTime());
             backPolicy.setActiveBackSwitch(dto.getTypeOfSplitLevel().getActiveBackSwitch());
+            backPolicy.setRoleBackSwitch(dto.getTypeOfSplitLevel().getRoleBackSwitch());
             backPolicy.setRoleLevelMin(dto.getTypeOfSplitLevel().getRoleLevelMin());
             backPolicy.setTutorialFinishJson(JsonUtil.toString(dto.getTypeOfSplitLevel().getTutorialFinish()));
         }
@@ -198,18 +201,21 @@ public class GameBackPolicyServiceImpl extends ServiceImpl<GameBackPolicyMapper,
             backPolicy.setSupperSmallAmount(dto.getSupperSmallAmount() == null ? null : NumberUtil.multiply100(dto.getSupperSmallAmount()).longValue());
             backPolicy.setSplitStrategy(CollectionUtils.isEmpty(dto.getSplitStrategy()) ? null : JsonUtil.toString(dto.getSplitStrategy()));
             backPolicy.setActiveBackSwitch(dto.getActiveBackSwitch());
+            backPolicy.setRoleBackSwitch(dto.getRoleBackSwitch());
             backPolicy.setRoleLevelMin(dto.getRoleLevelMin());
             backPolicy.setTutorialFinishJson(JsonUtil.toString(dto.getTutorialFinish()));
         } else if (Objects.equals(dto.getPolicyType(), GameBackPolicy.TYPE_SUM_RECHARGE)) {
             backPolicy.setTypeOfSumRechargeJson(JsonUtil.toString(dto.getTypeOfSumRecharge()));
             backPolicy.setRegPayIntervalTime(dto.getTypeOfSumRecharge().getRegPayIntervalTime());
             backPolicy.setActiveBackSwitch(dto.getTypeOfSumRecharge().getActiveBackSwitch());
+            backPolicy.setRoleBackSwitch(dto.getTypeOfSumRecharge().getRoleBackSwitch());
             backPolicy.setRoleLevelMin(dto.getTypeOfSumRecharge().getRoleLevelMin());
             backPolicy.setTutorialFinishJson(JsonUtil.toString(dto.getTypeOfSumRecharge().getTutorialFinish()));
         } else if (Objects.equals(dto.getPolicyType(), GameBackPolicy.TYPE_SPLIT_LEVEL)) {
             backPolicy.setTypeOfSplitLevelJson(JsonUtil.toString(dto.getTypeOfSplitLevel()));
             backPolicy.setRegPayIntervalTime(dto.getTypeOfSplitLevel().getRegPayIntervalTime());
             backPolicy.setActiveBackSwitch(dto.getTypeOfSplitLevel().getActiveBackSwitch());
+            backPolicy.setRoleBackSwitch(dto.getTypeOfSplitLevel().getRoleBackSwitch());
             backPolicy.setRoleLevelMin(dto.getTypeOfSplitLevel().getRoleLevelMin());
             backPolicy.setTutorialFinishJson(JsonUtil.toString(dto.getTypeOfSplitLevel().getTutorialFinish()));
         }

+ 53 - 0
game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/service/impl/GameOceanengineUserLogServiceImpl.java

@@ -9,11 +9,14 @@ import com.zanxiang.game.back.serve.dao.mapper.GameOceanengineUserLogMapper;
 import com.zanxiang.game.back.serve.oceanengine.MiniGameCallback;
 import com.zanxiang.game.back.serve.oceanengine.OceanengineCallbackException;
 import com.zanxiang.game.back.serve.pojo.dto.GameOceanengineUserLogDTO;
+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.GameOceanengineUserLog;
 import com.zanxiang.game.back.serve.pojo.enums.BackStatusEnum;
 import com.zanxiang.game.back.serve.pojo.vo.GameOceanengineUserLogVO;
+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;
 import com.zanxiang.game.module.base.ServerInfo;
 import com.zanxiang.game.module.base.pojo.vo.AgentRpcVO;
@@ -38,6 +41,8 @@ import java.util.stream.Collectors;
 public class GameOceanengineUserLogServiceImpl extends ServiceImpl<GameOceanengineUserLogMapper, GameOceanengineUserLog>
         implements IGameOceanengineUserLogService {
 
+    @Autowired
+    private IGameBackPolicyService gameBackPolicyService;
     @Autowired
     private MiniGameCallback miniGameCallback;
     @Autowired
@@ -150,6 +155,54 @@ public class GameOceanengineUserLogServiceImpl extends ServiceImpl<GameOceanengi
                 .backStatus(backStatus.getBackStatus())
                 .errMsg(errMsg)
                 .build());
+        //判断是否开启注册回传创角
+        try {
+            this.regCallBackRole(userLog);
+        } catch (Exception ignored) {
+        }
+        //返回回传结果
         return backStatus;
     }
+
+    private void regCallBackRole(GameOceanengineUserLog userLog) {
+        GameBackPolicy gameBackPolicy = userLog.getBackPolicyId() == null ? null
+                : gameBackPolicyService.getById(userLog.getBackPolicyId());
+        //判断策略是否控制注册回传创角
+        if (gameBackPolicy == null || !Objects.equals(gameBackPolicy.getRoleBackSwitch(), Boolean.TRUE)) {
+            return;
+        }
+        //创角回传
+        MiniGameCallback.MiniGameCallbackRequest request = MiniGameCallback.MiniGameCallbackRequest.builder()
+                .clue_token(userLog.getClueToken())
+                .open_id(userLog.getOpenId())
+                .union_id(userLog.getUnionId())
+                .event_type(String.valueOf(MiniGameCallback.EventType.ACTIVE_REGISTER.getEventType()))
+                .build();
+        BackStatusEnum backStatus = BackStatusEnum.SUCCESS;
+        String errMsg = null;
+        try {
+            miniGameCallback.doCallback(userLog.getAccountReportUrl(), userLog.getAccountReportToken(), request);
+        } catch (OceanengineCallbackException e) {
+            log.error(e.getMessage(), e);
+            backStatus = BackStatusEnum.FAILED;
+            errMsg = e.getMsg();
+        } catch (Exception e) {
+            log.error(e.getMessage(), e);
+            backStatus = BackStatusEnum.FAILED;
+            errMsg = "系统异常:" + e.getMessage();
+        }
+        gameOceanengineBackLogService.save(GameOceanengineBackLog.builder()
+                .appId(userLog.getAppId())
+                .openId(userLog.getOpenId())
+                .unionId(userLog.getUnionId())
+                .gameId(userLog.getGameId())
+                .accountId(userLog.getAccountId())
+                .clueToken(userLog.getClueToken())
+                .eventType(request.getEvent_type())
+                .eventLogId(userLog.getId())
+                .createTime(LocalDateTime.now())
+                .backStatus(backStatus.getBackStatus())
+                .errMsg(errMsg)
+                .build());
+    }
 }

+ 28 - 0
game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/service/impl/GameTencentMiniGameBackLogServiceImpl.java

@@ -44,6 +44,34 @@ public class GameTencentMiniGameBackLogServiceImpl extends ServiceImpl<GameTence
     @Autowired
     private IGameTencentMiniGameCallbackService gameTencentMiniGameCallbackService;
 
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public Tuple2<BackStatusEnum, String> userAndRoleRegisterBack(GameTencentMiniGameUser userLog) {
+        //注册回传
+        Tuple2<BackStatusEnum, String> userBackResult = this.userBack(userLog);
+        //构造创角回传
+        try {
+            GameTencentMiniGameBackLog backLog = GameTencentMiniGameBackLog.builder()
+                    .gameId(userLog.getGameId())
+                    .adAccountId(userLog.getAdAccountId())
+                    .clickId(userLog.getClickId())
+                    .actionTime(userLog.getRegisterTime())
+                    .wechatOpenid(userLog.getWechatOpenid())
+                    .wechatAppId(userLog.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());
+            backLog.setErrMsg(backResult.second);
+            save(backLog);
+        } catch (Exception ignored) {
+        }
+        //返回注册回传结果
+        return userBackResult;
+    }
+
     @Override
     @Transactional(rollbackFor = Exception.class)
     public Tuple2<BackStatusEnum, String> userBack(GameTencentMiniGameUser userLog) {

+ 12 - 0
game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/service/impl/GameTencentMiniGameUserServiceImpl.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.GameTencentMiniGameUserMapper;
 import com.zanxiang.game.back.serve.pojo.dto.GameTencentMiniGameUserDTO;
+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.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.IGameBackPolicyService;
 import com.zanxiang.game.back.serve.service.IGameTencentMiniGameBackLogService;
 import com.zanxiang.game.back.serve.service.IGameTencentMiniGameUserService;
 import com.zanxiang.game.module.base.ServerInfo;
@@ -45,6 +47,8 @@ public class GameTencentMiniGameUserServiceImpl extends ServiceImpl<GameTencentM
     private IUserActionSetRpc userActionSetRpc;
     @Autowired
     private IGameTencentMiniGameBackLogService gameTencentMiniGameBackLogService;
+    @Autowired
+    private IGameBackPolicyService gameBackPolicyService;
     @DubboReference(providedBy = ServerInfo.SERVER_DUBBO_NAME)
     private IAgentRpc agentRpc;
 
@@ -139,6 +143,14 @@ public class GameTencentMiniGameUserServiceImpl extends ServiceImpl<GameTencentM
             //返回注册已回传
             return Tuple2.with(BackStatusEnum.NO, null);
         }
+        //回传策略
+        GameBackPolicy gameBackPolicy = userLog.getBackPolicyId() == null ? null
+                : gameBackPolicyService.getById(userLog.getBackPolicyId());
+        //设置了注册回传创角, 同时回传注册和创角
+        if (gameBackPolicy != null && Objects.equals(gameBackPolicy.getRoleBackSwitch(), Boolean.TRUE)) {
+            return gameTencentMiniGameBackLogService.userAndRoleRegisterBack(userLog);
+        }
+        //正常注册回传
         return gameTencentMiniGameBackLogService.userBack(userLog);
     }