【发布时间】:2021-10-08 05:44:10
【问题描述】:
实体
@Getter
@NoArgsConstructor
@AllArgsConstructor
@Immutable
@Entity
@Table(name = "payments")
public class ClientEntity {
@Id
private Long id;
@Column(name = "created_dt")
private LocalDate created_dt;
@Column(name = "username")
private String username;
@Column(name = "name")
private String name;
@Column(name = "amount")
private Integer amount;
@Column(name = "status")
private String status;
@Column(name = "account")
private String account;
@Column(name = "external_id")
private String external_id;
@Column(name = "external_status")
private String external_status;
}
服务
@Component
public class SchedulerService {
@Autowired
//private final AttachmentEmail attachmentEmail;
private final JdbcTemplate jdbc;
private static final String QUERY = "SELECT pp.id, pp.created_dt, au.username, ss.name, pp.amount,\n" +
"REPLACE(pp.status, 'SUCCESS', 'Success') AS status, pp.account,\n" +
"pp.external_id, COALESCE(pp.external_status, null, 'Indefined') AS external_status\n" +
"FROM payments AS pp\n" +
"INNER JOIN auth_user AS au ON au.id = pp.creator_id\n" +
"INNER JOIN services AS ss ON ss.id = pp.service_id\n" +
"WHERE pp.created_dt::date = (CURRENT_DATE - INTERVAL '1' day)::date\n" +
"AND ss.name = 'SomeName' AND pp.status = 'SUCCESS'";
private static final DateTimeFormatter date_format = DateTimeFormatter.ofPattern("dd.MM.yyyy");
private static final DateTimeFormatter time_format = DateTimeFormatter.ofPattern("HH:mm:ss");
public SchedulerService(AttachmentEmail attachmentEmail, JdbcTemplate jdbc) {
//this.attachmentEmail = attachmentEmail;
this.jdbc = jdbc;
}
@Scheduled(fixedRate = 20000)
public void sendMail() {
String filename = "select.csv";
try (FileWriter writer = new FileWriter(filename)) {
writer.append("id|Data|Time|Initiator|Service|Amout|Payment Status|Props|Identifier|External status").append("\n");
this.jdbc.query(QUERY, (ResultSet rs) -> writeLine(writer, rs));
} catch (Exception e) {
e.printStackTrace();
}
}
private void writeLine(FileWriter writer, ResultSet rs) {
try {
LocalDateTime ldt = rs.getTimestamp("created_dt").toLocalDateTime();
writer.append(String.valueOf(rs.getLong("id")));
writer.append('|');
writer.append(ldt.format(date_format));
writer.append('|');
writer.append(ldt.format(time_format));
writer.append('|');
writer.append(rs.getString("username"));
writer.append('|');
writer.append(rs.getString("name"));
writer.append('|');
writer.append(String.valueOf(rs.getBigDecimal("amount")));
writer.append('|');
writer.append(rs.getString("status"));
writer.append('|');
writer.append(rs.getString("props"));
writer.append('|');
writer.append(rs.getString("Identifier"));
writer.append('|');
writer.append(rs.getString("external_status"));
writer.append('\n');
} catch (Exception e) {
throw new IllegalStateException(e);
}
}
}
我通过邮件发送请求数据,之前已在 csv 文件中形成了这些数据。但是,为了使这些数据正确,我需要将来自两个数据库的两个查询相互比较。在我上面指出的示例中,只有一个请求。我的想法是我想将我的 SELECT 存储在一个集合(List、ArrayList)中,然后我将通过比较器将这两个对象相互比较。找不到如何将上述 SELECT 转换为 List / ArrayList
【问题讨论】:
-
@M. Deinum 我使用了您的提示,也想将 QUERY 转换为 List。你能告诉我怎么做吗?
标签: postgresql spring-boot pgadmin