package com.kaidi.oa.domain; import jakarta.persistence.Column; import jakarta.persistence.Entity; import jakarta.persistence.GeneratedValue; import jakarta.persistence.GenerationType; import jakarta.persistence.Id; import jakarta.persistence.Table; import java.time.Instant; /** * 内刊/内网内容管理(品牌推广部·宣传部·模块7)。 * * 涵盖三类内容:员工风采、制度宣导、企业新闻。 * 支持在线投稿→审核→发布→成册(PDF合集)完整闭环。 * 成册后关联 issueTag(期号),便于按期汇编;issuePdfUrl 存成册 PDF 链接(待 Jasper/外部服务生成)。 * * 状态:草稿 / 待审核 / 已通过 / 已退回 / 已发布 / 已成册。 * 内容类型:员工风采 / 制度宣导 / 企业新闻 / 文化故事。 */ @Entity @Table(name = "internal_newsletter") public class InternalNewsletter { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; /** 稿件编号,格式 NL-YYYYMM-序号,如 NL-202601-001。 */ private String code; /** 稿件标题。 */ private String title; /** 内容类型:员工风采 / 制度宣导 / 企业新闻 / 文化故事。 */ private String contentType; /** 投稿人/作者。 */ private String author; /** 投稿人部门。 */ private String authorDept; /** 正文(富文本,允许大段文字)。 */ @Column(columnDefinition = "TEXT") private String body; /** 配图/附件 URL(逗号分隔,如 "https://…/img1.jpg,https://…/img2.jpg")。 */ @Column(length = 2000) private String attachUrls; /** * 状态:草稿 / 待审核 / 已通过 / 已退回 / 已发布 / 已成册。 */ private String status; /** 当前审核人/处理方。 */ private String currentHandler; /** 审核意见(逗号/分号分隔多条)。 */ @Column(length = 1000) private String reviewTrail; /** 发布日期(YYYY-MM-DD)。 */ private String publishDate; /** 期号标签,如 "2026年第1期",用于成册聚合。 */ private String issueTag; /** 成册 PDF URL(成册后由外部服务写入)。 */ @Column(length = 500) private String issuePdfUrl; /** 浏览量(发布后递增)。 */ private Integer viewCount = 0; /** 投稿时间。 */ private Instant createdAt; public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getCode() { return code; } public void setCode(String code) { this.code = code; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public String getContentType() { return contentType; } public void setContentType(String contentType) { this.contentType = contentType; } public String getAuthor() { return author; } public void setAuthor(String author) { this.author = author; } public String getAuthorDept() { return authorDept; } public void setAuthorDept(String authorDept) { this.authorDept = authorDept; } public String getBody() { return body; } public void setBody(String body) { this.body = body; } public String getAttachUrls() { return attachUrls; } public void setAttachUrls(String attachUrls) { this.attachUrls = attachUrls; } public String getStatus() { return status; } public void setStatus(String status) { this.status = status; } public String getCurrentHandler() { return currentHandler; } public void setCurrentHandler(String currentHandler) { this.currentHandler = currentHandler; } public String getReviewTrail() { return reviewTrail; } public void setReviewTrail(String reviewTrail) { this.reviewTrail = reviewTrail; } public String getPublishDate() { return publishDate; } public void setPublishDate(String publishDate) { this.publishDate = publishDate; } public String getIssueTag() { return issueTag; } public void setIssueTag(String issueTag) { this.issueTag = issueTag; } public String getIssuePdfUrl() { return issuePdfUrl; } public void setIssuePdfUrl(String issuePdfUrl) { this.issuePdfUrl = issuePdfUrl; } public Integer getViewCount() { return viewCount; } public void setViewCount(Integer viewCount) { this.viewCount = viewCount; } public Instant getCreatedAt() { return createdAt; } public void setCreatedAt(Instant createdAt) { this.createdAt = createdAt; } }