|
@@ -258,7 +258,7 @@ public class GameDataServiceImpl implements IGameDataService {
|
|
} else {
|
|
} else {
|
|
cri.getOrderBy().orderBy(CaseFormat.LOWER_CAMEL.to(CaseFormat.LOWER_UNDERSCORE, dto.getSortFiled()), dto.getSortType());
|
|
cri.getOrderBy().orderBy(CaseFormat.LOWER_CAMEL.to(CaseFormat.LOWER_UNDERSCORE, dto.getSortFiled()), dto.getSortType());
|
|
}
|
|
}
|
|
- //编写sql语句 拼接查询条件
|
|
|
|
|
|
+ //编写sql语句 拼接查询条件1
|
|
Sql sql = Sqls.create(gameDataDayForSonSql(dto.getTableTypes()) + cri);
|
|
Sql sql = Sqls.create(gameDataDayForSonSql(dto.getTableTypes()) + cri);
|
|
//设置自定义回显对象
|
|
//设置自定义回显对象
|
|
sql.setCallback(Sqls.callback.entities());
|
|
sql.setCallback(Sqls.callback.entities());
|
|
@@ -626,7 +626,12 @@ public class GameDataServiceImpl implements IGameDataService {
|
|
@Override
|
|
@Override
|
|
public Page<GameDataTotalVO> getGameDataTotal(GameDataTotalDTO dto) {
|
|
public Page<GameDataTotalVO> getGameDataTotal(GameDataTotalDTO dto) {
|
|
com.github.sd4324530.jtuple.Tuple2<List<Long>, List<Long>> poerInfo = dataPowerComponent.getPowerInfo(dto.getSourceSystem());
|
|
com.github.sd4324530.jtuple.Tuple2<List<Long>, List<Long>> poerInfo = dataPowerComponent.getPowerInfo(dto.getSourceSystem());
|
|
- List<Long> gameIds = dto.getGameId() == null ? poerInfo.second : Collections.singletonList(dto.getGameId());
|
|
|
|
|
|
+ List<Long> gameIds = CollectionUtils.isEmpty(dto.getGameId()) ? poerInfo.second : dto.getGameId();
|
|
|
|
+
|
|
|
|
+ if (dto.getGameDimension() == null) {
|
|
|
|
+ //默认查询子游戏维度
|
|
|
|
+ dto.setGameDimension(1L);
|
|
|
|
+ }
|
|
//如果注册时间参数为空,默认设置查询当天数据
|
|
//如果注册时间参数为空,默认设置查询当天数据
|
|
if (dto.getRegisteredBeginDate() == null || dto.getRegisteredEndDate() == null) {
|
|
if (dto.getRegisteredBeginDate() == null || dto.getRegisteredEndDate() == null) {
|
|
dto.setRegisteredBeginDate(LocalDate.now());
|
|
dto.setRegisteredBeginDate(LocalDate.now());
|
|
@@ -662,7 +667,12 @@ public class GameDataServiceImpl implements IGameDataService {
|
|
}
|
|
}
|
|
orderByCri.getOrderBy().orderBy(CaseFormat.LOWER_CAMEL.to(CaseFormat.LOWER_UNDERSCORE, dto.getSortFiled()), dto.getSortType());
|
|
orderByCri.getOrderBy().orderBy(CaseFormat.LOWER_CAMEL.to(CaseFormat.LOWER_UNDERSCORE, dto.getSortFiled()), dto.getSortType());
|
|
//创建sql语句 执行sql
|
|
//创建sql语句 执行sql
|
|
- Sql sql = Sqls.create(getGameDataTotalSql(dto.getTableTypes(), criA, criB, criAmount, criNewUser, criRoleNum) + orderByCri);
|
|
|
|
|
|
+ Sql sql;
|
|
|
|
+ if (dto.getGameDimension() == 1L) {
|
|
|
|
+ sql = Sqls.create(getGameDataTotalSql(dto.getTableTypes(), criA, criB, criAmount, criNewUser, criRoleNum) + orderByCri);
|
|
|
|
+ } else {
|
|
|
|
+ sql = Sqls.create(getGameDataTotalSqlForParent(dto.getTableTypes(), criA, criB, criAmount, criNewUser, criRoleNum) + orderByCri);
|
|
|
|
+ }
|
|
//设置自定义回显对象
|
|
//设置自定义回显对象
|
|
sql.setCallback(Sqls.callback.entities());
|
|
sql.setCallback(Sqls.callback.entities());
|
|
sql.setEntity(dao.getEntity(GameDataTotalVO.class));
|
|
sql.setEntity(dao.getEntity(GameDataTotalVO.class));
|
|
@@ -673,16 +683,30 @@ public class GameDataServiceImpl implements IGameDataService {
|
|
//得到结果集list
|
|
//得到结果集list
|
|
List<GameDataTotalVO> list = sql.getList(GameDataTotalVO.class);
|
|
List<GameDataTotalVO> list = sql.getList(GameDataTotalVO.class);
|
|
//设置查询总数
|
|
//设置查询总数
|
|
- Sql sqlCount = Sqls.queryEntity("select count(*) from ads_game_day" + criA);
|
|
|
|
|
|
+ Sql sqlCount;
|
|
|
|
+ if (dto.getGameDimension() == 1L) {
|
|
|
|
+ sqlCount = Sqls.queryEntity("select count(*) from ads_game_day" + criA);
|
|
|
|
+ } else {
|
|
|
|
+ sqlCount = Sqls.queryEntity("select count(*) from game_ads_parent.ads_game_day_parent" + criA);
|
|
|
|
+ }
|
|
pager.setRecordCount((int) Daos.queryCount(dao, sqlCount));
|
|
pager.setRecordCount((int) Daos.queryCount(dao, sqlCount));
|
|
|
|
|
|
//不同类型的数据查询不同的dayN表
|
|
//不同类型的数据查询不同的dayN表
|
|
Map<String, DayN> dayNMap;
|
|
Map<String, DayN> dayNMap;
|
|
- switch (dto.getTableTypes()) {
|
|
|
|
- case "buy" -> dayNMap = tempDayNData(dto, "ads_dayn_game_buy");
|
|
|
|
- case "nature" -> dayNMap = tempDayNData(dto, "ads_dayn_game_nature");
|
|
|
|
- case "total" -> dayNMap = tempDayNData(dto, "ads_dayn_game");
|
|
|
|
- default -> dayNMap = tempDayNData(dto, "ads_dayn_game");
|
|
|
|
|
|
+ if (dto.getGameDimension() == 1L) {
|
|
|
|
+ switch (dto.getTableTypes()) {
|
|
|
|
+ case "buy" -> dayNMap = tempDayNData(dto, "ads_dayn_game_buy");
|
|
|
|
+ case "nature" -> dayNMap = tempDayNData(dto, "ads_dayn_game_nature");
|
|
|
|
+ case "total" -> dayNMap = tempDayNData(dto, "ads_dayn_game");
|
|
|
|
+ default -> dayNMap = tempDayNData(dto, "ads_dayn_game");
|
|
|
|
+ }
|
|
|
|
+ } else {
|
|
|
|
+ switch (dto.getTableTypes()) {
|
|
|
|
+ case "buy" -> dayNMap = tempDayNData(dto, "game_ads_parent.ads_dayn_game_buy_parent");
|
|
|
|
+ case "nature" -> dayNMap = tempDayNData(dto, "game_ads_parent.ads_dayn_game_nature_parent");
|
|
|
|
+ case "total" -> dayNMap = tempDayNData(dto, "game_ads_parent.ads_dayn_game_parent");
|
|
|
|
+ default -> dayNMap = tempDayNData(dto, "game_ads_parent.ads_dayn_game_parent");
|
|
|
|
+ }
|
|
}
|
|
}
|
|
|
|
|
|
//根据充值时间修改值
|
|
//根据充值时间修改值
|
|
@@ -748,7 +772,16 @@ public class GameDataServiceImpl implements IGameDataService {
|
|
*/
|
|
*/
|
|
public GameDataTotalTotalVO getGameDataTotalTotal(GameDataTotalTotalDTO dto) {
|
|
public GameDataTotalTotalVO getGameDataTotalTotal(GameDataTotalTotalDTO dto) {
|
|
com.github.sd4324530.jtuple.Tuple2<List<Long>, List<Long>> poerInfo = dataPowerComponent.getPowerInfo(dto.getSourceSystem());
|
|
com.github.sd4324530.jtuple.Tuple2<List<Long>, List<Long>> poerInfo = dataPowerComponent.getPowerInfo(dto.getSourceSystem());
|
|
- List<Long> gameIds = dto.getGameId() == null ? poerInfo.second : Collections.singletonList(dto.getGameId());
|
|
|
|
|
|
+ List<Long> gameIds = CollectionUtils.isEmpty(dto.getGameId()) ? poerInfo.second : dto.getGameId();
|
|
|
|
+
|
|
|
|
+ if (dto.getGameDimension() == null) {
|
|
|
|
+ //默认查询子游戏维度
|
|
|
|
+ dto.setGameDimension(1L);
|
|
|
|
+ }
|
|
|
|
+ String tableName = "game_ads.ads_game_day";
|
|
|
|
+ if (dto.getGameDimension() == 2L){
|
|
|
|
+ tableName = "game_ads_parent.ads_game_day_parent";
|
|
|
|
+ }
|
|
//如果注册时间参数为空,默认设置查询当天数据
|
|
//如果注册时间参数为空,默认设置查询当天数据
|
|
if (dto.getRegisteredBeginDate() == null || dto.getRegisteredEndDate() == null) {
|
|
if (dto.getRegisteredBeginDate() == null || dto.getRegisteredEndDate() == null) {
|
|
dto.setRegisteredBeginDate(LocalDate.now());
|
|
dto.setRegisteredBeginDate(LocalDate.now());
|
|
@@ -777,7 +810,7 @@ public class GameDataServiceImpl implements IGameDataService {
|
|
//创角人数查询条件
|
|
//创角人数查询条件
|
|
Criteria criRoleNum = myCriRole(gameIds, totalDTO);
|
|
Criteria criRoleNum = myCriRole(gameIds, totalDTO);
|
|
//创建sql语句 执行sql
|
|
//创建sql语句 执行sql
|
|
- Sql sql = Sqls.create(gameDataTotalTotalSql(dto.getTableTypes()) + criA);
|
|
|
|
|
|
+ Sql sql = Sqls.create(gameDataTotalTotalSql(dto.getTableTypes(), tableName) + criA);
|
|
//设置自定义回显对象
|
|
//设置自定义回显对象
|
|
sql.setCallback(Sqls.callback.entity());
|
|
sql.setCallback(Sqls.callback.entity());
|
|
sql.setEntity(dao.getEntity(GameDataTotalTotalVO.class));
|
|
sql.setEntity(dao.getEntity(GameDataTotalTotalVO.class));
|
|
@@ -786,7 +819,7 @@ public class GameDataServiceImpl implements IGameDataService {
|
|
//得到含有部分总数据总计结果的GameDataTotalTotalVO
|
|
//得到含有部分总数据总计结果的GameDataTotalTotalVO
|
|
GameDataTotalTotalVO vo = sql.getObject(GameDataTotalTotalVO.class);
|
|
GameDataTotalTotalVO vo = sql.getObject(GameDataTotalTotalVO.class);
|
|
//处理账面、新用户充值人数、新用户复充人数、创角人数相关数据
|
|
//处理账面、新用户充值人数、新用户复充人数、创角人数相关数据
|
|
- GameDataTotalTotalVO tempVO = getGameDataTotalSumAmountData(dto.getTableTypes(), criB, criAmount, criNewUser, criRoleNum);
|
|
|
|
|
|
+ GameDataTotalTotalVO tempVO = getGameDataTotalSumAmountData(dto, criB, criAmount, criNewUser, criRoleNum);
|
|
//将两个处理的对象合并
|
|
//将两个处理的对象合并
|
|
copyNullProperties(tempVO, vo);
|
|
copyNullProperties(tempVO, vo);
|
|
//得到dayN相关数据
|
|
//得到dayN相关数据
|
|
@@ -801,19 +834,24 @@ public class GameDataServiceImpl implements IGameDataService {
|
|
*
|
|
*
|
|
* @return PitcherDataTotalSumVO
|
|
* @return PitcherDataTotalSumVO
|
|
*/
|
|
*/
|
|
- private GameDataTotalTotalVO getGameDataTotalSumAmountData(String tableType, Criteria criB, Criteria criAmount, Criteria criNewUser, Criteria criRoleNum) {
|
|
|
|
|
|
+ private GameDataTotalTotalVO getGameDataTotalSumAmountData(GameDataTotalTotalDTO dto, Criteria criB, Criteria criAmount, Criteria criNewUser, Criteria criRoleNum) {
|
|
//不同类型的数据需要额外添加条件
|
|
//不同类型的数据需要额外添加条件
|
|
- if ("buy".equals(tableType)) {
|
|
|
|
|
|
+ if ("buy".equals(dto.getTableTypes())) {
|
|
criAmount.where().andNotEquals("agent_id", 0);
|
|
criAmount.where().andNotEquals("agent_id", 0);
|
|
criNewUser.where().andNotEquals("agent_id", 0);
|
|
criNewUser.where().andNotEquals("agent_id", 0);
|
|
criRoleNum.where().andNotEquals("user_agent_id", 0);
|
|
criRoleNum.where().andNotEquals("user_agent_id", 0);
|
|
- } else if ("nature".equals(tableType)) {
|
|
|
|
|
|
+ } else if ("nature".equals(dto.getTableTypes())) {
|
|
criAmount.where().andEquals("agent_id", 0);
|
|
criAmount.where().andEquals("agent_id", 0);
|
|
criNewUser.where().andEquals("agent_id", 0);
|
|
criNewUser.where().andEquals("agent_id", 0);
|
|
criRoleNum.where().andEquals("user_agent_id", 0);
|
|
criRoleNum.where().andEquals("user_agent_id", 0);
|
|
}
|
|
}
|
|
|
|
+ //默认查询的表-子游戏维度
|
|
|
|
+ String tableName = "game_ads.ads_game_day";
|
|
|
|
+ if (dto.getGameDimension() == 2L) {
|
|
|
|
+ tableName = "game_ads_parent.ads_game_day_parent";
|
|
|
|
+ }
|
|
//得到账面相关数据
|
|
//得到账面相关数据
|
|
- Sql sqlAmountData = Sqls.create(gameDataTotalSumAmountSql(tableType) + criB);
|
|
|
|
|
|
+ Sql sqlAmountData = Sqls.create(gameDataTotalSumAmountSql(dto.getTableTypes(), tableName) + criB);
|
|
//设置回传对象
|
|
//设置回传对象
|
|
sqlAmountData.setCallback(Sqls.callback.entity());
|
|
sqlAmountData.setCallback(Sqls.callback.entity());
|
|
sqlAmountData.setEntity(dao.getEntity(GameDataTotalTotalVO.class));
|
|
sqlAmountData.setEntity(dao.getEntity(GameDataTotalTotalVO.class));
|
|
@@ -906,19 +944,29 @@ public class GameDataServiceImpl implements IGameDataService {
|
|
dayNMap.put("rechargeBeginDate", dto.getRechargeBeginDate());
|
|
dayNMap.put("rechargeBeginDate", dto.getRechargeBeginDate());
|
|
dayNMap.put("rechargeEndDate", dto.getRechargeEndDate());
|
|
dayNMap.put("rechargeEndDate", dto.getRechargeEndDate());
|
|
dayNMap.put("gameId", dto.getGameId());
|
|
dayNMap.put("gameId", dto.getGameId());
|
|
|
|
+ dayNMap.put("gameDimension", dto.getGameDimension());
|
|
if (StringUtils.isNotBlank(dto.getSourceSystem())) {
|
|
if (StringUtils.isNotBlank(dto.getSourceSystem())) {
|
|
dayNMap.put("sourceSystem", dto.getSourceSystem());
|
|
dayNMap.put("sourceSystem", dto.getSourceSystem());
|
|
}
|
|
}
|
|
|
|
|
|
//得到dayN数据
|
|
//得到dayN数据
|
|
DayN dayN;
|
|
DayN dayN;
|
|
- switch (dto.getTableTypes()) {
|
|
|
|
- case "buy" -> dayN = getDayNByTableName(dayNMap, "ads_dayn_game_buy");
|
|
|
|
- case "nature" -> dayN = getDayNByTableName(dayNMap, "ads_dayn_game_nature");
|
|
|
|
- case "total" -> dayN = getDayNByTableName(dayNMap, "ads_dayn_game");
|
|
|
|
- default -> dayN = getDayNByTableName(dayNMap, "ads_dayn_game");
|
|
|
|
|
|
+ if (dto.getGameDimension() == 1L) {
|
|
|
|
+ switch (dto.getTableTypes()) {
|
|
|
|
+ case "buy" -> dayN = getDayNByTableName(dayNMap, "ads_dayn_game_buy");
|
|
|
|
+ case "nature" -> dayN = getDayNByTableName(dayNMap, "ads_dayn_game_nature");
|
|
|
|
+ case "total" -> dayN = getDayNByTableName(dayNMap, "ads_dayn_game");
|
|
|
|
+ default -> dayN = getDayNByTableName(dayNMap, "ads_dayn_game");
|
|
|
|
+ }
|
|
|
|
+ } else {
|
|
|
|
+ //父游戏维度
|
|
|
|
+ switch (dto.getTableTypes()) {
|
|
|
|
+ case "buy" -> dayN = getDayNByTableName(dayNMap, "game_ads_parent.ads_dayn_game_buy_parent");
|
|
|
|
+ case "nature" -> dayN = getDayNByTableName(dayNMap, "game_ads_parent.ads_dayn_game_nature_parent");
|
|
|
|
+ case "total" -> dayN = getDayNByTableName(dayNMap, "game_ads_parent.ads_dayn_game_parent");
|
|
|
|
+ default -> dayN = getDayNByTableName(dayNMap, "game_ads_parent.ads_dayn_game_parent");
|
|
|
|
+ }
|
|
}
|
|
}
|
|
-
|
|
|
|
//设置总量数据
|
|
//设置总量数据
|
|
//新用户充值次数、金额
|
|
//新用户充值次数、金额
|
|
vo.setNewUserAmount(dayN == null ? BigDecimal.ZERO : dayN.getRechargeMoney());
|
|
vo.setNewUserAmount(dayN == null ? BigDecimal.ZERO : dayN.getRechargeMoney());
|
|
@@ -968,7 +1016,7 @@ public class GameDataServiceImpl implements IGameDataService {
|
|
@Override
|
|
@Override
|
|
public Page<GameDataWaterVO> getGameDataWater(GameDataWaterDTO dto) {
|
|
public Page<GameDataWaterVO> getGameDataWater(GameDataWaterDTO dto) {
|
|
com.github.sd4324530.jtuple.Tuple2<List<Long>, List<Long>> poerInfo = dataPowerComponent.getPowerInfo();
|
|
com.github.sd4324530.jtuple.Tuple2<List<Long>, List<Long>> poerInfo = dataPowerComponent.getPowerInfo();
|
|
- List<Long> userGameIds = dto.getGameId() == null ? poerInfo.second : Collections.singletonList(dto.getGameId());
|
|
|
|
|
|
+ List<Long> userGameIds = CollectionUtils.isEmpty(dto.getGameId()) ? poerInfo.second : dto.getGameId();
|
|
|
|
|
|
if (dto.getGameDimension() == null) {
|
|
if (dto.getGameDimension() == null) {
|
|
//默认查询子游戏维度
|
|
//默认查询子游戏维度
|
|
@@ -1040,7 +1088,12 @@ public class GameDataServiceImpl implements IGameDataService {
|
|
SimpleCriteria templateCri = Cnd.cri();
|
|
SimpleCriteria templateCri = Cnd.cri();
|
|
templateCri.where().and("dt", "=", dto.getRechargeDate());
|
|
templateCri.where().and("dt", "=", dto.getRechargeDate());
|
|
templateCri.where().andInList(gameColumn, gameIds);
|
|
templateCri.where().andInList(gameColumn, gameIds);
|
|
- Sql templateSql = Sqls.queryEntity(waterTemplateSql() + "$condition");
|
|
|
|
|
|
+ Sql templateSql;
|
|
|
|
+ if (dto.getGameDimension() == 1L) {
|
|
|
|
+ templateSql = Sqls.queryEntity(waterTemplateSql() + "$condition");
|
|
|
|
+ } else {
|
|
|
|
+ templateSql = Sqls.queryEntity(waterTemplateSqlForParent() + "$condition");
|
|
|
|
+ }
|
|
Entity<AdsEverydayWater> everydayWaterEntity = dao.getEntity(AdsEverydayWater.class);
|
|
Entity<AdsEverydayWater> everydayWaterEntity = dao.getEntity(AdsEverydayWater.class);
|
|
templateSql.setEntity(everydayWaterEntity).setCondition(templateCri);
|
|
templateSql.setEntity(everydayWaterEntity).setCondition(templateCri);
|
|
dao.execute(templateSql);
|
|
dao.execute(templateSql);
|
|
@@ -1249,23 +1302,28 @@ public class GameDataServiceImpl implements IGameDataService {
|
|
* @return Map
|
|
* @return Map
|
|
*/
|
|
*/
|
|
private Map<String, DayN> tempDayNData(GameDataTotalDTO dto, String tableName) {
|
|
private Map<String, DayN> tempDayNData(GameDataTotalDTO dto, String tableName) {
|
|
-
|
|
|
|
|
|
+ String gameColumn = "game_id";
|
|
|
|
+ if (dto.getGameDimension() == 2L){
|
|
|
|
+ gameColumn = "parent_game_id";
|
|
|
|
+ }
|
|
//创建查询条件
|
|
//创建查询条件
|
|
Criteria cri = Cnd.cri();
|
|
Criteria cri = Cnd.cri();
|
|
if (dto.getRegisteredBeginDate() != null && dto.getRegisteredEndDate() != null) {
|
|
if (dto.getRegisteredBeginDate() != null && dto.getRegisteredEndDate() != null) {
|
|
//拼接注册时间查询条件
|
|
//拼接注册时间查询条件
|
|
cri.where().andBetween("dt", dto.getRegisteredBeginDate(), dto.getRegisteredEndDate());
|
|
cri.where().andBetween("dt", dto.getRegisteredBeginDate(), dto.getRegisteredEndDate());
|
|
}
|
|
}
|
|
- if (dto.getGameId() != null) {
|
|
|
|
|
|
+ if (CollectionUtils.isNotEmpty(dto.getGameId())) {
|
|
//拼接游戏ID查询条件
|
|
//拼接游戏ID查询条件
|
|
- cri.where().andEquals("game_id", dto.getGameId());
|
|
|
|
|
|
+ cri.where().andInList(gameColumn, dto.getGameId());
|
|
}
|
|
}
|
|
if (StringUtils.isNotBlank(dto.getSourceSystem())) {
|
|
if (StringUtils.isNotBlank(dto.getSourceSystem())) {
|
|
//拼接SDK来源查询条件
|
|
//拼接SDK来源查询条件
|
|
cri.where().andEquals("source_system", dto.getSourceSystem());
|
|
cri.where().andEquals("source_system", dto.getSourceSystem());
|
|
}
|
|
}
|
|
|
|
|
|
- Sql dayNSql = Sqls.create("""
|
|
|
|
|
|
+ Sql dayNSql;
|
|
|
|
+ if (dto.getGameDimension() == 1L) {
|
|
|
|
+ dayNSql = Sqls.create("""
|
|
SELECT
|
|
SELECT
|
|
dt,
|
|
dt,
|
|
game_id,
|
|
game_id,
|
|
@@ -1274,7 +1332,17 @@ public class GameDataServiceImpl implements IGameDataService {
|
|
FROM
|
|
FROM
|
|
$tableName
|
|
$tableName
|
|
""" + cri);
|
|
""" + cri);
|
|
-
|
|
|
|
|
|
+ } else {
|
|
|
|
+ dayNSql = Sqls.create("""
|
|
|
|
+ SELECT
|
|
|
|
+ dt,
|
|
|
|
+ parent_game_id as game_id,
|
|
|
|
+ source_system,
|
|
|
|
+ dayN as day_n
|
|
|
|
+ FROM
|
|
|
|
+ $tableName
|
|
|
|
+ """ + cri);
|
|
|
|
+ }
|
|
//给定查询的表名
|
|
//给定查询的表名
|
|
dayNSql.vars().set("tableName", tableName);
|
|
dayNSql.vars().set("tableName", tableName);
|
|
//设置回传
|
|
//设置回传
|
|
@@ -1364,31 +1432,40 @@ public class GameDataServiceImpl implements IGameDataService {
|
|
* @return 查询条件
|
|
* @return 查询条件
|
|
*/
|
|
*/
|
|
private Criteria myCri(List<Long> gameIds, GameDataTotalDTO dto, String type, Boolean needGroupBy) {
|
|
private Criteria myCri(List<Long> gameIds, GameDataTotalDTO dto, String type, Boolean needGroupBy) {
|
|
|
|
+ String gameColumn = "game_id";
|
|
|
|
+ String gameNameColumn = "game_name";
|
|
|
|
+ String classifyColumn = "game_classify";
|
|
|
|
+ if (dto.getGameDimension() == 2L) {
|
|
|
|
+ gameColumn = "parent_game_id";
|
|
|
|
+ gameNameColumn = "parent_game_name";
|
|
|
|
+ classifyColumn = "parent_game_name_classify";
|
|
|
|
+ }
|
|
|
|
+
|
|
//根据传入的dto拼接查询参数
|
|
//根据传入的dto拼接查询参数
|
|
Criteria cri = Cnd.cri();
|
|
Criteria cri = Cnd.cri();
|
|
if (StringUtils.isNotBlank(dto.getGameName())) {
|
|
if (StringUtils.isNotBlank(dto.getGameName())) {
|
|
//拼接游戏名称查询条件
|
|
//拼接游戏名称查询条件
|
|
- cri.where().andEquals("game_name", dto.getGameName());
|
|
|
|
|
|
+ cri.where().andEquals(gameNameColumn, dto.getGameName());
|
|
}
|
|
}
|
|
- if (gameIds != null) {
|
|
|
|
|
|
+ if (CollectionUtils.isNotEmpty(gameIds)) {
|
|
//拼接游戏id查询条件
|
|
//拼接游戏id查询条件
|
|
- cri.where().andInList("game_id", gameIds);
|
|
|
|
|
|
+ cri.where().andInList(gameColumn, gameIds);
|
|
}
|
|
}
|
|
if (dto.getGameClassify() != null) {
|
|
if (dto.getGameClassify() != null) {
|
|
//拼接游戏类型查询条件
|
|
//拼接游戏类型查询条件
|
|
- cri.where().andEquals("game_classify", dto.getGameClassify());
|
|
|
|
|
|
+ cri.where().andEquals(classifyColumn, dto.getGameClassify());
|
|
}
|
|
}
|
|
if (StringUtils.isNotBlank(dto.getSourceSystem())) {
|
|
if (StringUtils.isNotBlank(dto.getSourceSystem())) {
|
|
//拼接SDK来源
|
|
//拼接SDK来源
|
|
cri.where().andEquals("source_system", dto.getSourceSystem());
|
|
cri.where().andEquals("source_system", dto.getSourceSystem());
|
|
}
|
|
}
|
|
//根据type拼接不同的时间查询条件
|
|
//根据type拼接不同的时间查询条件
|
|
- if (type.equals("criA")) {
|
|
|
|
|
|
+ if ("criA".equals(type)) {
|
|
if (dto.getRegisteredBeginDate() != null && dto.getRegisteredEndDate() != null) {
|
|
if (dto.getRegisteredBeginDate() != null && dto.getRegisteredEndDate() != null) {
|
|
//拼接注册日期查询条件
|
|
//拼接注册日期查询条件
|
|
cri.where().andBetween("dt", dto.getRegisteredBeginDate(), dto.getRegisteredEndDate());
|
|
cri.where().andBetween("dt", dto.getRegisteredBeginDate(), dto.getRegisteredEndDate());
|
|
}
|
|
}
|
|
- } else if (type.equals("criB")) {
|
|
|
|
|
|
+ } else if ("criB".equals(type)) {
|
|
if (dto.getRechargeBeginDate() != null && dto.getRechargeEndDate() != null) {
|
|
if (dto.getRechargeBeginDate() != null && dto.getRechargeEndDate() != null) {
|
|
//拼接充值日期查询条件
|
|
//拼接充值日期查询条件
|
|
cri.where().andBetween("dt", dto.getRechargeBeginDate(), dto.getRechargeEndDate());
|
|
cri.where().andBetween("dt", dto.getRechargeBeginDate(), dto.getRechargeEndDate());
|
|
@@ -1396,7 +1473,7 @@ public class GameDataServiceImpl implements IGameDataService {
|
|
}
|
|
}
|
|
if (needGroupBy) {
|
|
if (needGroupBy) {
|
|
//拼接分组条件
|
|
//拼接分组条件
|
|
- cri.getGroupBy().groupBy("game_id", "game_classify", "source_system");
|
|
|
|
|
|
+ cri.getGroupBy().groupBy(gameColumn, classifyColumn, "source_system");
|
|
}
|
|
}
|
|
|
|
|
|
return cri;
|
|
return cri;
|
|
@@ -1410,15 +1487,22 @@ public class GameDataServiceImpl implements IGameDataService {
|
|
* @return 查询条件
|
|
* @return 查询条件
|
|
*/
|
|
*/
|
|
private Criteria myCriRecharge(List<Long> gameIds, GameDataTotalDTO dto, Boolean needRegTime) {
|
|
private Criteria myCriRecharge(List<Long> gameIds, GameDataTotalDTO dto, Boolean needRegTime) {
|
|
|
|
+ String gameColumn = "game_id";
|
|
|
|
+ String classifyColumn = "classify";
|
|
|
|
+ if (dto.getGameDimension() == 2L) {
|
|
|
|
+ gameColumn = "parent_game_id";
|
|
|
|
+ classifyColumn = "parent_game_classify";
|
|
|
|
+ }
|
|
|
|
+
|
|
//根据传入的dto拼接查询参数
|
|
//根据传入的dto拼接查询参数
|
|
Criteria cri = Cnd.cri();
|
|
Criteria cri = Cnd.cri();
|
|
- if (gameIds != null) {
|
|
|
|
|
|
+ if (CollectionUtils.isNotEmpty(gameIds)) {
|
|
//拼接游戏id查询条件
|
|
//拼接游戏id查询条件
|
|
- cri.where().andInList("game_id", gameIds);
|
|
|
|
|
|
+ cri.where().andInList(gameColumn, gameIds);
|
|
}
|
|
}
|
|
if (dto.getGameClassify() != null) {
|
|
if (dto.getGameClassify() != null) {
|
|
//拼接游戏类型查询条件
|
|
//拼接游戏类型查询条件
|
|
- cri.where().andEquals("classify", dto.getGameClassify());
|
|
|
|
|
|
+ cri.where().andEquals(classifyColumn, dto.getGameClassify());
|
|
}
|
|
}
|
|
if (StringUtils.isNotBlank(dto.getSourceSystem())) {
|
|
if (StringUtils.isNotBlank(dto.getSourceSystem())) {
|
|
//拼接SDK来源
|
|
//拼接SDK来源
|
|
@@ -1444,11 +1528,15 @@ public class GameDataServiceImpl implements IGameDataService {
|
|
* @return 查询条件
|
|
* @return 查询条件
|
|
*/
|
|
*/
|
|
private Criteria myCriRole(List<Long> gameIds, GameDataTotalDTO dto) {
|
|
private Criteria myCriRole(List<Long> gameIds, GameDataTotalDTO dto) {
|
|
|
|
+ String gameColumn = "user_game_id";
|
|
|
|
+ if (dto.getGameDimension() == 2L) {
|
|
|
|
+ gameColumn = "parent_game_id";
|
|
|
|
+ }
|
|
//根据传入的dto拼接查询参数
|
|
//根据传入的dto拼接查询参数
|
|
Criteria cri = Cnd.cri();
|
|
Criteria cri = Cnd.cri();
|
|
- if (gameIds != null) {
|
|
|
|
|
|
+ if (CollectionUtils.isNotEmpty(gameIds)) {
|
|
//拼接游戏id查询条件
|
|
//拼接游戏id查询条件
|
|
- cri.where().andInList("user_game_id", gameIds);
|
|
|
|
|
|
+ cri.where().andInList(gameColumn, gameIds);
|
|
}
|
|
}
|
|
if (StringUtils.isNotBlank(dto.getSourceSystem())) {
|
|
if (StringUtils.isNotBlank(dto.getSourceSystem())) {
|
|
//拼接SDK来源
|
|
//拼接SDK来源
|
|
@@ -1511,6 +1599,8 @@ public class GameDataServiceImpl implements IGameDataService {
|
|
* @return DayN数据
|
|
* @return DayN数据
|
|
*/
|
|
*/
|
|
private DayN getDayNByTableName(Map<String, Object> dayNMap, String tableName) {
|
|
private DayN getDayNByTableName(Map<String, Object> dayNMap, String tableName) {
|
|
|
|
+ //查询的游戏维度
|
|
|
|
+ Long gameDimension = (Long) dayNMap.get("gameDimension");
|
|
|
|
|
|
//创建查询条件
|
|
//创建查询条件
|
|
Criteria cri = Cnd.cri();
|
|
Criteria cri = Cnd.cri();
|
|
@@ -1518,9 +1608,14 @@ public class GameDataServiceImpl implements IGameDataService {
|
|
//拼接注册时间查询条件
|
|
//拼接注册时间查询条件
|
|
cri.where().andBetween("dt", dayNMap.get("registerBeginDate"), dayNMap.get("registerEndDate"));
|
|
cri.where().andBetween("dt", dayNMap.get("registerBeginDate"), dayNMap.get("registerEndDate"));
|
|
}
|
|
}
|
|
- if (dayNMap.get("gameId") != null) {
|
|
|
|
- //拼接游戏ID查询条件
|
|
|
|
- cri.where().andEquals("game_id", dayNMap.get("gameId"));
|
|
|
|
|
|
+ if (CollectionUtils.isNotEmpty((List<?>)dayNMap.get("gameId"))) {
|
|
|
|
+ if (gameDimension == 1L) {
|
|
|
|
+ // 子游戏维度
|
|
|
|
+ cri.where().andInList("game_id", (List<Long>) dayNMap.get("gameId"));
|
|
|
|
+ } else {
|
|
|
|
+ // 父游戏维度
|
|
|
|
+ cri.where().andInList("parent_game_id", (List<Long>) dayNMap.get("gameId"));
|
|
|
|
+ }
|
|
}
|
|
}
|
|
if (dayNMap.get("sourceSystem") != null) {
|
|
if (dayNMap.get("sourceSystem") != null) {
|
|
//拼接SDK来源查询条件
|
|
//拼接SDK来源查询条件
|
|
@@ -3760,13 +3855,403 @@ public class GameDataServiceImpl implements IGameDataService {
|
|
""";
|
|
""";
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ /**
|
|
|
|
+ * 游戏总数据SQL-父游戏维度
|
|
|
|
+ *
|
|
|
|
+ * @param tableType 查询类型
|
|
|
|
+ * @param criA 主表查询条件
|
|
|
|
+ * @param criB 账面相关查询条件
|
|
|
|
+ * @param criAmount 账面充值人数查询条件
|
|
|
|
+ * @param criNewUser 新用户相关查询条件
|
|
|
|
+ * @param criRoleNum 创角人数相关查询条件
|
|
|
|
+ * @return String
|
|
|
|
+ */
|
|
|
|
+ private String getGameDataTotalSqlForParent(String tableType, Criteria criA, Criteria criB, Criteria criAmount, Criteria criNewUser, Criteria criRoleNum) {
|
|
|
|
+ if ("buy".equals(tableType)) {
|
|
|
|
+ return """
|
|
|
|
+ SELECT
|
|
|
|
+ a.*,
|
|
|
|
+ IFNULL(amount_count, 0) amount_count,
|
|
|
|
+ IFNULL(amount, 0) amount,
|
|
|
|
+ IFNULL(avg_amount, 0) avg_amount,
|
|
|
|
+ IFNULL(new_user_amount_num, 0) new_user_amount_num,
|
|
|
|
+ IFNULL(new_user_again_num, 0) new_user_again_num,
|
|
|
|
+ IFNULL(amount_num, 0) amount_num,
|
|
|
|
+ IFNULL(role_num, 0) role_num
|
|
|
|
+ FROM(
|
|
|
|
+ SELECT
|
|
|
|
+ source_system,
|
|
|
|
+ parent_game_id as game_id,
|
|
|
|
+ MAX(parent_game_name) as game_name,
|
|
|
|
+ parent_game_name_classify as game_classify,
|
|
|
|
+ sum(buy_reg_num) reg_num,
|
|
|
|
+ sum(cost) cost,
|
|
|
|
+ sum(buy_first_new_user_amount_count) first_new_user_amount_count,
|
|
|
|
+ sum(buy_first_new_user_amount_num) first_new_user_amount_num,
|
|
|
|
+ sum(buy_first_new_user_amount) first_new_user_amount,
|
|
|
|
+ sum(buy_new_user_total_amount_count) new_user_total_amount_count,
|
|
|
|
+ sum(buy_new_user_total_amount_num) new_user_total_amount_num,
|
|
|
|
+ sum(buy_new_user_total_amount) new_user_total_amount,
|
|
|
|
+ round(if(SUM(cost) > 0 , SUM(buy_first_new_user_amount) / SUM(cost) , 0), 4) first_roi,
|
|
|
|
+ round(if(sum(buy_reg_num) > 0 , sum(buy_first_new_user_amount_num) / sum(buy_reg_num), 0), 4) first_amount_rate,
|
|
|
|
+ round(if(sum(buy_reg_num) > 0, sum(buy_new_user_total_amount_num) / sum(buy_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) 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) 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) today_again_rate,
|
|
|
|
+ round(if(sum(buy_reg_num) > 0 , sum(buy_new_user_total_amount) / sum(buy_reg_num), 0), 2) 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) 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) today_amount_arpu,
|
|
|
|
+ round(if(SUM(buy_reg_num) > 0, SUM(cost) / SUM(buy_reg_num), 0), 2) reg_cost,
|
|
|
|
+ round(if(SUM(cost) > 0 , SUM(buy_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) 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) total_recharge_cost,
|
|
|
|
+ IFNULL(SUM(buy_hundred_user_num), 0) hundred_user_num,
|
|
|
|
+ round(IF(SUM(buy_hundred_user_num) > 0, SUM(cost) / SUM(buy_hundred_user_num), 0), 2) hundred_user_num_cost,
|
|
|
|
+ IFNULL(SUM(buy_first_role_num), 0) first_role_num,
|
|
|
|
+ IFNULL(SUM(buy_new_user_total_role_num), 0) new_user_total_role_num,
|
|
|
|
+ round(IF(SUM(buy_first_role_num) > 0, SUM(cost) / SUM(buy_first_role_num), 0), 2) first_role_num_cost,
|
|
|
|
+ round(IF(SUM(buy_new_user_total_role_num) >0, SUM(cost) / SUM(buy_new_user_total_role_num), 0), 2) new_user_total_role_num_cost,
|
|
|
|
+ round(IF(SUM(buy_reg_num) >0, SUM(buy_first_role_num) / SUM(buy_reg_num), 0), 4) first_role_num_rate,
|
|
|
|
+ round(IF(SUM(buy_reg_num) >0, SUM(buy_new_user_total_role_num) / SUM(buy_reg_num), 0), 4) new_user_total_role_num_rate
|
|
|
|
+ FROM
|
|
|
|
+ game_ads_parent.ads_game_day_parent
|
|
|
|
+ """ + criA +
|
|
|
|
+ """
|
|
|
|
+ ) a
|
|
|
|
+ LEFT JOIN (
|
|
|
|
+ SELECT
|
|
|
|
+ source_system as b_source_system,
|
|
|
|
+ parent_game_id as b_game_id,
|
|
|
|
+ MAX(parent_game_name) as b_game_name,
|
|
|
|
+ IFNULL(sum(buy_amount_count), 0) amount_count,
|
|
|
|
+ IFNULL(sum(buy_amount), 0) amount,
|
|
|
|
+ round(if(sum(buy_amount_count) > 0, sum(buy_amount) / sum(buy_amount_count), 0), 2) avg_amount
|
|
|
|
+ FROM
|
|
|
|
+ game_ads_parent.ads_game_day_parent
|
|
|
|
+ """ + criB +
|
|
|
|
+ """
|
|
|
|
+ ) b
|
|
|
|
+ ON a.game_id = b.b_game_id and a.game_name = b.b_game_name and a.source_system = b.b_source_system
|
|
|
|
+ LEFT JOIN(
|
|
|
|
+ SELECT
|
|
|
|
+ source_system as d_source_system,
|
|
|
|
+ parent_game_id as d_game_id,
|
|
|
|
+ IFNULL(COUNT(DISTINCT user_id), 0) amount_num
|
|
|
|
+ FROM
|
|
|
|
+ game_ads.ads_information
|
|
|
|
+ """ + criAmount +
|
|
|
|
+ """
|
|
|
|
+ AND NOT agent_id = 0
|
|
|
|
+ GROUP BY parent_game_id, source_system) d
|
|
|
|
+ ON a.game_id = d.d_game_id and a.source_system = d.d_source_system
|
|
|
|
+ LEFT JOIN (
|
|
|
|
+ SELECT
|
|
|
|
+ source_system as f_source_system,
|
|
|
|
+ parent_game_id as f_game_id,
|
|
|
|
+ COUNT(DISTINCT user_id) new_user_amount_num
|
|
|
|
+ FROM
|
|
|
|
+ game_ads.ads_information
|
|
|
|
+ """ + criNewUser +
|
|
|
|
+ """
|
|
|
|
+ AND NOT agent_id = 0
|
|
|
|
+ GROUP BY parent_game_id, source_system) f
|
|
|
|
+ ON a.game_id = f.f_game_id and a.source_system = f.f_source_system
|
|
|
|
+ LEFT JOIN(
|
|
|
|
+ SELECT
|
|
|
|
+ source_system as g_source_system,
|
|
|
|
+ parent_game_id as g_game_id,
|
|
|
|
+ COUNT(tempA.num) as new_user_again_num
|
|
|
|
+ FROM (
|
|
|
|
+ SELECT
|
|
|
|
+ source_system,
|
|
|
|
+ parent_game_id,
|
|
|
|
+ COUNT(user_id) num
|
|
|
|
+ FROM
|
|
|
|
+ game_ads.ads_information
|
|
|
|
+ """ + criNewUser +
|
|
|
|
+ """
|
|
|
|
+ AND NOT agent_id = 0
|
|
|
|
+ GROUP BY
|
|
|
|
+ user_id,
|
|
|
|
+ parent_game_id,
|
|
|
|
+ source_system
|
|
|
|
+ HAVING
|
|
|
|
+ COUNT(user_id) > 1 ) tempA
|
|
|
|
+ GROUP BY tempA.parent_game_id, tempA.source_system) g
|
|
|
|
+ ON a.game_id = g.g_game_id and a.source_system = g.g_source_system
|
|
|
|
+ LEFT JOIN (
|
|
|
|
+ SELECT
|
|
|
|
+ source_system as n_source_system,
|
|
|
|
+ parent_game_id ,
|
|
|
|
+ COUNT(DISTINCT role_user_id) as role_num
|
|
|
|
+ FROM
|
|
|
|
+ dw_create_role_detail
|
|
|
|
+ """ + criRoleNum +
|
|
|
|
+ """
|
|
|
|
+ AND NOT user_agent_id = 0
|
|
|
|
+ GROUP BY parent_game_id,source_system
|
|
|
|
+ ) n
|
|
|
|
+ ON a.game_id = n.parent_game_id and a.source_system = n.n_source_system
|
|
|
|
+ """;
|
|
|
|
+ } else if ("nature".equals(tableType)) {
|
|
|
|
+ return """
|
|
|
|
+ SELECT
|
|
|
|
+ a.*,
|
|
|
|
+ IFNULL(amount_count, 0) amount_count,
|
|
|
|
+ IFNULL(amount, 0) amount,
|
|
|
|
+ IFNULL(avg_amount, 0) avg_amount,
|
|
|
|
+ IFNULL(new_user_amount_num, 0) new_user_amount_num,
|
|
|
|
+ IFNULL(new_user_again_num, 0) new_user_again_num,
|
|
|
|
+ IFNULL(amount_num, 0) amount_num,
|
|
|
|
+ IFNULL(role_num, 0) role_num
|
|
|
|
+ FROM(
|
|
|
|
+ SELECT
|
|
|
|
+ source_system,
|
|
|
|
+ parent_game_id as game_id,
|
|
|
|
+ MAX(parent_game_name) as game_name,
|
|
|
|
+ parent_game_name_classify as game_classify,
|
|
|
|
+ sum(nature_reg_num) reg_num,
|
|
|
|
+ sum(cost) cost,
|
|
|
|
+ sum(nature_first_new_user_amount_count) first_new_user_amount_count,
|
|
|
|
+ sum(nature_first_new_user_amount_num) first_new_user_amount_num,
|
|
|
|
+ sum(nature_first_new_user_amount) first_new_user_amount,
|
|
|
|
+ sum(nature_new_user_total_amount_count) new_user_total_amount_count,
|
|
|
|
+ sum(nature_new_user_total_amount_num) new_user_total_amount_num,
|
|
|
|
+ sum(nature_new_user_total_amount) new_user_total_amount,
|
|
|
|
+ round(if(SUM(cost) > 0 , SUM(nature_first_new_user_amount) / SUM(cost) , 0), 4) first_roi,
|
|
|
|
+ round(if(sum(nature_reg_num) > 0 , sum(nature_first_new_user_amount_num) / sum(nature_reg_num), 0), 4) first_amount_rate,
|
|
|
|
+ round(if(sum(nature_reg_num) > 0, sum(nature_new_user_total_amount_num) / sum(nature_reg_num), 0), 4) today_amount_rate,
|
|
|
|
+ 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) 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) today_avg_amount,
|
|
|
|
+ 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) today_again_rate,
|
|
|
|
+ round(if(sum(nature_reg_num) > 0 , sum(nature_new_user_total_amount) / sum(nature_reg_num), 0), 2) 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) 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) today_amount_arpu,
|
|
|
|
+ round(if(SUM(nature_reg_num) > 0, SUM(cost) / SUM(nature_reg_num), 0), 2) reg_cost,
|
|
|
|
+ round(if(SUM(cost) > 0 , SUM(nature_new_user_total_amount) / SUM(cost), 0), 4) total_roi,
|
|
|
|
+ round(if(SUM(nature_first_new_user_amount_num) > 0, SUM(cost) / SUM(nature_first_new_user_amount_num), 0), 2) first_new_user_recharge_cost,
|
|
|
|
+ round(if(SUM(nature_new_user_total_amount_num) > 0, SUM(cost) / SUM(nature_new_user_total_amount_num), 0), 2) total_recharge_cost,
|
|
|
|
+ IFNULL(SUM(nature_hundred_user_num), 0) hundred_user_num,
|
|
|
|
+ round(IF(SUM(nature_hundred_user_num) > 0, SUM(cost) / SUM(nature_hundred_user_num), 0), 2) hundred_user_num_cost,
|
|
|
|
+ SUM(nature_first_role_num) first_role_num,
|
|
|
|
+ SUM(nature_new_user_total_role_num) new_user_total_role_num,
|
|
|
|
+ round(IF(SUM(nature_first_role_num) > 0, SUM(cost) / SUM(nature_first_role_num), 0), 2) first_role_num_cost,
|
|
|
|
+ round(IF(SUM(nature_new_user_total_role_num) >0, SUM(cost) / SUM(nature_new_user_total_role_num), 0), 2) new_user_total_role_num_cost,
|
|
|
|
+ round(IF(SUM(nature_reg_num) >0, SUM(nature_first_role_num) / SUM(nature_reg_num), 0), 4) first_role_num_rate,
|
|
|
|
+ round(IF(SUM(nature_reg_num) >0, SUM(nature_new_user_total_role_num) / SUM(nature_reg_num), 0), 4) new_user_total_role_num_rate
|
|
|
|
+ FROM
|
|
|
|
+ game_ads_parent.ads_game_day_parent
|
|
|
|
+ """ + criA +
|
|
|
|
+ """
|
|
|
|
+ ) a
|
|
|
|
+ LEFT JOIN (
|
|
|
|
+ SELECT
|
|
|
|
+ source_system as b_source_system,
|
|
|
|
+ parent_game_id as b_game_id,
|
|
|
|
+ MAX(parent_game_name) as b_game_name,
|
|
|
|
+ IFNULL(sum(nature_amount_count), 0) amount_count,
|
|
|
|
+ IFNULL(sum(nature_amount), 0) amount,
|
|
|
|
+ round(if(sum(nature_amount_count) > 0, sum(nature_amount) / sum(nature_amount_count), 0), 2) avg_amount
|
|
|
|
+ FROM
|
|
|
|
+ game_ads_parent.ads_game_day_parent
|
|
|
|
+ """ + criB +
|
|
|
|
+ """
|
|
|
|
+ ) b
|
|
|
|
+ ON a.game_id = b.b_game_id and a.game_name = b.b_game_name and a.source_system = b.b_source_system
|
|
|
|
+ LEFT JOIN (
|
|
|
|
+ SELECT
|
|
|
|
+ source_system as e_source_system,
|
|
|
|
+ parent_game_id as e_game_id,
|
|
|
|
+ IFNULL(COUNT(DISTINCT user_id), 0) amount_num
|
|
|
|
+ FROM
|
|
|
|
+ game_ads.ads_information
|
|
|
|
+ """ + criAmount +
|
|
|
|
+ """
|
|
|
|
+ AND agent_id = 0
|
|
|
|
+ GROUP BY parent_game_id, source_system ) e
|
|
|
|
+ ON a.game_id = e.e_game_id and a.source_system = e.e_source_system
|
|
|
|
+ LEFT JOIN(
|
|
|
|
+ SELECT
|
|
|
|
+ source_system as h_source_system,
|
|
|
|
+ parent_game_id as h_game_id,
|
|
|
|
+ COUNT(DISTINCT user_id) as new_user_amount_num
|
|
|
|
+ FROM
|
|
|
|
+ game_ads.ads_information
|
|
|
|
+ """ + criNewUser +
|
|
|
|
+ """
|
|
|
|
+ AND agent_id = 0
|
|
|
|
+ GROUP BY parent_game_id, source_system) h
|
|
|
|
+ ON a.game_id = h.h_game_id and a.source_system = h.h_source_system
|
|
|
|
+ LEFT JOIN (
|
|
|
|
+ SELECT
|
|
|
|
+ source_system as i_source_system,
|
|
|
|
+ parent_game_id as i_game_id,
|
|
|
|
+ COUNT(tempB.num) as new_user_again_num
|
|
|
|
+ FROM (
|
|
|
|
+ SELECT
|
|
|
|
+ source_system,
|
|
|
|
+ parent_game_id,
|
|
|
|
+ COUNT(user_id) num
|
|
|
|
+ FROM
|
|
|
|
+ game_ads.ads_information
|
|
|
|
+ """ + criNewUser +
|
|
|
|
+ """
|
|
|
|
+ AND agent_id = 0
|
|
|
|
+ GROUP BY
|
|
|
|
+ user_id,
|
|
|
|
+ parent_game_id,
|
|
|
|
+ source_system
|
|
|
|
+ HAVING
|
|
|
|
+ COUNT(user_id) > 1 ) tempB
|
|
|
|
+ GROUP BY tempB.parent_game_id, tempB.source_system ) i
|
|
|
|
+ ON a.game_id = i.i_game_id and a.source_system = i.i_source_system
|
|
|
|
+ LEFT JOIN (
|
|
|
|
+ SELECT
|
|
|
|
+ source_system as m_source_system,
|
|
|
|
+ parent_game_id ,
|
|
|
|
+ COUNT(DISTINCT role_user_id) as role_num
|
|
|
|
+ FROM
|
|
|
|
+ dw_create_role_detail
|
|
|
|
+ """ + criRoleNum +
|
|
|
|
+ """
|
|
|
|
+ AND user_agent_id = 0
|
|
|
|
+ GROUP BY parent_game_id, source_system
|
|
|
|
+ ) m
|
|
|
|
+ ON a.game_id = m.parent_game_id and a.source_system = m.m_source_system
|
|
|
|
+ """;
|
|
|
|
+ }
|
|
|
|
+ //总量
|
|
|
|
+ return """
|
|
|
|
+ SELECT
|
|
|
|
+ a.*,
|
|
|
|
+ IFNULL(amount_count, 0) amount_count,
|
|
|
|
+ IFNULL(amount, 0) amount,
|
|
|
|
+ IFNULL(avg_amount, 0) avg_amount,
|
|
|
|
+ IFNULL(new_user_amount_num, 0) new_user_amount_num,
|
|
|
|
+ IFNULL(new_user_again_num, 0) new_user_again_num,
|
|
|
|
+ IFNULL(amount_num, 0) amount_num,
|
|
|
|
+ IFNULL(role_num, 0) role_num
|
|
|
|
+ FROM(
|
|
|
|
+ SELECT
|
|
|
|
+ source_system,
|
|
|
|
+ parent_game_id as game_id,
|
|
|
|
+ MAX(parent_game_name) as game_name,
|
|
|
|
+ parent_game_name_classify as game_classify,
|
|
|
|
+ sum(reg_num) reg_num,
|
|
|
|
+ sum(cost) cost,
|
|
|
|
+ sum(first_new_user_amount_count) first_new_user_amount_count,
|
|
|
|
+ sum(first_new_user_amount_num) first_new_user_amount_num,
|
|
|
|
+ sum(first_new_user_amount) first_new_user_amount,
|
|
|
|
+ sum(new_user_total_amount_count) new_user_total_amount_count,
|
|
|
|
+ sum(new_user_total_amount_num) new_user_total_amount_num,
|
|
|
|
+ sum(new_user_total_amount) new_user_total_amount,
|
|
|
|
+ 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(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(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(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(reg_num) > 0, SUM(cost) / SUM(reg_num), 0), 2) reg_cost,
|
|
|
|
+ round(if(SUM(cost) > 0 , SUM(new_user_total_amount) / SUM(cost), 0), 4) total_roi,
|
|
|
|
+ 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(new_user_total_amount_num) > 0, SUM(cost) / SUM(new_user_total_amount_num), 0), 2) total_recharge_cost,
|
|
|
|
+ SUM(hundred_user_num) 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(new_user_total_role_num) 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(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(new_user_total_role_num) / SUM(reg_num), 0), 4) new_user_total_role_num_rate
|
|
|
|
+ FROM
|
|
|
|
+ game_ads_parent.ads_game_day_parent
|
|
|
|
+ """ + criA +
|
|
|
|
+ """
|
|
|
|
+ ) a
|
|
|
|
+ LEFT JOIN (
|
|
|
|
+ SELECT
|
|
|
|
+ source_system as b_source_system,
|
|
|
|
+ parent_game_id as b_game_id,
|
|
|
|
+ MAX(parent_game_name) as b_game_name,
|
|
|
|
+ IFNULL(sum(amount_count), 0) amount_count,
|
|
|
|
+ IFNULL(sum(amount), 0) amount,
|
|
|
|
+ round(if(sum(amount_count) > 0, sum(amount) / sum(amount_count), 0), 2) avg_amount
|
|
|
|
+ FROM
|
|
|
|
+ game_ads_parent.ads_game_day_parent
|
|
|
|
+ """ + criB +
|
|
|
|
+ """
|
|
|
|
+ ) b
|
|
|
|
+ ON a.game_id = b.b_game_id and a.game_name = b.b_game_name and a.source_system = b.b_source_system
|
|
|
|
+ LEFT JOIN (
|
|
|
|
+ SELECT
|
|
|
|
+ source_system as c_source_system,
|
|
|
|
+ parent_game_id as c_game_id,
|
|
|
|
+ IFNULL(COUNT(DISTINCT user_id), 0) amount_num
|
|
|
|
+ FROM
|
|
|
|
+ game_ads.ads_information
|
|
|
|
+ """ + criAmount +
|
|
|
|
+ """
|
|
|
|
+ GROUP BY parent_game_id, source_system) c
|
|
|
|
+ ON a.game_id = c.c_game_id and a.source_system = c.c_source_system
|
|
|
|
+ LEFT JOIN (
|
|
|
|
+ SELECT
|
|
|
|
+ source_system as j_source_system,
|
|
|
|
+ parent_game_id as j_game_id,
|
|
|
|
+ COUNT(DISTINCT user_id) new_user_amount_num
|
|
|
|
+ FROM
|
|
|
|
+ game_ads.ads_information
|
|
|
|
+ """
|
|
|
|
+ + criNewUser +
|
|
|
|
+ """
|
|
|
|
+ GROUP BY parent_game_id, source_system) j
|
|
|
|
+ ON a.game_id = j.j_game_id and a.source_system = j.j_source_system
|
|
|
|
+ LEFT JOIN (
|
|
|
|
+ SELECT
|
|
|
|
+ source_system as k_source_system,
|
|
|
|
+ parent_game_id as k_game_id,
|
|
|
|
+ COUNT(tempC.num) as new_user_again_num
|
|
|
|
+ FROM (
|
|
|
|
+ SELECT
|
|
|
|
+ source_system,
|
|
|
|
+ parent_game_id,
|
|
|
|
+ COUNT(user_id) num
|
|
|
|
+ FROM
|
|
|
|
+ game_ads.ads_information
|
|
|
|
+ """ + criNewUser +
|
|
|
|
+ """
|
|
|
|
+ GROUP BY
|
|
|
|
+ user_id,
|
|
|
|
+ parent_game_id,
|
|
|
|
+ source_system
|
|
|
|
+ HAVING
|
|
|
|
+ COUNT(user_id) > 1 ) tempC
|
|
|
|
+ GROUP BY tempC.parent_game_id, tempC.source_system ) k
|
|
|
|
+ ON a.game_id = k.k_game_id and a.source_system = k.k_source_system
|
|
|
|
+ LEFT JOIN (
|
|
|
|
+ SELECT
|
|
|
|
+ source_system as l_source_system,
|
|
|
|
+ parent_game_id ,
|
|
|
|
+ COUNT(DISTINCT role_user_id) as role_num
|
|
|
|
+ FROM
|
|
|
|
+ dw_create_role_detail
|
|
|
|
+ """ + criRoleNum +
|
|
|
|
+ """
|
|
|
|
+ GROUP BY parent_game_id, source_system
|
|
|
|
+ ) l
|
|
|
|
+ ON a.game_id = l.parent_game_id and a.source_system = l.l_source_system
|
|
|
|
+ """;
|
|
|
|
+ }
|
|
|
|
+
|
|
/**
|
|
/**
|
|
* 游戏总数据总计一栏sql
|
|
* 游戏总数据总计一栏sql
|
|
*
|
|
*
|
|
* @param tableType 查询的类型
|
|
* @param tableType 查询的类型
|
|
* @return String
|
|
* @return String
|
|
*/
|
|
*/
|
|
- private String gameDataTotalTotalSql(String tableType) {
|
|
|
|
|
|
+ private String gameDataTotalTotalSql(String tableType, String tableName) {
|
|
if ("buy".equals(tableType)) {
|
|
if ("buy".equals(tableType)) {
|
|
return """
|
|
return """
|
|
SELECT
|
|
SELECT
|
|
@@ -3799,9 +4284,8 @@ public class GameDataServiceImpl implements IGameDataService {
|
|
round(IF(SUM(buy_new_user_total_role_num) >0, SUM(cost) / SUM(buy_new_user_total_role_num), 0), 2) new_user_total_role_num_cost,
|
|
round(IF(SUM(buy_new_user_total_role_num) >0, SUM(cost) / SUM(buy_new_user_total_role_num), 0), 2) new_user_total_role_num_cost,
|
|
round(IF(SUM(buy_reg_num) >0, SUM(buy_first_role_num) / SUM(buy_reg_num), 0), 4) first_role_num_rate,
|
|
round(IF(SUM(buy_reg_num) >0, SUM(buy_first_role_num) / SUM(buy_reg_num), 0), 4) first_role_num_rate,
|
|
round(IF(SUM(buy_reg_num) >0, SUM(buy_new_user_total_role_num) / SUM(buy_reg_num), 0), 4) new_user_total_role_num_rate
|
|
round(IF(SUM(buy_reg_num) >0, SUM(buy_new_user_total_role_num) / SUM(buy_reg_num), 0), 4) new_user_total_role_num_rate
|
|
- FROM
|
|
|
|
- game_ads.ads_game_day
|
|
|
|
- """;
|
|
|
|
|
|
+ FROM
|
|
|
|
+ """ + tableName;
|
|
} else if ("nature".equals(tableType)) {
|
|
} else if ("nature".equals(tableType)) {
|
|
return """
|
|
return """
|
|
SELECT
|
|
SELECT
|
|
@@ -3834,9 +4318,8 @@ public class GameDataServiceImpl implements IGameDataService {
|
|
round(IF(SUM(nature_new_user_total_role_num) >0, SUM(cost) / SUM(nature_new_user_total_role_num), 0), 2) new_user_total_role_num_cost,
|
|
round(IF(SUM(nature_new_user_total_role_num) >0, SUM(cost) / SUM(nature_new_user_total_role_num), 0), 2) new_user_total_role_num_cost,
|
|
round(IF(SUM(nature_reg_num) >0, SUM(nature_first_role_num) / SUM(nature_reg_num), 0), 4) first_role_num_rate,
|
|
round(IF(SUM(nature_reg_num) >0, SUM(nature_first_role_num) / SUM(nature_reg_num), 0), 4) first_role_num_rate,
|
|
round(IF(SUM(nature_reg_num) >0, SUM(nature_new_user_total_role_num) / SUM(nature_reg_num), 0), 4) new_user_total_role_num_rate
|
|
round(IF(SUM(nature_reg_num) >0, SUM(nature_new_user_total_role_num) / SUM(nature_reg_num), 0), 4) new_user_total_role_num_rate
|
|
- FROM
|
|
|
|
- game_ads.ads_game_day
|
|
|
|
- """;
|
|
|
|
|
|
+ FROM
|
|
|
|
+ """ + tableName;
|
|
}
|
|
}
|
|
//总量数据
|
|
//总量数据
|
|
return """
|
|
return """
|
|
@@ -3870,9 +4353,8 @@ public class GameDataServiceImpl implements IGameDataService {
|
|
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(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(first_role_num) / SUM(reg_num), 0), 4) first_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
|
|
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
|
|
|
|
- """;
|
|
|
|
|
|
+ FROM
|
|
|
|
+ """ + tableName;
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
/**
|
|
@@ -3881,25 +4363,23 @@ public class GameDataServiceImpl implements IGameDataService {
|
|
* @param tableType 查询的类型
|
|
* @param tableType 查询的类型
|
|
* @return String
|
|
* @return String
|
|
*/
|
|
*/
|
|
- private String gameDataTotalSumAmountSql(String tableType) {
|
|
|
|
|
|
+ private String gameDataTotalSumAmountSql(String tableType, String tableName) {
|
|
if ("buy".equals(tableType)) {
|
|
if ("buy".equals(tableType)) {
|
|
return """
|
|
return """
|
|
SELECT
|
|
SELECT
|
|
IFNULL(sum(buy_amount_count),0) amount_count,
|
|
IFNULL(sum(buy_amount_count),0) amount_count,
|
|
IFNULL(sum(buy_amount),0) amount,
|
|
IFNULL(sum(buy_amount),0) amount,
|
|
round(if(sum(buy_amount_count) > 0, sum(buy_amount) / sum(buy_amount_count), 0), 2) avg_amount
|
|
round(if(sum(buy_amount_count) > 0, sum(buy_amount) / sum(buy_amount_count), 0), 2) avg_amount
|
|
- FROM
|
|
|
|
- game_ads.ads_game_day
|
|
|
|
- """;
|
|
|
|
|
|
+ FROM
|
|
|
|
+ """ + tableName;
|
|
} else if ("nature".equals(tableType)) {
|
|
} else if ("nature".equals(tableType)) {
|
|
return """
|
|
return """
|
|
SELECT
|
|
SELECT
|
|
IFNULL(sum(nature_amount_count),0) amount_count,
|
|
IFNULL(sum(nature_amount_count),0) amount_count,
|
|
IFNULL(sum(nature_amount),0) amount,
|
|
IFNULL(sum(nature_amount),0) amount,
|
|
round(if(sum(nature_amount_count) > 0, sum(nature_amount) / sum(nature_amount_count), 0), 2) avg_amount
|
|
round(if(sum(nature_amount_count) > 0, sum(nature_amount) / sum(nature_amount_count), 0), 2) avg_amount
|
|
- FROM
|
|
|
|
- game_ads.ads_game_day
|
|
|
|
- """;
|
|
|
|
|
|
+ FROM
|
|
|
|
+ """ + tableName;
|
|
}
|
|
}
|
|
//总量数据
|
|
//总量数据
|
|
return """
|
|
return """
|
|
@@ -3907,9 +4387,8 @@ public class GameDataServiceImpl implements IGameDataService {
|
|
IFNULL(sum(amount_count),0) amount_count,
|
|
IFNULL(sum(amount_count),0) amount_count,
|
|
IFNULL(sum(amount),0) amount,
|
|
IFNULL(sum(amount),0) amount,
|
|
round(if(sum(amount_count) > 0, sum(amount) / sum(amount_count), 0), 2) avg_amount
|
|
round(if(sum(amount_count) > 0, sum(amount) / sum(amount_count), 0), 2) avg_amount
|
|
- FROM
|
|
|
|
- game_ads.ads_game_day
|
|
|
|
- """;
|
|
|
|
|
|
+ FROM
|
|
|
|
+ """ + tableName;
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
/**
|
|
@@ -8902,6 +9381,29 @@ public class GameDataServiceImpl implements IGameDataService {
|
|
""";
|
|
""";
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ /**
|
|
|
|
+ * 流水临时sql-父游戏维度
|
|
|
|
+ *
|
|
|
|
+ * @return String
|
|
|
|
+ */
|
|
|
|
+ private String waterTemplateSqlForParent() {
|
|
|
|
+ return """
|
|
|
|
+ select
|
|
|
|
+ parent_game_id as game_id,
|
|
|
|
+ user_order_by,
|
|
|
|
+ user_id,
|
|
|
|
+ user_name,
|
|
|
|
+ user_amount,
|
|
|
|
+ amount_order_by,
|
|
|
|
+ amount_post,
|
|
|
|
+ amount_count,
|
|
|
|
+ role_name,
|
|
|
|
+ server_name,
|
|
|
|
+ amount_num
|
|
|
|
+ from game_ads_parent.ads_everyday_water_parent
|
|
|
|
+ """;
|
|
|
|
+ }
|
|
|
|
+
|
|
/**
|
|
/**
|
|
* 用户详情sql-子游戏维度
|
|
* 用户详情sql-子游戏维度
|
|
*/
|
|
*/
|