Procházet zdrojové kódy

Merge remote-tracking branch 'origin/package' into package

zhangxianyu před 2 měsíci
rodič
revize
dc2b52b1f9

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

@@ -386,8 +386,8 @@ implements IGameTencentAppApiOrderService {
                         .eq(GameTencentAppApiOrder::getOrderStatus, OrderStatusEnum.SUCCESS_PAY.getValue())
                         .eq(GameTencentAppApiOrder::getIsBack, BackStatusEnum.SUCCESS.getBackStatus())
                         .eq(GameTencentAppApiOrder::getUserId, userId)
-                        .apply(firstPolicy, "date(recharge_time) = date(pay_time)")
-                        .apply(!firstPolicy, "date(recharge_time) != date(pay_time)")
+                        .apply(firstPolicy, "date(register_time) = date(pay_time)")
+                        .apply(!firstPolicy, "date(register_time) != date(pay_time)")
                         .ne(GameTencentAppApiOrder::getOrderId, orderLog.getOrderId())
                 );
             } else if (backUnit == BackUnitEnum.UNIT_TIME_DAY) {

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

@@ -527,8 +527,8 @@ public class GameTencentMiniGameOrderServiceImpl extends ServiceImpl<GameTencent
                         .eq(GameTencentMiniGameOrder::getOrderStatus, OrderStatusEnum.SUCCESS_PAY.getValue())
                         .eq(GameTencentMiniGameOrder::getBackStatus, BackStatusEnum.SUCCESS.getBackStatus())
                         .eq(GameTencentMiniGameOrder::getWechatOpenid, userId)
-                        .apply(firstPolicy, "date(recharge_time) = date(pay_time)")
-                        .apply(!firstPolicy, "date(recharge_time) != date(pay_time)")
+                        .apply(firstPolicy, "date(register_time) = date(pay_time)")
+                        .apply(!firstPolicy, "date(register_time) != date(pay_time)")
                         .ne(GameTencentMiniGameOrder::getOrderId, orderLog.getOrderId())
                         .eq(GameTencentMiniGameOrder::getBackType, backTypeEnum.getBackType())
                 );

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

@@ -454,8 +454,8 @@ public class GameTencentOrderServiceImpl extends ServiceImpl<GameTencentOrderMap
                         .eq(GameTencentOrder::getOrderStatus, OrderStatusEnum.SUCCESS_PAY.getValue())
                         .eq(GameTencentOrder::getIsBack, BackStatusEnum.SUCCESS.getBackStatus())
                         .eq(GameTencentOrder::getWechatOpenid, userId)
-                        .apply(firstPolicy, "date(recharge_time) = date(pay_time)")
-                        .apply(!firstPolicy, "date(recharge_time) != date(pay_time)")
+                        .apply(firstPolicy, "date(register_time) = date(pay_time)")
+                        .apply(!firstPolicy, "date(register_time) != date(pay_time)")
                         .ne(GameTencentOrder::getOrderId, orderLog.getOrderId())
                 );
             } else if (backUnit == BackUnitEnum.UNIT_TIME_DAY) {

+ 18 - 0
game-module/game-module-base/src/main/java/com/zanxiang/game/module/base/rpc/IUserRpc.java

@@ -0,0 +1,18 @@
+package com.zanxiang.game.module.base.rpc;
+
+/**
+ * @author : lingfeng
+ * @time : 2025-02-13
+ * @description : 玩家相关接口
+ */
+public interface IUserRpc {
+
+    /**
+     * 小游戏导量其他端
+     *
+     * @param userId : 玩家id
+     * @param gameId : 游戏id
+     * @param mobile : 手机号
+     */
+    void appletToOther(Long userId, Long gameId, String mobile);
+}

+ 1 - 1
game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/ManageApplication.java

@@ -23,7 +23,7 @@ public class ManageApplication {
 
     public static void main(String[] args) {
         SpringApplication.run(ManageApplication.class, args);
-        System.out.println("赞象Manage服务启动成功 < (IP解析历史数据处理新增线程池调试02 ・・)ノ(._.`) \n" +
+        System.out.println("赞象Manage服务启动成功 < (小游戏绑定手机号自动转端rpc接口新增 ・・)ノ(._.`) \n" +
                 "___  ___  ___   _   _   ___  _____  _____ \n" +
                 "|  \\/  | / _ \\ | \\ | | / _ \\|  __ \\|  ___|\n" +
                 "| .  . |/ /_\\ \\|  \\| |/ /_\\ \\ |  \\/| |__  \n" +

+ 52 - 0
game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/rpc/impl/UserRpcImpl.java

@@ -0,0 +1,52 @@
+package com.zanxiang.game.module.manage.rpc.impl;
+
+import com.zanxiang.game.module.base.rpc.IUserRpc;
+import com.zanxiang.game.module.manage.pojo.dto.GameDTO;
+import com.zanxiang.game.module.manage.service.IGameService;
+import com.zanxiang.game.module.manage.service.IUserService;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.dubbo.config.annotation.DubboService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Async;
+
+/**
+ * @author : lingfeng
+ * @time : 2025-02-13
+ * @description : 玩家相关接口
+ */
+@Slf4j
+@DubboService
+public class UserRpcImpl implements IUserRpc {
+
+    @Autowired
+    private IUserService userService;
+
+    @Autowired
+    private IGameService gameService;
+
+    @Async
+    @Override
+    public void appletToOther(Long userId, Long gameId, String mobile) {
+        try {
+            //查询游戏信息
+            GameDTO gameDTO = gameService.getById(gameId);
+            if (gameDTO == null) {
+                return;
+            }
+            //判断是否存在H5端游戏
+            if (gameDTO.getH5GameId() != null) {
+                userService.appletToH5(userId, mobile, 1);
+            }
+            //判断是否存在安卓端APP游戏
+            if (gameDTO.getAndroidGameId() != null) {
+                userService.appletToH5(userId, mobile, 2);
+            }
+            //判断是否存在IOS端APP游戏
+            if (gameDTO.getIosGameId() != null) {
+                userService.appletToH5(userId, mobile, 3);
+            }
+        } catch (Exception e) {
+            log.error("执行玩家导量异常, userId : {}, mobile : {}, e : {}", userId, mobile, e.getMessage());
+        }
+    }
+}

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

@@ -25,7 +25,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" +

+ 28 - 1
game-module/game-module-sdk/src/main/java/com/zanxiang/game/module/sdk/service/impl/OrderServiceImpl.java

@@ -1,8 +1,10 @@
 package com.zanxiang.game.module.sdk.service.impl;
 
+import com.alibaba.fastjson2.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.zanxiang.game.back.base.pojo.enums.OrderStatusEnum;
+import com.zanxiang.game.module.base.pojo.enums.GameCategoryEnum;
 import com.zanxiang.game.module.mybatis.entity.*;
 import com.zanxiang.game.module.mybatis.mapper.OrderMapper;
 import com.zanxiang.game.module.sdk.enums.KafkaEventTrackEnum;
@@ -64,7 +66,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
         //游戏信息
         Game game = gameService.getById(gameId);
         if (Objects.equals(game.getRechargeCloseSwitch(), Boolean.TRUE)) {
-            throw new BaseException("游戏已经关闭充值, 禁止操作");
+            this.rechargeCloseCheck(game, user);
         }
         //玩家信息
         GameUser gameUser = gameUserService.getOne(new LambdaQueryWrapper<GameUser>()
@@ -96,6 +98,18 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
         return Boolean.TRUE;
     }
 
+    private void rechargeCloseCheck(Game game, User user){
+        //暗影防线禁止充值
+        if (Objects.equals(game.getId(), 2L)){
+            throw new BaseException("游戏已经关闭充值, 禁止操作");
+        }
+        //仙剑APP导量玩家禁止充值, 直接APP注册的玩家正常充值
+        if (Objects.equals(game.getSuperGameId(), 12L) && user.getRelationUserId() != null
+                && Objects.equals(game.getCategory(), GameCategoryEnum.CATEGORY_APP.getId())) {
+            throw new BaseException("APP专注畅快游戏体验,充值请回小程序享受完整服务");
+        }
+    }
+
     private Order transform(UserData userData, String orderNum, ProductPayParam payParam, User user, GameUser gameUser,
                             Game game, GameUserRole gameUserRole, GamePayWayDTO gamePayWayDTO) {
         Order order = Order.builder()
@@ -141,6 +155,19 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
                 && !Objects.equals(order.getCpOrderId(), order.getExt())) {
             order.setCpOrderId(order.getExt());
         }
+        //仙剑安卓APP端CP订单id修正, ext字段中包含了订单id
+        if (Objects.equals(gameSupper.getId(), 12L) && Strings.isNotBlank(order.getExt())
+                && Objects.equals(game.getCategory(), GameCategoryEnum.CATEGORY_APP.getId())) {
+            //解析订单id, 若订单中的CP订单id不对, 则修正
+            String cpOrderId = null;
+            try {
+                cpOrderId = JSONObject.parse(order.getExt()).getString("orderId");
+            } catch (Exception ignored) {
+            }
+            if (Strings.isNotBlank(cpOrderId) && !Objects.equals(cpOrderId, order.getCpOrderId())) {
+                order.setCpOrderId(cpOrderId);
+            }
+        }
         return order;
     }
 

+ 8 - 0
game-module/game-module-sdk/src/main/java/com/zanxiang/game/module/sdk/service/impl/SmsServiceImpl.java

@@ -3,7 +3,9 @@ package com.zanxiang.game.module.sdk.service.impl;
 import cn.hutool.core.util.RandomUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.zanxiang.game.module.base.ServerInfo;
 import com.zanxiang.game.module.base.pojo.enums.HttpStatusEnum;
+import com.zanxiang.game.module.base.rpc.IUserRpc;
 import com.zanxiang.game.module.mybatis.entity.Game;
 import com.zanxiang.game.module.mybatis.entity.User;
 import com.zanxiang.game.module.sdk.constant.RedisKeyConstant;
@@ -24,6 +26,7 @@ import com.zanxiang.module.sms.service.impl.AliSmsService;
 import com.zanxiang.module.util.exception.BaseException;
 import com.zanxiang.module.util.pojo.ResultVO;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.dubbo.config.annotation.DubboReference;
 import org.apache.logging.log4j.util.Strings;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -43,6 +46,9 @@ import java.util.Objects;
 @Service
 public class SmsServiceImpl implements ISmsService {
 
+    @DubboReference(providedBy = ServerInfo.SERVER_DUBBO_NAME)
+    private IUserRpc userRpc;
+
     @Autowired
     private IUserService userService;
 
@@ -132,6 +138,8 @@ public class SmsServiceImpl implements ISmsService {
                 .set(User::getMobileBindTime, LocalDateTime.now())
                 .set(User::getUpdateTime, LocalDateTime.now())
                 .eq(User::getId, userData.getUserId()));
+        //通知游戏后台转端初始化
+        userRpc.appletToOther(userData.getUserId(), userData.getGameId(), param.getMobile());
         //返回结果
         return this.buildResultMap(Boolean.TRUE, "绑定成功");
     }