# 报装业务系统电子签章数据库设计 ## 文档信息 | 项目信息 | 详情 | |---------|------| | **项目名称** | 福建水务营收系统 | | **文档类型** | 数据库设计文档 | | **文档版本** | v1.0 | | **编写日期** | 2024-12-19 | | **文档状态** | 🟡 进行中 | ## 表结构设计 ### 1. 电子合同表(installation_contract) #### 表描述 存储报装业务系统中的电子合同信息,包括合同基本信息、状态和文件链接等。 #### 表结构 | 字段名 | 类型 | 长度 | 允许空 | 默认值 | 主键 | 说明 | |-------|------|------|-------|-------|------|------| | id | bigint | - | 否 | - | 是 | 主键ID | | contract_code | varchar | 32 | 否 | - | - | 合同编号 | | installation_id | bigint | - | 否 | - | - | 报装申请ID | | contract_type | varchar | 20 | 否 | - | - | 合同类型 | | contract_title | varchar | 100 | 否 | - | - | 合同标题 | | contract_content | text | - | 是 | NULL | - | 合同内容 | | contract_file_url | varchar | 255 | 是 | NULL | - | 合同文件URL | | contract_status | varchar | 20 | 否 | - | - | 合同状态 | | valid_from | datetime | - | 是 | NULL | - | 生效时间 | | valid_to | datetime | - | 是 | NULL | - | 到期时间 | | create_by | varchar | 64 | 是 | NULL | - | 创建人 | | create_time | datetime | - | 否 | CURRENT_TIMESTAMP | - | 创建时间 | | update_by | varchar | 64 | 是 | NULL | - | 更新人 | | update_time | datetime | - | 否 | CURRENT_TIMESTAMP | - | 更新时间 | #### 索引设计 | 索引名 | 索引类型 | 字段 | 说明 | |-------|---------|------|------| | PRIMARY | 主键 | id | 主键索引 | | uk_contract_code | 唯一索引 | contract_code | 合同编号唯一索引 | | idx_installation_id | 普通索引 | installation_id | 报装申请ID索引 | #### 字段说明 - **contract_type**: 合同类型,如"用水协议"、"施工合同"等 - **contract_status**: 合同状态,包括"待签署"、"签署中"、"已签署"、"已作废"等 ### 2. 电子签章记录表(installation_signature) #### 表描述 记录电子合同的签章信息,包括签署方信息、签署时间、签章数据等。 #### 表结构 | 字段名 | 类型 | 长度 | 允许空 | 默认值 | 主键 | 说明 | |-------|------|------|-------|-------|------|------| | id | bigint | - | 否 | - | 是 | 主键ID | | signature_code | varchar | 32 | 否 | - | - | 签章编号 | | contract_id | bigint | - | 否 | - | - | 合同ID | | signer_type | varchar | 20 | 否 | - | - | 签署方类型 | | signer_id | varchar | 64 | 否 | - | - | 签署方ID | | signer_name | varchar | 100 | 否 | - | - | 签署方名称 | | signature_time | datetime | - | 是 | NULL | - | 签署时间 | | signature_ip | varchar | 50 | 是 | NULL | - | 签署IP | | signature_location | varchar | 255 | 是 | NULL | - | 签署位置 | | signature_image | varchar | 255 | 是 | NULL | - | 签章图像URL | | signature_data | text | - | 是 | NULL | - | 签章数据 | | timestamp_cert | text | - | 是 | NULL | - | 时间戳凭证 | | signature_status | varchar | 20 | 否 | - | - | 签章状态 | | create_time | datetime | - | 否 | CURRENT_TIMESTAMP | - | 创建时间 | | update_time | datetime | - | 否 | CURRENT_TIMESTAMP | - | 更新时间 | #### 索引设计 | 索引名 | 索引类型 | 字段 | 说明 | |-------|---------|------|------| | PRIMARY | 主键 | id | 主键索引 | | uk_signature_code | 唯一索引 | signature_code | 签章编号唯一索引 | | idx_contract_id | 普通索引 | contract_id | 合同ID索引 | | idx_signer_id | 普通索引 | signer_id | 签署方ID索引 | #### 字段说明 - **signer_type**: 签署方类型,如"客户"、"水务公司"等 - **signature_status**: 签章状态,包括"待签署"、"已签署"、"签署失败"、"已撤销"等 - **signature_data**: 签章的原始数据,通常为加密后的数据 - **timestamp_cert**: 时间戳凭证,用于证明签署时间的真实性 ### 3. 电子存证记录表(installation_evidence) #### 表描述 存储电子合同的存证信息,包括存证哈希、存证时间、存证凭证等。 #### 表结构 | 字段名 | 类型 | 长度 | 允许空 | 默认值 | 主键 | 说明 | |-------|------|------|-------|-------|------|------| | id | bigint | - | 否 | - | 是 | 主键ID | | evidence_code | varchar | 32 | 否 | - | - | 存证编号 | | contract_id | bigint | - | 否 | - | - | 合同ID | | evidence_type | varchar | 20 | 否 | - | - | 存证类型 | | evidence_hash | varchar | 128 | 否 | - | - | 存证哈希值 | | evidence_time | datetime | - | 否 | - | - | 存证时间 | | evidence_cert | text | - | 是 | NULL | - | 存证凭证 | | evidence_status | varchar | 20 | 否 | - | - | 存证状态 | | storage_location | varchar | 255 | 是 | NULL | - | 存储位置 | | verify_url | varchar | 255 | 是 | NULL | - | 验证URL | | create_time | datetime | - | 否 | CURRENT_TIMESTAMP | - | 创建时间 | | update_time | datetime | - | 否 | CURRENT_TIMESTAMP | - | 更新时间 | #### 索引设计 | 索引名 | 索引类型 | 字段 | 说明 | |-------|---------|------|------| | PRIMARY | 主键 | id | 主键索引 | | uk_evidence_code | 唯一索引 | evidence_code | 存证编号唯一索引 | | idx_contract_id | 普通索引 | contract_id | 合同ID索引 | #### 字段说明 - **evidence_type**: 存证类型,如"区块链存证"、"第三方存证"等 - **evidence_hash**: 存证文件的哈希值,通常使用SHA-256算法生成 - **evidence_status**: 存证状态,包括"存证中"、"存证成功"、"存证失败"等 - **verify_url**: 存证验证URL,可用于在线验证存证的真实性 ### 4. CA系统配置表(installation_ca_config) #### 表描述 存储泛微CA电子签章系统的配置信息,包括接口地址、认证信息等。 #### 表结构 | 字段名 | 类型 | 长度 | 允许空 | 默认值 | 主键 | 说明 | |-------|------|------|-------|-------|------|------| | id | bigint | - | 否 | - | 是 | 主键ID | | config_name | varchar | 50 | 否 | - | - | 配置名称 | | config_key | varchar | 50 | 否 | - | - | 配置键 | | config_value | varchar | 500 | 否 | - | - | 配置值 | | config_desc | varchar | 255 | 是 | NULL | - | 配置描述 | | is_enabled | tinyint | - | 否 | 1 | - | 是否启用 | | create_by | varchar | 64 | 是 | NULL | - | 创建人 | | create_time | datetime | - | 否 | CURRENT_TIMESTAMP | - | 创建时间 | | update_by | varchar | 64 | 是 | NULL | - | 更新人 | | update_time | datetime | - | 否 | CURRENT_TIMESTAMP | - | 更新时间 | #### 索引设计 | 索引名 | 索引类型 | 字段 | 说明 | |-------|---------|------|------| | PRIMARY | 主键 | id | 主键索引 | | uk_config_key | 唯一索引 | config_key | 配置键唯一索引 | #### 字段说明 - **config_key**: 配置键,如"ca.api.url"、"ca.api.key"等 - **config_value**: 配置值,存储实际的配置内容 - **is_enabled**: 是否启用,1表示启用,0表示禁用 ### 5. 签章模板表(installation_signature_template) #### 表描述 存储电子签章模板信息,用于快速生成签章。 #### 表结构 | 字段名 | 类型 | 长度 | 允许空 | 默认值 | 主键 | 说明 | |-------|------|------|-------|-------|------|------| | id | bigint | - | 否 | - | 是 | 主键ID | | template_code | varchar | 32 | 否 | - | - | 模板编号 | | template_name | varchar | 100 | 否 | - | - | 模板名称 | | template_type | varchar | 20 | 否 | - | - | 模板类型 | | template_image | varchar | 255 | 是 | NULL | - | 模板图像URL | | template_data | text | - | 是 | NULL | - | 模板数据 | | is_default | tinyint | - | 否 | 0 | - | 是否默认 | | is_enabled | tinyint | - | 否 | 1 | - | 是否启用 | | create_by | varchar | 64 | 是 | NULL | - | 创建人 | | create_time | datetime | - | 否 | CURRENT_TIMESTAMP | - | 创建时间 | | update_by | varchar | 64 | 是 | NULL | - | 更新人 | | update_time | datetime | - | 否 | CURRENT_TIMESTAMP | - | 更新时间 | #### 索引设计 | 索引名 | 索引类型 | 字段 | 说明 | |-------|---------|------|------| | PRIMARY | 主键 | id | 主键索引 | | uk_template_code | 唯一索引 | template_code | 模板编号唯一索引 | #### 字段说明 - **template_type**: 模板类型,如"个人签章"、"企业签章"等 - **template_data**: 模板数据,包含签章的样式、大小等信息 - **is_default**: 是否默认模板,1表示是,0表示否 - **is_enabled**: 是否启用,1表示启用,0表示禁用 ## 表关系设计 ```mermaid erDiagram installation_contract ||--o{ installation_signature : "签署" installation_contract ||--o{ installation_evidence : "存证" installation_signature }|--|| installation_signature_template : "使用" installation_contract }|--|| installation_application : "关联" installation_contract { bigint id PK varchar contract_code bigint installation_id FK varchar contract_type varchar contract_title text contract_content varchar contract_file_url varchar contract_status datetime valid_from datetime valid_to } installation_signature { bigint id PK varchar signature_code bigint contract_id FK varchar signer_type varchar signer_id varchar signer_name datetime signature_time varchar signature_ip varchar signature_location varchar signature_image text signature_data text timestamp_cert varchar signature_status } installation_evidence { bigint id PK varchar evidence_code bigint contract_id FK varchar evidence_type varchar evidence_hash datetime evidence_time text evidence_cert varchar evidence_status varchar storage_location varchar verify_url } installation_ca_config { bigint id PK varchar config_name varchar config_key varchar config_value varchar config_desc tinyint is_enabled } installation_signature_template { bigint id PK varchar template_code varchar template_name varchar template_type varchar template_image text template_data tinyint is_default tinyint is_enabled } installation_application { bigint id PK varchar application_code varchar customer_name varchar application_status } ``` ## 数据字典 ### 合同类型(contract_type) | 代码 | 名称 | 说明 | |------|------|------| | WATER_AGREEMENT | 用水协议 | 客户与水务公司签订的用水服务协议 | | CONSTRUCTION_CONTRACT | 施工合同 | 水务工程施工合同 | | INSTALLATION_AGREEMENT | 报装协议 | 新用户报装服务协议 | ### 合同状态(contract_status) | 代码 | 名称 | 说明 | |------|------|------| | DRAFT | 草稿 | 合同草稿状态,尚未发起签署 | | PENDING | 待签署 | 合同已创建,等待签署 | | SIGNING | 签署中 | 合同正在签署过程中 | | COMPLETED | 已签署 | 合同已完成所有签署 | | EXPIRED | 已过期 | 合同已过期 | | CANCELLED | 已作废 | 合同已被作废 | ### 签署方类型(signer_type) | 代码 | 名称 | 说明 | |------|------|------| | CUSTOMER | 客户 | 用水客户 | | COMPANY | 水务公司 | 水务服务提供方 | | CONTRACTOR | 施工方 | 工程施工单位 | | SUPERVISOR | 监理方 | 工程监理单位 | ### 签章状态(signature_status) | 代码 | 名称 | 说明 | |------|------|------| | PENDING | 待签署 | 等待签署 | | COMPLETED | 已签署 | 签署完成 | | FAILED | 签署失败 | 签署过程中出现错误 | | REVOKED | 已撤销 | 签章已被撤销 | ### 存证类型(evidence_type) | 代码 | 名称 | 说明 | |------|------|------| | BLOCKCHAIN | 区块链存证 | 使用区块链技术进行电子存证 | | THIRD_PARTY | 第三方存证 | 通过第三方机构进行电子存证 | | LOCAL | 本地存证 | 在本地系统进行电子存证 | ### 存证状态(evidence_status) | 代码 | 名称 | 说明 | |------|------|------| | PROCESSING | 存证中 | 正在进行存证 | | COMPLETED | 存证成功 | 存证已完成 | | FAILED | 存证失败 | 存证过程中出现错误 | | EXPIRED | 已过期 | 存证已过期 | ## 数据库优化建议 ### 索引优化 1. **合理使用索引**:已为高频查询字段创建索引,如合同ID、签署方ID等 2. **避免过度索引**:仅为必要的查询条件创建索引,避免影响写入性能 3. **考虑复合索引**:对于经常一起查询的字段,考虑创建复合索引 ### 性能优化 1. **大字段处理**:对于签章数据、存证凭证等大字段,考虑使用文件存储,数据库中只存储文件路径 2. **分表策略**:当数据量增长到一定程度时,考虑按年份或业务单元进行分表 3. **缓存机制**:对于频繁访问的合同和签章信息,实施适当的缓存策略 ### 安全建议 1. **敏感数据加密**:对于签章数据、存证哈希等敏感信息,采用加密存储 2. **访问控制**:实施严格的数据库访问控制,限制对签章表的直接访问 3. **审计日志**:记录所有对签章和存证数据的操作,便于追踪和审计 ## 数据迁移与升级计划 ### 初始数据迁移 1. **现有合同数据导入**:将现有纸质合同信息导入电子合同表 2. **签章模板初始化**:预设常用的签章模板 3. **CA系统配置初始化**:配置泛微CA系统的连接参数 ### 版本升级计划 1. **v1.1版本**:增加签章权限控制表,细化签章权限管理 2. **v1.2版本**:增加签章日志表,记录详细的签章操作日志 3. **v2.0版本**:支持多CA系统集成,增加CA系统路由表 ## 附录 ### SQL创建脚本 ```sql -- 电子合同表 CREATE TABLE `installation_contract` ( `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键ID', `contract_code` varchar(32) NOT NULL COMMENT '合同编号', `installation_id` bigint NOT NULL COMMENT '报装申请ID', `contract_type` varchar(20) NOT NULL COMMENT '合同类型', `contract_title` varchar(100) NOT NULL COMMENT '合同标题', `contract_content` text COMMENT '合同内容', `contract_file_url` varchar(255) DEFAULT NULL COMMENT '合同文件URL', `contract_status` varchar(20) NOT NULL COMMENT '合同状态', `valid_from` datetime DEFAULT NULL COMMENT '生效时间', `valid_to` datetime DEFAULT NULL COMMENT '到期时间', `create_by` varchar(64) DEFAULT NULL COMMENT '创建人', `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `update_by` varchar(64) DEFAULT NULL COMMENT '更新人', `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', PRIMARY KEY (`id`), UNIQUE KEY `uk_contract_code` (`contract_code`), KEY `idx_installation_id` (`installation_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='报装合同表'; -- 电子签章记录表 CREATE TABLE `installation_signature` ( `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键ID', `signature_code` varchar(32) NOT NULL COMMENT '签章编号', `contract_id` bigint NOT NULL COMMENT '合同ID', `signer_type` varchar(20) NOT NULL COMMENT '签署方类型', `signer_id` varchar(64) NOT NULL COMMENT '签署方ID', `signer_name` varchar(100) NOT NULL COMMENT '签署方名称', `signature_time` datetime DEFAULT NULL COMMENT '签署时间', `signature_ip` varchar(50) DEFAULT NULL COMMENT '签署IP', `signature_location` varchar(255) DEFAULT NULL COMMENT '签署位置', `signature_image` varchar(255) DEFAULT NULL COMMENT '签章图像URL', `signature_data` text COMMENT '签章数据', `timestamp_cert` text COMMENT '时间戳凭证', `signature_status` varchar(20) NOT NULL COMMENT '签章状态', `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', PRIMARY KEY (`id`), UNIQUE KEY `uk_signature_code` (`signature_code`), KEY `idx_contract_id` (`contract_id`), KEY `idx_signer_id` (`signer_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='报装签章记录表'; -- 电子存证记录表 CREATE TABLE `installation_evidence` ( `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键ID', `evidence_code` varchar(32) NOT NULL COMMENT '存证编号', `contract_id` bigint NOT NULL COMMENT '合同ID', `evidence_type` varchar(20) NOT NULL COMMENT '存证类型', `evidence_hash` varchar(128) NOT NULL COMMENT '存证哈希值', `evidence_time` datetime NOT NULL COMMENT '存证时间', `evidence_cert` text COMMENT '存证凭证', `evidence_status` varchar(20) NOT NULL COMMENT '存证状态', `storage_location` varchar(255) DEFAULT NULL COMMENT '存储位置', `verify_url` varchar(255) DEFAULT NULL COMMENT '验证URL', `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', PRIMARY KEY (`id`), UNIQUE KEY `uk_evidence_code` (`evidence_code`), KEY `idx_contract_id` (`contract_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='报装存证记录表'; -- CA系统配置表 CREATE TABLE `installation_ca_config` ( `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键ID', `config_name` varchar(50) NOT NULL COMMENT '配置名称', `config_key` varchar(50) NOT NULL COMMENT '配置键', `config_value` varchar(500) NOT NULL COMMENT '配置值', `config_desc` varchar(255) DEFAULT NULL COMMENT '配置描述', `is_enabled` tinyint NOT NULL DEFAULT '1' COMMENT '是否启用', `create_by` varchar(64) DEFAULT NULL COMMENT '创建人', `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `update_by` varchar(64) DEFAULT NULL COMMENT '更新人', `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', PRIMARY KEY (`id`), UNIQUE KEY `uk_config_key` (`config_key`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='CA系统配置表'; -- 签章模板表 CREATE TABLE `installation_signature_template` ( `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键ID', `template_code` varchar(32) NOT NULL COMMENT '模板编号', `template_name` varchar(100) NOT NULL COMMENT '模板名称', `template_type` varchar(20) NOT NULL COMMENT '模板类型', `template_image` varchar(255) DEFAULT NULL COMMENT '模板图像URL', `template_data` text COMMENT '模板数据', `is_default` tinyint NOT NULL DEFAULT '0' COMMENT '是否默认', `is_enabled` tinyint NOT NULL DEFAULT '1' COMMENT '是否启用', `create_by` varchar(64) DEFAULT NULL COMMENT '创建人', `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `update_by` varchar(64) DEFAULT NULL COMMENT '更新人', `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', PRIMARY KEY (`id`), UNIQUE KEY `uk_template_code` (`template_code`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='签章模板表'; ```