package com.superbiz.agent.domain.entity; import jakarta.persistence.*; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; import com.superbiz.agent.domain.enums.FaultCategory; import com.superbiz.agent.domain.enums.SourceType; import java.time.LocalDateTime; /** * 案例库实体 * 对应表: case_library */ @Entity @Table(name = "case_library", indexes = { @Index(name = "idx_fault_category", columnList = "fault_category"), @Index(name = "idx_error_code", columnList = "error_code"), @Index(name = "idx_fault_source", columnList = "fault_source"), @Index(name = "idx_diagnosis_id", columnList = "diagnosis_id"), @Index(name = "idx_reference_count", columnList = "reference_count"), @Index(name = "idx_created_at", columnList = "created_at") }) @Data @Builder @NoArgsConstructor @AllArgsConstructor public class CaseLibrary { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @Column(name = "case_id", unique = true, nullable = false, length = 64) private String caseId; // 来源关联 @Column(name = "diagnosis_id", length = 64) private String diagnosisId; @Enumerated(EnumType.STRING) @Column(name = "source_type", length = 16, columnDefinition = "VARCHAR(16)") private SourceType sourceType = SourceType.AUTO; // 案例分类 @Enumerated(EnumType.STRING) @Column(name = "fault_category", length = 32, columnDefinition = "VARCHAR(32)") private FaultCategory faultCategory; @Column(name = "fault_source", length = 128) private String faultSource; @Column(name = "fault_target", length = 256) private String faultTarget; @Column(name = "error_code", length = 64) private String errorCode; // 案例内容 @Column(name = "title", nullable = false, length = 256) private String title; @Column(name = "root_cause", nullable = false, columnDefinition = "TEXT") private String rootCause; @Column(name = "solution", nullable = false, columnDefinition = "TEXT") private String solution; // 简单统计 @Column(name = "reference_count") private Integer referenceCount = 0; // 元数据 @Column(name = "created_by", length = 64) private String createdBy; @Column(name = "created_at", nullable = false, updatable = false) private LocalDateTime createdAt; @Column(name = "updated_at") private LocalDateTime updatedAt; @PrePersist protected void onCreate() { createdAt = LocalDateTime.now(); updatedAt = LocalDateTime.now(); } @PreUpdate protected void onUpdate() { updatedAt = LocalDateTime.now(); } }