|  | @@ -5229,18 +5229,38 @@ public class GameDataServiceImpl implements IGameDataService {
 | 
	
		
			
				|  |  |      @Override
 | 
	
		
			
				|  |  |      public Page<FlowMonitorVO> getFlowMonitor(FlowMonitorDTO dto) {
 | 
	
		
			
				|  |  |          LocalDate today = LocalDate.now();
 | 
	
		
			
				|  |  | -        //如果消耗时间和订单时间都为空,那么就给默认值
 | 
	
		
			
				|  |  | +        //如果消耗时间为空,那么就给默认值
 | 
	
		
			
				|  |  |          if(dto.getCostBeginDate()==null && dto.getCostEndDate()==null){
 | 
	
		
			
				|  |  |              LocalDate oneMonthAgo = today.minusMonths(1);
 | 
	
		
			
				|  |  |              //消耗时间如果为空,那么就给默认值当天前一个月
 | 
	
		
			
				|  |  |              dto.setCostBeginDate(oneMonthAgo);
 | 
	
		
			
				|  |  |              dto.setCostEndDate(today);
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        //校验订单时间,必须包含在消耗时间内
 | 
	
		
			
				|  |  | +        if(dto.getOrderBeginDate()!=null && dto.getOrderEndDate()!=null){
 | 
	
		
			
				|  |  | +            //如果订单选择范围开始时间在消耗之前,那么就将订单时间设置为消耗开始时间
 | 
	
		
			
				|  |  | +            if(dto.getOrderBeginDate().isBefore(dto.getCostBeginDate())){
 | 
	
		
			
				|  |  | +                dto.setOrderBeginDate(dto.getCostBeginDate());
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +            //如果订单选择范围结束时间在消耗之后,那么就将订单时间设置为消耗结束时间
 | 
	
		
			
				|  |  | +            if(dto.getOrderEndDate().isAfter(dto.getCostEndDate())){
 | 
	
		
			
				|  |  | +                dto.setOrderEndDate(dto.getCostEndDate());
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        //如果订单时间为空,那么就最多查询消耗结束时间当天和前一天的数据
 | 
	
		
			
				|  |  |          if(dto.getOrderBeginDate()==null && dto.getOrderEndDate()==null){
 | 
	
		
			
				|  |  | -            LocalDate twoDaysAgo = today.minusDays(1);
 | 
	
		
			
				|  |  | -            //订单时间如果为空,那么就给默认值当天和前一天
 | 
	
		
			
				|  |  | -            dto.setOrderBeginDate(twoDaysAgo);
 | 
	
		
			
				|  |  | -            dto.setOrderEndDate(today);
 | 
	
		
			
				|  |  | +            //订单结束时间默认为消耗结束时间
 | 
	
		
			
				|  |  | +            dto.setOrderEndDate(dto.getCostEndDate());
 | 
	
		
			
				|  |  | +            //获取前一天
 | 
	
		
			
				|  |  | +            LocalDate twoDaysAgo = dto.getCostEndDate().minusDays(1);
 | 
	
		
			
				|  |  | +            //如果前一天在消耗开始之后或等于,那么就将订单开始时间设置为前一天
 | 
	
		
			
				|  |  | +            if(twoDaysAgo.isEqual(dto.getCostBeginDate())||twoDaysAgo.isAfter(dto.getCostBeginDate())){
 | 
	
		
			
				|  |  | +                dto.setOrderBeginDate(twoDaysAgo);
 | 
	
		
			
				|  |  | +            }else {
 | 
	
		
			
				|  |  | +                dto.setOrderBeginDate(dto.getCostEndDate());
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |          //分页条件
 | 
	
		
			
				|  |  |          Pager pager = dao.createPager(dto.getPageNum(), dto.getPageSize());
 | 
	
	
		
			
				|  | @@ -5248,14 +5268,17 @@ public class GameDataServiceImpl implements IGameDataService {
 | 
	
		
			
				|  |  |          //订单表查询条件
 | 
	
		
			
				|  |  |          Criteria cri = getOrderQueryStr(dto);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +        //渠道单独的查询条件
 | 
	
		
			
				|  |  | +        Criteria agentCri = getAgentQueryStr(dto);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |          //查询总记录数
 | 
	
		
			
				|  |  | -        Sql countSql = Sqls.create(getCountNumSql(cri));
 | 
	
		
			
				|  |  | +        Sql countSql = Sqls.create(getCountNumSql(cri,agentCri));
 | 
	
		
			
				|  |  |          countSql.setCallback(Sqls.callback.integer());
 | 
	
		
			
				|  |  |          dao.execute(countSql);
 | 
	
		
			
				|  |  |          pager.setRecordCount(countSql.getInt());
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          //查询sql
 | 
	
		
			
				|  |  | -        Sql sql = Sqls.create(flowMonitorSql(cri));
 | 
	
		
			
				|  |  | +        Sql sql = Sqls.create(flowMonitorSql(cri,agentCri));
 | 
	
		
			
				|  |  |          //设置自定义回传类型
 | 
	
		
			
				|  |  |          sql.setCallback(Sqls.callback.entities());
 | 
	
		
			
				|  |  |          sql.setEntity(dao.getEntity(FlowMonitorVO.class));
 | 
	
	
		
			
				|  | @@ -5325,7 +5348,7 @@ public class GameDataServiceImpl implements IGameDataService {
 | 
	
		
			
				|  |  |          return sql;
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    private String getCountNumSql(Criteria cri){
 | 
	
		
			
				|  |  | +    private String getCountNumSql(Criteria cri,Criteria agentCri){
 | 
	
		
			
				|  |  |          String sql = """
 | 
	
		
			
				|  |  |                  
 | 
	
		
			
				|  |  |                  SELECT COUNT(*) FROM (
 | 
	
	
		
			
				|  | @@ -5539,7 +5562,7 @@ public class GameDataServiceImpl implements IGameDataService {
 | 
	
		
			
				|  |  |                                  ) f
 | 
	
		
			
				|  |  |                                                 group by day, source_system
 | 
	
		
			
				|  |  |                                       ) ab  
 | 
	
		
			
				|  |  | -                                     """+ cri +""" 
 | 
	
		
			
				|  |  | +                                     """+ agentCri +""" 
 | 
	
		
			
				|  |  |                                       order by day desc
 | 
	
		
			
				|  |  |                  
 | 
	
		
			
				|  |  |                  
 | 
	
	
		
			
				|  | @@ -5578,7 +5601,7 @@ public class GameDataServiceImpl implements IGameDataService {
 | 
	
		
			
				|  |  |              BigDecimal costBigDecimal = new BigDecimal(costCount);
 | 
	
		
			
				|  |  |              BigDecimal amountBigDecimal = new BigDecimal(amountCount);
 | 
	
		
			
				|  |  |              BigDecimal bd = amountBigDecimal.divide(costBigDecimal, 2, RoundingMode.HALF_UP);
 | 
	
		
			
				|  |  | -            vo.setRecoveryCount(bd.doubleValue());
 | 
	
		
			
				|  |  | +            vo.setRecoveryCount(bd.doubleValue()*100);
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |          return vo;
 | 
	
		
			
				|  |  |      }
 | 
	
	
		
			
				|  | @@ -5623,7 +5646,7 @@ public class GameDataServiceImpl implements IGameDataService {
 | 
	
		
			
				|  |  |       * @param cri 条件
 | 
	
		
			
				|  |  |       * @return sql
 | 
	
		
			
				|  |  |       */
 | 
	
		
			
				|  |  | -    public String flowMonitorSql(Criteria cri){
 | 
	
		
			
				|  |  | +    public String flowMonitorSql(Criteria cri,Criteria agentCri){
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          String sql  = """
 | 
	
		
			
				|  |  |                  select day as order_date,
 | 
	
	
		
			
				|  | @@ -5837,7 +5860,7 @@ public class GameDataServiceImpl implements IGameDataService {
 | 
	
		
			
				|  |  |                  ) f
 | 
	
		
			
				|  |  |                                 group by day, source_system
 | 
	
		
			
				|  |  |                       ) ab  
 | 
	
		
			
				|  |  | -                     """+ cri +"""
 | 
	
		
			
				|  |  | +                     """+ agentCri +"""
 | 
	
		
			
				|  |  |                       order by day desc
 | 
	
		
			
				|  |  |                      
 | 
	
		
			
				|  |  |                      """;
 | 
	
	
		
			
				|  | @@ -5846,6 +5869,52 @@ public class GameDataServiceImpl implements IGameDataService {
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +    /**
 | 
	
		
			
				|  |  | +     * 拼接查询条件
 | 
	
		
			
				|  |  | +     *
 | 
	
		
			
				|  |  | +     * @param dto
 | 
	
		
			
				|  |  | +     * @return
 | 
	
		
			
				|  |  | +     */
 | 
	
		
			
				|  |  | +    public Criteria getAgentQueryStr(FlowMonitorDTO dto) {
 | 
	
		
			
				|  |  | +        Criteria cri = Cnd.cri();
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        //SDK类型
 | 
	
		
			
				|  |  | +        if (StringUtils.isNotBlank(dto.getSourceSystem())) {
 | 
	
		
			
				|  |  | +            cri.where().andEquals("source_system", dto.getSourceSystem());
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        String gameColumn = "game_id";
 | 
	
		
			
				|  |  | +        if (dto.getGameDimension() != 1) {
 | 
	
		
			
				|  |  | +            gameColumn = "parent_game_id";
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        //拼接游戏ID
 | 
	
		
			
				|  |  | +        if (CollectionUtils.isNotEmpty(dto.getGameId())) {
 | 
	
		
			
				|  |  | +            cri.where().andInList(gameColumn, dto.getGameId());
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        //拼接查询时间
 | 
	
		
			
				|  |  | +        if (dto.getOrderBeginDate() != null && dto.getOrderEndDate() != null) {
 | 
	
		
			
				|  |  | +            cri.where().andBetween("day", dto.getOrderBeginDate(), dto.getOrderEndDate());
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        //拼接投手ID
 | 
	
		
			
				|  |  | +        if (CollectionUtils.isNotEmpty(dto.getPitcherId())) {
 | 
	
		
			
				|  |  | +            cri.where().andInList("pitcher_id", dto.getPitcherId());
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        //拼接渠道ID
 | 
	
		
			
				|  |  | +        if (CollectionUtils.isNotEmpty(dto.getAgentId())) {
 | 
	
		
			
				|  |  | +            cri.where().andInList("agent_id", dto.getAgentId());
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        //拼接广告账号id
 | 
	
		
			
				|  |  | +        if (CollectionUtils.isNotEmpty(dto.getAccountId())) {
 | 
	
		
			
				|  |  | +            cri.where().andInList("account_id", dto.getAccountId());
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        return cri;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |      /**
 | 
	
		
			
				|  |  |       * 拼接查询条件
 | 
	
		
			
				|  |  |       *
 | 
	
	
		
			
				|  | @@ -5875,6 +5944,10 @@ public class GameDataServiceImpl implements IGameDataService {
 | 
	
		
			
				|  |  |              cri.where().andBetween("day", dto.getOrderBeginDate(), dto.getOrderEndDate());
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +        if(dto.getCostBeginDate()!=null && dto.getCostEndDate()!=null){
 | 
	
		
			
				|  |  | +            cri.where().andBetween("to_date(reg_time)", dto.getCostBeginDate(), dto.getCostEndDate());
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |          //拼接投手ID
 | 
	
		
			
				|  |  |          if (CollectionUtils.isNotEmpty(dto.getPitcherId())) {
 | 
	
		
			
				|  |  |              cri.where().andInList("pitcher_id", dto.getPitcherId());
 | 
	
	
		
			
				|  | @@ -5891,6 +5964,7 @@ public class GameDataServiceImpl implements IGameDataService {
 | 
	
		
			
				|  |  |          return cri;
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |      /**
 | 
	
		
			
				|  |  |       * 查询出每个游戏的注册查询时间内,注册当天且充值的所有用户id
 | 
	
		
			
				|  |  |       *
 |