|
@@ -3,6 +3,7 @@ package com.zanxiang.game.back.serve.utils;
|
|
|
import com.github.sd4324530.jtuple.Tuple2;
|
|
|
import com.github.sd4324530.jtuple.Tuples;
|
|
|
import com.zanxiang.game.back.serve.pojo.entity.GameBackPolicy;
|
|
|
+import com.zanxiang.game.back.serve.pojo.enums.BackUnitEnum;
|
|
|
import com.zanxiang.module.util.DateUtil;
|
|
|
import com.zanxiang.module.util.JsonUtil;
|
|
|
import com.zanxiang.module.util.NumberUtil;
|
|
@@ -36,56 +37,101 @@ public class BackPolicyUtil {
|
|
|
log.error("订单 id[{}]通过回传策略[null]判断后,是否回传:{}.", orderId, true);
|
|
|
return true;
|
|
|
}
|
|
|
- log.error("----orderId: {}, backPolicy: {}, money: {}", orderId, JsonUtil.toString(gameBackPolicy), rechargeMoney);
|
|
|
- if (payTime != null && gameBackPolicy.getRegPayIntervalTime() != null) {
|
|
|
- long regPayIntervalMinute = (DateUtil.localDateTimeToSecond(payTime) - DateUtil.localDateTimeToSecond(regTime)) / 60;
|
|
|
- if (regPayIntervalMinute > gameBackPolicy.getRegPayIntervalTime()) {
|
|
|
- log.error("订单 id[{}]通过回传策略[{}]判断后,超过注册充值间隔时间,不回传{}.", orderId, gameBackPolicy.getId(), gameBackPolicy.getRegPayIntervalTime());
|
|
|
- return false;
|
|
|
- }
|
|
|
- }
|
|
|
- Integer firstType;
|
|
|
- String firstRate;
|
|
|
- Integer rechargeType;
|
|
|
- String rechargeRate;
|
|
|
- if (rechargeMoney <= gameBackPolicy.getFirstMinMoney()) {
|
|
|
- // 小于首充金额
|
|
|
- firstType = gameBackPolicy.getFirstMinMoneyType();
|
|
|
- firstRate = gameBackPolicy.getFirstMinMoneyRate();
|
|
|
- } else if (rechargeMoney >= gameBackPolicy.getFirstMaxMoney()) {
|
|
|
- firstType = gameBackPolicy.getFirstMaxMoneyType();
|
|
|
- firstRate = gameBackPolicy.getFirstMaxMoneyRate();
|
|
|
- } else {
|
|
|
- firstType = gameBackPolicy.getFirstOtherMoneyType();
|
|
|
- firstRate = gameBackPolicy.getFirstOtherMoneyRate();
|
|
|
- }
|
|
|
- if (rechargeMoney <= gameBackPolicy.getRechargeMinMoney()) {
|
|
|
- rechargeType = gameBackPolicy.getRechargeMinMoneyType();
|
|
|
- rechargeRate = gameBackPolicy.getRechargeMinMoneyRate();
|
|
|
- } else if (rechargeMoney >= gameBackPolicy.getRechargeMaxMoney()) {
|
|
|
- rechargeType = gameBackPolicy.getRechargeMaxMoneyType();
|
|
|
- rechargeRate = gameBackPolicy.getRechargeMaxMoneyRate();
|
|
|
- } else {
|
|
|
- rechargeType = gameBackPolicy.getRechargeOtherMoneyType();
|
|
|
- rechargeRate = gameBackPolicy.getRechargeOtherMoneyRate();
|
|
|
- }
|
|
|
- boolean firstPolicy = false;
|
|
|
+ BackUnitEnum backUnit = gameBackPolicy.getBackUnit() == null ? BackUnitEnum.UNIT_ONCE : BackUnitEnum.getByValue(gameBackPolicy.getBackUnit());
|
|
|
+
|
|
|
+ Boolean firstPolicy = null, firstDay = null;
|
|
|
+ Long markUpTime = null;
|
|
|
Integer backType;
|
|
|
String backRate;
|
|
|
- if (firstType.equals(rechargeType) && firstRate.equalsIgnoreCase(rechargeRate)) {
|
|
|
- // 回传内容相同,不需要区分是不是首单
|
|
|
- backType = firstType;
|
|
|
- backRate = firstRate;
|
|
|
+ if (gameBackPolicy.getRegPayIntervalTime() != null
|
|
|
+ && ((DateUtil.localDateTimeToSecond(payTime) - DateUtil.localDateTimeToSecond(regTime)) / 60) > gameBackPolicy.getRegPayIntervalTime()) {
|
|
|
+ if (gameBackPolicy.getMarkUpOrder() != null && gameBackPolicy.getMarkUpOrder()) {
|
|
|
+ markUpTime = gameBackPolicy.getRegPayIntervalTime();
|
|
|
+ if (rechargeMoney <= gameBackPolicy.getMarkUpOrderMinMoney()) {
|
|
|
+ // 小额
|
|
|
+ backType = gameBackPolicy.getMarkUpOrderMinMoneyType();
|
|
|
+ backRate = gameBackPolicy.getMarkUpOrderMinMoneyRate();
|
|
|
+ } else if (rechargeMoney >= gameBackPolicy.getMarkUpOrderMaxMoney()) {
|
|
|
+ // 大额
|
|
|
+ backType = gameBackPolicy.getMarkUpOrderMaxMoneyType();
|
|
|
+ backRate = gameBackPolicy.getMarkUpOrderMaxMoneyRate();
|
|
|
+ } else {
|
|
|
+ backType = gameBackPolicy.getMarkUpOrderOtherMoneyType();
|
|
|
+ backRate = gameBackPolicy.getMarkUpOrderOtherMoneyRate();
|
|
|
+ }
|
|
|
+ log.error("订单 id[{}]通过回传策略[{}]判断后,超过注册充值间隔时间,走补单逻辑 {}.", orderId, gameBackPolicy.getId(), gameBackPolicy.getRegPayIntervalTime());
|
|
|
+ } else {
|
|
|
+ log.error("订单 id[{}]通过回传策略[{}]判断后,超过注册充值间隔时间,不回穿 {}.", orderId, gameBackPolicy.getId(), gameBackPolicy.getRegPayIntervalTime());
|
|
|
+ return false;
|
|
|
+ }
|
|
|
} else {
|
|
|
- if (isFirstOrder) {
|
|
|
- log.error("订单{}是首单", orderId);
|
|
|
- backType = firstType;
|
|
|
- backRate = firstRate;
|
|
|
- firstPolicy = true;
|
|
|
+ if (backUnit == BackUnitEnum.UNIT_ONCE) {
|
|
|
+ if (isFirstOrder) {
|
|
|
+ firstPolicy = true;
|
|
|
+ if (rechargeMoney <= gameBackPolicy.getFirstMinMoney()) {
|
|
|
+ // 小额
|
|
|
+ backType = gameBackPolicy.getFirstMinMoneyType();
|
|
|
+ backRate = gameBackPolicy.getFirstMinMoneyRate();
|
|
|
+ } else if (rechargeMoney >= gameBackPolicy.getFirstMaxMoney()) {
|
|
|
+ // 大额
|
|
|
+ backType = gameBackPolicy.getFirstMaxMoneyType();
|
|
|
+ backRate = gameBackPolicy.getFirstMaxMoneyRate();
|
|
|
+ } else {
|
|
|
+ backType = gameBackPolicy.getFirstOtherMoneyType();
|
|
|
+ backRate = gameBackPolicy.getFirstOtherMoneyRate();
|
|
|
+ }
|
|
|
+ log.error("订单 id[{}]通过回传策略[{}]判断后,正常回传. 首单:{}, backType: {}, backRate: {}", orderId, gameBackPolicy.getId(), true, backType, backRate);
|
|
|
+ } else {
|
|
|
+ firstPolicy = false;
|
|
|
+ if (rechargeMoney <= gameBackPolicy.getRechargeMinMoney()) {
|
|
|
+ // 小额
|
|
|
+ backType = gameBackPolicy.getRechargeMinMoneyType();
|
|
|
+ backRate = gameBackPolicy.getRechargeMinMoneyRate();
|
|
|
+ } else if (rechargeMoney >= gameBackPolicy.getRechargeMaxMoney()) {
|
|
|
+ // 大额
|
|
|
+ backType = gameBackPolicy.getRechargeMaxMoneyType();
|
|
|
+ backRate = gameBackPolicy.getRechargeMaxMoneyRate();
|
|
|
+ } else {
|
|
|
+ backType = gameBackPolicy.getRechargeOtherMoneyType();
|
|
|
+ backRate = gameBackPolicy.getRechargeOtherMoneyRate();
|
|
|
+ }
|
|
|
+ log.error("订单 id[{}]通过回传策略[{}]判断后,正常回传. 首单:{}, backType: {}, backRate: {}", orderId, gameBackPolicy.getId(), false, backType, backRate);
|
|
|
+ }
|
|
|
+ } else if (backUnit == BackUnitEnum.UNIT_DAY) {
|
|
|
+ long intervalDays = DateUtil.intervalOfDays(regTime.toLocalDate(), payTime.toLocalDate());
|
|
|
+ if (intervalDays == 0) {
|
|
|
+ firstDay = true;
|
|
|
+ if (rechargeMoney <= gameBackPolicy.getFirstMinMoney()) {
|
|
|
+ // 小额
|
|
|
+ backType = gameBackPolicy.getFirstMinMoneyType();
|
|
|
+ backRate = gameBackPolicy.getFirstMinMoneyRate();
|
|
|
+ } else if (rechargeMoney >= gameBackPolicy.getFirstMaxMoney()) {
|
|
|
+ // 大额
|
|
|
+ backType = gameBackPolicy.getFirstMaxMoneyType();
|
|
|
+ backRate = gameBackPolicy.getFirstMaxMoneyRate();
|
|
|
+ } else {
|
|
|
+ backType = gameBackPolicy.getFirstOtherMoneyType();
|
|
|
+ backRate = gameBackPolicy.getFirstOtherMoneyRate();
|
|
|
+ }
|
|
|
+ log.error("订单 id[{}]通过回传策略[{}]判断后,正常回传. 首日:{}, backType: {}, backRate: {}", orderId, gameBackPolicy.getId(), true, backType, backRate);
|
|
|
+ } else {
|
|
|
+ firstDay = false;
|
|
|
+ if (rechargeMoney <= gameBackPolicy.getRechargeMinMoney()) {
|
|
|
+ // 小额
|
|
|
+ backType = gameBackPolicy.getRechargeMinMoneyType();
|
|
|
+ backRate = gameBackPolicy.getRechargeMinMoneyRate();
|
|
|
+ } else if (rechargeMoney >= gameBackPolicy.getRechargeMaxMoney()) {
|
|
|
+ // 大额
|
|
|
+ backType = gameBackPolicy.getRechargeMaxMoneyType();
|
|
|
+ backRate = gameBackPolicy.getRechargeMaxMoneyRate();
|
|
|
+ } else {
|
|
|
+ backType = gameBackPolicy.getRechargeOtherMoneyType();
|
|
|
+ backRate = gameBackPolicy.getRechargeOtherMoneyRate();
|
|
|
+ }
|
|
|
+ log.error("订单 id[{}]通过回传策略[{}]判断后,正常回传. 首日:{}, backType: {}, backRate: {}", orderId, gameBackPolicy.getId(), false, backType, backRate);
|
|
|
+ }
|
|
|
} else {
|
|
|
- log.error("订单{}不是首单", orderId);
|
|
|
- backType = rechargeType;
|
|
|
- backRate = rechargeRate;
|
|
|
+ throw new RuntimeException("未知的回传单位:" + backUnit);
|
|
|
}
|
|
|
}
|
|
|
if (Objects.equals(backType, GameBackPolicy.POLICY_TYPE_FIXED_RATE)) {
|
|
@@ -101,7 +147,7 @@ public class BackPolicyUtil {
|
|
|
log.error("订单 id[{}]通过回传策略[{}]判断后,是否回传:{}.", orderId, gameBackPolicy.getId(), true);
|
|
|
return true;
|
|
|
}
|
|
|
- int isBackCount = lastBackFunction.getLastBackCount(backCount + ignoreCount - 1, firstPolicy);
|
|
|
+ int isBackCount = lastBackFunction.getLastBackCount(backCount + ignoreCount - 1, firstPolicy, firstDay, markUpTime);
|
|
|
log.error("订单 id[{}]通过回传策略[{}]判断后,是否回传:{}.", orderId, gameBackPolicy.getId(), (isBackCount < backCount));
|
|
|
return isBackCount < backCount;
|
|
|
} else if (Objects.equals(backType, GameBackPolicy.POLICY_TYPE_RANDOM_RATE)) {
|
|
@@ -151,6 +197,6 @@ public class BackPolicyUtil {
|
|
|
}
|
|
|
|
|
|
public interface LastBackFunction {
|
|
|
- int getLastBackCount(int backUnit, boolean isFirstOrder);
|
|
|
+ int getLastBackCount(int backUnit, Boolean isFirstOrder, Boolean firstDay, Long markUpTime);
|
|
|
}
|
|
|
}
|