use precomputed country dashboard metrics

This commit is contained in:
hy001 2026-05-22 18:10:32 +08:00
parent 505bdf6345
commit f540fc91bc

View File

@ -78,18 +78,9 @@ public class CountryDashboardServiceImpl implements CountryDashboardService {
QueryCondition condition = QueryCondition.of(cmd);
Map<String, CountryDashboardMetricCO> rows = new LinkedHashMap<>();
boolean usePrecomputedMetrics = shouldUsePrecomputedMetrics(condition);
if (usePrecomputedMetrics) {
mergeSql(rows, countryDashboardDAO.listPrecomputedPeriodMetrics(
condition.periodType, condition.startTime, condition.endTime,
condition.countryKeyword, condition.statTimezone, condition.sysOrigin));
} else {
mergeLiveSql(rows, condition);
mergeBankSalaryExchange(rows, condition);
}
if (usePrecomputedMetrics && condition.shouldOverlayLiveSalaryExchange()) {
overlayLiveSalaryExchange(rows, condition);
}
mergeSql(rows, countryDashboardDAO.listPrecomputedPeriodMetrics(
condition.periodType, condition.startTime, condition.endTime,
condition.countryKeyword, condition.statTimezone, condition.sysOrigin));
mergeMongo(rows, condition, listGiftConsume(condition),
(row, amount) -> row.setGiftConsume(add(row.getGiftConsume(), amount)));
@ -303,29 +294,15 @@ public class CountryDashboardServiceImpl implements CountryDashboardService {
@Override
public PageResult<CountryDashboardRechargeDetailCO> pageRechargeDetails(
CountryDashboardRechargeDetailQryCmd cmd) {
QueryCondition condition = QueryCondition.of(cmd);
int cursor = Math.max(1, cmd == null || cmd.getCursor() == null ? 1 : cmd.getCursor());
int limit = Math.max(1, cmd == null || cmd.getLimit() == null ? 100 : cmd.getLimit());
limit = Math.min(100, limit);
int offset = (cursor - 1) * limit;
String countryCodes = normalizeCountryCodes(cmd == null ? null : cmd.getCountryCodes());
Long total = countryDashboardDAO.countRechargeDetails(
condition.startTime, condition.endTime, condition.countryKeyword, countryCodes,
condition.sysOrigin, condition.storageTimezoneOffset, condition.statTimezoneOffset);
List<CountryDashboardRechargeDetailCO> records = countryDashboardDAO.listRechargeDetails(
condition.startTime, condition.endTime, condition.countryKeyword, countryCodes,
condition.sysOrigin, condition.storageTimezoneOffset, condition.statTimezoneOffset,
offset, limit)
.stream()
.map(this::toRechargeDetailCO)
.toList();
PageResult<CountryDashboardRechargeDetailCO> result = new PageResult<>();
result.setCurrent(cursor);
result.setSize(limit);
result.setTotal(total == null ? 0L : total);
result.setRecords(records);
result.setTotal(0L);
result.setRecords(List.of());
return result;
}