60 lines
2.4 KiB
SQL
60 lines
2.4 KiB
SQL
-- Petstore Phase 0: split customer / creator / service staff / report author identity.
|
|
-- Target: MySQL. One-time migration; back up the database before execution.
|
|
-- Existing legacy columns remain for compatibility and are not dropped here.
|
|
|
|
ALTER TABLE t_appointment
|
|
ADD COLUMN customer_user_id BIGINT NULL COMMENT '被服务客户账号',
|
|
ADD COLUMN created_by_user_id BIGINT NULL COMMENT '预约创建账号';
|
|
|
|
CREATE INDEX idx_appt_customer_status_time
|
|
ON t_appointment (customer_user_id, status, appointment_time);
|
|
|
|
ALTER TABLE t_report
|
|
ADD COLUMN customer_user_id BIGINT NULL COMMENT '报告归属客户账号',
|
|
ADD COLUMN author_staff_id BIGINT NULL COMMENT '报告提交门店账号';
|
|
|
|
CREATE INDEX idx_report_customer_time
|
|
ON t_report (customer_user_id, create_time);
|
|
|
|
CREATE INDEX idx_report_author_time
|
|
ON t_report (author_staff_id, create_time);
|
|
|
|
-- Appointment backfill priority:
|
|
-- 1. pet.owner_user_id (strongest customer ownership evidence)
|
|
-- 2. legacy user_id only when that account is a customer
|
|
-- Legacy staff-created rows without pet ownership remain NULL for manual correction.
|
|
UPDATE t_appointment a
|
|
LEFT JOIN t_pet p
|
|
ON p.id = a.pet_id AND p.deleted = 0
|
|
LEFT JOIN t_user legacy_user
|
|
ON legacy_user.id = a.user_id AND legacy_user.deleted = 0
|
|
SET a.customer_user_id = COALESCE(
|
|
a.customer_user_id,
|
|
p.owner_user_id,
|
|
CASE WHEN legacy_user.role = 'customer' THEN a.user_id ELSE NULL END
|
|
),
|
|
a.created_by_user_id = COALESCE(a.created_by_user_id, a.user_id)
|
|
WHERE a.customer_user_id IS NULL OR a.created_by_user_id IS NULL;
|
|
|
|
-- Report user_id historically means report author/service staff.
|
|
-- Customer ownership must come from the linked appointment, never from report.user_id.
|
|
UPDATE t_report r
|
|
LEFT JOIN t_appointment a
|
|
ON a.id = r.appointment_id AND a.deleted = 0
|
|
SET r.customer_user_id = COALESCE(r.customer_user_id, a.customer_user_id),
|
|
r.author_staff_id = COALESCE(r.author_staff_id, r.user_id)
|
|
WHERE r.customer_user_id IS NULL OR r.author_staff_id IS NULL;
|
|
|
|
-- Verification queries. unresolved_assisted_appointments must be reviewed manually.
|
|
SELECT COUNT(*) AS unresolved_assisted_appointments
|
|
FROM t_appointment
|
|
WHERE deleted = 0 AND customer_user_id IS NULL;
|
|
|
|
SELECT COUNT(*) AS reports_without_customer
|
|
FROM t_report
|
|
WHERE deleted = 0 AND customer_user_id IS NULL;
|
|
|
|
SELECT COUNT(*) AS reports_without_author
|
|
FROM t_report
|
|
WHERE deleted = 0 AND author_staff_id IS NULL;
|