-- =====================================================
-- MDM 主数据模块 - 数据库表结构
-- 执行顺序：先执行此脚本创建表，再执行数据迁移脚本
-- =====================================================

-- =====================================================
-- 01. 物料分类表
-- =====================================================
DROP TABLE IF EXISTS `mdm_item_category`;
CREATE TABLE `mdm_item_category` (
    `id` bigint NOT NULL AUTO_INCREMENT COMMENT '分类编号',
    `parent_id` bigint NOT NULL DEFAULT 0 COMMENT '父分类编号（根节点=0）',
    `code` varchar(50) DEFAULT NULL COMMENT '分类编码',
    `name` varchar(100) NOT NULL COMMENT '分类名称',
    `item_type` tinyint DEFAULT NULL COMMENT '适用物料类型（1:物料 2:产品 3:半成品 NULL:全部）',
    `sort` int NOT NULL DEFAULT 0 COMMENT '排序',
    `status` tinyint NOT NULL DEFAULT 0 COMMENT '状态（0正常 1停用）',
    `remark` varchar(500) DEFAULT NULL COMMENT '备注',
    `creator` varchar(64) DEFAULT '' COMMENT '创建者',
    `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    `updater` varchar(64) DEFAULT '' COMMENT '更新者',
    `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除',
    PRIMARY KEY (`id`),
    KEY `idx_parent_id` (`parent_id`),
    KEY `idx_code` (`code`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='MDM 物料分类表';

-- =====================================================
-- 02. 计量单位表
-- =====================================================
DROP TABLE IF EXISTS `mdm_unit_measure`;
CREATE TABLE `mdm_unit_measure` (
    `id` bigint NOT NULL AUTO_INCREMENT COMMENT '单位编号',
    `code` varchar(50) NOT NULL COMMENT '单位编码',
    `name` varchar(50) NOT NULL COMMENT '单位名称',
    `primary_flag` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否主单位',
    `primary_id` bigint DEFAULT NULL COMMENT '主单位编号',
    `change_rate` decimal(24,6) DEFAULT 1.000000 COMMENT '与主单位换算比例',
    `status` tinyint NOT NULL DEFAULT 0 COMMENT '状态（0正常 1停用）',
    `remark` varchar(500) DEFAULT NULL COMMENT '备注',
    `creator` varchar(64) DEFAULT '' COMMENT '创建者',
    `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    `updater` varchar(64) DEFAULT '' COMMENT '更新者',
    `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除',
    PRIMARY KEY (`id`),
    UNIQUE KEY `uk_code` (`code`, `deleted`),
    KEY `idx_name` (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='MDM 计量单位表';

-- =====================================================
-- 03. 品牌表
-- =====================================================
DROP TABLE IF EXISTS `mdm_brand`;
CREATE TABLE `mdm_brand` (
    `id` bigint NOT NULL AUTO_INCREMENT COMMENT '品牌编号',
    `code` varchar(50) NOT NULL COMMENT '品牌编码',
    `name` varchar(100) NOT NULL COMMENT '品牌名称',
    `status` tinyint NOT NULL DEFAULT 0 COMMENT '状态（0正常 1停用）',
    `remark` varchar(500) DEFAULT NULL COMMENT '备注',
    `creator` varchar(64) DEFAULT '' COMMENT '创建者',
    `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    `updater` varchar(64) DEFAULT '' COMMENT '更新者',
    `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除',
    PRIMARY KEY (`id`),
    UNIQUE KEY `uk_code` (`code`, `deleted`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='MDM 品牌表';

-- =====================================================
-- 04. 物料主数据表
-- =====================================================
DROP TABLE IF EXISTS `mdm_item`;
CREATE TABLE `mdm_item` (
    `id` bigint NOT NULL AUTO_INCREMENT COMMENT '物料编号',
    `code` varchar(50) NOT NULL COMMENT '物料编码',
    `name` varchar(200) NOT NULL COMMENT '物料名称',
    `bar_code` varchar(100) DEFAULT NULL COMMENT '物料条码',
    `specification` varchar(200) DEFAULT NULL COMMENT '规格型号',
    `category_id` bigint DEFAULT NULL COMMENT '物料分类编号',
    `unit_measure_id` bigint DEFAULT NULL COMMENT '计量单位编号',
    `unit_measure_id2` bigint DEFAULT NULL COMMENT '辅单位1编号',
    `unit_measure_rate1` decimal(24,6) DEFAULT NULL COMMENT '辅单位1换算比率',
    `unit_measure_id3` bigint DEFAULT NULL COMMENT '辅单位2编号',
    `unit_measure_rate2` decimal(24,6) DEFAULT NULL COMMENT '辅单位2换算比率',
    `warehouse_id` bigint DEFAULT NULL COMMENT '默认仓库编号',
    `warehouse_code` varchar(50) DEFAULT NULL COMMENT '默认仓库编码',
    `item_type` tinyint NOT NULL DEFAULT 1 COMMENT '物料类型（1:物料 2:产品 3:半成品）',
    `status` tinyint NOT NULL DEFAULT 0 COMMENT '状态（0正常 1停用）',
    `purchase_price` decimal(24,2) DEFAULT NULL COMMENT '采购价',
    `sales_price` decimal(24,2) DEFAULT NULL COMMENT '销售价',
    `cost_price` decimal(24,2) DEFAULT NULL COMMENT '成本价',
    `min_price` decimal(24,2) DEFAULT NULL COMMENT '最低价',
    `safety_stock` decimal(24,6) DEFAULT NULL COMMENT '安全库存',
    `min_stock` decimal(24,6) DEFAULT NULL COMMENT '最低库存量',
    `max_stock` decimal(24,6) DEFAULT NULL COMMENT '最高库存量',
    `min_order_qty` decimal(24,6) DEFAULT NULL COMMENT '最小订货量',
    `lead_time` int DEFAULT NULL COMMENT '采购提前期（天）',
    `is_batch_managed` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否批次管理',
    `is_serial_managed` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否序列号管理',
    `barcode_rule_id` bigint DEFAULT NULL COMMENT '条码规则ID',
    `expiry_day` int DEFAULT NULL COMMENT '保质期天数',
    `high_value` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否高值物料',
    `weight` decimal(24,6) DEFAULT NULL COMMENT '重量(kg)',
    `remark` varchar(500) DEFAULT NULL COMMENT '备注',
    `creator` varchar(64) DEFAULT '' COMMENT '创建者',
    `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    `updater` varchar(64) DEFAULT '' COMMENT '更新者',
    `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除',
    PRIMARY KEY (`id`),
    UNIQUE KEY `uk_code` (`code`, `deleted`),
    KEY `idx_name` (`name`),
    KEY `idx_category_id` (`category_id`),
    KEY `idx_item_type` (`item_type`),
    KEY `idx_status` (`status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='MDM 物料主数据表';

-- =====================================================
-- 05. 物料SKU表
-- =====================================================
DROP TABLE IF EXISTS `mdm_item_sku`;
CREATE TABLE `mdm_item_sku` (
    `id` bigint NOT NULL AUTO_INCREMENT COMMENT 'SKU编号',
    `item_id` bigint NOT NULL COMMENT '物料编号',
    `code` varchar(50) NOT NULL COMMENT 'SKU编码',
    `name` varchar(200) NOT NULL COMMENT 'SKU名称',
    `bar_code` varchar(100) DEFAULT NULL COMMENT 'SKU条码',
    `length` decimal(24,6) DEFAULT NULL COMMENT '长度（cm）',
    `width` decimal(24,6) DEFAULT NULL COMMENT '宽度（cm）',
    `height` decimal(24,6) DEFAULT NULL COMMENT '高度（cm）',
    `gross_weight` decimal(24,6) DEFAULT NULL COMMENT '毛重（kg）',
    `net_weight` decimal(24,6) DEFAULT NULL COMMENT '净重（kg）',
    `cost_price` decimal(24,2) DEFAULT NULL COMMENT '成本价',
    `sale_price` decimal(24,2) DEFAULT NULL COMMENT '销售价',
    `status` tinyint NOT NULL DEFAULT 0 COMMENT '状态（0正常 1停用）',
    `remark` varchar(500) DEFAULT NULL COMMENT '备注',
    `creator` varchar(64) DEFAULT '' COMMENT '创建者',
    `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    `updater` varchar(64) DEFAULT '' COMMENT '更新者',
    `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除',
    PRIMARY KEY (`id`),
    UNIQUE KEY `uk_code` (`code`, `deleted`),
    KEY `idx_item_id` (`item_id`),
    KEY `idx_bar_code` (`bar_code`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='MDM 物料SKU表';

-- =====================================================
-- 06. 物料批次属性配置表
-- =====================================================
DROP TABLE IF EXISTS `mdm_item_batch_config`;
CREATE TABLE `mdm_item_batch_config` (
    `id` bigint NOT NULL AUTO_INCREMENT COMMENT '配置编号',
    `item_id` bigint NOT NULL COMMENT '物料编号',
    `produce_date_flag` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否启用生产日期',
    `expire_date_flag` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否启用失效日期',
    `receipt_date_flag` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否启用入库日期',
    `vendor_flag` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否启用供应商',
    `client_flag` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否启用客户',
    `sales_order_code_flag` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否启用销售订单号',
    `purchase_order_code_flag` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否启用采购订单号',
    `work_order_flag` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否启用生产工单',
    `task_flag` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否启用生产任务',
    `workstation_flag` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否启用工位',
    `tool_flag` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否启用工装夹具',
    `mold_flag` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否启用模具',
    `lot_number_flag` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否启用批次号',
    `quality_status_flag` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否启用质量状态',
    `creator` varchar(64) DEFAULT '' COMMENT '创建者',
    `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    `updater` varchar(64) DEFAULT '' COMMENT '更新者',
    `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除',
    PRIMARY KEY (`id`),
    UNIQUE KEY `uk_item_id` (`item_id`, `deleted`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='MDM 物料批次属性配置表';

-- =====================================================
-- 07. 仓库表
-- =====================================================
DROP TABLE IF EXISTS `mdm_warehouse`;
CREATE TABLE `mdm_warehouse` (
    `id` bigint NOT NULL AUTO_INCREMENT COMMENT '仓库编号',
    `code` varchar(50) NOT NULL COMMENT '仓库编码',
    `name` varchar(100) NOT NULL COMMENT '仓库名称',
    `type` tinyint DEFAULT NULL COMMENT '仓库类型',
    `address` varchar(500) DEFAULT NULL COMMENT '仓库地址',
    `principal` varchar(64) DEFAULT NULL COMMENT '负责人',
    `status` tinyint NOT NULL DEFAULT 0 COMMENT '状态（0正常 1停用）',
    `remark` varchar(500) DEFAULT NULL COMMENT '备注',
    `creator` varchar(64) DEFAULT '' COMMENT '创建者',
    `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    `updater` varchar(64) DEFAULT '' COMMENT '更新者',
    `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除',
    PRIMARY KEY (`id`),
    UNIQUE KEY `uk_code` (`code`, `deleted`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='MDM 仓库表';
