Bläddra i källkod

修改内容:回传策略工具类

shishaosong 2 år sedan
förälder
incheckning
b20ad1d234

+ 11 - 27
game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/service/impl/GameBackPolicyServiceImpl.java

@@ -25,6 +25,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.zanxiang.game.back.serve.service.IGameTencentBackLogService;
 import com.zanxiang.game.back.serve.service.IGameTencentOrderService;
 import com.zanxiang.game.back.serve.service.IGameTencentUserService;
+import com.zanxiang.game.back.serve.utils.BackPolicyUtil;
 import com.zanxiang.module.util.exception.BaseException;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
@@ -83,15 +84,6 @@ public class GameBackPolicyServiceImpl extends ServiceImpl<GameBackPolicyMapper,
                     .build();
             gameTencentOrderService.save(gameTencentOrder);
         }
-
-        GameBackPolicy gameBackPolicy = gameBackPolicyService.getOne(new LambdaQueryWrapper<GameBackPolicy>()
-                .eq(GameBackPolicy::getGameId, dto.getGameId())
-                .eq(GameBackPolicy::getAccountId, dto.getAdAccountId()));
-        if (null == gameBackPolicy) {
-            gameBackPolicy = gameBackPolicyService.getOne(new LambdaQueryWrapper<GameBackPolicy>()
-                    .eq(GameBackPolicy::getGameId, dto.getGameId())
-                    .isNull(GameBackPolicy::getAccountId));
-        }
         DataReportOfAppIdRpcDTO dataReportOfAppIdRpcDTO = DataReportOfAppIdRpcDTO.builder()
                 .appId(dto.getWechatAppId())
                 .action(UserActionRpcDTO.builder()
@@ -114,29 +106,21 @@ public class GameBackPolicyServiceImpl extends ServiceImpl<GameBackPolicyMapper,
                 .wechatAppId(dto.getWechatAppId())
                 .wechatOpenid(dto.getWechatOpenid())
                 .build();
+
+        GameBackPolicy gameBackPolicy = gameBackPolicyService.getOne(new LambdaQueryWrapper<GameBackPolicy>()
+                .eq(GameBackPolicy::getGameId, dto.getGameId())
+                .eq(GameBackPolicy::getAccountId, dto.getAdAccountId()));
+        if (null == gameBackPolicy) {
+            gameBackPolicy = gameBackPolicyService.getOne(new LambdaQueryWrapper<GameBackPolicy>()
+                    .eq(GameBackPolicy::getGameId, dto.getGameId())
+                    .isNull(GameBackPolicy::getAccountId));
+        }
         try {
-            if (null == gameBackPolicy) {
+            if (BackPolicyUtil.isBackOrder(gameBackPolicy, dto.getRechargeMoney())) {
                 userActionSetRpc.reportByAppId(dataReportOfAppIdRpcDTO);
                 gameTencentBackLogService.save(gameTencentBackLog);
                 gameTencentOrder.setIsBack(1);
                 gameTencentOrderService.updateById(gameTencentOrder);
-            } else {
-                if (dto.getRechargeMoney() <= gameBackPolicy.getFirstRechargeMoney() && shouldDoTask(gameBackPolicy.getFirstRechargeBackPercentage())) {
-                    userActionSetRpc.reportByAppId(dataReportOfAppIdRpcDTO);
-                    gameTencentBackLogService.save(gameTencentBackLog);
-                    gameTencentOrder.setIsBack(1);
-                    gameTencentOrderService.updateById(gameTencentOrder);
-                } else if (dto.getRechargeMoney() >= gameBackPolicy.getFirstRechargeMoney() && shouldDoTask(gameBackPolicy.getBigRechargeBackPercentage())) {
-                    userActionSetRpc.reportByAppId(dataReportOfAppIdRpcDTO);
-                    gameTencentBackLogService.save(gameTencentBackLog);
-                    gameTencentOrder.setIsBack(1);
-                    gameTencentOrderService.updateById(gameTencentOrder);
-                } else if (shouldDoTask(gameBackPolicy.getOtherRechargeBackPercentage())) {
-                    userActionSetRpc.reportByAppId(dataReportOfAppIdRpcDTO);
-                    gameTencentBackLogService.save(gameTencentBackLog);
-                    gameTencentOrder.setIsBack(1);
-                    gameTencentOrderService.updateById(gameTencentOrder);
-                }
             }
         } catch (Exception e) {
             log.error("回传腾讯订单失败,失败原因:{}", e.getMessage());

+ 31 - 0
game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/utils/BackPolicyUtil.java

@@ -0,0 +1,31 @@
+package com.zanxiang.game.back.serve.utils;
+
+import com.zanxiang.game.back.serve.pojo.entity.GameBackPolicy;
+
+import java.math.BigDecimal;
+import java.util.Random;
+
+public class BackPolicyUtil {
+
+    public static boolean isBackOrder(GameBackPolicy gameBackPolicy, Long rechargeMoney) {
+        if (null == gameBackPolicy) {
+            return true;
+        } else {
+            if (rechargeMoney <= gameBackPolicy.getFirstRechargeMoney() && shouldDoTask(gameBackPolicy.getFirstRechargeBackPercentage())) {
+                return true;
+            } else if (rechargeMoney >= gameBackPolicy.getFirstRechargeMoney() && shouldDoTask(gameBackPolicy.getBigRechargeBackPercentage())) {
+                return true;
+            } else {
+                return shouldDoTask(gameBackPolicy.getOtherRechargeBackPercentage());
+            }
+        }
+    }
+
+    private static boolean shouldDoTask(BigDecimal successProbability) {
+        Random random = new Random();
+        // 生成一个0到1之间的随机数
+        double randomValue = random.nextDouble();
+        // 如果随机数小于成功概率,则返回true,否则返回false
+        return successProbability.compareTo(BigDecimal.valueOf(randomValue)) > 0;
+    }
+}