|
@@ -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("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
|
|
|
*
|