vr-shopxo-plugin/docs/MIGRATION_5DIM_SPEC.sql

121 lines
5.1 KiB
MySQL
Raw Normal View History

# Phase 3 P0 — 5维 Spec Migration SQL Script
#
# 执行顺序:
# 1. 先备份数据
# 2. 执行 Step 1更新 seat_map JSON加 rooms 层)
# 3. 执行 Step 2重建 GoodsSpecType5维含 $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重建 GoodsSpecType5维
-- ============================================================
-- 删除旧的 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']]
-- );