文档生命周期
文档生命周期
相关源文件
本章引用的主要源码文件:
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 中的文档生命周期遵循从入库到处置的结构化流程,该流程通过多个核心应用程序和后台处理系统进行管理。文档通过来源系统进入,经过处理和转换,通过元数据和索引进行组织,并存储在具有访问控制的环境中。
来源: mayan/apps/documents/apps.py:1-1000, mayan/apps/sources/models.py:1-186, mayan/apps/documents/tasks.py:1-333
核心文档模型
Mayan EDMS 使用分层文档模型,为文档管理的不同方面提供了不同的层次:
来源: mayan/apps/documents/apps.py:221-251, mayan/apps/documents/managers.py:20-322
文档入库流程
文档通过 Source(来源)系统进入 Mayan EDMS,该系统为不同的入库方法提供了多种后端实现。主要的入口点是 handle_file_object_upload 方法。
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
文档处理管线
一旦文档上传任务被加入队列,系统会通过多个内容提取和分析阶段对其进行处理:
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 在文档文件(物理文件存储)和文档版本(逻辑文档表示)之间保持了清晰的分离:
关键的文件和版本管理任务包括:
- 页数更新:
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
文档组织与元数据
文档通过多个系统进行组织,这些系统提供了不同的组织视角:
文档应用程序配置 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
文档状态管理与生命周期
文档在其生命周期中会经历各种状态,这些状态通过回收站系统和工作流引擎进行管理:
系统包含多个自动化的生命周期管理任务:
- 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 子系统集成:
关键的集成机制包括:
- 事件系统:
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