|
@@ -0,0 +1,336 @@
|
|
|
+package com.zanxiang.game.back.serve.service.impl;
|
|
|
+
|
|
|
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
|
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
|
|
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
|
+import com.github.sd4324530.jtuple.Tuple2;
|
|
|
+import com.github.sd4324530.jtuple.Tuple3;
|
|
|
+import com.zanxiang.game.back.base.pojo.enums.OrderStatusEnum;
|
|
|
+import com.zanxiang.game.back.serve.dao.mapper.GameOceanengineAppOrderLogMapper;
|
|
|
+import com.zanxiang.game.back.serve.oceanengine.MiniGameCallback;
|
|
|
+import com.zanxiang.game.back.serve.pojo.entity.*;
|
|
|
+import com.zanxiang.game.back.serve.pojo.enums.BackStatusEnum;
|
|
|
+import com.zanxiang.game.back.serve.pojo.enums.BackUnitEnum;
|
|
|
+import com.zanxiang.game.back.serve.service.*;
|
|
|
+import com.zanxiang.game.back.serve.utils.BackPolicyUtil;
|
|
|
+import lombok.extern.slf4j.Slf4j;
|
|
|
+import org.apache.commons.lang3.StringUtils;
|
|
|
+import org.springframework.beans.factory.annotation.Autowired;
|
|
|
+import org.springframework.stereotype.Service;
|
|
|
+import org.springframework.transaction.annotation.Transactional;
|
|
|
+
|
|
|
+import java.time.LocalDateTime;
|
|
|
+import java.util.*;
|
|
|
+
|
|
|
+@Slf4j
|
|
|
+@Service
|
|
|
+public class GameOceanengineAppOrderLogServiceImpl extends ServiceImpl<GameOceanengineAppOrderLogMapper, GameOceanengineAppOrderLog>
|
|
|
+implements IGameOceanengineAppOrderLogService {
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private IGameBackPolicyService gameBackPolicyService;
|
|
|
+ @Autowired
|
|
|
+ private IGameOceanengineAppUserLogService gameOceanengineAppUserLogService;
|
|
|
+ @Autowired
|
|
|
+ private IGameOceanengineAppBackLogService gameOceanengineAppBackLogService;
|
|
|
+
|
|
|
+ @Override
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ public boolean callback(GameOceanengineAppOrderLog orderLog) {
|
|
|
+ if (!Objects.equals(orderLog.getOrderStatus(), OrderStatusEnum.SUCCESS_PAY.getValue())) {
|
|
|
+ // 头条只要回传支付订单
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ GameOceanengineAppUserLog userLog = userLog(orderLog);
|
|
|
+ if (userLog == null) {
|
|
|
+ // 找不到用户
|
|
|
+ return update(new LambdaUpdateWrapper<GameOceanengineAppOrderLog>()
|
|
|
+ .set(GameOceanengineAppOrderLog::getBackStatus, BackStatusEnum.NO.getBackStatus())
|
|
|
+ .set(GameOceanengineAppOrderLog::getBackMoney, orderLog.getAmount())
|
|
|
+ .set(GameOceanengineAppOrderLog::getBackMsg, "回传失败!找不到回传用户")
|
|
|
+ .eq(GameOceanengineAppOrderLog::getId, orderLog.getId())
|
|
|
+ );
|
|
|
+ }
|
|
|
+
|
|
|
+ GameBackPolicy gameBackPolicy = gameBackPolicyService.getById(orderLog.getBackPolicyId());
|
|
|
+ Tuple3<Boolean, Long, String> backInfo = BackPolicyUtil.backOrder(orderLog.getOrderNo(), gameBackPolicy, orderLog.getAmount(),
|
|
|
+ orderLog.getIsFirstOrder(),
|
|
|
+ orderLog.getPayTime(),
|
|
|
+ // 此处使用用户最近一次的重新染色时间
|
|
|
+ userLog.getCreateTime(),
|
|
|
+ orderLog.getUserId(),
|
|
|
+ new OceanengineOrderBackPolicyCheck(this, userLog, orderLog, gameBackPolicy)
|
|
|
+ );
|
|
|
+ boolean doBack = backInfo.first;
|
|
|
+ Long backMoney = backInfo.second;
|
|
|
+ String backMsg = backInfo.third;
|
|
|
+
|
|
|
+ if (!doBack) {
|
|
|
+ // 不回传
|
|
|
+ return update(new LambdaUpdateWrapper<GameOceanengineAppOrderLog>()
|
|
|
+ .set(GameOceanengineAppOrderLog::getBackStatus, BackStatusEnum.NO.getBackStatus())
|
|
|
+ .set(GameOceanengineAppOrderLog::getBackMoney, backMoney)
|
|
|
+ .set(GameOceanengineAppOrderLog::getBackMsg, backMsg)
|
|
|
+ .eq(GameOceanengineAppOrderLog::getId, orderLog.getId())
|
|
|
+ );
|
|
|
+ }
|
|
|
+
|
|
|
+ Tuple2<BackStatusEnum, String> backResult = doCallback(orderLog, orderLog.getPayTime(), backMoney);
|
|
|
+ if (StringUtils.isNotBlank(backResult.second)) {
|
|
|
+ backMsg = backMsg + ("回传失败:" + backResult.second);
|
|
|
+ }
|
|
|
+ return update(new LambdaUpdateWrapper<GameOceanengineAppOrderLog>()
|
|
|
+ .set(GameOceanengineAppOrderLog::getBackStatus, backResult.first.getBackStatus())
|
|
|
+ .set(GameOceanengineAppOrderLog::getBackMoney, backMoney)
|
|
|
+ .set(GameOceanengineAppOrderLog::getBackMsg, backMsg)
|
|
|
+ .eq(GameOceanengineAppOrderLog::getId, orderLog.getId())
|
|
|
+ );
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ public Tuple2<BackStatusEnum, String> doCallback(GameOceanengineAppOrderLog orderLog, LocalDateTime backTime, Long backMoney) {
|
|
|
+ GameOceanengineAppUserLog userLog = userLog(orderLog);
|
|
|
+ if (userLog == null) {
|
|
|
+ gameOceanengineAppBackLogService.save(GameOceanengineAppBackLog.builder()
|
|
|
+ .userId(orderLog.getUserId())
|
|
|
+ .mac(orderLog.getMac())
|
|
|
+ .imei(orderLog.getImei())
|
|
|
+ .oaid(orderLog.getOaid())
|
|
|
+ .androidId(orderLog.getAndroidId())
|
|
|
+ .idfa(orderLog.getIdfa())
|
|
|
+ .caid(orderLog.getCaid())
|
|
|
+ .gameId(orderLog.getGameId())
|
|
|
+ .accountId(orderLog.getAccountId())
|
|
|
+ .eventType(String.valueOf(MiniGameCallback.EventType.ACTIVE_PAY.getEventType()))
|
|
|
+ .eventLogId(orderLog.getId())
|
|
|
+ .createTime(LocalDateTime.now())
|
|
|
+ .payAmount(backMoney)
|
|
|
+ .backStatus(BackStatusEnum.FAILED.getBackStatus())
|
|
|
+ .errMsg("找不到用户注册信息")
|
|
|
+ .build());
|
|
|
+ return Tuple2.with(BackStatusEnum.FAILED, "找不到用户注册信息");
|
|
|
+ }
|
|
|
+ Integer eventType = MiniGameCallback.EventType.ACTIVE_PAY.getEventType();
|
|
|
+ BackStatusEnum backStatus = BackStatusEnum.SUCCESS;
|
|
|
+ String errMsg = null;
|
|
|
+ gameOceanengineAppBackLogService.save(GameOceanengineAppBackLog.builder()
|
|
|
+ .userId(orderLog.getUserId())
|
|
|
+ .mac(orderLog.getMac())
|
|
|
+ .imei(orderLog.getImei())
|
|
|
+ .oaid(orderLog.getOaid())
|
|
|
+ .androidId(orderLog.getAndroidId())
|
|
|
+ .idfa(orderLog.getIdfa())
|
|
|
+ .caid(orderLog.getCaid())
|
|
|
+ .gameId(orderLog.getGameId())
|
|
|
+ .accountId(orderLog.getAccountId())
|
|
|
+ .eventType(String.valueOf(eventType))
|
|
|
+ .eventLogId(orderLog.getId())
|
|
|
+ .createTime(LocalDateTime.now())
|
|
|
+ .payAmount(backMoney)
|
|
|
+ .backStatus(backStatus.getBackStatus())
|
|
|
+ .errMsg(errMsg)
|
|
|
+ .build());
|
|
|
+ return Tuple2.with(backStatus, errMsg);
|
|
|
+ }
|
|
|
+
|
|
|
+ private GameOceanengineAppUserLog userLog(GameOceanengineAppOrderLog orderLog) {
|
|
|
+ return gameOceanengineAppUserLogService.getOne(new LambdaQueryWrapper<GameOceanengineAppUserLog>()
|
|
|
+ .eq(GameOceanengineAppUserLog::getGameId, orderLog.getGameId())
|
|
|
+ .eq(GameOceanengineAppUserLog::getUserId, orderLog.getUserId())
|
|
|
+ .eq(GameOceanengineAppUserLog::getAccountId, orderLog.getAccountId())
|
|
|
+ .orderByDesc(GameOceanengineAppUserLog::getCreateTime)
|
|
|
+ .last("limit 1")
|
|
|
+ );
|
|
|
+ }
|
|
|
+
|
|
|
+ public static class OceanengineOrderBackPolicyCheck implements BackPolicyUtil.IBackPolicyCheck {
|
|
|
+ private final IGameOceanengineAppOrderLogService gameOceanengineAppOrderLogService;
|
|
|
+ private final GameBackPolicy gameBackPolicy;
|
|
|
+ private final GameOceanengineAppUserLog userLog;
|
|
|
+ private final GameOceanengineAppOrderLog orderLog;
|
|
|
+
|
|
|
+ public OceanengineOrderBackPolicyCheck(IGameOceanengineAppOrderLogService gameOceanengineAppOrderLogService, GameOceanengineAppUserLog userLog, GameOceanengineAppOrderLog orderLog, GameBackPolicy gameBackPolicy) {
|
|
|
+ this.gameOceanengineAppOrderLogService = gameOceanengineAppOrderLogService;
|
|
|
+ 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 gameOceanengineAppOrderLogService.list(new LambdaQueryWrapper<GameOceanengineAppOrderLog>()
|
|
|
+ .eq(GameOceanengineAppOrderLog::getGameId, orderLog.getGameId())
|
|
|
+ .eq(GameOceanengineAppOrderLog::getAccountId, orderLog.getAccountId())
|
|
|
+ .eq(GameOceanengineAppOrderLog::getBackPolicyId, gameBackPolicy.getId())
|
|
|
+ .eq(GameOceanengineAppOrderLog::getOrderStatus, OrderStatusEnum.SUCCESS_PAY.getValue())
|
|
|
+ .eq(GameOceanengineAppOrderLog::getIsFirstOrder, firstPolicy)
|
|
|
+ .ne(GameOceanengineAppOrderLog::getOrderNo, orderLog.getOrderNo())
|
|
|
+ .orderByDesc(GameOceanengineAppOrderLog::getCreateTime)
|
|
|
+ .last("limit " + numberOfRound)
|
|
|
+ ).stream().filter(log -> log.getBackStatus().equals(BackStatusEnum.SUCCESS.getBackStatus())).count();
|
|
|
+ } else if (backUnit == BackUnitEnum.UNIT_DAY) {
|
|
|
+ return gameOceanengineAppOrderLogService.list(new LambdaQueryWrapper<GameOceanengineAppOrderLog>()
|
|
|
+ .eq(GameOceanengineAppOrderLog::getGameId, orderLog.getGameId())
|
|
|
+ .eq(GameOceanengineAppOrderLog::getAccountId, orderLog.getAccountId())
|
|
|
+ .eq(GameOceanengineAppOrderLog::getBackPolicyId, gameBackPolicy.getId())
|
|
|
+ .eq(GameOceanengineAppOrderLog::getOrderStatus, OrderStatusEnum.SUCCESS_PAY.getValue())
|
|
|
+ .apply(firstPolicy, "date(reg_time) = date(pay_time)")
|
|
|
+ .apply(!firstPolicy, "date(reg_time) != date(pay_time)")
|
|
|
+ .ne(GameOceanengineAppOrderLog::getOrderNo, orderLog.getOrderNo())
|
|
|
+ .orderByDesc(GameOceanengineAppOrderLog::getCreateTime)
|
|
|
+ .last("limit " + numberOfRound)
|
|
|
+ ).stream().filter(log -> log.getBackStatus().equals(BackStatusEnum.SUCCESS.getBackStatus())).count();
|
|
|
+ } else if (backUnit == BackUnitEnum.UNIT_TIME_DAY) {
|
|
|
+ return gameOceanengineAppOrderLogService.list(new LambdaQueryWrapper<GameOceanengineAppOrderLog>()
|
|
|
+ .eq(GameOceanengineAppOrderLog::getGameId, orderLog.getGameId())
|
|
|
+ .eq(GameOceanengineAppOrderLog::getAccountId, orderLog.getAccountId())
|
|
|
+ .eq(GameOceanengineAppOrderLog::getBackPolicyId, gameBackPolicy.getId())
|
|
|
+ .eq(GameOceanengineAppOrderLog::getOrderStatus, OrderStatusEnum.SUCCESS_PAY.getValue())
|
|
|
+ .apply(firstPolicy, "TIMESTAMPDIFF(HOUR, reg_time, pay_time) < 24")
|
|
|
+ .apply(!firstPolicy, "TIMESTAMPDIFF(HOUR, reg_time, pay_time) >= 24")
|
|
|
+ .ne(GameOceanengineAppOrderLog::getOrderNo, orderLog.getOrderNo())
|
|
|
+ .orderByDesc(GameOceanengineAppOrderLog::getCreateTime)
|
|
|
+ .last("limit " + numberOfRound)
|
|
|
+ ).stream().filter(log -> log.getBackStatus().equals(BackStatusEnum.SUCCESS.getBackStatus())).count();
|
|
|
+ } else if (backUnit == BackUnitEnum.UNIT_TIME_2DAY) {
|
|
|
+ return gameOceanengineAppOrderLogService.list(new LambdaQueryWrapper<GameOceanengineAppOrderLog>()
|
|
|
+ .eq(GameOceanengineAppOrderLog::getGameId, orderLog.getGameId())
|
|
|
+ .eq(GameOceanengineAppOrderLog::getAccountId, orderLog.getAccountId())
|
|
|
+ .eq(GameOceanengineAppOrderLog::getBackPolicyId, gameBackPolicy.getId())
|
|
|
+ .eq(GameOceanengineAppOrderLog::getOrderStatus, OrderStatusEnum.SUCCESS_PAY.getValue())
|
|
|
+ .apply(firstPolicy, "TIMESTAMPDIFF(HOUR, reg_time, pay_time) < 48")
|
|
|
+ .apply(!firstPolicy, "TIMESTAMPDIFF(HOUR, reg_time, pay_time) >= 48")
|
|
|
+ .ne(GameOceanengineAppOrderLog::getOrderNo, orderLog.getOrderNo())
|
|
|
+ .orderByDesc(GameOceanengineAppOrderLog::getCreateTime)
|
|
|
+ .last("limit " + numberOfRound)
|
|
|
+ ).stream().filter(log -> log.getBackStatus().equals(BackStatusEnum.SUCCESS.getBackStatus())).count();
|
|
|
+ } else if (backUnit == BackUnitEnum.LARGE_AMOUNT) {
|
|
|
+ return gameOceanengineAppOrderLogService.list(new LambdaQueryWrapper<GameOceanengineAppOrderLog>()
|
|
|
+ .eq(GameOceanengineAppOrderLog::getGameId, orderLog.getGameId())
|
|
|
+ .eq(GameOceanengineAppOrderLog::getAccountId, orderLog.getAccountId())
|
|
|
+ .eq(GameOceanengineAppOrderLog::getBackPolicyId, gameBackPolicy.getId())
|
|
|
+ .eq(GameOceanengineAppOrderLog::getOrderStatus, OrderStatusEnum.SUCCESS_PAY.getValue())
|
|
|
+ .ne(GameOceanengineAppOrderLog::getOrderNo, orderLog.getOrderNo())
|
|
|
+ .orderByDesc(GameOceanengineAppOrderLog::getCreateTime)
|
|
|
+ .last("limit " + numberOfRound)
|
|
|
+ ).stream().filter(log -> log.getBackStatus().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 gameOceanengineAppOrderLogService.count(new LambdaQueryWrapper<GameOceanengineAppOrderLog>()
|
|
|
+ .eq(GameOceanengineAppOrderLog::getGameId, orderLog.getGameId())
|
|
|
+ .eq(GameOceanengineAppOrderLog::getAccountId, orderLog.getAccountId())
|
|
|
+ .eq(GameOceanengineAppOrderLog::getBackPolicyId, gameBackPolicy.getId())
|
|
|
+ .eq(GameOceanengineAppOrderLog::getOrderStatus, OrderStatusEnum.SUCCESS_PAY.getValue())
|
|
|
+ .eq(GameOceanengineAppOrderLog::getBackStatus, BackStatusEnum.SUCCESS.getBackStatus())
|
|
|
+ .eq(GameOceanengineAppOrderLog::getUserId, userId)
|
|
|
+ .eq(GameOceanengineAppOrderLog::getIsFirstOrder, firstPolicy)
|
|
|
+ .ne(GameOceanengineAppOrderLog::getOrderNo, orderLog.getOrderNo())
|
|
|
+ );
|
|
|
+ } else if (backUnit == BackUnitEnum.UNIT_DAY) {
|
|
|
+ return gameOceanengineAppOrderLogService.count(new LambdaQueryWrapper<GameOceanengineAppOrderLog>()
|
|
|
+ .eq(GameOceanengineAppOrderLog::getGameId, orderLog.getGameId())
|
|
|
+ .eq(GameOceanengineAppOrderLog::getAccountId, orderLog.getAccountId())
|
|
|
+ .eq(GameOceanengineAppOrderLog::getBackPolicyId, gameBackPolicy.getId())
|
|
|
+ .eq(GameOceanengineAppOrderLog::getOrderStatus, OrderStatusEnum.SUCCESS_PAY.getValue())
|
|
|
+ .eq(GameOceanengineAppOrderLog::getBackStatus, BackStatusEnum.SUCCESS.getBackStatus())
|
|
|
+ .eq(GameOceanengineAppOrderLog::getUserId, userId)
|
|
|
+ .apply(firstPolicy, "date(reg_time) = date(pay_time)")
|
|
|
+ .apply(!firstPolicy, "date(reg_time) != date(pay_time)")
|
|
|
+ .ne(GameOceanengineAppOrderLog::getOrderNo, orderLog.getOrderNo())
|
|
|
+ );
|
|
|
+ } else if (backUnit == BackUnitEnum.UNIT_TIME_DAY) {
|
|
|
+ return gameOceanengineAppOrderLogService.count(new LambdaQueryWrapper<GameOceanengineAppOrderLog>()
|
|
|
+ .eq(GameOceanengineAppOrderLog::getGameId, orderLog.getGameId())
|
|
|
+ .eq(GameOceanengineAppOrderLog::getAccountId, orderLog.getAccountId())
|
|
|
+ .eq(GameOceanengineAppOrderLog::getBackPolicyId, gameBackPolicy.getId())
|
|
|
+ .eq(GameOceanengineAppOrderLog::getOrderStatus, OrderStatusEnum.SUCCESS_PAY.getValue())
|
|
|
+ .eq(GameOceanengineAppOrderLog::getBackStatus, BackStatusEnum.SUCCESS.getBackStatus())
|
|
|
+ .eq(GameOceanengineAppOrderLog::getUserId, userId)
|
|
|
+ .apply(firstPolicy, "TIMESTAMPDIFF(HOUR, reg_time, pay_time) < 24")
|
|
|
+ .apply(!firstPolicy, "TIMESTAMPDIFF(HOUR, reg_time, pay_time) >= 24")
|
|
|
+ .ne(GameOceanengineAppOrderLog::getOrderNo, orderLog.getOrderNo())
|
|
|
+ );
|
|
|
+ } else if (backUnit == BackUnitEnum.UNIT_TIME_2DAY) {
|
|
|
+ return gameOceanengineAppOrderLogService.count(new LambdaQueryWrapper<GameOceanengineAppOrderLog>()
|
|
|
+ .eq(GameOceanengineAppOrderLog::getGameId, orderLog.getGameId())
|
|
|
+ .eq(GameOceanengineAppOrderLog::getAccountId, orderLog.getAccountId())
|
|
|
+ .eq(GameOceanengineAppOrderLog::getBackPolicyId, gameBackPolicy.getId())
|
|
|
+ .eq(GameOceanengineAppOrderLog::getOrderStatus, OrderStatusEnum.SUCCESS_PAY.getValue())
|
|
|
+ .eq(GameOceanengineAppOrderLog::getBackStatus, BackStatusEnum.SUCCESS.getBackStatus())
|
|
|
+ .eq(GameOceanengineAppOrderLog::getUserId, userId)
|
|
|
+ .apply(firstPolicy, "TIMESTAMPDIFF(HOUR, reg_time, pay_time) < 48")
|
|
|
+ .apply(!firstPolicy, "TIMESTAMPDIFF(HOUR, reg_time, pay_time) >= 48")
|
|
|
+ .ne(GameOceanengineAppOrderLog::getOrderNo, orderLog.getOrderNo())
|
|
|
+ );
|
|
|
+ } else if (backUnit == BackUnitEnum.LARGE_AMOUNT) {
|
|
|
+ return gameOceanengineAppOrderLogService.count(new LambdaQueryWrapper<GameOceanengineAppOrderLog>()
|
|
|
+ .eq(GameOceanengineAppOrderLog::getGameId, orderLog.getGameId())
|
|
|
+ .eq(GameOceanengineAppOrderLog::getAccountId, orderLog.getAccountId())
|
|
|
+ .eq(GameOceanengineAppOrderLog::getBackPolicyId, gameBackPolicy.getId())
|
|
|
+ .eq(GameOceanengineAppOrderLog::getOrderStatus, OrderStatusEnum.SUCCESS_PAY.getValue())
|
|
|
+ .eq(GameOceanengineAppOrderLog::getBackStatus, BackStatusEnum.SUCCESS.getBackStatus())
|
|
|
+ .eq(GameOceanengineAppOrderLog::getUserId, userId)
|
|
|
+ .ne(GameOceanengineAppOrderLog::getOrderNo, orderLog.getOrderNo())
|
|
|
+ );
|
|
|
+ } else {
|
|
|
+ throw new RuntimeException("不支持的回传单位[" + backUnit.getValue() + "]");
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public long markUpOfFixedRate(int numberOfRound, Long markUpTime) {
|
|
|
+ numberOfRound = numberOfRound - 1;
|
|
|
+ return gameOceanengineAppOrderLogService.list(new LambdaQueryWrapper<GameOceanengineAppOrderLog>()
|
|
|
+ .eq(GameOceanengineAppOrderLog::getGameId, orderLog.getGameId())
|
|
|
+ .eq(GameOceanengineAppOrderLog::getAccountId, orderLog.getAccountId())
|
|
|
+ .eq(GameOceanengineAppOrderLog::getBackPolicyId, gameBackPolicy.getId())
|
|
|
+ .eq(GameOceanengineAppOrderLog::getOrderStatus, OrderStatusEnum.SUCCESS_PAY.getValue())
|
|
|
+ .apply("TIMESTAMPDIFF(MINUTE, reg_time, pay_time) > {0}", markUpTime)
|
|
|
+ .ne(GameOceanengineAppOrderLog::getOrderNo, orderLog.getOrderNo())
|
|
|
+ .orderByDesc(GameOceanengineAppOrderLog::getCreateTime)
|
|
|
+ .last("limit " + numberOfRound)
|
|
|
+ ).stream().filter(log -> log.getBackStatus().equals(BackStatusEnum.SUCCESS.getBackStatus())).count();
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public long markUpForUser(String userId, Long markUpTime) {
|
|
|
+ return gameOceanengineAppOrderLogService.count(new LambdaQueryWrapper<GameOceanengineAppOrderLog>()
|
|
|
+ .eq(GameOceanengineAppOrderLog::getGameId, orderLog.getGameId())
|
|
|
+ .eq(GameOceanengineAppOrderLog::getAccountId, orderLog.getAccountId())
|
|
|
+ .eq(GameOceanengineAppOrderLog::getBackPolicyId, gameBackPolicy.getId())
|
|
|
+ .eq(GameOceanengineAppOrderLog::getOrderStatus, OrderStatusEnum.SUCCESS_PAY.getValue())
|
|
|
+ .eq(GameOceanengineAppOrderLog::getBackStatus, BackStatusEnum.SUCCESS.getBackStatus())
|
|
|
+ .eq(GameOceanengineAppOrderLog::getUserId, userId)
|
|
|
+ .apply("TIMESTAMPDIFF(MINUTE, reg_time, pay_time) > {0}", markUpTime)
|
|
|
+ .ne(GameOceanengineAppOrderLog::getOrderNo, orderLog.getOrderNo())
|
|
|
+ );
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public Long totalRechargeAmount() {
|
|
|
+ return gameOceanengineAppOrderLogService.getOne(new QueryWrapper<GameOceanengineAppOrderLog>()
|
|
|
+ .select("ifnull(sum(amount), 0) as amount").lambda()
|
|
|
+ .eq(GameOceanengineAppOrderLog::getGameId, orderLog.getGameId())
|
|
|
+ .eq(GameOceanengineAppOrderLog::getAccountId, orderLog.getAccountId())
|
|
|
+ .eq(GameOceanengineAppOrderLog::getBackPolicyId, gameBackPolicy.getId())
|
|
|
+ .eq(GameOceanengineAppOrderLog::getOrderStatus, OrderStatusEnum.SUCCESS_PAY.getValue())
|
|
|
+ .eq(GameOceanengineAppOrderLog::getUserId, userLog.getUserId())
|
|
|
+ .ne(GameOceanengineAppOrderLog::getOrderNo, orderLog.getOrderNo())
|
|
|
+ ).getAmount();
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|