wcc преди 9 месеца
родител
ревизия
fe0ee15e5f

+ 4 - 0
game-back/game-back-base/src/main/java/com/zanxiang/game/back/base/pojo/dto/TtAppUserAgentQueryRpcDTO.java

@@ -10,6 +10,10 @@ public class TtAppUserAgentQueryRpcDTO implements Serializable {
 
     private Long gameId;
 
+    private Long userId;
+
+    private String mac;
+
     /**
      * 设备唯一编号IMEI
      */

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

@@ -70,4 +70,6 @@ public class TtUserActiveAppRpcDTO implements Serializable {
      * IOS设备CAID
      */
     private String caid;
+
+    private String regIp;
 }

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

@@ -86,5 +86,7 @@ public class GameOceanengineAppUserLog implements Serializable {
 
     private LocalDateTime createTime;
 
+    private String ip;
+
 
 }

+ 9 - 1
game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/rpc/impl/TtAppBackRpcImpl.java

@@ -92,6 +92,7 @@ public class TtAppBackRpcImpl implements ITtAppBackRpc {
                 .accountId(dto.getAccountReport().getAccountId())
                 .agentKey(dto.getAgentKey())
                 .activeTime(dto.getActiveTime())
+                .ip(dto.getRegIp())
                 .backStatus(BackStatusEnum.NO.getBackStatus())
                 .createTime(LocalDateTime.now())
                 .build();
@@ -268,7 +269,14 @@ public class TtAppBackRpcImpl implements ITtAppBackRpc {
 
     @Override
     public ResultVO<String> queryUserAgentFromCallback(TtAppUserAgentQueryRpcDTO dto) {
-        GameOceanengineAppCallback callback = gameOceanengineAppCallbackService.getUserCallback(dto.getGameId(), dto.getImei(), dto.getOaid(), dto.getAndroidId(), dto.getIdfa(), dto.getCaid());
+        GameOceanengineAppUserLog userLog = gameOceanengineAppUserLogService.getOne(new LambdaQueryWrapper<GameOceanengineAppUserLog>()
+                        .eq(GameOceanengineAppUserLog::getGameId, dto.getGameId())
+                .eq(GameOceanengineAppUserLog::getUserId, dto.getUserId())
+        );
+        if (userLog == null) {
+            return ResultVO.fail("找不到用户. gameId: " + dto.getGameId() + ", userId: " + dto.getUserId());
+        }
+        GameOceanengineAppCallback callback = gameOceanengineAppCallbackService.getUserCallback(dto.getGameId(), dto.getOaid(), dto.getMac(), dto.getIdfa(), dto.getCaid(), userLog.getIp(), userLog.getActiveTime());
         return ResultVO.ok(callback == null ? null : callback.getAgentKey());
     }
 

+ 3 - 1
game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/service/IGameOceanengineAppCallbackService.java

@@ -4,9 +4,11 @@ import com.baomidou.mybatisplus.extension.service.IService;
 import com.zanxiang.game.back.serve.pojo.dto.GameOceanengineAppCallbackDTO;
 import com.zanxiang.game.back.serve.pojo.entity.GameOceanengineAppCallback;
 
+import java.time.LocalDateTime;
+
 public interface IGameOceanengineAppCallbackService extends IService<GameOceanengineAppCallback> {
 
     boolean callback(GameOceanengineAppCallbackDTO dto);
 
-    GameOceanengineAppCallback getUserCallback(Long gameId, String imei, String oaid, String android, String idfa, String caid);
+    GameOceanengineAppCallback getUserCallback(Long gameId, String oaid, String mac, String idfa, String caid, String ip, LocalDateTime regTime);
 }

+ 16 - 11
game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/service/impl/GameOceanengineAppCallbackServiceImpl.java

@@ -24,6 +24,7 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import java.time.LocalDate;
+import java.time.LocalDateTime;
 
 @Slf4j
 @Service
@@ -63,24 +64,28 @@ implements IGameOceanengineAppCallbackService {
     }
 
     @Override
-    public GameOceanengineAppCallback getUserCallback(Long gameId, String imei, String oaid, String android, String idfa, String caid) {
+    public GameOceanengineAppCallback getUserCallback(Long gameId, String oaid, String mac, String idfa, String caid, String ip, LocalDateTime regTime) {
         LambdaQueryWrapper<GameOceanengineAppCallback> qw = new LambdaQueryWrapper<GameOceanengineAppCallback>()
+                .lt(GameOceanengineAppCallback::getTs, DateUtil.localDateTimeToMilli(regTime))
                 .eq(GameOceanengineAppCallback::getGameId, gameId)
                 .orderByDesc(GameOceanengineAppCallback::getTs)
                 .last("limit 1");
-        if (StringUtils.isNoneBlank(imei) || StringUtils.isNoneBlank(android) || StringUtils.isNoneBlank(oaid)) {
-            qw.and(and -> {
-                and.eq(StringUtils.isNoneBlank(imei), GameOceanengineAppCallback::getImei, StringUtils.isBlank(imei) ? null : Md5Util.encrypt32(imei).toLowerCase())
-                        .or().eq(StringUtils.isNoneBlank(android), GameOceanengineAppCallback::getAndroidid, StringUtils.isBlank(android) ? null : Md5Util.encrypt32(android).toLowerCase())
-                        .or().eq(StringUtils.isNoneBlank(oaid), GameOceanengineAppCallback::getOaid, oaid)
+
+        qw.and(and -> {
+            if(StringUtils.isNoneBlank(oaid)) {
+                and.eq(StringUtils.isNoneBlank(oaid), GameOceanengineAppCallback::getOaid, oaid)
                         .or().eq(StringUtils.isNoneBlank(oaid), GameOceanengineAppCallback::getOaidMd5, StringUtils.isBlank(oaid) ? null : Md5Util.encrypt32(oaid).toLowerCase());
-            });
-        } else if (StringUtils.isNoneBlank(idfa)) {
-            qw.and(and -> {
+            }
+            if (StringUtils.isNoneBlank(idfa)) {
                 and.eq(GameOceanengineAppCallback::getIdfaMd5, StringUtils.isBlank(idfa) ? null : Md5Util.encrypt32(idfa).toLowerCase())
                         .or().eq(GameOceanengineAppCallback::getIdfa, idfa);
-            });
-        }
+            }
+            and.or().eq(StringUtils.isNoneBlank(mac), GameOceanengineAppCallback::getMac, StringUtils.isBlank(oaid) ? null : Md5Util.encrypt32(mac.replaceAll(":","").toUpperCase()).toLowerCase())
+                    .or().and(StringUtils.isNoneBlank(ip), tmp -> {
+                        tmp.ge(GameOceanengineAppCallback::getTs, DateUtil.localDateTimeToMilli(regTime.plusDays(2)))
+                                .eq(GameOceanengineAppCallback::getIp, ip);
+                    });
+        });
         return getOne(qw);
     }
 }