文档生命周期(中文译文)
原始 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.pymayan/apps/documents/apps.pymayan/apps/documents/icons.pymayan/apps/documents/links/document_version_links.pymayan/apps/documents/managers.pymayan/apps/documents/permissions.pymayan/apps/documents/tasks.pymayan/apps/documents/urls.pymayan/apps/documents/views/document_type_views.pymayan/apps/documents/views/document_version_views.pymayan/apps/documents/views/document_views.pymayan/apps/sources/admin.pymayan/apps/sources/api_views.pymayan/apps/sources/apps.pymayan/apps/sources/classes.pymayan/apps/sources/dependencies.pymayan/apps/sources/forms.pymayan/apps/sources/links.pymayan/apps/sources/literals.pymayan/apps/sources/migrations/0010_auto_20151001_0055.pymayan/apps/sources/migrations/0027_auto_20201030_0259.pymayan/apps/sources/models.pymayan/apps/sources/serializers.pymayan/apps/sources/source_backends/sane_scanner_backends.pymayan/apps/sources/tasks.pymayan/apps/sources/tests/test_api.pymayan/apps/sources/tests/test_views.pymayan/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 协调上传过程:
- 文件展开:处理压缩文件,通过提取并递归处理其中的成员
- 共享文件创建:创建一个
SharedUploadedFile实例用于临时存储 - 创建前钩子:通过
Document.execute_pre_create_hooks执行校验钩子 - 异步处理:将
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 处理完整的文档创建过程:
- 模型解析:加载
DocumentType、SharedUploadedFile和User模型 - 文档创建:调用
DocumentType.new_document()创建Document和DocumentFile - 错误处理:如果创建失败则删除文档,成功则移除共享文件
- 回调执行:通过回调机制运行来源特定的后处理
来源: 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_updatemayan/apps/documents/tasks.py:19-46处理文件页面 - 版本导出:
task_document_version_exportmayan/apps/documents/tasks.py:274-295创建可下载的导出文件 - 版本删除:
task_document_version_deletemayan/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 条目:
description、datetime_created、trashed_date_timedocument_type、in_trash、is_stub、label、language、uuid- 相关字段如
document_type__label、files__checksum、files__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_deletemayan/apps/documents/tasks.py:129-138移除过时的文档 Stub - 回收期限检查:
DocumentTypeManager.check_trash_periodsmayan/apps/documents/managers.py:94-123自动将旧文档移入回收站 - 删除期限检查:
DocumentTypeManager.check_delete_periodsmayan/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.registermayan/apps/documents/apps.py:290-297将文档模型连接到事件处理 - 模型权限:
ModelPermission.registermayan/apps/documents/apps.py:437-486定义访问控制 - REST API:通过
DynamicSerializerField.add_serializermayan/apps/documents/apps.py:285-288实现动态序列化器 - 模型继承:通过
ModelPermission.register_inheritancemayan/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