# Phase 3 P0 — 5维 Spec Migration SQL Script
# 
# 执行顺序：
#   1. 先备份数据
#   2. 执行 Step 1：更新 seat_map JSON（加 rooms 层）
#   3. 执行 Step 2：重建 GoodsSpecType（5维，含 $vr-演播室）
#   4. 执行 Step 3：清空并重建 GoodsSpecValue（关联 SPEC_DIMS）
#
# 假设 goods_id=112，座位模板 ID=1

-- ============================================================
-- Step 1：更新 seat_map JSON（座位模板）
-- ============================================================

-- 查看当前 seat_map
-- SELECT id, name, seat_map FROM vrt_vr_seat_templates WHERE id=1;

-- 将旧结构 flat sections/map/seats → 移入 rooms[0]
-- 注意：实际执行时需要根据当前数据进行转换

-- 示例转换（请根据实际数据调整）：
-- UPDATE vrt_vr_seat_templates 
-- SET seat_map = JSON_SET(
--     JSON_SET(
--         JSON_SET(
--             JSON_OBJECT(
--                 'venue', JSON_EXTRACT(seat_map, '$.venue'),
--                 'rooms', JSON_ARRAY(
--                     JSON_OBJECT(
--                         'id', 'room_001',
--                         'name', '主厅',
--                         'sections', JSON_EXTRACT(seat_map, '$.sections'),
--                         'map', JSON_EXTRACT(seat_map, '$.map'),
--                         'seats', JSON_EXTRACT(seat_map, '$.seats')
--                     )
--                 )
--             ),
--             '$.sections', JSON_EXTRACT(seat_map, '$.sections'),
--             '$.map', JSON_EXTRACT(seat_map, '$.map'),
--             '$.seats', JSON_EXTRACT(seat_map, '$.seats')
--         ),
--         '$.rooms[0].sections', JSON_EXTRACT(seat_map, '$.sections'),
--         '$.rooms[0].map', JSON_EXTRACT(seat_map, '$.map'),
--         '$.rooms[0].seats', JSON_EXTRACT(seat_map, '$.seats')
--     ),
--     '$.rooms[0].id', 'room_001',
--     '$.rooms[0].name', '主厅'
-- )
-- WHERE id = 1;

-- ============================================================
-- Step 2：重建 GoodsSpecType（5维）
-- ============================================================

-- 删除旧的 4 维记录
DELETE FROM vrt_goods_spec_type WHERE goods_id=112;

-- 插入新的 5 维记录（按 SPEC_DIMS 顺序）
INSERT INTO vrt_goods_spec_type (goods_id, name, value, add_time) VALUES
(112, '$vr-场次',   '[{"name":"待选场次","images":""}]', UNIX_TIMESTAMP()),
(112, '$vr-场馆',   '[{"name":"国家体育馆","images":""}]', UNIX_TIMESTAMP()),
(112, '$vr-演播室', '[{"name":"主厅","images":""}]', UNIX_TIMESTAMP()),
(112, '$vr-分区',   '[{"name":"A区","images":""},{"name":"B区","images":""},{"name":"C区","images":""}]', UNIX_TIMESTAMP()),
(112, '$vr-座位号', '[{"name":"待选座位","images":""}]', UNIX_TIMESTAMP());

-- ============================================================
-- Step 3：清空并重建 GoodsSpecValue
-- 
-- 当前 GoodsSpecValue 为 0 的根因：
--   BatchGenerate() 没有写入 name 字段关联 SPEC_DIMS
--   
-- 修复后，BatchGenerate() 会：
--   1. 按 SPEC_DIMS 顺序写入 5 条 GoodsSpecValue
--   2. 每条记录包含 name 字段关联维度
--   3. buildSeatSpecMap() 通过 name 字段直接读取维度
-- ============================================================

-- 先清空旧的 GoodsSpecValue（关联 goods_id=112）
DELETE FROM vrt_goods_spec_value WHERE goods_id=112;

-- 如果需要手动重建（仅用于修复历史数据）：
-- 注意：需要先确保 GoodsSpecBase 存在且有 seat_key

-- 示例：手动生成 GoodsSpecValue（修复历史数据）
-- 假设 GoodsSpecBase.id=1, seat_key='room_001_A_1'
-- 
-- INSERT INTO vrt_goods_spec_value (goods_id, goods_spec_base_id, name, value, md5_key, add_time) VALUES
-- (112, 1, '$vr-场次',   '08:00-23:59', MD5('08:00-23:59'), UNIX_TIMESTAMP()),
-- (112, 1, '$vr-场馆',   '国家体育馆', MD5('国家体育馆'), UNIX_TIMESTAMP()),
-- (112, 1, '$vr-演播室', '主厅', MD5('主厅'), UNIX_TIMESTAMP()),
-- (112, 1, '$vr-分区',   '国家体育馆-主厅-A', MD5('国家体育馆-主厅-A'), UNIX_TIMESTAMP()),
-- (112, 1, '$vr-座位号', '国家体育馆-主厅-A-A1', MD5('国家体育馆-主厅-A-A1'), UNIX_TIMESTAMP());

-- ============================================================
-- 验证查询
-- ============================================================

-- 验证 GoodsSpecType（应该有 5 条）
-- SELECT * FROM vrt_goods_spec_type WHERE goods_id=112 ORDER BY id;

-- 验证 GoodsSpecValue（修复后应该 > 0）
-- SELECT COUNT(*) FROM vrt_goods_spec_value WHERE goods_id=112;

-- 验证 seat_map JSON 结构（应该有 rooms[]）
-- SELECT id, name, JSON_EXTRACT(seat_map, '$.rooms') FROM vrt_vr_seat_templates WHERE id=1;

-- ============================================================
-- 推荐：重新执行 BatchGenerate
-- ============================================================

-- 由于 BatchGenerate() 现在正确写入 GoodsSpecValue，
-- 推荐执行以下 PHP 代码重建所有 SKU：
--
-- \app\plugins\vr_ticket\service\SeatSkuService::BatchGenerate(
--     $goodsId = 112,
--     $seatTemplateId = 1,
--     $selectedRooms = [],
--     $selectedSections = [],
--     $sessions = [['start' => '08:00', 'end' => '23:59']]
-- );
