Browse Source

抽取时区常量

master
review512jwy@163.com 2 weeks ago
parent
commit
fe52599984
  1. 7
      src/main/java/com/dashboard/aws/lambda/Constants.java
  2. 2
      src/main/java/com/dashboard/aws/lambda/handler/MySQLBatchToS3Handler.java
  3. 17
      src/main/java/com/dashboard/aws/lambda/service/MySQLService.java

7
src/main/java/com/dashboard/aws/lambda/Constants.java

@ -1,10 +1,13 @@
package com.dashboard.aws.lambda;
import java.time.ZoneId;
import java.util.List;
public class Constants {
public static final List<String> tables = List.of("dashboard_record_accumulate", "dashboard_record_measure");
// public static final List<String> tables = List.of("dashboard_record_accumulate_test", "dashboard_record_measure_test");
public static final ZoneId TOKYO_ZONE = ZoneId.of("Asia/Tokyo");
// public static final List<String> tables = List.of("dashboard_record_accumulate", "dashboard_record_measure");
public static final List<String> tables = List.of("dashboard_record_accumulate_test", "dashboard_record_measure_test");
}

2
src/main/java/com/dashboard/aws/lambda/handler/MySQLBatchToS3Handler.java

@ -27,7 +27,7 @@ public class MySQLBatchToS3Handler implements RequestHandler<Map<String, Object>
private static final String DB_SCHEMA = System.getenv("DB_SCHEMA");
private static final int BATCH_SIZE = Integer.parseInt(System.getenv("BATCH_SIZE"));
private static final String CUTOFF_DATE_STR = System.getenv("CUTOFF_DATE");
private static final ZoneId TOKYO_ZONE = ZoneId.of("Asia/Tokyo");
private static final ZoneId TOKYO_ZONE = Constants.TOKYO_ZONE;
private static final DateTimeFormatter DATE_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd");
private static final Pattern FILE_PATTERN = Pattern.compile(".*/(\\d{3})\\.csv$");

17
src/main/java/com/dashboard/aws/lambda/service/MySQLService.java

@ -5,6 +5,7 @@ import org.slf4j.LoggerFactory;
import java.sql.*;
import java.time.LocalDate;
import java.time.ZoneId;
import java.util.*;
public class MySQLService {
@ -104,23 +105,25 @@ public class MySQLService {
}
public int deleteBeforeDate(String schema, String table, LocalDate fileDate) {
// 计算比较值: yyyyMMdd 格式的整数(例如 20251008)
int cutoff = fileDate.getYear() * 10000 + fileDate.getMonthValue() * 100 + fileDate.getDayOfMonth();
// 转换为东京时区当天 00:00:00 的毫秒级时间戳
long cutoffUploadAt = fileDate.atStartOfDay(ZoneId.of("Asia/Tokyo"))
.toInstant()
.toEpochMilli();
String sql = String.format(
"DELETE FROM %s.%s WHERE (COALESCE(date_year,0) * 10000 + COALESCE(date_month,0) * 100 + COALESCE(date_day,0)) < ?",
"DELETE FROM %s.%s WHERE upload_at < ?",
schema, table
);
logger.info("deleteBeforeDate sql: {}, cutoff:{}", sql, cutoff);
logger.info("deleteBeforeDate sql: {}, cutoffUploadAt:{}", sql, cutoffUploadAt);
try (Connection conn = DriverManager.getConnection(MYSQL_URL, DB_USER, DB_PASSWORD);
PreparedStatement ps = conn.prepareStatement(sql)) {
ps.setInt(1, cutoff);
ps.setLong(1, cutoffUploadAt);
int deleted = ps.executeUpdate();
logger.info("deleteBeforeDate: schema={}, table={}, cutoff={}, deleted={}", schema, table, cutoff, deleted);
logger.info("deleteBeforeDate: schema={}, table={}, cutoffUploadAt={}, deleted={}", schema, table, cutoffUploadAt, deleted);
return deleted;
} catch (SQLException e) {
logger.error("deleteBeforeDate failed for {}/{} cutoff={}", schema, table, cutoff, e);
logger.error("deleteBeforeDate failed for {}/{} cutoffUploadAt={}", schema, table, cutoffUploadAt, e);
return 0;
}
}

Loading…
Cancel
Save