|
@@ -1,11 +1,15 @@
|
|
|
package com.zanxiang.game.data.serve.service.impl;
|
|
|
|
|
|
+import com.google.gson.Gson;
|
|
|
import com.zanxiang.game.data.serve.pojo.dto.GameDataDayDTO;
|
|
|
import com.zanxiang.game.data.serve.pojo.dto.GameDataTotalDTO;
|
|
|
import com.zanxiang.game.data.serve.pojo.vo.GameDataDayVO;
|
|
|
import com.zanxiang.game.data.serve.pojo.vo.GameDataTotalVO;
|
|
|
import com.zanxiang.game.data.serve.service.IGameDataService;
|
|
|
import com.zanxiang.game.data.serve.utils.Page;
|
|
|
+import com.zanxiang.module.util.DateUtil;
|
|
|
+import lombok.Builder;
|
|
|
+import lombok.Data;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
import org.apache.commons.lang3.StringUtils;
|
|
|
import org.nutz.dao.Cnd;
|
|
@@ -16,9 +20,17 @@ import org.nutz.dao.sql.Criteria;
|
|
|
import org.nutz.dao.sql.Sql;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
+import org.springframework.util.CollectionUtils;
|
|
|
|
|
|
+import java.math.BigDecimal;
|
|
|
+import java.math.BigInteger;
|
|
|
+import java.math.RoundingMode;
|
|
|
import java.time.LocalDate;
|
|
|
+import java.util.ArrayList;
|
|
|
+import java.util.HashMap;
|
|
|
import java.util.List;
|
|
|
+import java.util.Map;
|
|
|
+import java.util.stream.Collectors;
|
|
|
|
|
|
/**
|
|
|
* @author tianhua
|
|
@@ -77,12 +89,12 @@ public class GameDataServiceImpl implements IGameDataService {
|
|
|
|
|
|
@Override
|
|
|
public Page<GameDataTotalVO> getGameDataTotal(GameDataTotalDTO dto) {
|
|
|
- //如果注册时间参数为空,默认设置为当天
|
|
|
+ //如果注册时间参数为空,默认设置查询当天数据
|
|
|
if (dto.getRegisteredBeginDate() == null || dto.getRechargeEndDate() == null) {
|
|
|
dto.setRegisteredBeginDate(LocalDate.now());
|
|
|
dto.setRegisteredEndDate(LocalDate.now());
|
|
|
}
|
|
|
- //如果充值时间参数为空,默认设置为注册时间
|
|
|
+ //如果充值时间参数为空,默认设置查询当天数据
|
|
|
if (dto.getRechargeBeginDate() == null || dto.getRechargeEndDate() == null) {
|
|
|
dto.setRechargeBeginDate(LocalDate.now());
|
|
|
dto.setRechargeEndDate(LocalDate.now());
|
|
@@ -121,33 +133,135 @@ public class GameDataServiceImpl implements IGameDataService {
|
|
|
//设置查询总数
|
|
|
pager.setRecordCount(list.size());
|
|
|
|
|
|
- /*//根据充值时间修改值
|
|
|
- list.stream().map(new Function<GameDataTotalVO, Object>() {
|
|
|
- //第一个参数 转换之前的参数
|
|
|
- //第二个参数,转换之后的参数
|
|
|
- //apply中的传入参数 就是流中的每一个数据
|
|
|
- //返回值类型就是需要转换之后的类型
|
|
|
- @Override
|
|
|
- public Object apply(GameDataTotalVO gameDataTotalVO) {
|
|
|
+ //根据充值时间修改值
|
|
|
+ List<GameDataTotalVO> gameDataTotalVOList = list.stream().map(vo -> {
|
|
|
+ //设置查询参数map
|
|
|
+ Map<String, Object> dayNMap = new HashMap<>(4);
|
|
|
+ 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());
|
|
|
|
|
|
- //联表查询根据充值时间查询出相关参数
|
|
|
+ //买量表的充值相关数据
|
|
|
+ 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(buyDayN == null ? BigInteger.ZERO : buyDayN.getRechargeNum());
|
|
|
+ vo.setBuyNewUserAmountCount(buyDayN == null ? BigInteger.ZERO : buyDayN.getRechargeCount());
|
|
|
+ //新用户复充人数
|
|
|
+ vo.setBuyNewUserAgainNum(buyDayN == null ? BigInteger.ZERO : buyDayN.getRechargeAgainNum());
|
|
|
|
|
|
- //设置新用户相关数据
|
|
|
+ //老用户充值次数、人数、金额
|
|
|
+ vo.setBuyOldUserAmount(vo.getBuyAmount().subtract(vo.getBuyNewUserAmount()));
|
|
|
+ vo.setBuyOldUserCount(vo.getBuyAmountCount().subtract(vo.getBuyNewUserAmountCount()));
|
|
|
+ vo.setBuyOldUserNum(vo.getBuyAmountNum().subtract(vo.getBuyNewUserAmountNum()));
|
|
|
|
|
|
+ //新用户付费比
|
|
|
+ vo.setBuyNewUserRate(vo.getBuyAmountNum().compareTo(BigInteger.ZERO) == 0 ? BigDecimal.ZERO :
|
|
|
+ BigDecimal.valueOf(vo.getBuyNewUserAmountNum().doubleValue() / vo.getBuyAmountNum().doubleValue()).setScale(4, RoundingMode.HALF_UP));
|
|
|
+ //新用户付费率
|
|
|
+ vo.setBuyNewUserRoi(vo.getBuyRegNum().compareTo(BigInteger.ZERO) == 0 ? BigDecimal.ZERO :
|
|
|
+ BigDecimal.valueOf(vo.getBuyNewUserAmountNum().doubleValue() / vo.getBuyRegNum().doubleValue()).setScale(4, RoundingMode.HALF_UP));
|
|
|
|
|
|
- //联表查询新用户复充人数
|
|
|
+ //新用户客单价
|
|
|
+ vo.setBuyNewUserAvgAmount(vo.getBuyNewUserAmountCount().compareTo(BigInteger.ZERO) == 0 ? BigDecimal.ZERO :
|
|
|
+ BigDecimal.valueOf(vo.getBuyNewUserAmount().doubleValue() / vo.getBuyNewUserAmountCount().doubleValue()).setScale(4, RoundingMode.HALF_UP));
|
|
|
|
|
|
+ //复充率
|
|
|
+ vo.setBuyUserAgainRate(vo.getBuyNewUserAmountNum().compareTo(BigInteger.ZERO) == 0 ? BigDecimal.ZERO :
|
|
|
+ BigDecimal.valueOf(vo.getBuyNewUserAgainNum().doubleValue() / vo.getBuyNewUserAmountNum().doubleValue()).setScale(4, RoundingMode.HALF_UP));
|
|
|
+ //新用户复充率
|
|
|
+ vo.setBuyNewUserAgainRate(vo.getBuyNewUserTotalAmountNum().compareTo(BigInteger.ZERO) == 0 ? BigDecimal.ZERO :
|
|
|
+ BigDecimal.valueOf(vo.getBuyNewUserAgainNum().doubleValue() / vo.getBuyNewUserTotalAmountNum().doubleValue()).setScale(4, RoundingMode.HALF_UP));
|
|
|
|
|
|
- return null;
|
|
|
- }
|
|
|
- });*/
|
|
|
+ //新用户付费ARPU
|
|
|
+ vo.setBuyNewUserAmountArpu(vo.getBuyNewUserAmountNum().compareTo(BigInteger.ZERO) == 0 ? BigDecimal.ZERO :
|
|
|
+ BigDecimal.valueOf(vo.getBuyNewUserAmount().doubleValue() / vo.getBuyNewUserAmountNum().doubleValue()).setScale(4, RoundingMode.HALF_UP));
|
|
|
+
|
|
|
+ //设置自然量数据
|
|
|
+ //新用户充值次数、金额、人数
|
|
|
+ vo.setNatureNewUserAmount(natureDayN == null ? BigDecimal.ZERO : natureDayN.getRechargeMoney());
|
|
|
+ vo.setNatureNewUserAmountNum(natureDayN == null ? BigInteger.ZERO : natureDayN.getRechargeNum());
|
|
|
+ vo.setNatureNewUserAmountCount(natureDayN == null ? BigInteger.ZERO : natureDayN.getRechargeCount());
|
|
|
+ //新用户复充人数
|
|
|
+ vo.setNatureNewUserAgainNum(natureDayN == null ? BigInteger.ZERO : natureDayN.getRechargeAgainNum());
|
|
|
+
|
|
|
+ //老用户充值次数、人数、金额
|
|
|
+ vo.setNatureOldUserAmount(vo.getNatureAmount().subtract(vo.getNatureNewUserAmount()));
|
|
|
+ vo.setNatureOldUserCount(vo.getNatureAmountCount().subtract(vo.getNatureNewUserAmountCount()));
|
|
|
+ vo.setNatureOldUserNum(vo.getNatureAmountNum().subtract(vo.getNatureNewUserAmountNum()));
|
|
|
+
|
|
|
+ //新用户付费比
|
|
|
+ vo.setNatureNewUserRate(vo.getNatureAmountNum().compareTo(BigInteger.ZERO) == 0 ? BigDecimal.ZERO :
|
|
|
+ BigDecimal.valueOf(vo.getNatureNewUserAmountNum().doubleValue() / vo.getNatureAmountNum().doubleValue()).setScale(4, RoundingMode.HALF_UP));
|
|
|
+ //新用户付费率
|
|
|
+ vo.setNatureNewUserRoi(vo.getNatureRegNum().compareTo(BigInteger.ZERO) == 0 ? BigDecimal.ZERO :
|
|
|
+ BigDecimal.valueOf(vo.getNatureNewUserAmountNum().doubleValue() / vo.getNatureRegNum().doubleValue()).setScale(4, RoundingMode.HALF_UP));
|
|
|
+
|
|
|
+ //新用户客单价
|
|
|
+ vo.setNatureNewUserAvgAmount(vo.getNatureNewUserAmountCount().compareTo(BigInteger.ZERO) == 0 ? BigDecimal.ZERO :
|
|
|
+ BigDecimal.valueOf(vo.getNatureNewUserAmount().doubleValue() / vo.getNatureNewUserAmountCount().doubleValue()).setScale(4, RoundingMode.HALF_UP));
|
|
|
+
|
|
|
+ //复充率
|
|
|
+ vo.setNatureUserAgainRate(vo.getNatureNewUserAmountNum().compareTo(BigInteger.ZERO) == 0 ? BigDecimal.ZERO :
|
|
|
+ BigDecimal.valueOf(vo.getNatureNewUserAgainNum().doubleValue() / vo.getNatureNewUserAmountNum().doubleValue()).setScale(4, RoundingMode.HALF_UP));
|
|
|
+ //新用户复充率
|
|
|
+ vo.setNatureNewUserAgainRate(vo.getNatureNewUserTotalAmountNum().compareTo(BigInteger.ZERO) == 0 ? BigDecimal.ZERO :
|
|
|
+ BigDecimal.valueOf(vo.getNatureNewUserAgainNum().doubleValue() / vo.getNatureNewUserTotalAmountNum().doubleValue()).setScale(4, RoundingMode.HALF_UP));
|
|
|
+
|
|
|
+ //新用户付费ARPU
|
|
|
+ vo.setNatureNewUserAmountArpu(vo.getNatureNewUserAmountNum().compareTo(BigInteger.ZERO) == 0 ? BigDecimal.ZERO :
|
|
|
+ BigDecimal.valueOf(vo.getNatureNewUserAmount().doubleValue() / vo.getNatureNewUserAmountNum().doubleValue()).setScale(4, RoundingMode.HALF_UP));
|
|
|
+
|
|
|
+ //设置总量数据
|
|
|
+ //新用户充值次数、金额、人数
|
|
|
+ vo.setNewUserAmount(dayN == null ? BigDecimal.ZERO : dayN.getRechargeMoney());
|
|
|
+ vo.setNewUserAmountNum(dayN == null ? BigInteger.ZERO : dayN.getRechargeNum());
|
|
|
+ vo.setNewUserAmountCount(dayN == null ? BigInteger.ZERO : dayN.getRechargeCount());
|
|
|
+ //新用户复充人数
|
|
|
+ vo.setNewUserAgainNum(dayN == null ? BigInteger.ZERO : dayN.getRechargeAgainNum());
|
|
|
+
|
|
|
+ //老用户充值次数、人数、金额
|
|
|
+ vo.setOldUserAmount(vo.getAmount().subtract(vo.getNewUserAmount()));
|
|
|
+ vo.setOldUserCount(vo.getAmountCount().subtract(vo.getNewUserAmountCount()));
|
|
|
+ vo.setOldUserNum(vo.getAmountNum().subtract(vo.getNewUserAmountNum()));
|
|
|
+
|
|
|
+ //新用户付费比
|
|
|
+ vo.setNewUserRate(vo.getAmountNum().compareTo(BigInteger.ZERO) == 0 ? BigDecimal.ZERO :
|
|
|
+ BigDecimal.valueOf(vo.getNewUserAmountNum().doubleValue() / vo.getAmountNum().doubleValue()).setScale(4, RoundingMode.HALF_UP));
|
|
|
+ //新用户付费率
|
|
|
+ vo.setNewUserRoi(vo.getRegNum().compareTo(BigInteger.ZERO) == 0 ? BigDecimal.ZERO :
|
|
|
+ BigDecimal.valueOf(vo.getNewUserAmountNum().doubleValue() / vo.getRegNum().doubleValue()).setScale(4, RoundingMode.HALF_UP));
|
|
|
+
|
|
|
+ //新用户客单价
|
|
|
+ vo.setNewUserAvgAmount(vo.getNewUserAmountCount().compareTo(BigInteger.ZERO) == 0 ? BigDecimal.ZERO :
|
|
|
+ BigDecimal.valueOf(vo.getNewUserAmount().doubleValue() / vo.getNewUserAmountCount().doubleValue()).setScale(4, RoundingMode.HALF_UP));
|
|
|
+
|
|
|
+ //复充率
|
|
|
+ vo.setUserAgainRate(vo.getNewUserAmountNum().compareTo(BigInteger.ZERO) == 0 ? BigDecimal.ZERO :
|
|
|
+ BigDecimal.valueOf(vo.getNewUserAgainNum().doubleValue() / vo.getNewUserAmountNum().doubleValue()).setScale(4, RoundingMode.HALF_UP));
|
|
|
+ //新用户复充率
|
|
|
+ vo.setNewUserAgainRate(vo.getNewUserTotalAmountNum().compareTo(BigInteger.ZERO) == 0 ? BigDecimal.ZERO :
|
|
|
+ BigDecimal.valueOf(vo.getNewUserAgainNum().doubleValue() / vo.getNewUserTotalAmountNum().doubleValue()).setScale(4, RoundingMode.HALF_UP));
|
|
|
+
|
|
|
+ //新用户付费ARPU
|
|
|
+ vo.setNewUserAmountArpu(vo.getNewUserAmountNum().compareTo(BigInteger.ZERO) == 0 ? BigDecimal.ZERO :
|
|
|
+ BigDecimal.valueOf(vo.getNewUserAmount().doubleValue() / vo.getNewUserAmountNum().doubleValue()).setScale(4, RoundingMode.HALF_UP));
|
|
|
+
|
|
|
+ return vo;
|
|
|
+ }).collect(Collectors.toList());
|
|
|
|
|
|
//返回list结果封装到page对象里
|
|
|
- return new Page<>(list, pager);
|
|
|
+ return new Page<>(gameDataTotalVOList, pager);
|
|
|
}
|
|
|
|
|
|
-
|
|
|
/**
|
|
|
* 游戏每日数据SQL
|
|
|
*
|
|
@@ -156,122 +270,123 @@ public class GameDataServiceImpl implements IGameDataService {
|
|
|
private String gameDataDaySql() {
|
|
|
return """
|
|
|
SELECT
|
|
|
- dt cost_date,
|
|
|
- game_name,
|
|
|
- game_classify,
|
|
|
-
|
|
|
- buy_reg_num,
|
|
|
- nature_reg_num,
|
|
|
- reg_num,
|
|
|
-
|
|
|
- buy_first_new_user_amount_count,
|
|
|
- buy_first_new_user_amount_num,
|
|
|
- buy_first_new_user_amount,
|
|
|
- buy_old_user_count,
|
|
|
- buy_old_user_num,
|
|
|
- buy_old_user_amount,
|
|
|
- buy_amount_count,
|
|
|
- buy_amount_num,
|
|
|
- buy_amount,
|
|
|
- buy_new_user_total_amount_count,
|
|
|
- buy_new_user_total_amount_num,
|
|
|
- buy_new_user_total_amount,
|
|
|
- buy_first_roi,
|
|
|
- buy_today_roi,
|
|
|
- buy_new_user_rate,
|
|
|
- buy_first_avg_amount,
|
|
|
- buy_today_avg_amount,
|
|
|
- buy_avg_amount,
|
|
|
- buy_user_again_rate,
|
|
|
- buy_reg_user_arpu,
|
|
|
- buy_first_amount_arpu,
|
|
|
- buy_today_amount_arpu,
|
|
|
- buy_amount_arpu,
|
|
|
- buy_amount_d1,
|
|
|
- buy_amount_d3,
|
|
|
- buy_amount_d5,
|
|
|
- buy_amount_d7,
|
|
|
- buy_amount_d15,
|
|
|
- buy_amount_m1,
|
|
|
- buy_amount_m2,
|
|
|
- buy_amount_m3,
|
|
|
- buy_amount_m6,
|
|
|
- buy_amount_sum,
|
|
|
-
|
|
|
- nature_first_new_user_amount_count,
|
|
|
- nature_first_new_user_amount_num,
|
|
|
- nature_first_new_user_amount,
|
|
|
- nature_old_user_count,
|
|
|
- nature_old_user_num,
|
|
|
- nature_old_user_amount,
|
|
|
- nature_amount_count,
|
|
|
- nature_amount_num,
|
|
|
- nature_amount,
|
|
|
- nature_new_user_total_amount_count,
|
|
|
- nature_new_user_total_amount_num,
|
|
|
- nature_new_user_total_amount,
|
|
|
- nature_first_roi,
|
|
|
- nature_today_roi,
|
|
|
- nature_new_user_rate,
|
|
|
- nature_first_avg_amount,
|
|
|
- nature_today_avg_amount,
|
|
|
- nature_avg_amount,
|
|
|
- nature_user_again_rate,
|
|
|
- nature_reg_user_arpu,
|
|
|
- nature_first_amount_arpu,
|
|
|
- nature_today_amount_arpu,
|
|
|
- nature_amount_arpu,
|
|
|
- nature_amount_d1,
|
|
|
- nature_amount_d3,
|
|
|
- nature_amount_d5,
|
|
|
- nature_amount_d7,
|
|
|
- nature_amount_d15,
|
|
|
- nature_amount_m1,
|
|
|
- nature_amount_m2,
|
|
|
- nature_amount_m3,
|
|
|
- nature_amount_m6,
|
|
|
- nature_amount_sum,
|
|
|
+ dt cost_date,
|
|
|
+ game_name,
|
|
|
+ game_classify,
|
|
|
+
|
|
|
+ buy_reg_num,
|
|
|
+ nature_reg_num,
|
|
|
+ reg_num,
|
|
|
+
|
|
|
+ buy_first_new_user_amount_count,
|
|
|
+ buy_first_new_user_amount_num,
|
|
|
+ buy_first_new_user_amount,
|
|
|
+ buy_old_user_count,
|
|
|
+ buy_old_user_num,
|
|
|
+ buy_old_user_amount,
|
|
|
+ buy_amount_count,
|
|
|
+ buy_amount_num,
|
|
|
+ buy_amount,
|
|
|
+ buy_new_user_total_amount_count,
|
|
|
+ buy_new_user_total_amount_num,
|
|
|
+ buy_new_user_total_amount,
|
|
|
+ buy_first_roi,
|
|
|
+ buy_today_roi,
|
|
|
+ buy_new_user_rate,
|
|
|
+ buy_first_avg_amount,
|
|
|
+ buy_today_avg_amount,
|
|
|
+ buy_avg_amount,
|
|
|
+ buy_user_again_rate,
|
|
|
+ buy_reg_user_arpu,
|
|
|
+ buy_first_amount_arpu,
|
|
|
+ buy_today_amount_arpu,
|
|
|
+ buy_amount_arpu,
|
|
|
+ buy_amount_d1,
|
|
|
+ buy_amount_d3,
|
|
|
+ buy_amount_d5,
|
|
|
+ buy_amount_d7,
|
|
|
+ buy_amount_d15,
|
|
|
+ buy_amount_m1,
|
|
|
+ buy_amount_m2,
|
|
|
+ buy_amount_m3,
|
|
|
+ buy_amount_m6,
|
|
|
+ buy_amount_sum,
|
|
|
+
|
|
|
+ nature_first_new_user_amount_count,
|
|
|
+ nature_first_new_user_amount_num,
|
|
|
+ nature_first_new_user_amount,
|
|
|
+ nature_old_user_count,
|
|
|
+ nature_old_user_num,
|
|
|
+ nature_old_user_amount,
|
|
|
+ nature_amount_count,
|
|
|
+ nature_amount_num,
|
|
|
+ nature_amount,
|
|
|
+ nature_new_user_total_amount_count,
|
|
|
+ nature_new_user_total_amount_num,
|
|
|
+ nature_new_user_total_amount,
|
|
|
+ nature_first_roi,
|
|
|
+ nature_today_roi,
|
|
|
+ nature_new_user_rate,
|
|
|
+ nature_first_avg_amount,
|
|
|
+ nature_today_avg_amount,
|
|
|
+ nature_avg_amount,
|
|
|
+ nature_user_again_rate,
|
|
|
+ nature_reg_user_arpu,
|
|
|
+ nature_first_amount_arpu,
|
|
|
+ nature_today_amount_arpu,
|
|
|
+ nature_amount_arpu,
|
|
|
+ nature_amount_d1,
|
|
|
+ nature_amount_d3,
|
|
|
+ nature_amount_d5,
|
|
|
+ nature_amount_d7,
|
|
|
+ nature_amount_d15,
|
|
|
+ nature_amount_m1,
|
|
|
+ nature_amount_m2,
|
|
|
+ nature_amount_m3,
|
|
|
+ nature_amount_m6,
|
|
|
+ nature_amount_sum,
|
|
|
+
|
|
|
+ first_new_user_amount_count,
|
|
|
+ first_new_user_amount_num,
|
|
|
+ first_new_user_amount,
|
|
|
+ old_user_count,
|
|
|
+ old_user_num,
|
|
|
+ old_user_amount,
|
|
|
+ amount_count,
|
|
|
+ amount_num,
|
|
|
+ amount,
|
|
|
+ new_user_total_amount_count,
|
|
|
+ new_user_total_amount_num,
|
|
|
+ new_user_total_amount,
|
|
|
+ first_roi,
|
|
|
+ today_roi,
|
|
|
+ new_user_rate,
|
|
|
+ first_avg_amount,
|
|
|
+ today_avg_amount,
|
|
|
+ avg_amount,
|
|
|
+ user_again_rate,
|
|
|
+ reg_user_arpu,
|
|
|
+ first_amount_arpu,
|
|
|
+ today_amount_arpu,
|
|
|
+ amount_arpu,
|
|
|
+ amount_d1,
|
|
|
+ amount_d3,
|
|
|
+ amount_d5,
|
|
|
+ amount_d7,
|
|
|
+ amount_d15,
|
|
|
+ amount_m1,
|
|
|
+ amount_m2,
|
|
|
+ amount_m3,
|
|
|
+ amount_m6,
|
|
|
+ amount_sum
|
|
|
|
|
|
- first_new_user_amount_count,
|
|
|
- first_new_user_amount_num,
|
|
|
- first_new_user_amount,
|
|
|
- old_user_count,
|
|
|
- old_user_num,
|
|
|
- old_user_amount,
|
|
|
- amount_count,
|
|
|
- amount_num,
|
|
|
- amount,
|
|
|
- new_user_total_amount_count,
|
|
|
- new_user_total_amount_num,
|
|
|
- new_user_total_amount,
|
|
|
- first_roi,
|
|
|
- today_roi,
|
|
|
- new_user_rate,
|
|
|
- first_avg_amount,
|
|
|
- today_avg_amount,
|
|
|
- avg_amount,
|
|
|
- user_again_rate,
|
|
|
- reg_user_arpu,
|
|
|
- first_amount_arpu,
|
|
|
- today_amount_arpu,
|
|
|
- amount_arpu,
|
|
|
- amount_d1,
|
|
|
- amount_d3,
|
|
|
- amount_d5,
|
|
|
- amount_d7,
|
|
|
- amount_d15,
|
|
|
- amount_m1,
|
|
|
- amount_m2,
|
|
|
- amount_m3,
|
|
|
- amount_m6,
|
|
|
- amount_sum
|
|
|
-
|
|
|
- FROM ads_game_day
|
|
|
+ FROM
|
|
|
+ ads_game_day
|
|
|
""";
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * 游戏总数居SQL
|
|
|
+ * 游戏总数据SQL
|
|
|
*
|
|
|
* @return String
|
|
|
*/
|
|
@@ -361,5 +476,113 @@ public class GameDataServiceImpl implements IGameDataService {
|
|
|
""";
|
|
|
}
|
|
|
|
|
|
+ /** 三张表共用的方法
|
|
|
+ * @param dayNMap 参数Map
|
|
|
+ * @param tableName 查询的表名
|
|
|
+ * @return DayN数据
|
|
|
+ */
|
|
|
+ private DayN getDayNByTableName(Map<String, Object> dayNMap, String tableName) {
|
|
|
+
|
|
|
+ //构架SQL语句,查询相关DayN表获取相关充值数据
|
|
|
+ Sql dayNSql = Sqls.create(
|
|
|
+ """
|
|
|
+ SELECT
|
|
|
+ dayN
|
|
|
+ FROM
|
|
|
+ $tableName
|
|
|
+ where
|
|
|
+ dt between @registerBeginDate and @registerEndDate
|
|
|
+ and game_id = @gameId
|
|
|
+ """
|
|
|
+ );
|
|
|
+ //sql语句传入参数
|
|
|
+ dayNSql.setParams(dayNMap);
|
|
|
+ //给定查询的表名
|
|
|
+ dayNSql.vars().set("tableName", tableName);
|
|
|
+ //设置回传
|
|
|
+ dayNSql.setCallback(Sqls.callback.strList());
|
|
|
+ //执行sql 获取数据到list中
|
|
|
+ dao.execute(dayNSql);
|
|
|
+
|
|
|
+ //将数据库中获取的所有结果封装到一个List中
|
|
|
+ List<String> dayNList = dayNSql.getList(String.class);
|
|
|
+ //构建一个内部类
|
|
|
+ DayN dayN = null;
|
|
|
+ //解析dayNList
|
|
|
+ if (!CollectionUtils.isEmpty(dayNList)) {
|
|
|
+ //将dayNList中json格式数据转换为 Map
|
|
|
+ Gson gson = new Gson();
|
|
|
+ List<Map<String, String>> jsonList = gson.fromJson(dayNList.toString(), ArrayList.class);
|
|
|
+ //用来存储数据的map
|
|
|
+ Map<String, String> resMap = new HashMap<>();
|
|
|
+ //对应的参数说明: 日期:每天充值金额-充值次数-充值人数-新用户复充人数
|
|
|
+ resMap.put("dayN", "0.00-0-0-0");
|
|
|
+ for (Map<String, String> jsonMap : jsonList) {
|
|
|
+ for (Map.Entry<String, String> entry : jsonMap.entrySet()) {
|
|
|
+ //key是充值日期
|
|
|
+ String key = entry.getKey();
|
|
|
+ String value = entry.getValue();
|
|
|
+ //将value按“-”分割
|
|
|
+ String[] resValues = value.split("-");
|
|
|
+ //判断充值日期 在充值日期内的数据进行计算
|
|
|
+ if (DateUtil.parseLocalDate(key).compareTo((LocalDate) dayNMap.get("rechargeBeginDate")) >= 0
|
|
|
+ && DateUtil.parseLocalDate(key).compareTo((LocalDate) dayNMap.get("rechargeEndDate")) <= 0) {
|
|
|
+ //获取原先的dayN的值
|
|
|
+ String[] oldValues = resMap.get("dayN").split("-");
|
|
|
+ //充值的金额
|
|
|
+ BigDecimal chargeMoney = new BigDecimal(oldValues[0]).add(new BigDecimal(resValues[0]));
|
|
|
+ //充值的次数
|
|
|
+ BigInteger count = new BigInteger(oldValues[1]).add(new BigInteger(resValues[1]));
|
|
|
+ //充值的人数
|
|
|
+ BigInteger num = new BigInteger(oldValues[2]).add(new BigInteger(resValues[2]));
|
|
|
+ //新用户复充人数
|
|
|
+ BigInteger againNum = new BigInteger(oldValues[3]).add(new BigInteger(resValues[3]));
|
|
|
+ //合并成字符串 更新dayN的值
|
|
|
+ String newValue = chargeMoney + "-" + count + "-" + num + "-" + againNum;
|
|
|
+ resMap.put("dayN", newValue);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //设置dayN的参数
|
|
|
+ if (!resMap.isEmpty() && !resMap.get("dayN").isEmpty()) {
|
|
|
+ String[] values = resMap.get("dayN").split("-");
|
|
|
+ dayN = DayN.builder()
|
|
|
+ .rechargeMoney(new BigDecimal(values[0]))
|
|
|
+ .rechargeCount(new BigInteger(values[1]))
|
|
|
+ .rechargeNum(new BigInteger(values[2]))
|
|
|
+ .rechargeAgainNum(new BigInteger(values[3]))
|
|
|
+ .build();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return dayN;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * DayN内部类
|
|
|
+ */
|
|
|
+ @Data
|
|
|
+ @Builder
|
|
|
+ public static class DayN {
|
|
|
+ /**
|
|
|
+ * 充值金额
|
|
|
+ */
|
|
|
+ private BigDecimal rechargeMoney;
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 充值次数
|
|
|
+ */
|
|
|
+ private BigInteger rechargeCount;
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 充值人数
|
|
|
+ */
|
|
|
+ private BigInteger rechargeNum;
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 新用户复充人数
|
|
|
+ */
|
|
|
+ private BigInteger rechargeAgainNum;
|
|
|
+ }
|
|
|
+
|
|
|
|
|
|
}
|