You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

78 lines
2.7 KiB

8 months ago
package com.dashboard.aws.lambda.service;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.sql.*;
import java.util.*;
public class MySQLService {
private static final Logger logger = LoggerFactory.getLogger(MySQLService.class);
private static final String MYSQL_URL = System.getenv("DB_URL"); // 统一实例URL
private static final String DB_USER = System.getenv("DB_USER");
private static final String DB_PASSWORD = System.getenv("DB_PASSWORD");
/**
* 获取符合条件的企业ID
*/
public List<Long> getActiveCompanyIds() throws SQLException {
String sql = """
SELECT id FROM data_center_new.basic_company
WHERE flag != 1
AND (parent_id = -1 OR parent_id = 1)
""";
try (Connection conn = DriverManager.getConnection(MYSQL_URL, DB_USER, DB_PASSWORD);
PreparedStatement ps = conn.prepareStatement(sql);
ResultSet rs = ps.executeQuery()) {
List<Long> ids = new ArrayList<>();
while (rs.next()) {
ids.add(rs.getLong("id"));
}
return ids;
}
}
public List<Map<String, Object>> queryOldData(String schema, String table, long cutoff) throws SQLException {
String sql = String.format("SELECT * FROM %s.%s WHERE upload_at < ?", schema, table);
logger.info("query sql: {}, cutoff: {}", sql, cutoff);
try (Connection conn = DriverManager.getConnection(MYSQL_URL, DB_USER, DB_PASSWORD);
PreparedStatement ps = conn.prepareStatement(sql)) {
ps.setLong(1, cutoff);
ResultSet rs = ps.executeQuery();
ResultSetMetaData meta = rs.getMetaData();
List<Map<String, Object>> list = new ArrayList<>();
while (rs.next()) {
Map<String, Object> row = new LinkedHashMap<>();
for (int i = 1; i <= meta.getColumnCount(); i++) {
row.put(meta.getColumnName(i), rs.getObject(i));
}
list.add(row);
}
return list;
}
}
public void deleteOldData(String schema, String table, long cutoff) throws SQLException {
String sql = String.format("DELETE FROM %s.%s WHERE upload_at < ?", schema, table);
logger.info("deleteOldData sql: {}, cutoff: {}", sql, cutoff);
try (Connection conn = DriverManager.getConnection(MYSQL_URL, DB_USER, DB_PASSWORD);
PreparedStatement ps = conn.prepareStatement(sql)) {
ps.setLong(1, cutoff);
int deleted = ps.executeUpdate();
logger.info("[{}.{}] 删除 {} 条记录", schema, table, deleted);
}
}
}