修复大屏
This commit is contained in:
parent
b76e6e3a93
commit
d9d690e53d
@ -23,6 +23,7 @@ import java.time.ZoneId;
|
||||
import java.time.ZoneOffset;
|
||||
import java.time.ZonedDateTime;
|
||||
import java.time.format.DateTimeFormatter;
|
||||
import java.time.temporal.ChronoUnit;
|
||||
import java.time.temporal.WeekFields;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
@ -73,13 +74,17 @@ public class CountryDashboardServiceImpl implements CountryDashboardService {
|
||||
QueryCondition condition = QueryCondition.of(cmd);
|
||||
Map<String, CountryDashboardMetricCO> rows = new LinkedHashMap<>();
|
||||
|
||||
if (shouldUsePrecomputedMetrics(condition)) {
|
||||
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);
|
||||
}
|
||||
if (usePrecomputedMetrics && condition.shouldOverlayLiveSalaryExchange()) {
|
||||
overlayLiveSalaryExchange(rows, condition);
|
||||
}
|
||||
|
||||
mergeMongo(rows, condition, listGiftConsume(condition),
|
||||
(row, amount) -> row.setGiftConsume(add(row.getGiftConsume(), amount)));
|
||||
@ -157,6 +162,23 @@ public class CountryDashboardServiceImpl implements CountryDashboardService {
|
||||
condition.storageTimezoneOffset, condition.statTimezoneOffset));
|
||||
}
|
||||
|
||||
private void overlayLiveSalaryExchange(Map<String, CountryDashboardMetricCO> rows,
|
||||
QueryCondition condition) {
|
||||
rows.values().forEach(row -> row.setSalaryExchange(BigDecimal.ZERO));
|
||||
List<CountryDashboardMetricDTO> metrics = countryDashboardDAO.listSalaryExchange(
|
||||
condition.periodType, condition.startTime, condition.endTime,
|
||||
condition.countryKeyword, condition.sysOrigin,
|
||||
condition.storageTimezoneOffset, condition.statTimezoneOffset);
|
||||
if (metrics == null || metrics.isEmpty()) {
|
||||
return;
|
||||
}
|
||||
for (CountryDashboardMetricDTO metric : metrics) {
|
||||
CountryDashboardMetricCO row = getRow(rows, metric.getCountryCode(), metric.getCountryName(),
|
||||
metric.getPeriodKey(), metric.getPeriodName());
|
||||
row.setSalaryExchange(safe(metric.getSalaryExchange()));
|
||||
}
|
||||
}
|
||||
|
||||
private boolean shouldUsePrecomputedMetrics(QueryCondition condition) {
|
||||
if (!hasText(condition.sysOrigin)) {
|
||||
return false;
|
||||
@ -890,6 +912,18 @@ public class CountryDashboardServiceImpl implements CountryDashboardService {
|
||||
return new PeriodBucket(day, day);
|
||||
}
|
||||
|
||||
private boolean shouldOverlayLiveSalaryExchange() {
|
||||
if (PERIOD_ALL.equals(periodType) || startDateValue == null || endDateValue == null) {
|
||||
return false;
|
||||
}
|
||||
LocalDate today = LocalDate.now(statZoneId);
|
||||
if (endDateValue.isBefore(today) || startDateValue.isAfter(today)) {
|
||||
return false;
|
||||
}
|
||||
long days = ChronoUnit.DAYS.between(startDateValue, endDateValue.plusDays(1));
|
||||
return days <= 31;
|
||||
}
|
||||
|
||||
private Long startTimeMillis() {
|
||||
return startInstant == null ? null : startInstant.toEpochMilli();
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user