272 lines
8.5 KiB
Python
272 lines
8.5 KiB
Python
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条件")
|