|
|
@ -14,18 +14,19 @@ public class MeasureAverageService { |
|
|
private static final String MYSQL_URL = System.getenv("DB_URL"); |
|
|
private static final String MYSQL_URL = System.getenv("DB_URL"); |
|
|
private static final String DB_USER = System.getenv("DB_USER"); |
|
|
private static final String DB_USER = System.getenv("DB_USER"); |
|
|
private static final String DB_PASSWORD = System.getenv("DB_PASSWORD"); |
|
|
private static final String DB_PASSWORD = System.getenv("DB_PASSWORD"); |
|
|
|
|
|
private static final String DB_SCHEMA = System.getenv("DB_SCHEMA"); |
|
|
|
|
|
|
|
|
private Connection getConnection() throws SQLException { |
|
|
private Connection getConnection() throws SQLException { |
|
|
return DriverManager.getConnection(MYSQL_URL, DB_USER, DB_PASSWORD); |
|
|
return DriverManager.getConnection(MYSQL_URL, DB_USER, DB_PASSWORD); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
public void aggregateLastHour(Long companyId, ZoneId zone, LocalDateTime now, LocalDateTime start) { |
|
|
public void aggregateLastHour(ZoneId zone, LocalDateTime now, LocalDateTime start) { |
|
|
long startTs = start.atZone(zone).toInstant().toEpochMilli(); |
|
|
long startTs = start.atZone(zone).toInstant().toEpochMilli(); |
|
|
long endTs = now.atZone(zone).toInstant().toEpochMilli(); |
|
|
long endTs = now.atZone(zone).toInstant().toEpochMilli(); |
|
|
|
|
|
|
|
|
logger.info("Aggregating data for company {} from {} to {}", companyId, start, now); |
|
|
logger.info("Aggregating data from {} to {}", start, now); |
|
|
|
|
|
|
|
|
String schema = "data_center_dongjian_" + companyId; |
|
|
String schema = DB_SCHEMA; |
|
|
String realtimeTable = "dashboard_realtime_measure"; |
|
|
String realtimeTable = "dashboard_realtime_measure"; |
|
|
String sourceTable = "dashboard_record_measure"; |
|
|
String sourceTable = "dashboard_record_measure"; |
|
|
String targetTable = "dashboard_aggregate_measure_hour"; |
|
|
String targetTable = "dashboard_aggregate_measure_hour"; |
|
|
@ -110,13 +111,13 @@ public class MeasureAverageService { |
|
|
|
|
|
|
|
|
// 判断是否到达每日 / 每月 / 每年聚合时间点
|
|
|
// 判断是否到达每日 / 每月 / 每年聚合时间点
|
|
|
if (now.getHour() == 0) { |
|
|
if (now.getHour() == 0) { |
|
|
aggregateLastDay(companyId, now, now.toLocalDate().minusDays(1)); // 昨天的聚合
|
|
|
aggregateLastDay(now, now.toLocalDate().minusDays(1)); // 昨天的聚合
|
|
|
} |
|
|
} |
|
|
if (now.getDayOfMonth() == 1 && now.getHour() == 0) { |
|
|
if (now.getDayOfMonth() == 1 && now.getHour() == 0) { |
|
|
aggregateLastMonth(companyId, now, now.toLocalDate().minusMonths(1)); // 上个月的聚合
|
|
|
aggregateLastMonth(now, now.toLocalDate().minusMonths(1)); // 上个月的聚合
|
|
|
} |
|
|
} |
|
|
if (now.getMonthValue() == 1 && now.getDayOfMonth() == 1 && now.getHour() == 0) { |
|
|
if (now.getMonthValue() == 1 && now.getDayOfMonth() == 1 && now.getHour() == 0) { |
|
|
aggregateLastYear(companyId, now, now.toLocalDate().minusYears(1)); // 上一年的聚合
|
|
|
aggregateLastYear(now, now.toLocalDate().minusYears(1)); // 上一年的聚合
|
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
} catch (SQLException e) { |
|
|
} catch (SQLException e) { |
|
|
@ -124,12 +125,12 @@ public class MeasureAverageService { |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
public void aggregateLastDay(Long companyId, LocalDateTime now, LocalDate targetDate) { |
|
|
public void aggregateLastDay(LocalDateTime now, LocalDate targetDate) { |
|
|
String schema = "data_center_dongjian_" + companyId; |
|
|
String schema = DB_SCHEMA; |
|
|
String sourceTable = "dashboard_aggregate_measure_hour"; |
|
|
String sourceTable = "dashboard_aggregate_measure_hour"; |
|
|
String targetTable = "dashboard_aggregate_measure_day"; |
|
|
String targetTable = "dashboard_aggregate_measure_day"; |
|
|
|
|
|
|
|
|
logger.info("Aggregating daily data for company: {}, date {}", companyId, targetDate); |
|
|
logger.info("Aggregating daily data, date {}", targetDate); |
|
|
|
|
|
|
|
|
String sql = String.format( |
|
|
String sql = String.format( |
|
|
"SELECT device_id, (SUM(COALESCE(CAST(NULLIF(average_value, '') AS DECIMAL(20,6)), 0)) / 24.0) AS avg_val, " + |
|
|
"SELECT device_id, (SUM(COALESCE(CAST(NULLIF(average_value, '') AS DECIMAL(20,6)), 0)) / 24.0) AS avg_val, " + |
|
|
@ -178,12 +179,12 @@ public class MeasureAverageService { |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
public void aggregateLastMonth(Long companyId, LocalDateTime now, LocalDate targetMonth) { |
|
|
public void aggregateLastMonth(LocalDateTime now, LocalDate targetMonth) { |
|
|
String schema = "data_center_dongjian_" + companyId; |
|
|
String schema = DB_SCHEMA; |
|
|
String sourceTable = "dashboard_aggregate_measure_day"; |
|
|
String sourceTable = "dashboard_aggregate_measure_day"; |
|
|
String targetTable = "dashboard_aggregate_measure_month"; |
|
|
String targetTable = "dashboard_aggregate_measure_month"; |
|
|
|
|
|
|
|
|
logger.info("Aggregating monthly data for company:{}, month: {}", companyId, targetMonth.getMonthValue()); |
|
|
logger.info("Aggregating monthly data, month: {}", targetMonth.getMonthValue()); |
|
|
|
|
|
|
|
|
// 天数作为分母
|
|
|
// 天数作为分母
|
|
|
int daysInMonth = YearMonth.of(targetMonth.getYear(), targetMonth.getMonthValue()).lengthOfMonth(); |
|
|
int daysInMonth = YearMonth.of(targetMonth.getYear(), targetMonth.getMonthValue()).lengthOfMonth(); |
|
|
@ -234,12 +235,12 @@ public class MeasureAverageService { |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
public void aggregateLastYear(Long companyId, LocalDateTime now, LocalDate targetYear) { |
|
|
public void aggregateLastYear(LocalDateTime now, LocalDate targetYear) { |
|
|
String schema = "data_center_dongjian_" + companyId; |
|
|
String schema = DB_SCHEMA; |
|
|
String sourceTable = "dashboard_aggregate_measure_month"; |
|
|
String sourceTable = "dashboard_aggregate_measure_month"; |
|
|
String targetTable = "dashboard_aggregate_measure_year"; |
|
|
String targetTable = "dashboard_aggregate_measure_year"; |
|
|
|
|
|
|
|
|
logger.info("Aggregating yearly data for company:{}, year: {}", companyId, targetYear.getYear()); |
|
|
logger.info("Aggregating yearly data, year: {}", targetYear.getYear()); |
|
|
|
|
|
|
|
|
String sql = String.format( |
|
|
String sql = String.format( |
|
|
"SELECT device_id, (SUM(COALESCE(CAST(NULLIF(average_value, '') AS DECIMAL(20,6)), 0)) / 12.0) AS avg_val," + |
|
|
"SELECT device_id, (SUM(COALESCE(CAST(NULLIF(average_value, '') AS DECIMAL(20,6)), 0)) / 12.0) AS avg_val," + |
|
|
|