Jelajahi Sumber

fix : 解决玩家被重复买量, AgentLog数据错误的问题

bilingfeng 5 bulan lalu
induk
melakukan
25ae9b587e

+ 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服务启动成功 <新游戏梦回解决订单中CP订单id不正确的问题> ( ´・・)ノ(._.`) \n" +
+        System.out.println("赞象SDK服务启动成功 <解决玩家被重复买量, AgentLog数据错误的问题> ( ´・・)ノ(._.`) \n" +
                 " ___________ _   __\n" +
                 "/  ___|  _  \\ | / /\n" +
                 "\\ `--.| | | | |/ / \n" +

+ 5 - 4
game-module/game-module-sdk/src/main/java/com/zanxiang/game/module/sdk/service/IUserAgentLogService.java

@@ -3,6 +3,7 @@ package com.zanxiang.game.module.sdk.service;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.zanxiang.game.module.mybatis.entity.User;
 import com.zanxiang.game.module.mybatis.entity.UserAgentLog;
+import reactor.util.function.Tuple3;
 
 /**
  * @author : lingfeng
@@ -22,10 +23,10 @@ public interface IUserAgentLogService extends IService<UserAgentLog> {
     /**
      * 代理更新日志
      *
-     * @param user       用户
-     * @param newAgentId 新代理id
-     * @param newChannel 新渠道
+     * @param oldAgentChannel 用户信息
+     * @param newAgentId      新代理id
+     * @param newChannel      新渠道
      * @return boolean
      */
-    boolean agentUpdateLog(User user, Long newAgentId, String newChannel);
+    boolean agentUpdateLog(Tuple3<Long, Long, String> oldAgentChannel, Long newAgentId, String newChannel);
 }

+ 3 - 2
game-module/game-module-sdk/src/main/java/com/zanxiang/game/module/sdk/service/impl/AgentServiceImpl.java

@@ -8,7 +8,6 @@ import com.github.sd4324530.jtuple.Tuple2;
 import com.zanxiang.game.back.base.ServerInfo;
 import com.zanxiang.game.back.base.pojo.dto.TencentAppApiUserAgentQueryRpcDTO;
 import com.zanxiang.game.back.base.rpc.ITencentAppApiBackRpc;
-import com.zanxiang.game.back.base.rpc.ITencentUserActionBackRpc;
 import com.zanxiang.game.module.base.pojo.enums.GameCategoryEnum;
 import com.zanxiang.game.module.mybatis.entity.*;
 import com.zanxiang.game.module.mybatis.mapper.AgentMapper;
@@ -96,6 +95,8 @@ public class AgentServiceImpl extends ServiceImpl<AgentMapper, Agent> implements
             if (agent == null) {
                 return;
             }
+            //保存旧的渠道信息
+            Tuple3<Long, Long, String> oldAgentChannel = Tuples.of(user.getId(), user.getAgentId(), user.getChannel());
             //更新用户信息
             user.setAgentId(agent.getId());
             user.setUpdateTime(LocalDateTime.now());
@@ -107,7 +108,7 @@ public class AgentServiceImpl extends ServiceImpl<AgentMapper, Agent> implements
             }
             userService.updateById(user);
             //添加渠道变更记录
-            userAgentLogService.agentUpdateLog(user, agent.getId(), channel);
+            userAgentLogService.agentUpdateLog(oldAgentChannel, agent.getId(), channel);
             //回传用户信息
             callBackService.userCallBack(user, tuple3.getT2());
             //注册信息埋点数据发送到卡夫卡

+ 3 - 1
game-module/game-module-sdk/src/main/java/com/zanxiang/game/module/sdk/service/impl/CpPushDataServiceImpl.java

@@ -554,13 +554,15 @@ public class CpPushDataServiceImpl implements ICpPushDataService {
         if (agent == null) {
             return Collections.emptyMap();
         }
+        //保存旧的渠道信息
+        Tuple3<Long, Long, String> oldAgentChannel = Tuples.of(user.getId(), user.getAgentId(), user.getChannel());
         //更新用户信息
         user.setAgentId(agent.getId());
         user.setChannel(userData.getChannel());
         user.setUpdateTime(LocalDateTime.now());
         userService.updateById(user);
         //添加渠道变更记录
-        userAgentLogService.agentUpdateLog(user, agent.getId(), userData.getChannel());
+        userAgentLogService.agentUpdateLog(oldAgentChannel, agent.getId(), userData.getChannel());
         //回传用户信息
         callBackService.userCallBack(user, tuple3.getT2());
         //渠道变更信息埋点数据发送到卡夫卡

+ 10 - 8
game-module/game-module-sdk/src/main/java/com/zanxiang/game/module/sdk/service/impl/UserAgentLogServiceImpl.java

@@ -6,9 +6,11 @@ import com.zanxiang.game.module.mybatis.entity.User;
 import com.zanxiang.game.module.mybatis.entity.UserAgentLog;
 import com.zanxiang.game.module.mybatis.mapper.UserAgentLogMapper;
 import com.zanxiang.game.module.sdk.service.IUserAgentLogService;
+import com.zanxiang.module.util.JsonUtil;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.logging.log4j.util.Strings;
 import org.springframework.stereotype.Service;
+import reactor.util.function.Tuple3;
 
 import java.time.LocalDateTime;
 
@@ -35,15 +37,15 @@ public class UserAgentLogServiceImpl extends ServiceImpl<UserAgentLogMapper, Use
     }
 
     @Override
-    public boolean agentUpdateLog(User user, Long newAgentId, String newChannel) {
+    public boolean agentUpdateLog(Tuple3<Long, Long, String> oldAgentChannel, Long newAgentId, String newChannel) {
         if (newAgentId == null || Strings.isBlank(newChannel)) {
             return Boolean.FALSE;
         }
         try {
-            return super.save(this.transform(user, newAgentId, newChannel));
+            return super.save(this.transform(oldAgentChannel, newAgentId, newChannel));
         } catch (Exception e) {
-            log.error("用户渠道更新记录保存异常, userId : {}, newAgentId : {}, newChannel : {}, e : {}",
-                    user.getId(), newAgentId, newChannel, e.getMessage());
+            log.error("用户渠道更新记录保存异常, oldAgentChannel : {}, newAgentId : {}, newChannel : {}, e : {}",
+                    JsonUtil.toString(oldAgentChannel), newAgentId, newChannel, e.getMessage());
         }
         return Boolean.FALSE;
     }
@@ -58,11 +60,11 @@ public class UserAgentLogServiceImpl extends ServiceImpl<UserAgentLogMapper, Use
                 .build();
     }
 
-    private UserAgentLog transform(User user, Long newAgentId, String newChannel) {
+    private UserAgentLog transform(Tuple3<Long, Long, String> oldAgentChannel, Long newAgentId, String newChannel) {
         return UserAgentLog.builder()
-                .userId(user.getId())
-                .oldAgentId(Agent.DEFAULT_AGENT.equals(user.getAgentId()) ? null : user.getAgentId())
-                .oldChannel(Agent.DEFAULT_AGENT.equals(user.getAgentId()) ? null : user.getChannel())
+                .userId(oldAgentChannel.getT1())
+                .oldAgentId(Agent.DEFAULT_AGENT.equals(oldAgentChannel.getT2()) ? null : oldAgentChannel.getT2())
+                .oldChannel(Agent.DEFAULT_AGENT.equals(oldAgentChannel.getT2()) ? null : oldAgentChannel.getT3())
                 .newAgentId(newAgentId)
                 .newChannel(newChannel)
                 .createTime(LocalDateTime.now())