Kaynağa Gözat

回传策略的 bug

wcc 1 yıl önce
ebeveyn
işleme
6a7ed37422

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

@@ -47,6 +47,10 @@ public class GameTencentMiniGameOrderServiceImpl extends ServiceImpl<GameTencent
     @Override
     @Override
     @Transactional(rollbackFor = Exception.class)
     @Transactional(rollbackFor = Exception.class)
     public boolean orderBack(GameTencentMiniGameOrder orderLog, boolean mustBack) {
     public boolean orderBack(GameTencentMiniGameOrder orderLog, boolean mustBack) {
+        if (StringUtils.isBlank(orderLog.getClickId())) {
+            // 没有点击 id(之后做监测链接,从监测链接里面找)
+            return false;
+        }
         boolean doBack = false;
         boolean doBack = false;
         if (mustBack) {
         if (mustBack) {
             doBack = true;
             doBack = true;
@@ -55,35 +59,31 @@ public class GameTencentMiniGameOrderServiceImpl extends ServiceImpl<GameTencent
                 // 只要回传 支付行为
                 // 只要回传 支付行为
                 return false;
                 return false;
             }
             }
-        }
-        if (StringUtils.isBlank(orderLog.getClickId())) {
-            // 没有点击 id(之后做监测链接,从监测链接里面找)
-            return false;
-        }
-        if (orderLog.getBackPolicyId() == null) {
-            // 没有回传策略,则直接全量回传
-            doBack = true;
-        } else {
-            GameBackPolicy gameBackPolicy = gameBackPolicyService.getById(orderLog.getBackPolicyId());
-            doBack = BackPolicyUtil.backOrder(orderLog.getOrderId(), gameBackPolicy, orderLog.getRechargeMoney(),
-                    () -> count(new LambdaQueryWrapper<GameTencentMiniGameOrder>()
-                            .eq(GameTencentMiniGameOrder::getGameId, orderLog.getGameId())
-                            .eq(GameTencentMiniGameOrder::getWechatAppId, orderLog.getWechatAppId())
-                            .eq(GameTencentMiniGameOrder::getAdAccountId, orderLog.getAdAccountId())
-                            .eq(GameTencentMiniGameOrder::getOrderStatus, OrderStatusEnum.SUCCESS_PAY.getValue())
-                            .eq(GameTencentMiniGameOrder::getWechatOpenid, orderLog.getWechatOpenid())
-                            .last("limit 1")
-                    ) < 1, backUnit -> Long.valueOf(list(new LambdaQueryWrapper<GameTencentMiniGameOrder>()
-                                    .eq(GameTencentMiniGameOrder::getGameId, orderLog.getGameId())
-                                    .eq(GameTencentMiniGameOrder::getWechatAppId, orderLog.getWechatAppId())
-                                    .eq(GameTencentMiniGameOrder::getAdAccountId, orderLog.getAdAccountId())
-                                    .eq(GameTencentMiniGameOrder::getOrderStatus, OrderStatusEnum.SUCCESS_PAY.getValue())
-                                    .eq(GameTencentMiniGameOrder::getBackPolicyId, gameBackPolicy.getId())
-                                    .orderByDesc(GameTencentMiniGameOrder::getCreateTime)
-                                    .last("limit " + backUnit)
-                            ).stream().filter(log -> log.getBackStatus().equals(BackStatusEnum.SUCCESS.getBackStatus())).count()
-                    ).intValue());
-            orderLog.setRechargeMoney(BackPolicyUtil.lowRechargeLevel(orderLog.getRechargeMoney(), gameBackPolicy.getLevelDown()));
+            if (orderLog.getBackPolicyId() == null) {
+                // 没有回传策略,则直接全量回传
+                doBack = true;
+            } else {
+                GameBackPolicy gameBackPolicy = gameBackPolicyService.getById(orderLog.getBackPolicyId());
+                doBack = BackPolicyUtil.backOrder(orderLog.getOrderId(), gameBackPolicy, orderLog.getRechargeMoney(),
+                        () -> count(new LambdaQueryWrapper<GameTencentMiniGameOrder>()
+                                .eq(GameTencentMiniGameOrder::getGameId, orderLog.getGameId())
+                                .eq(GameTencentMiniGameOrder::getWechatAppId, orderLog.getWechatAppId())
+                                .eq(GameTencentMiniGameOrder::getAdAccountId, orderLog.getAdAccountId())
+                                .eq(GameTencentMiniGameOrder::getOrderStatus, OrderStatusEnum.SUCCESS_PAY.getValue())
+                                .eq(GameTencentMiniGameOrder::getWechatOpenid, orderLog.getWechatOpenid())
+                                .last("limit 1")
+                        ) < 1, backUnit -> Long.valueOf(list(new LambdaQueryWrapper<GameTencentMiniGameOrder>()
+                                        .eq(GameTencentMiniGameOrder::getGameId, orderLog.getGameId())
+                                        .eq(GameTencentMiniGameOrder::getWechatAppId, orderLog.getWechatAppId())
+                                        .eq(GameTencentMiniGameOrder::getAdAccountId, orderLog.getAdAccountId())
+                                        .eq(GameTencentMiniGameOrder::getOrderStatus, OrderStatusEnum.SUCCESS_PAY.getValue())
+                                        .eq(GameTencentMiniGameOrder::getBackPolicyId, gameBackPolicy.getId())
+                                        .orderByDesc(GameTencentMiniGameOrder::getCreateTime)
+                                        .last("limit " + backUnit)
+                                ).stream().filter(log -> log.getBackStatus().equals(BackStatusEnum.SUCCESS.getBackStatus())).count()
+                        ).intValue());
+                orderLog.setRechargeMoney(BackPolicyUtil.lowRechargeLevel(orderLog.getRechargeMoney(), gameBackPolicy.getLevelDown()));
+            }
         }
         }
         if (doBack) {
         if (doBack) {
             BackStatusEnum backStatus = gameTencentMiniGameBackLogService.orderBack(orderLog);
             BackStatusEnum backStatus = gameTencentMiniGameBackLogService.orderBack(orderLog);

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

@@ -69,31 +69,31 @@ public class GameTencentOrderServiceImpl extends ServiceImpl<GameTencentOrderMap
                 // 只要回传 支付行为
                 // 只要回传 支付行为
                 return false;
                 return false;
             }
             }
-        }
-        if (orderLog.getBackPolicyId() == null) {
-            // 没有回传策略,则直接全量回传
-            doBack = true;
-        } else {
-            GameBackPolicy gameBackPolicy = gameBackPolicyService.getById(orderLog.getBackPolicyId());
-            doBack = BackPolicyUtil.backOrder(orderLog.getOrderId(), gameBackPolicy, orderLog.getRechargeMoney(),
-                    () -> count(new LambdaQueryWrapper<GameTencentOrder>()
-                            .eq(GameTencentOrder::getGameId, orderLog.getGameId())
-                            .eq(GameTencentOrder::getWechatAppId, orderLog.getWechatAppId())
-                            .eq(GameTencentOrder::getAdAccountId, orderLog.getAdAccountId())
-                            .eq(GameTencentOrder::getOrderStatus, OrderStatusEnum.SUCCESS_PAY.getValue())
-                            .eq(GameTencentOrder::getWechatOpenid, orderLog.getWechatOpenid())
-                            .last("limit 1")
-                    ) < 1, backUnit -> Long.valueOf(list(new LambdaQueryWrapper<GameTencentOrder>()
-                                    .eq(GameTencentOrder::getGameId, orderLog.getGameId())
-                                    .eq(GameTencentOrder::getWechatAppId, orderLog.getWechatAppId())
-                                    .eq(GameTencentOrder::getAdAccountId, orderLog.getAdAccountId())
-                                    .eq(GameTencentOrder::getBackPolicyId, gameBackPolicy.getId())
-                                    .eq(GameTencentOrder::getOrderStatus, OrderStatusEnum.SUCCESS_PAY.getValue())
-                                    .orderByDesc(GameTencentOrder::getCreateTime)
-                                    .last("limit " + backUnit)
-                            ).stream().filter(log -> log.getIsBack().equals(BackStatusEnum.SUCCESS.getBackStatus())).count()
-                    ).intValue());
-            orderLog.setRechargeMoney(BackPolicyUtil.lowRechargeLevel(orderLog.getRechargeMoney(), gameBackPolicy.getLevelDown()));
+            if (orderLog.getBackPolicyId() == null) {
+                // 没有回传策略,则直接全量回传
+                doBack = true;
+            } else {
+                GameBackPolicy gameBackPolicy = gameBackPolicyService.getById(orderLog.getBackPolicyId());
+                doBack = BackPolicyUtil.backOrder(orderLog.getOrderId(), gameBackPolicy, orderLog.getRechargeMoney(),
+                        () -> count(new LambdaQueryWrapper<GameTencentOrder>()
+                                .eq(GameTencentOrder::getGameId, orderLog.getGameId())
+                                .eq(GameTencentOrder::getWechatAppId, orderLog.getWechatAppId())
+                                .eq(GameTencentOrder::getAdAccountId, orderLog.getAdAccountId())
+                                .eq(GameTencentOrder::getOrderStatus, OrderStatusEnum.SUCCESS_PAY.getValue())
+                                .eq(GameTencentOrder::getWechatOpenid, orderLog.getWechatOpenid())
+                                .last("limit 1")
+                        ) < 1, backUnit -> Long.valueOf(list(new LambdaQueryWrapper<GameTencentOrder>()
+                                        .eq(GameTencentOrder::getGameId, orderLog.getGameId())
+                                        .eq(GameTencentOrder::getWechatAppId, orderLog.getWechatAppId())
+                                        .eq(GameTencentOrder::getAdAccountId, orderLog.getAdAccountId())
+                                        .eq(GameTencentOrder::getBackPolicyId, gameBackPolicy.getId())
+                                        .eq(GameTencentOrder::getOrderStatus, OrderStatusEnum.SUCCESS_PAY.getValue())
+                                        .orderByDesc(GameTencentOrder::getCreateTime)
+                                        .last("limit " + backUnit)
+                                ).stream().filter(log -> log.getIsBack().equals(BackStatusEnum.SUCCESS.getBackStatus())).count()
+                        ).intValue());
+                orderLog.setRechargeMoney(BackPolicyUtil.lowRechargeLevel(orderLog.getRechargeMoney(), gameBackPolicy.getLevelDown()));
+            }
         }
         }
         if (doBack) {
         if (doBack) {
             BackStatusEnum backStatus = doCallback(orderLog);
             BackStatusEnum backStatus = doCallback(orderLog);

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

@@ -91,7 +91,7 @@ public class BackPolicyUtil {
             return isBackCount < backCount;
             return isBackCount < backCount;
         } else if (Objects.equals(backType, GameBackPolicy.POLICY_TYPE_RANDOM_RATE)) {
         } else if (Objects.equals(backType, GameBackPolicy.POLICY_TYPE_RANDOM_RATE)) {
             // 随机概率回传
             // 随机概率回传
-            boolean isBack = RandomUtils.nextInt(0, 100) <= NumberUtil.multiply100(new BigDecimal(backRate)).intValue();
+            boolean isBack = RandomUtils.nextInt(0, 100) < NumberUtil.multiply100(new BigDecimal(backRate)).intValue();
             log.error("订单 id[{}]通过回传策略[{}]判断后,是否回传:{}.", orderId, gameBackPolicy.getId(), isBack);
             log.error("订单 id[{}]通过回传策略[{}]判断后,是否回传:{}.", orderId, gameBackPolicy.getId(), isBack);
             return isBack;
             return isBack;
         } else {
         } else {

+ 76 - 0
game-back/game-back-serve/src/main/resources/logback.xml

@@ -0,0 +1,76 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<configuration scan="false" scanPeriod="60 seconds" debug="false">
+    <!-- 日志存放路径 -->
+    <property name="log.path" value="${user.home}/logs"/>
+    <!-- 日志输出格式 -->
+    <property name="log.pattern" value="%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{20} - [%method,%line] - %msg%n"/>
+    :ss} %-5level ${springAppName:-} %thread %logger %msg%n"/>
+
+    <!-- 控制台输出 -->
+    <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
+        <encoder>
+            <pattern>${log.pattern}</pattern>
+        </encoder>
+    </appender>
+
+    <!-- 系统日志输出 -->
+    <appender name="file_info" class="ch.qos.logback.core.rolling.RollingFileAppender">
+        <file>${log.path}/info.log</file>
+        <!-- 循环政策:基于时间创建日志文件 -->
+        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+            <!-- 日志文件名格式 -->
+            <fileNamePattern>${log.path}/info.%d{yyyy-MM-dd}.log</fileNamePattern>
+            <!-- 日志最大的历史 60天 -->
+            <maxHistory>60</maxHistory>
+        </rollingPolicy>
+        <encoder>
+            <pattern>${log.pattern}</pattern>
+        </encoder>
+        <filter class="ch.qos.logback.classic.filter.LevelFilter">
+            <!-- 过滤的级别 -->
+            <level>INFO</level>
+            <!-- 匹配时的操作:接收(记录) -->
+            <onMatch>ACCEPT</onMatch>
+            <!-- 不匹配时的操作:拒绝(不记录) -->
+            <onMismatch>DENY</onMismatch>
+        </filter>
+    </appender>
+
+    <appender name="file_error" class="ch.qos.logback.core.rolling.RollingFileAppender">
+        <file>${log.path}/error.log</file>
+        <!-- 循环政策:基于时间创建日志文件 -->
+        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+            <!-- 日志文件名格式 -->
+            <fileNamePattern>${log.path}/error.%d{yyyy-MM-dd}.log</fileNamePattern>
+            <!-- 日志最大的历史 60天 -->
+            <maxHistory>60</maxHistory>
+        </rollingPolicy>
+        <encoder>
+            <pattern>${log.pattern}</pattern>
+        </encoder>
+        <filter class="ch.qos.logback.classic.filter.LevelFilter">
+            <!-- 过滤的级别 -->
+            <level>ERROR</level>
+            <!-- 匹配时的操作:接收(记录) -->
+            <onMatch>ACCEPT</onMatch>
+            <!-- 不匹配时的操作:拒绝(不记录) -->
+            <onMismatch>DENY</onMismatch>
+        </filter>
+    </appender>
+
+    <!-- 系统模块日志级别控制  -->
+    <logger name="com.zanxiang" level="info"/>
+    <!-- Spring日志级别控制  -->
+    <logger name="org.springframework" level="warn"/>
+
+    <root level="info">
+        <appender-ref ref="console"/>
+    </root>
+
+    <!--系统操作日志-->
+    <root level="info">
+        <appender-ref ref="file_info"/>
+        <appender-ref ref="file_error"/>
+    </root>
+
+</configuration>