-- ============================================
-- 为开单记录表添加升单类型字段
-- ============================================
-- 说明：此脚本为开单记录表添加升单类型标记字段，用于标识再次开单时包含的品项类型
-- 
-- 字段说明：
-- 1. F_UpgradeLifeBeauty：升生美（再次开单时，包含生美品项的订单）
-- 2. F_UpgradeTechBeauty：升科美（再次开单时，包含科美品项的订单）
-- 3. F_UpgradeMedicalBeauty：升医美（再次开单时，包含医美品项的订单）
-- 
-- 业务含义：
-- - 升单：已经开过会员再次消费属于升单
-- - 这三个字段用于标记升单中是否包含对应类型的品项（生美、科美、医美）
-- 
-- 注意事项：
-- - 字段类型为VARCHAR(10)，可存储"是"/"否"或其他标记值
-- - 所有字段允许为NULL，因为历史数据可能没有这些标记
-- - 字段位置：放在 F_SupplementAmount 之后

-- ============================================
-- 1. lq_kd_kdjlb（开单记录表） - 添加升单类型字段
-- ============================================
ALTER TABLE lq_kd_kdjlb 
ADD COLUMN F_UpgradeLifeBeauty VARCHAR(10) NULL COMMENT '升生美（再次开单时，包含生美品项的订单）' AFTER F_SupplementAmount,
ADD COLUMN F_UpgradeTechBeauty VARCHAR(10) NULL COMMENT '升科美（再次开单时，包含科美品项的订单）' AFTER F_UpgradeLifeBeauty,
ADD COLUMN F_UpgradeMedicalBeauty VARCHAR(10) NULL COMMENT '升医美（再次开单时，包含医美品项的订单）' AFTER F_UpgradeTechBeauty;

-- ============================================
-- 2. 验证字段创建
-- ============================================
-- 验证 lq_kd_kdjlb 表
-- SELECT COLUMN_NAME, DATA_TYPE, IS_NULLABLE, COLUMN_COMMENT 
-- FROM INFORMATION_SCHEMA.COLUMNS 
-- WHERE TABLE_NAME = 'lq_kd_kdjlb' 
--   AND (COLUMN_NAME = 'F_UpgradeLifeBeauty' 
--     OR COLUMN_NAME = 'F_UpgradeTechBeauty' 
--     OR COLUMN_NAME = 'F_UpgradeMedicalBeauty');

-- ============================================
-- 3. 业务逻辑说明（供参考）
-- ============================================
-- 判断逻辑：
-- 1. 判断是否为升单：查询该会员（kdhy）是否有历史开单记录
-- 2. 判断是否包含生美：查询该开单的品项明细（lq_kd_pxmx）中是否有品项类型（lq_xmzl.qt2）为"生美"的记录
-- 3. 判断是否包含科美：查询该开单的品项明细中是否有品项类型为"科美"的记录
-- 4. 判断是否包含医美：查询该开单的品项明细中是否有品项类型为"医美"的记录
-- 
-- 示例SQL（判断升单并标记品项类型）：
-- UPDATE lq_kd_kdjlb kdjlb
-- SET 
--     F_UpgradeLifeBeauty = CASE 
--         WHEN EXISTS (
--             SELECT 1 FROM lq_kd_kdjlb kd2 
--             WHERE kd2.kdhy = kdjlb.kdhy 
--               AND kd2.F_Id != kdjlb.F_Id 
--               AND kd2.kdrq < kdjlb.kdrq
--         ) AND EXISTS (
--             SELECT 1 FROM lq_kd_pxmx pxmx
--             INNER JOIN lq_xmzl xmzl ON pxmx.px = xmzl.F_Id
--             WHERE pxmx.glkdbh = kdjlb.F_Id
--               AND pxmx.F_IsEffective = 1
--               AND xmzl.qt2 = '生美'
--         ) THEN '是'
--         ELSE '否'
--     END,
--     F_UpgradeTechBeauty = CASE 
--         WHEN EXISTS (
--             SELECT 1 FROM lq_kd_kdjlb kd2 
--             WHERE kd2.kdhy = kdjlb.kdhy 
--               AND kd2.F_Id != kdjlb.F_Id 
--               AND kd2.kdrq < kdjlb.kdrq
--         ) AND EXISTS (
--             SELECT 1 FROM lq_kd_pxmx pxmx
--             INNER JOIN lq_xmzl xmzl ON pxmx.px = xmzl.F_Id
--             WHERE pxmx.glkdbh = kdjlb.F_Id
--               AND pxmx.F_IsEffective = 1
--               AND xmzl.qt2 = '科美'
--         ) THEN '是'
--         ELSE '否'
--     END,
--     F_UpgradeMedicalBeauty = CASE 
--         WHEN EXISTS (
--             SELECT 1 FROM lq_kd_kdjlb kd2 
--             WHERE kd2.kdhy = kdjlb.kdhy 
--               AND kd2.F_Id != kdjlb.F_Id 
--               AND kd2.kdrq < kdjlb.kdrq
--         ) AND EXISTS (
--             SELECT 1 FROM lq_kd_pxmx pxmx
--             INNER JOIN lq_xmzl xmzl ON pxmx.px = xmzl.F_Id
--             WHERE pxmx.glkdbh = kdjlb.F_Id
--               AND pxmx.F_IsEffective = 1
--               AND xmzl.qt2 = '医美'
--         ) THEN '是'
--         ELSE '否'
--     END
-- WHERE kdjlb.F_IsEffective = 1;

