package com.kaidi.oa.domain; import jakarta.persistence.Entity; import jakarta.persistence.GeneratedValue; import jakarta.persistence.GenerationType; import jakarta.persistence.Id; import jakarta.persistence.Table; import java.time.Instant; /** * 资料室电子档案自动备份执行日志。 * * 每次 @Scheduled 备份调度运行后追加一条记录(成功/失败/跳过), * 作为「自动备份无真实调度执行」缺口的真实落地证明, * 替代 ArchiveComplianceController.backup-config 仅返回静态配置的现状。 * * 状态:运行中 / 成功 / 失败 / 跳过。 * backupType:增量 / 全量。 */ @Entity @Table(name = "archive_backup_log") public class ArchiveBackupLog { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; /** 备份类型:增量 / 全量。 */ private String backupType; /** 备份状态:运行中 / 成功 / 失败 / 跳过。 */ private String backupStatus; /** 触发方式:定时 / 手动。 */ private String triggerMode; /** 备份开始时间(ISO 字符串,便于 SQLite 存储与前端展示)。 */ private String startedAt; /** 备份完成时间。 */ private String finishedAt; /** 耗时秒数(完成后填写)。 */ private Long durationSeconds; /** 备份文件路径(本地快照路径或 S3 前缀)。 */ private String backupPath; /** 备份文件大小(字节,-1 表示未知)。 */ private Long fileSizeBytes; /** 备份档案条数(实际扫描档案总数)。 */ private Long archiveCount; /** 操作结果详细说明(成功摘要 / 失败原因)。 */ private String resultMsg; /** 执行节点(本机 hostname,多活场景区分节点)。 */ private String executorNode; private Instant createdAt; public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getBackupType() { return backupType; } public void setBackupType(String backupType) { this.backupType = backupType; } public String getBackupStatus() { return backupStatus; } public void setBackupStatus(String backupStatus) { this.backupStatus = backupStatus; } public String getTriggerMode() { return triggerMode; } public void setTriggerMode(String triggerMode) { this.triggerMode = triggerMode; } public String getStartedAt() { return startedAt; } public void setStartedAt(String startedAt) { this.startedAt = startedAt; } public String getFinishedAt() { return finishedAt; } public void setFinishedAt(String finishedAt) { this.finishedAt = finishedAt; } public Long getDurationSeconds() { return durationSeconds; } public void setDurationSeconds(Long durationSeconds) { this.durationSeconds = durationSeconds; } public String getBackupPath() { return backupPath; } public void setBackupPath(String backupPath) { this.backupPath = backupPath; } public Long getFileSizeBytes() { return fileSizeBytes; } public void setFileSizeBytes(Long fileSizeBytes) { this.fileSizeBytes = fileSizeBytes; } public Long getArchiveCount() { return archiveCount; } public void setArchiveCount(Long archiveCount) { this.archiveCount = archiveCount; } public String getResultMsg() { return resultMsg; } public void setResultMsg(String resultMsg) { this.resultMsg = resultMsg; } public String getExecutorNode() { return executorNode; } public void setExecutorNode(String executorNode) { this.executorNode = executorNode; } public Instant getCreatedAt() { return createdAt; } public void setCreatedAt(Instant createdAt) { this.createdAt = createdAt; } }