-- OnboardX 契约锁电子签流程表 -- 适用数据库:MySQL 8.0+ -- 说明: -- 1. 一条电子签流程可以包含同一入职任务下的多份合同。 -- 2. ProviderContractId、ProviderDocumentId 一律使用 VARCHAR,避免第三方 19 位 Id 在前端精度丢失。 -- 3. 回调事件通过 PayloadHash 幂等处理,可安全接收契约锁重复通知。 SET NAMES utf8mb4; CREATE TABLE IF NOT EXISTS `ob_electronic_sign_process` ( `Id` BIGINT NOT NULL COMMENT '主键', `TaskId` BIGINT NOT NULL COMMENT '入职任务Id', `EmployeeId` BIGINT NOT NULL COMMENT '正式员工Id', `Provider` VARCHAR(30) NOT NULL DEFAULT 'qiyuesuo' COMMENT '电子签服务商', `BizId` VARCHAR(100) NOT NULL COMMENT '本系统幂等业务编号', `IsCurrent` TINYINT(1) NULL DEFAULT 1 COMMENT '是否为任务当前电子签流程,历史流程为空', `ProviderContractId` VARCHAR(100) NULL COMMENT '契约锁合同流程Id', `CategoryId` VARCHAR(100) NOT NULL COMMENT '契约锁业务分类Id快照', `SealId` VARCHAR(100) NOT NULL COMMENT '契约锁印章Id快照', `Subject` VARCHAR(300) NOT NULL COMMENT '电子签流程标题', `EmployeeName` VARCHAR(100) NOT NULL COMMENT '员工姓名快照', `EmployeeMobile` VARCHAR(30) NOT NULL COMMENT '员工手机号快照', `EmployeeIdCardNumber` VARCHAR(30) NULL COMMENT '员工身份证号码快照', `CreatorName` VARCHAR(100) NOT NULL COMMENT '创建人姓名快照', `CreatorMobile` VARCHAR(30) NOT NULL COMMENT '创建人手机号快照', `SignStatus` VARCHAR(40) NOT NULL COMMENT '本系统电子签状态', `ProviderStatus` VARCHAR(60) NULL COMMENT '契约锁原始合同状态', `SignUrl` LONGTEXT NULL COMMENT '员工签署页面地址', `SignUrlExpireAt` DATETIME(3) NULL COMMENT '签署页面地址到期时间', `StartedAt` DATETIME(3) NOT NULL COMMENT '管理员发起时间', `SentAt` DATETIME(3) NULL COMMENT '合同发送时间', `CompletedAt` DATETIME(3) NULL COMMENT '全部签署完成时间', `ArchivedAt` DATETIME(3) NULL COMMENT '归档完成时间', `ArchiveFileId` BIGINT NULL COMMENT '完整归档ZIP文件Id', `LastSyncedAt` DATETIME(3) NULL COMMENT '最后主动同步时间', `LastCallbackAt` DATETIME(3) NULL COMMENT '最后回调时间', `LastError` LONGTEXT NULL COMMENT '最近一次失败原因', `RetryCount` INT NOT NULL DEFAULT 0 COMMENT '失败重试次数', `ReissueReason` VARCHAR(500) NULL COMMENT '重新发起原因', `ReissuedAt` DATETIME(3) NULL COMMENT '被新流程替代时间', `ReissuedByProcessId` BIGINT NULL COMMENT '替代当前流程的新流程Id', `ExtJson` LONGTEXT NULL COMMENT '扩展信息', `Status` VARCHAR(20) NULL DEFAULT 'enable' COMMENT '启用状态', `CreateTime` DATETIME(3) NULL COMMENT '创建时间', `UpdateTime` DATETIME(3) NULL COMMENT '更新时间', `CreateUserId` BIGINT NULL COMMENT '创建者Id', `UpdateUserId` BIGINT NULL COMMENT '修改者Id', `CreateUser` VARCHAR(200) NULL COMMENT '创建人', `UpdateUser` VARCHAR(200) NULL COMMENT '更新人', `IsDelete` TINYINT(1) NULL DEFAULT 0 COMMENT '软删除', PRIMARY KEY (`Id`), UNIQUE KEY `uk_ob_esign_process_biz` (`BizId`), UNIQUE KEY `uk_ob_esign_process_current` (`TaskId`, `IsCurrent`), UNIQUE KEY `uk_ob_esign_process_provider_contract` (`ProviderContractId`), KEY `idx_ob_esign_process_task` (`TaskId`, `StartedAt`), KEY `idx_ob_esign_process_status` (`SignStatus`, `UpdateTime`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='入职电子签流程'; CREATE TABLE IF NOT EXISTS `ob_electronic_sign_document` ( `Id` BIGINT NOT NULL COMMENT '主键', `SignProcessId` BIGINT NOT NULL COMMENT '电子签流程Id', `TaskContractId` BIGINT NOT NULL COMMENT '任务合同Id', `ProviderDocumentId` VARCHAR(100) NOT NULL COMMENT '契约锁文档Id', `DocumentName` VARCHAR(300) NOT NULL COMMENT '文档名称快照', `DocumentSort` INT NOT NULL DEFAULT 1 COMMENT '文档顺序', `OriginalDocxFileId` BIGINT NOT NULL COMMENT '原始DOCX文件Id', `SignedPdfFileId` BIGINT NULL COMMENT '签署完成PDF文件Id', `EmployeeSignKeyword` VARCHAR(200) NOT NULL COMMENT '员工签名关键字快照', `CompanySealKeyword` VARCHAR(200) NOT NULL COMMENT '企业盖章关键字快照', `EmployeeActionId` VARCHAR(100) NULL COMMENT '员工签署动作Id', `CompanyActionId` VARCHAR(100) NULL COMMENT '企业盖章动作Id', `ExtJson` LONGTEXT NULL COMMENT '扩展信息', `Status` VARCHAR(20) NULL DEFAULT 'enable' COMMENT '启用状态', `CreateTime` DATETIME(3) NULL COMMENT '创建时间', `UpdateTime` DATETIME(3) NULL COMMENT '更新时间', `CreateUserId` BIGINT NULL COMMENT '创建者Id', `UpdateUserId` BIGINT NULL COMMENT '修改者Id', `CreateUser` VARCHAR(200) NULL COMMENT '创建人', `UpdateUser` VARCHAR(200) NULL COMMENT '更新人', `IsDelete` TINYINT(1) NULL DEFAULT 0 COMMENT '软删除', PRIMARY KEY (`Id`), UNIQUE KEY `uk_ob_esign_document_task_contract` (`SignProcessId`, `TaskContractId`), UNIQUE KEY `uk_ob_esign_document_provider` (`ProviderDocumentId`), KEY `idx_ob_esign_document_process_sort` (`SignProcessId`, `DocumentSort`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='入职电子签文档'; CREATE TABLE IF NOT EXISTS `ob_electronic_sign_event` ( `Id` BIGINT NOT NULL COMMENT '主键', `SignProcessId` BIGINT NULL COMMENT '电子签流程Id', `PayloadHash` VARCHAR(64) NOT NULL COMMENT '回调内容SHA-256', `EventSource` VARCHAR(30) NOT NULL COMMENT '事件来源', `EventType` VARCHAR(100) NULL COMMENT '契约锁事件类型', `ProviderStatus` VARCHAR(60) NULL COMMENT '契约锁状态', `PayloadJson` LONGTEXT NULL COMMENT '事件原始内容', `ProcessResult` VARCHAR(500) NULL COMMENT '处理结果', `ReceivedAt` DATETIME(3) NOT NULL COMMENT '接收时间', `ProcessedAt` DATETIME(3) NULL COMMENT '处理完成时间', `ExtJson` LONGTEXT NULL COMMENT '扩展信息', `Status` VARCHAR(20) NULL DEFAULT 'enable' COMMENT '启用状态', `CreateTime` DATETIME(3) NULL COMMENT '创建时间', `UpdateTime` DATETIME(3) NULL COMMENT '更新时间', `CreateUserId` BIGINT NULL COMMENT '创建者Id', `UpdateUserId` BIGINT NULL COMMENT '修改者Id', `CreateUser` VARCHAR(200) NULL COMMENT '创建人', `UpdateUser` VARCHAR(200) NULL COMMENT '更新人', `IsDelete` TINYINT(1) NULL DEFAULT 0 COMMENT '软删除', PRIMARY KEY (`Id`), UNIQUE KEY `uk_ob_esign_event_payload_hash` (`PayloadHash`), KEY `idx_ob_esign_event_process` (`SignProcessId`, `ReceivedAt`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='入职电子签事件';