|
@@ -19,6 +19,7 @@ import com.zanxiang.game.back.serve.pojo.entity.GameTencentBackLog;
|
|
|
import com.zanxiang.game.back.serve.pojo.entity.GameTencentMiniGameOrder;
|
|
|
import com.zanxiang.game.back.serve.pojo.entity.GameTencentOrder;
|
|
|
import com.zanxiang.game.back.serve.dao.mapper.GameTencentOrderMapper;
|
|
|
+import com.zanxiang.game.back.serve.pojo.entity.GameTencentUser;
|
|
|
import com.zanxiang.game.back.serve.pojo.enums.ActionTypeEnum;
|
|
|
import com.zanxiang.game.back.serve.pojo.enums.BackStatusEnum;
|
|
|
import com.zanxiang.game.back.serve.pojo.enums.BackUnitEnum;
|
|
@@ -27,6 +28,7 @@ import com.zanxiang.game.back.serve.service.IGameBackPolicyService;
|
|
|
import com.zanxiang.game.back.serve.service.IGameTencentBackLogService;
|
|
|
import com.zanxiang.game.back.serve.service.IGameTencentOrderService;
|
|
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
|
+import com.zanxiang.game.back.serve.service.IGameTencentUserService;
|
|
|
import com.zanxiang.game.back.serve.utils.BackPolicyUtil;
|
|
|
import com.zanxiang.game.back.serve.utils.OrderUtil;
|
|
|
import com.zanxiang.game.module.base.ServerInfo;
|
|
@@ -75,11 +77,13 @@ public class GameTencentOrderServiceImpl extends ServiceImpl<GameTencentOrderMap
|
|
|
private IGameBackPolicyService gameBackPolicyService;
|
|
|
@DubboReference(providedBy = ServerInfo.SERVER_DUBBO_NAME)
|
|
|
private IAgentRpc agentRpc;
|
|
|
+ @Autowired
|
|
|
+ private IGameTencentUserService gameTencentUserService;
|
|
|
|
|
|
@Override
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
public boolean orderBack(GameTencentOrder orderLog, boolean mustBack, Long backMoneyOfInput) {
|
|
|
- boolean doBack = false;
|
|
|
+ boolean doBack;
|
|
|
Long backMoney;
|
|
|
String backMsg;
|
|
|
if (mustBack) {
|
|
@@ -91,202 +95,30 @@ public class GameTencentOrderServiceImpl extends ServiceImpl<GameTencentOrderMap
|
|
|
// 只要回传 支付行为
|
|
|
return false;
|
|
|
}
|
|
|
- GameBackPolicy gameBackPolicy = gameBackPolicyService.getById(orderLog.getBackPolicyId());
|
|
|
- Tuple3<Boolean, Long, String> backInfo = BackPolicyUtil.backOrder(orderLog.getOrderId(), gameBackPolicy, orderLog.getRechargeMoney(),
|
|
|
- orderLog.getIsFirstOrder(), orderLog.getPayTime(), orderLog.getRegisterTime(),
|
|
|
- orderLog.getWechatOpenid(),
|
|
|
- new BackPolicyUtil.IBackPolicyCheck() {
|
|
|
- @Override
|
|
|
- public long backCountForFixedRate(int numberOfRound, BackUnitEnum backUnit, Boolean firstPolicy) {
|
|
|
- numberOfRound = numberOfRound - 1;
|
|
|
- if (backUnit == BackUnitEnum.UNIT_ONCE) {
|
|
|
- return 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())
|
|
|
- .eq(GameTencentOrder::getIsFirstOrder, firstPolicy)
|
|
|
- .ne(GameTencentOrder::getOrderId, orderLog.getOrderId())
|
|
|
- .orderByDesc(GameTencentOrder::getCreateTime)
|
|
|
- .last("limit " + numberOfRound)
|
|
|
- ).stream().filter(log -> log.getIsBack().equals(BackStatusEnum.SUCCESS.getBackStatus())).count();
|
|
|
- } else if (backUnit == BackUnitEnum.UNIT_DAY) {
|
|
|
- return 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())
|
|
|
- .apply(firstPolicy, "date(recharge_time) = date(pay_time)")
|
|
|
- .apply(!firstPolicy, "date(recharge_time) != date(pay_time)")
|
|
|
- .ne(GameTencentOrder::getOrderId, orderLog.getOrderId())
|
|
|
- .orderByDesc(GameTencentOrder::getCreateTime)
|
|
|
- .last("limit " + numberOfRound)
|
|
|
- ).stream().filter(log -> log.getIsBack().equals(BackStatusEnum.SUCCESS.getBackStatus())).count();
|
|
|
- } else if (backUnit == BackUnitEnum.UNIT_TIME_DAY) {
|
|
|
- return 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())
|
|
|
- .apply(firstPolicy, "TIMESTAMPDIFF(HOUR, recharge_time, pay_time) < 24")
|
|
|
- .apply(!firstPolicy, "TIMESTAMPDIFF(HOUR, recharge_time, pay_time) >= 24")
|
|
|
- .ne(GameTencentOrder::getOrderId, orderLog.getOrderId())
|
|
|
- .orderByDesc(GameTencentOrder::getCreateTime)
|
|
|
- .last("limit " + numberOfRound)
|
|
|
- ).stream().filter(log -> log.getIsBack().equals(BackStatusEnum.SUCCESS.getBackStatus())).count();
|
|
|
- } else if (backUnit == BackUnitEnum.UNIT_TIME_2DAY) {
|
|
|
- return 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())
|
|
|
- .apply(firstPolicy, "TIMESTAMPDIFF(HOUR, recharge_time, pay_time) < 48")
|
|
|
- .apply(!firstPolicy, "TIMESTAMPDIFF(HOUR, recharge_time, pay_time) >= 48")
|
|
|
- .ne(GameTencentOrder::getOrderId, orderLog.getOrderId())
|
|
|
- .orderByDesc(GameTencentOrder::getCreateTime)
|
|
|
- .last("limit " + numberOfRound)
|
|
|
- ).stream().filter(log -> log.getIsBack().equals(BackStatusEnum.SUCCESS.getBackStatus())).count();
|
|
|
- } else if (backUnit == BackUnitEnum.LARGE_AMOUNT) {
|
|
|
- return 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())
|
|
|
- .ne(GameTencentOrder::getOrderId, orderLog.getOrderId())
|
|
|
- .orderByDesc(GameTencentOrder::getCreateTime)
|
|
|
- .last("limit " + numberOfRound)
|
|
|
- ).stream().filter(log -> log.getIsBack().equals(BackStatusEnum.SUCCESS.getBackStatus())).count();
|
|
|
- } else {
|
|
|
- throw new RuntimeException("不支持的回传单位[" + backUnit.getValue() + "]");
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- @Override
|
|
|
- public long backCountForUser(BackUnitEnum backUnit, String userId, Boolean firstPolicy) {
|
|
|
- if (backUnit == BackUnitEnum.UNIT_ONCE) {
|
|
|
- if (firstPolicy) {
|
|
|
- // 首单直接返回 0,必定回传
|
|
|
- return 0;
|
|
|
- }
|
|
|
- return count(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())
|
|
|
- .eq(GameTencentOrder::getIsBack, BackStatusEnum.SUCCESS.getBackStatus())
|
|
|
- .eq(GameTencentOrder::getWechatOpenid, userId)
|
|
|
- .eq(GameTencentOrder::getIsFirstOrder, firstPolicy)
|
|
|
- .ne(GameTencentOrder::getOrderId, orderLog.getOrderId())
|
|
|
- );
|
|
|
- } else if (backUnit == BackUnitEnum.UNIT_DAY) {
|
|
|
- return count(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())
|
|
|
- .eq(GameTencentOrder::getIsBack, BackStatusEnum.SUCCESS.getBackStatus())
|
|
|
- .eq(GameTencentOrder::getWechatOpenid, userId)
|
|
|
- .apply(firstPolicy, "date(recharge_time) = date(pay_time)")
|
|
|
- .apply(!firstPolicy, "date(recharge_time) != date(pay_time)")
|
|
|
- .ne(GameTencentOrder::getOrderId, orderLog.getOrderId())
|
|
|
- );
|
|
|
- } else if (backUnit == BackUnitEnum.UNIT_TIME_DAY) {
|
|
|
- return count(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())
|
|
|
- .eq(GameTencentOrder::getIsBack, BackStatusEnum.SUCCESS.getBackStatus())
|
|
|
- .eq(GameTencentOrder::getWechatOpenid, userId)
|
|
|
- .apply(firstPolicy, "TIMESTAMPDIFF(HOUR, recharge_time, pay_time) < 24")
|
|
|
- .apply(!firstPolicy, "TIMESTAMPDIFF(HOUR, recharge_time, pay_time) >= 24")
|
|
|
- .ne(GameTencentOrder::getOrderId, orderLog.getOrderId())
|
|
|
- );
|
|
|
- } else if (backUnit == BackUnitEnum.UNIT_TIME_2DAY) {
|
|
|
- return count(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())
|
|
|
- .eq(GameTencentOrder::getIsBack, BackStatusEnum.SUCCESS.getBackStatus())
|
|
|
- .eq(GameTencentOrder::getWechatOpenid, userId)
|
|
|
- .apply(firstPolicy, "TIMESTAMPDIFF(HOUR, recharge_time, pay_time) < 48")
|
|
|
- .apply(!firstPolicy, "TIMESTAMPDIFF(HOUR, recharge_time, pay_time) >= 48")
|
|
|
- .ne(GameTencentOrder::getOrderId, orderLog.getOrderId())
|
|
|
- );
|
|
|
- } else if (backUnit == BackUnitEnum.LARGE_AMOUNT) {
|
|
|
- return count(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())
|
|
|
- .eq(GameTencentOrder::getIsBack, BackStatusEnum.SUCCESS.getBackStatus())
|
|
|
- .eq(GameTencentOrder::getWechatOpenid, userId)
|
|
|
- .ne(GameTencentOrder::getOrderId, orderLog.getOrderId())
|
|
|
- );
|
|
|
- } else {
|
|
|
- throw new RuntimeException("不支持的回传单位[" + backUnit.getValue() + "]");
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- @Override
|
|
|
- public long markUpOfFixedRate(int numberOfRound, Long markUpTime) {
|
|
|
- numberOfRound = numberOfRound - 1;
|
|
|
- return 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())
|
|
|
- .apply("TIMESTAMPDIFF(MINUTE, recharge_time, pay_time) > {0}", markUpTime)
|
|
|
- .ne(GameTencentOrder::getOrderId, orderLog.getOrderId())
|
|
|
- .orderByDesc(GameTencentOrder::getCreateTime)
|
|
|
- .last("limit " + numberOfRound)
|
|
|
- ).stream().filter(log -> log.getIsBack().equals(BackStatusEnum.SUCCESS.getBackStatus())).count();
|
|
|
- }
|
|
|
-
|
|
|
- @Override
|
|
|
- public long markUpForUser(String userId, Long markUpTime) {
|
|
|
- return count(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())
|
|
|
- .eq(GameTencentOrder::getIsBack, BackStatusEnum.SUCCESS.getBackStatus())
|
|
|
- .eq(GameTencentOrder::getWechatOpenid, userId)
|
|
|
- .apply("TIMESTAMPDIFF(MINUTE, recharge_time, pay_time) > {0}", markUpTime)
|
|
|
- .ne(GameTencentOrder::getOrderId, orderLog.getOrderId())
|
|
|
- );
|
|
|
- }
|
|
|
-
|
|
|
- @Override
|
|
|
- public Long totalRechargeAmount() {
|
|
|
- return count(new QueryWrapper<GameTencentOrder>()
|
|
|
- .select("ifnull(sum(recharge_money), 0) as recharge_money").lambda()
|
|
|
- .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())
|
|
|
- .eq(GameTencentOrder::getWechatOpenid, orderLog.getWechatOpenid())
|
|
|
- .ne(GameTencentOrder::getOrderId, orderLog.getOrderId())
|
|
|
- );
|
|
|
- }
|
|
|
- });
|
|
|
- doBack = backInfo.first;
|
|
|
- backMoney = backInfo.second;
|
|
|
- backMsg = backInfo.third;
|
|
|
+ GameTencentUser userLog = gameTencentUserService.getOne(new LambdaQueryWrapper<GameTencentUser>()
|
|
|
+ .eq(GameTencentUser::getGameId, orderLog.getGameId())
|
|
|
+ .eq(GameTencentUser::getWechatAppId, orderLog.getWechatAppId())
|
|
|
+ .eq(GameTencentUser::getWechatOpenid, orderLog.getWechatOpenid())
|
|
|
+ .eq(GameTencentUser::getAdAccountId, orderLog.getAdAccountId())
|
|
|
+ .orderByDesc(GameTencentUser::getCreateTime)
|
|
|
+ .last("limit 1")
|
|
|
+ );if (userLog == null) {
|
|
|
+ doBack = false;
|
|
|
+ backMoney = orderLog.getRechargeMoney();
|
|
|
+ backMsg = "回传失败!找不到回传用户";
|
|
|
+ } else {
|
|
|
+ GameBackPolicy gameBackPolicy = gameBackPolicyService.getById(orderLog.getBackPolicyId());
|
|
|
+ Tuple3<Boolean, Long, String> backInfo = BackPolicyUtil.backOrder(orderLog.getOrderId(), gameBackPolicy, orderLog.getRechargeMoney(),
|
|
|
+ orderLog.getIsFirstOrder(),
|
|
|
+ orderLog.getPayTime(),
|
|
|
+ // 此处使用用户最近一次的重新染色时间
|
|
|
+ userLog.getCreateTime(),
|
|
|
+ orderLog.getWechatOpenid(),
|
|
|
+ new TencentOrderBackPolicyCheck(this, gameBackPolicy, userLog, orderLog));
|
|
|
+ doBack = backInfo.first;
|
|
|
+ backMoney = backInfo.second;
|
|
|
+ backMsg = backInfo.third;
|
|
|
+ }
|
|
|
}
|
|
|
BackStatusEnum backStatus = BackStatusEnum.NO;
|
|
|
orderLog.setBackMoney(backMoney);
|
|
@@ -412,4 +244,210 @@ public class GameTencentOrderServiceImpl extends ServiceImpl<GameTencentOrderMap
|
|
|
gameTencentBackLogService.save(gameTencentBackLog);
|
|
|
return backStatus;
|
|
|
}
|
|
|
+
|
|
|
+ public static class TencentOrderBackPolicyCheck implements BackPolicyUtil.IBackPolicyCheck {
|
|
|
+ private final IGameTencentOrderService gameTencentOrderService;
|
|
|
+ private final GameBackPolicy gameBackPolicy;
|
|
|
+ private final GameTencentUser userLog;
|
|
|
+ private final GameTencentOrder orderLog;
|
|
|
+
|
|
|
+ public TencentOrderBackPolicyCheck(IGameTencentOrderService gameTencentOrderService,
|
|
|
+ GameBackPolicy gameBackPolicy,
|
|
|
+ GameTencentUser userLog,
|
|
|
+ GameTencentOrder orderLog) {
|
|
|
+ this.gameTencentOrderService = gameTencentOrderService;
|
|
|
+ this.gameBackPolicy = gameBackPolicy;
|
|
|
+ this.userLog = userLog;
|
|
|
+ this.orderLog = orderLog;
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public long backCountForFixedRate(int numberOfRound, BackUnitEnum backUnit, Boolean firstPolicy) {
|
|
|
+ numberOfRound = numberOfRound - 1;
|
|
|
+ if (backUnit == BackUnitEnum.UNIT_ONCE) {
|
|
|
+ return gameTencentOrderService.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())
|
|
|
+ .eq(GameTencentOrder::getIsFirstOrder, firstPolicy)
|
|
|
+ .ne(GameTencentOrder::getOrderId, orderLog.getOrderId())
|
|
|
+ .orderByDesc(GameTencentOrder::getCreateTime)
|
|
|
+ .last("limit " + numberOfRound)
|
|
|
+ ).stream().filter(log -> log.getIsBack().equals(BackStatusEnum.SUCCESS.getBackStatus())).count();
|
|
|
+ } else if (backUnit == BackUnitEnum.UNIT_DAY) {
|
|
|
+ return gameTencentOrderService.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())
|
|
|
+ .apply(firstPolicy, "date(recharge_time) = date(pay_time)")
|
|
|
+ .apply(!firstPolicy, "date(recharge_time) != date(pay_time)")
|
|
|
+ .ne(GameTencentOrder::getOrderId, orderLog.getOrderId())
|
|
|
+ .orderByDesc(GameTencentOrder::getCreateTime)
|
|
|
+ .last("limit " + numberOfRound)
|
|
|
+ ).stream().filter(log -> log.getIsBack().equals(BackStatusEnum.SUCCESS.getBackStatus())).count();
|
|
|
+ } else if (backUnit == BackUnitEnum.UNIT_TIME_DAY) {
|
|
|
+ return gameTencentOrderService.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())
|
|
|
+ .apply(firstPolicy, "TIMESTAMPDIFF(HOUR, recharge_time, pay_time) < 24")
|
|
|
+ .apply(!firstPolicy, "TIMESTAMPDIFF(HOUR, recharge_time, pay_time) >= 24")
|
|
|
+ .ne(GameTencentOrder::getOrderId, orderLog.getOrderId())
|
|
|
+ .orderByDesc(GameTencentOrder::getCreateTime)
|
|
|
+ .last("limit " + numberOfRound)
|
|
|
+ ).stream().filter(log -> log.getIsBack().equals(BackStatusEnum.SUCCESS.getBackStatus())).count();
|
|
|
+ } else if (backUnit == BackUnitEnum.UNIT_TIME_2DAY) {
|
|
|
+ return gameTencentOrderService.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())
|
|
|
+ .apply(firstPolicy, "TIMESTAMPDIFF(HOUR, recharge_time, pay_time) < 48")
|
|
|
+ .apply(!firstPolicy, "TIMESTAMPDIFF(HOUR, recharge_time, pay_time) >= 48")
|
|
|
+ .ne(GameTencentOrder::getOrderId, orderLog.getOrderId())
|
|
|
+ .orderByDesc(GameTencentOrder::getCreateTime)
|
|
|
+ .last("limit " + numberOfRound)
|
|
|
+ ).stream().filter(log -> log.getIsBack().equals(BackStatusEnum.SUCCESS.getBackStatus())).count();
|
|
|
+ } else if (backUnit == BackUnitEnum.LARGE_AMOUNT) {
|
|
|
+ return gameTencentOrderService.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())
|
|
|
+ .ne(GameTencentOrder::getOrderId, orderLog.getOrderId())
|
|
|
+ .orderByDesc(GameTencentOrder::getCreateTime)
|
|
|
+ .last("limit " + numberOfRound)
|
|
|
+ ).stream().filter(log -> log.getIsBack().equals(BackStatusEnum.SUCCESS.getBackStatus())).count();
|
|
|
+ } else {
|
|
|
+ throw new RuntimeException("不支持的回传单位[" + backUnit.getValue() + "]");
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public long backCountForUser(BackUnitEnum backUnit, String userId, Boolean firstPolicy) {
|
|
|
+ if (backUnit == BackUnitEnum.UNIT_ONCE) {
|
|
|
+ if (firstPolicy) {
|
|
|
+ // 首单直接返回 0,必定回传
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ return gameTencentOrderService.count(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())
|
|
|
+ .eq(GameTencentOrder::getIsBack, BackStatusEnum.SUCCESS.getBackStatus())
|
|
|
+ .eq(GameTencentOrder::getWechatOpenid, userId)
|
|
|
+ .eq(GameTencentOrder::getIsFirstOrder, firstPolicy)
|
|
|
+ .ne(GameTencentOrder::getOrderId, orderLog.getOrderId())
|
|
|
+ );
|
|
|
+ } else if (backUnit == BackUnitEnum.UNIT_DAY) {
|
|
|
+ return gameTencentOrderService.count(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())
|
|
|
+ .eq(GameTencentOrder::getIsBack, BackStatusEnum.SUCCESS.getBackStatus())
|
|
|
+ .eq(GameTencentOrder::getWechatOpenid, userId)
|
|
|
+ .apply(firstPolicy, "date(recharge_time) = date(pay_time)")
|
|
|
+ .apply(!firstPolicy, "date(recharge_time) != date(pay_time)")
|
|
|
+ .ne(GameTencentOrder::getOrderId, orderLog.getOrderId())
|
|
|
+ );
|
|
|
+ } else if (backUnit == BackUnitEnum.UNIT_TIME_DAY) {
|
|
|
+ return gameTencentOrderService.count(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())
|
|
|
+ .eq(GameTencentOrder::getIsBack, BackStatusEnum.SUCCESS.getBackStatus())
|
|
|
+ .eq(GameTencentOrder::getWechatOpenid, userId)
|
|
|
+ .apply(firstPolicy, "TIMESTAMPDIFF(HOUR, recharge_time, pay_time) < 24")
|
|
|
+ .apply(!firstPolicy, "TIMESTAMPDIFF(HOUR, recharge_time, pay_time) >= 24")
|
|
|
+ .ne(GameTencentOrder::getOrderId, orderLog.getOrderId())
|
|
|
+ );
|
|
|
+ } else if (backUnit == BackUnitEnum.UNIT_TIME_2DAY) {
|
|
|
+ return gameTencentOrderService.count(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())
|
|
|
+ .eq(GameTencentOrder::getIsBack, BackStatusEnum.SUCCESS.getBackStatus())
|
|
|
+ .eq(GameTencentOrder::getWechatOpenid, userId)
|
|
|
+ .apply(firstPolicy, "TIMESTAMPDIFF(HOUR, recharge_time, pay_time) < 48")
|
|
|
+ .apply(!firstPolicy, "TIMESTAMPDIFF(HOUR, recharge_time, pay_time) >= 48")
|
|
|
+ .ne(GameTencentOrder::getOrderId, orderLog.getOrderId())
|
|
|
+ );
|
|
|
+ } else if (backUnit == BackUnitEnum.LARGE_AMOUNT) {
|
|
|
+ return gameTencentOrderService.count(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())
|
|
|
+ .eq(GameTencentOrder::getIsBack, BackStatusEnum.SUCCESS.getBackStatus())
|
|
|
+ .eq(GameTencentOrder::getWechatOpenid, userId)
|
|
|
+ .ne(GameTencentOrder::getOrderId, orderLog.getOrderId())
|
|
|
+ );
|
|
|
+ } else {
|
|
|
+ throw new RuntimeException("不支持的回传单位[" + backUnit.getValue() + "]");
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public long markUpOfFixedRate(int numberOfRound, Long markUpTime) {
|
|
|
+ numberOfRound = numberOfRound - 1;
|
|
|
+ return gameTencentOrderService.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())
|
|
|
+ .apply("TIMESTAMPDIFF(MINUTE, recharge_time, pay_time) > {0}", markUpTime)
|
|
|
+ .ne(GameTencentOrder::getOrderId, orderLog.getOrderId())
|
|
|
+ .orderByDesc(GameTencentOrder::getCreateTime)
|
|
|
+ .last("limit " + numberOfRound)
|
|
|
+ ).stream().filter(log -> log.getIsBack().equals(BackStatusEnum.SUCCESS.getBackStatus())).count();
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public long markUpForUser(String userId, Long markUpTime) {
|
|
|
+ return gameTencentOrderService.count(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())
|
|
|
+ .eq(GameTencentOrder::getIsBack, BackStatusEnum.SUCCESS.getBackStatus())
|
|
|
+ .eq(GameTencentOrder::getWechatOpenid, userId)
|
|
|
+ .apply("TIMESTAMPDIFF(MINUTE, recharge_time, pay_time) > {0}", markUpTime)
|
|
|
+ .ne(GameTencentOrder::getOrderId, orderLog.getOrderId())
|
|
|
+ );
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public Long totalRechargeAmount() {
|
|
|
+ return gameTencentOrderService.count(new QueryWrapper<GameTencentOrder>()
|
|
|
+ .select("ifnull(sum(recharge_money), 0) as recharge_money").lambda()
|
|
|
+ .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())
|
|
|
+ .eq(GameTencentOrder::getWechatOpenid, orderLog.getWechatOpenid())
|
|
|
+ .ne(GameTencentOrder::getOrderId, orderLog.getOrderId())
|
|
|
+ );
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|