Add country dashboard ARPU summary
This commit is contained in:
parent
0464935619
commit
8feecc423c
@ -1,6 +1,7 @@
|
|||||||
package com.red.circle.console.app.service.app.datav;
|
package com.red.circle.console.app.service.app.datav;
|
||||||
|
|
||||||
import com.red.circle.console.app.dto.clientobject.datav.CountryDashboardCO;
|
import com.red.circle.console.app.dto.clientobject.datav.CountryDashboardCO;
|
||||||
|
import com.red.circle.console.app.dto.clientobject.datav.CountryDashboardArpuSummaryCO;
|
||||||
import com.red.circle.console.app.dto.clientobject.datav.CountryDashboardMetricCO;
|
import com.red.circle.console.app.dto.clientobject.datav.CountryDashboardMetricCO;
|
||||||
import com.red.circle.console.app.dto.clientobject.datav.CountryDashboardRechargeDetailCO;
|
import com.red.circle.console.app.dto.clientobject.datav.CountryDashboardRechargeDetailCO;
|
||||||
import com.red.circle.console.app.dto.cmd.datav.CountryDashboardQryCmd;
|
import com.red.circle.console.app.dto.cmd.datav.CountryDashboardQryCmd;
|
||||||
@ -79,6 +80,12 @@ public class CountryDashboardServiceImpl implements CountryDashboardService {
|
|||||||
public CountryDashboardCO query(CountryDashboardQryCmd cmd) {
|
public CountryDashboardCO query(CountryDashboardQryCmd cmd) {
|
||||||
ensurePeriodMetricSchema();
|
ensurePeriodMetricSchema();
|
||||||
QueryCondition condition = QueryCondition.of(cmd);
|
QueryCondition condition = QueryCondition.of(cmd);
|
||||||
|
CountryDashboardCO dashboard = queryPrecomputed(condition);
|
||||||
|
dashboard.setArpuSummary(buildArpuSummary(condition));
|
||||||
|
return dashboard;
|
||||||
|
}
|
||||||
|
|
||||||
|
private CountryDashboardCO queryPrecomputed(QueryCondition condition) {
|
||||||
Map<String, CountryDashboardMetricCO> rows = new LinkedHashMap<>();
|
Map<String, CountryDashboardMetricCO> rows = new LinkedHashMap<>();
|
||||||
|
|
||||||
mergeSql(rows, countryDashboardDAO.listPrecomputedPeriodMetrics(
|
mergeSql(rows, countryDashboardDAO.listPrecomputedPeriodMetrics(
|
||||||
@ -105,6 +112,13 @@ public class CountryDashboardServiceImpl implements CountryDashboardService {
|
|||||||
.setRecords(records);
|
.setRecords(records);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private CountryDashboardArpuSummaryCO buildArpuSummary(QueryCondition condition) {
|
||||||
|
return new CountryDashboardArpuSummaryCO()
|
||||||
|
.setDay(queryPrecomputed(condition.recentDays(1)))
|
||||||
|
.setThreeDay(queryPrecomputed(condition.recentDays(3)))
|
||||||
|
.setWeek(queryPrecomputed(condition.recentDays(7)));
|
||||||
|
}
|
||||||
|
|
||||||
private void mergeLiveSql(Map<String, CountryDashboardMetricCO> rows, QueryCondition condition) {
|
private void mergeLiveSql(Map<String, CountryDashboardMetricCO> rows, QueryCondition condition) {
|
||||||
mergeSql(rows, countryDashboardDAO.listNewUsers(
|
mergeSql(rows, countryDashboardDAO.listNewUsers(
|
||||||
condition.periodType, condition.startTime, condition.endTime,
|
condition.periodType, condition.startTime, condition.endTime,
|
||||||
@ -973,6 +987,34 @@ public class CountryDashboardServiceImpl implements CountryDashboardService {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private QueryCondition recentDays(int dayCount) {
|
||||||
|
LocalDate end = LocalDate.now(statZoneId);
|
||||||
|
LocalDate start = end.minusDays(Math.max(1, dayCount) - 1L);
|
||||||
|
Instant recentStartInstant = start.atStartOfDay(statZoneId).toInstant();
|
||||||
|
Instant recentEndInstant = end.plusDays(1).atStartOfDay(statZoneId).toInstant();
|
||||||
|
LocalDateTime recentStorageStartTime =
|
||||||
|
LocalDateTime.ofInstant(recentStartInstant, STORAGE_ZONE_ID);
|
||||||
|
LocalDateTime recentStorageEndTime =
|
||||||
|
LocalDateTime.ofInstant(recentEndInstant, STORAGE_ZONE_ID);
|
||||||
|
return new QueryCondition(
|
||||||
|
"DAY",
|
||||||
|
DATE_FORMATTER.format(start),
|
||||||
|
DATE_FORMATTER.format(end),
|
||||||
|
statTimezone,
|
||||||
|
statZoneId,
|
||||||
|
storageTimezoneOffset,
|
||||||
|
statTimezoneOffset,
|
||||||
|
start,
|
||||||
|
end,
|
||||||
|
recentStorageStartTime,
|
||||||
|
recentStorageEndTime,
|
||||||
|
recentStartInstant,
|
||||||
|
recentEndInstant,
|
||||||
|
null,
|
||||||
|
sysOrigin
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
private PeriodBucket toPeriodBucket(String day) {
|
private PeriodBucket toPeriodBucket(String day) {
|
||||||
if (PERIOD_ALL.equals(periodType)) {
|
if (PERIOD_ALL.equals(periodType)) {
|
||||||
return new PeriodBucket(PERIOD_ALL, "全部");
|
return new PeriodBucket(PERIOD_ALL, "全部");
|
||||||
|
|||||||
@ -0,0 +1,23 @@
|
|||||||
|
package com.red.circle.console.app.dto.clientobject.datav;
|
||||||
|
|
||||||
|
import java.io.Serial;
|
||||||
|
import java.io.Serializable;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.experimental.Accessors;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 国家数据大屏 ARPU 汇总.
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@Accessors(chain = true)
|
||||||
|
public class CountryDashboardArpuSummaryCO implements Serializable {
|
||||||
|
|
||||||
|
@Serial
|
||||||
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
|
private CountryDashboardCO day;
|
||||||
|
|
||||||
|
private CountryDashboardCO threeDay;
|
||||||
|
|
||||||
|
private CountryDashboardCO week;
|
||||||
|
}
|
||||||
@ -29,4 +29,6 @@ public class CountryDashboardCO implements Serializable {
|
|||||||
private CountryDashboardMetricCO total;
|
private CountryDashboardMetricCO total;
|
||||||
|
|
||||||
private List<CountryDashboardMetricCO> records;
|
private List<CountryDashboardMetricCO> records;
|
||||||
|
|
||||||
|
private CountryDashboardArpuSummaryCO arpuSummary;
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user