Files
his/scripts/final_check.py

272 lines
8.5 KiB
Python
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.

import psycopg2
import json
import sys
sys.stdout.reconfigure(encoding="utf-8")
conn = psycopg2.connect(
host="192.168.110.252",
port=15432,
database="postgresql",
user="postgresql",
password="Jchl1528",
)
cursor = conn.cursor()
cursor.execute("SET search_path TO hisdev, public")
print("=" * 80)
print("检查手术医嘱的完整数据")
print("=" * 80)
print()
# 检查手术医嘱的所有字段
cursor.execute("""
SELECT
sr.id,
sr.prescription_no,
sr.category_enum,
sr.status_enum,
sr.therapy_enum,
sr.patient_id,
sr.encounter_id,
sr.requester_id,
sr.activity_id,
sr.quantity,
sr.unit_code,
sr.content_json,
sr.generate_source_enum,
sr.delete_flag,
sr.parent_id,
sr.create_time
FROM wor_service_request sr
WHERE sr.category_enum = 4
AND sr.delete_flag = '0'
AND sr.encounter_id = 2038823905749327873
""")
rows = cursor.fetchall()
print(f"手术医嘱数量: {len(rows)}")
print()
for row in rows:
print(f"ID: {row[0]}")
print(f"单号: {row[1]}")
print(f"category_enum: {row[2]} (4=手术)")
print(f"status_enum: {row[3]} (1=待签发)")
print(f"therapy_enum: {row[4]}")
print(f"patient_id: {row[5]}")
print(f"encounter_id: {row[6]}")
print(f"requester_id: {row[7]}")
print(f"activity_id: {row[8]}")
print(f"quantity: {row[9]}")
print(f"unit_code: {row[10]}")
print(f"content_json: {row[11][:100] if row[11] else 'None'}...")
print(f"generate_source_enum: {row[12]}")
print(f"delete_flag: {row[13]}")
print(f"parent_id: {row[14]}")
print(f"create_time: {row[15]}")
print("-" * 80)
print()
# 检查是否有parent_id不为null的记录子医嘱
print("检查是否有子医嘱parent_id不为null")
cursor.execute("""
SELECT COUNT(*)
FROM wor_service_request sr
WHERE sr.encounter_id = 2038823905749327873
AND sr.parent_id IS NOT NULL
AND sr.delete_flag = '0'
""")
parent_count = cursor.fetchone()[0]
print(f"子医嘱数量: {parent_count}")
print()
# 检查SQL查询返回的完整数据模拟getRegRequestBaseInfo
print("=" * 80)
print("模拟完整的API查询包含所有UNION")
print("=" * 80)
print()
practitioner_id = 1980296166230962178
encounter_id = 2038823905749327873
# 使用完整的SQL查询包含COALESCE修复
cursor.execute(
"""
(SELECT 1 AS advice_type,
T1.id AS request_id,
T1.id || '-1' AS unique_key,
T1.practitioner_id AS requester_id,
T1.create_time AS request_time,
CASE WHEN T1.practitioner_id = %s THEN '1' ELSE '0' END AS biz_request_flag,
T1.content_json AS content_json,
T1.skin_test_flag AS skin_test_flag,
T1.infusion_flag AS inject_flag,
T1.group_id AS group_id,
T2.NAME AS advice_name,
T3.total_volume AS volume,
T1.lot_number AS lot_number,
T1.quantity AS quantity,
T1.unit_code AS unit_code,
T1.status_enum AS status_enum,
T1.method_code AS method_code,
T1.rate_code AS rate_code,
T1.dose AS dose,
T1.dose_unit_code AS dose_unit_code,
T4.id AS charge_item_id,
T4.total_price AS total_price,
T4.status_enum AS charge_status,
al.id AS position_id,
al.name AS position_name,
T1.dispense_per_duration AS dispense_per_duration,
T2.part_percent AS part_percent,
ccd.name AS condition_definition_name,
COALESCE(T1.therapy_enum, 1) AS therapyEnum,
T1.sort_number AS sort_number,
T1.based_on_id AS based_on_id
FROM med_medication_request AS T1
LEFT JOIN med_medication_definition AS T2 ON T2.ID = T1.medication_id
AND T2.delete_flag = '0'
LEFT JOIN med_medication AS T3 ON T3.medication_def_id = T2.ID
AND T3.delete_flag = '0'
LEFT JOIN adm_charge_item AS T4 ON T4.service_id = T1.ID AND T4.delete_flag = '0' AND
T4.service_table = 'med_medication_request'
LEFT JOIN adm_location AS al ON al.ID = T1.perform_location AND al.delete_flag = '0'
LEFT JOIN cli_condition AS cc ON cc.id = T1.condition_id AND cc.delete_flag = '0'
LEFT JOIN cli_condition_definition AS ccd ON ccd.id = cc.definition_id
WHERE T1.delete_flag = '0' AND T1.tcm_flag = 0 AND T1.generate_source_enum = 1
AND T1.encounter_id = %s
AND T1.refund_medicine_id IS NULL)
UNION ALL
(SELECT 2 AS advice_type,
T1.id AS request_id,
T1.id || '-2' AS unique_key,
T1.requester_id AS requester_id,
T1.create_time AS request_time,
CASE WHEN T1.requester_id = %s THEN '1' ELSE '0' END AS biz_request_flag,
T1.content_json AS content_json,
null AS skin_test_flag,
null AS inject_flag,
null AS group_id,
T2.NAME AS advice_name,
T2.SIZE AS volume,
T1.lot_number AS lot_number,
T1.quantity AS quantity,
T1.unit_code AS unit_code,
T1.status_enum AS status_enum,
'' AS method_code,
T1.rate_code AS rate_code,
NULL AS dose,
'' AS dose_unit_code,
T3.id AS charge_item_id,
T3.total_price AS total_price,
T3.status_enum AS charge_status,
al.id AS position_id,
al.name AS position_name,
null AS dispense_per_duration,
T2.part_percent AS part_percent,
'' AS condition_definition_name,
COALESCE(T1.therapy_enum, 2) AS therapyEnum,
99 AS sort_number,
T1.based_on_id AS based_on_id
FROM wor_device_request AS T1
LEFT JOIN adm_device_definition AS T2 ON T2.ID = T1.device_def_id
AND T2.delete_flag = '0'
LEFT JOIN adm_charge_item AS T3
ON T3.service_id = T1.ID AND T3.delete_flag = '0' AND
T3.service_table = 'wor_device_request'
LEFT JOIN adm_location AS al ON al.ID = T1.perform_location AND al.delete_flag = '0'
WHERE T1.delete_flag = '0' AND T1.generate_source_enum = 1
AND T1.encounter_id = %s
AND T1.refund_device_id IS NULL)
UNION ALL
(SELECT 3 AS advice_type,
T1.id AS request_id,
T1.id || '-3' AS unique_key,
T1.requester_id AS requester_id,
T1.create_time AS request_time,
CASE WHEN T1.requester_id = %s THEN '1' ELSE '0' END AS biz_request_flag,
T1.content_json AS content_json,
null AS skin_test_flag,
null AS inject_flag,
null AS group_id,
COALESCE(T2.NAME, T1.content_json::jsonb->>'surgeryName') AS advice_name,
'' AS volume,
'' AS lot_number,
T1.quantity AS quantity,
T1.unit_code AS unit_code,
T1.status_enum AS status_enum,
'' AS method_code,
'' AS rate_code,
NULL AS dose,
'' AS dose_unit_code,
T3.id AS charge_item_id,
T3.total_price AS total_price,
T3.status_enum AS charge_status,
ao.id AS position_id,
ao.name AS position_name,
null AS dispense_per_duration,
1 AS part_percent,
'' AS condition_definition_name,
COALESCE(T1.therapy_enum, 2) AS therapyEnum,
99 AS sort_number,
T1.based_on_id AS based_on_id
FROM wor_service_request AS T1
LEFT JOIN wor_activity_definition AS T2
ON T2.ID = T1.activity_id
AND T2.delete_flag = '0'
LEFT JOIN adm_charge_item AS T3 ON T3.service_id = T1.ID AND T3.delete_flag = '0' AND
T3.service_table = 'wor_service_request'
LEFT JOIN adm_organization AS ao ON ao.ID = T1.org_id AND ao.delete_flag = '0'
WHERE T1.delete_flag = '0' AND T1.generate_source_enum = 1
AND T1.parent_id IS NULL
AND T1.encounter_id = %s)
ORDER BY status_enum
""",
(
practitioner_id,
encounter_id,
practitioner_id,
encounter_id,
practitioner_id,
encounter_id,
),
)
api_rows = cursor.fetchall()
print(f"API返回数据总数: {len(api_rows)}")
print()
# 检查手术医嘱advice_type=3
surgery_rows = [r for r in api_rows if r[0] == 3]
print(f"手术医嘱advice_type=3数量: {len(surgery_rows)}")
print()
for row in surgery_rows:
advice_name = row[10]
therapy_enum = row[25]
status = row[14]
print(f" advice_name: {advice_name}")
print(f" therapyEnum: {therapy_enum} (2=临时)")
print(f" status_enum: {status}")
print()
cursor.close()
conn.close()
print("=" * 80)
print("结论:")
if len(surgery_rows) > 0:
print(f"✓ API查询返回了 {len(surgery_rows)} 条手术医嘱")
print("✓ advice_name 已正确返回")
print("✓ therapyEnum 默认为 2 (临时)")
print()
print("如果前端仍不显示,问题可能:")
print(" 1. 前端缓存 - 请清除浏览器缓存")
print(" 2. 代码未正确部署 - 请检查实际运行的代码版本")
print(" 3. 前端过滤逻辑 - 请检查浏览器控制台网络请求返回的数据")
else:
print("✗ API查询未返回手术医嘱")
print(" 请检查数据库数据或SQL条件")