Files
his/sql/修复历史手术医嘱数据.sql

91 lines
2.9 KiB
SQL

-- ============================================
-- Bug #318 历史手术医嘱数据修复脚本
-- 修复 content_json 中缺失的 surgeryName
-- ============================================
-- 1. 查看需要修复的数据
SELECT
'Before Fix - Count' as status,
COUNT(*) as total_count
FROM wor_service_request
WHERE category_enum = 4
AND delete_flag = '0'
AND (content_json::jsonb->>'surgeryName' IS NULL OR content_json::jsonb->>'surgeryName' = '');
-- 2. 查看需要修复的详细记录
SELECT
id,
activity_id,
content_json::jsonb->>'surgeryName' as current_surgery_name,
content_json as full_content_json,
create_time
FROM wor_service_request
WHERE category_enum = 4
AND delete_flag = '0'
AND (content_json::jsonb->>'surgeryName' IS NULL OR content_json::jsonb->>'surgeryName' = '')
ORDER BY create_time DESC
LIMIT 10;
-- 3. 【执行修复】从 cli_surgery 表获取手术名称并更新
-- 注意:此操作会修改历史数据,请先备份
UPDATE wor_service_request wsr
SET content_json =
CASE
WHEN wsr.content_json IS NULL OR wsr.content_json = '' THEN
jsonb_build_object(
'surgeryName', cs.surgery_name,
'surgeryCode', cs.surgery_code
)::text
ELSE
(wsr.content_json::jsonb || jsonb_build_object(
'surgeryName', cs.surgery_name,
'surgeryCode', cs.surgery_code
))::text
END
FROM cli_surgery cs
WHERE wsr.category_enum = 4
AND wsr.delete_flag = '0'
AND (wsr.content_json::jsonb->>'surgeryName' IS NULL OR wsr.content_json::jsonb->>'surgeryName' = '')
AND cs.id = wsr.activity_id;
-- 4. 【备选修复】如果没有关联的 cli_surgery 记录,尝试从 activity_id 获取名称
UPDATE wor_service_request wsr
SET content_json =
CASE
WHEN wsr.content_json IS NULL OR wsr.content_json = '' THEN
jsonb_build_object(
'surgeryName', '手术项目-' || wsr.activity_id,
'surgeryCode', ''
)::text
ELSE
(wsr.content_json::jsonb || jsonb_build_object(
'surgeryName', '手术项目-' || wsr.activity_id,
'surgeryCode', ''
))::text
END
WHERE wsr.category_enum = 4
AND wsr.delete_flag = '0'
AND (wsr.content_json::jsonb->>'surgeryName' IS NULL OR wsr.content_json::jsonb->>'surgeryName' = '')
AND wsr.activity_id IS NOT NULL;
-- 5. 查看修复后的结果
SELECT
'After Fix - Count' as status,
COUNT(*) as remaining_count
FROM wor_service_request
WHERE category_enum = 4
AND delete_flag = '0'
AND (content_json::jsonb->>'surgeryName' IS NULL OR content_json::jsonb->>'surgeryName' = '');
-- 6. 验证修复成功
SELECT
id,
content_json::jsonb->>'surgeryName' as surgery_name,
content_json::jsonb->>'surgeryCode' as surgery_code,
create_time
FROM wor_service_request
WHERE category_enum = 4
AND delete_flag = '0'
ORDER BY create_time DESC
LIMIT 5;