-- 打印服务独占数据库,业务服务只保存打印任务逻辑ID。 CREATE DATABASE IF NOT EXISTS baiyue_print DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci; USE baiyue_print; CREATE TABLE IF NOT EXISTS print_template ( id BIGINT UNSIGNED NOT NULL COMMENT '模板ID(雪花ID)', tenant_id BIGINT UNSIGNED NOT NULL COMMENT '数据所属租户ID,平台模板使用平台租户ID', template_code VARCHAR(64) NOT NULL COMMENT '模板编码', template_name VARCHAR(128) NOT NULL COMMENT '模板名称', template_type VARCHAR(32) NOT NULL COMMENT '模板类型', content TEXT NOT NULL COMMENT '模板内容', version_no INT UNSIGNED NOT NULL DEFAULT 1 COMMENT '模板版本号', status VARCHAR(24) NOT NULL DEFAULT 'ACTIVE' COMMENT '模板状态', created_by BIGINT UNSIGNED NOT NULL COMMENT '创建人ID', created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间', updated_by BIGINT UNSIGNED NOT NULL COMMENT '最后修改人ID', updated_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '更新时间', deleted TINYINT(1) NOT NULL DEFAULT 0 COMMENT '逻辑删除标记', version INT NOT NULL DEFAULT 0 COMMENT '乐观锁版本号', PRIMARY KEY (id), UNIQUE KEY uk_print_template_code (tenant_id, template_code, version_no), KEY idx_print_template_status (tenant_id, status) ) ENGINE=InnoDB COMMENT='打印模板表'; CREATE TABLE IF NOT EXISTS print_job ( id BIGINT UNSIGNED NOT NULL COMMENT '打印任务ID(雪花ID)', tenant_id BIGINT UNSIGNED NOT NULL COMMENT '数据所属租户ID', job_no VARCHAR(40) NOT NULL COMMENT '打印任务编号', template_id BIGINT UNSIGNED NOT NULL COMMENT '打印模板逻辑ID', business_type VARCHAR(32) NULL COMMENT '关联业务类型', business_id VARCHAR(64) NULL COMMENT '关联业务逻辑ID', printer_code VARCHAR(64) NULL COMMENT '目标打印机编码', copies INT UNSIGNED NOT NULL DEFAULT 1 COMMENT '打印份数', payload_json JSON NOT NULL COMMENT '模板数据快照', status VARCHAR(24) NOT NULL DEFAULT 'PENDING' COMMENT '任务状态', output_file_id BIGINT UNSIGNED NULL COMMENT '生成文件的逻辑ID', error_message VARCHAR(1000) NULL COMMENT '失败原因', requested_by BIGINT UNSIGNED NOT NULL COMMENT '申请人ID', requested_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '申请时间', started_at DATETIME(3) NULL COMMENT '开始时间', completed_at DATETIME(3) NULL COMMENT '完成时间', updated_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '更新时间', version INT NOT NULL DEFAULT 0 COMMENT '乐观锁版本号', PRIMARY KEY (id), UNIQUE KEY uk_print_job_no (tenant_id, job_no), KEY idx_print_job_status (tenant_id, status, requested_at), KEY idx_print_job_business (tenant_id, business_type, business_id) ) ENGINE=InnoDB COMMENT='打印任务表'; CREATE TABLE IF NOT EXISTS print_job_history ( id BIGINT UNSIGNED NOT NULL COMMENT '任务历史ID', tenant_id BIGINT UNSIGNED NOT NULL COMMENT '数据所属租户ID', print_job_id BIGINT UNSIGNED NOT NULL COMMENT '打印任务逻辑ID', from_status VARCHAR(24) NULL COMMENT '变更前状态', to_status VARCHAR(24) NOT NULL COMMENT '变更后状态', message VARCHAR(500) NULL COMMENT '状态说明', operator_id BIGINT UNSIGNED NULL COMMENT '操作人ID', occurred_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '发生时间', PRIMARY KEY (id), KEY idx_print_history_job (tenant_id, print_job_id, occurred_at) ) ENGINE=InnoDB COMMENT='打印任务状态历史表';