|
@@ -198,13 +198,6 @@ public class GameDataServiceImpl implements IGameDataService {
|
|
|
dto.setRegisteredBeginDate(LocalDate.now());
|
|
|
dto.setRegisteredEndDate(LocalDate.now());
|
|
|
}
|
|
|
- //如果没有排序条件给默认值
|
|
|
- if (StringUtils.isBlank(dto.getSortFiled())) {
|
|
|
- dto.setSortFiled("dt");
|
|
|
- }
|
|
|
- if (StringUtils.isBlank(dto.getSortType())) {
|
|
|
- dto.setSortType(OrderByEnum.DESC.getOrderType());
|
|
|
- }
|
|
|
//根据dto拼接查询条件
|
|
|
Criteria cri = Cnd.cri();
|
|
|
if (StringUtils.isNotBlank(dto.getGameName())) {
|
|
@@ -227,8 +220,15 @@ public class GameDataServiceImpl implements IGameDataService {
|
|
|
cri.where().andEquals("source_system", dto.getSourceSystem());
|
|
|
}
|
|
|
//拼接排序条件
|
|
|
- cri.getOrderBy().orderBy(CaseFormat.LOWER_CAMEL.to(CaseFormat.LOWER_UNDERSCORE, dto.getSortFiled()), dto.getSortType());
|
|
|
-
|
|
|
+ if (StringUtils.isBlank(dto.getSortType())) {
|
|
|
+ dto.setSortType(OrderByEnum.DESC.getOrderType());
|
|
|
+ }
|
|
|
+ if (StringUtils.isBlank(dto.getSortFiled())) {
|
|
|
+ cri.getOrderBy().orderBy("cost_date", dto.getSortFiled());
|
|
|
+ cri.getOrderBy().orderBy("cost", dto.getSortFiled());
|
|
|
+ } else {
|
|
|
+ cri.getOrderBy().orderBy(CaseFormat.LOWER_CAMEL.to(CaseFormat.LOWER_UNDERSCORE, dto.getSortFiled()), dto.getSortType());
|
|
|
+ }
|
|
|
//编写sql语句 拼接查询条件
|
|
|
Sql sql = Sqls.create(gameDataDaySql() + cri);
|
|
|
//设置自定义回显对象
|
|
@@ -321,19 +321,11 @@ public class GameDataServiceImpl implements IGameDataService {
|
|
|
dto.setRechargeBeginDate(LocalDate.now());
|
|
|
dto.setRechargeEndDate(LocalDate.now());
|
|
|
}
|
|
|
- //如果没有排序条件给默认值
|
|
|
- if (StringUtils.isBlank(dto.getSortFiled())) {
|
|
|
- //根据游戏id
|
|
|
- dto.setSortFiled("game_id");
|
|
|
- }
|
|
|
- if (StringUtils.isBlank(dto.getSortType())) {
|
|
|
- dto.setSortType(OrderByEnum.ASC.getOrderType());
|
|
|
- }
|
|
|
|
|
|
//主表查询条件
|
|
|
- Criteria criA = myCri(dto, "criA");
|
|
|
+ Criteria criA = myCri(dto, "criA", true);
|
|
|
//账面相关查询条件 时间条件只和充值时间相关
|
|
|
- Criteria criB = myCri(dto, "criB");
|
|
|
+ Criteria criB = myCri(dto, "criB", true);
|
|
|
//账面人数相关 时间只需要充值时间条件,不需要注册时间条件
|
|
|
Criteria criAmount = myCriRecharge(dto, false);
|
|
|
//新用户充值人数和新用户复充人数 时间条件需要注册时间和充值时间
|
|
@@ -342,6 +334,13 @@ public class GameDataServiceImpl implements IGameDataService {
|
|
|
Criteria criRoleNum = myCriRole(dto);
|
|
|
//拼接排序条件
|
|
|
Criteria orderByCri = Cnd.cri();
|
|
|
+ //如果没有排序条件给默认值
|
|
|
+ if (StringUtils.isBlank(dto.getSortType())) {
|
|
|
+ dto.setSortType(OrderByEnum.DESC.getOrderType());
|
|
|
+ }
|
|
|
+ if (StringUtils.isBlank(dto.getSortFiled())) {
|
|
|
+ dto.setSortFiled("cost");
|
|
|
+ }
|
|
|
orderByCri.getOrderBy().orderBy(CaseFormat.LOWER_CAMEL.to(CaseFormat.LOWER_UNDERSCORE, dto.getSortFiled()), dto.getSortType());
|
|
|
//创建sql语句 执行sql
|
|
|
Sql sql = Sqls.create(getGameDataTotalSql(criA, criB, criAmount, criNewUser, criRoleNum) + orderByCri);
|
|
@@ -539,102 +538,272 @@ public class GameDataServiceImpl implements IGameDataService {
|
|
|
dto.setRechargeBeginDate(LocalDate.now());
|
|
|
dto.setRechargeEndDate(LocalDate.now());
|
|
|
}
|
|
|
- //根据传入的dto拼接查询参数
|
|
|
- Criteria cri = Cnd.cri();
|
|
|
- if (StringUtils.isNotBlank(dto.getGameName())) {
|
|
|
- //拼接游戏名称查询条件
|
|
|
- cri.where().andEquals("game_name", dto.getGameName());
|
|
|
- }
|
|
|
- if (dto.getGameId() != null) {
|
|
|
- //拼接游戏id查询条件
|
|
|
- cri.where().andEquals("game_id", dto.getGameId());
|
|
|
- }
|
|
|
- if (dto.getGameClassify() != null) {
|
|
|
- //拼接游戏类型查询条件
|
|
|
- cri.where().andEquals("game_classify", dto.getGameClassify());
|
|
|
- }
|
|
|
- if (dto.getRegisteredBeginDate() != null && dto.getRegisteredEndDate() != null) {
|
|
|
- //拼接注册日期查询条件
|
|
|
- cri.where().andBetween("dt", dto.getRegisteredBeginDate(), dto.getRegisteredEndDate());
|
|
|
- }
|
|
|
- if (StringUtils.isNotBlank(dto.getSourceSystem())) {
|
|
|
- //拼接SDK来源
|
|
|
- cri.where().andEquals("source_system", dto.getSourceSystem());
|
|
|
- }
|
|
|
+ //将查询条件GameDataTotalTotalDTO 复制为 GameDataTotalDTO
|
|
|
+ GameDataTotalDTO totalDTO = new GameDataTotalDTO();
|
|
|
+ copyNullProperties(dto, totalDTO);
|
|
|
+ //主表查询条件
|
|
|
+ Criteria criA = myCri(totalDTO, "criA", false);
|
|
|
+ //账面相关查询条件 时间条件只和充值时间相关
|
|
|
+ Criteria criB = myCri(totalDTO, "criB", false);
|
|
|
+ //账面人数相关 时间只需要充值时间条件,不需要注册时间条件
|
|
|
+ Criteria criAmount = myCriRecharge(totalDTO, false);
|
|
|
+ //新用户充值人数和新用户复充人数 时间条件需要注册时间和充值时间
|
|
|
+ Criteria criNewUser = myCriRecharge(totalDTO, true);
|
|
|
+ //创角人数查询条件
|
|
|
+ Criteria criRoleNum = myCriRole(totalDTO);
|
|
|
+ //创建sql语句 执行sql
|
|
|
+ Sql sql = Sqls.create(gameDataTotalTotalSql() + criA);
|
|
|
+ //设置自定义回显对象
|
|
|
+ sql.setCallback(Sqls.callback.entity());
|
|
|
+ sql.setEntity(dao.getEntity(GameDataTotalTotalVO.class));
|
|
|
+ //执行sql
|
|
|
+ dao.execute(sql);
|
|
|
+ //得到含有部分总数据总计结果的GameDataTotalTotalVO
|
|
|
+ GameDataTotalTotalVO vo = sql.getObject(GameDataTotalTotalVO.class);
|
|
|
+ //处理账面、新用户充值人数、新用户复充人数、创角人数相关数据
|
|
|
+ GameDataTotalTotalVO tempVO = getGameDataTotalSumAmountData(criB, criAmount, criNewUser, criRoleNum);
|
|
|
+ //将两个处理的对象合并
|
|
|
+ copyNullProperties(tempVO, vo);
|
|
|
+ //得到dayN相关数据
|
|
|
+ getGameDataTotalTotalRechargeData(dto, vo);
|
|
|
|
|
|
- Sql gameDataTotalTotalSql = Sqls.create(gameDataTotalTotalSql() + cri);
|
|
|
+ //返回结果
|
|
|
+ return vo;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 得到账面相关数据、账面人数、新用户人数、新用户复充人数、创角人数数据(游戏总数据总计)
|
|
|
+ *
|
|
|
+ * @return PitcherDataTotalSumVO
|
|
|
+ */
|
|
|
+ private GameDataTotalTotalVO getGameDataTotalSumAmountData(Criteria criB, Criteria criAmount, Criteria criNewUser, Criteria criRoleNum) {
|
|
|
+ //得到账面相关数据
|
|
|
+ Sql sqlAmountData = Sqls.create(gameDataTotalSumAmountSql() + criB);
|
|
|
//设置回传对象
|
|
|
- gameDataTotalTotalSql.setCallback(Sqls.callback.entity());
|
|
|
- gameDataTotalTotalSql.setEntity(dao.getEntity(GameDataTotalTotalVO.class));
|
|
|
+ sqlAmountData.setCallback(Sqls.callback.entity());
|
|
|
+ sqlAmountData.setEntity(dao.getEntity(GameDataTotalTotalVO.class));
|
|
|
//执行sql
|
|
|
- dao.execute(gameDataTotalTotalSql);
|
|
|
- //得到查询出的结果
|
|
|
- GameDataTotalTotalVO vo = gameDataTotalTotalSql.getObject(GameDataTotalTotalVO.class);
|
|
|
+ dao.execute(sqlAmountData);
|
|
|
+ GameDataTotalTotalVO vo = sqlAmountData.getObject(GameDataTotalTotalVO.class);
|
|
|
|
|
|
- //查询充值时间相关数据
|
|
|
- //查询条件
|
|
|
- Criteria criRc = Cnd.cri();
|
|
|
- if (StringUtils.isNotBlank(dto.getGameName())) {
|
|
|
- //拼接游戏名称查询条件
|
|
|
- criRc.where().andEquals("game_name", dto.getGameName());
|
|
|
- }
|
|
|
- if (dto.getGameClassify() != null) {
|
|
|
- //拼接游戏类型查询条件
|
|
|
- criRc.where().andEquals("game_classify", dto.getGameClassify());
|
|
|
- }
|
|
|
- if (dto.getGameId() != null) {
|
|
|
- //拼接游戏id查询条件
|
|
|
- criRc.where().andEquals("game_id", dto.getGameId());
|
|
|
- }
|
|
|
- if (dto.getRechargeBeginDate() != null && dto.getRechargeEndDate() != null) {
|
|
|
- //拼接充值日期查询条件
|
|
|
- criRc.where().andBetween("dt", dto.getRechargeBeginDate(), dto.getRechargeEndDate());
|
|
|
- }
|
|
|
- if (StringUtils.isNotBlank(dto.getSourceSystem())) {
|
|
|
- //拼接SDK来源
|
|
|
- criRc.where().andEquals("source_system", dto.getSourceSystem());
|
|
|
- }
|
|
|
- //创建sql语句
|
|
|
- Sql sqlWithRechargeDate = Sqls.create(gameDataTotalSqlRecharge() + criRc);
|
|
|
+ //账面人数数据(总量)
|
|
|
+ Sql sqlAmountNum = Sqls.create("""
|
|
|
+ SELECT
|
|
|
+ IFNULL(COUNT(DISTINCT user_id), 0) amount_num
|
|
|
+ FROM
|
|
|
+ game_ads.ads_information
|
|
|
+ """ + criAmount);
|
|
|
//设置回传对象
|
|
|
- sqlWithRechargeDate.setCallback(Sqls.callback.entity());
|
|
|
- sqlWithRechargeDate.setEntity(dao.getEntity(GameDataTotalTotalVO.class));
|
|
|
- dao.execute(sqlWithRechargeDate);
|
|
|
- GameDataTotalTotalVO tempVO = sqlWithRechargeDate.getObject(GameDataTotalTotalVO.class);
|
|
|
-
|
|
|
- //设置查询参数map
|
|
|
- Map<String, Object> queryMap = new HashMap<>(4);
|
|
|
- queryMap.put("rechargeBeginDate", dto.getRechargeBeginDate());
|
|
|
- queryMap.put("rechargeEndDate", dto.getRechargeEndDate());
|
|
|
- queryMap.put("gameId", dto.getGameId());
|
|
|
- if (StringUtils.isNotBlank(dto.getSourceSystem())) {
|
|
|
- queryMap.put("sourceSystem", dto.getSourceSystem());
|
|
|
- }
|
|
|
- //账面充值人数(总量、买量、自然量)
|
|
|
- Long amountNum = getNewUserAmountNum(queryMap, "");
|
|
|
- Long buyAmountNum = getNewUserAmountNum(queryMap, "buy");
|
|
|
- Long natureAmountNum = getNewUserAmountNum(queryMap, "nature");
|
|
|
+ sqlAmountNum.setCallback(Sqls.callback.longValue());
|
|
|
+ //执行sql
|
|
|
+ dao.execute(sqlAmountNum);
|
|
|
//设置账面充值人数
|
|
|
- tempVO.setAmountNum(amountNum);
|
|
|
- tempVO.setBuyAmountNum(buyAmountNum);
|
|
|
- tempVO.setNatureAmountNum(natureAmountNum);
|
|
|
- //设置账面ARPU(总量、买量、自然量)
|
|
|
- tempVO.setAmountArpu(amountNum == 0L ? BigDecimal.ZERO :
|
|
|
- tempVO.getAmount().divide(BigDecimal.valueOf(amountNum), 2, RoundingMode.HALF_UP));
|
|
|
- tempVO.setBuyAmountArpu(buyAmountNum == 0L ? BigDecimal.ZERO :
|
|
|
- tempVO.getBuyAmount().divide(BigDecimal.valueOf(buyAmountNum), 2, RoundingMode.HALF_UP));
|
|
|
- tempVO.setNatureAmountArpu(natureAmountNum == 0L ? BigDecimal.ZERO :
|
|
|
- tempVO.getNatureAmount().divide(BigDecimal.valueOf(natureAmountNum), 2, RoundingMode.HALF_UP));
|
|
|
- //将两个对象内的数据合并
|
|
|
- copyNullProperties(tempVO, vo);
|
|
|
- //获取新用户充值人数相关数据
|
|
|
- getGameDataTotalTotalRechargeData(dto, vo);
|
|
|
+ vo.setAmountNum(sqlAmountNum.getLong());
|
|
|
+ //账面ARPU
|
|
|
+ vo.setAmountArpu(vo.getAmountNum() == 0L ? BigDecimal.ZERO :
|
|
|
+ vo.getAmount().divide(BigDecimal.valueOf(vo.getAmountNum()), 2, RoundingMode.HALF_UP));
|
|
|
+ //账面人数数据(买量)
|
|
|
+ Sql sqlBuyAmountNum = Sqls.create("""
|
|
|
+ SELECT
|
|
|
+ IFNULL(COUNT(DISTINCT user_id), 0) buy_amount_num
|
|
|
+ FROM
|
|
|
+ game_ads.ads_information
|
|
|
+ """ + criAmount +
|
|
|
+ """
|
|
|
+ AND NOT agent_id = 0
|
|
|
+ """);
|
|
|
+ //设置回传对象
|
|
|
+ sqlBuyAmountNum.setCallback(Sqls.callback.longValue());
|
|
|
+ //执行sql
|
|
|
+ dao.execute(sqlBuyAmountNum);
|
|
|
+ //设置账面充值人数
|
|
|
+ vo.setBuyAmountNum(sqlBuyAmountNum.getLong());
|
|
|
+ //账面ARPU
|
|
|
+ vo.setBuyAmountArpu(vo.getBuyAmountNum() == 0L ? BigDecimal.ZERO :
|
|
|
+ vo.getBuyAmount().divide(BigDecimal.valueOf(vo.getBuyAmountNum()), 2, RoundingMode.HALF_UP));
|
|
|
+ //账面人数数据(自然量)
|
|
|
+ Sql sqlNatureAmountNum = Sqls.create("""
|
|
|
+ SELECT
|
|
|
+ IFNULL(COUNT(DISTINCT user_id), 0) amount_num
|
|
|
+ FROM
|
|
|
+ game_ads.ads_information
|
|
|
+ """ + criAmount +
|
|
|
+ """
|
|
|
+ AND agent_id = 0
|
|
|
+ """);
|
|
|
+ //设置回传对象
|
|
|
+ sqlNatureAmountNum.setCallback(Sqls.callback.longValue());
|
|
|
+ //执行sql
|
|
|
+ dao.execute(sqlNatureAmountNum);
|
|
|
+ //设置账面充值人数
|
|
|
+ vo.setNatureAmountNum(sqlNatureAmountNum.getLong());
|
|
|
+ //账面ARPU
|
|
|
+ vo.setNatureAmountArpu(vo.getNatureAmountNum() == 0L ? BigDecimal.ZERO :
|
|
|
+ vo.getNatureAmount().divide(BigDecimal.valueOf(vo.getNatureAmountNum()), 2, RoundingMode.HALF_UP));
|
|
|
+
|
|
|
+ //新用户充值人数(总量)
|
|
|
+ Sql sqlNewUserNum = Sqls.create("""
|
|
|
+ SELECT
|
|
|
+ COUNT(DISTINCT user_id) new_user_amount_num
|
|
|
+ FROM
|
|
|
+ game_ads.ads_information
|
|
|
+ """ + criNewUser);
|
|
|
+ //设置回传对象
|
|
|
+ sqlNewUserNum.setCallback(Sqls.callback.longValue());
|
|
|
+ //执行sql
|
|
|
+ dao.execute(sqlNewUserNum);
|
|
|
+ //设置新用户充值人数
|
|
|
+ vo.setNewUserAmountNum(sqlNewUserNum.getLong());
|
|
|
+ //新用户充值人数(买量)
|
|
|
+ Sql sqlBuyNewUserNum = Sqls.create("""
|
|
|
+ SELECT
|
|
|
+ COUNT(DISTINCT user_id) buy_new_user_amount_num
|
|
|
+ FROM
|
|
|
+ game_ads.ads_information
|
|
|
+ """ + criNewUser +
|
|
|
+ """
|
|
|
+ AND NOT agent_id = 0
|
|
|
+ """);
|
|
|
+ //设置回传对象
|
|
|
+ sqlBuyNewUserNum.setCallback(Sqls.callback.longValue());
|
|
|
+ //执行sql
|
|
|
+ dao.execute(sqlBuyNewUserNum);
|
|
|
+ //设置新用户充值人数
|
|
|
+ vo.setBuyNewUserAmountNum(sqlBuyNewUserNum.getLong());
|
|
|
+ //新用户充值人数(自然量)
|
|
|
+ Sql sqlNatureNewUserNum = Sqls.create("""
|
|
|
+ SELECT
|
|
|
+ COUNT(DISTINCT user_id) nature_new_user_amount_num
|
|
|
+ FROM
|
|
|
+ game_ads.ads_information
|
|
|
+ """ + criNewUser +
|
|
|
+ """
|
|
|
+ AND agent_id = 0
|
|
|
+ """);
|
|
|
+ //设置回传对象
|
|
|
+ sqlNatureNewUserNum.setCallback(Sqls.callback.longValue());
|
|
|
+ //执行sql
|
|
|
+ dao.execute(sqlNatureNewUserNum);
|
|
|
+ //设置新用户充值人数
|
|
|
+ vo.setNatureNewUserAmountNum(sqlNatureNewUserNum.getLong());
|
|
|
+
|
|
|
+ //新用户复充人数(总量)
|
|
|
+ Sql sqlNewUserAgainNum = Sqls.create("""
|
|
|
+ SELECT
|
|
|
+ COUNT(tempA.num) as new_user_again_num
|
|
|
+ FROM (
|
|
|
+ SELECT
|
|
|
+ COUNT(user_id) num
|
|
|
+ FROM
|
|
|
+ game_ads.ads_information
|
|
|
+ """ + criNewUser +
|
|
|
+ """
|
|
|
+ GROUP BY user_id
|
|
|
+ HAVING
|
|
|
+ COUNT(user_id) > 1 ) tempA
|
|
|
+ """);
|
|
|
+ //设置回传对象
|
|
|
+ sqlNewUserAgainNum.setCallback(Sqls.callback.longValue());
|
|
|
+ //执行sql
|
|
|
+ dao.execute(sqlNewUserAgainNum);
|
|
|
+ //设置新用户复充人数
|
|
|
+ vo.setNewUserAgainNum(sqlNewUserAgainNum.getLong());
|
|
|
+ //新用户复充人数(买量)
|
|
|
+ Sql sqlBuyNewUserAgainNum = Sqls.create("""
|
|
|
+ SELECT
|
|
|
+ COUNT(tempA.num) as buy_new_user_again_num
|
|
|
+ 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
|
|
|
+ """);
|
|
|
+ //设置回传对象
|
|
|
+ sqlBuyNewUserAgainNum.setCallback(Sqls.callback.longValue());
|
|
|
+ //执行sql
|
|
|
+ dao.execute(sqlBuyNewUserAgainNum);
|
|
|
+ //设置新用户复充人数
|
|
|
+ vo.setBuyNewUserAgainNum(sqlBuyNewUserAgainNum.getLong());
|
|
|
+ //新用户复充人数(自然量)
|
|
|
+ Sql sqlNatureNewUserAgainNum = Sqls.create("""
|
|
|
+ SELECT
|
|
|
+ COUNT(tempA.num) as nature_new_user_again_num
|
|
|
+ FROM (
|
|
|
+ SELECT
|
|
|
+ COUNT(user_id) num
|
|
|
+ FROM
|
|
|
+ game_ads.ads_information
|
|
|
+ """ + criNewUser +
|
|
|
+ """
|
|
|
+ AND agent_id = 0
|
|
|
+ GROUP BY user_id
|
|
|
+ HAVING
|
|
|
+ COUNT(user_id) > 1 ) tempA
|
|
|
+ """);
|
|
|
+ //设置回传对象
|
|
|
+ sqlNatureNewUserAgainNum.setCallback(Sqls.callback.longValue());
|
|
|
+ //执行sql
|
|
|
+ dao.execute(sqlNatureNewUserAgainNum);
|
|
|
+ //设置新用户复充人数
|
|
|
+ vo.setNatureNewUserAgainNum(sqlNatureNewUserAgainNum.getLong());
|
|
|
+
|
|
|
+ //创角人数(总量)
|
|
|
+ Sql sqlRoleNum = Sqls.create("""
|
|
|
+ SELECT
|
|
|
+ COUNT(DISTINCT role_user_id) as role_num
|
|
|
+ FROM
|
|
|
+ dw_create_role_detail
|
|
|
+ """ + criRoleNum);
|
|
|
+ //设置回传对象
|
|
|
+ sqlRoleNum.setCallback(Sqls.callback.longValue());
|
|
|
+ //执行sql
|
|
|
+ dao.execute(sqlRoleNum);
|
|
|
+ //设置创角人数
|
|
|
+ vo.setRoleNum(sqlRoleNum.getLong());
|
|
|
+ //创角人数(买量)
|
|
|
+ Sql sqlBuyRoleNum = Sqls.create("""
|
|
|
+ SELECT
|
|
|
+ COUNT(DISTINCT role_user_id) as role_num
|
|
|
+ FROM
|
|
|
+ dw_create_role_detail
|
|
|
+ """ + criRoleNum +
|
|
|
+ """
|
|
|
+ AND NOT user_agent_id = 0
|
|
|
+ """);
|
|
|
+ //设置回传对象
|
|
|
+ sqlBuyRoleNum.setCallback(Sqls.callback.longValue());
|
|
|
+ //执行sql
|
|
|
+ dao.execute(sqlBuyRoleNum);
|
|
|
+ //设置创角人数
|
|
|
+ vo.setBuyRoleNum(sqlBuyRoleNum.getLong());
|
|
|
+ //创角人数(自然量)
|
|
|
+ Sql sqlNatureRoleNum = Sqls.create("""
|
|
|
+ SELECT
|
|
|
+ COUNT(DISTINCT role_user_id) as role_num
|
|
|
+ FROM
|
|
|
+ dw_create_role_detail
|
|
|
+ """ + criRoleNum +
|
|
|
+ """
|
|
|
+ AND user_agent_id = 0
|
|
|
+ """);
|
|
|
+ //设置回传对象
|
|
|
+ sqlNatureRoleNum.setCallback(Sqls.callback.longValue());
|
|
|
+ //执行sql
|
|
|
+ dao.execute(sqlNatureRoleNum);
|
|
|
+ //设置创角人数
|
|
|
+ vo.setNatureRoleNum(sqlNatureRoleNum.getLong());
|
|
|
|
|
|
return vo;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * 游戏总数据总计的新用户充值人数相关值得计算方法
|
|
|
+ * 游戏总数据总计的新用户充值人数相关数据的计算方法
|
|
|
*
|
|
|
* @param dto 前端查询条件
|
|
|
* @param vo 返回给前端得实体
|
|
@@ -660,12 +829,9 @@ public class GameDataServiceImpl implements IGameDataService {
|
|
|
DayN dayN = getDayNByTableName(dayNMap, "ads_dayn_game");
|
|
|
|
|
|
//设置买量数据
|
|
|
- //新用户充值次数、金额、人数
|
|
|
+ //新用户充值次数、金额
|
|
|
vo.setBuyNewUserAmount(buyDayN == null ? BigDecimal.ZERO : buyDayN.getRechargeMoney());
|
|
|
- vo.setBuyNewUserAmountNum(getNewUserAmountNum(dayNMap, "buy"));
|
|
|
vo.setBuyNewUserAmountCount(buyDayN == null ? 0L : buyDayN.getRechargeCount());
|
|
|
- //新用户复充人数
|
|
|
- vo.setBuyNewUserAgainNum(getNewUserAmountAgainNum(dayNMap, "buy"));
|
|
|
|
|
|
//老用户充值次数、人数、金额
|
|
|
vo.setBuyOldUserAmount(vo.getBuyAmount().subtract(vo.getBuyNewUserAmount()));
|
|
@@ -702,12 +868,9 @@ public class GameDataServiceImpl implements IGameDataService {
|
|
|
vo.getCost().divide(BigDecimal.valueOf(vo.getBuyNewUserAmountNum()), 4, RoundingMode.HALF_UP));
|
|
|
|
|
|
//设置自然量数据
|
|
|
- //新用户充值次数、金额、人数
|
|
|
+ //新用户充值次数、金额
|
|
|
vo.setNatureNewUserAmount(natureDayN == null ? BigDecimal.ZERO : natureDayN.getRechargeMoney());
|
|
|
- vo.setNatureNewUserAmountNum(getNewUserAmountNum(dayNMap, "nature"));
|
|
|
vo.setNatureNewUserAmountCount(natureDayN == null ? 0L : natureDayN.getRechargeCount());
|
|
|
- //新用户复充人数
|
|
|
- vo.setNatureNewUserAgainNum(getNewUserAmountAgainNum(dayNMap, "nature"));
|
|
|
|
|
|
//老用户充值次数、人数、金额
|
|
|
vo.setNatureOldUserAmount(vo.getNatureAmount().subtract(vo.getNatureNewUserAmount()));
|
|
@@ -744,12 +907,9 @@ public class GameDataServiceImpl implements IGameDataService {
|
|
|
vo.getCost().divide(BigDecimal.valueOf(vo.getNatureNewUserAmountNum()), 4, RoundingMode.HALF_UP));
|
|
|
|
|
|
//设置总量数据
|
|
|
- //新用户充值次数、金额、人数
|
|
|
+ //新用户充值次数、金额
|
|
|
vo.setNewUserAmount(dayN == null ? BigDecimal.ZERO : dayN.getRechargeMoney());
|
|
|
- vo.setNewUserAmountNum(getNewUserAmountNum(dayNMap, ""));
|
|
|
vo.setNewUserAmountCount(dayN == null ? 0L : dayN.getRechargeCount());
|
|
|
- //新用户复充人数
|
|
|
- vo.setNewUserAgainNum(getNewUserAmountAgainNum(dayNMap, ""));
|
|
|
|
|
|
//老用户充值次数、人数、金额
|
|
|
vo.setOldUserAmount(vo.getAmount().subtract(vo.getNewUserAmount()));
|
|
@@ -785,6 +945,20 @@ public class GameDataServiceImpl implements IGameDataService {
|
|
|
vo.setNewUserRechargeCost(vo.getNewUserAmountNum() == 0 ? BigDecimal.ZERO :
|
|
|
vo.getCost().divide(BigDecimal.valueOf(vo.getNewUserAmountNum()), 4, RoundingMode.HALF_UP));
|
|
|
|
|
|
+ //创角率
|
|
|
+ vo.setRoleNumRate(vo.getRegNum() == 0L ? BigDecimal.ZERO :
|
|
|
+ BigDecimal.valueOf(vo.getRoleNum().doubleValue() / vo.getRegNum().doubleValue()).setScale(4, RoundingMode.HALF_UP));
|
|
|
+ vo.setBuyRoleNumRate(vo.getBuyRegNum() == 0L ? BigDecimal.ZERO :
|
|
|
+ BigDecimal.valueOf(vo.getBuyRoleNum().doubleValue() / vo.getBuyRegNum().doubleValue()).setScale(4, RoundingMode.HALF_UP));
|
|
|
+ vo.setNatureRoleNumRate(vo.getNatureRegNum() == 0L ? BigDecimal.ZERO :
|
|
|
+ BigDecimal.valueOf(vo.getNatureRoleNum().doubleValue() / vo.getNatureRegNum().doubleValue()).setScale(4, RoundingMode.HALF_UP));
|
|
|
+ //创角成本
|
|
|
+ vo.setRoleNumCost(vo.getRoleNum() == 0L ? BigDecimal.ZERO :
|
|
|
+ vo.getCost().divide(BigDecimal.valueOf(vo.getRoleNum()), 4, RoundingMode.HALF_UP));
|
|
|
+ vo.setBuyRoleNumCost(vo.getBuyRoleNum() == 0L ? BigDecimal.ZERO :
|
|
|
+ vo.getCost().divide(BigDecimal.valueOf(vo.getBuyRoleNum()), 4, RoundingMode.HALF_UP));
|
|
|
+ vo.setNatureRoleNumCost(vo.getNatureRoleNum() == 0L ? BigDecimal.ZERO :
|
|
|
+ vo.getCost().divide(BigDecimal.valueOf(vo.getNatureRoleNum()), 4, RoundingMode.HALF_UP));
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -1163,9 +1337,10 @@ public class GameDataServiceImpl implements IGameDataService {
|
|
|
*
|
|
|
* @param dto 前端传递的查询条件
|
|
|
* @param type criA 查询主表 criB 查询账面相关
|
|
|
+ * @param needGroupBy 是否需要分组条件
|
|
|
* @return 查询条件
|
|
|
*/
|
|
|
- private Criteria myCri(GameDataTotalDTO dto, String type) {
|
|
|
+ private Criteria myCri(GameDataTotalDTO dto, String type, Boolean needGroupBy) {
|
|
|
//根据传入的dto拼接查询参数
|
|
|
Criteria cri = Cnd.cri();
|
|
|
if (StringUtils.isNotBlank(dto.getGameName())) {
|
|
@@ -1196,8 +1371,10 @@ public class GameDataServiceImpl implements IGameDataService {
|
|
|
cri.where().andBetween("dt", dto.getRechargeBeginDate(), dto.getRechargeEndDate());
|
|
|
}
|
|
|
}
|
|
|
- //拼接分组条件
|
|
|
- cri.getGroupBy().groupBy("game_name", "game_id", "game_classify");
|
|
|
+ if (needGroupBy) {
|
|
|
+ //拼接分组条件
|
|
|
+ cri.getGroupBy().groupBy("game_name", "game_id", "game_classify");
|
|
|
+ }
|
|
|
|
|
|
return cri;
|
|
|
}
|
|
@@ -1395,104 +1572,6 @@ public class GameDataServiceImpl implements IGameDataService {
|
|
|
return dayN;
|
|
|
}
|
|
|
|
|
|
- /**
|
|
|
- * 获取新用户充值人数方法
|
|
|
- *
|
|
|
- * @param dayNMap 参数Map
|
|
|
- * @param type 查询的字段类型:buy、nature、总
|
|
|
- * @return 新用户充值人数
|
|
|
- */
|
|
|
- private Long getNewUserAmountNum(Map<String, Object> dayNMap, String type) {
|
|
|
- //查询新用户充值人数
|
|
|
- Criteria cri = Cnd.cri();
|
|
|
- if (dayNMap.get("registerBeginDate") != null && dayNMap.get("registerEndDate") != null) {
|
|
|
- //拼接注册时间查询条件
|
|
|
- cri.where().andBetween("reg_time", dayNMap.get("registerBeginDate"), dayNMap.get("registerEndDate"));
|
|
|
- }
|
|
|
- if (dayNMap.get("gameId") != null) {
|
|
|
- //拼接游戏ID查询条件
|
|
|
- cri.where().andEquals("game_id", dayNMap.get("gameId"));
|
|
|
- }
|
|
|
- if (dayNMap.get("sourceSystem") != null) {
|
|
|
- //拼接SDK来源查询条件
|
|
|
- cri.where().andEquals("source_system", dayNMap.get("sourceSystem"));
|
|
|
- }
|
|
|
- if (dayNMap.get("rechargeBeginDate") != null && dayNMap.get("rechargeEndDate") != null) {
|
|
|
- //拼接充值时间查询条件
|
|
|
- cri.where().andBetween("order_time", dayNMap.get("rechargeBeginDate"), dayNMap.get("rechargeEndDate"));
|
|
|
- }
|
|
|
- //拼接渠道id条件 取出自然量、买量、总量值
|
|
|
- if (type.equals("buy")) {
|
|
|
- cri.where().andNotEquals("agent_id", 0);
|
|
|
- } else if (type.equals("nature")) {
|
|
|
- cri.where().andEquals("agent_id", 0);
|
|
|
- }
|
|
|
- Sql newUserAmountNumSql = Sqls.create("""
|
|
|
- SELECT
|
|
|
- COUNT(DISTINCT user_id) num
|
|
|
- FROM
|
|
|
- game_ads.ads_information
|
|
|
- """ + cri);
|
|
|
- newUserAmountNumSql.setCallback(Sqls.callback.longValue());
|
|
|
- //执行sql
|
|
|
- dao.execute(newUserAmountNumSql);
|
|
|
- //得到结果 新用户充值人数
|
|
|
- return newUserAmountNumSql.getLong();
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 获取新用户复充人数方法
|
|
|
- *
|
|
|
- * @param dayNMap 参数列表
|
|
|
- * @param type 查询字段类型: buy、nature、总量
|
|
|
- * @return 新用户复充人数
|
|
|
- */
|
|
|
- private Long getNewUserAmountAgainNum(Map<String, Object> dayNMap, String type) {
|
|
|
- //查询新用户充值人数
|
|
|
- Criteria cri = Cnd.cri();
|
|
|
- if (dayNMap.get("registerBeginDate") != null && dayNMap.get("registerEndDate") != null) {
|
|
|
- //拼接注册时间查询条件
|
|
|
- cri.where().andBetween("reg_time", dayNMap.get("registerBeginDate"), dayNMap.get("registerEndDate"));
|
|
|
- }
|
|
|
- if (dayNMap.get("gameId") != null) {
|
|
|
- //拼接游戏ID查询条件
|
|
|
- cri.where().andEquals("game_id", dayNMap.get("gameId"));
|
|
|
- }
|
|
|
- if (dayNMap.get("sourceSystem") != null) {
|
|
|
- //拼接SDK来源查询条件
|
|
|
- cri.where().andEquals("source_system", dayNMap.get("sourceSystem"));
|
|
|
- }
|
|
|
- if (dayNMap.get("rechargeBeginDate") != null && dayNMap.get("rechargeEndDate") != null) {
|
|
|
- //拼接充值时间查询条件
|
|
|
- cri.where().andBetween("order_time", dayNMap.get("rechargeBeginDate"), dayNMap.get("rechargeEndDate"));
|
|
|
- }
|
|
|
- //拼接渠道id条件 取出自然量、买量、总量值
|
|
|
- if (type.equals("buy")) {
|
|
|
- cri.where().andNotEquals("agent_id", 0);
|
|
|
- } else if (type.equals("nature")) {
|
|
|
- cri.where().andEquals("agent_id", 0);
|
|
|
- }
|
|
|
- Sql newUserAmountAgainNumSql = Sqls.create("""
|
|
|
- SELECT
|
|
|
- COUNT(a.num)
|
|
|
- FROM(
|
|
|
- SELECT
|
|
|
- COUNT(user_id) num
|
|
|
- FROM
|
|
|
- game_ads.ads_information
|
|
|
- """ + cri +
|
|
|
- """
|
|
|
- GROUP BY user_id
|
|
|
- HAVING COUNT(user_id) > 1
|
|
|
- ) a;
|
|
|
- """);
|
|
|
- newUserAmountAgainNumSql.setCallback(Sqls.callback.longValue());
|
|
|
- //执行sql
|
|
|
- dao.execute(newUserAmountAgainNumSql);
|
|
|
- //得到结果 新用户充值人数
|
|
|
- return newUserAmountAgainNumSql.getLong();
|
|
|
- }
|
|
|
-
|
|
|
/**
|
|
|
* 通过反射来获取Cn的值
|
|
|
*
|
|
@@ -1502,18 +1581,17 @@ public class GameDataServiceImpl implements IGameDataService {
|
|
|
*/
|
|
|
private Long getCnByNum(Object vo, int num) {
|
|
|
try {
|
|
|
-
|
|
|
- Field f = null;
|
|
|
- if (vo instanceof AdsGameDayAgain) {
|
|
|
- f = AdsGameDayAgain.class.getDeclaredField(String.format("c%s", num));
|
|
|
- } else if (vo instanceof AdsGameDayAgainBuy) {
|
|
|
- f = AdsGameDayAgainBuy.class.getDeclaredField(String.format("buyC%s", num));
|
|
|
- } else if (vo instanceof AdsGameDayAgainNature) {
|
|
|
- f = AdsGameDayAgainNature.class.getDeclaredField(String.format("natureC%s", num));
|
|
|
- }
|
|
|
- f.setAccessible(true);
|
|
|
- //返回对应的Cn值
|
|
|
- return (Long) f.get(vo);
|
|
|
+ Field f = null;
|
|
|
+ if (vo instanceof AdsGameDayAgain) {
|
|
|
+ f = AdsGameDayAgain.class.getDeclaredField(String.format("c%s", num));
|
|
|
+ } else if (vo instanceof AdsGameDayAgainBuy) {
|
|
|
+ f = AdsGameDayAgainBuy.class.getDeclaredField(String.format("buyC%s", num));
|
|
|
+ } else if (vo instanceof AdsGameDayAgainNature) {
|
|
|
+ f = AdsGameDayAgainNature.class.getDeclaredField(String.format("natureC%s", num));
|
|
|
+ }
|
|
|
+ f.setAccessible(true);
|
|
|
+ //返回对应的Cn值
|
|
|
+ return (Long) f.get(vo);
|
|
|
} catch (Exception e) {
|
|
|
throw new BaseException("get方法出错,映射出错");
|
|
|
}
|
|
@@ -1522,7 +1600,6 @@ public class GameDataServiceImpl implements IGameDataService {
|
|
|
/**
|
|
|
* 通过反射赋值每日趋势
|
|
|
*
|
|
|
- * @param vo
|
|
|
*/
|
|
|
private void formatDayN(GameDataDayVO vo) {
|
|
|
if (CollectionUtils.isEmpty(dayNFieldMapList)) {
|
|
@@ -1547,7 +1624,6 @@ public class GameDataServiceImpl implements IGameDataService {
|
|
|
/**
|
|
|
* 通过反射赋值每日总计趋势
|
|
|
*
|
|
|
- * @param vo
|
|
|
*/
|
|
|
private void formatDayNTotal(GameDataDayTotalVO vo) {
|
|
|
if (CollectionUtils.isEmpty(dayNTotalFieldMapList)) {
|
|
@@ -1586,7 +1662,6 @@ public class GameDataServiceImpl implements IGameDataService {
|
|
|
/**
|
|
|
* 通过反射赋值游戏首日复充数据
|
|
|
*
|
|
|
- * @param vo
|
|
|
*/
|
|
|
private void formatFirstNewUserAgain(GameDataFirstNewUserAgainVO vo, Long[] usersId) {
|
|
|
if (CollectionUtils.isEmpty(firstNewUserAgainFieldMapList)) {
|
|
@@ -1613,7 +1688,6 @@ public class GameDataServiceImpl implements IGameDataService {
|
|
|
/**
|
|
|
* 通过反射赋值游戏首日复充总计数据
|
|
|
*
|
|
|
- * @param vo
|
|
|
*/
|
|
|
private void formatFirstNewUserAgainTotal(GameDataFirstNewUserAgainTotalVO vo, Long[] usersIdTotal) {
|
|
|
if (CollectionUtils.isEmpty(firstNewUserAgainTotalFieldMapList)) {
|
|
@@ -2687,7 +2761,6 @@ public class GameDataServiceImpl implements IGameDataService {
|
|
|
IFNULL(sum(nature_reg_num), 0) nature_reg_num,
|
|
|
IFNULL(sum(reg_num), 0) reg_num,
|
|
|
IFNULL(sum(cost), 0) cost,
|
|
|
-
|
|
|
IFNULL(sum(buy_first_new_user_amount_count), 0) buy_first_new_user_amount_count,
|
|
|
IFNULL(sum(buy_first_new_user_amount_num), 0) buy_first_new_user_amount_num,
|
|
|
IFNULL(sum(buy_first_new_user_amount), 0) buy_first_new_user_amount,
|
|
@@ -2697,7 +2770,6 @@ public class GameDataServiceImpl implements IGameDataService {
|
|
|
IFNULL(sum(first_new_user_amount_count), 0) first_new_user_amount_count,
|
|
|
IFNULL(sum(first_new_user_amount_num), 0) first_new_user_amount_num,
|
|
|
IFNULL(sum(first_new_user_amount), 0) first_new_user_amount,
|
|
|
-
|
|
|
IFNULL(sum(buy_new_user_total_amount_count), 0) buy_new_user_total_amount_count,
|
|
|
IFNULL(sum(buy_new_user_total_amount_num), 0) buy_new_user_total_amount_num,
|
|
|
IFNULL(sum(buy_new_user_total_amount), 0) buy_new_user_total_amount,
|
|
@@ -2707,7 +2779,6 @@ public class GameDataServiceImpl implements IGameDataService {
|
|
|
IFNULL(sum(new_user_total_amount_count), 0) new_user_total_amount_count,
|
|
|
IFNULL(sum(new_user_total_amount_num), 0) new_user_total_amount_num,
|
|
|
IFNULL(sum(new_user_total_amount), 0) new_user_total_amount,
|
|
|
-
|
|
|
round(if(SUM(cost) > 0 , SUM(buy_first_new_user_amount) / SUM(cost) ,0), 4) buy_first_roi,
|
|
|
round(if(sum(buy_reg_num) > 0 ,sum(buy_first_new_user_amount_num) / sum(buy_reg_num), 0), 4) buy_first_amount_rate,
|
|
|
round(if(sum(buy_reg_num) > 0, sum(buy_new_user_total_amount_num) / sum(buy_reg_num), 0), 4) buy_today_amount_rate,
|
|
@@ -2717,96 +2788,71 @@ public class GameDataServiceImpl implements IGameDataService {
|
|
|
round(if(SUM(cost) > 0 , SUM(first_new_user_amount) / SUM(cost) ,0), 4) first_roi,
|
|
|
round(if(sum(reg_num) > 0 ,sum(first_new_user_amount_num) / sum(reg_num), 0), 4) first_amount_rate,
|
|
|
round(if(sum(reg_num) > 0, sum(new_user_total_amount_num) / sum(reg_num), 0), 4) today_amount_rate,
|
|
|
-
|
|
|
round(if(sum(buy_first_new_user_amount_count) > 0, sum(buy_first_new_user_amount) / sum(buy_first_new_user_amount_count), 0), 2) buy_first_avg_amount,
|
|
|
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) buy_today_avg_amount,
|
|
|
-
|
|
|
round(if(sum(nature_first_new_user_amount_count) > 0, sum(nature_first_new_user_amount) / sum(nature_first_new_user_amount_count), 0), 2) nature_first_avg_amount,
|
|
|
round(if(sum(nature_new_user_total_amount_count) > 0, sum(nature_new_user_total_amount) / sum(nature_new_user_total_amount_count), 0), 2) nature_today_avg_amount,
|
|
|
-
|
|
|
round(if(sum(first_new_user_amount_count) > 0, sum(first_new_user_amount) / sum(first_new_user_amount_count), 0), 2) first_avg_amount,
|
|
|
round(if(sum(new_user_total_amount_count) > 0, sum(new_user_total_amount) / sum(new_user_total_amount_count), 0), 2) today_avg_amount,
|
|
|
-
|
|
|
-
|
|
|
round(if(sum(buy_new_user_total_amount_num) > 0 , sum(buy_reg_order_user_again) / sum(buy_new_user_total_amount_num), 0), 4) buy_today_again_rate,
|
|
|
round(if(sum(nature_new_user_total_amount_num) > 0 , sum(nature_reg_order_user_again) / sum(nature_new_user_total_amount_num), 0), 4) nature_today_again_rate,
|
|
|
round(if(sum(new_user_total_amount_num) > 0 , sum(reg_order_user_again) / sum(new_user_total_amount_num), 0), 4) today_again_rate,
|
|
|
-
|
|
|
round(if(sum(buy_reg_num) > 0 , sum(buy_new_user_total_amount) / sum(buy_reg_num), 0), 2) buy_reg_user_arpu,
|
|
|
round(if(sum(buy_first_new_user_amount_num) > 0 , sum(buy_first_new_user_amount) / sum(buy_first_new_user_amount_num), 0), 2) buy_first_amount_arpu,
|
|
|
round(if(sum(buy_new_user_total_amount_num) > 0 , sum(buy_new_user_total_amount) / sum(buy_new_user_total_amount_num), 0), 2) buy_today_amount_arpu,
|
|
|
-
|
|
|
round(if(sum(nature_reg_num) > 0 , sum(nature_new_user_total_amount) / sum(nature_reg_num), 0), 2) nature_reg_user_arpu,
|
|
|
round(if(sum(nature_first_new_user_amount_num) > 0 , sum(nature_first_new_user_amount) / sum(nature_first_new_user_amount_num), 0), 2) nature_first_amount_arpu,
|
|
|
round(if(sum(nature_new_user_total_amount_num) > 0 , sum(nature_new_user_total_amount) / sum(nature_new_user_total_amount_num), 0), 2) nature_today_amount_arpu,
|
|
|
-
|
|
|
round(if(sum(reg_num) > 0 , sum(new_user_total_amount) / sum(reg_num), 0), 2) reg_user_arpu,
|
|
|
round(if(sum(first_new_user_amount_num) > 0 , sum(first_new_user_amount) / sum(first_new_user_amount_num), 0), 2) first_amount_arpu,
|
|
|
round(if(sum(new_user_total_amount_num) > 0 , sum(new_user_total_amount) / sum(new_user_total_amount_num), 0), 2) today_amount_arpu,
|
|
|
-
|
|
|
round(if(SUM(buy_reg_num) > 0, SUM(cost) / SUM(buy_reg_num), 0), 2) buy_reg_cost,
|
|
|
round(if(SUM(nature_reg_num) > 0, SUM(cost) / SUM(nature_reg_num), 0), 2) nature_reg_cost,
|
|
|
round(if(SUM(reg_num) > 0, SUM(cost) / SUM(reg_num), 0), 2) reg_cost,
|
|
|
-
|
|
|
round(if(SUM(cost) > 0 , SUM(buy_new_user_total_amount) / SUM(cost), 0), 4) buy_total_roi,
|
|
|
round(if(SUM(cost) > 0 , SUM(nature_new_user_total_amount) / SUM(cost), 0), 4) nature_total_roi,
|
|
|
round(if(SUM(cost) > 0 , SUM(new_user_total_amount) / SUM(cost), 0), 4) total_roi,
|
|
|
-
|
|
|
round(if(SUM(buy_first_new_user_amount_num) > 0, SUM(cost) / SUM(buy_first_new_user_amount_num), 0), 2) buy_first_new_user_recharge_cost,
|
|
|
round(if(SUM(nature_first_new_user_amount_num) > 0, SUM(cost) / SUM(nature_first_new_user_amount_num), 0), 2) nature_first_new_user_recharge_cost,
|
|
|
round(if(SUM(first_new_user_amount_num) > 0, SUM(cost) / SUM(first_new_user_amount_num), 0), 2) first_new_user_recharge_cost,
|
|
|
-
|
|
|
round(if(SUM(buy_new_user_total_amount_num) > 0, SUM(cost) / SUM(buy_new_user_total_amount_num), 0), 2) buy_total_recharge_cost,
|
|
|
round(if(SUM(nature_new_user_total_amount_num) > 0, SUM(cost) / SUM(nature_new_user_total_amount_num), 0), 2) nature_total_recharge_cost,
|
|
|
round(if(SUM(new_user_total_amount_num) > 0, SUM(cost) / SUM(new_user_total_amount_num), 0), 2) total_recharge_cost,
|
|
|
-
|
|
|
- SUM(buy_hundred_user_num) buy_hundred_user_num,
|
|
|
+ IFNULL(SUM(buy_hundred_user_num), 0) buy_hundred_user_num,
|
|
|
round(IF(SUM(buy_hundred_user_num) > 0, SUM(cost) / SUM(buy_hundred_user_num), 0), 2) buy_hundred_user_num_cost,
|
|
|
- SUM(buy_first_role_num) buy_first_role_num,
|
|
|
- SUM(buy_role_num) buy_role_num,
|
|
|
- SUM(buy_new_user_total_role_num) buy_new_user_total_role_num,
|
|
|
+ IFNULL(SUM(buy_first_role_num), 0) buy_first_role_num,
|
|
|
+ IFNULL(SUM(buy_new_user_total_role_num), 0) buy_new_user_total_role_num,
|
|
|
round(IF(SUM(buy_first_role_num) > 0, SUM(cost) / SUM(buy_first_role_num), 0), 2) buy_first_role_num_cost,
|
|
|
- round(IF(SUM(buy_role_num) > 0, SUM(cost) / SUM(buy_role_num), 0), 2) buy_role_num_cost,
|
|
|
round(IF(SUM(buy_new_user_total_role_num) >0, SUM(cost) / SUM(buy_new_user_total_role_num), 0), 2) buy_new_user_total_role_num_cost,
|
|
|
round(IF(SUM(buy_reg_num) >0, SUM(buy_first_role_num) / SUM(buy_reg_num), 0), 4) buy_first_role_num_rate,
|
|
|
- round(IF(SUM(buy_reg_num) >0, SUM(buy_role_num) / SUM(buy_reg_num), 0), 4) buy_role_num_rate,
|
|
|
round(IF(SUM(buy_reg_num) >0, SUM(buy_new_user_total_role_num) / SUM(buy_reg_num), 0), 4) buy_new_user_total_role_num_rate,
|
|
|
-
|
|
|
- SUM(nature_hundred_user_num) nature_hundred_user_num,
|
|
|
+ IFNULL(SUM(nature_hundred_user_num), 0) nature_hundred_user_num,
|
|
|
round(IF(SUM(nature_hundred_user_num) > 0, SUM(cost) / SUM(nature_hundred_user_num), 0), 2) nature_hundred_user_num_cost,
|
|
|
- SUM(nature_first_role_num) nature_first_role_num,
|
|
|
- SUM(nature_role_num) nature_role_num,
|
|
|
- SUM(nature_new_user_total_role_num) nature_new_user_total_role_num,
|
|
|
+ IFNULL(SUM(nature_first_role_num), 0) nature_first_role_num,
|
|
|
+ IFNULL(SUM(nature_new_user_total_role_num), 0) nature_new_user_total_role_num,
|
|
|
round(IF(SUM(nature_first_role_num) > 0, SUM(cost) / SUM(nature_first_role_num), 0), 2) nature_first_role_num_cost,
|
|
|
- round(IF(SUM(nature_role_num) > 0, SUM(cost) / SUM(nature_role_num), 0), 2) nature_role_num_cost,
|
|
|
round(IF(SUM(nature_new_user_total_role_num) >0, SUM(cost) / SUM(nature_new_user_total_role_num), 0), 2) nature_new_user_total_role_num_cost,
|
|
|
round(IF(SUM(nature_reg_num) >0, SUM(nature_first_role_num) / SUM(nature_reg_num), 0), 4) nature_first_role_num_rate,
|
|
|
- round(IF(SUM(nature_reg_num) >0, SUM(nature_role_num) / SUM(nature_reg_num), 0), 4) nature_role_num_rate,
|
|
|
round(IF(SUM(nature_reg_num) >0, SUM(nature_new_user_total_role_num) / SUM(nature_reg_num), 0), 4) nature_new_user_total_role_num_rate,
|
|
|
-
|
|
|
- SUM(hundred_user_num) hundred_user_num,
|
|
|
+ IFNULL(SUM(hundred_user_num), 0) hundred_user_num,
|
|
|
round(IF(SUM(hundred_user_num) > 0, SUM(cost) / SUM(hundred_user_num), 0), 2) hundred_user_num_cost,
|
|
|
- SUM(first_role_num) first_role_num,
|
|
|
- SUM(role_num) role_num,
|
|
|
- SUM(new_user_total_role_num) new_user_total_role_num,
|
|
|
+ IFNULL(SUM(first_role_num), 0) first_role_num,
|
|
|
+ IFNULL(SUM(new_user_total_role_num), 0) new_user_total_role_num,
|
|
|
round(IF(SUM(first_role_num) > 0, SUM(cost) / SUM(first_role_num), 0), 2) first_role_num_cost,
|
|
|
- round(IF(SUM(role_num) > 0, SUM(cost) / SUM(role_num), 0), 2) role_num_cost,
|
|
|
round(IF(SUM(new_user_total_role_num) >0, SUM(cost) / SUM(new_user_total_role_num), 0), 2) new_user_total_role_num_cost,
|
|
|
round(IF(SUM(reg_num) >0, SUM(first_role_num) / SUM(reg_num), 0), 4) first_role_num_rate,
|
|
|
- round(IF(SUM(reg_num) >0, SUM(role_num) / SUM(reg_num), 0), 4) role_num_rate,
|
|
|
round(IF(SUM(reg_num) >0, SUM(new_user_total_role_num) / SUM(reg_num), 0), 4) new_user_total_role_num_rate
|
|
|
-
|
|
|
FROM
|
|
|
game_ads.ads_game_day
|
|
|
""";
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * 和充值时间有关的sql
|
|
|
+ * 和充值时间有关的sql(游戏总数据总计账面相关数据)
|
|
|
*
|
|
|
- * @return
|
|
|
+ * @return String
|
|
|
*/
|
|
|
- private String gameDataTotalSqlRecharge() {
|
|
|
+ private String gameDataTotalSumAmountSql() {
|
|
|
return """
|
|
|
SELECT
|
|
|
IFNULL(sum(buy_amount_count),0) buy_amount_count,
|
|
@@ -2815,13 +2861,11 @@ public class GameDataServiceImpl implements IGameDataService {
|
|
|
IFNULL(sum(nature_amount),0) nature_amount,
|
|
|
IFNULL(sum(amount_count),0) amount_count,
|
|
|
IFNULL(sum(amount),0) amount,
|
|
|
-
|
|
|
round(if(sum(buy_amount_count) > 0, sum(buy_amount) / sum(buy_amount_count), 0), 2) buy_avg_amount,
|
|
|
round(if(sum(nature_amount_count) > 0, sum(nature_amount) / sum(nature_amount_count), 0), 2) nature_avg_amount,
|
|
|
round(if(sum(amount_count) > 0, sum(amount) / sum(amount_count), 0), 2) avg_amount
|
|
|
FROM
|
|
|
game_ads.ads_game_day
|
|
|
-
|
|
|
""";
|
|
|
}
|
|
|
|
|
@@ -3184,8 +3228,8 @@ public class GameDataServiceImpl implements IGameDataService {
|
|
|
/**
|
|
|
* 游戏首日复充
|
|
|
*
|
|
|
- * @param dto
|
|
|
- * @return
|
|
|
+ * @param dto GameDataFirstNewUserAgainDTO
|
|
|
+ * @return Page<GameDataFirstNewUserAgainVO>
|
|
|
*/
|
|
|
@Override
|
|
|
public Page<GameDataFirstNewUserAgainVO> getFirstNewUserAgain(GameDataFirstNewUserAgainDTO dto) {
|
|
@@ -3267,8 +3311,8 @@ public class GameDataServiceImpl implements IGameDataService {
|
|
|
/**
|
|
|
* 游戏首日复充总计
|
|
|
*
|
|
|
- * @param dto
|
|
|
- * @return
|
|
|
+ * @param dto GameDataFirstNewUserAgainTotalDTO
|
|
|
+ * @return GameDataFirstNewUserAgainTotalVO
|
|
|
*/
|
|
|
@Override
|
|
|
public GameDataFirstNewUserAgainTotalVO getFirstNewUserAgainTotal(GameDataFirstNewUserAgainTotalDTO dto) {
|
|
@@ -5857,4 +5901,5 @@ public class GameDataServiceImpl implements IGameDataService {
|
|
|
|
|
|
private Long h5BuyAmountNum;
|
|
|
}
|
|
|
+
|
|
|
}
|