|  | @@ -3,30 +3,46 @@ 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.core.metadata.IPage;
 | 
	
		
			
				|  |  | +import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 | 
	
		
			
				|  |  |  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.dto.GameOceanengineAppOrderLogDTO;
 | 
	
		
			
				|  |  |  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.pojo.vo.*;
 | 
	
		
			
				|  |  | +import com.zanxiang.game.back.serve.pojo.vo.GameOceanengineAppOrderLogVO;
 | 
	
		
			
				|  |  | +import com.zanxiang.game.back.serve.pojo.vo.GameOceanengineAppOrderLogVO;
 | 
	
		
			
				|  |  |  import com.zanxiang.game.back.serve.service.*;
 | 
	
		
			
				|  |  |  import com.zanxiang.game.back.serve.utils.BackPolicyUtil;
 | 
	
		
			
				|  |  | +import com.zanxiang.game.back.serve.utils.OrderUtil;
 | 
	
		
			
				|  |  | +import com.zanxiang.game.module.base.ServerInfo;
 | 
	
		
			
				|  |  | +import com.zanxiang.game.module.base.pojo.vo.AgentRpcVO;
 | 
	
		
			
				|  |  | +import com.zanxiang.game.module.base.rpc.IAgentRpc;
 | 
	
		
			
				|  |  | +import com.zanxiang.module.util.bean.BeanUtil;
 | 
	
		
			
				|  |  |  import lombok.extern.slf4j.Slf4j;
 | 
	
		
			
				|  |  | +import org.apache.commons.collections4.CollectionUtils;
 | 
	
		
			
				|  |  |  import org.apache.commons.lang3.StringUtils;
 | 
	
		
			
				|  |  | +import org.apache.dubbo.config.annotation.DubboReference;
 | 
	
		
			
				|  |  |  import org.springframework.beans.factory.annotation.Autowired;
 | 
	
		
			
				|  |  |  import org.springframework.stereotype.Service;
 | 
	
		
			
				|  |  |  import org.springframework.transaction.annotation.Transactional;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  import java.time.LocalDateTime;
 | 
	
		
			
				|  |  | +import java.time.LocalTime;
 | 
	
		
			
				|  |  |  import java.util.*;
 | 
	
		
			
				|  |  | +import java.util.function.Function;
 | 
	
		
			
				|  |  | +import java.util.stream.Collectors;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  @Slf4j
 | 
	
		
			
				|  |  |  @Service
 | 
	
		
			
				|  |  |  public class GameOceanengineAppOrderLogServiceImpl extends ServiceImpl<GameOceanengineAppOrderLogMapper, GameOceanengineAppOrderLog>
 | 
	
		
			
				|  |  | -implements IGameOceanengineAppOrderLogService {
 | 
	
		
			
				|  |  | +        implements IGameOceanengineAppOrderLogService {
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      @Autowired
 | 
	
		
			
				|  |  |      private IGameBackPolicyService gameBackPolicyService;
 | 
	
	
		
			
				|  | @@ -36,6 +52,8 @@ implements IGameOceanengineAppOrderLogService {
 | 
	
		
			
				|  |  |      private IGameOceanengineAppBackLogService gameOceanengineAppBackLogService;
 | 
	
		
			
				|  |  |      @Autowired
 | 
	
		
			
				|  |  |      private IGameOceanengineAppOrderSplitLogService gameOceanengineAppOrderSplitLogService;
 | 
	
		
			
				|  |  | +    @DubboReference(providedBy = ServerInfo.SERVER_DUBBO_NAME)
 | 
	
		
			
				|  |  | +    private IAgentRpc agentRpc;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      @Override
 | 
	
		
			
				|  |  |      @Transactional(rollbackFor = Exception.class)
 | 
	
	
		
			
				|  | @@ -164,6 +182,71 @@ implements IGameOceanengineAppOrderLogService {
 | 
	
		
			
				|  |  |          return Tuple2.with(backStatus, errMsg);
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +    @Override
 | 
	
		
			
				|  |  | +    public IPage<GameOceanengineAppOrderLogVO> oceanengineAppOrderLogList(GameOceanengineAppOrderLogDTO dto) {
 | 
	
		
			
				|  |  | +        IPage<GameOceanengineAppOrderLog> page = page(dto.toPage(), new LambdaQueryWrapper<GameOceanengineAppOrderLog>()
 | 
	
		
			
				|  |  | +                .eq(StringUtils.isNotBlank(dto.getUserId()), GameOceanengineAppOrderLog::getUserId, dto.getUserId())
 | 
	
		
			
				|  |  | +                .eq(StringUtils.isNotBlank(dto.getMac()), GameOceanengineAppOrderLog::getMac, dto.getMac())
 | 
	
		
			
				|  |  | +                .eq(StringUtils.isNotBlank(dto.getImei()), GameOceanengineAppOrderLog::getImei, dto.getImei())
 | 
	
		
			
				|  |  | +                .eq(StringUtils.isNotBlank(dto.getOaid()), GameOceanengineAppOrderLog::getOaid, dto.getOaid())
 | 
	
		
			
				|  |  | +                .eq(StringUtils.isNotBlank(dto.getAndroidId()), GameOceanengineAppOrderLog::getAndroidId, dto.getAndroidId())
 | 
	
		
			
				|  |  | +                .eq(StringUtils.isNotBlank(dto.getIdfa()), GameOceanengineAppOrderLog::getIdfa, dto.getIdfa())
 | 
	
		
			
				|  |  | +                .eq(StringUtils.isNotBlank(dto.getCaid()), GameOceanengineAppOrderLog::getCaid, dto.getCaid())
 | 
	
		
			
				|  |  | +                .eq(StringUtils.isNotBlank(dto.getAgentKey()), GameOceanengineAppOrderLog::getAgentKey, dto.getAgentKey())
 | 
	
		
			
				|  |  | +                .ge(dto.getRegTimeBegin() != null, GameOceanengineAppOrderLog::getRegTime, dto.getRegTimeBegin() == null ? null : LocalDateTime.of(dto.getRegTimeBegin(), LocalTime.MIDNIGHT))
 | 
	
		
			
				|  |  | +                .le(dto.getRegTimeEnd() != null, GameOceanengineAppOrderLog::getRegTime, dto.getRegTimeEnd() == null ? null : LocalDateTime.of(dto.getRegTimeEnd(), LocalTime.MAX))
 | 
	
		
			
				|  |  | +                .eq(null != dto.getGameId(), GameOceanengineAppOrderLog::getGameId, dto.getGameId())
 | 
	
		
			
				|  |  | +                .eq(null != dto.getAccountId(), GameOceanengineAppOrderLog::getAccountId, dto.getAccountId())
 | 
	
		
			
				|  |  | +                .eq(StringUtils.isNotBlank(dto.getOrderNo()), GameOceanengineAppOrderLog::getOrderNo, dto.getOrderNo())
 | 
	
		
			
				|  |  | +                .eq(null != dto.getBackStatus(), GameOceanengineAppOrderLog::getBackStatus, dto.getBackStatus())
 | 
	
		
			
				|  |  | +                .eq(dto.getIsFirstOrder() != null, GameOceanengineAppOrderLog::getIsFirstOrder, dto.getIsFirstOrder())
 | 
	
		
			
				|  |  | +                .eq(null != dto.getOrderStatus(), GameOceanengineAppOrderLog::getOrderStatus, dto.getOrderStatus())
 | 
	
		
			
				|  |  | +                .like(StringUtils.isNotBlank(dto.getRoleName()), GameOceanengineAppOrderLog::getRoleName, dto.getRoleName())
 | 
	
		
			
				|  |  | +                .apply(dto.getRegPayIntervalTimeMin() != null, "if(pay_time is not null, TIMESTAMPDIFF(minute, reg_time, pay_time), null) >= {0}", dto.getRegPayIntervalTimeMin())
 | 
	
		
			
				|  |  | +                .apply(dto.getRegPayIntervalTimeMax() != null, "if(pay_time is not null, TIMESTAMPDIFF(minute, reg_time, pay_time), null) <= {0}", dto.getRegPayIntervalTimeMax())
 | 
	
		
			
				|  |  | +                .orderByDesc(GameOceanengineAppOrderLog::getCreateTime)
 | 
	
		
			
				|  |  | +        );
 | 
	
		
			
				|  |  | +        IPage<GameOceanengineAppOrderLogVO> result = new Page<>(page.getCurrent(), page.getSize(), page.getTotal());
 | 
	
		
			
				|  |  | +        if (CollectionUtils.isEmpty(page.getRecords())) {
 | 
	
		
			
				|  |  | +            return result;
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        result.setRecords(toVOBatch(page.getRecords()));
 | 
	
		
			
				|  |  | +        return result;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    private List<GameOceanengineAppOrderLogVO> toVOBatch(List<GameOceanengineAppOrderLog> logList) {
 | 
	
		
			
				|  |  | +        if (CollectionUtils.isEmpty(logList)) {
 | 
	
		
			
				|  |  | +            return Collections.emptyList();
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        List<GameOceanengineAppOrderSplitLogVO> orderSplitList = gameOceanengineAppOrderSplitLogService.listByOrderNo(logList.stream().map(GameOceanengineAppOrderLog::getOrderNo).collect(Collectors.toSet()));
 | 
	
		
			
				|  |  | +        Set<String> agentKeys = logList.stream().map(GameOceanengineAppOrderLog::getAgentKey).filter(StringUtils::isNotBlank).collect(Collectors.toSet());
 | 
	
		
			
				|  |  | +        Map<String, AgentRpcVO> agentMap = CollectionUtils.isEmpty(agentKeys) ? Collections.emptyMap() : agentRpc.getByAgentKeys(new ArrayList<>(agentKeys))
 | 
	
		
			
				|  |  | +                .getData().stream().collect(Collectors.toMap(AgentRpcVO::getAgentKey, Function.identity()));
 | 
	
		
			
				|  |  | +        return logList.stream().map(log -> {
 | 
	
		
			
				|  |  | +            GameOceanengineAppOrderLogVO vo = toVOSimple(log);
 | 
	
		
			
				|  |  | +            if (StringUtils.isNotBlank(log.getAgentKey())) {
 | 
	
		
			
				|  |  | +                AgentRpcVO agent = agentMap.get(log.getAgentKey());
 | 
	
		
			
				|  |  | +                if (agent != null) {
 | 
	
		
			
				|  |  | +                    vo.setAgentName(agent.getAgentName());
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +            List<GameOceanengineAppOrderSplitLogVO> splitList = orderSplitList.stream().filter(obj -> obj.getOrderNo().equals(log.getOrderNo())).collect(Collectors.toList());
 | 
	
		
			
				|  |  | +            vo.setSplitOrderList(splitList);
 | 
	
		
			
				|  |  | +            return vo;
 | 
	
		
			
				|  |  | +        }).collect(Collectors.toList());
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    private GameOceanengineAppOrderLogVO toVOSimple(GameOceanengineAppOrderLog log) {
 | 
	
		
			
				|  |  | +        if (log == null) {
 | 
	
		
			
				|  |  | +            return null;
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        GameOceanengineAppOrderLogVO vo = BeanUtil.copy(log, GameOceanengineAppOrderLogVO.class);
 | 
	
		
			
				|  |  | +        vo.setRegPayIntervalTime(OrderUtil.regPayIntervalTime(log.getPayTime(), log.getRegTime()));
 | 
	
		
			
				|  |  | +        return vo;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |      private GameOceanengineAppUserLog userLog(GameOceanengineAppOrderLog orderLog) {
 | 
	
		
			
				|  |  |          return gameOceanengineAppUserLogService.getOne(new LambdaQueryWrapper<GameOceanengineAppUserLog>()
 | 
	
		
			
				|  |  |                  .eq(GameOceanengineAppUserLog::getGameId, orderLog.getGameId())
 |