petstore-backend/db/migrations/20260801_create_booking_capacity.sql
2026-08-01 22:56:31 +08:00

55 lines
1.9 KiB
SQL
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

-- 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;