-- ============================================
-- MES 不合格品处理（NCR）模块初始化脚本
-- ============================================

-- 1. 建表
DROP TABLE IF EXISTS `mes_qc_ncr`;
CREATE TABLE `mes_qc_ncr` (
    `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键ID',
    `code` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT 'NCR单号',
    `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT 'NCR名称',

    -- 来源检验单
    `qc_type` int NULL DEFAULT NULL COMMENT '检验类型（IQC/IPQC/OQC/RQC），字典 mes_qc_type',
    `qc_id` bigint NULL DEFAULT NULL COMMENT '来源检验单ID',
    `qc_code` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '来源检验单编号（冗余）',

    -- 不合格品信息
    `item_id` bigint NULL DEFAULT NULL COMMENT '不合格物料ID',
    `defect_level` int NULL DEFAULT NULL COMMENT '缺陷等级（致命/严重/轻微），字典 mes_defect_level',
    `unqualified_quantity` decimal(24,6) NULL DEFAULT NULL COMMENT '不合格数量',
    `defect_description` varchar(2000) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '不合格描述',

    -- 评审信息
    `disposition` int NULL DEFAULT NULL COMMENT '处置方式（退货/报废/返工/让步接收/降级使用），字典 mes_ncr_disposition',
    `responsible_dept_id` bigint NULL DEFAULT NULL COMMENT '责任部门ID',
    `reviewer_user_id` bigint NULL DEFAULT NULL COMMENT '评审人ID',
    `review_date` datetime NULL DEFAULT NULL COMMENT '评审日期',
    `review_opinion` varchar(1000) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '评审意见',

    -- 处理信息
    `handler_user_id` bigint NULL DEFAULT NULL COMMENT '处理人ID',
    `handle_date` datetime NULL DEFAULT NULL COMMENT '处理日期',
    `handle_result` varchar(1000) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '处理结果说明',

    -- 原因与措施
    `root_cause` varchar(2000) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '根本原因',
    `corrective_action` varchar(2000) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '纠正措施',
    `preventive_action` varchar(2000) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '预防措施',

    -- 关闭信息
    `close_user_id` bigint NULL DEFAULT NULL COMMENT '关闭人ID',
    `close_date` datetime NULL DEFAULT NULL COMMENT '关闭日期',
    `close_opinion` varchar(1000) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '关闭意见',

    -- 状态与流程
    `status` int NULL DEFAULT NULL COMMENT '状态（待评审/已评审/已处置/已关闭），字典 mes_ncr_status',
    `process_instance_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT 'BPM流程实例ID（预留）',
    `remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '备注',

    -- 标准字段
    `creator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '' COMMENT '创建者',
    `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    `updater` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL 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`) USING BTREE,
    INDEX `idx_qc_type_id` (`qc_type`, `qc_id`),
    INDEX `idx_status` (`status`),
    INDEX `idx_item_id` (`item_id`)
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = 'MES 不合格品处理单' ROW_FORMAT = Dynamic;

-- 2. 菜单
INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`)
VALUES (5690, '不合格品处理', '', 2, 10, 5500, 'ncr', 'ep:warning-filled', 'mes/qc/ncr/index', 'MesQcNcr', 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0');

INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`)
VALUES
(5691, 'NCR查询', 'mes:qc-ncr:query', 3, 1, 5690, '', '', '', '', 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0'),
(5692, 'NCR创建', 'mes:qc-ncr:create', 3, 2, 5690, '', '', '', '', 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0'),
(5693, 'NCR更新', 'mes:qc-ncr:update', 3, 3, 5690, '', '', '', '', 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0'),
(5694, 'NCR删除', 'mes:qc-ncr:delete', 3, 4, 5690, '', '', '', '', 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0'),
(5695, 'NCR导出', 'mes:qc-ncr:export', 3, 5, 5690, '', '', '', '', 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0'),
(5696, 'NCR评审', 'mes:qc-ncr:review', 3, 6, 5690, '', '', '', '', 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0'),
(5697, 'NCR处置', 'mes:qc-ncr:dispose', 3, 7, 5690, '', '', '', '', 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0'),
(5698, 'NCR关闭', 'mes:qc-ncr:close', 3, 8, 5690, '', '', '', '', 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0');

-- 3. 字典类型
INSERT INTO `system_dict_type` (`name`, `type`, `status`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`)
VALUES
('MES NCR 状态', 'mes_ncr_status', 0, '不合格品处理单状态', '1', NOW(), '1', NOW(), b'0'),
('MES NCR 处置方式', 'mes_ncr_disposition', 0, '不合格品处置方式', '1', NOW(), '1', NOW(), b'0');

-- 4. 字典数据
INSERT INTO `system_dict_data` (`sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`)
VALUES
(1, '待评审', '0', 'mes_ncr_status', 0, '', '', '待评审', '1', NOW(), '1', NOW(), b'0'),
(2, '已评审', '1', 'mes_ncr_status', 0, '', '', '已评审', '1', NOW(), '1', NOW(), b'0'),
(3, '已处置', '2', 'mes_ncr_status', 0, '', '', '已处置', '1', NOW(), '1', NOW(), b'0'),
(4, '已关闭', '3', 'mes_ncr_status', 0, '', '', '已关闭', '1', NOW(), '1', NOW(), b'0'),
(1, '退货', '1', 'mes_ncr_disposition', 0, '', '', '退货', '1', NOW(), '1', NOW(), b'0'),
(2, '报废', '2', 'mes_ncr_disposition', 0, '', '', '报废', '1', NOW(), '1', NOW(), b'0'),
(3, '返工', '3', 'mes_ncr_disposition', 0, '', '', '返工', '1', NOW(), '1', NOW(), b'0'),
(4, '让步接收', '4', 'mes_ncr_disposition', 0, '', '', '让步接收', '1', NOW(), '1', NOW(), b'0'),
(5, '降级使用', '5', 'mes_ncr_disposition', 0, '', '', '降级使用', '1', NOW(), '1', NOW(), b'0');
