合同功能设计
这篇解决什么
合同怎么分层:分类 / 模板是配置,起草是申请单,通过后才进台账。变更走第二条流程,履约是流水不是审批。读完先对模块边界和表,再进台账、变更篇。
默认端口 48080,前缀 /admin-api。工程启动见 快速开始。审批接入见 业务表单开发。
业务流程及架构
合同自己不算流程引擎。起草、变更、签署在 yudao-module-contract,实现 FlowBillService,通过后回调回写。履约记录和收付款计划没有 processDefinitionKey。
示意图:左客户端。中间合同读部门和用户,起草 / 变更 / 签署走 Flowable。
| 名称 | 说明 | 仓库路径 |
|---|---|---|
| 起草 / 台账 | contract_info 通过后登记 contract_ledger | 合同台账 |
| 变更 / 履约 | 变更审批;履约只记账 | 合同变更与履约 |
| 模板 / 分类 | 先配再起草 | /contract/template、/contract/category |
不要用目录名当流程 key
起草是 contract_approve,不是 contract_info。全部 key 以 ContractBillTypeEnum 为准。
数据表 ER
主干表按 DO 画出。标的、附件、OnlyOffice 正文不进这张图。
示意图:台账用 draftContractId 指回起草单,两表不是同一行 id。履约可挂计划,本身不进 Flowable。
前后端代码
| 名称 | 说明 | 仓库路径 |
|---|---|---|
| 模块 | api 枚举 + server 实现 | ruoyi-office/yudao-module-contract/ |
| 单体引入 | yudao-module-contract-server | ruoyi-office/yudao-server/pom.xml |
| 单据枚举 | 类型码 + processDefinitionKey | yudao-module-contract-api/.../ContractBillTypeEnum.java |
| 管理端 | 合同目录 | ruoyi-office-vben/apps/web-antd/src/views/contract/ |
| 移动端 | 业务在 pages-contract | ruoyi-office-uniapp/src/pages-contract/ |
官方菜单:合同管理(/contract)。起草详情在 info/detail/,路由常见 /contract/contract-info-detail。看不到菜单先查角色。
「OA 商业版」裁剪整模块 yudao-module-contract。本指南按全功能 ALL 写。

本系统截图:合同 → 合同台账。能进列表说明模块和菜单已经在跑。

本系统截图:起草 / 详情。模型路径要对 contract-info-detail,不要照 OA 单据写 info/info。
功能开启
单体 -P boot 时已经依赖合同实现,没有单独的「合同开关」页。启动 YudaoServerApplication 即可。
客户默认包 ruoyi-office-db/dump/latest/:先 schema_*.sql 再 static_data_*.sql,带 contract_* 表、菜单、字典和已发布起草 / 变更 / 签署模型。以后改表走 ruoyi-office-db/update/。
角色要勾合同菜单和权限字,例如 contract:info:create。只开了流程中心、没开合同,发起项会被滤掉。
先建分类 /contract/category 和模板 /contract/template,再起草。在线编辑另走 /contract/onlyoffice,和 OA 云盘 OnlyOffice 不是同一个 Controller。
| 名称 | 说明 | 仓库路径 |
|---|---|---|
301 起草 | contract_approve | /contract/contract-info-detail |
302 变更 | contract_change | /contract/contract-change-detail |
303 签署 | contract_sign | /contract/contract-sign-detail |
起草页不是 info
前端详情在 views/contract/info/detail/。模型 formCustomViewPath 要对到实际 component。
履约没有第四条 key
收付款计划和履约记录没有 processDefinitionKey。不要给 /contract/performance 挂模型。
CONTRACT_APPROVE("301", "合同审批", "contract_approve"),
CONTRACT_CHANGE("302", "合同变更审批", "contract_change"),
CONTRACT_SIGN("303", "合同签署确认", "contract_sign"),摘自 ContractBillTypeEnum。第三段才是 Flowable 的 KEY_。
示意图:先库和菜单,再对 key,最后配模板。
旧文 合同功能开启 已并入本页,请收藏本篇。
