Files
OnboardXAdmin/database/migrations/20260903_qiyuesuo_electronic_sign.sql
2026-09-07 16:17:49 +08:00

111 lines
6.7 KiB
SQL

-- 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='入职电子签事件';