|
@@ -356,32 +356,35 @@ public class IActiveDataServiceImpl implements IActiveDataService {
|
|
|
) AS m12
|
|
|
""".formatted(type, type));
|
|
|
} else if ("ads_game_active_order_day".equals(tableName)) {
|
|
|
- // 第N天新用户数/第N天老用户数/累计到第N天的新用户数
|
|
|
+ // 第N天新增付费用户数/第N天老活跃用户数/累计到第N天的付费用户数/累计到第N天的活跃人数
|
|
|
//90天数据
|
|
|
for (int day = 1; day <= 90; day++) {
|
|
|
trendDay.append("""
|
|
|
CONCAT( SUM(CAST(SPLIT_PART(%sda%s, '/', 1) AS BIGINT(20))), '/',
|
|
|
SUM(CAST(SPLIT_PART(%sda%s, '/', 2) AS BIGINT(20))), '/',
|
|
|
- SUM(IF(DATE_ADD(dt, INTERVAL %s day) <= Local.now(), CAST(SPLIT_PART(%sda%s, '/', 3) AS BIGINT(20)), 0))
|
|
|
+ SUM(IF(DATE_ADD(dt, INTERVAL %s day) <= Local.now(), CAST(SPLIT_PART(%sda%s, '/', 3) AS BIGINT(20)), 0)), '/',
|
|
|
+ SUM(IF(DATE_ADD(dt, INTERVAL %s day) <= Local.now(), CAST(SPLIT_PART(%sda%s, '/', 4) AS BIGINT(20)), 0))
|
|
|
) AS da%s,
|
|
|
- """.formatted(type, day, day-1, type, day));
|
|
|
+ """.formatted(type, day, type, day, day-1, type, day, day-1, type, day, day));
|
|
|
}
|
|
|
//m4-m11数据
|
|
|
for (int month = 4; month < 12; month++) {
|
|
|
trendDay.append("""
|
|
|
CONCAT( SUM(CAST(SPLIT_PART(%sm%s, '/', 1) AS BIGINT(20))), '/',
|
|
|
SUM(CAST(SPLIT_PART(%sm%s, '/', 2) AS BIGINT(20))), '/',
|
|
|
- SUM(IF(DATE_ADD(dt, INTERVAL %s month) <= Local.now(), CAST(SPLIT_PART(%sm%s, '/', 3) AS BIGINT(20)), 0))
|
|
|
+ SUM(IF(DATE_ADD(dt, INTERVAL %s month) <= Local.now(), CAST(SPLIT_PART(%sm%s, '/', 3) AS BIGINT(20)), 0)), '/',
|
|
|
+ SUM(IF(DATE_ADD(dt, INTERVAL %s month) <= Local.now(), CAST(SPLIT_PART(%sm%s, '/', 4) AS BIGINT(20)), 0))
|
|
|
) AS m%s,
|
|
|
- """.formatted(type, month, month, type, month));
|
|
|
+ """.formatted(type, month, type, month, month, type, month, month, type, month, month));
|
|
|
}
|
|
|
//m12数据
|
|
|
trendDay.append("""
|
|
|
CONCAT( SUM(CAST(SPLIT_PART(%sm12, '/', 1) AS BIGINT(20))), '/',
|
|
|
SUM(CAST(SPLIT_PART(%sm12, '/', 2) AS BIGINT(20))), '/',
|
|
|
- SUM(IF(DATE_ADD(dt, INTERVAL 12 month) <= Local.now(), CAST(SPLIT_PART(%sm12, '/', 3) AS BIGINT(20)), 0))
|
|
|
- ) AS m12,
|
|
|
- """.formatted(type, type, type));
|
|
|
+ SUM(IF(DATE_ADD(dt, INTERVAL 12 month) <= Local.now(), CAST(SPLIT_PART(%sm12, '/', 3) AS BIGINT(20)), 0)), '/',
|
|
|
+ SUM(IF(DATE_ADD(dt, INTERVAL 12 month) <= Local.now(), CAST(SPLIT_PART(%sm12, '/', 4) AS BIGINT(20)), 0))
|
|
|
+ ) AS m12
|
|
|
+ """.formatted(type, type, type, type));
|
|
|
} else {
|
|
|
|
|
|
}
|
|
@@ -417,13 +420,14 @@ public class IActiveDataServiceImpl implements IActiveDataService {
|
|
|
//处理付费留存数据
|
|
|
activeDataDayNFieldMapList.forEach(dayNFieldMapList -> {
|
|
|
try {
|
|
|
- // 第N天新用户数/第N天老用户数/累计到第N天的新用户数/付费留存率
|
|
|
+ // 第N天的新增付费用户,第N天的老活跃用户,第N天的累计付费用户,第N天的累计活跃用户,付费留存率
|
|
|
String[] temps = ((String) dayNFieldMapList.getT1().get(vo)).split("/");
|
|
|
dayNFieldMapList.getT2().set(vo, ActiveDataTrendVO.builder()
|
|
|
- .newUserNum(Long.valueOf(temps[0]))
|
|
|
- .oldUserNum(Long.valueOf(temps[1]))
|
|
|
- .newUserTotalNum(Long.valueOf(temps[2]))
|
|
|
- .amountActiveRate(new BigDecimal(temps[3]))
|
|
|
+ .newUserAmountNum(Long.valueOf(temps[0]))
|
|
|
+ .oldActiveUserNum(Long.valueOf(temps[1]))
|
|
|
+ .newUserTotalAmountNum(Long.valueOf(temps[2]))
|
|
|
+ .newActiveUserTotalNum(Long.valueOf(temps[3]))
|
|
|
+ .amountActiveRate(new BigDecimal(temps[4]))
|
|
|
.build());
|
|
|
} catch (IllegalAccessException e) {
|
|
|
e.printStackTrace();
|
|
@@ -436,10 +440,6 @@ public class IActiveDataServiceImpl implements IActiveDataService {
|
|
|
// 第N天新用户数/第N天老用户数/累计到第N天的新用户数/付费留存率
|
|
|
String[] temps = ((String) dayNFieldMapList.getT1().get(vo)).split("/");
|
|
|
dayNFieldMapList.getT2().set(vo, ActiveDataTrendVO.builder()
|
|
|
- .newUserNum(Long.valueOf(temps[0]))
|
|
|
- .oldUserNum(Long.valueOf(temps[1]))
|
|
|
- .newUserTotalNum(Long.valueOf(temps[2]))
|
|
|
- .amountActiveRate(new BigDecimal(temps[3]))
|
|
|
.build());
|
|
|
} catch (IllegalAccessException e) {
|
|
|
e.printStackTrace();
|
|
@@ -478,19 +478,19 @@ public class IActiveDataServiceImpl implements IActiveDataService {
|
|
|
} else if ("amount".equals(activeType)) {
|
|
|
activeDataDayNTotalFieldMapList.forEach(dayNFieldMapList -> {
|
|
|
try {
|
|
|
+ // 第N天新增付费用户数/第N天老活跃用户数/累计到第N天的付费用户数/累计到第N天的活跃人数
|
|
|
String[] temps = ((String) dayNFieldMapList.getT1().get(vo)).split("/");
|
|
|
- //第N天的新用户数
|
|
|
- Long newUserNum = Long.valueOf(temps[0]);
|
|
|
- //第N天的老用户数
|
|
|
- Long oldUserNum = Long.valueOf(temps[1]);
|
|
|
- //累计到第N天的新用户数
|
|
|
- Long newUserTotalNum = Long.valueOf(temps[2]);
|
|
|
+ //累计到第N天的活跃人数(活跃人数)
|
|
|
+ Long activeUserNum = Long.valueOf(temps[3]);
|
|
|
+ //累计到第N天的付费人数
|
|
|
+ Long amountTotalNum = Long.valueOf(temps[2]);
|
|
|
dayNFieldMapList.getT2().set(vo, ActiveDataTrendVO.builder()
|
|
|
- .newUserNum(newUserNum)
|
|
|
- .oldUserNum(oldUserNum)
|
|
|
- .newUserTotalNum(newUserTotalNum)
|
|
|
- .amountActiveRate(newUserTotalNum == 0L ? BigDecimal.ZERO :
|
|
|
- BigDecimal.valueOf((newUserNum.doubleValue() + oldUserNum.doubleValue()) / newUserTotalNum.doubleValue())
|
|
|
+ .newUserAmountNum(Long.valueOf(temps[0]))
|
|
|
+ .oldActiveUserNum(Long.valueOf(temps[1]))
|
|
|
+ .newUserTotalAmountNum(amountTotalNum)
|
|
|
+ .newActiveUserTotalNum(activeUserNum)
|
|
|
+ .amountActiveRate(amountTotalNum == 0L ? BigDecimal.ZERO :
|
|
|
+ BigDecimal.valueOf(activeUserNum.doubleValue() / amountTotalNum.doubleValue())
|
|
|
.setScale(4, RoundingMode.HALF_UP))
|
|
|
.build());
|
|
|
} catch (IllegalAccessException e) {
|