这是一个小型合同中心设计概要,适合需要电子签章的业务,满足多个业务线。多租户。
SAAS 服务。
设计中选择E签宝,也可以替换其他电子签章通道
版本 | 修订人 | 备注 | 修改时间 |
---|---|---|---|
V1.0 | andy | 初稿 | 2020.02.03 |
V1.1 | hamish | 接口修订 | 2020.02.13 |
一、 引言
1.1 项目背景
目前合同与订单数据耦合在一起,合同模板唯一,生成合同采用硬编码方式
1.2 术语名称
电子合同:根据合同模板填充数据,数据来源于业务系统或着数据库
电子印章:E签宝生成一个电子签名,添加到电子合同的签名处
1.3 范围
业务系统,能力中心
合同生成,电子印章功能
1.4 其他约定
二、 总体设计
2.1 需求概述
客户线下自定义Word合同模板,上传至合同系统,有业务系统发起根据合同模板生成相关的电子合同信息,双方审批申请添加电子签章,生成最终版电子合同
2.2 基本涉及描述
2.3 主流程设计描述
2.3.1制作合同模板
2.3.2供应链金融创建合同流程
2.4 技术目标
略
三、模块设计
模板
合同
电子签章对接
签章账户
3.1 合同模板模块
合同模板模块包含模板的上传、列表以及管理,合同模板涉及到一些法律安全问题,须产品和法务的审批或者由法务创建
3.2 合同信息模块
合同信息模块包含订单基本信息,附加条款信息,以及电子签章信息,订单及附加信息全部都由业务方传入,合同中心不去主动拉取信息,电子签章信息,需要经过审批流程,确认无误才可以使用电子签章
3.3 电子签章模块
电子签章的基本信息维护,申请变更记录
电子签章对接,电子签章开户,电子签章认证信息管理。
确认:签署意愿是否对接
3.4 电子签章服务对接
对接不同服务商的电子签证,满足不同业务线需求z
四 、接口设计
4.0 上传合同模板附件
URL: http://localhost:8080/contract/temp/upload
HTTP: POST
请求参数:
参数名 | 类型 | 含义 | 是否必传 | 备注 |
---|---|---|---|---|
applicationId | Long | 业务应用ID | M | 业务应用:供应链金融 |
file | MultipartFile | 线下制作的合同模板 | M | word 文件模板 |
响应参数:
{
"code": 200,
"data": {
"path" : "string",
"tempId" : "String"
},
"message": "操作成功",
"success": true
}
返回模板ID
使用模板时根据 应用ID 模板ID 确定使用的模板
4.1 获取合同模板列表
URL: http://localhost:8080/contract/temp/list
HTTP: GET
请求参数:
参数名 | 类型 | 含义 | 是否必传 | 备注 |
---|---|---|---|---|
applicationId | Long | 应用ID | M | 应用ID |
响应参数:
{
"code": 200,
"data": {
"list": [{
"tempId ": 1,
"tempName":"二方合同模板",
"tempPath": "string"
}]
},
"message": "操作成功",
"success": true
}
4.2 创建合同接口 (预览)
URL: http://localhost:8080/contract/temp/add
HTTP: POST
请求参数:
参数名 | 类型 | 含义 | 是否必传 | 备注 |
---|---|---|---|---|
applicationId | Long | 应用ID | M | 应用ID |
boothList | Map<String,String> | 占位符列表 | M | 需要替换的占位符值 |
tempId | String | 合同模板ID | M | 模板ID |
响应参数:
{
"code": 200,
"data": {
"contractId": 1L, //合同编号
"tempPath": "string" // 合同预览地址
},
"message": "操作成功",
"success": true
}
生成预览合同,PDF,应用服务保存合同ID
4.3 编辑合同模板(模板更新)
URL: http://localhost:8080/contract/temp/update
HTTP: POST
请求参数:
参数名 | 类型 | 含义 | 是否必传 | 备注 |
---|---|---|---|---|
applicationIdId | Long | 应用ID | M | |
tempId | Long | 模板Id | M | |
file | MultipartFile | 线下制作的合同模板 | M | word 文件模板 |
响应参数:
{
"code": 200,
"data": {
"tempId ": 1,
"tempName":"劳动合同模板名称"
},
"message": "操作成功",
"success": true
}
合同模板版本问题
4.6 获取合同详情接口(合同下载)
URL: http://localhost:8080/contract/info/get
HTTP: GET
请求参数:
参数名 | 类型 | 含义 | 是否必传 | 备注 |
---|---|---|---|---|
applicationId | Long | 应用ID | M | |
contractId | Long | 合同 Id | M |
响应参数:
{
"code": 200,
"data": {"contractId ": 1,
"contractPath": "string",
"contractName":"contractName"
"contractURL": "http:// xxxx.pdf"
},
"message": "操作成功",
"success": true
}
讨论 :合同中心鉴权粒度
4.7 申请电子签章(电子签章开户-企业)
URL: http://localhost:8080/contract/electronic/apply
HTTP: POST
请求参数:
参数名 | 类型 | 含义 | 是否必传 | 备注 |
---|---|---|---|---|
applicationId | Long | 应用ID | M | 应用ID |
String(30) | 邮箱地址 | 可空 | 备注 | |
mobile | String(11) | 手机号码 | 可空 | |
name | String(20) | 机构名称 | M | |
organType | int | 单位类型,0-普通企业,1-社会团体,2-事业单位,3-民办非企业单位,4-党政及国家机构,默认0 | 可空 | |
userType | int | 注册类型,1-代理人注册,2-法人注册,默认1 | 可空 | |
organCode | String(18) | 组织机构代码号、社会信用代码号或工商注册号 | M | |
legalName | String(20) | 法定代表姓名,当注册类型为2时必填 | 可空 | |
legalIdNo | String(25) | 法定代表身份证号/护照号,当注册类型为2时必填 | 可空 | |
legalArea | int | 法定代表人归属地,0-大陆,1-香港,2-澳门,3-台湾,4-外籍,默认0 | 可空 | |
agentName | String(20) | 代理人姓名,当注册类型为1时必填 | 可空 | |
agentIdNo | String(25) | 代理人身份证号,当注册类型为1时必填 | 可空 | |
address | String(100) | 公司地址 | 可空 | |
scope | String(100) | 经营范围 | 可空 | |
electronicType | String | 电子签章服务商 | M | 默认E签宝 |
regType | [OrganRegType] | 企业注册类型,含组织机构代码号、多证合一或工商注册码,默认组织机构代码号 | M |
响应参数:
{
"code": 200,
"data": {
"electronicId": 1
},
"message": "操作成功",
"success": true
}
合同中心电子签章ID
可以对应多个第三方电子签章服务。
新建一张电子签章表
4.8 获取电子签章信息
URL: http://localhost:8080/contract/electronic/get
HTTP: GET
请求参数:
参数名 | 类型 | 含义 | 是否必传 | 备注 |
---|---|---|---|---|
applicationId | Long | 应用ID | M | |
electronicId | Long | 电子签章Id | M | 系统电子签章ID 维护与第三方系统账户关系,对接多个电子签章服务 |
响应参数:
{
"code": 200,
"data": {
},
"message": "操作成功",
"success": true
}
4.9 发送签署短信验证码
URL: http://localhost:8080/contract/electronic/send-sign-mobile-code
HTTP: POST
请求参数:
参数名 | 类型 | 含义 | 是否必传 | 备注 |
---|---|---|---|---|
applicationId | Long | 应用ID | M | |
electronicId | Long | 电子签章Id | M | 电子签章账户ID |
响应参数:
{
"code": 200,
"data": {
},
"message": "操作成功",
"success": true
}
4.10 发送签署短信验证码(指定手机号码)
URL: http://localhost:8080/contract/electronic/send-sign-mobile-code-3rd
HTTP: POST
请求参数:
参数名 | 类型 | 含义 | 是否必传 | 备注 |
---|---|---|---|---|
applicationId | Long | 应用ID | M | |
electronicId | Long | 电子签章Id | M | 电子签章账户ID |
mobile | String | 手机号码 | M | |
isForeign | boolean | 标记是否为国外账号 | true为国内手机号,false为国外手机号,默认true | |
响应参数:
{
"code": 200,
"data": {
},
"message": "操作成功",
"success": true
}
4.11 使用电子签章 (合同盖章)
URL: http://localhost:8080/contract/electronic/use
HTTP: POST
请求参数:
参数名 | 类型 | 含义 | 是否必传 | 备注 |
---|---|---|---|---|
applicationId | Long | 应用ID | M | |
electronicId | Long | 电子签章Id | M | |
contractId | String | 合同ID | M | |
code | String | 验证码 | M | |
响应参数:
{
"code": 200,
"data": {
},
"message": "操作成功",
"success": true
}
五、领域模型图
六、数据库设计
6.1合同模板表(contract_temp)
字段名称 | 字段类型 | 长度 | 是否为空 | 描述 |
---|---|---|---|---|
id | bigint | 20 | 否 | 主键 |
user_id | varchar | 40 | 否 | 企业id |
name | varchar | 40 | 否 | 合同模板名称 |
state | char | 1 | 否 | 合同模板状态 |
gmt_create_time | datetime | 否 | 创建时间 | |
gmt_modify_time | datetime | 否 | 修改时间 | |
creator | varchar | 20 | 创建人 | |
modifier | varchar | 20 | 修改人 | |
remark | varchar | 40 | 是 | 备注 |
6.2 合同模板占位符表(template_placeholder)
信息校验,管理后台展示。
字段名称 | 字段类型 | 长度 | 是否为空 | 描述 |
---|---|---|---|---|
id | bigint | 20 | 否 | 主键 |
gmt_create_time | datetime | 否 | 创建时间 | |
gmt_modify_time | datetime | 否 | 修改时间 | |
creator | varchar | 20 | 创建人 | |
modifier | varchar | 20 | 修改人 | |
user_id | varchar | 40 | 否 | 企业id |
contract_temp_id | bigint | 20 | 否 | 合同模板主键 |
placeholder_name | varchar | 30 | 否 | 模板中占位符名称 |
placeholder_value | varchar | 30 | 否 | 模板中占位符的值 |
6.3 合同表
字段名称 | 字段类型 | 长度 | 是否为空 | 描述 |
---|---|---|---|---|
id | bigint | 20 | 否 | 主键 |
gmt_create_time | datetime | 否 | 创建时间 | |
gmt_modify_time | datetime | 否 | 修改时间 | |
creator | varchar | 20 | 创建人 | |
modifier | varchar | 20 | 修改人 | |
client_id | varchar | 40 | 否 | 业务线id |
name | varchar | 30 | 否 | 合同名称 |
file_id | varchar | 100 | 否 | 合同文件ID |
contract_status | varchar | 20 | 否 | 合同状态:枚举,已签字,已作废,未签字 |
contract_info | varchar | 1000 | 否 | 合同中占位符内容json存储 |
6.4 电子签章申请表
字段名称 | 字段类型 | 长度 | 是否为空 | 描述 |
---|---|---|---|---|
id | bigint | 20 | 否 | 主键 |
gmt_create_time | datetime | 否 | 创建时间 | |
gmt_modify_time | datetime | 否 | 修改时间 | |
creator | varchar | 20 | 创建人 | |
modifier | varchar | 20 | 修改人 | |
company_id | varchar | 40 | 否 | 企业id |
holder | varchar | 30 | 否 | 持章人 |
holder_tel | varchar | 11 | 否 | 持章人手机号 |
state | tinyint | 1 | 否 | 状态 |
type | tinyint | 4 | 否 | 类型 1公章 |
user_id | varchar | 40 | 否 | 用户id |
系统发短息还是选择签章服务发短信
6.5 电子印章表(signature_seal)
财务章、合同章
字段名称 | 字段类型 | 长度 | 是否为空 | 描述 |
---|---|---|---|---|
id | bigint | 20 | 否 | 主键 |
gmt_create_time | datetime | 否 | 创建时间 | |
gmt_modify_time | datetime | 否 | 修改时间 | |
creator | varchar | 20 | 创建人 | |
modifier | varchar | 20 | 修改人 | |
third_company_id | varchar | 40 | 否 | 企业id |
user_id | varchar | 40 | 否 | 用户id |
third_account_id | varchar | 40 | 否 | 账号标识 3方系统唯一标识 |
seal_data | text | 0 | 否 | 电子印章图片的Base64数据 |
seal_type | varchar | 否 | 电子印章类型 | |
state | tinyint | 1 | 否 | 状态 1有效 0无效 |
6.6 电子签章账户表(signature_account)
字段名称 | 字段类型 | 长度 | 是否为空 | 描述 |
---|---|---|---|---|
id | bigint | 20 | 否 | 主键 electronicId |
gmt_create_time | datetime | 否 | 创建时间 | |
gmt_modify_time | datetime | 否 | 修改时间 | |
creator | varchar | 20 | 创建人 | |
modifier | varchar | 20 | 修改人 | |
third_company_id | varchar | 40 | 否 | 企业id |
user_id | varchar | 40 | 否 | 用户id |
electronicType | varchar | 80 | 否 | 签章服务商类型 |
third_account_id | varchar | 40 | 否 | 账号标识 3方系统唯一标识 |
state | tinyint | 1 | 否 | 状态 1有效 0无效 |
七、技术架构
7.1 技术选型
技术栈 | 用途说明 |
---|---|
SpringBoot2.2.2 | |
SpringCloud2.2.0[Hoxton] | Spring Cloud 为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智能路由,微代理,控制总线) |
Nacos | 配置中心、服务注册中心 |
Mybatis-plus | Mybatis 功能加强,分页 |
Mysql | 关系型数据库,数据持久化,业务数据存储 |
八、数据架构
**8.1 持久化机制的选择 **
MySQL 数据库持久化。Mysql 使用Mysql 集群。
**8.2 持久化存储方案 **
Mybatis-plus + Mysql 持久存储业务数据。
8.3 数据同步与复制策略
RDS 策略。
九、部署方案
Jenkins 阿里云
十、计划排期
开发排期:2月19日-2月24日
对接供应链金融:2月25日-3月3日
审核 使用新的架构构建,非制式合同的电子签章