|
@@ -42,7 +42,16 @@ public class BackPolicyUtil {
|
|
log.error("订单 id[{}]找不到回传策略,默认回传", orderId);
|
|
log.error("订单 id[{}]找不到回传策略,默认回传", orderId);
|
|
return Tuples.tuple(Boolean.TRUE, rechargeMoney, "没有回传策略");
|
|
return Tuples.tuple(Boolean.TRUE, rechargeMoney, "没有回传策略");
|
|
}
|
|
}
|
|
|
|
+ if (gameBackPolicy.getSupperSmallAmount() != null && gameBackPolicy.getSupperSmallAmount() >= rechargeMoney) {
|
|
|
|
+ log.error("订单 id[{}]被判定为超小额订单({}),默认不回传", orderId, gameBackPolicy.getSupperSmallAmount());
|
|
|
|
+ return Tuples.tuple(Boolean.TRUE, rechargeMoney, "超小额订单(<=" + gameBackPolicy.getSupperSmallAmount() + "),不回传");
|
|
|
|
+ }
|
|
BackUnitEnum backUnit = gameBackPolicy.getBackUnit() == null ? BackUnitEnum.UNIT_ONCE : BackUnitEnum.getByValue(gameBackPolicy.getBackUnit());
|
|
BackUnitEnum backUnit = gameBackPolicy.getBackUnit() == null ? BackUnitEnum.UNIT_ONCE : BackUnitEnum.getByValue(gameBackPolicy.getBackUnit());
|
|
|
|
+ Long totalRechargeAmount = null;
|
|
|
|
+ if (backUnit == BackUnitEnum.LARGE_AMOUNT) {
|
|
|
|
+ Long totalAmount = backPolicyCheck.totalRechargeAmount();
|
|
|
|
+ totalAmount = totalAmount == null ? rechargeMoney : totalAmount + rechargeMoney;
|
|
|
|
+ }
|
|
|
|
|
|
Boolean firstPolicy = null;
|
|
Boolean firstPolicy = null;
|
|
Long markUpTime = null;
|
|
Long markUpTime = null;
|
|
@@ -51,14 +60,15 @@ public class BackPolicyUtil {
|
|
if (gameBackPolicy.getRegPayIntervalTime() != null
|
|
if (gameBackPolicy.getRegPayIntervalTime() != null
|
|
&& ((DateUtil.localDateTimeToSecond(payTime) - DateUtil.localDateTimeToSecond(regTime)) / 60) > gameBackPolicy.getRegPayIntervalTime()) {
|
|
&& ((DateUtil.localDateTimeToSecond(payTime) - DateUtil.localDateTimeToSecond(regTime)) / 60) > gameBackPolicy.getRegPayIntervalTime()) {
|
|
// 补单
|
|
// 补单
|
|
- log.error("订单 id[{}]通过回传策略[{}]判断后,超过注册充值间隔时间,走补单逻辑 {}.", orderId, gameBackPolicy.getId(), gameBackPolicy.getRegPayIntervalTime());
|
|
|
|
|
|
+ log.error("订单 id[{}]通过回传策略[{}]判断后,超过注册充值间隔时间,走补单逻辑 {}, money: {}.", orderId, gameBackPolicy.getId(), gameBackPolicy.getRegPayIntervalTime(), totalRechargeAmount);
|
|
if (gameBackPolicy.getMarkUpOrder() != null && gameBackPolicy.getMarkUpOrder()) {
|
|
if (gameBackPolicy.getMarkUpOrder() != null && gameBackPolicy.getMarkUpOrder()) {
|
|
|
|
+ long money = backUnit == BackUnitEnum.LARGE_AMOUNT ? totalRechargeAmount : rechargeMoney;
|
|
markUpTime = gameBackPolicy.getRegPayIntervalTime();
|
|
markUpTime = gameBackPolicy.getRegPayIntervalTime();
|
|
- if (rechargeMoney <= gameBackPolicy.getMarkUpOrderMinMoney()) {
|
|
|
|
|
|
+ if (money <= gameBackPolicy.getMarkUpOrderMinMoney()) {
|
|
// 小额
|
|
// 小额
|
|
backType = gameBackPolicy.getMarkUpOrderMinMoneyType();
|
|
backType = gameBackPolicy.getMarkUpOrderMinMoneyType();
|
|
backRate = gameBackPolicy.getMarkUpOrderMinMoneyRate();
|
|
backRate = gameBackPolicy.getMarkUpOrderMinMoneyRate();
|
|
- } else if (rechargeMoney >= gameBackPolicy.getMarkUpOrderMaxMoney()) {
|
|
|
|
|
|
+ } else if (money >= gameBackPolicy.getMarkUpOrderMaxMoney()) {
|
|
// 大额
|
|
// 大额
|
|
backType = gameBackPolicy.getMarkUpOrderMaxMoneyType();
|
|
backType = gameBackPolicy.getMarkUpOrderMaxMoneyType();
|
|
backRate = gameBackPolicy.getMarkUpOrderMaxMoneyRate();
|
|
backRate = gameBackPolicy.getMarkUpOrderMaxMoneyRate();
|
|
@@ -123,15 +133,19 @@ public class BackPolicyUtil {
|
|
} else if (backUnit == BackUnitEnum.UNIT_TIME_2DAY) {
|
|
} else if (backUnit == BackUnitEnum.UNIT_TIME_2DAY) {
|
|
long intervalHours = DateUtil.intervalOfHour(regTime, payTime);
|
|
long intervalHours = DateUtil.intervalOfHour(regTime, payTime);
|
|
firstPolicy = intervalHours < 48;
|
|
firstPolicy = intervalHours < 48;
|
|
|
|
+ } else if (backUnit == BackUnitEnum.LARGE_AMOUNT) {
|
|
|
|
+ // 是否是小额订单
|
|
|
|
+ firstPolicy = rechargeMoney < gameBackPolicy.getLargeAmount();
|
|
} else {
|
|
} else {
|
|
throw new RuntimeException("未知的回传单位:" + backUnit);
|
|
throw new RuntimeException("未知的回传单位:" + backUnit);
|
|
}
|
|
}
|
|
if (firstPolicy) {
|
|
if (firstPolicy) {
|
|
- if (rechargeMoney <= gameBackPolicy.getFirstMinMoney()) {
|
|
|
|
|
|
+ long money = backUnit == BackUnitEnum.LARGE_AMOUNT ? totalRechargeAmount : rechargeMoney;
|
|
|
|
+ if (money <= gameBackPolicy.getFirstMinMoney()) {
|
|
// 小额
|
|
// 小额
|
|
backType = gameBackPolicy.getFirstMinMoneyType();
|
|
backType = gameBackPolicy.getFirstMinMoneyType();
|
|
backRate = gameBackPolicy.getFirstMinMoneyRate();
|
|
backRate = gameBackPolicy.getFirstMinMoneyRate();
|
|
- } else if (rechargeMoney >= gameBackPolicy.getFirstMaxMoney()) {
|
|
|
|
|
|
+ } else if (money >= gameBackPolicy.getFirstMaxMoney()) {
|
|
// 大额
|
|
// 大额
|
|
backType = gameBackPolicy.getFirstMaxMoneyType();
|
|
backType = gameBackPolicy.getFirstMaxMoneyType();
|
|
backRate = gameBackPolicy.getFirstMaxMoneyRate();
|
|
backRate = gameBackPolicy.getFirstMaxMoneyRate();
|
|
@@ -139,13 +153,14 @@ public class BackPolicyUtil {
|
|
backType = gameBackPolicy.getFirstOtherMoneyType();
|
|
backType = gameBackPolicy.getFirstOtherMoneyType();
|
|
backRate = gameBackPolicy.getFirstOtherMoneyRate();
|
|
backRate = gameBackPolicy.getFirstOtherMoneyRate();
|
|
}
|
|
}
|
|
- log.error("订单 id[{}]通过回传策略[{}]判断后走首日逻辑:backType: {}, backRate: {}", orderId, gameBackPolicy.getId(), backType, backRate);
|
|
|
|
|
|
+ log.error("订单 id[{}]通过回传策略[{}]判断后走首日逻辑:backType: {}, backRate: {}, money: {}", orderId, gameBackPolicy.getId(), backType, backRate, money);
|
|
} else {
|
|
} else {
|
|
- if (rechargeMoney <= gameBackPolicy.getRechargeMinMoney()) {
|
|
|
|
|
|
+ long money = backUnit == BackUnitEnum.LARGE_AMOUNT ? totalRechargeAmount : rechargeMoney;
|
|
|
|
+ if (money <= gameBackPolicy.getRechargeMinMoney()) {
|
|
// 小额
|
|
// 小额
|
|
backType = gameBackPolicy.getRechargeMinMoneyType();
|
|
backType = gameBackPolicy.getRechargeMinMoneyType();
|
|
backRate = gameBackPolicy.getRechargeMinMoneyRate();
|
|
backRate = gameBackPolicy.getRechargeMinMoneyRate();
|
|
- } else if (rechargeMoney >= gameBackPolicy.getRechargeMaxMoney()) {
|
|
|
|
|
|
+ } else if (money >= gameBackPolicy.getRechargeMaxMoney()) {
|
|
// 大额
|
|
// 大额
|
|
backType = gameBackPolicy.getRechargeMaxMoneyType();
|
|
backType = gameBackPolicy.getRechargeMaxMoneyType();
|
|
backRate = gameBackPolicy.getRechargeMaxMoneyRate();
|
|
backRate = gameBackPolicy.getRechargeMaxMoneyRate();
|
|
@@ -153,7 +168,7 @@ public class BackPolicyUtil {
|
|
backType = gameBackPolicy.getRechargeOtherMoneyType();
|
|
backType = gameBackPolicy.getRechargeOtherMoneyType();
|
|
backRate = gameBackPolicy.getRechargeOtherMoneyRate();
|
|
backRate = gameBackPolicy.getRechargeOtherMoneyRate();
|
|
}
|
|
}
|
|
- log.error("订单 id[{}]通过回传策略[{}]判断后走次日逻辑, backType: {}, backRate: {}", orderId, gameBackPolicy.getId(), backType, backRate);
|
|
|
|
|
|
+ log.error("订单 id[{}]通过回传策略[{}]判断后走次日逻辑, backType: {}, backRate: {}, money: {}", orderId, gameBackPolicy.getId(), backType, backRate, money);
|
|
}
|
|
}
|
|
Integer maxBackCountOfUser = firstPolicy ? gameBackPolicy.getFirstBackCountOfUser() : gameBackPolicy.getRechargeBackCountOfUser();
|
|
Integer maxBackCountOfUser = firstPolicy ? gameBackPolicy.getFirstBackCountOfUser() : gameBackPolicy.getRechargeBackCountOfUser();
|
|
String backMsg = firstPolicy ? "首-" : "次-";
|
|
String backMsg = firstPolicy ? "首-" : "次-";
|
|
@@ -199,30 +214,6 @@ public class BackPolicyUtil {
|
|
backMsg = backMsg + ",单用户最大回传 " + maxBackCountOfUser + "笔,当前已回传 " + userBackCount + "笔";
|
|
backMsg = backMsg + ",单用户最大回传 " + maxBackCountOfUser + "笔,当前已回传 " + userBackCount + "笔";
|
|
log.error("订单 id[{}]通过回传策略[{}]判断后,是否回传:{},原因:{}", orderId, gameBackPolicy.getId(), userBackCount < maxBackCountOfUser, backMsg);
|
|
log.error("订单 id[{}]通过回传策略[{}]判断后,是否回传:{},原因:{}", orderId, gameBackPolicy.getId(), userBackCount < maxBackCountOfUser, backMsg);
|
|
return Tuples.tuple(userBackCount < maxBackCountOfUser, downLevel(rechargeMoney, downLevelString), backMsg);
|
|
return Tuples.tuple(userBackCount < maxBackCountOfUser, downLevel(rechargeMoney, downLevelString), backMsg);
|
|
- /*if (Objects.equals(backType, GameBackPolicy.POLICY_TYPE_FIXED_RATE)) {
|
|
|
|
- // 固定比例回传
|
|
|
|
- String[] temp = backRate.split(":");
|
|
|
|
- int backCount = Integer.parseInt(temp[0]);
|
|
|
|
- int ignoreCount = Integer.parseInt(temp[1]);
|
|
|
|
- if (backCount == 0) {
|
|
|
|
- log.error("订单 id[{}]通过回传策略[{}]判断后,是否回传:{}.", orderId, gameBackPolicy.getId(), false);
|
|
|
|
- return Tuples.tuple(Boolean.FALSE, rechargeMoney, "按比例回传,回传比例为 0,全部不回传");
|
|
|
|
- }
|
|
|
|
- if (ignoreCount == 0) {
|
|
|
|
- log.error("订单 id[{}]通过回传策略[{}]判断后,是否回传:{}.", orderId, gameBackPolicy.getId(), true);
|
|
|
|
- return Tuples.tuple(Boolean.TRUE, rechargeMoney, "按比例回传,忽略比例为 0,全部回传");
|
|
|
|
- }
|
|
|
|
- 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)) {
|
|
|
|
- // 随机概率回传
|
|
|
|
- boolean isBack = RandomUtils.nextInt(0, 100) < NumberUtil.multiply100(new BigDecimal(backRate)).intValue();
|
|
|
|
- log.error("订单 id[{}]通过回传策略[{}]判断后,是否回传:{}.", orderId, gameBackPolicy.getId(), isBack);
|
|
|
|
- return Tuples.tuple(isBack, rechargeMoney, "按概率 " + backRate + "判断");
|
|
|
|
- } else {
|
|
|
|
- throw new RuntimeException("回传策略[" + gameBackPolicy.getId() + "]配置错误,未知的回传类型:" + backType);
|
|
|
|
- }*/
|
|
|
|
}
|
|
}
|
|
|
|
|
|
private static Long downLevel(Long rechargeMoney, String downLevelStr) {
|
|
private static Long downLevel(Long rechargeMoney, String downLevelStr) {
|
|
@@ -299,5 +290,10 @@ public class BackPolicyUtil {
|
|
* 补单,单个用户已回传订单数
|
|
* 补单,单个用户已回传订单数
|
|
*/
|
|
*/
|
|
long markUpForUser(String userId, Long markUpTime);
|
|
long markUpForUser(String userId, Long markUpTime);
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 获取用户的累充金额
|
|
|
|
+ */
|
|
|
|
+ Long totalRechargeAmount();
|
|
}
|
|
}
|
|
}
|
|
}
|