|
@@ -5,6 +5,7 @@ import com.google.gson.Gson;
|
|
|
import com.zanxiang.game.data.serve.pojo.dto.*;
|
|
|
import com.zanxiang.game.data.serve.pojo.entity.AdsGamePitcherDay;
|
|
|
import com.zanxiang.game.data.serve.pojo.entity.AdsPitcherDay;
|
|
|
+import com.zanxiang.game.data.serve.pojo.entity.AdsPitcherDayn;
|
|
|
import com.zanxiang.game.data.serve.pojo.entity.AdsPitcherGameDayn;
|
|
|
import com.zanxiang.game.data.serve.pojo.enums.OrderByEnum;
|
|
|
import com.zanxiang.game.data.serve.pojo.vo.*;
|
|
@@ -291,7 +292,86 @@ public class PitcherDataServiceImpl implements IPitcherDataService {
|
|
|
*/
|
|
|
@Override
|
|
|
public Page<PitcherDataTotalVO> getPitcherDataTotal(PitcherDataTotalDTO dto) {
|
|
|
- return null;
|
|
|
+ //如果注册时间参数为空,默认设置查询当天数据
|
|
|
+ if (dto.getBeginDate() == null || dto.getEndDate() == null) {
|
|
|
+ dto.setBeginDate(LocalDate.now());
|
|
|
+ dto.setEndDate(LocalDate.now());
|
|
|
+ }
|
|
|
+ //如果充值时间参数为空,默认设置查询当天数据
|
|
|
+ if (dto.getAmountBeginDate() == null || dto.getAmountEndDate() == null) {
|
|
|
+ dto.setAmountBeginDate(LocalDate.now());
|
|
|
+ dto.setAmountEndDate(LocalDate.now());
|
|
|
+ }
|
|
|
+ //主表查询条件
|
|
|
+ Criteria criA = myCriPitcher(dto, "criA", true);
|
|
|
+ //账面相关查询条件 时间条件只和充值时间相关
|
|
|
+ Criteria criB = myCriPitcher(dto, "criB", true);
|
|
|
+ //账面人数相关 时间只需要充值时间条件,不需要注册时间条件
|
|
|
+ Criteria criAmount = myCriRechargePitcher(dto, false);
|
|
|
+ //新用户充值人数和新用户复充人数 时间条件需要注册时间和充值时间
|
|
|
+ Criteria criNewUser = myCriRechargePitcher(dto, true);
|
|
|
+ //创角人数查询条件
|
|
|
+ Criteria criRoleNum = myCriRolePitcher(dto);
|
|
|
+ //拼接排序条件
|
|
|
+ Criteria orderByCri = Cnd.cri();
|
|
|
+ //如果没有排序条件给默认值
|
|
|
+ if (StringUtils.isBlank(dto.getSortType())) {
|
|
|
+ dto.setSortType(OrderByEnum.DESC.getOrderType());
|
|
|
+ }
|
|
|
+ if (StringUtils.isBlank(dto.getSortFiled())) {
|
|
|
+ orderByCri.getOrderBy().orderBy("pitcher_id", dto.getSortType());
|
|
|
+ orderByCri.getOrderBy().orderBy("cost", dto.getSortType());
|
|
|
+ } else {
|
|
|
+ orderByCri.getOrderBy().orderBy(CaseFormat.LOWER_CAMEL.to(CaseFormat.LOWER_UNDERSCORE, dto.getSortFiled()), dto.getSortType());
|
|
|
+ }
|
|
|
+ //创建sql语句 执行sql
|
|
|
+ Sql sql = Sqls.create(pitcherDataTotalSql(criA, criB, criAmount, criNewUser, criRoleNum) + orderByCri);
|
|
|
+ //设置自定义回显对象
|
|
|
+ sql.setCallback(Sqls.callback.entities());
|
|
|
+ sql.setEntity(dao.getEntity(PitcherDataTotalVO.class));
|
|
|
+ Pager pager = dao.createPager(dto.getPageNum(), dto.getPageSize());
|
|
|
+ sql.setPager(pager);
|
|
|
+ //执行sql
|
|
|
+ dao.execute(sql);
|
|
|
+ //得到结果集list
|
|
|
+ List<PitcherDataTotalVO> list = sql.getList(PitcherDataTotalVO.class);
|
|
|
+ //设置查询总数
|
|
|
+ Sql sqlCount = Sqls.queryEntity("select count(*) from game_ads.ads_pitcher_day" + criA);
|
|
|
+ pager.setRecordCount((int) Daos.queryCount(dao, sqlCount));
|
|
|
+
|
|
|
+ //获取所有筛选条件内的dayN数据
|
|
|
+ Map<String, String> pitcherDataTotalDayNMap = tempDayNDataPitcher(dto);
|
|
|
+ //根据充值时间修改值
|
|
|
+ List<PitcherDataTotalVO> pitcherDataTotalVOList = list.stream().map(vo -> {
|
|
|
+ //取到dayN数据
|
|
|
+ String dayNStr = pitcherDataTotalDayNMap.get(vo.getPitcherId().toString());
|
|
|
+ //如果为空或不存在
|
|
|
+ if (StringUtils.isBlank(dayNStr)) {
|
|
|
+ dayNStr = "0.00-0";
|
|
|
+ }
|
|
|
+ //新用户充值金额
|
|
|
+ vo.setNewUserAmount(new BigDecimal(dayNStr.split("-")[0]));
|
|
|
+ //新用户充值次数
|
|
|
+ vo.setNewUserAmountCount(Long.parseLong(dayNStr.split("-")[1]));
|
|
|
+ //老用户充值人数、次数、金额
|
|
|
+ vo.setOldAmount(vo.getAmount().subtract(vo.getNewUserAmount()));
|
|
|
+ vo.setOldAmountCount(vo.getAmountCount() - vo.getNewUserAmountCount());
|
|
|
+ vo.setOldAmountNum(vo.getAmountNum() - vo.getNewUserAmountNum());
|
|
|
+ //新用户回收率
|
|
|
+ vo.setNewUserRoi(vo.getCost().compareTo(BigDecimal.ZERO) == 0 ? BigDecimal.ZERO :
|
|
|
+ vo.getNewUserAmount().divide(vo.getCost(), 4, RoundingMode.HALF_UP));
|
|
|
+ //新用户客单价
|
|
|
+ vo.setNewUserAvg(vo.getNewUserAmountCount() == 0L ? BigDecimal.ZERO :
|
|
|
+ vo.getNewUserAmount().divide(BigDecimal.valueOf(vo.getNewUserAmountCount()), 4, RoundingMode.HALF_UP));
|
|
|
+ //新用户ARPU
|
|
|
+ vo.setNewUserArpu(vo.getNewUserAmountNum() == 0L ? BigDecimal.ZERO :
|
|
|
+ vo.getNewUserAmount().divide(BigDecimal.valueOf(vo.getNewUserAmountNum()), 4, RoundingMode.HALF_UP));
|
|
|
+
|
|
|
+ return vo;
|
|
|
+ }).collect(Collectors.toList());
|
|
|
+
|
|
|
+ //返回list结果封装到page对象里
|
|
|
+ return new Page<>(pitcherDataTotalVOList, pager);
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -301,7 +381,85 @@ public class PitcherDataServiceImpl implements IPitcherDataService {
|
|
|
*/
|
|
|
@Override
|
|
|
public PitcherDataTotalSumVO getPitcherDataTotalSum(PitcherDataTotalSumDTO dto) {
|
|
|
- return null;
|
|
|
+ //如果注册时间参数为空,默认设置查询当天数据
|
|
|
+ if (dto.getBeginDate() == null || dto.getEndDate() == null) {
|
|
|
+ dto.setBeginDate(LocalDate.now());
|
|
|
+ dto.setEndDate(LocalDate.now());
|
|
|
+ }
|
|
|
+ //如果充值时间参数为空,默认设置查询当天数据
|
|
|
+ if (dto.getAmountBeginDate() == null || dto.getAmountEndDate() == null) {
|
|
|
+ dto.setAmountBeginDate(LocalDate.now());
|
|
|
+ dto.setAmountEndDate(LocalDate.now());
|
|
|
+ }
|
|
|
+ //复制PitcherDataTotalSumDTO 到PitcherDataTotalDTO
|
|
|
+ PitcherDataTotalDTO totalDTO = new PitcherDataTotalDTO();
|
|
|
+ copyNullProperties(dto, totalDTO);
|
|
|
+ //主表查询条件
|
|
|
+ Criteria criA = myCriPitcher(totalDTO, "criA", false);
|
|
|
+ //账面相关查询条件 时间条件只和充值时间相关
|
|
|
+ Criteria criB = myCriPitcher(totalDTO, "criB", false);
|
|
|
+ //账面人数相关 时间只需要充值时间条件,不需要注册时间条件
|
|
|
+ Criteria criAmount = myCriRechargePitcher(totalDTO, false);
|
|
|
+ //新用户充值人数和新用户复充人数 时间条件需要注册时间和充值时间
|
|
|
+ Criteria criNewUser = myCriRechargePitcher(totalDTO, true);
|
|
|
+ //创角人数查询条件
|
|
|
+ Criteria criRoleNum = myCriRolePitcher(totalDTO);
|
|
|
+ //创建sql语句 执行sql
|
|
|
+ Sql sql = Sqls.create(pitcherDataTotalSumSql() + criA);
|
|
|
+ //设置自定义回显对象
|
|
|
+ sql.setCallback(Sqls.callback.entity());
|
|
|
+ sql.setEntity(dao.getEntity(PitcherDataTotalSumVO.class));
|
|
|
+ //执行sql
|
|
|
+ dao.execute(sql);
|
|
|
+ //得到结果
|
|
|
+ PitcherDataTotalSumVO vo = sql.getObject(PitcherDataTotalSumVO.class);
|
|
|
+ //得到账面相关数据、账面人数、新用户人数、新用户复充人数、创角人数数据
|
|
|
+ PitcherDataTotalSumVO tempVO = getPitcherDataTotalSumAmountData(criB, criAmount, criNewUser, criRoleNum);
|
|
|
+ //合并两个对象
|
|
|
+ copyNullProperties(tempVO, vo);
|
|
|
+
|
|
|
+ //计算相关指标
|
|
|
+ //新用户充值成本
|
|
|
+ vo.setNewUserAmountCost(vo.getNewUserAmountNum() == 0L ? BigDecimal.ZERO :
|
|
|
+ vo.getCost().divide(BigDecimal.valueOf(vo.getNewUserAmountNum()), 2, RoundingMode.HALF_UP));
|
|
|
+ //新用户付费率
|
|
|
+ vo.setNewUserAmountRate(vo.getRegisterNum() == 0L ? BigDecimal.ZERO :
|
|
|
+ BigDecimal.valueOf(vo.getNewUserAmountNum().doubleValue() / vo.getRegisterNum().doubleValue()).setScale(4, RoundingMode.HALF_UP));
|
|
|
+ //新用户付费比
|
|
|
+ vo.setNewUserAmountRatio(vo.getAmountNum() == 0L ? BigDecimal.ZERO :
|
|
|
+ BigDecimal.valueOf(vo.getNewUserAmountNum().doubleValue() / vo.getAmountNum().doubleValue()).setScale(4, RoundingMode.HALF_UP));
|
|
|
+ //新用户复充率
|
|
|
+ vo.setNewUserAgainRate(vo.getNewUserTotalAmountNum() == 0L ? BigDecimal.ZERO :
|
|
|
+ BigDecimal.valueOf(vo.getNewUserOrderAgain().doubleValue() / vo.getNewUserTotalAmountNum().doubleValue()).setScale(4, RoundingMode.HALF_UP));
|
|
|
+ //创角率
|
|
|
+ vo.setRoleNumRate(vo.getRegisterNum() == 0L ? BigDecimal.ZERO :
|
|
|
+ BigDecimal.valueOf(vo.getRoleNum().doubleValue() / vo.getRegisterNum().doubleValue()).setScale(4, RoundingMode.HALF_UP));
|
|
|
+ //创角成本
|
|
|
+ vo.setRoleNumCost(vo.getRoleNum() == 0L ? BigDecimal.ZERO :
|
|
|
+ vo.getCost().divide(BigDecimal.valueOf(vo.getRoleNum()), 2, RoundingMode.HALF_UP));
|
|
|
+
|
|
|
+ //获取所有筛选条件内的dayN数据
|
|
|
+ String dayNStr = tempDayNDataTotalPitcher(totalDTO);
|
|
|
+ //新用户充值金额
|
|
|
+ vo.setNewUserAmount(new BigDecimal(dayNStr.split("-")[0]));
|
|
|
+ //新用户充值次数
|
|
|
+ vo.setNewUserAmountCount(Long.parseLong(dayNStr.split("-")[1]));
|
|
|
+ //老用户充值人数、次数、金额
|
|
|
+ vo.setOldAmount(vo.getAmount().subtract(vo.getNewUserAmount()));
|
|
|
+ vo.setOldAmountCount(vo.getAmountCount() - vo.getNewUserAmountCount());
|
|
|
+ vo.setOldAmountNum(vo.getAmountNum() - vo.getNewUserAmountNum());
|
|
|
+ //新用户回收率
|
|
|
+ vo.setNewUserRoi(vo.getCost().compareTo(BigDecimal.ZERO) == 0 ? BigDecimal.ZERO :
|
|
|
+ vo.getNewUserAmount().divide(vo.getCost(), 4, RoundingMode.HALF_UP));
|
|
|
+ //新用户客单价
|
|
|
+ vo.setNewUserAvg(vo.getNewUserAmountCount() == 0L ? BigDecimal.ZERO :
|
|
|
+ vo.getNewUserAmount().divide(BigDecimal.valueOf(vo.getNewUserAmountCount()), 4, RoundingMode.HALF_UP));
|
|
|
+ //新用户ARPU
|
|
|
+ vo.setNewUserArpu(vo.getNewUserAmountNum() == 0L ? BigDecimal.ZERO :
|
|
|
+ vo.getNewUserAmount().divide(BigDecimal.valueOf(vo.getNewUserAmountNum()), 4, RoundingMode.HALF_UP));
|
|
|
+
|
|
|
+ //结果
|
|
|
+ return vo;
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -602,7 +760,109 @@ public class PitcherDataServiceImpl implements IPitcherDataService {
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * 得到账面相关数据、账面人数、新用户人数、新用户复充人数、创角人数数据
|
|
|
+ * 得到账面相关数据、账面人数、新用户人数、新用户复充人数、创角人数数据(投手总数据总计)
|
|
|
+ * @param criAmount 账面数据相关查询条件
|
|
|
+ * @return PitcherDataTotalSumVO
|
|
|
+ */
|
|
|
+ private PitcherDataTotalSumVO getPitcherDataTotalSumAmountData(Criteria criB, Criteria criAmount, Criteria criNewUser, Criteria criRoleNum) {
|
|
|
+ //得到账面相关数据
|
|
|
+ Sql sqlAmountData = Sqls.create("""
|
|
|
+ SELECT
|
|
|
+ IFNULL(SUM(amount), 0) as amount,
|
|
|
+ IFNULL(SUM(amount_count), 0) as amount_count,
|
|
|
+ ROUND(IF(SUM(amount_count) > 0 , SUM(amount) / SUM(amount_count), 0), 2) as paper_avg
|
|
|
+ FROM
|
|
|
+ game_ads.ads_pitcher_day
|
|
|
+ """ + criB);
|
|
|
+ //设置回传对象
|
|
|
+ sqlAmountData.setCallback(Sqls.callback.entity());
|
|
|
+ sqlAmountData.setEntity(dao.getEntity(PitcherDataTotalSumVO.class));
|
|
|
+ //执行sql
|
|
|
+ dao.execute(sqlAmountData);
|
|
|
+ PitcherDataTotalSumVO vo = sqlAmountData.getObject(PitcherDataTotalSumVO.class);
|
|
|
+
|
|
|
+ //账面人数数据
|
|
|
+ Sql sqlAmountNum = Sqls.create("""
|
|
|
+ SELECT
|
|
|
+ IFNULL(COUNT(DISTINCT user_id), 0) amount_num
|
|
|
+ FROM
|
|
|
+ game_ads.ads_information
|
|
|
+ """ + criAmount +
|
|
|
+ """
|
|
|
+ AND NOT agent_id = 0
|
|
|
+ """);
|
|
|
+ //设置回传对象
|
|
|
+ sqlAmountNum.setCallback(Sqls.callback.longValue());
|
|
|
+ //执行sql
|
|
|
+ dao.execute(sqlAmountNum);
|
|
|
+ //设置账面充值人数
|
|
|
+ vo.setAmountNum(sqlAmountNum.getLong());
|
|
|
+ //账面ARPU
|
|
|
+ vo.setPaperArpu(vo.getAmountNum() == 0L ? BigDecimal.ZERO :
|
|
|
+ vo.getAmount().divide(BigDecimal.valueOf(vo.getAmountNum()), 2, RoundingMode.HALF_UP));
|
|
|
+
|
|
|
+ //新用户充值人数
|
|
|
+ Sql sqlNewUserNum = Sqls.create("""
|
|
|
+ SELECT
|
|
|
+ COUNT(DISTINCT user_id) new_user_amount_num
|
|
|
+ FROM
|
|
|
+ game_ads.ads_information
|
|
|
+ """ + criNewUser +
|
|
|
+ """
|
|
|
+ AND NOT agent_id = 0
|
|
|
+ """);
|
|
|
+ //设置回传对象
|
|
|
+ sqlNewUserNum.setCallback(Sqls.callback.longValue());
|
|
|
+ //执行sql
|
|
|
+ dao.execute(sqlNewUserNum);
|
|
|
+ //设置新用户充值人数
|
|
|
+ vo.setNewUserAmountNum(sqlNewUserNum.getLong());
|
|
|
+
|
|
|
+ //新用户复充人数
|
|
|
+ Sql sqlNewUserAgainNum = Sqls.create("""
|
|
|
+ SELECT
|
|
|
+ COUNT(tempA.num) as new_user_order_again
|
|
|
+ FROM (
|
|
|
+ SELECT
|
|
|
+ COUNT(user_id) num
|
|
|
+ FROM
|
|
|
+ game_ads.ads_information
|
|
|
+ """ + criNewUser +
|
|
|
+ """
|
|
|
+ AND NOT agent_id = 0
|
|
|
+ GROUP BY user_id
|
|
|
+ HAVING
|
|
|
+ COUNT(user_id) > 1 ) tempA
|
|
|
+ """);
|
|
|
+ //设置回传对象
|
|
|
+ sqlNewUserAgainNum.setCallback(Sqls.callback.longValue());
|
|
|
+ //执行sql
|
|
|
+ dao.execute(sqlNewUserAgainNum);
|
|
|
+ //设置新用户充值人数
|
|
|
+ vo.setNewUserOrderAgain(sqlNewUserAgainNum.getLong());
|
|
|
+
|
|
|
+ //创角人数
|
|
|
+ Sql sqlRoleNum = Sqls.create("""
|
|
|
+ SELECT
|
|
|
+ COUNT(DISTINCT role_user_id) as role_num
|
|
|
+ FROM
|
|
|
+ dw_create_role_detail
|
|
|
+ """ + criRoleNum +
|
|
|
+ """
|
|
|
+ AND NOT user_agent_id = 0
|
|
|
+ """);
|
|
|
+ //设置回传对象
|
|
|
+ sqlRoleNum.setCallback(Sqls.callback.longValue());
|
|
|
+ //执行sql
|
|
|
+ dao.execute(sqlRoleNum);
|
|
|
+ //设置创角人数
|
|
|
+ vo.setRoleNum(sqlRoleNum.getLong());
|
|
|
+
|
|
|
+ return vo;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 得到账面相关数据、账面人数、新用户人数、新用户复充人数、创角人数数据(投手游戏总数据总计)
|
|
|
* @param criAmount 账面数据相关查询条件
|
|
|
* @return PitcherGameDataTotalSumVO
|
|
|
*/
|
|
@@ -738,7 +998,7 @@ public class PitcherDataServiceImpl implements IPitcherDataService {
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * 主表 账面相关 查询条件
|
|
|
+ * 主表 账面相关 查询条件(投手游戏数据相关)
|
|
|
*
|
|
|
* @param dto 前端传递的查询条件
|
|
|
* @param type criA 查询主表 criB 查询账面相关
|
|
@@ -789,7 +1049,7 @@ public class PitcherDataServiceImpl implements IPitcherDataService {
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * 账面充值人数、新用户充值人数、新用户复充人数的查询条件
|
|
|
+ * 账面充值人数、新用户充值人数、新用户复充人数的查询条件(投手游戏数据相关)
|
|
|
*
|
|
|
* @param dto 前端传递的查询条件参数实体
|
|
|
* @param needRegTime 是否需要拼接注册时间
|
|
@@ -832,7 +1092,7 @@ public class PitcherDataServiceImpl implements IPitcherDataService {
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * 创角人数相关查询条件
|
|
|
+ * 创角人数相关查询条件(投手游戏数据相关)
|
|
|
*
|
|
|
* @param dto 前端传递的查询条件
|
|
|
* @return 查询条件
|
|
@@ -873,7 +1133,161 @@ public class PitcherDataServiceImpl implements IPitcherDataService {
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * 生成DayN数据方法
|
|
|
+ * 主表 账面相关 查询条件(投手数据相关)
|
|
|
+ *
|
|
|
+ * @param dto 前端传递的查询条件
|
|
|
+ * @param type criA 查询主表 criB 查询账面相关
|
|
|
+ * @param needGroupBy 是否需要分组条件
|
|
|
+ * @return 查询条件
|
|
|
+ */
|
|
|
+ private Criteria myCriPitcher(PitcherDataTotalDTO dto, String type, Boolean needGroupBy) {
|
|
|
+ //根据传入的dto拼接查询参数
|
|
|
+ Criteria cri = Cnd.cri();
|
|
|
+ if (StringUtils.isNotBlank(dto.getSourceSystem())) {
|
|
|
+ //拼接SDK来源
|
|
|
+ cri.where().andEquals("source_system", dto.getSourceSystem());
|
|
|
+ }
|
|
|
+ if (dto.getPitcherId() != null) {
|
|
|
+ //拼接投手ID
|
|
|
+ cri.where().andEquals("pitcher_id", dto.getPitcherId());
|
|
|
+ }
|
|
|
+ //根据type拼接不同的时间查询条件
|
|
|
+ if (type.equals("criA")) {
|
|
|
+ if (dto.getBeginDate() != null && dto.getEndDate() != null) {
|
|
|
+ //拼接注册日期查询条件
|
|
|
+ cri.where().andBetween("dt", dto.getBeginDate(), dto.getEndDate());
|
|
|
+ }
|
|
|
+ } else if (type.equals("criB")) {
|
|
|
+ if (dto.getAmountBeginDate() != null && dto.getAmountEndDate() != null) {
|
|
|
+ //拼接充值日期查询条件
|
|
|
+ cri.where().andBetween("dt", dto.getAmountBeginDate(), dto.getAmountEndDate());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //拼接分组条件
|
|
|
+ if (needGroupBy) {
|
|
|
+ cri.getGroupBy().groupBy("pitcher_id");
|
|
|
+ }
|
|
|
+
|
|
|
+ return cri;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 账面充值人数、新用户充值人数、新用户复充人数的查询条件(投手数据相关)
|
|
|
+ *
|
|
|
+ * @param dto 前端传递的查询条件参数实体
|
|
|
+ * @param needRegTime 是否需要拼接注册时间
|
|
|
+ * @return 查询条件
|
|
|
+ */
|
|
|
+ private Criteria myCriRechargePitcher(PitcherDataTotalDTO dto, Boolean needRegTime) {
|
|
|
+ //根据传入的dto拼接查询参数
|
|
|
+ Criteria cri = Cnd.cri();
|
|
|
+ if (StringUtils.isNotBlank(dto.getSourceSystem())) {
|
|
|
+ //拼接SDK来源
|
|
|
+ cri.where().andEquals("source_system", dto.getSourceSystem());
|
|
|
+ }
|
|
|
+ if (dto.getPitcherId() != null) {
|
|
|
+ //拼接投手ID
|
|
|
+ cri.where().andEquals("pitcher_id", dto.getPitcherId());
|
|
|
+ }
|
|
|
+ //拼接不同的时间查询条件
|
|
|
+ if (needRegTime && dto.getBeginDate() != null && dto.getEndDate() != null) {
|
|
|
+ //拼接注册日期查询条件
|
|
|
+ cri.where().andBetween("reg_time", dto.getBeginDate(), dto.getEndDate());
|
|
|
+ }
|
|
|
+ if (dto.getAmountBeginDate() != null && dto.getAmountEndDate() != null) {
|
|
|
+ //拼接充值日期查询条件
|
|
|
+ cri.where().andBetween("order_time", dto.getAmountBeginDate(), dto.getAmountEndDate());
|
|
|
+ }
|
|
|
+
|
|
|
+ return cri;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 创角人数相关查询条件(投手数据相关)
|
|
|
+ *
|
|
|
+ * @param dto 前端传递的查询条件
|
|
|
+ * @return 查询条件
|
|
|
+ */
|
|
|
+ private Criteria myCriRolePitcher(PitcherDataTotalDTO dto) {
|
|
|
+ //根据传入的dto拼接查询参数
|
|
|
+ Criteria cri = Cnd.cri();
|
|
|
+ if (StringUtils.isNotBlank(dto.getSourceSystem())) {
|
|
|
+ //拼接SDK来源
|
|
|
+ cri.where().andEquals("source_system", dto.getSourceSystem());
|
|
|
+ }
|
|
|
+ if (dto.getPitcherId() != null) {
|
|
|
+ //拼接投手ID
|
|
|
+ cri.where().andEquals("user_zx_pitcher_id", dto.getPitcherId());
|
|
|
+ }
|
|
|
+ if (dto.getBeginDate() != null && dto.getEndDate() != null) {
|
|
|
+ //拼接注册日期查询条件
|
|
|
+ cri.where().andBetween("user_dt", dto.getBeginDate(), dto.getEndDate());
|
|
|
+ }
|
|
|
+ if (dto.getAmountBeginDate() != null && dto.getAmountEndDate() != null) {
|
|
|
+ //拼接充值日期查询条件 在充值时间内创角
|
|
|
+ cri.where().andBetween("DATE(role_create_time)", dto.getAmountBeginDate(), dto.getAmountEndDate());
|
|
|
+ }
|
|
|
+
|
|
|
+ return cri;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 生成DayN数据方法(投手总数据)
|
|
|
+ *
|
|
|
+ * @param dto 前端查询参数
|
|
|
+ * @return Map
|
|
|
+ */
|
|
|
+ private Map<String, String> tempDayNDataPitcher(PitcherDataTotalDTO dto) {
|
|
|
+
|
|
|
+ //创建查询条件
|
|
|
+ Criteria cri = Cnd.cri();
|
|
|
+ if (dto.getBeginDate() != null && dto.getEndDate() != null) {
|
|
|
+ //拼接注册时间查询条件
|
|
|
+ cri.where().andBetween("dt", dto.getBeginDate(), dto.getEndDate());
|
|
|
+ }
|
|
|
+ if (StringUtils.isNotBlank(dto.getSourceSystem())) {
|
|
|
+ //拼接SDK来源查询条件
|
|
|
+ cri.where().andEquals("source_system", dto.getSourceSystem());
|
|
|
+ }
|
|
|
+ if (dto.getPitcherId() != null) {
|
|
|
+ cri.where().andEquals("pitcher_id", dto.getPitcherId());
|
|
|
+ }
|
|
|
+ Sql dayNSql = Sqls.create("""
|
|
|
+ SELECT
|
|
|
+ dt,
|
|
|
+ pitcher_id,
|
|
|
+ source_system,
|
|
|
+ dayN
|
|
|
+ FROM
|
|
|
+ game_ads.ads_pitcher_dayn
|
|
|
+ """ + cri);
|
|
|
+
|
|
|
+ //设置回传
|
|
|
+ dayNSql.setCallback(Sqls.callback.entities());
|
|
|
+ dayNSql.setEntity(dao.getEntity(AdsPitcherDayn.class));
|
|
|
+ //执行sql 获取数据到list中
|
|
|
+ dao.execute(dayNSql);
|
|
|
+
|
|
|
+ //将数据库中获取的所有结果封装到一个List中
|
|
|
+ List<AdsPitcherDayn> list = dayNSql.getList(AdsPitcherDayn.class);
|
|
|
+ // pitcherId - dayN(充值金额-充值次数)
|
|
|
+ Map<String, String> tempMap = new HashMap<>();
|
|
|
+
|
|
|
+ //循环遍历 list 按照 gameId 进行存储
|
|
|
+ for (AdsPitcherDayn adsPitcherDayn : list) {
|
|
|
+ if (!tempMap.containsKey(adsPitcherDayn.getPitcherId())) {
|
|
|
+ //Map中没有该投手的相关数据,初始化tempMap
|
|
|
+ tempMap.put(adsPitcherDayn.getPitcherId(), "0.00-0");
|
|
|
+ }
|
|
|
+ //解析每个 adsPitcherGameDayn 的 dayN
|
|
|
+ parseJsonDataPitcher(adsPitcherDayn, tempMap, dto);
|
|
|
+ }
|
|
|
+
|
|
|
+ return tempMap;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 生成DayN数据方法(投手游戏总数据)
|
|
|
*
|
|
|
* @param dto 前端查询参数
|
|
|
* @return Map
|
|
@@ -943,7 +1357,58 @@ public class PitcherDataServiceImpl implements IPitcherDataService {
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * 计算所有的dayN
|
|
|
+ * 计算所有的dayN(投手总数据总计)
|
|
|
+ *
|
|
|
+ * @param dto 前端查询参数
|
|
|
+ * @return Map
|
|
|
+ */
|
|
|
+ private String tempDayNDataTotalPitcher(PitcherDataTotalDTO dto) {
|
|
|
+ //创建查询条件
|
|
|
+ Criteria cri = Cnd.cri();
|
|
|
+ if (dto.getBeginDate() != null && dto.getEndDate() != null) {
|
|
|
+ //拼接注册时间查询条件
|
|
|
+ cri.where().andBetween("dt", dto.getBeginDate(), dto.getEndDate());
|
|
|
+ }
|
|
|
+ if (StringUtils.isNotBlank(dto.getSourceSystem())) {
|
|
|
+ //拼接SDK来源查询条件
|
|
|
+ cri.where().andEquals("source_system", dto.getSourceSystem());
|
|
|
+ }
|
|
|
+ if (dto.getPitcherId() != null) {
|
|
|
+ cri.where().andEquals("pitcher_id", dto.getPitcherId());
|
|
|
+ }
|
|
|
+ Sql dayNSql = Sqls.create("""
|
|
|
+ SELECT
|
|
|
+ dt,
|
|
|
+ pitcher_id,
|
|
|
+ source_system,
|
|
|
+ dayN
|
|
|
+ FROM
|
|
|
+ game_ads.ads_pitcher_dayn
|
|
|
+ """ + cri);
|
|
|
+
|
|
|
+ //设置回传
|
|
|
+ dayNSql.setCallback(Sqls.callback.entities());
|
|
|
+ dayNSql.setEntity(dao.getEntity(AdsPitcherDayn.class));
|
|
|
+ //执行sql 获取数据到list中
|
|
|
+ dao.execute(dayNSql);
|
|
|
+
|
|
|
+ //将数据库中获取的所有结果封装到一个List中
|
|
|
+ List<AdsPitcherDayn> list = dayNSql.getList(AdsPitcherDayn.class);
|
|
|
+ //初始化dayN结果
|
|
|
+ Map<String, String> resMap = new HashMap<>();
|
|
|
+ resMap.put("dayN", "0.00-0");
|
|
|
+
|
|
|
+ //循环遍历 list 按照 gameId 进行存储
|
|
|
+ for (AdsPitcherDayn adsPitcherDayn : list) {
|
|
|
+ //解析每个 adsPitcherGameDayn 的 dayN
|
|
|
+ parseJsonDataPitcher(adsPitcherDayn, resMap, dto);
|
|
|
+ }
|
|
|
+ //返回结果
|
|
|
+ return resMap.get("dayN");
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 计算所有的dayN(投手游戏总数据总计)
|
|
|
*
|
|
|
* @param dto 前端查询参数
|
|
|
* @return Map
|
|
@@ -994,12 +1459,55 @@ public class PitcherDataServiceImpl implements IPitcherDataService {
|
|
|
//解析每个 adsPitcherGameDayn 的 dayN
|
|
|
parseJsonData(adsPitcherGameDayn, resMap, dto);
|
|
|
}
|
|
|
- //返回结果
|
|
|
- return resMap.get("dayN");
|
|
|
+ //返回结果
|
|
|
+ return resMap.get("dayN");
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 解析dayN json字符串数据(投手总数据)
|
|
|
+ *
|
|
|
+ * @param adsPitcherDayn 对象
|
|
|
+ * @param resMap 记录最终结果Map
|
|
|
+ * @param dto 前端查询条件
|
|
|
+ */
|
|
|
+ private void parseJsonDataPitcher(AdsPitcherDayn adsPitcherDayn, Map<String, String> resMap, PitcherDataTotalDTO dto) {
|
|
|
+ //将每一个adsDaynGame中的dayN属性值 由json转为 Map 型
|
|
|
+ Gson gson = new Gson();
|
|
|
+ Map<String, String> jsonList = gson.fromJson(adsPitcherDayn.getDayn(), Map.class);
|
|
|
+ //解析 jsonList
|
|
|
+ for (Map.Entry<String, String> entry : jsonList.entrySet()) {
|
|
|
+ //key是充值日期
|
|
|
+ String key = entry.getKey();
|
|
|
+ String value = entry.getValue();
|
|
|
+ //将value按“-”分割
|
|
|
+ String[] resValues = value.split("-");
|
|
|
+ //判断充值日期 在充值日期内的数据进行计算
|
|
|
+ if (DateUtil.parseLocalDate(key).compareTo(dto.getAmountBeginDate()) >= 0
|
|
|
+ && DateUtil.parseLocalDate(key).compareTo(dto.getAmountEndDate()) <= 0) {
|
|
|
+ //获取原先的dayN的值
|
|
|
+ String[] oldValues;
|
|
|
+ if (resMap.containsKey("dayN")) {
|
|
|
+ oldValues = resMap.get("dayN").split("-");
|
|
|
+ } else {
|
|
|
+ oldValues = resMap.get(adsPitcherDayn.getPitcherId()).split("-");
|
|
|
+ }
|
|
|
+ //充值的金额
|
|
|
+ BigDecimal chargeMoney = new BigDecimal(oldValues[0]).add(new BigDecimal(resValues[0])).setScale(2, RoundingMode.HALF_UP);
|
|
|
+ //充值的次数
|
|
|
+ long count = Long.parseLong(oldValues[1]) + Long.parseLong(resValues[1]);
|
|
|
+ //合并成字符串 更新dayN的值
|
|
|
+ String newValue = chargeMoney + "-" + count;
|
|
|
+ if (resMap.containsKey("dayN")) {
|
|
|
+ resMap.put("dayN", newValue);
|
|
|
+ } else {
|
|
|
+ resMap.put(adsPitcherDayn.getPitcherId(), newValue);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * 解析dayN json字符串数据
|
|
|
+ * 解析dayN json字符串数据(投手游戏总数据)
|
|
|
*
|
|
|
* @param adsPitcherGameDayn 对象
|
|
|
* @param resMap 记录最终结果Map
|
|
@@ -1042,7 +1550,7 @@ public class PitcherDataServiceImpl implements IPitcherDataService {
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * 处理投手游戏每日的DayN
|
|
|
+ * 处理投手每日的DayN(投手每日)
|
|
|
*
|
|
|
* @param vo PitcherGameDataDayVO
|
|
|
*/
|
|
@@ -1067,7 +1575,7 @@ public class PitcherDataServiceImpl implements IPitcherDataService {
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * 处理投手游戏每日的DayN
|
|
|
+ * 处理投手游戏每日的DayN(投手游戏每日)
|
|
|
*
|
|
|
* @param vo PitcherGameDataDayVO
|
|
|
*/
|
|
@@ -1092,7 +1600,7 @@ public class PitcherDataServiceImpl implements IPitcherDataService {
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * 处理投手每日总计的DayN
|
|
|
+ * 处理投手每日总计的DayN(投手每日总计)
|
|
|
*
|
|
|
* @param vo PitcherDataDayTotalVO
|
|
|
*/
|
|
@@ -1130,7 +1638,7 @@ public class PitcherDataServiceImpl implements IPitcherDataService {
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * 处理投手游戏每日总计的DayN
|
|
|
+ * 处理投手游戏每日总计的DayN(投手游戏每日总计)
|
|
|
*
|
|
|
* @param vo PitcherGameDataDayTotalVO
|
|
|
*/
|
|
@@ -1168,7 +1676,7 @@ public class PitcherDataServiceImpl implements IPitcherDataService {
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * 查询投手每日数据SQL
|
|
|
+ * 查询投手每日数据SQL(投手每日)
|
|
|
* @return String
|
|
|
*/
|
|
|
private String pitcherDataDaySql() {
|
|
@@ -1377,7 +1885,7 @@ public class PitcherDataServiceImpl implements IPitcherDataService {
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * 查询投手游戏每日数据SQL
|
|
|
+ * 查询投手游戏每日数据SQL(投手游戏每日)
|
|
|
* @return String
|
|
|
*/
|
|
|
private String pitcherGameDataDaySql() {
|
|
@@ -1590,7 +2098,7 @@ public class PitcherDataServiceImpl implements IPitcherDataService {
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * 查询投手每日数据总计SQL
|
|
|
+ * 查询投手每日数据总计SQL(投手每日总计)
|
|
|
* @return String
|
|
|
*/
|
|
|
private String pitcherDataDayTotalSql() {
|
|
@@ -1762,7 +2270,7 @@ public class PitcherDataServiceImpl implements IPitcherDataService {
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * 查询投手游戏每日数据总计SQL
|
|
|
+ * 查询投手游戏每日数据总计SQL(投手游戏每日总计)
|
|
|
* @return String
|
|
|
*/
|
|
|
private String pitcherGameDataDayTotalSql() {
|
|
@@ -1934,7 +2442,7 @@ public class PitcherDataServiceImpl implements IPitcherDataService {
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * 投手游戏每日数据总计付费趋势sql
|
|
|
+ * 投手游戏每日数据总计付费趋势sql(投手游戏每日总计、投手每日总计共用)
|
|
|
* @return String : Dn的充值金额 / D1-Dn的充值总金额 / Dn的充值人数 /当前消耗(剔除不存在的天数数据) /D1充值金额总和(剔除不存在的天数数据)
|
|
|
*/
|
|
|
private String getPitcherGameDataDayTotalDayNsql() {
|
|
@@ -1999,7 +2507,188 @@ public class PitcherDataServiceImpl implements IPitcherDataService {
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * 查询投手游戏总数据SQL
|
|
|
+ * 查询投手总数据SQL(投手总数据)
|
|
|
+ * @param criA 主表查询条件
|
|
|
+ * @param criB 账面相关查询条件
|
|
|
+ * @param criAmount 账面充值人数查询条件
|
|
|
+ * @param criNewUser 新用户相关查询条件
|
|
|
+ * @param criRoleNum 创角人数相关查询条件
|
|
|
+ * @return String
|
|
|
+ */
|
|
|
+ private String pitcherDataTotalSql(Criteria criA, Criteria criB, Criteria criAmount, Criteria criNewUser, Criteria criRoleNum) {
|
|
|
+ return """
|
|
|
+ SELECT
|
|
|
+ a.*,
|
|
|
+ IFNULL(amount, 0) as amount,
|
|
|
+ IFNULL(amount_count, 0) as amount_count,
|
|
|
+ IFNULL(amount_num, 0) as amount_num,
|
|
|
+ IFNULL(paper_avg, 0) as paper_avg,
|
|
|
+ ROUND(IF(amount_num > 0 , IFNULL(amount, 0) / amount_num, 0), 2) as paper_arpu,
|
|
|
+ IFNULL(new_user_amount_num, 0) as new_user_amount_num,
|
|
|
+ ROUND(IF(new_user_amount_num > 0, IFNULL(cost, 0) / new_user_amount_num, 0), 2) as new_user_amount_cost,
|
|
|
+ ROUND(IF(register_num > 0, IFNULL(new_user_amount_num, 0) / register_num, 0), 4) as new_user_amount_rate,
|
|
|
+ ROUND(IF(amount_num > 0, IFNULL(new_user_amount_num, 0) / amount_num, 0), 4) as new_user_amount_ratio,
|
|
|
+ IFNULL(new_user_order_again, 0) as new_user_order_again,
|
|
|
+ ROUND(IF(new_user_total_amount_num > 0, IFNULL(new_user_order_again, 0) / new_user_total_amount_num, 0), 4) as new_user_again_rate,
|
|
|
+ IFNULL(role_num, 0) as role_num,
|
|
|
+ ROUND(IF(register_num > 0, IFNULL(role_num, 0) / register_num, 0), 4) as role_num_rate,
|
|
|
+ ROUND(IF(role_num > 0, IFNULL(cost, 0) / role_num, 0), 2) as role_num_cost
|
|
|
+ FROM (
|
|
|
+ SELECT
|
|
|
+ pitcher_id,
|
|
|
+ MAX(pitcher) as pitcher,
|
|
|
+ SUM(cost) as cost,
|
|
|
+ SUM(plan_count) as plan_count,
|
|
|
+ SUM(account_count) as account_count,
|
|
|
+ SUM(agent_count) as agent_count,
|
|
|
+ SUM(register_num) as register_num,
|
|
|
+ ROUND(IF(SUM(register_num) > 0, SUM(cost) / SUM(register_num), 0), 2) as register_cost,
|
|
|
+ SUM(first_role_num) as first_role_num,
|
|
|
+ SUM(new_user_total_role_num) as new_user_total_role_num,
|
|
|
+ ROUND(IF(SUM(first_role_num) > 0 , SUM(cost) / SUM(first_role_num), 0), 2) as first_role_cost,
|
|
|
+ ROUND(IF(SUM(new_user_total_role_num) > 0 , SUM(cost) / SUM(new_user_total_role_num), 0), 2) as new_user_total_role_cost,
|
|
|
+ ROUND(IF(SUM(register_num) > 0 , SUM(first_role_num) / SUM(register_num), 0), 4) as first_role_rate,
|
|
|
+ ROUND(IF(SUM(register_num) > 0 , SUM(new_user_total_role_num) / SUM(register_num), 0), 4) as new_user_total_role_rate,
|
|
|
+ SUM(first_new_user_amount_count) as first_new_user_amount_count,
|
|
|
+ SUM(first_new_user_amount_num) as first_new_user_amount_num,
|
|
|
+ SUM(first_new_user_amount) as first_new_user_amount,
|
|
|
+ SUM(new_user_total_amount_count) as new_user_total_amount_count,
|
|
|
+ SUM(new_user_total_amount_num) as new_user_total_amount_num,
|
|
|
+ SUM(new_user_total_amount) as new_user_total_amount,
|
|
|
+ SUM(buy_new_user_total_amount) as buy_new_user_total_amount,
|
|
|
+ SUM(buy_new_user_total_amount_num) as buy_new_user_total_amount_num,
|
|
|
+ SUM(buy_new_user_total_amount_count) as buy_new_user_total_amount_count,
|
|
|
+ ROUND(IF(SUM(cost) > 0, SUM(first_new_user_amount) / SUM(cost), 0), 4) as first_roi,
|
|
|
+ ROUND(IF(SUM(cost) > 0, SUM(buy_new_user_total_amount) / SUM(cost), 0), 4) as buy_roi,
|
|
|
+ ROUND(IF(SUM(cost) > 0, SUM(new_user_total_amount) / SUM(cost), 0), 4) as today_roi,
|
|
|
+ (SUM(new_user_total_amount) - SUM(cost)) as gross_profit,
|
|
|
+ ROUND(IF(SUM(register_num) > 0, SUM(first_new_user_amount_num) / SUM(register_num), 0), 4) as first_rate,
|
|
|
+ ROUND(IF(SUM(register_num) > 0, SUM(buy_new_user_total_amount_num) / SUM(register_num), 0), 4) as buy_user_rate,
|
|
|
+ ROUND(IF(SUM(register_num) > 0, SUM(new_user_total_amount_num) / SUM(register_num), 0), 4) as today_rate,
|
|
|
+ ROUND(IF(SUM(first_new_user_amount_count) > 0 , SUM(first_new_user_amount) / SUM(first_new_user_amount_count), 0), 2) as first_avg,
|
|
|
+ ROUND(IF(SUM(buy_new_user_total_amount_count) > 0 , SUM(buy_new_user_total_amount) / SUM(buy_new_user_total_amount_count), 0), 2) as buy_avg,
|
|
|
+ ROUND(IF(SUM(new_user_total_amount_count) > 0 , SUM(new_user_total_amount) / SUM(new_user_total_amount_count), 0), 2) as today_avg,
|
|
|
+ ROUND(IF(SUM(first_new_user_amount_num) > 0 , SUM(cost) / SUM(first_new_user_amount_num), 0), 2) as first_amount_cost,
|
|
|
+ ROUND(IF(SUM(buy_new_user_total_amount_num) > 0 , SUM(cost) / SUM(buy_new_user_total_amount_num), 0), 2) as buy_amount_cost,
|
|
|
+ ROUND(IF(SUM(new_user_total_amount_num) > 0 , SUM(cost) / SUM(new_user_total_amount_num), 0), 2) as today_amount_cost,
|
|
|
+ SUM(reg_order_user_again) as reg_order_user_again,
|
|
|
+ ROUND(IF(SUM(new_user_total_amount_num) > 0 ,SUM(reg_order_user_again) / SUM(new_user_total_amount_num), 0), 4) as today_again_rate,
|
|
|
+ ROUND(IF(SUM(register_num) > 0 , SUM(new_user_total_amount) / SUM(register_num), 0), 2) as new_reg_arpu,
|
|
|
+ ROUND(IF(SUM(first_new_user_amount_num) > 0 , SUM(first_new_user_amount) / SUM(first_new_user_amount_num), 0), 2) as first_arpu,
|
|
|
+ ROUND(IF(SUM(new_user_total_amount_num) > 0 , SUM(new_user_total_amount) / SUM(new_user_total_amount_num), 0), 2) as today_arpu,
|
|
|
+ SUM(hundred_user_num) as hundred_user_num,
|
|
|
+ ROUND(IF(SUM(hundred_user_num) > 0 , SUM(cost) / SUM(hundred_user_num), 0), 2) as hundred_user_num_cost,
|
|
|
+ ROUND(IF(SUM(cost) > 0 , SUM(da1) / SUM(cost), 0), 4) as roi1,
|
|
|
+ ROUND(IF(SUM(cost) > 0 , SUM(da2) / SUM(cost), 0), 4) as roi2,
|
|
|
+ ROUND(IF(SUM(cost) > 0 , SUM(da3) / SUM(cost), 0), 4) as roi3,
|
|
|
+ ROUND(IF(SUM(cost) > 0 , SUM(da4) / SUM(cost), 0), 4) as roi4,
|
|
|
+ ROUND(IF(SUM(cost) > 0 , SUM(da5) / SUM(cost), 0), 4) as roi5,
|
|
|
+ ROUND(IF(SUM(cost) > 0 , SUM(da6) / SUM(cost), 0), 4) as roi6,
|
|
|
+ ROUND(IF(SUM(cost) > 0 , SUM(da7) / SUM(cost), 0), 4) as roi7,
|
|
|
+ ROUND(IF(SUM(cost) > 0 , SUM(da8) / SUM(cost), 0), 4) as roi8,
|
|
|
+ ROUND(IF(SUM(cost) > 0 , SUM(da9) / SUM(cost), 0), 4) as roi9,
|
|
|
+ ROUND(IF(SUM(cost) > 0 , SUM(da10) / SUM(cost), 0), 4) as roi10,
|
|
|
+ ROUND(IF(SUM(cost) > 0 , SUM(da11) / SUM(cost), 0), 4) as roi11,
|
|
|
+ ROUND(IF(SUM(cost) > 0 , SUM(da12) / SUM(cost), 0), 4) as roi12,
|
|
|
+ ROUND(IF(SUM(cost) > 0 , SUM(da13) / SUM(cost), 0), 4) as roi13,
|
|
|
+ ROUND(IF(SUM(cost) > 0 , SUM(da14) / SUM(cost), 0), 4) as roi14,
|
|
|
+ ROUND(IF(SUM(cost) > 0 , SUM(da15) / SUM(cost), 0), 4) as roi15,
|
|
|
+ ROUND(IF(SUM(cost) > 0 , SUM(da16) / SUM(cost), 0), 4) as roi16,
|
|
|
+ ROUND(IF(SUM(cost) > 0 , SUM(da17) / SUM(cost), 0), 4) as roi17,
|
|
|
+ ROUND(IF(SUM(cost) > 0 , SUM(da18) / SUM(cost), 0), 4) as roi18,
|
|
|
+ ROUND(IF(SUM(cost) > 0 , SUM(da19) / SUM(cost), 0), 4) as roi19,
|
|
|
+ ROUND(IF(SUM(cost) > 0 , SUM(da20) / SUM(cost), 0), 4) as roi20,
|
|
|
+ ROUND(IF(SUM(cost) > 0 , SUM(da21) / SUM(cost), 0), 4) as roi21,
|
|
|
+ ROUND(IF(SUM(cost) > 0 , SUM(da22) / SUM(cost), 0), 4) as roi22,
|
|
|
+ ROUND(IF(SUM(cost) > 0 , SUM(da23) / SUM(cost), 0), 4) as roi23,
|
|
|
+ ROUND(IF(SUM(cost) > 0 , SUM(da24) / SUM(cost), 0), 4) as roi24,
|
|
|
+ ROUND(IF(SUM(cost) > 0 , SUM(da25) / SUM(cost), 0), 4) as roi25,
|
|
|
+ ROUND(IF(SUM(cost) > 0 , SUM(da26) / SUM(cost), 0), 4) as roi26,
|
|
|
+ ROUND(IF(SUM(cost) > 0 , SUM(da27) / SUM(cost), 0), 4) as roi27,
|
|
|
+ ROUND(IF(SUM(cost) > 0 , SUM(da28) / SUM(cost), 0), 4) as roi28,
|
|
|
+ ROUND(IF(SUM(cost) > 0 , SUM(da29) / SUM(cost), 0), 4) as roi29,
|
|
|
+ ROUND(IF(SUM(cost) > 0 , SUM(da30) / SUM(cost), 0), 4) as roi30,
|
|
|
+ ROUND(IF(SUM(cost) > 0 , SUM(m2) / SUM(cost), 0), 4) as roi60,
|
|
|
+ ROUND(IF(SUM(cost) > 0 , SUM(m3) / SUM(cost), 0), 4) as roi90,
|
|
|
+ ROUND(IF(SUM(cost) > 0 , SUM(m6) / SUM(cost), 0), 4) as roi180,
|
|
|
+ ROUND(IF(SUM(cost) > 0 , SUM(y1) / SUM(cost), 0), 4) as roi1yaer,
|
|
|
+ ROUND(IF(SUM(cost) > 0 , SUM(total) / SUM(cost), 0), 4) as roi_total
|
|
|
+ FROM
|
|
|
+ game_ads.ads_pitcher_day
|
|
|
+ """ + criA +
|
|
|
+ """
|
|
|
+ ) a
|
|
|
+ LEFT JOIN (
|
|
|
+ SELECT
|
|
|
+ pitcher_id as b_pitcher_id,
|
|
|
+ IFNULL(SUM(amount), 0) as amount,
|
|
|
+ IFNULL(SUM(amount_count), 0) as amount_count,
|
|
|
+ ROUND(IF(SUM(amount_count) > 0 , SUM(amount) / SUM(amount_count), 0), 2) as paper_avg
|
|
|
+ FROM
|
|
|
+ game_ads.ads_pitcher_day
|
|
|
+ """ + criB +
|
|
|
+ """
|
|
|
+ ) b ON a.pitcher_id = b.b_pitcher_id
|
|
|
+ LEFT JOIN (
|
|
|
+ SELECT
|
|
|
+ pitcher_id as c_pitcher_id,
|
|
|
+ IFNULL(COUNT(DISTINCT user_id), 0) amount_num
|
|
|
+ FROM
|
|
|
+ game_ads.ads_information
|
|
|
+ """ + criAmount +
|
|
|
+ """
|
|
|
+ AND NOT agent_id = 0
|
|
|
+ GROUP BY pitcher_id
|
|
|
+ ) c ON a.pitcher_id = c.c_pitcher_id
|
|
|
+ LEFT JOIN (
|
|
|
+ SELECT
|
|
|
+ pitcher_id as d_pitcher_id,
|
|
|
+ COUNT(DISTINCT user_id) new_user_amount_num
|
|
|
+ FROM
|
|
|
+ game_ads.ads_information
|
|
|
+ """ + criNewUser +
|
|
|
+ """
|
|
|
+ AND NOT agent_id = 0
|
|
|
+ GROUP BY
|
|
|
+ pitcher_id
|
|
|
+ ) d ON a.pitcher_id = d.d_pitcher_id
|
|
|
+ LEFT JOIN (
|
|
|
+ SELECT
|
|
|
+ pitcher_id as e_pitcher_id,
|
|
|
+ COUNT(tempA.num) as new_user_order_again
|
|
|
+ FROM (
|
|
|
+ SELECT
|
|
|
+ pitcher_id,
|
|
|
+ COUNT(user_id) num
|
|
|
+ FROM
|
|
|
+ game_ads.ads_information
|
|
|
+ """ + criNewUser +
|
|
|
+ """
|
|
|
+ AND NOT agent_id = 0
|
|
|
+ GROUP BY
|
|
|
+ user_id,
|
|
|
+ pitcher_id
|
|
|
+ HAVING
|
|
|
+ COUNT(user_id) > 1 ) tempA
|
|
|
+ GROUP BY
|
|
|
+ tempA.pitcher_id
|
|
|
+ ) e ON a.pitcher_id = e.e_pitcher_id
|
|
|
+ LEFT JOIN (
|
|
|
+ SELECT
|
|
|
+ user_zx_pitcher_id as f_pitcher_id,
|
|
|
+ COUNT(DISTINCT role_user_id) as role_num
|
|
|
+ FROM
|
|
|
+ dw_create_role_detail
|
|
|
+ """ + criRoleNum +
|
|
|
+ """
|
|
|
+ AND NOT user_agent_id = 0
|
|
|
+ GROUP BY user_zx_pitcher_id
|
|
|
+ ) f ON a.pitcher_id = f.f_pitcher_id
|
|
|
+ """;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 查询投手游戏总数据SQL(投手游戏总数据)
|
|
|
* @param criA 主表查询条件
|
|
|
* @param criB 账面相关查询条件
|
|
|
* @param criAmount 账面充值人数查询条件
|
|
@@ -2192,7 +2881,96 @@ public class PitcherDataServiceImpl implements IPitcherDataService {
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * 查询投手游戏总数据总计SQL
|
|
|
+ * 查询投手总数据总计SQL(投手总数据总计)
|
|
|
+ *
|
|
|
+ * @return String
|
|
|
+ */
|
|
|
+ private String pitcherDataTotalSumSql() {
|
|
|
+ return """
|
|
|
+ SELECT
|
|
|
+ IFNULL(SUM(cost), 0) as cost,
|
|
|
+ IFNULL(SUM(plan_count), 0) as plan_count,
|
|
|
+ IFNULL(SUM(account_count), 0) as account_count,
|
|
|
+ IFNULL(SUM(agent_count), 0) as agent_count,
|
|
|
+ IFNULL(SUM(register_num), 0) as register_num,
|
|
|
+ ROUND(IF(SUM(register_num) > 0, SUM(cost) / SUM(register_num), 0), 2) as register_cost,
|
|
|
+ IFNULL(SUM(first_role_num), 0) as first_role_num,
|
|
|
+ IFNULL(SUM(new_user_total_role_num), 0) as new_user_total_role_num,
|
|
|
+ ROUND(IF(SUM(first_role_num) > 0 , SUM(cost) / SUM(first_role_num), 0), 2) as first_role_cost,
|
|
|
+ ROUND(IF(SUM(new_user_total_role_num) > 0 , SUM(cost) / SUM(new_user_total_role_num), 0), 2) as new_user_total_role_cost,
|
|
|
+ ROUND(IF(SUM(register_num) > 0 , SUM(first_role_num) / SUM(register_num), 0), 4) as first_role_rate,
|
|
|
+ ROUND(IF(SUM(register_num) > 0 , SUM(new_user_total_role_num) / SUM(register_num), 0), 4) as new_user_total_role_rate,
|
|
|
+ IFNULL(SUM(first_new_user_amount_count), 0) as first_new_user_amount_count,
|
|
|
+ IFNULL(SUM(first_new_user_amount_num), 0) as first_new_user_amount_num,
|
|
|
+ IFNULL(SUM(first_new_user_amount), 0) as first_new_user_amount,
|
|
|
+ IFNULL(SUM(new_user_total_amount_count), 0) as new_user_total_amount_count,
|
|
|
+ IFNULL(SUM(new_user_total_amount_num), 0) as new_user_total_amount_num,
|
|
|
+ IFNULL(SUM(new_user_total_amount), 0) as new_user_total_amount,
|
|
|
+ IFNULL(SUM(buy_new_user_total_amount), 0) as buy_new_user_total_amount,
|
|
|
+ IFNULL(SUM(buy_new_user_total_amount_num), 0) as buy_new_user_total_amount_num,
|
|
|
+ IFNULL(SUM(buy_new_user_total_amount_count), 0) as buy_new_user_total_amount_count,
|
|
|
+ ROUND(IF(SUM(cost) > 0, SUM(first_new_user_amount) / SUM(cost), 0), 4) as first_roi,
|
|
|
+ ROUND(IF(SUM(cost) > 0, SUM(buy_new_user_total_amount) / SUM(cost), 0), 4) as buy_roi,
|
|
|
+ ROUND(IF(SUM(cost) > 0, SUM(new_user_total_amount) / SUM(cost), 0), 4) as today_roi,
|
|
|
+ IFNULL((SUM(new_user_total_amount) - SUM(cost)), 0) as gross_profit,
|
|
|
+ ROUND(IF(SUM(register_num) > 0, SUM(first_new_user_amount_num) / SUM(register_num), 0), 4) as first_rate,
|
|
|
+ ROUND(IF(SUM(register_num) > 0, SUM(buy_new_user_total_amount_num) / SUM(register_num), 0), 4) as buy_user_rate,
|
|
|
+ ROUND(IF(SUM(register_num) > 0, SUM(new_user_total_amount_num) / SUM(register_num), 0), 4) as today_rate,
|
|
|
+ ROUND(IF(SUM(first_new_user_amount_count) > 0 , SUM(first_new_user_amount) / SUM(first_new_user_amount_count), 0), 2) as first_avg,
|
|
|
+ ROUND(IF(SUM(buy_new_user_total_amount_count) > 0 , SUM(buy_new_user_total_amount) / SUM(buy_new_user_total_amount_count), 0), 2) as buy_avg,
|
|
|
+ ROUND(IF(SUM(new_user_total_amount_count) > 0 , SUM(new_user_total_amount) / SUM(new_user_total_amount_count), 0), 2) as today_avg,
|
|
|
+ ROUND(IF(SUM(first_new_user_amount_num) > 0 , SUM(cost) / SUM(first_new_user_amount_num), 0), 2) as first_amount_cost,
|
|
|
+ ROUND(IF(SUM(buy_new_user_total_amount_num) > 0 , SUM(cost) / SUM(buy_new_user_total_amount_num), 0), 2) as buy_amount_cost,
|
|
|
+ ROUND(IF(SUM(new_user_total_amount_num) > 0 , SUM(cost) / SUM(new_user_total_amount_num), 0), 2) as today_amount_cost,
|
|
|
+ IFNULL(SUM(reg_order_user_again), 0) as reg_order_user_again,
|
|
|
+ ROUND(IF(SUM(new_user_total_amount_num) > 0 ,SUM(reg_order_user_again) / SUM(new_user_total_amount_num), 0), 4) as today_again_rate,
|
|
|
+ ROUND(IF(SUM(register_num) > 0 , SUM(new_user_total_amount) / SUM(register_num), 0), 2) as new_reg_arpu,
|
|
|
+ ROUND(IF(SUM(first_new_user_amount_num) > 0 , SUM(first_new_user_amount) / SUM(first_new_user_amount_num), 0), 2) as first_arpu,
|
|
|
+ ROUND(IF(SUM(new_user_total_amount_num) > 0 , SUM(new_user_total_amount) / SUM(new_user_total_amount_num), 0), 2) as today_arpu,
|
|
|
+ IFNULL(SUM(hundred_user_num), 0) as hundred_user_num,
|
|
|
+ ROUND(IF(SUM(hundred_user_num) > 0 , SUM(cost) / SUM(hundred_user_num), 0), 2) as hundred_user_num_cost,
|
|
|
+ ROUND(IF(SUM(cost) > 0 , SUM(da1) / SUM(cost), 0), 4) as roi1,
|
|
|
+ ROUND(IF(SUM(cost) > 0 , SUM(da2) / SUM(cost), 0), 4) as roi2,
|
|
|
+ ROUND(IF(SUM(cost) > 0 , SUM(da3) / SUM(cost), 0), 4) as roi3,
|
|
|
+ ROUND(IF(SUM(cost) > 0 , SUM(da4) / SUM(cost), 0), 4) as roi4,
|
|
|
+ ROUND(IF(SUM(cost) > 0 , SUM(da5) / SUM(cost), 0), 4) as roi5,
|
|
|
+ ROUND(IF(SUM(cost) > 0 , SUM(da6) / SUM(cost), 0), 4) as roi6,
|
|
|
+ ROUND(IF(SUM(cost) > 0 , SUM(da7) / SUM(cost), 0), 4) as roi7,
|
|
|
+ ROUND(IF(SUM(cost) > 0 , SUM(da8) / SUM(cost), 0), 4) as roi8,
|
|
|
+ ROUND(IF(SUM(cost) > 0 , SUM(da9) / SUM(cost), 0), 4) as roi9,
|
|
|
+ ROUND(IF(SUM(cost) > 0 , SUM(da10) / SUM(cost), 0), 4) as roi10,
|
|
|
+ ROUND(IF(SUM(cost) > 0 , SUM(da11) / SUM(cost), 0), 4) as roi11,
|
|
|
+ ROUND(IF(SUM(cost) > 0 , SUM(da12) / SUM(cost), 0), 4) as roi12,
|
|
|
+ ROUND(IF(SUM(cost) > 0 , SUM(da13) / SUM(cost), 0), 4) as roi13,
|
|
|
+ ROUND(IF(SUM(cost) > 0 , SUM(da14) / SUM(cost), 0), 4) as roi14,
|
|
|
+ ROUND(IF(SUM(cost) > 0 , SUM(da15) / SUM(cost), 0), 4) as roi15,
|
|
|
+ ROUND(IF(SUM(cost) > 0 , SUM(da16) / SUM(cost), 0), 4) as roi16,
|
|
|
+ ROUND(IF(SUM(cost) > 0 , SUM(da17) / SUM(cost), 0), 4) as roi17,
|
|
|
+ ROUND(IF(SUM(cost) > 0 , SUM(da18) / SUM(cost), 0), 4) as roi18,
|
|
|
+ ROUND(IF(SUM(cost) > 0 , SUM(da19) / SUM(cost), 0), 4) as roi19,
|
|
|
+ ROUND(IF(SUM(cost) > 0 , SUM(da20) / SUM(cost), 0), 4) as roi20,
|
|
|
+ ROUND(IF(SUM(cost) > 0 , SUM(da21) / SUM(cost), 0), 4) as roi21,
|
|
|
+ ROUND(IF(SUM(cost) > 0 , SUM(da22) / SUM(cost), 0), 4) as roi22,
|
|
|
+ ROUND(IF(SUM(cost) > 0 , SUM(da23) / SUM(cost), 0), 4) as roi23,
|
|
|
+ ROUND(IF(SUM(cost) > 0 , SUM(da24) / SUM(cost), 0), 4) as roi24,
|
|
|
+ ROUND(IF(SUM(cost) > 0 , SUM(da25) / SUM(cost), 0), 4) as roi25,
|
|
|
+ ROUND(IF(SUM(cost) > 0 , SUM(da26) / SUM(cost), 0), 4) as roi26,
|
|
|
+ ROUND(IF(SUM(cost) > 0 , SUM(da27) / SUM(cost), 0), 4) as roi27,
|
|
|
+ ROUND(IF(SUM(cost) > 0 , SUM(da28) / SUM(cost), 0), 4) as roi28,
|
|
|
+ ROUND(IF(SUM(cost) > 0 , SUM(da29) / SUM(cost), 0), 4) as roi29,
|
|
|
+ ROUND(IF(SUM(cost) > 0 , SUM(da30) / SUM(cost), 0), 4) as roi30,
|
|
|
+ ROUND(IF(SUM(cost) > 0 , SUM(m2) / SUM(cost), 0), 4) as roi60,
|
|
|
+ ROUND(IF(SUM(cost) > 0 , SUM(m3) / SUM(cost), 0), 4) as roi90,
|
|
|
+ ROUND(IF(SUM(cost) > 0 , SUM(m6) / SUM(cost), 0), 4) as roi180,
|
|
|
+ ROUND(IF(SUM(cost) > 0 , SUM(y1) / SUM(cost), 0), 4) as roi1yaer,
|
|
|
+ ROUND(IF(SUM(cost) > 0 , SUM(total) / SUM(cost), 0), 4) as roi_total
|
|
|
+ FROM
|
|
|
+ game_ads.ads_pitcher_day
|
|
|
+ """;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 查询投手游戏总数据总计SQL(投手游戏总数据总计)
|
|
|
*
|
|
|
* @return String
|
|
|
*/
|