Files
his/sql/bug_318_step2_repair.sql

160 lines
3.8 KiB
SQL
Raw Permalink 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.

-- Bug #318 历史数据修复 - 步骤2执行修复
-- ⚠️ 请在执行前备份数据库!
-- =====================================================
-- 步骤 2.1: 创建临时表存储需要修复的手术申请单
-- =====================================================
CREATE TEMPORARY TABLE temp_repair_list AS
SELECT
rf.id as request_form_id,
rf.prescription_no,
rf.encounter_id,
rf.patient_id,
rf.requester_id,
rf.create_time,
rf.org_id,
rf.desc_json
FROM doc_request_form rf
LEFT JOIN wor_service_request sr ON sr.prescription_no = rf.prescription_no
AND sr.delete_flag = '0'
WHERE rf.type_code = 'PROCEDURE'
AND rf.delete_flag = '0'
AND sr.id IS NULL;
-- 查看需要修复的记录数
SELECT COUNT(*) as FROM temp_repair_list;
-- =====================================================
-- 步骤 2.2: 生成手术医嘱ServiceRequest
-- =====================================================
INSERT INTO wor_service_request (
bus_no,
prescription_no,
status_enum,
generate_source_enum,
therapy_enum,
quantity,
unit_code,
category_enum,
patient_id,
requester_id,
encounter_id,
authored_time,
org_id,
content_json,
delete_flag,
create_time,
create_by,
tenant_id
)
SELECT
LPAD(FLOOR(RANDOM() * 10000)::TEXT, 4, '0'),
prescription_no,
1, -- 待签发
1, -- 医生处方
2, -- 临时医嘱
1,
'',
4, -- 手术
patient_id,
requester_id,
encounter_id,
create_time,
org_id,
desc_json,
'0',
create_time,
requester_id,
1 -- tenant_id
FROM temp_repair_list;
-- 查看生成的手术医嘱数量
SELECT '生成的手术医嘱数量' as , COUNT(*) as
FROM wor_service_request
WHERE prescription_no IN (SELECT prescription_no FROM temp_repair_list);
-- =====================================================
-- 步骤 2.3: 生成手术收费项目ChargeItem
-- =====================================================
-- 获取刚生成的ServiceRequest
CREATE TEMPORARY TABLE temp_new_requests AS
SELECT
sr.id as service_request_id,
sr.prescription_no,
sr.patient_id,
sr.encounter_id,
sr.requester_id,
sr.create_time,
sr.org_id,
sr.bus_no,
t.desc_json
FROM wor_service_request sr
JOIN temp_repair_list t ON t.prescription_no = sr.prescription_no
WHERE sr.category_enum = 4
AND sr.delete_flag = '0';
-- 插入手术费用
INSERT INTO adm_charge_item (
bus_no,
status_enum,
generate_source_enum,
patient_id,
context_enum,
encounter_id,
enterer_id,
entered_date,
service_table,
service_id,
product_table,
requesting_org_id,
quantity_value,
quantity_unit,
unit_price,
total_price,
delete_flag,
create_time,
create_by,
tenant_id
)
SELECT
'CI' || bus_no,
1, -- 草稿
1, -- 医生处方
patient_id,
3, -- 诊疗
encounter_id,
requester_id,
create_time,
'wor_service_request',
service_request_id,
'wor_activity_definition',
org_id,
1,
'',
COALESCE((desc_json::jsonb->>'surgeryFee')::numeric, 0),
COALESCE((desc_json::jsonb->>'surgeryFee')::numeric, 0),
'0',
create_time,
requester_id,
1
FROM temp_new_requests;
-- 查看生成的收费项目数量
SELECT '生成的手术收费项目数量' as , COUNT(*) as
FROM adm_charge_item
WHERE service_id IN (SELECT service_request_id FROM temp_new_requests);
-- =====================================================
-- 步骤 2.4: 清理临时表
-- =====================================================
DROP TABLE IF EXISTS temp_repair_list;
DROP TABLE IF EXISTS temp_new_requests;
-- =====================================================
-- 完成!
-- =====================================================