浏览代码

回传策略优化

wcc 7 月之前
父节点
当前提交
bdc21ea7f9

+ 12 - 0
game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/service/impl/GameBackPolicyServiceImpl.java

@@ -130,8 +130,14 @@ public class GameBackPolicyServiceImpl extends ServiceImpl<GameBackPolicyMapper,
             backPolicy.setRoleLevelMin(dto.getRoleLevelMin());
         } else if (Objects.equals(dto.getPolicyType(), GameBackPolicy.TYPE_SUM_RECHARGE)) {
             backPolicy.setTypeOfSumRechargeJson(JsonUtil.toString(dto.getTypeOfSumRecharge()));
+            backPolicy.setRegPayIntervalTime(dto.getTypeOfSumRecharge().getRegPayIntervalTime());
+            backPolicy.setActiveBackSwitch(dto.getTypeOfSumRecharge().getActiveBackSwitch());
+            backPolicy.setRoleLevelMin(dto.getTypeOfSumRecharge().getRoleLevelMin());
         } else if (Objects.equals(dto.getPolicyType(), GameBackPolicy.TYPE_SPLIT_LEVEL)) {
             backPolicy.setTypeOfSplitLevelJson(JsonUtil.toString(dto.getTypeOfSplitLevel()));
+            backPolicy.setRegPayIntervalTime(dto.getTypeOfSplitLevel().getRegPayIntervalTime());
+            backPolicy.setActiveBackSwitch(dto.getTypeOfSplitLevel().getActiveBackSwitch());
+            backPolicy.setRoleLevelMin(dto.getTypeOfSplitLevel().getRoleLevelMin());
         }
         return gameBackPolicyService.save(backPolicy);
     }
@@ -191,8 +197,14 @@ public class GameBackPolicyServiceImpl extends ServiceImpl<GameBackPolicyMapper,
             backPolicy.setRoleLevelMin(dto.getRoleLevelMin());
         } else if (Objects.equals(dto.getPolicyType(), GameBackPolicy.TYPE_SUM_RECHARGE)) {
             backPolicy.setTypeOfSumRechargeJson(JsonUtil.toString(dto.getTypeOfSumRecharge()));
+            backPolicy.setRegPayIntervalTime(dto.getTypeOfSumRecharge().getRegPayIntervalTime());
+            backPolicy.setActiveBackSwitch(dto.getTypeOfSumRecharge().getActiveBackSwitch());
+            backPolicy.setRoleLevelMin(dto.getTypeOfSumRecharge().getRoleLevelMin());
         } else if (Objects.equals(dto.getPolicyType(), GameBackPolicy.TYPE_SPLIT_LEVEL)) {
             backPolicy.setTypeOfSplitLevelJson(JsonUtil.toString(dto.getTypeOfSplitLevel()));
+            backPolicy.setRegPayIntervalTime(dto.getTypeOfSplitLevel().getRegPayIntervalTime());
+            backPolicy.setActiveBackSwitch(dto.getTypeOfSplitLevel().getActiveBackSwitch());
+            backPolicy.setRoleLevelMin(dto.getTypeOfSplitLevel().getRoleLevelMin());
         }
         return gameBackPolicyService.updateById(backPolicy);
     }

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

@@ -184,7 +184,9 @@ public class BackPolicyUtil {
                                                                                                         long rechargeMoney, boolean isFirstOrder,
                                                                                                         LocalDateTime payTime, LocalDateTime regTime,
                                                                                                         String userId, IBackPolicyCheck backPolicyCheck) {
+        Tuple2<Long, Long> backInfo = backPolicyCheck.backCountForUserWithSplitOrder(userId);
         BigDecimal rechargeAmount = NumberUtil.divide100(new BigDecimal(rechargeMoney));
+        BigDecimal rechargeSumAmount = NumberUtil.divide100(new BigDecimal(backInfo.second)).add(rechargeAmount);
         if (policyOfSumRecharge.getRegPayIntervalTime() != null
                 && ((DateUtil.localDateTimeToSecond(payTime) - DateUtil.localDateTimeToSecond(regTime)) / 60) > policyOfSumRecharge.getRegPayIntervalTime()) {
             log.error("订单 id[{}]通过回传策略[{}]判断后,超过注册充值间隔时间({}),不回传", orderId, policyId, policyOfSumRecharge.getRegPayIntervalTime());
@@ -192,23 +194,22 @@ public class BackPolicyUtil {
         }
         BackPolicyOfSumRecharge.RechargeLevel rechargeLevel = null;
         for (BackPolicyOfSumRecharge.RechargeLevel item : policyOfSumRecharge.getRechargeLevelList()) {
-            if (rechargeAmount.compareTo(item.getMinAmount()) >= 0 && rechargeAmount.compareTo(item.getMaxAmount()) < 0) {
+            if (rechargeSumAmount.compareTo(item.getMinAmount()) >= 0 && rechargeSumAmount.compareTo(item.getMaxAmount()) < 0) {
                 rechargeLevel = item;
                 break;
             }
         }
         if (rechargeLevel == null) {
             log.error("订单 id[{}]通过回传策略[{}]判断后,找不到对应的累充挡位,不回传", orderId, policyId);
-            return Tuples.tuple(Boolean.FALSE, rechargeMoney, "充金额(" + rechargeAmount + ")未找到对应的挡位,默认不回传", null);
+            return Tuples.tuple(Boolean.FALSE, rechargeMoney, "充金额(" + rechargeSumAmount + ")未找到对应的挡位,默认不回传", null);
         }
-        Tuple2<Long, Long> backInfo = backPolicyCheck.backCountForUserWithSplitOrder(userId);
         if (rechargeLevel.getBackCountOfUser() <= backInfo.first) {
             log.error("订单 id[{}]通过回传策略[{}]判断后,已达到回传的订单数,不回传", orderId, policyId);
-            return Tuples.tuple(Boolean.FALSE, rechargeMoney, "充值金额(" + rechargeAmount + ")已达到回传的订单数(已回传:" + backInfo.first + "笔,当前挡位:" + rechargeLevel.getBackCountOfUser() + "笔),不回传", null);
+            return Tuples.tuple(Boolean.FALSE, rechargeMoney, "累值金额(" + rechargeSumAmount + ")已达到回传的订单数(已回传:" + backInfo.first + "笔,当前挡位:" + rechargeLevel.getBackCountOfUser() + "笔),不回传", null);
         }
 
         long backCount = rechargeLevel.getBackCountOfUser() - backInfo.first;
-        long backMoney = backInfo.second - NumberUtil.multiply100(rechargeLevel.getMinAmount()).longValue();
+        long backMoney = NumberUtil.multiply100(rechargeSumAmount.subtract(rechargeLevel.getMinAmount())).longValue();
         if (backMoney <= 0) {
             // 最低回传一分钱
             backMoney = 1;
@@ -217,7 +218,7 @@ public class BackPolicyUtil {
         for (int i = 0; i < backCount; i++) {
             splitOrder.add(Tuple2.with(backMoney, LocalDateTime.now()));
         }
-        String backMsg = "充金额(" + rechargeAmount + ") 已回传:" + backInfo.first + "笔,当前挡位:" + rechargeLevel.getBackCountOfUser() + "笔,回传(" + backCount + "-" + backMoney + ")笔";
+        String backMsg = "充金额(" + rechargeSumAmount + ") 已回传:" + backInfo.first + "笔,当前挡位:" + rechargeLevel.getBackCountOfUser() + "笔,回传(" + backCount + "-" + backMoney + ")笔";
         log.error("订单 id[{}]通过回传策略[{}]判断后,回传。回传日志:{}", orderId, policyId, backMsg);
         return Tuples.tuple(Boolean.TRUE, rechargeMoney, backMsg, splitOrder);
     }