ArticleStatus.java 3.0 KB
// common/enums/ArticleStatus.java
package com.aigeo.common.enums;

/**
 * 文章状态枚举
 * 定义文章在生成、编辑、发布流程中的各种状态
 * 
 * @author AIGEO Team
 * @since 1.0.0
 */
public enum ArticleStatus {
    /**
     * 草稿状态
     */
    DRAFT("草稿"),
    
    /**
     * 生成中
     */
    GENERATING("生成中"),
    
    /**
     * 生成完成,待审核
     */
    PENDING_REVIEW("待审核"),
    
    /**
     * 审核中
     */
    REVIEWING("审核中"),
    
    /**
     * 审核通过,待发布
     */
    APPROVED("已批准"),
    
    /**
     * 已发布
     */
    PUBLISHED("已发布"),
    
    /**
     * 已撤回
     */
    WITHDRAWN("已撤回"),
    
    /**
     * 审核拒绝
     */
    REJECTED("已拒绝"),
    
    /**
     * 已归档
     */
    ARCHIVED("已归档");

    private final String description;

    ArticleStatus(String description) {
        this.description = description;
    }

    public String getDescription() {
        return description;
    }

    /**
     * 检查是否可以编辑
     */
    public boolean isEditable() {
        return this == DRAFT || this == REJECTED;
    }

    /**
     * 检查是否可以提交审核
     */
    public boolean canSubmitForReview() {
        return this == DRAFT || this == REJECTED;
    }

    /**
     * 检查是否可以发布
     */
    public boolean canPublish() {
        return this == APPROVED;
    }

    /**
     * 检查是否可以撤回
     */
    public boolean canWithdraw() {
        return this == PUBLISHED;
    }

    /**
     * 检查是否处于最终状态
     */
    public boolean isFinalStatus() {
        return this == PUBLISHED || this == ARCHIVED || this == WITHDRAWN;
    }

    /**
     * 检查是否处于处理中状态
     */
    public boolean isProcessing() {
        return this == GENERATING || this == REVIEWING;
    }

    /**
     * 获取下一个可能的状态列表
     */
    public ArticleStatus[] getNextPossibleStatuses() {
        switch (this) {
            case DRAFT:
                return new ArticleStatus[]{GENERATING, PENDING_REVIEW};
            case GENERATING:
                return new ArticleStatus[]{DRAFT, PENDING_REVIEW, REJECTED};
            case PENDING_REVIEW:
                return new ArticleStatus[]{REVIEWING};
            case REVIEWING:
                return new ArticleStatus[]{APPROVED, REJECTED};
            case APPROVED:
                return new ArticleStatus[]{PUBLISHED, DRAFT};
            case PUBLISHED:
                return new ArticleStatus[]{WITHDRAWN, ARCHIVED};
            case REJECTED:
                return new ArticleStatus[]{DRAFT};
            case WITHDRAWN:
                return new ArticleStatus[]{DRAFT, ARCHIVED};
            case ARCHIVED:
                return new ArticleStatus[]{};
            default:
                return new ArticleStatus[]{};
        }
    }

    @Override
    public String toString() {
        return description;
    }
}