121 lines
5.1 KiB
SQL
121 lines
5.1 KiB
SQL
# 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']]
|
||
-- );
|