Skip to content

合同是如何自动生成的

了解合同从模板到 PDF 的完整过程,遇到问题时能快速定位是哪个环节出了状况。

一、整体流程

创建订单 → 审核通过 → 生成合同 → 客户签署 → 导出/预览 PDF

                        ├─ 1. 找模板:按订单关联的产品,找到该产品绑定的合同模板
                        ├─ 2. 填数据:把客户、车辆、产品、订单数据填入模板变量
                        ├─ 3. 嵌公章:读取产品配置的公章图片,嵌入 {{company_seal_image}}
                        └─ 4. 存快照:渲染结果保存为合同快照,此后内容不再变化

二、关键环节说明

1. 模板从哪里来

每个产品在系统中可关联一个合同模板(产品管理 → 合同模板)。生成合同时,系统按「订单 → 产品 → 模板」这条链路找到模板。产品没有关联启用的模板时,合同生成会失败,报「合同模板不存在或已停用」。

2. 变量替换

系统把模板中的 {{customer_name}}{{license_plate}} 等变量逐一替换为真实业务数据。要点:

  • 只识别标准变量名,写错、拼错、用旧写法的变量会原样保留在合同里。
  • 金额大写({{amount_in_words}})、证件类型中文({{customer_id_type}})、付款方式中文({{payment_plan}})等由系统自动转换。
  • 日期统一输出为 2026年6月10日 这种中文格式。
  • 车辆信息取自订单快照数据,而不是车辆档案——订单审核后修改车辆资料不影响已生成的合同。

3. 公章嵌入

公章图片配置在产品上。产品配置了公章,{{company_seal_image}} 会被替换为内嵌图片;未配置则替换为空白,不会报错。

4. 合同快照与锁定

  • 渲染完成的内容会保存为合同快照(rendered snapshot)。之后修改模板、修改客户资料,都不会改变已生成的合同——这保证了合同内容不可篡改。
  • 合同生成后订单会被锁定(contract locked)。要修改订单信息,需要先解锁/重新生成合同。

5. 客户签名

{{customer_signature}} 是特殊变量:合同生成时故意不替换,等客户在会员端完成电子签署后,导出 PDF 或预览时才动态注入签名图片。因此:

  • 未签署的合同里签名区是空白的,这是正常现象;
  • 已签署后重新导出 PDF,签名图片会自动出现;
  • 签署日期 {{sign_date}} 也会在签署后更新为实际签字日期。

三、数据流向图

客户资料 ──┐
订单信息 ──┤
车辆信息 ──┼──► 模板变量替换 ──► 合同快照 ──► PDF(Dompdf 渲染,A4)
产品信息 ──┤                    │
自定义变量 ┘                    ├─ 公章图片(产品配置)
                                └─ 客户签名(签署后注入)

四、相关阅读

车辆保险/延保业务管理系统 用户使用文档