-- =====================================================
-- 计划类型字段修改 v1.6.038
-- 作者: 周启威
-- 日期: 2026-02-05
-- 说明: 修改计划类型字段的标签和选项值
--       来源类型 → 计划类型
--       销售计划 → 库存生产计划(MTS)
--       生产订单 → 订单生产计划(MTO)
-- =====================================================

-- -----------------------------------------------------
-- 1. 更新字段注释
-- -----------------------------------------------------

-- 更新pro_plan表的plan_source_type字段注释
ALTER TABLE `pro_plan` 
MODIFY COLUMN `plan_source_type` varchar(50) DEFAULT NULL 
COMMENT '计划类型：MTS=库存生产计划(Make to Stock), MTO=订单生产计划(Make to Order)';

-- -----------------------------------------------------
-- 2. 更新字典类型
-- -----------------------------------------------------

-- 检查并更新字典类型名称
UPDATE sys_dict_type 
SET dict_name = '计划类型', 
    remark = '生产计划类型列表：MTS=库存生产计划, MTO=订单生产计划'
WHERE dict_type = 'pro_plan_source_type';

-- 如果字典类型不存在，则创建
INSERT INTO sys_dict_type (dict_name, dict_type, status, create_by, create_time, remark)
SELECT '计划类型', 'pro_plan_source_type', '0', 'admin', NOW(), 
       '生产计划类型列表：MTS=库存生产计划, MTO=订单生产计划'
WHERE NOT EXISTS (
    SELECT 1 FROM sys_dict_type WHERE dict_type = 'pro_plan_source_type'
);

-- -----------------------------------------------------
-- 3. 更新字典数据
-- -----------------------------------------------------

-- 删除旧的字典数据（如果存在）
DELETE FROM sys_dict_data 
WHERE dict_type = 'pro_plan_source_type' 
  AND dict_value IN ('order', 'plan');

-- 插入新的字典数据：MTS=库存生产计划（原来的销售计划）
INSERT INTO sys_dict_data (dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, remark)
SELECT 1, '库存生产计划', 'MTS', 'pro_plan_source_type', '', 'success', 'Y', '0', 'admin', NOW(), 
       'Make to Stock - 根据库存需求生成的生产计划（原销售计划）'
WHERE NOT EXISTS (
    SELECT 1 FROM sys_dict_data WHERE dict_type = 'pro_plan_source_type' AND dict_value = 'MTS'
);

-- 插入新的字典数据：MTO=订单生产计划（原来的生产订单）
INSERT INTO sys_dict_data (dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, remark)
SELECT 2, '订单生产计划', 'MTO', 'pro_plan_source_type', '', 'primary', 'N', '0', 'admin', NOW(), 
       'Make to Order - 根据销售订单生成的生产计划（原生产订单）'
WHERE NOT EXISTS (
    SELECT 1 FROM sys_dict_data WHERE dict_type = 'pro_plan_source_type' AND dict_value = 'MTO'
);

-- -----------------------------------------------------
-- 4. 数据迁移（可选）
-- -----------------------------------------------------

-- 如果需要迁移旧数据，取消下面的注释
-- 将旧的 'plan' 值更新为 'MTS'（销售计划 → 库存生产计划）
UPDATE pro_plan SET plan_source_type = 'MTS' WHERE plan_source_type = 'plan';

-- 将旧的 'order' 值更新为 'MTO'（生产订单 → 订单生产计划）
UPDATE pro_plan SET plan_source_type = 'MTO' WHERE plan_source_type = 'order';

-- -----------------------------------------------------
-- 5. 验证
-- -----------------------------------------------------

-- 查看字典类型
SELECT dict_name, dict_type, remark 
FROM sys_dict_type 
WHERE dict_type = 'pro_plan_source_type';

-- 查看字典数据
SELECT dict_value, dict_label, dict_sort, status, remark 
FROM sys_dict_data 
WHERE dict_type = 'pro_plan_source_type'
ORDER BY dict_sort;

-- 查看字段注释
SELECT column_name, column_type, column_comment 
FROM information_schema.columns 
WHERE table_schema = DATABASE() 
  AND table_name = 'pro_plan' 
  AND column_name = 'plan_source_type';

-- 查看现有数据分布
SELECT 
    plan_source_type,
    COUNT(*) as count,
    CASE plan_source_type
        WHEN 'plan' THEN '旧值：销售计划（需迁移为MTS）'
        WHEN 'order' THEN '旧值：生产订单（需迁移为MTO）'
        WHEN 'MTS' THEN '新值：库存生产计划'
        WHEN 'MTO' THEN '新值：订单生产计划'
        ELSE '未知值'
    END as description
FROM pro_plan
GROUP BY plan_source_type;

-- 修改生产计划表的plan_source_id字段，支持多个ID（逗号分隔）
-- 从 bigint 改为 varchar，以支持多个订单ID
ALTER TABLE `pro_plan` MODIFY COLUMN `plan_source_id` varchar(255) DEFAULT NULL COMMENT '来源ID（支持多个，逗号分隔）';

-- -----------------------------------------------------
-- 说明
-- -----------------------------------------------------
-- 修改内容：
-- 1. 字段标签：来源类型 → 计划类型
-- 2. 选项值和标签：
--    - MTS (Make to Stock) = 库存生产计划（原来的 plan=销售计划）
--    - MTO (Make to Order) = 订单生产计划（原来的 order=生产订单）
--
-- 注意：
-- - 旧数据不会自动迁移，如需迁移请取消第4部分的注释
-- - 新创建的计划将使用新的字典值（MTS/MTO）
-- - 执行后需要重启应用以刷新字典缓存
