|
@@ -335,20 +335,13 @@ public class GameDataServiceImpl implements IGameDataService {
|
|
|
//总量表的充值相关数据
|
|
|
DayN dayN = getDayNByTableName(dayNMap, "ads_dayn_game");
|
|
|
|
|
|
- //新用户充值人数(总量)
|
|
|
- dayN.setRechargeNum(getNewUserAmountNum(dayNMap, ""));
|
|
|
- //新用户充值人数(买量)
|
|
|
- buyDayN.setRechargeNum(getNewUserAmountNum(dayNMap, "buy"));
|
|
|
- //新用户充值人数(自然量)
|
|
|
- natureDayN.setRechargeNum(getNewUserAmountNum(dayNMap, "nature"));
|
|
|
-
|
|
|
//设置买量数据
|
|
|
//新用户充值次数、金额、人数
|
|
|
vo.setBuyNewUserAmount(buyDayN == null ? BigDecimal.ZERO : buyDayN.getRechargeMoney());
|
|
|
- vo.setBuyNewUserAmountNum(buyDayN == null ? 0L : buyDayN.getRechargeNum());
|
|
|
+ vo.setBuyNewUserAmountNum(getNewUserAmountNum(dayNMap, "buy"));
|
|
|
vo.setBuyNewUserAmountCount(buyDayN == null ? 0L : buyDayN.getRechargeCount());
|
|
|
//新用户复充人数
|
|
|
- vo.setBuyNewUserAgainNum(buyDayN == null ? 0L : buyDayN.getRechargeAgainNum());
|
|
|
+ vo.setBuyNewUserAgainNum(getNewUserAmountAgainNum(dayNMap, "buy"));
|
|
|
|
|
|
//老用户充值次数、人数、金额
|
|
|
vo.setBuyOldUserAmount(vo.getBuyAmount().subtract(vo.getBuyNewUserAmount()));
|
|
@@ -387,10 +380,10 @@ public class GameDataServiceImpl implements IGameDataService {
|
|
|
//设置自然量数据
|
|
|
//新用户充值次数、金额、人数
|
|
|
vo.setNatureNewUserAmount(natureDayN == null ? BigDecimal.ZERO : natureDayN.getRechargeMoney());
|
|
|
- vo.setNatureNewUserAmountNum(natureDayN == null ? 0L : natureDayN.getRechargeNum());
|
|
|
+ vo.setNatureNewUserAmountNum(getNewUserAmountNum(dayNMap, "nature"));
|
|
|
vo.setNatureNewUserAmountCount(natureDayN == null ? 0L : natureDayN.getRechargeCount());
|
|
|
//新用户复充人数
|
|
|
- vo.setNatureNewUserAgainNum(natureDayN == null ? 0L : natureDayN.getRechargeAgainNum());
|
|
|
+ vo.setNatureNewUserAgainNum(getNewUserAmountAgainNum(dayNMap, "nature"));
|
|
|
|
|
|
//老用户充值次数、人数、金额
|
|
|
vo.setNatureOldUserAmount(vo.getNatureAmount().subtract(vo.getNatureNewUserAmount()));
|
|
@@ -429,10 +422,10 @@ public class GameDataServiceImpl implements IGameDataService {
|
|
|
//设置总量数据
|
|
|
//新用户充值次数、金额、人数
|
|
|
vo.setNewUserAmount(dayN == null ? BigDecimal.ZERO : dayN.getRechargeMoney());
|
|
|
- vo.setNewUserAmountNum(dayN == null ? 0L : dayN.getRechargeNum());
|
|
|
+ vo.setNewUserAmountNum(getNewUserAmountNum(dayNMap, ""));
|
|
|
vo.setNewUserAmountCount(dayN == null ? 0L : dayN.getRechargeCount());
|
|
|
//新用户复充人数
|
|
|
- vo.setNewUserAgainNum(dayN == null ? 0L : dayN.getRechargeAgainNum());
|
|
|
+ vo.setNewUserAgainNum(getNewUserAmountAgainNum(dayNMap, ""));
|
|
|
|
|
|
//老用户充值次数、人数、金额
|
|
|
vo.setOldUserAmount(vo.getAmount().subtract(vo.getNewUserAmount()));
|
|
@@ -554,12 +547,191 @@ public class GameDataServiceImpl implements IGameDataService {
|
|
|
sqlWithRechargeDate.setEntity(dao.getEntity(GameDataTotalTotalVO.class));
|
|
|
dao.execute(sqlWithRechargeDate);
|
|
|
GameDataTotalTotalVO tempVO = sqlWithRechargeDate.getObject(GameDataTotalTotalVO.class);
|
|
|
+
|
|
|
+ //设置查询参数map
|
|
|
+ Map<String, Object> queryMap = new HashMap<>(4);
|
|
|
+ queryMap.put("rechargeBeginDate", dto.getRechargeBeginDate());
|
|
|
+ queryMap.put("rechargeEndDate", dto.getRechargeEndDate());
|
|
|
+ queryMap.put("gameId", dto.getGameId());
|
|
|
+ if (StringUtils.isNotBlank(dto.getSourceSystem())) {
|
|
|
+ queryMap.put("sourceSystem", dto.getSourceSystem());
|
|
|
+ }
|
|
|
+ //账面充值人数(总量、买量、自然量)
|
|
|
+ Long amountNum = getNewUserAmountNum(queryMap, "");
|
|
|
+ Long buyAmountNum = getNewUserAmountNum(queryMap, "buy");
|
|
|
+ Long natureAmountNum = getNewUserAmountNum(queryMap, "nature");
|
|
|
+ //设置账面充值人数
|
|
|
+ tempVO.setAmountNum(amountNum);
|
|
|
+ tempVO.setBuyAmountNum(buyAmountNum);
|
|
|
+ tempVO.setNatureAmountNum(natureAmountNum);
|
|
|
+ //设置账面ARPU(总量、买量、自然量)
|
|
|
+ tempVO.setAmountArpu(amountNum == 0L ? BigDecimal.ZERO :
|
|
|
+ tempVO.getAmount().divide(BigDecimal.valueOf(amountNum), 2, RoundingMode.HALF_UP));
|
|
|
+ tempVO.setBuyAmountArpu(buyAmountNum == 0L ? BigDecimal.ZERO :
|
|
|
+ tempVO.getBuyAmount().divide(BigDecimal.valueOf(buyAmountNum), 2, RoundingMode.HALF_UP));
|
|
|
+ tempVO.setNatureAmountArpu(natureAmountNum == 0L ? BigDecimal.ZERO :
|
|
|
+ tempVO.getNatureAmount().divide(BigDecimal.valueOf(natureAmountNum), 2, RoundingMode.HALF_UP));
|
|
|
//将两个对象内的数据合并
|
|
|
copyNullProperties(tempVO, vo);
|
|
|
+ //获取新用户充值人数相关数据
|
|
|
+ getGameDataTotalTotalRechargeData(dto, vo);
|
|
|
|
|
|
return vo;
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 游戏总数据总计的新用户充值人数相关值得计算方法
|
|
|
+ * @param dto 前端查询条件
|
|
|
+ * @param vo 返回给前端得实体
|
|
|
+ */
|
|
|
+ private void getGameDataTotalTotalRechargeData(GameDataTotalTotalDTO dto, GameDataTotalTotalVO 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", dto.getGameId());
|
|
|
+ if (StringUtils.isNotBlank(dto.getSourceSystem())) {
|
|
|
+ dayNMap.put("sourceSystem", dto.getSourceSystem());
|
|
|
+ }
|
|
|
+
|
|
|
+ //买量表的充值相关数据
|
|
|
+ DayN buyDayN = getDayNByTableName(dayNMap, "ads_dayn_game_buy");
|
|
|
+ //自然量表的充值相关数据
|
|
|
+ DayN natureDayN = getDayNByTableName(dayNMap, "ads_dayn_game_nature");
|
|
|
+ //总量表的充值相关数据
|
|
|
+ DayN dayN = getDayNByTableName(dayNMap, "ads_dayn_game");
|
|
|
+
|
|
|
+ //设置买量数据
|
|
|
+ //新用户充值次数、金额、人数
|
|
|
+ vo.setBuyNewUserAmount(buyDayN == null ? BigDecimal.ZERO : buyDayN.getRechargeMoney());
|
|
|
+ vo.setBuyNewUserAmountNum(getNewUserAmountNum(dayNMap, "buy"));
|
|
|
+ vo.setBuyNewUserAmountCount(buyDayN == null ? 0L : buyDayN.getRechargeCount());
|
|
|
+ //新用户复充人数
|
|
|
+ vo.setBuyNewUserAgainNum(getNewUserAmountAgainNum(dayNMap, "buy"));
|
|
|
+
|
|
|
+ //老用户充值次数、人数、金额
|
|
|
+ vo.setBuyOldUserAmount(vo.getBuyAmount().subtract(vo.getBuyNewUserAmount()));
|
|
|
+ vo.setBuyOldUserCount(vo.getBuyAmountCount() - (vo.getBuyNewUserAmountCount()));
|
|
|
+ vo.setBuyOldUserNum(vo.getBuyAmountNum() - (vo.getBuyNewUserAmountNum()));
|
|
|
+
|
|
|
+ //新用户付费比
|
|
|
+ vo.setBuyNewUserRate(vo.getBuyAmountNum().compareTo(0L) == 0 ? BigDecimal.ZERO :
|
|
|
+ BigDecimal.valueOf(vo.getBuyNewUserAmountNum().doubleValue() / vo.getBuyAmountNum().doubleValue()).setScale(4, RoundingMode.HALF_UP));
|
|
|
+ //新用户付费率
|
|
|
+ vo.setBuyNewUserRoi(vo.getBuyRegNum().compareTo(0L) == 0 ? BigDecimal.ZERO :
|
|
|
+ BigDecimal.valueOf(vo.getBuyNewUserAmountNum().doubleValue() / vo.getBuyRegNum().doubleValue()).setScale(4, RoundingMode.HALF_UP));
|
|
|
+
|
|
|
+ //新用户客单价
|
|
|
+ vo.setBuyNewUserAvgAmount(vo.getBuyNewUserAmountCount().compareTo(0L) == 0 ? BigDecimal.ZERO :
|
|
|
+ BigDecimal.valueOf(vo.getBuyNewUserAmount().doubleValue() / vo.getBuyNewUserAmountCount().doubleValue()).setScale(4, RoundingMode.HALF_UP));
|
|
|
+
|
|
|
+ //复充率
|
|
|
+ vo.setBuyUserAgainRate(vo.getBuyNewUserAmountNum().compareTo(0L) == 0 ? BigDecimal.ZERO :
|
|
|
+ BigDecimal.valueOf(vo.getBuyNewUserAgainNum().doubleValue() / vo.getBuyNewUserAmountNum().doubleValue()).setScale(4, RoundingMode.HALF_UP));
|
|
|
+ //新用户复充率
|
|
|
+ vo.setBuyNewUserAgainRate(vo.getBuyNewUserTotalAmountNum().compareTo(0L) == 0 ? BigDecimal.ZERO :
|
|
|
+ BigDecimal.valueOf(vo.getBuyNewUserAgainNum().doubleValue() / vo.getBuyNewUserTotalAmountNum().doubleValue()).setScale(4, RoundingMode.HALF_UP));
|
|
|
+
|
|
|
+ //新用户付费ARPU
|
|
|
+ vo.setBuyNewUserAmountArpu(vo.getBuyNewUserAmountNum().compareTo(0L) == 0 ? BigDecimal.ZERO :
|
|
|
+ BigDecimal.valueOf(vo.getBuyNewUserAmount().doubleValue() / vo.getBuyNewUserAmountNum().doubleValue()).setScale(4, RoundingMode.HALF_UP));
|
|
|
+
|
|
|
+ //新用户回收率
|
|
|
+ vo.setBuyNewUserRechargeRate(vo.getCost().compareTo(BigDecimal.ZERO) == 0 ? BigDecimal.ZERO :
|
|
|
+ vo.getBuyNewUserAmount().divide(vo.getCost(), 4, RoundingMode.HALF_UP));
|
|
|
+ //新用户充值成本
|
|
|
+ vo.setBuyNewUserRechargeCost(vo.getBuyNewUserAmountNum() == 0 ? BigDecimal.ZERO :
|
|
|
+ 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()));
|
|
|
+ vo.setNatureOldUserCount(vo.getNatureAmountCount() - (vo.getNatureNewUserAmountCount()));
|
|
|
+ vo.setNatureOldUserNum(vo.getNatureAmountNum() - (vo.getNatureNewUserAmountNum()));
|
|
|
+
|
|
|
+ //新用户付费比
|
|
|
+ vo.setNatureNewUserRate(vo.getNatureAmountNum().compareTo(0L) == 0 ? BigDecimal.ZERO :
|
|
|
+ BigDecimal.valueOf(vo.getNatureNewUserAmountNum().doubleValue() / vo.getNatureAmountNum().doubleValue()).setScale(4, RoundingMode.HALF_UP));
|
|
|
+ //新用户付费率
|
|
|
+ vo.setNatureNewUserRoi(vo.getNatureRegNum().compareTo(0L) == 0 ? BigDecimal.ZERO :
|
|
|
+ BigDecimal.valueOf(vo.getNatureNewUserAmountNum().doubleValue() / vo.getNatureRegNum().doubleValue()).setScale(4, RoundingMode.HALF_UP));
|
|
|
+
|
|
|
+ //新用户客单价
|
|
|
+ vo.setNatureNewUserAvgAmount(vo.getNatureNewUserAmountCount().compareTo(0L) == 0 ? BigDecimal.ZERO :
|
|
|
+ BigDecimal.valueOf(vo.getNatureNewUserAmount().doubleValue() / vo.getNatureNewUserAmountCount().doubleValue()).setScale(4, RoundingMode.HALF_UP));
|
|
|
+
|
|
|
+ //复充率
|
|
|
+ vo.setNatureUserAgainRate(vo.getNatureNewUserAmountNum().compareTo(0L) == 0 ? BigDecimal.ZERO :
|
|
|
+ BigDecimal.valueOf(vo.getNatureNewUserAgainNum().doubleValue() / vo.getNatureNewUserAmountNum().doubleValue()).setScale(4, RoundingMode.HALF_UP));
|
|
|
+ //新用户复充率
|
|
|
+ vo.setNatureNewUserAgainRate(vo.getNatureNewUserTotalAmountNum().compareTo(0L) == 0 ? BigDecimal.ZERO :
|
|
|
+ BigDecimal.valueOf(vo.getNatureNewUserAgainNum().doubleValue() / vo.getNatureNewUserTotalAmountNum().doubleValue()).setScale(4, RoundingMode.HALF_UP));
|
|
|
+
|
|
|
+ //新用户付费ARPU
|
|
|
+ vo.setNatureNewUserAmountArpu(vo.getNatureNewUserAmountNum().compareTo(0L) == 0 ? BigDecimal.ZERO :
|
|
|
+ BigDecimal.valueOf(vo.getNatureNewUserAmount().doubleValue() / vo.getNatureNewUserAmountNum().doubleValue()).setScale(4, RoundingMode.HALF_UP));
|
|
|
+
|
|
|
+ //新用户回收率
|
|
|
+ vo.setNatureNewUserRechargeRate(vo.getCost().compareTo(BigDecimal.ZERO) == 0 ? BigDecimal.ZERO :
|
|
|
+ vo.getNatureNewUserAmount().divide(vo.getCost(), 4, RoundingMode.HALF_UP));
|
|
|
+ //新用户充值成本
|
|
|
+ vo.setNatureNewUserRechargeCost(vo.getNatureNewUserAmountNum() == 0 ? BigDecimal.ZERO :
|
|
|
+ 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()));
|
|
|
+ vo.setOldUserCount(vo.getAmountCount() - (vo.getNewUserAmountCount()));
|
|
|
+ vo.setOldUserNum(vo.getAmountNum() - (vo.getNewUserAmountNum()));
|
|
|
+
|
|
|
+ //新用户付费比
|
|
|
+ vo.setNewUserRate(vo.getAmountNum().compareTo(0L) == 0 ? BigDecimal.ZERO :
|
|
|
+ BigDecimal.valueOf(vo.getNewUserAmountNum().doubleValue() / vo.getAmountNum().doubleValue()).setScale(4, RoundingMode.HALF_UP));
|
|
|
+ //新用户付费率
|
|
|
+ vo.setNewUserRoi(vo.getRegNum().compareTo(0L) == 0 ? BigDecimal.ZERO :
|
|
|
+ BigDecimal.valueOf(vo.getNewUserAmountNum().doubleValue() / vo.getRegNum().doubleValue()).setScale(4, RoundingMode.HALF_UP));
|
|
|
+
|
|
|
+ //新用户客单价
|
|
|
+ vo.setNewUserAvgAmount(vo.getNewUserAmountCount().compareTo(0L) == 0 ? BigDecimal.ZERO :
|
|
|
+ BigDecimal.valueOf(vo.getNewUserAmount().doubleValue() / vo.getNewUserAmountCount().doubleValue()).setScale(4, RoundingMode.HALF_UP));
|
|
|
+
|
|
|
+ //复充率
|
|
|
+ vo.setUserAgainRate(vo.getNewUserAmountNum().compareTo(0L) == 0 ? BigDecimal.ZERO :
|
|
|
+ BigDecimal.valueOf(vo.getNewUserAgainNum().doubleValue() / vo.getNewUserAmountNum().doubleValue()).setScale(4, RoundingMode.HALF_UP));
|
|
|
+ //新用户复充率
|
|
|
+ vo.setNewUserAgainRate(vo.getNewUserTotalAmountNum().compareTo(0L) == 0 ? BigDecimal.ZERO :
|
|
|
+ BigDecimal.valueOf(vo.getNewUserAgainNum().doubleValue() / vo.getNewUserTotalAmountNum().doubleValue()).setScale(4, RoundingMode.HALF_UP));
|
|
|
+
|
|
|
+ //新用户付费ARPU
|
|
|
+ vo.setNewUserAmountArpu(vo.getNewUserAmountNum().compareTo(0L) == 0 ? BigDecimal.ZERO :
|
|
|
+ BigDecimal.valueOf(vo.getNewUserAmount().doubleValue() / vo.getNewUserAmountNum().doubleValue()).setScale(4, RoundingMode.HALF_UP));
|
|
|
+
|
|
|
+ //新用户回收率
|
|
|
+ vo.setNewUserRechargeRate(vo.getCost().compareTo(BigDecimal.ZERO) == 0 ? BigDecimal.ZERO :
|
|
|
+ vo.getNewUserAmount().divide(vo.getCost(), 4, RoundingMode.HALF_UP));
|
|
|
+ //新用户充值成本
|
|
|
+ vo.setNewUserRechargeCost(vo.getNewUserAmountNum() == 0 ? BigDecimal.ZERO :
|
|
|
+ vo.getCost().divide(BigDecimal.valueOf(vo.getNewUserAmountNum()), 4, RoundingMode.HALF_UP));
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* 每日流水贡献
|
|
|
*
|
|
@@ -1011,7 +1183,6 @@ public class GameDataServiceImpl implements IGameDataService {
|
|
|
dayN = DayN.builder()
|
|
|
.rechargeMoney(new BigDecimal(values[0]))
|
|
|
.rechargeCount(Long.valueOf(values[1]))
|
|
|
- .rechargeAgainNum(Long.valueOf(values[3]))
|
|
|
.build();
|
|
|
}
|
|
|
}
|
|
@@ -1024,7 +1195,7 @@ public class GameDataServiceImpl implements IGameDataService {
|
|
|
*
|
|
|
* @param dayNMap 参数Map
|
|
|
* @param type 查询的字段类型:buy、nature、总
|
|
|
- * @return 新用户充值认识
|
|
|
+ * @return 新用户充值人数
|
|
|
*/
|
|
|
private Long getNewUserAmountNum(Map<String, Object> dayNMap, String type) {
|
|
|
//查询新用户充值人数
|
|
@@ -1064,6 +1235,59 @@ public class GameDataServiceImpl implements IGameDataService {
|
|
|
return newUserAmountNumSql.getLong();
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 获取新用户复充人数方法
|
|
|
+ *
|
|
|
+ * @param dayNMap 参数列表
|
|
|
+ * @param type 查询字段类型: buy、nature、总量
|
|
|
+ * @return 新用户复充人数
|
|
|
+ */
|
|
|
+ private Long getNewUserAmountAgainNum(Map<String, Object> dayNMap, String type) {
|
|
|
+ //查询新用户充值人数
|
|
|
+ Criteria cri = Cnd.cri();
|
|
|
+ if (dayNMap.get("registerBeginDate") != null && dayNMap.get("registerEndDate") != null) {
|
|
|
+ //拼接注册时间查询条件
|
|
|
+ cri.where().andBetween("reg_time", dayNMap.get("registerBeginDate"), dayNMap.get("registerEndDate"));
|
|
|
+ }
|
|
|
+ if (dayNMap.get("gameId") != null) {
|
|
|
+ //拼接游戏ID查询条件
|
|
|
+ cri.where().andEquals("game_id", dayNMap.get("gameId"));
|
|
|
+ }
|
|
|
+ if (dayNMap.get("sourceSystem") != null) {
|
|
|
+ //拼接SDK来源查询条件
|
|
|
+ cri.where().andEquals("source_system", dayNMap.get("sourceSystem"));
|
|
|
+ }
|
|
|
+ if (dayNMap.get("rechargeBeginDate") != null && dayNMap.get("rechargeEndDate") != null) {
|
|
|
+ //拼接充值时间查询条件
|
|
|
+ cri.where().andBetween("order_time", dayNMap.get("rechargeBeginDate"), dayNMap.get("rechargeEndDate"));
|
|
|
+ }
|
|
|
+ //拼接渠道id条件 取出自然量、买量、总量值
|
|
|
+ if (type.equals("buy")) {
|
|
|
+ cri.where().andNotEquals("agent_id", 0);
|
|
|
+ } else if (type.equals("nature")) {
|
|
|
+ cri.where().andEquals("agent_id", 0);
|
|
|
+ }
|
|
|
+ Sql newUserAmountAgainNumSql = Sqls.create("""
|
|
|
+ SELECT
|
|
|
+ COUNT(a.num)
|
|
|
+ FROM(
|
|
|
+ SELECT
|
|
|
+ COUNT(user_id) num
|
|
|
+ FROM
|
|
|
+ game_ads.ads_information
|
|
|
+ """ + cri +
|
|
|
+ """
|
|
|
+ GROUP BY user_id
|
|
|
+ HAVING COUNT(user_id) > 1
|
|
|
+ ) a;
|
|
|
+ """);
|
|
|
+ newUserAmountAgainNumSql.setCallback(Sqls.callback.longValue());
|
|
|
+ //执行sql
|
|
|
+ dao.execute(newUserAmountAgainNumSql);
|
|
|
+ //得到结果 新用户充值人数
|
|
|
+ return newUserAmountAgainNumSql.getLong();
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* 通过反射来获取Cn的值
|
|
|
*
|
|
@@ -2075,7 +2299,43 @@ public class GameDataServiceImpl implements IGameDataService {
|
|
|
|
|
|
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
|
|
|
+ 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
|
|
|
game_ads.ads_game_day
|