本次采用开源组件部署,所有资源可直接复用,无需二次开发,你需要提前准备1核2G以上云服务器/本地虚拟机,操作系统选CentOS7.9/Ubuntu22.04均可。
首先安装Docker与Docker Compose,执行以下命令(全程复制粘贴即可):
``` 安装Docker curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun systemctl enable --now docker 安装Docker Compose curl -L https://github.com/docker/compose/releases/download/v2.20.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose chmod +x /usr/local/bin/docker-compose ```创建部署目录,编写docker-compose.yml配置文件,内容如下,可直接复制,若本地8069、8000端口被占用,可修改ports左侧端口号:
``` version: '3' services: odoo: image: odoo:16.0 ports: - "8069:8069" depends_on: - db environment: - HOST=db - USER=odoo - PASSWORD=odoo123 db: image: postgres:14 environment: - POSTGRES_DB=postgres - POSTGRES_PASSWORD=odoo123 - POSTGRES_USER=odoo mayan-edms: image: mayanedms/mayanedms:4.4 ports: - "8000:8000" environment: - MAYAN_CELERY_BROKER_URL=redis://redis:6379/0 - MAYAN_CELERY_RESULT_BACKEND=redis://redis:6379/0 redis: image: redis:7-alpine ```执行docker-compose up -d启动所有服务,启动后访问http://你的IP:8069进入Odoo项目管理系统,默认账号admin,密码admin;访问http://你的IP:8000进入Mayan EDMS文书档案系统,默认账号admin,密码admin。
1. 登录Odoo后台,进入【设置】-【通用设置】,下拉到【开发者模式】,点击激活开发者模式。
2. 进入【设置】-【用户和公司】-【用户】,点击admin用户,编辑页面下拉到【API访问】,点击生成密钥,保存生成的API密钥(仅显示1次,后续配置要用)。
3. 进入【应用】,搜索“REST API”,找到模块base_rest和base_rest_api,点击安装,安装完成后进入模块配置,勾选允许跨域请求,跨域白名单填写http://你的IP:8000,保存。
1. 登录Mayan EDMS后台,进入【设置】-【系统】-【设置】,搜索“CORS”,找到CORS_ORIGIN_WHITELIST配置项,填写http://你的IP:8069,保存。
2. 进入【设置】-【用户】-【用户】,编辑admin用户,进入【角色】标签,勾选API访问权限、档案读写权限,再进入【API密钥】标签,点击生成密钥,保存生成的API密钥(后续同步代码需替换)。

在Odoo中创建自定义模块,编写档案同步代码,代码可直接复制使用,注意替换代码中的“你的Mayan API密钥”和“你的IP”为实际值:
``` odoo自定义模块models/archive_sync.py from odoo import models, fields, api import requests class ArchiveSync(models.Model): _name = 'archive.sync' _description = '文书档案同步' project_id = fields.Many2one('project.project', string='关联项目') archive_url = fields.Char(string='档案地址') archive_no = fields.Char(string='档案编号') @api.model def sync_archive(self, project_id, file_list): mayan_url = "http://mayan-edms:8000/api/v4/documents/" headers = {"Authorization": "Token 你的Mayan API密钥"} project_name = self.env['project.project'].browse(project_id).name for file in file_list: data = { "label": f"{project_name}_{file['name']}", "document_type_id": 1 } files = {"file": (file['name'], file['content'])} res = requests.post(mayan_url, headers=headers, data=data, files=files) if res.status_code == 201: res_data = res.json() self.create({ "project_id": project_id, "archive_url": f"http://你的IP:8000/documents/{res_data['id']}/preview/", "archive_no": res_data['uuid'] }) return True ```将上述模块安装到Odoo后,进入项目管理模块的全局设置,勾选自动同步文书档案,配置完成。
在Odoo项目详情页添加档案入口卡片,修改自定义模块的视图XML,添加如下代码:
```执行docker-compose restart odoo重启Odoo服务,进入任意项目详情页,即可看到关联档案入口,点击可直接查看该项目下所有同步的文书档案,无需切换系统。
项目下的合同、验收单、进度报告等附件上传后,无需手动操作,系统会自动触发同步接口,将文件上传到文书档案系统,生成唯一的档案编号和存证地址,避免文件丢失。
Odoo中的项目成员权限会自动同步到档案系统,仅项目负责人可编辑档案、设置归档期限,普通成员仅可查看,外部联系人无访问权限,无需二次配置权限。
在Odoo全局搜索框输入档案关键词,可直接检索到关联的文书档案内容,支持文件名、文件内容、档案编号等多维度检索,检索响应时间小于1秒,可直接定位到对应档案预览页。
1. 接口同步失败:检查两个服务的网络是否互通,防火墙是否开放8069、8000端口,两个系统的API密钥是否正确填写,文件大小是否超过默认20M限制。
2. 跨域访问报错:检查两个系统的跨域白名单是否都填写了对方的完整访问地址,注意不要遗漏http/https前缀,不要多写末尾斜杠。
3. 大文件上传失败:修改Mayan EDMS的配置项MAX_UPLOAD_SIZE,设置为104857600(即100M),执行docker-compose restart mayan-edms重启服务即可。