55 lines
1.9 KiB
SQL
55 lines
1.9 KiB
SQL
-- Petstore Phase 0:真实预约容量模型
|
||
-- 前置:20260801_split_service_identity.sql、20260801_create_store_customer.sql、
|
||
-- 20260801_create_business_event.sql 已执行。
|
||
|
||
ALTER TABLE t_service_type
|
||
ADD COLUMN duration_minutes INT NOT NULL DEFAULT 60 COMMENT '预计服务时长,30分钟粒度';
|
||
|
||
ALTER TABLE t_appointment
|
||
ADD COLUMN duration_minutes INT NOT NULL DEFAULT 60 COMMENT '下单时服务时长快照';
|
||
|
||
ALTER TABLE t_schedule_block
|
||
ADD COLUMN duration_minutes INT NOT NULL DEFAULT 30 COMMENT '连续占用时长,30分钟粒度';
|
||
|
||
ALTER TABLE t_store
|
||
ADD COLUMN booking_capacity INT NOT NULL DEFAULT 1 COMMENT '门店并发接待数';
|
||
|
||
-- 系统默认服务时长;未知服务保留 60 分钟安全值。
|
||
UPDATE t_service_type
|
||
SET duration_minutes = CASE name
|
||
WHEN '洗澡' THEN 60
|
||
WHEN '美容' THEN 120
|
||
WHEN '洗澡+美容' THEN 150
|
||
WHEN '剪指甲' THEN 30
|
||
WHEN '驱虫' THEN 30
|
||
ELSE 60
|
||
END;
|
||
|
||
-- 历史预约形成时没有时长快照,只能按当时服务名称采用稳定默认值回填。
|
||
UPDATE t_appointment
|
||
SET duration_minutes = CASE service_type
|
||
WHEN '洗澡' THEN 60
|
||
WHEN '美容' THEN 120
|
||
WHEN '洗澡+美容' THEN 150
|
||
WHEN '剪指甲' THEN 30
|
||
WHEN '驱虫' THEN 30
|
||
ELSE 60
|
||
END;
|
||
|
||
-- 验证:以下四项必须全部为 0。
|
||
SELECT COUNT(*) AS invalid_service_duration_count
|
||
FROM t_service_type
|
||
WHERE duration_minutes < 30 OR duration_minutes > 480 OR MOD(duration_minutes, 30) <> 0;
|
||
|
||
SELECT COUNT(*) AS invalid_appointment_duration_count
|
||
FROM t_appointment
|
||
WHERE duration_minutes < 30 OR duration_minutes > 480 OR MOD(duration_minutes, 30) <> 0;
|
||
|
||
SELECT COUNT(*) AS invalid_block_duration_count
|
||
FROM t_schedule_block
|
||
WHERE duration_minutes < 30 OR duration_minutes > 480 OR MOD(duration_minutes, 30) <> 0;
|
||
|
||
SELECT COUNT(*) AS invalid_store_capacity_count
|
||
FROM t_store
|
||
WHERE booking_capacity < 1 OR booking_capacity > 10;
|