-- =============================================
-- Print Service 数据库Schema
-- =============================================

-- 打印模板表
CREATE TABLE IF NOT EXISTS `print_template` (
  `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  `template_code` VARCHAR(64) NOT NULL COMMENT '模板编码',
  `template_name` VARCHAR(128) NOT NULL COMMENT '模板名称',
  `template_type` VARCHAR(32) NOT NULL COMMENT '模板类型: invoice/receipt/label/express/shipping',
  `template_content` TEXT NOT NULL COMMENT '模板内容(HTML/JSON格式)',
  `description` VARCHAR(512) DEFAULT NULL COMMENT '模板描述',
  `width` DOUBLE DEFAULT NULL COMMENT '宽度(mm)',
  `height` DOUBLE DEFAULT NULL COMMENT '高度(mm)',
  `is_default` TINYINT(1) DEFAULT 0 COMMENT '是否默认: 0-否 1-是',
  `status` TINYINT(1) DEFAULT 1 COMMENT '状态: 0-禁用 1-启用',
  `creator_id` BIGINT DEFAULT NULL COMMENT '创建人ID',
  `creator_name` VARCHAR(64) DEFAULT NULL COMMENT '创建人名称',
  `created_at` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `updated_at` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  `deleted` TINYINT(1) DEFAULT 0 COMMENT '逻辑删除标记',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_template_code` (`template_code`),
  KEY `idx_template_type` (`template_type`),
  KEY `idx_status` (`status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='打印模板表';

-- 打印机表
CREATE TABLE IF NOT EXISTS `printer` (
  `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  `printer_code` VARCHAR(64) NOT NULL COMMENT '打印机编码',
  `printer_name` VARCHAR(128) NOT NULL COMMENT '打印机名称',
  `printer_type` VARCHAR(32) NOT NULL COMMENT '打印机类型: laser/inkjet/thermal',
  `connection_type` VARCHAR(32) DEFAULT NULL COMMENT '连接方式: usb/parallel/serial/network',
  `ip_address` VARCHAR(64) DEFAULT NULL COMMENT 'IP地址(网络打印机)',
  `port` INT DEFAULT NULL COMMENT '端口',
  `mac_address` VARCHAR(64) DEFAULT NULL COMMENT '物理地址/MAC',
  `driver_name` VARCHAR(128) DEFAULT NULL COMMENT '驱动名称',
  `paper_size` VARCHAR(32) DEFAULT 'A4' COMMENT '纸张尺寸: A4/A5/58mm/80mm/custom',
  `status` TINYINT(1) DEFAULT 1 COMMENT '状态: 0-离线 1-在线 2-忙碌 3-错误',
  `description` VARCHAR(512) DEFAULT NULL COMMENT '打印机描述',
  `warehouse_id` BIGINT DEFAULT NULL COMMENT '仓库ID',
  `warehouse_name` VARCHAR(128) DEFAULT NULL COMMENT '仓库名称',
  `is_default` TINYINT(1) DEFAULT 0 COMMENT '是否默认: 0-否 1-是',
  `created_at` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `updated_at` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  `deleted` TINYINT(1) DEFAULT 0 COMMENT '逻辑删除标记',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_printer_code` (`printer_code`),
  KEY `idx_status` (`status`),
  KEY `idx_warehouse_id` (`warehouse_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='打印机表';

-- 打印任务表
CREATE TABLE IF NOT EXISTS `print_task` (
  `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  `task_no` VARCHAR(64) NOT NULL COMMENT '任务编号',
  `document_type` VARCHAR(32) DEFAULT NULL COMMENT '关联单据类型: order/invoice/delivery',
  `document_id` BIGINT DEFAULT NULL COMMENT '关联单据ID',
  `document_no` VARCHAR(64) DEFAULT NULL COMMENT '关联单据编号',
  `template_id` BIGINT NOT NULL COMMENT '模板ID',
  `template_name` VARCHAR(128) DEFAULT NULL COMMENT '模板名称',
  `printer_id` BIGINT DEFAULT NULL COMMENT '打印机ID',
  `printer_name` VARCHAR(128) DEFAULT NULL COMMENT '打印机名称',
  `copies` INT DEFAULT 1 COMMENT '打印份数',
  `task_status` VARCHAR(32) DEFAULT 'pending' COMMENT '打印状态: pending/processing/completed/failed/cancelled',
  `priority` INT DEFAULT 2 COMMENT '优先级: 1-低 2-中 3-高',
  `print_params` TEXT DEFAULT NULL COMMENT '打印参数(JSON格式)',
  `error_message` VARCHAR(512) DEFAULT NULL COMMENT '失败原因',
  `retry_count` INT DEFAULT 0 COMMENT '重试次数',
  `max_retries` INT DEFAULT 3 COMMENT '最大重试次数',
  `user_id` BIGINT DEFAULT NULL COMMENT '用户ID',
  `user_name` VARCHAR(64) DEFAULT NULL COMMENT '用户名称',
  `tenant_id` BIGINT DEFAULT NULL COMMENT '租户ID',
  `created_at` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `updated_at` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  `printed_at` DATETIME DEFAULT NULL COMMENT '打印完成时间',
  `deleted` TINYINT(1) DEFAULT 0 COMMENT '逻辑删除标记',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_task_no` (`task_no`),
  KEY `idx_task_status` (`task_status`),
  KEY `idx_document` (`document_type`, `document_id`),
  KEY `idx_created_at` (`created_at`),
  KEY `idx_user_id` (`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='打印任务表';

-- 打印记录表
CREATE TABLE IF NOT EXISTS `print_record` (
  `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  `record_no` VARCHAR(64) NOT NULL COMMENT '记录编号',
  `task_id` BIGINT DEFAULT NULL COMMENT '任务ID',
  `task_no` VARCHAR(64) DEFAULT NULL COMMENT '任务编号',
  `template_id` BIGINT DEFAULT NULL COMMENT '模板ID',
  `template_name` VARCHAR(128) DEFAULT NULL COMMENT '模板名称',
  `printer_id` BIGINT DEFAULT NULL COMMENT '打印机ID',
  `printer_name` VARCHAR(128) DEFAULT NULL COMMENT '打印机名称',
  `document_type` VARCHAR(32) DEFAULT NULL COMMENT '单据类型',
  `document_id` BIGINT DEFAULT NULL COMMENT '单据ID',
  `document_no` VARCHAR(64) DEFAULT NULL COMMENT '单据编号',
  `copies` INT DEFAULT 1 COMMENT '打印份数',
  `print_status` VARCHAR(32) DEFAULT NULL COMMENT '打印状态: success/failed',
  `error_message` VARCHAR(512) DEFAULT NULL COMMENT '错误信息',
  `duration` BIGINT DEFAULT NULL COMMENT '打印耗时(ms)',
  `user_id` BIGINT DEFAULT NULL COMMENT '用户ID',
  `user_name` VARCHAR(64) DEFAULT NULL COMMENT '用户名称',
  `tenant_id` BIGINT DEFAULT NULL COMMENT '租户ID',
  `ip_address` VARCHAR(64) DEFAULT NULL COMMENT 'IP地址',
  `user_agent` VARCHAR(256) DEFAULT NULL COMMENT '用户代理',
  `created_at` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `deleted` TINYINT(1) DEFAULT 0 COMMENT '逻辑删除标记',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_record_no` (`record_no`),
  KEY `idx_task_id` (`task_id`),
  KEY `idx_document` (`document_type`, `document_id`),
  KEY `idx_print_status` (`print_status`),
  KEY `idx_created_at` (`created_at`),
  KEY `idx_user_id` (`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='打印记录表';

-- 打印配置表
CREATE TABLE IF NOT EXISTS `print_config` (
  `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  `config_key` VARCHAR(128) NOT NULL COMMENT '配置键',
  `config_value` TEXT NOT NULL COMMENT '配置值',
  `config_type` VARCHAR(32) NOT NULL COMMENT '配置类型: system/tenant/template',
  `relation_id` BIGINT DEFAULT NULL COMMENT '关联ID(如租户ID/模板ID)',
  `description` VARCHAR(512) DEFAULT NULL COMMENT '配置描述',
  `status` TINYINT(1) DEFAULT 1 COMMENT '状态: 0-禁用 1-启用',
  `created_at` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `updated_at` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  `deleted` TINYINT(1) DEFAULT 0 COMMENT '逻辑删除标记',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_config_key` (`config_key`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='打印配置表';

-- =============================================
-- 初始化默认配置数据
-- =============================================

-- 默认打印配置
INSERT INTO `print_config` (`config_key`, `config_value`, `config_type`, `description`, `status`) VALUES
('print.default.copies', '1', 'system', '默认打印份数', 1),
('print.default.priority', '2', 'system', '默认打印优先级', 1),
('print.task.max_retries', '3', 'system', '任务最大重试次数', 1),
('print.page.size', 'A4', 'system', '默认纸张大小', 1),
('print.encoding', 'UTF-8', 'system', '打印编码', 1);
