Files
his/sql/bug_318_step2_repair.sql
zhangfei 9c3e603b94 Fix Bug #443: 手术计费:点击签发耗材时异常报错
当手术计费弹窗中点击"签发"耗材时,因耗材的locationId(发放库房)为空导致后端异常。
在DoctorStationAdviceAppServiceImpl.handDevice方法中,当locationId为null时,使用登录用户的科室ID作为默认值,
与NurseBillingAppService中的处理方式保持一致。
2026-05-08 09:14:18 +08:00

160 lines
3.8 KiB
SQL
Executable File
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.

-- 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;
-- =====================================================
-- 完成!
-- =====================================================