|
@@ -249,7 +249,6 @@ public class GameDataServiceImpl implements IGameDataService {
|
|
|
*/
|
|
|
@Override
|
|
|
public Page<GameDataTotalVO> getGameDataTotal(GameDataTotalDTO dto) {
|
|
|
-
|
|
|
//如果注册时间参数为空,默认设置查询当天数据
|
|
|
if (dto.getRegisteredBeginDate() == null || dto.getRegisteredEndDate() == null) {
|
|
|
dto.setRegisteredBeginDate(LocalDate.now());
|
|
@@ -268,34 +267,22 @@ public class GameDataServiceImpl implements IGameDataService {
|
|
|
if (StringUtils.isBlank(dto.getSortType())) {
|
|
|
dto.setSortType(OrderByEnum.ASC.getOrderType());
|
|
|
}
|
|
|
- //根据传入的dto拼接查询参数
|
|
|
- Criteria cri = Cnd.cri();
|
|
|
- if (StringUtils.isNotBlank(dto.getGameName())) {
|
|
|
- //拼接游戏名称查询条件
|
|
|
- cri.where().andEquals("a.game_name", dto.getGameName());
|
|
|
- }
|
|
|
- if (dto.getGameId() != null) {
|
|
|
- //拼接游戏id查询条件
|
|
|
- cri.where().andEquals("game_id", dto.getGameId());
|
|
|
- }
|
|
|
- if (dto.getGameClassify() != null) {
|
|
|
- //拼接游戏类型查询条件
|
|
|
- cri.where().andEquals("a.game_classify", dto.getGameClassify());
|
|
|
- }
|
|
|
- if (dto.getRegisteredBeginDate() != null && dto.getRegisteredEndDate() != null) {
|
|
|
- //拼接注册日期查询条件
|
|
|
- cri.where().andBetween("a.dt", dto.getRegisteredBeginDate(), dto.getRegisteredEndDate());
|
|
|
- }
|
|
|
- if (StringUtils.isNotBlank(dto.getSourceSystem())) {
|
|
|
- //拼接SDK来源
|
|
|
- cri.where().andEquals("a.source_system", dto.getSourceSystem());
|
|
|
- }
|
|
|
- //拼接分组条件
|
|
|
- cri.getGroupBy().groupBy("a.game_name", "a.game_id", "a.game_classify");
|
|
|
+
|
|
|
+ //主表查询条件
|
|
|
+ Criteria criA = myCri(dto, "criA");
|
|
|
+ //账面相关查询条件 时间条件只和充值时间相关
|
|
|
+ Criteria criB = myCri(dto, "criB");
|
|
|
+ //账面人数相关 时间只需要充值时间条件,不需要注册时间条件
|
|
|
+ Criteria criAmount = myCriRecharge(dto, false);
|
|
|
+ //新用户充值人数和新用户复充人数 时间条件需要注册时间和充值时间
|
|
|
+ Criteria criNewUser = myCriRecharge(dto, true);
|
|
|
+ //创角人数查询条件
|
|
|
+ Criteria criRoleNum = myCriRole(dto);
|
|
|
//拼接排序条件
|
|
|
- cri.getOrderBy().orderBy(CaseFormat.LOWER_CAMEL.to(CaseFormat.LOWER_UNDERSCORE, dto.getSortFiled()), dto.getSortType());
|
|
|
+ Criteria orderByCri = Cnd.cri();
|
|
|
+ orderByCri.getOrderBy().orderBy(CaseFormat.LOWER_CAMEL.to(CaseFormat.LOWER_UNDERSCORE, dto.getSortFiled()), dto.getSortType());
|
|
|
//创建sql语句 执行sql
|
|
|
- Sql sql = Sqls.create(gameDataTotalSql() + cri);
|
|
|
+ Sql sql = Sqls.create(getGameDataTotalSql(criA, criB, criAmount, criNewUser, criRoleNum) + orderByCri);
|
|
|
//设置自定义回显对象
|
|
|
sql.setCallback(Sqls.callback.entities());
|
|
|
sql.setEntity(dao.getEntity(GameDataTotalVO.class));
|
|
@@ -306,42 +293,53 @@ public class GameDataServiceImpl implements IGameDataService {
|
|
|
//得到结果集list
|
|
|
List<GameDataTotalVO> list = sql.getList(GameDataTotalVO.class);
|
|
|
//设置查询总数
|
|
|
- Sql sqlCount = Sqls.queryEntity("select count(*) from ads_game_day a " + cri);
|
|
|
+ Sql sqlCount = Sqls.queryEntity("select count(*) from ads_game_day" + criA);
|
|
|
pager.setRecordCount((int) Daos.queryCount(dao, sqlCount));
|
|
|
|
|
|
+ //获取所有筛选条件内的dayN数据
|
|
|
+ Map<String, DayN> dayNMap = tempDayNData(dto, "ads_dayn_game");
|
|
|
+ Map<String, DayN> dayNMapBuy = tempDayNData(dto, "ads_dayn_game_buy");
|
|
|
+ Map<String, DayN> dayNMapNature = tempDayNData(dto, "ads_dayn_game_nature");
|
|
|
+
|
|
|
//根据充值时间修改值
|
|
|
List<GameDataTotalVO> gameDataTotalVOList = list.stream().map(vo -> {
|
|
|
|
|
|
- //获取到一个只含有与充值时间有关的数据对象
|
|
|
- GameDataTotalVO tempVO = getRechargeData(vo, dto);
|
|
|
- //将tempVO中查出的数据添加到vo上
|
|
|
- copyNullProperties(tempVO, vo);
|
|
|
-
|
|
|
- //设置查询参数map
|
|
|
- Map<String, Object> dayNMap = new HashMap<>(6);
|
|
|
- dayNMap.put("registerBeginDate", dto.getRegisteredBeginDate());
|
|
|
- dayNMap.put("registerEndDate", dto.getRegisteredEndDate());
|
|
|
- dayNMap.put("rechargeBeginDate", dto.getRechargeBeginDate());
|
|
|
- dayNMap.put("rechargeEndDate", dto.getRechargeEndDate());
|
|
|
- dayNMap.put("gameId", vo.getGameId());
|
|
|
- if (StringUtils.isNotBlank(dto.getSourceSystem())) {
|
|
|
- dayNMap.put("sourceSystem", dto.getSourceSystem());
|
|
|
- }
|
|
|
-
|
|
|
//买量表的充值相关数据
|
|
|
- DayN buyDayN = getDayNByTableName(dayNMap, "ads_dayn_game_buy");
|
|
|
+ DayN buyDayN = dayNMapBuy.get(vo.getGameId().toString());
|
|
|
//自然量表的充值相关数据
|
|
|
- DayN natureDayN = getDayNByTableName(dayNMap, "ads_dayn_game_nature");
|
|
|
+ DayN natureDayN = dayNMapNature.get(vo.getGameId().toString());
|
|
|
//总量表的充值相关数据
|
|
|
- DayN dayN = getDayNByTableName(dayNMap, "ads_dayn_game");
|
|
|
+ DayN dayN = dayNMap.get(vo.getGameId().toString());
|
|
|
+
|
|
|
+ //账面ARPPU
|
|
|
+ //设置账面ARPU(总量、买量、自然量)
|
|
|
+ vo.setAmountArpu(vo.getAmountNum() == 0L ? BigDecimal.ZERO :
|
|
|
+ vo.getAmount().divide(BigDecimal.valueOf(vo.getAmountNum()), 2, RoundingMode.HALF_UP));
|
|
|
+ vo.setBuyAmountArpu(vo.getBuyAmountNum() == 0L ? BigDecimal.ZERO :
|
|
|
+ vo.getBuyAmount().divide(BigDecimal.valueOf(vo.getBuyAmountNum()), 2, RoundingMode.HALF_UP));
|
|
|
+ vo.setNatureAmountArpu(vo.getNatureAmountNum() == 0L ? BigDecimal.ZERO :
|
|
|
+ vo.getNatureAmount().divide(BigDecimal.valueOf(vo.getNatureAmountNum()), 2, RoundingMode.HALF_UP));
|
|
|
+
|
|
|
+ //创角成本
|
|
|
+ vo.setRoleNumCost(vo.getRoleNum() == 0L ? BigDecimal.ZERO :
|
|
|
+ vo.getCost().divide(BigDecimal.valueOf(vo.getRoleNum()), 2, RoundingMode.HALF_UP));
|
|
|
+ vo.setBuyRoleNumCost(vo.getBuyRoleNum() == 0L ? BigDecimal.ZERO :
|
|
|
+ vo.getCost().divide(BigDecimal.valueOf(vo.getBuyRoleNum()), 2, RoundingMode.HALF_UP));
|
|
|
+ vo.setNatureRoleNumCost(vo.getNatureRoleNum() == 0L ? BigDecimal.ZERO :
|
|
|
+ vo.getCost().divide(BigDecimal.valueOf(vo.getNatureRoleNum()), 2, 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.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()));
|
|
@@ -378,12 +376,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()));
|
|
@@ -420,12 +415,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()));
|
|
@@ -581,8 +573,9 @@ public class GameDataServiceImpl implements IGameDataService {
|
|
|
|
|
|
/**
|
|
|
* 游戏总数据总计的新用户充值人数相关值得计算方法
|
|
|
+ *
|
|
|
* @param dto 前端查询条件
|
|
|
- * @param vo 返回给前端得实体
|
|
|
+ * @param vo 返回给前端得实体
|
|
|
*/
|
|
|
private void getGameDataTotalTotalRechargeData(GameDataTotalTotalDTO dto, GameDataTotalTotalVO vo) {
|
|
|
|
|
@@ -883,11 +876,6 @@ public class GameDataServiceImpl implements IGameDataService {
|
|
|
List<AdsGameDayAgain> list = getListByTableType("total", cri);
|
|
|
List<AdsGameDayAgainBuy> listBuySql = getListByTableType("buy", cri);
|
|
|
List<AdsGameDayAgainNature> listNatureSql = getListByTableType("nature", cri);
|
|
|
-
|
|
|
- log.info("list长度:" + list.size());
|
|
|
- log.info("listBuy长度:" + listBuySql.size());
|
|
|
- log.info("listNature长度:" + listNatureSql.size());
|
|
|
-
|
|
|
//创建Map记录数据
|
|
|
Map<LocalDate, List<GameDataAgainDayVO>> map = new TreeMap<>(
|
|
|
(o1, o2) -> o1.isBefore(o2) == true ? -1 : 1);
|
|
@@ -990,80 +978,229 @@ public class GameDataServiceImpl implements IGameDataService {
|
|
|
map.put(list.get(i).getDdf(), tempList.get(i));
|
|
|
}
|
|
|
|
|
|
- log.info("list长度:" + list.size());
|
|
|
- log.info("listBuy长度:" + listBuy.size());
|
|
|
- log.info("listNature长度:" + listNature.size());
|
|
|
-
|
|
|
//返回数据
|
|
|
return map;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * 查询只与充值时间相关的数据
|
|
|
+ * 生成DayN数据方法
|
|
|
*
|
|
|
- * @param vo 返回给前端的实体
|
|
|
- * @param dto 前端查询实体
|
|
|
- * @return GameDataTotalVO
|
|
|
+ * @param dto 前端查询参数
|
|
|
+ * @param tableName 表名
|
|
|
+ * @return Map
|
|
|
*/
|
|
|
- private GameDataTotalVO getRechargeData(GameDataTotalVO vo, GameDataTotalDTO dto) {
|
|
|
- //查询条件
|
|
|
- Criteria criRc = Cnd.cri();
|
|
|
- if (StringUtils.isNotBlank(vo.getGameName())) {
|
|
|
+ private Map<String, DayN> tempDayNData(GameDataTotalDTO dto, String tableName) {
|
|
|
+
|
|
|
+ //创建查询条件
|
|
|
+ Criteria cri = Cnd.cri();
|
|
|
+ if (dto.getRegisteredBeginDate() != null && dto.getRegisteredEndDate() != null) {
|
|
|
+ //拼接注册时间查询条件
|
|
|
+ cri.where().andBetween("dt", dto.getRegisteredBeginDate(), dto.getRegisteredEndDate());
|
|
|
+ }
|
|
|
+ if (dto.getGameId() != null) {
|
|
|
+ //拼接游戏ID查询条件
|
|
|
+ cri.where().andEquals("game_id", dto.getGameId());
|
|
|
+ }
|
|
|
+ if (StringUtils.isNotBlank(dto.getSourceSystem())) {
|
|
|
+ //拼接SDK来源查询条件
|
|
|
+ cri.where().andEquals("source_system", dto.getSourceSystem());
|
|
|
+ }
|
|
|
+
|
|
|
+ Sql dayNSql = Sqls.create("""
|
|
|
+ SELECT
|
|
|
+ dt,
|
|
|
+ game_id,
|
|
|
+ source_system,
|
|
|
+ dayN as day_n
|
|
|
+ FROM
|
|
|
+ $tableName
|
|
|
+ """ + cri);
|
|
|
+
|
|
|
+ //给定查询的表名
|
|
|
+ dayNSql.vars().set("tableName", tableName);
|
|
|
+ //设置回传
|
|
|
+ dayNSql.setCallback(Sqls.callback.entities());
|
|
|
+ dayNSql.setEntity(dao.getEntity(AdsDaynGame.class));
|
|
|
+ //执行sql 获取数据到list中
|
|
|
+ dao.execute(dayNSql);
|
|
|
+
|
|
|
+ //将数据库中获取的所有结果封装到一个List中
|
|
|
+ List<AdsDaynGame> list = dayNSql.getList(AdsDaynGame.class);
|
|
|
+
|
|
|
+ Map<String, Map<String, String>> tempMap = new HashMap<>();
|
|
|
+
|
|
|
+ //循环遍历 list 按照 gameId 进行存储
|
|
|
+ for (AdsDaynGame adsDaynGame : list) {
|
|
|
+ if (!tempMap.containsKey(adsDaynGame.getGameId())) {
|
|
|
+ //Map中没有改游戏的相关数据,初始化dayNMap
|
|
|
+ Map<String, String> resMap = new HashMap<>();
|
|
|
+ //对应的参数说明: 日期:每天充值金额-充值次数
|
|
|
+ resMap.put("dayN", "0.00-0");
|
|
|
+ //保存初始化结果
|
|
|
+ tempMap.put(adsDaynGame.getGameId(), resMap);
|
|
|
+ }
|
|
|
+ //解析 dayN
|
|
|
+ Map<String, String> resMap = tempMap.get(adsDaynGame.getGameId());
|
|
|
+ //解析每个 adsDaynGame 的 dayN
|
|
|
+ parseJsonData(adsDaynGame, resMap, dto);
|
|
|
+ //将解析的结果保存
|
|
|
+ tempMap.put(adsDaynGame.getGameId(), resMap);
|
|
|
+ }
|
|
|
+
|
|
|
+ //生成dayN对象
|
|
|
+ Map<String, DayN> gameIdToDayNMap = new HashMap<>();
|
|
|
+ for (Map.Entry<String, Map<String, String>> entry : tempMap.entrySet()) {
|
|
|
+ //根据解析出来的dayN值构建DayN对象
|
|
|
+ String[] values = entry.getValue().get("dayN").split("-");
|
|
|
+ gameIdToDayNMap.put(entry.getKey(), DayN.builder()
|
|
|
+ .rechargeMoney(new BigDecimal(values[0]))
|
|
|
+ .rechargeCount(Long.valueOf(values[1]))
|
|
|
+ .build());
|
|
|
+ }
|
|
|
+
|
|
|
+ return gameIdToDayNMap;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 解析dayN json字符串数据
|
|
|
+ *
|
|
|
+ * @param adsDaynGame 对象
|
|
|
+ * @param resMap 记录最终结果Map
|
|
|
+ * @param dto 前端查询条件
|
|
|
+ */
|
|
|
+ private void parseJsonData(AdsDaynGame adsDaynGame, Map<String, String> resMap, GameDataTotalDTO dto) {
|
|
|
+ //将每一个adsDaynGame中的dayN属性值 由json转为 Map 型
|
|
|
+ Gson gson = new Gson();
|
|
|
+ Map<String, String> jsonList = gson.fromJson(adsDaynGame.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.getRechargeBeginDate()) >= 0
|
|
|
+ && DateUtil.parseLocalDate(key).compareTo(dto.getRechargeEndDate()) <= 0) {
|
|
|
+ //获取原先的dayN的值
|
|
|
+ String[] oldValues = resMap.get("dayN").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;
|
|
|
+ resMap.put("dayN", newValue);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 主表 账面相关 查询条件
|
|
|
+ *
|
|
|
+ * @param dto 前端传递的查询条件
|
|
|
+ * @param type criA 查询主表 criB 查询账面相关
|
|
|
+ * @return 查询条件
|
|
|
+ */
|
|
|
+ private Criteria myCri(GameDataTotalDTO dto, String type) {
|
|
|
+ //根据传入的dto拼接查询参数
|
|
|
+ Criteria cri = Cnd.cri();
|
|
|
+ if (StringUtils.isNotBlank(dto.getGameName())) {
|
|
|
//拼接游戏名称查询条件
|
|
|
- criRc.where().andEquals("game_name", vo.getGameName());
|
|
|
+ cri.where().andEquals("game_name", dto.getGameName());
|
|
|
}
|
|
|
- if (vo.getGameClassify() != null) {
|
|
|
+ if (dto.getGameId() != null) {
|
|
|
+ //拼接游戏id查询条件
|
|
|
+ cri.where().andEquals("game_id", dto.getGameId());
|
|
|
+ }
|
|
|
+ if (dto.getGameClassify() != null) {
|
|
|
//拼接游戏类型查询条件
|
|
|
- criRc.where().andEquals("game_classify", vo.getGameClassify());
|
|
|
+ cri.where().andEquals("game_classify", dto.getGameClassify());
|
|
|
}
|
|
|
- if (vo.getGameId() != null) {
|
|
|
- //拼接游戏id查询条件
|
|
|
- criRc.where().andEquals("game_id", vo.getGameId());
|
|
|
+ if (StringUtils.isNotBlank(dto.getSourceSystem())) {
|
|
|
+ //拼接SDK来源
|
|
|
+ cri.where().andEquals("source_system", dto.getSourceSystem());
|
|
|
}
|
|
|
- if (dto.getRechargeBeginDate() != null && dto.getRechargeEndDate() != null) {
|
|
|
- //拼接充值日期查询条件
|
|
|
- criRc.where().andBetween("dt", dto.getRechargeBeginDate(), dto.getRechargeEndDate());
|
|
|
+ //根据type拼接不同的时间查询条件
|
|
|
+ if (type.equals("criA")) {
|
|
|
+ if (dto.getRegisteredBeginDate() != null && dto.getRegisteredEndDate() != null) {
|
|
|
+ //拼接注册日期查询条件
|
|
|
+ cri.where().andBetween("dt", dto.getRegisteredBeginDate(), dto.getRegisteredEndDate());
|
|
|
+ }
|
|
|
+ } else if (type.equals("criB")) {
|
|
|
+ if (dto.getRechargeBeginDate() != null && dto.getRechargeEndDate() != null) {
|
|
|
+ //拼接充值日期查询条件
|
|
|
+ cri.where().andBetween("dt", dto.getRechargeBeginDate(), dto.getRechargeEndDate());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //拼接分组条件
|
|
|
+ cri.getGroupBy().groupBy("game_name", "game_id", "game_classify");
|
|
|
+
|
|
|
+ return cri;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 账面充值人数、新用户充值人数、新用户复充人数的查询条件
|
|
|
+ *
|
|
|
+ * @param dto 前端传递的查询条件参数实体
|
|
|
+ * @param needRegTime 是否需要拼接注册时间
|
|
|
+ * @return 查询条件
|
|
|
+ */
|
|
|
+ private Criteria myCriRecharge(GameDataTotalDTO dto, Boolean needRegTime) {
|
|
|
+ //根据传入的dto拼接查询参数
|
|
|
+ Criteria cri = Cnd.cri();
|
|
|
+ if (dto.getGameId() != null) {
|
|
|
+ //拼接游戏id查询条件
|
|
|
+ cri.where().andEquals("game_id", dto.getGameId());
|
|
|
}
|
|
|
if (StringUtils.isNotBlank(dto.getSourceSystem())) {
|
|
|
//拼接SDK来源
|
|
|
- criRc.where().andEquals("source_system", dto.getSourceSystem());
|
|
|
+ cri.where().andEquals("source_system", dto.getSourceSystem());
|
|
|
+ }
|
|
|
+ //拼接不同的时间查询条件
|
|
|
+ if (needRegTime && dto.getRegisteredBeginDate() != null && dto.getRegisteredEndDate() != null) {
|
|
|
+ //拼接注册日期查询条件
|
|
|
+ cri.where().andBetween("reg_time", dto.getRegisteredBeginDate(), dto.getRegisteredEndDate());
|
|
|
+ }
|
|
|
+ if (dto.getRechargeBeginDate() != null && dto.getRechargeEndDate() != null) {
|
|
|
+ //拼接充值日期查询条件
|
|
|
+ cri.where().andBetween("order_time", dto.getRechargeBeginDate(), dto.getRechargeEndDate());
|
|
|
}
|
|
|
- //创建sql语句
|
|
|
- Sql sqlWithRechargeDate = Sqls.create(gameDataTotalSqlRecharge() + criRc);
|
|
|
|
|
|
- sqlWithRechargeDate.setCallback(Sqls.callback.entity());
|
|
|
- sqlWithRechargeDate.setEntity(dao.getEntity(GameDataTotalVO.class));
|
|
|
- dao.execute(sqlWithRechargeDate);
|
|
|
- //得到vo
|
|
|
- GameDataTotalVO gameDataTotalVO = sqlWithRechargeDate.getObject(GameDataTotalVO.class);
|
|
|
+ return cri;
|
|
|
+ }
|
|
|
|
|
|
- //设置查询参数map
|
|
|
- Map<String, Object> queryMap = new HashMap<>(4);
|
|
|
- queryMap.put("rechargeBeginDate", dto.getRechargeBeginDate());
|
|
|
- queryMap.put("rechargeEndDate", dto.getRechargeEndDate());
|
|
|
- queryMap.put("gameId", vo.getGameId());
|
|
|
+ /**
|
|
|
+ * 创角人数相关查询条件
|
|
|
+ *
|
|
|
+ * @param dto 前端传递的查询条件
|
|
|
+ * @return 查询条件
|
|
|
+ */
|
|
|
+ private Criteria myCriRole(GameDataTotalDTO dto) {
|
|
|
+ //根据传入的dto拼接查询参数
|
|
|
+ Criteria cri = Cnd.cri();
|
|
|
+ if (dto.getGameId() != null) {
|
|
|
+ //拼接游戏id查询条件
|
|
|
+ cri.where().andEquals("user_game_id", dto.getGameId());
|
|
|
+ }
|
|
|
if (StringUtils.isNotBlank(dto.getSourceSystem())) {
|
|
|
- queryMap.put("sourceSystem", dto.getSourceSystem());
|
|
|
+ //拼接SDK来源
|
|
|
+ cri.where().andEquals("source_system", dto.getSourceSystem());
|
|
|
}
|
|
|
- //账面充值人数(总量、买量、自然量)
|
|
|
- Long amountNum = getNewUserAmountNum(queryMap, "");
|
|
|
- Long buyAmountNum = getNewUserAmountNum(queryMap, "buy");
|
|
|
- Long natureAmountNum = getNewUserAmountNum(queryMap, "nature");
|
|
|
- //设置账面充值人数
|
|
|
- gameDataTotalVO.setAmountNum(amountNum);
|
|
|
- gameDataTotalVO.setBuyAmountNum(buyAmountNum);
|
|
|
- gameDataTotalVO.setNatureAmountNum(natureAmountNum);
|
|
|
- //设置账面ARPU(总量、买量、自然量)
|
|
|
- gameDataTotalVO.setAmountArpu(amountNum == 0L ? BigDecimal.ZERO :
|
|
|
- gameDataTotalVO.getAmount().divide(BigDecimal.valueOf(amountNum), 2, RoundingMode.HALF_UP));
|
|
|
- gameDataTotalVO.setBuyAmountArpu(buyAmountNum == 0L ? BigDecimal.ZERO :
|
|
|
- gameDataTotalVO.getBuyAmount().divide(BigDecimal.valueOf(buyAmountNum), 2, RoundingMode.HALF_UP));
|
|
|
- gameDataTotalVO.setNatureAmountArpu(natureAmountNum == 0L ? BigDecimal.ZERO :
|
|
|
- gameDataTotalVO.getNatureAmount().divide(BigDecimal.valueOf(natureAmountNum), 2, RoundingMode.HALF_UP));
|
|
|
-
|
|
|
- return gameDataTotalVO;
|
|
|
+ if (dto.getRegisteredBeginDate() != null && dto.getRegisteredEndDate() != null) {
|
|
|
+ //拼接注册日期查询条件
|
|
|
+ cri.where().andBetween("user_dt", dto.getRegisteredBeginDate(), dto.getRegisteredEndDate());
|
|
|
+ }
|
|
|
+ if (dto.getRechargeBeginDate() != null && dto.getRechargeEndDate() != null) {
|
|
|
+ //拼接充值日期查询条件 在充值时间内创角
|
|
|
+ cri.where().andBetween("DATE(role_create_time)", dto.getRechargeBeginDate(), dto.getRechargeEndDate());
|
|
|
+ }
|
|
|
+
|
|
|
+ return cri;
|
|
|
}
|
|
|
|
|
|
+
|
|
|
/**
|
|
|
* 所有为空值的属性都不copy
|
|
|
*
|
|
@@ -2088,132 +2225,326 @@ public class GameDataServiceImpl implements IGameDataService {
|
|
|
|
|
|
/**
|
|
|
* 游戏总数据SQL
|
|
|
- *
|
|
|
+ * @param criA 主表查询条件
|
|
|
+ * @param criB 账面相关查询条件
|
|
|
+ * @param criAmount 账面充值人数查询条件
|
|
|
+ * @param criNewUser 新用户相关查询条件
|
|
|
+ * @param criRoleNum 创角人数相关查询条件
|
|
|
* @return String
|
|
|
*/
|
|
|
- private String gameDataTotalSql() {
|
|
|
+ private String getGameDataTotalSql(Criteria criA, Criteria criB, Criteria criAmount, Criteria criNewUser, Criteria criRoleNum) {
|
|
|
return """
|
|
|
SELECT
|
|
|
- a.game_id game_id,
|
|
|
- a.game_name game_name,
|
|
|
- a.game_classify game_classify,
|
|
|
-
|
|
|
- sum(a.buy_reg_num) buy_reg_num,
|
|
|
- sum(a.nature_reg_num) nature_reg_num,
|
|
|
- sum(a.reg_num) reg_num,
|
|
|
- sum(a.cost) cost,
|
|
|
-
|
|
|
- sum(a.buy_first_new_user_amount_count) buy_first_new_user_amount_count,
|
|
|
- sum(a.buy_first_new_user_amount_num) buy_first_new_user_amount_num,
|
|
|
- sum(a.buy_first_new_user_amount) buy_first_new_user_amount,
|
|
|
- sum(a.nature_first_new_user_amount_count) nature_first_new_user_amount_count,
|
|
|
- sum(a.nature_first_new_user_amount_num) nature_first_new_user_amount_num,
|
|
|
- sum(a.nature_first_new_user_amount) nature_first_new_user_amount,
|
|
|
- sum(a.first_new_user_amount_count) first_new_user_amount_count,
|
|
|
- sum(a.first_new_user_amount_num) first_new_user_amount_num,
|
|
|
- sum(a.first_new_user_amount) first_new_user_amount,
|
|
|
-
|
|
|
- sum(a.buy_new_user_total_amount_count) buy_new_user_total_amount_count,
|
|
|
- sum(a.buy_new_user_total_amount_num) buy_new_user_total_amount_num,
|
|
|
- sum(a.buy_new_user_total_amount) buy_new_user_total_amount,
|
|
|
- sum(a.nature_new_user_total_amount_count) nature_new_user_total_amount_count,
|
|
|
- sum(a.nature_new_user_total_amount_num) nature_new_user_total_amount_num,
|
|
|
- sum(a.nature_new_user_total_amount) nature_new_user_total_amount,
|
|
|
- sum(a.new_user_total_amount_count) new_user_total_amount_count,
|
|
|
- sum(a.new_user_total_amount_num) new_user_total_amount_num,
|
|
|
- sum(a.new_user_total_amount) new_user_total_amount,
|
|
|
-
|
|
|
- round(if(SUM(a.cost) > 0 , SUM(buy_first_new_user_amount) / SUM(a.cost) ,0), 4) buy_first_roi,
|
|
|
- round(if(sum(a.buy_reg_num) > 0 ,sum(a.buy_first_new_user_amount_num) / sum(a.buy_reg_num), 0), 4) buy_first_amount_rate,
|
|
|
- round(if(sum(a.buy_reg_num) > 0, sum(a.buy_new_user_total_amount_num) / sum(a.buy_reg_num), 0), 4) buy_today_amount_rate,
|
|
|
- round(if(SUM(a.cost) > 0 , SUM(a.nature_first_new_user_amount) / SUM(a.cost) ,0), 4) nature_first_roi,
|
|
|
- round(if(sum(a.nature_reg_num) > 0 ,sum(a.nature_first_new_user_amount_num) / sum(a.nature_reg_num), 0), 4) nature_first_amount_rate,
|
|
|
- round(if(sum(a.nature_reg_num) > 0, sum(a.nature_new_user_total_amount_num) / sum(a.nature_reg_num), 0), 4) nature_today_amount_rate,
|
|
|
- round(if(SUM(a.cost) > 0 , SUM(first_new_user_amount) / SUM(a.cost) ,0), 4) first_roi,
|
|
|
- round(if(sum(a.reg_num) > 0 ,sum(a.first_new_user_amount_num) / sum(a.reg_num), 0), 4) first_amount_rate,
|
|
|
- round(if(sum(a.reg_num) > 0, sum(a.new_user_total_amount_num) / sum(a.reg_num), 0), 4) today_amount_rate,
|
|
|
-
|
|
|
- round(if(sum(a.buy_first_new_user_amount_count) > 0, sum(a.buy_first_new_user_amount) / sum(a.buy_first_new_user_amount_count), 0), 2) buy_first_avg_amount,
|
|
|
- round(if(sum(a.buy_new_user_total_amount_count) > 0, sum(a.buy_new_user_total_amount) / sum(a.buy_new_user_total_amount_count), 0), 2) buy_today_avg_amount,
|
|
|
-
|
|
|
- round(if(sum(a.nature_first_new_user_amount_count) > 0, sum(a.nature_first_new_user_amount) / sum(a.nature_first_new_user_amount_count), 0), 2) nature_first_avg_amount,
|
|
|
- round(if(sum(a.nature_new_user_total_amount_count) > 0, sum(a.nature_new_user_total_amount) / sum(a.nature_new_user_total_amount_count), 0), 2) nature_today_avg_amount,
|
|
|
-
|
|
|
- round(if(sum(a.first_new_user_amount_count) > 0, sum(a.first_new_user_amount) / sum(a.first_new_user_amount_count), 0), 2) first_avg_amount,
|
|
|
- round(if(sum(a.new_user_total_amount_count) > 0, sum(a.new_user_total_amount) / sum(a.new_user_total_amount_count), 0), 2) today_avg_amount,
|
|
|
-
|
|
|
-
|
|
|
- round(if(sum(a.buy_new_user_total_amount_num) > 0 , sum(a.buy_reg_order_user_again) / sum(a.buy_new_user_total_amount_num), 0), 4) buy_today_again_rate,
|
|
|
- round(if(sum(a.nature_new_user_total_amount_num) > 0 , sum(a.nature_reg_order_user_again) / sum(a.nature_new_user_total_amount_num), 0), 4) nature_today_again_rate,
|
|
|
- round(if(sum(a.new_user_total_amount_num) > 0 , sum(a.reg_order_user_again) / sum(a.new_user_total_amount_num), 0), 4) today_again_rate,
|
|
|
-
|
|
|
- round(if(sum(a.buy_reg_num) > 0 , sum(a.buy_new_user_total_amount) / sum(a.buy_reg_num), 0), 2) buy_reg_user_arpu,
|
|
|
- round(if(sum(a.buy_first_new_user_amount_num) > 0 , sum(a.buy_first_new_user_amount) / sum(a.buy_first_new_user_amount_num), 0), 2) buy_first_amount_arpu,
|
|
|
- round(if(sum(a.buy_new_user_total_amount_num) > 0 , sum(a.buy_new_user_total_amount) / sum(a.buy_new_user_total_amount_num), 0), 2) buy_today_amount_arpu,
|
|
|
-
|
|
|
- round(if(sum(a.nature_reg_num) > 0 , sum(a.nature_new_user_total_amount) / sum(a.nature_reg_num), 0), 2) nature_reg_user_arpu,
|
|
|
- round(if(sum(a.nature_first_new_user_amount_num) > 0 , sum(a.nature_first_new_user_amount) / sum(a.nature_first_new_user_amount_num), 0), 2) nature_first_amount_arpu,
|
|
|
- round(if(sum(a.nature_new_user_total_amount_num) > 0 , sum(a.nature_new_user_total_amount) / sum(a.nature_new_user_total_amount_num), 0), 2) nature_today_amount_arpu,
|
|
|
-
|
|
|
- round(if(sum(a.reg_num) > 0 , sum(a.new_user_total_amount) / sum(a.reg_num), 0), 2) reg_user_arpu,
|
|
|
- round(if(sum(a.first_new_user_amount_num) > 0 , sum(a.first_new_user_amount) / sum(a.first_new_user_amount_num), 0), 2) first_amount_arpu,
|
|
|
- round(if(sum(a.new_user_total_amount_num) > 0 , sum(a.new_user_total_amount) / sum(a.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,
|
|
|
- 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,
|
|
|
- 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,
|
|
|
- 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,
|
|
|
- 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,
|
|
|
- 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,
|
|
|
- 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
|
|
|
- ads_game_day a
|
|
|
- """;
|
|
|
+ a.*,
|
|
|
+ a.*,
|
|
|
+ IFNULL(buy_amount_count, 0) buy_amount_count,
|
|
|
+ IFNULL(buy_amount, 0) buy_amount,
|
|
|
+ IFNULL(nature_amount_count, 0) nature_amount_count,
|
|
|
+ IFNULL(nature_amount, 0) nature_amount,
|
|
|
+ IFNULL(amount_count, 0) amount_count,
|
|
|
+ IFNULL(amount, 0) amount,
|
|
|
+ IFNULL(buy_avg_amount, 0) buy_avg_amount,
|
|
|
+ IFNULL(nature_avg_amount, 0) nature_avg_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(buy_new_user_amount_num, 0) buy_new_user_amount_num,
|
|
|
+ IFNULL(buy_new_user_again_num, 0) buy_new_user_again_num,
|
|
|
+ IFNULL(buy_amount_num, 0) buy_amount_num,
|
|
|
+ IFNULL(nature_new_user_amount_num, 0) nature_new_user_amount_num,
|
|
|
+ IFNULL(nature_new_user_again_num, 0) nature_new_user_again_num,
|
|
|
+ IFNULL(nature_amount_num, 0) nature_amount_num,
|
|
|
+ IFNULL(role_num, 0) role_num,
|
|
|
+ IFNULL(buy_role_num, 0) buy_role_num,
|
|
|
+ IFNULL(nature_role_num, 0) nature_role_num
|
|
|
+ FROM(
|
|
|
+ SELECT
|
|
|
+ game_id,
|
|
|
+ game_name,
|
|
|
+ game_classify,
|
|
|
+ sum(buy_reg_num) buy_reg_num,
|
|
|
+ sum(nature_reg_num) nature_reg_num,
|
|
|
+ sum(reg_num) reg_num,
|
|
|
+ sum(cost) cost,
|
|
|
+ sum(buy_first_new_user_amount_count) buy_first_new_user_amount_count,
|
|
|
+ sum(buy_first_new_user_amount_num) buy_first_new_user_amount_num,
|
|
|
+ sum(buy_first_new_user_amount) buy_first_new_user_amount,
|
|
|
+ sum(nature_first_new_user_amount_count) nature_first_new_user_amount_count,
|
|
|
+ sum(nature_first_new_user_amount_num) nature_first_new_user_amount_num,
|
|
|
+ sum(nature_first_new_user_amount) nature_first_new_user_amount,
|
|
|
+ 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(buy_new_user_total_amount_count) buy_new_user_total_amount_count,
|
|
|
+ sum(buy_new_user_total_amount_num) buy_new_user_total_amount_num,
|
|
|
+ sum(buy_new_user_total_amount) buy_new_user_total_amount,
|
|
|
+ sum(nature_new_user_total_amount_count) nature_new_user_total_amount_count,
|
|
|
+ sum(nature_new_user_total_amount_num) nature_new_user_total_amount_num,
|
|
|
+ sum(nature_new_user_total_amount) nature_new_user_total_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(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,
|
|
|
+ round(if(SUM(cost) > 0 , SUM(nature_first_new_user_amount) / SUM(cost) , 0), 4) nature_first_roi,
|
|
|
+ round(if(sum(nature_reg_num) > 0 , sum(nature_first_new_user_amount_num) / sum(nature_reg_num), 0), 4) nature_first_amount_rate,
|
|
|
+ round(if(sum(nature_reg_num) > 0, sum(nature_new_user_total_amount_num) / sum(nature_reg_num), 0), 4) nature_today_amount_rate,
|
|
|
+ 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,
|
|
|
+ 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_new_user_total_role_num) 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_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_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,
|
|
|
+ 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_new_user_total_role_num) 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_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_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,
|
|
|
+ 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
|
|
|
+ ads_game_day
|
|
|
+ """
|
|
|
+ + criA +
|
|
|
+ """
|
|
|
+ ) a
|
|
|
+ LEFT JOIN (
|
|
|
+ SELECT
|
|
|
+ game_id as b_game_id,
|
|
|
+ IFNULL(sum(buy_amount_count), 0) buy_amount_count,
|
|
|
+ IFNULL(sum(buy_amount), 0) buy_amount,
|
|
|
+ IFNULL(sum(nature_amount_count), 0) nature_amount_count,
|
|
|
+ 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
|
|
|
+ """
|
|
|
+ + criB +
|
|
|
+ """
|
|
|
+ ) b
|
|
|
+ ON a.game_id = b.b_game_id
|
|
|
+ LEFT JOIN (
|
|
|
+ SELECT
|
|
|
+ game_id as c_game_id,
|
|
|
+ IFNULL(COUNT(DISTINCT user_id), 0) amount_num
|
|
|
+ FROM
|
|
|
+ game_ads.ads_information
|
|
|
+ """
|
|
|
+ + criAmount +
|
|
|
+ """
|
|
|
+ GROUP BY
|
|
|
+ game_id) c
|
|
|
+ ON a.game_id = c.c_game_id
|
|
|
+ LEFT JOIN(
|
|
|
+ SELECT
|
|
|
+ game_id as d_game_id,
|
|
|
+ IFNULL(COUNT(DISTINCT user_id), 0) buy_amount_num
|
|
|
+ FROM
|
|
|
+ game_ads.ads_information
|
|
|
+ """
|
|
|
+ + criAmount +
|
|
|
+ """
|
|
|
+ AND NOT agent_id = 0
|
|
|
+ GROUP BY game_id) d
|
|
|
+ ON a.game_id = d.d_game_id
|
|
|
+ LEFT JOIN (
|
|
|
+ SELECT
|
|
|
+ game_id as e_game_id,
|
|
|
+ IFNULL(COUNT(DISTINCT user_id), 0) nature_amount_num
|
|
|
+ FROM
|
|
|
+ game_ads.ads_information
|
|
|
+ """
|
|
|
+ + criAmount +
|
|
|
+ """
|
|
|
+ AND agent_id = 0
|
|
|
+ GROUP BY game_id ) e
|
|
|
+ ON a.game_id = e.e_game_id
|
|
|
+ LEFT JOIN (
|
|
|
+ SELECT
|
|
|
+ game_id as f_game_id,
|
|
|
+ COUNT(DISTINCT user_id) buy_new_user_amount_num
|
|
|
+ FROM
|
|
|
+ game_ads.ads_information
|
|
|
+ """
|
|
|
+ + criNewUser +
|
|
|
+ """
|
|
|
+ AND NOT agent_id = 0
|
|
|
+ GROUP BY game_id) f
|
|
|
+ ON a.game_id = f.f_game_id
|
|
|
+ LEFT JOIN(
|
|
|
+ SELECT
|
|
|
+ game_id as g_game_id,
|
|
|
+ COUNT(tempA.num) as buy_new_user_again_num
|
|
|
+ FROM (
|
|
|
+ SELECT
|
|
|
+ game_id,
|
|
|
+ COUNT(user_id) num
|
|
|
+ FROM
|
|
|
+ game_ads.ads_information
|
|
|
+ """
|
|
|
+ + criNewUser +
|
|
|
+ """
|
|
|
+ AND NOT agent_id = 0
|
|
|
+ GROUP BY
|
|
|
+ user_id,
|
|
|
+ game_id
|
|
|
+ HAVING
|
|
|
+ COUNT(user_id) > 1 ) tempA
|
|
|
+ GROUP BY tempA.game_id) g
|
|
|
+ ON a.game_id = g.g_game_id
|
|
|
+ LEFT JOIN(
|
|
|
+ SELECT
|
|
|
+ game_id as h_game_id,
|
|
|
+ COUNT(DISTINCT user_id) as nature_new_user_amount_num
|
|
|
+ FROM
|
|
|
+ game_ads.ads_information
|
|
|
+ """
|
|
|
+ + criNewUser +
|
|
|
+ """
|
|
|
+ AND agent_id = 0
|
|
|
+ GROUP BY game_id) h
|
|
|
+ ON a.game_id = h.h_game_id
|
|
|
+ LEFT JOIN (
|
|
|
+ SELECT
|
|
|
+ game_id as i_game_id,
|
|
|
+ COUNT(tempB.num) as nature_new_user_again_num
|
|
|
+ FROM (
|
|
|
+ SELECT
|
|
|
+ game_id,
|
|
|
+ COUNT(user_id) num
|
|
|
+ FROM
|
|
|
+ game_ads.ads_information
|
|
|
+ """
|
|
|
+ + criNewUser +
|
|
|
+ """
|
|
|
+ AND agent_id = 0
|
|
|
+ GROUP BY
|
|
|
+ user_id,
|
|
|
+ game_id
|
|
|
+ HAVING
|
|
|
+ COUNT(user_id) > 1 ) tempB
|
|
|
+ GROUP BY tempB.game_id ) i
|
|
|
+ ON a.game_id = i.i_game_id
|
|
|
+ LEFT JOIN (
|
|
|
+ SELECT
|
|
|
+ game_id as j_game_id,
|
|
|
+ COUNT(DISTINCT user_id) new_user_amount_num
|
|
|
+ FROM
|
|
|
+ game_ads.ads_information
|
|
|
+ """
|
|
|
+ + criNewUser +
|
|
|
+ """
|
|
|
+ GROUP BY game_id) j
|
|
|
+ ON a.game_id = j.j_game_id
|
|
|
+ LEFT JOIN (
|
|
|
+ SELECT
|
|
|
+ game_id as k_game_id,
|
|
|
+ COUNT(tempC.num) as new_user_again_num
|
|
|
+ FROM (
|
|
|
+ SELECT
|
|
|
+ game_id,
|
|
|
+ COUNT(user_id) num
|
|
|
+ FROM
|
|
|
+ game_ads.ads_information
|
|
|
+ """
|
|
|
+ + criNewUser +
|
|
|
+ """
|
|
|
+ GROUP BY
|
|
|
+ user_id,
|
|
|
+ game_id
|
|
|
+ HAVING
|
|
|
+ COUNT(user_id) > 1 ) tempC
|
|
|
+ GROUP BY tempC.game_id ) k
|
|
|
+ ON a.game_id = k.k_game_id
|
|
|
+ LEFT JOIN (
|
|
|
+ SELECT
|
|
|
+ user_game_id ,
|
|
|
+ COUNT(DISTINCT role_user_id) as role_num
|
|
|
+ FROM
|
|
|
+ dw_create_role_detail
|
|
|
+ """
|
|
|
+ + criRoleNum +
|
|
|
+ """
|
|
|
+ GROUP BY user_game_id
|
|
|
+ ) l
|
|
|
+ ON a.game_id = l.user_game_id
|
|
|
+ LEFT JOIN (
|
|
|
+ SELECT
|
|
|
+ user_game_id ,
|
|
|
+ COUNT(DISTINCT role_user_id) as nature_role_num
|
|
|
+ FROM
|
|
|
+ dw_create_role_detail
|
|
|
+ """
|
|
|
+ + criRoleNum +
|
|
|
+ """
|
|
|
+ AND user_agent_id = 0
|
|
|
+ GROUP BY user_game_id
|
|
|
+ ) m
|
|
|
+ ON a.game_id = m.user_game_id
|
|
|
+ LEFT JOIN (
|
|
|
+ SELECT
|
|
|
+ user_game_id ,
|
|
|
+ COUNT(DISTINCT role_user_id) as buy_role_num
|
|
|
+ FROM
|
|
|
+ dw_create_role_detail
|
|
|
+ """
|
|
|
+ + criRoleNum +
|
|
|
+ """
|
|
|
+ AND NOT user_agent_id = 0
|
|
|
+ GROUP BY user_game_id
|
|
|
+ ) n
|
|
|
+ ON a.game_id = n.user_game_id
|
|
|
+ """;
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -2652,17 +2983,17 @@ public class GameDataServiceImpl implements IGameDataService {
|
|
|
.filter(tt -> null != tt.getNatureGameId())
|
|
|
.collect(Collectors.groupingBy(H5NatureUserVO::getNatureGameId));
|
|
|
|
|
|
- Map<String,Object> natureNewUserMap = new HashMap<>(7);
|
|
|
- natureNewUserMap.put("h5GameId",item.getGameId());
|
|
|
- natureNewUserMap.put("rechargeBeginDay",dto.getRechargeBeginDate());
|
|
|
- natureNewUserMap.put("rechargeEndDay",dto.getRechargeEndDate());
|
|
|
- natureNewUserMap.put("costBeginDay",dto.getCostBeginDate());
|
|
|
- natureNewUserMap.put("costEndDay",dto.getCostEndDate());
|
|
|
+ Map<String, Object> natureNewUserMap = new HashMap<>(7);
|
|
|
+ natureNewUserMap.put("h5GameId", item.getGameId());
|
|
|
+ natureNewUserMap.put("rechargeBeginDay", dto.getRechargeBeginDate());
|
|
|
+ natureNewUserMap.put("rechargeEndDay", dto.getRechargeEndDate());
|
|
|
+ natureNewUserMap.put("costBeginDay", dto.getCostBeginDate());
|
|
|
+ natureNewUserMap.put("costEndDay", dto.getCostEndDate());
|
|
|
List<H5NatureUserVO> natureGameList = natureGameSql.getList(H5NatureUserVO.class).stream()
|
|
|
.filter(tt -> null != tt.getNatureGameId())
|
|
|
.map(natureGame -> {
|
|
|
- natureNewUserMap.put("natureSourceSystem",natureGame.getNatureSourceSystem());
|
|
|
- natureNewUserMap.put("natureGameId",natureGame.getNatureGameId());
|
|
|
+ natureNewUserMap.put("natureSourceSystem", natureGame.getNatureSourceSystem());
|
|
|
+ natureNewUserMap.put("natureGameId", natureGame.getNatureGameId());
|
|
|
|
|
|
importDayNMap.put("sourceSystem", natureGame.getNatureSourceSystem());
|
|
|
importDayNMap.put("gameId", natureGame.getNatureGameId());
|
|
@@ -2744,20 +3075,20 @@ public class GameDataServiceImpl implements IGameDataService {
|
|
|
.filter(tt -> null != tt.getBuyGameId())
|
|
|
.collect(Collectors.groupingBy(H5BuyUserVO::getBuyGameId));
|
|
|
|
|
|
- Map<String,Object> buyNewUserMap = new HashMap<>(7);
|
|
|
- buyNewUserMap.put("h5GameId",item.getGameId());
|
|
|
- buyNewUserMap.put("rechargeBeginDay",dto.getRechargeBeginDate());
|
|
|
- buyNewUserMap.put("rechargeEndDay",dto.getRechargeEndDate());
|
|
|
- buyNewUserMap.put("costBeginDay",dto.getCostBeginDate());
|
|
|
- buyNewUserMap.put("costEndDay",dto.getCostEndDate());
|
|
|
+ Map<String, Object> buyNewUserMap = new HashMap<>(7);
|
|
|
+ buyNewUserMap.put("h5GameId", item.getGameId());
|
|
|
+ buyNewUserMap.put("rechargeBeginDay", dto.getRechargeBeginDate());
|
|
|
+ buyNewUserMap.put("rechargeEndDay", dto.getRechargeEndDate());
|
|
|
+ buyNewUserMap.put("costBeginDay", dto.getCostBeginDate());
|
|
|
+ buyNewUserMap.put("costEndDay", dto.getCostEndDate());
|
|
|
List<H5BuyUserVO> buyGameList = buyGameSql.getList(H5BuyUserVO.class).stream()
|
|
|
.filter(tt -> null != tt.getBuyGameId())
|
|
|
.map(buyGame -> {
|
|
|
importDayNMap.put("sourceSystem", buyGame.getBuySourceSystem());
|
|
|
importDayNMap.put("gameId", buyGame.getBuyGameId());
|
|
|
|
|
|
- buyNewUserMap.put("buySourceSystem",buyGame.getBuySourceSystem());
|
|
|
- buyNewUserMap.put("buyGameId",buyGame.getBuyGameId());
|
|
|
+ buyNewUserMap.put("buySourceSystem", buyGame.getBuySourceSystem());
|
|
|
+ buyNewUserMap.put("buyGameId", buyGame.getBuyGameId());
|
|
|
H5DayN importBuyH5DayN = getImportBuyH5DayN(dto, importDayNMap, buyNewUserMap);
|
|
|
if (null != showBuyGameMap && null != showBuyGameMap.get(buyGame.getBuyGameId()) && !showBuyGameMap.get(buyGame.getBuyGameId()).isEmpty()) {
|
|
|
buyGame.setH5LeadBuyAmount(showBuyGameMap.get(buyGame.getBuyGameId()).get(0).getH5LeadBuyAmount());
|