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条件")