agentic_huge_data_base / wiki
页面 Mayan EDMS · 4 文档生命周期·DeepWiki 中文全文译文

4 · 文档生命周期(Document Lifecycle)

企业电子文档治理 · 本章是 Mayan EDMS DeepWiki 中文译文的独立章节页,保留原始链接、源码锚点、模块标签和章节层级。

项目Mayan EDMS 章节4 状态全文译文 模块文档对象与元数据、测试、发布与运维、工作流与编排、入库与解析
源码线索
  • mayan/apps/dependencies/dependencies.py
  • mayan/apps/documents/apps.py
  • mayan/apps/documents/icons.py
  • mayan/apps/documents/links/document_version_links.py
  • mayan/apps/documents/managers.py
  • mayan/apps/documents/permissions.py
  • mayan/apps/documents/tasks.py
  • mayan/apps/documents/urls.py
  • mayan/apps/documents/views/document_type_views.py
  • mayan/apps/documents/views/document_version_views.py
模块标签
  • 文档对象与元数据
  • 测试、发布与运维
  • 工作流与编排
  • 入库与解析
  • 界面与交互

中文译文

文档生命周期(中文译文)

原始 DeepWiki 页面:https://deepwiki.com/mayan-edms/Mayan-EDMS/4-document-lifecycle
翻译时间:2026-05-27T08:44:37.387Z
翻译模型:deepseek-chat
原文字符数:18197
项目:Mayan EDMS (mayan-edms)

---

文档生命周期

相关源文件

以下文件被用作生成此 Wiki 页面的上下文:

  • mayan/apps/dependencies/dependencies.py
  • mayan/apps/documents/apps.py
  • mayan/apps/documents/icons.py
  • mayan/apps/documents/links/document_version_links.py
  • mayan/apps/documents/managers.py
  • mayan/apps/documents/permissions.py
  • mayan/apps/documents/tasks.py
  • mayan/apps/documents/urls.py
  • mayan/apps/documents/views/document_type_views.py
  • mayan/apps/documents/views/document_version_views.py
  • mayan/apps/documents/views/document_views.py
  • mayan/apps/sources/admin.py
  • mayan/apps/sources/api_views.py
  • mayan/apps/sources/apps.py
  • mayan/apps/sources/classes.py
  • mayan/apps/sources/dependencies.py
  • mayan/apps/sources/forms.py
  • mayan/apps/sources/links.py
  • mayan/apps/sources/literals.py
  • mayan/apps/sources/migrations/0010_auto_20151001_0055.py
  • mayan/apps/sources/migrations/0027_auto_20201030_0259.py
  • mayan/apps/sources/models.py
  • mayan/apps/sources/serializers.py
  • mayan/apps/sources/source_backends/sane_scanner_backends.py
  • mayan/apps/sources/tasks.py
  • mayan/apps/sources/tests/test_api.py
  • mayan/apps/sources/tests/test_views.py
  • mayan/apps/sources/urls.py

本文档全面介绍了 Mayan EDMS 中文档从初始入库到处理、组织、存储以及最终处置的完整流转过程。内容涵盖了管理文档生命周期的核心模型、流程和集成点。

关于来源系统和上传机制的详细信息,请参阅文档入库。关于工作流自动化和业务流程管理的详细信息,请参阅工作流管理。关于元数据和标签等文档组织功能,请参阅文档组织

文档生命周期概览

Mayan EDMS 中的文档生命周期遵循从入库到处置的结构化流程,该流程通过多个核心应用程序和后台处理系统进行管理。文档通过来源系统进入,经过处理和转换,通过元数据和索引进行组织,并存储在具有访问控制的环境中。

flowchart TD
    subgraph "入口点"
        SOURCE["来源系统"]
        UPLOAD["文件上传"]
        API["REST API"]
    end

    subgraph "核心处理"
        DOC_CREATE["文档创建"]
        FILE_PROC["文档文件处理"]
        VERSION_CREATE["文档版本创建"]
        PAGE_EXTRACT["页面提取"]
    end

    subgraph "内容处理"
        OCR["OCR 处理"]
        CONVERT["图像转换"]
        PARSE["内容解析"]
    end

    subgraph "组织"
        META["元数据分配"]
        TAG["标签分配"]
        INDEX["自动索引"]
        CABINET["文件柜分配"]
    end

    subgraph "存储与访问"
        STORAGE["文件存储"]
        CACHE["图像缓存"]
        ACL["访问控制"]
        SEARCH["搜索索引"]
    end

    subgraph "生命周期管理"
        WORKFLOW["工作流状态"]
        TRASH["回收站系统"]
        DELETE["永久删除"]
    end

    SOURCE --> DOC_CREATE
    UPLOAD --> DOC_CREATE
    API --> DOC_CREATE

    DOC_CREATE --> FILE_PROC
    FILE_PROC --> VERSION_CREATE
    VERSION_CREATE --> PAGE_EXTRACT

    PAGE_EXTRACT --> OCR
    PAGE_EXTRACT --> CONVERT
    PAGE_EXTRACT --> PARSE

    VERSION_CREATE --> META
    VERSION_CREATE --> TAG
    VERSION_CREATE --> INDEX
    VERSION_CREATE --> CABINET

    FILE_PROC --> STORAGE
    CONVERT --> CACHE
    DOC_CREATE --> ACL
    META --> SEARCH

    DOC_CREATE --> WORKFLOW
    WORKFLOW --> TRASH
    TRASH --> DELETE

来源: mayan/apps/documents/apps.py:1-1000, mayan/apps/sources/models.py:1-186, mayan/apps/documents/tasks.py:1-333

核心文档模型

Mayan EDMS 使用分层文档模型,为文档管理的不同方面提供了不同的层次:

erDiagram
    DocumentType {
        int id
        string label
        int trash_time_period
        string trash_time_unit
        int delete_time_period
        string delete_time_unit
    }

    Document {
        int id
        string label
        text description
        datetime datetime_created
        string language
        boolean in_trash
        boolean is_stub
        uuid uuid
    }

    DocumentFile {
        int id
        string filename
        string checksum
        string comment
        string encoding
        string mimetype
        datetime timestamp
    }

    DocumentVersion {
        int id
        string comment
        datetime timestamp
        boolean active
    }

    DocumentFilePage {
        int id
        int page_number
        string content_type
        int object_id
    }

    DocumentVersionPage {
        int id
        int page_number
        string content_type
        int object_id
    }

    DocumentType ||--o{ Document : "分类"
    Document ||--o{ DocumentFile : "包含"
    Document ||--o{ DocumentVersion : "版本"
    DocumentFile ||--o{ DocumentFilePage : "页面"
    DocumentVersion ||--o{ DocumentVersionPage : "版本页面"

来源: mayan/apps/documents/apps.py:221-251, mayan/apps/documents/managers.py:20-322

文档入库流程

文档通过 Source(来源)系统进入 Mayan EDMS,该系统为不同的入库方法提供了多种后端实现。主要的入口点是 handle_file_object_upload 方法。

flowchart TD
    subgraph "来源后端"
        WEBFORM["SourceBackendWebForm"]
        SCANNER["SourceBackendSANEScanner"]
        EMAIL["SourceBackendIMAPEmail"]
        FOLDER["SourceBackendWatchFolder"]
    end

    subgraph "上传处理"
        HANDLE["Source.handle_file_object_upload()"]
        SHARED["SharedUploadedFile.objects.create()"]
        PRE_HOOKS["Document.execute_pre_create_hooks()"]
        TASK["task_document_upload.apply_async()"]
    end

    subgraph "文档创建"
        TASK_EXEC["task_document_upload 执行"]
        DOC_TYPE["DocumentType.new_document()"]
        DOC_CREATE["文档创建"]
        FILE_CREATE["DocumentFile 创建"]
        POST_CALLBACK["Source.callback_post_task_document_upload()"]
    end

    WEBFORM --> HANDLE
    SCANNER --> HANDLE
    EMAIL --> HANDLE
    FOLDER --> HANDLE

    HANDLE --> SHARED
    SHARED --> PRE_HOOKS
    PRE_HOOKS --> TASK

    TASK --> TASK_EXEC
    TASK_EXEC --> DOC_TYPE
    DOC_TYPE --> DOC_CREATE
    DOC_CREATE --> FILE_CREATE
    FILE_CREATE --> POST_CALLBACK

Source.handle_file_object_upload 方法 mayan/apps/sources/models.py:87-161 协调上传过程:

  1. 文件展开:处理压缩文件,通过提取并递归处理其中的成员
  2. 共享文件创建:创建一个 SharedUploadedFile 实例用于临时存储
  3. 创建前钩子:通过 Document.execute_pre_create_hooks 执行校验钩子
  4. 异步处理:将 task_document_upload 加入队列进行后台处理

来源: mayan/apps/sources/models.py:87-161, mayan/apps/documents/tasks.py:140-194

文档处理管线

一旦文档上传任务被加入队列,系统会通过多个内容提取和分析阶段对其进行处理:

flowchart TD
    subgraph "任务执行"
        TASK_START["task_document_upload 启动"]
        MODEL_LOAD["加载 DocumentType 和 SharedUploadedFile"]
        USER_RESOLVE["解析用户(如果提供)"]
    end

    subgraph "文档创建"
        NEW_DOC["DocumentType.new_document()"]
        DOC_INSTANCE["Document 实例创建"]
        DOC_FILE["DocumentFile 实例创建"]
        VERSION_AUTO["DocumentVersion 自动创建"]
    end

    subgraph "文件处理"
        PAGE_COUNT["文档文件页数更新"]
        PAGE_EXTRACT["DocumentFilePage 提取"]
        VERSION_PAGES["DocumentVersionPage 创建"]
        OCR_QUEUE["OCR 处理已加入队列"]
        CONVERT_QUEUE["图像转换已加入队列"]
    end

    subgraph "后处理"
        CALLBACK["来源回调执行"]
        RECENT_ADD["添加到最近文档"]
        SHARED_DELETE["删除 SharedUploadedFile"]
        TRANSFORM_COPY["复制已保存的变换"]
    end

    TASK_START --> MODEL_LOAD
    MODEL_LOAD --> USER_RESOLVE
    USER_RESOLVE --> NEW_DOC

    NEW_DOC --> DOC_INSTANCE
    DOC_INSTANCE --> DOC_FILE
    DOC_FILE --> VERSION_AUTO

    VERSION_AUTO --> PAGE_COUNT
    PAGE_COUNT --> PAGE_EXTRACT
    PAGE_EXTRACT --> VERSION_PAGES
    VERSION_PAGES --> OCR_QUEUE
    VERSION_PAGES --> CONVERT_QUEUE

    DOC_FILE --> CALLBACK
    CALLBACK --> RECENT_ADD
    RECENT_ADD --> SHARED_DELETE
    CALLBACK --> TRANSFORM_COPY

task_document_upload 函数 mayan/apps/documents/tasks.py:140-194 处理完整的文档创建过程:

  1. 模型解析:加载 DocumentTypeSharedUploadedFileUser 模型
  2. 文档创建:调用 DocumentType.new_document() 创建 DocumentDocumentFile
  3. 错误处理:如果创建失败则删除文档,成功则移除共享文件
  4. 回调执行:通过回调机制运行来源特定的后处理

来源: mayan/apps/documents/tasks.py:140-194, mayan/apps/sources/models.py:45-66

文档文件与版本管理

Mayan EDMS 在文档文件(物理文件存储)和文档版本(逻辑文档表示)之间保持了清晰的分离:

flowchart TD
    subgraph "文件级操作"
        FILE_UPLOAD["新文件上传"]
        FILE_CREATE["DocumentFile.objects.create()"]
        PAGE_UPDATE["task_document_file_page_count_update"]
        FILE_PAGES["DocumentFilePage 创建"]
    end

    subgraph "版本级操作"
        VERSION_CREATE["DocumentVersion 创建"]
        VERSION_ACTIVE["设置活动版本"]
        VERSION_PAGES["DocumentVersionPage 映射"]
        VERSION_MODIFY["版本修改"]
    end

    subgraph "处理任务"
        OCR_TASK["OCR 内容提取"]
        CONVERT_TASK["图像转换"]
        EXPORT_TASK["版本导出"]
        DELETE_TASK["版本删除"]
    end

    FILE_UPLOAD --> FILE_CREATE
    FILE_CREATE --> PAGE_UPDATE
    PAGE_UPDATE --> FILE_PAGES

    FILE_CREATE --> VERSION_CREATE
    VERSION_CREATE --> VERSION_ACTIVE
    VERSION_CREATE --> VERSION_PAGES
    VERSION_PAGES --> VERSION_MODIFY

    FILE_PAGES --> OCR_TASK
    FILE_PAGES --> CONVERT_TASK
    VERSION_CREATE --> EXPORT_TASK
    VERSION_CREATE --> DELETE_TASK

关键的文件和版本管理任务包括:

  • 页数更新task_document_file_page_count_update mayan/apps/documents/tasks.py:19-46 处理文件页面
  • 版本导出task_document_version_export mayan/apps/documents/tasks.py:274-295 创建可下载的导出文件
  • 版本删除task_document_version_delete mayan/apps/documents/tasks.py:254-272 处理后台删除

来源: mayan/apps/documents/tasks.py:19-125, mayan/apps/documents/views/document_version_views.py:1-500

文档组织与元数据

文档通过多个系统进行组织,这些系统提供了不同的组织视角:

flowchart TD
    subgraph "元数据系统"
        META_TYPE["MetadataType 定义"]
        DOC_META["DocumentMetadata 值"]
        META_FORM["元数据表单"]
    end

    subgraph "标签系统"
        TAG_DEF["标签定义"]
        DOC_TAG["DocumentTag 关系"]
        TAG_ASSIGN["标签分配"]
    end

    subgraph "文件柜系统"
        CABINET_DEF["文件柜层级"]
        DOC_CABINET["文档-文件柜关系"]
        CABINET_AUTO["自动分配规则"]
    end

    subgraph "索引系统"
        INDEX_TPL["索引模板"]
        INDEX_INST["索引实例"]
        INDEX_NODES["索引节点层级"]
        AUTO_INDEX["自动索引"]
    end

    subgraph "文档集成"
        DOCUMENT["Document 实例"]
        DOC_TYPE["DocumentType"]
        PROPERTIES["文档属性"]
    end

    DOCUMENT --> META_TYPE
    META_TYPE --> DOC_META
    DOC_META --> META_FORM

    DOCUMENT --> TAG_DEF
    TAG_DEF --> DOC_TAG
    DOC_TAG --> TAG_ASSIGN

    DOCUMENT --> CABINET_DEF
    CABINET_DEF --> DOC_CABINET
    DOC_CABINET --> CABINET_AUTO

    DOCUMENT --> INDEX_TPL
    INDEX_TPL --> INDEX_INST
    INDEX_INST --> INDEX_NODES
    INDEX_NODES --> AUTO_INDEX

    DOC_TYPE --> PROPERTIES
    PROPERTIES --> DOCUMENT

文档应用程序配置 mayan/apps/documents/apps.py:385-396 为文档属性注册了多个 ModelField 条目:

  • descriptiondatetime_createdtrashed_date_time
  • document_typein_trashis_stublabellanguageuuid
  • 相关字段如 document_type__labelfiles__checksumfiles__comment

来源: mayan/apps/documents/apps.py:385-418, mayan/apps/documents/views/document_views.py:162-191

文档状态管理与生命周期

文档在其生命周期中会经历各种状态,这些状态通过回收站系统和工作流引擎进行管理:

stateDiagram-v2
    [*] --> Stub : 上传已启动
    Stub --> Active : 处理完成
    Active --> Active : 元数据更新
    Active --> Active : 文件添加
    Active --> Active : 版本创建
    Active --> Trashed : 用户操作
    Trashed --> Active : 恢复操作
    Trashed --> Deleted : 自动/手动删除
    Deleted --> [*]

    note right of Stub
        is_stub=True
        上传期间创建
        过时后自动删除
    end note

    note right of Active
        in_trash=False
        正常操作
        可搜索
    end note

    note right of Trashed
        in_trash=True
        从正常视图中隐藏
        适用保留期限
    end note

系统包含多个自动化的生命周期管理任务:

  • Stub 清理task_document_stubs_delete mayan/apps/documents/tasks.py:129-138 移除过时的文档 Stub
  • 回收期限检查DocumentTypeManager.check_trash_periods mayan/apps/documents/managers.py:94-123 自动将旧文档移入回收站
  • 删除期限检查DocumentTypeManager.check_delete_periods mayan/apps/documents/managers.py:63-92 永久删除已回收的文档

来源: mayan/apps/documents/tasks.py:129-138, mayan/apps/documents/managers.py:63-123, mayan/apps/documents/views/trashed_document_views.py:1-100

集成点与 API

文档生命周期通过定义良好的接口与多个 Mayan EDMS 子系统集成:

flowchart TD
    subgraph "外部集成"
        REST_API["REST API 端点"]
        WEB_UI["Web 界面"]
        WIZARD["上传向导"]
    end

    subgraph "核心文档系统"
        DOC_MODELS["文档模型"]
        DOC_MANAGERS["文档管理器"]
        DOC_EVENTS["文档事件"]
    end

    subgraph "处理集成"
        CONVERTER["转换器应用"]
        OCR_APP["OCR 应用"]
        METADATA_APP["元数据应用"]
        TAGS_APP["标签应用"]
    end

    subgraph "存储集成"
        FILE_STORAGE["文件存储后端"]
        CACHE_SYSTEM["文件缓存"]
        SEARCH_BACKEND["搜索后端"]
    end

    subgraph "安全集成"
        ACL_SYSTEM["访问控制列表"]
        PERMS["权限系统"]
        USER_MGMT["用户管理"]
    end

    REST_API --> DOC_MODELS
    WEB_UI --> DOC_MODELS
    WIZARD --> DOC_MODELS

    DOC_MODELS --> DOC_MANAGERS
    DOC_MODELS --> DOC_EVENTS

    DOC_EVENTS --> CONVERTER
    DOC_EVENTS --> OCR_APP
    DOC_EVENTS --> METADATA_APP
    DOC_EVENTS --> TAGS_APP

    DOC_MODELS --> FILE_STORAGE
    DOC_MODELS --> CACHE_SYSTEM
    DOC_MODELS --> SEARCH_BACKEND

    DOC_MODELS --> ACL_SYSTEM
    ACL_SYSTEM --> PERMS
    PERMS --> USER_MGMT

关键的集成机制包括:

  • 事件系统EventModelRegistry.register mayan/apps/documents/apps.py:290-297 将文档模型连接到事件处理
  • 模型权限ModelPermission.register mayan/apps/documents/apps.py:437-486 定义访问控制
  • REST API:通过 DynamicSerializerField.add_serializer mayan/apps/documents/apps.py:285-288 实现动态序列化器
  • 模型继承:通过 ModelPermission.register_inheritance mayan/apps/documents/apps.py:488-517 实现权限继承

来源: mayan/apps/documents/apps.py:280-517, mayan/apps/documents/urls.py:1-689, mayan/apps/sources/api_views.py:1-141