207 lines
5.9 KiB
Python
207 lines
5.9 KiB
Python
import psycopg2
|
||
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")
|
||
conn.commit()
|
||
|
||
print("=" * 80)
|
||
print("查询患者:王俊彭 (病历号: PN0000000038)")
|
||
print("=" * 80)
|
||
print()
|
||
|
||
# 1. 查询患者基本信息和就诊ID
|
||
print("步骤1: 查询患者基本信息...")
|
||
cursor.execute("""
|
||
SELECT
|
||
p.id as patient_id,
|
||
p.name as patient_name,
|
||
e.id as encounter_id,
|
||
e.create_time as encounter_time
|
||
FROM adm_patient p
|
||
LEFT JOIN adm_encounter e ON e.patient_id = p.id
|
||
WHERE p.name = '王俊彭'
|
||
ORDER BY e.create_time DESC
|
||
LIMIT 5
|
||
""")
|
||
patient_rows = cursor.fetchall()
|
||
|
||
if not patient_rows:
|
||
print("✗ 未找到患者信息")
|
||
else:
|
||
for row in patient_rows:
|
||
print(
|
||
f" 患者ID: {row[0]}, 姓名: {row[1]}, 就诊ID: {row[2]}, 就诊时间: {row[3]}"
|
||
)
|
||
|
||
# 获取最新的就诊ID
|
||
encounter_id = patient_rows[0][2]
|
||
patient_id = patient_rows[0][0]
|
||
print(f"\n使用就诊ID: {encounter_id}")
|
||
print()
|
||
|
||
# 2. 查询手术申请单
|
||
print("步骤2: 查询手术申请单...")
|
||
cursor.execute(
|
||
"""
|
||
SELECT
|
||
id,
|
||
prescription_no,
|
||
type_code,
|
||
name,
|
||
create_time,
|
||
desc_json
|
||
FROM doc_request_form
|
||
WHERE encounter_id = %s
|
||
AND type_code = 'PROCEDURE'
|
||
AND delete_flag = '0'
|
||
ORDER BY create_time DESC
|
||
""",
|
||
(encounter_id,),
|
||
)
|
||
|
||
request_forms = cursor.fetchall()
|
||
if not request_forms:
|
||
print("✗ 未找到手术申请单")
|
||
else:
|
||
print(f"✓ 找到 {len(request_forms)} 条手术申请单:")
|
||
for rf in request_forms:
|
||
print(
|
||
f" 申请单ID: {rf[0]}, 单号: {rf[1]}, 类型: {rf[2]}, 名称: {rf[3]}, 时间: {rf[4]}"
|
||
)
|
||
if rf[5]:
|
||
try:
|
||
import json
|
||
|
||
desc = json.loads(rf[5])
|
||
surgery_name = desc.get("surgeryName", "N/A")
|
||
surgery_fee = desc.get("surgeryFee", "N/A")
|
||
print(f" -> 手术名称: {surgery_name}, 手术费用: {surgery_fee}")
|
||
except:
|
||
print(f" -> 手术详情: {rf[5][:100]}")
|
||
print()
|
||
|
||
# 3. 查询手术医嘱(ServiceRequest)
|
||
print("步骤3: 查询手术医嘱(ServiceRequest)...")
|
||
cursor.execute(
|
||
"""
|
||
SELECT
|
||
id,
|
||
prescription_no,
|
||
status_enum,
|
||
category_enum,
|
||
patient_id,
|
||
encounter_id,
|
||
create_time,
|
||
content_json
|
||
FROM wor_service_request
|
||
WHERE patient_id = %s
|
||
AND category_enum = 4
|
||
AND delete_flag = '0'
|
||
ORDER BY create_time DESC
|
||
""",
|
||
(patient_id,),
|
||
)
|
||
|
||
service_requests = cursor.fetchall()
|
||
if not service_requests:
|
||
print("✗ 未找到手术医嘱")
|
||
print("\n⚠️ 问题确认:有手术申请单但没有对应的手术医嘱!")
|
||
else:
|
||
print(f"✓ 找到 {len(service_requests)} 条手术医嘱:")
|
||
for sr in service_requests:
|
||
status_text = {1: "待签发", 2: "已签发", 3: "已执行"}.get(
|
||
sr[2], f"状态{sr[2]}"
|
||
)
|
||
print(
|
||
f" 医嘱ID: {sr[0]}, 单号: {sr[1]}, 状态: {status_text}, 就诊ID: {sr[5]}, 时间: {sr[6]}"
|
||
)
|
||
print()
|
||
|
||
# 4. 查询收费项目
|
||
print("步骤4: 查询收费项目(ChargeItem)...")
|
||
cursor.execute(
|
||
"""
|
||
SELECT
|
||
id,
|
||
bus_no,
|
||
status_enum,
|
||
total_price,
|
||
service_id
|
||
FROM adm_charge_item
|
||
WHERE patient_id = %s
|
||
AND service_table = 'wor_service_request'
|
||
AND delete_flag = '0'
|
||
ORDER BY create_time DESC
|
||
""",
|
||
(patient_id,),
|
||
)
|
||
|
||
charge_items = cursor.fetchall()
|
||
if not charge_items:
|
||
print("✗ 未找到收费项目")
|
||
else:
|
||
print(f"✓ 找到 {len(charge_items)} 条收费项目:")
|
||
for ci in charge_items:
|
||
print(f" 收费ID: {ci[0]}, 单号: {ci[1]}, 金额: {ci[3]}, 关联医嘱: {ci[4]}")
|
||
print()
|
||
|
||
# 5. 查询医嘱列表(用于对比)
|
||
print("步骤5: 查询该患者的所有医嘱...")
|
||
cursor.execute(
|
||
"""
|
||
SELECT
|
||
category_enum,
|
||
status_enum,
|
||
count(*) as count
|
||
FROM wor_service_request
|
||
WHERE patient_id = %s
|
||
AND delete_flag = '0'
|
||
GROUP BY category_enum, status_enum
|
||
ORDER BY category_enum
|
||
""",
|
||
(patient_id,),
|
||
)
|
||
|
||
categories = cursor.fetchall()
|
||
if categories:
|
||
print("✓ 医嘱统计:")
|
||
cat_names = {1: "西药", 2: "耗材", 3: "诊疗", 4: "手术"}
|
||
stat_names = {1: "待签发", 2: "已签发", 3: "已执行"}
|
||
for cat in categories:
|
||
cat_name = cat_names.get(cat[0], f"类型{cat[0]}")
|
||
stat_name = stat_names.get(cat[1], f"状态{cat[1]}")
|
||
print(f" {cat_name} - {stat_name}: {cat[2]}条")
|
||
print()
|
||
|
||
print("=" * 80)
|
||
|
||
# 问题诊断
|
||
if request_forms and not service_requests:
|
||
print("\n🔴 问题确认:")
|
||
print(" ✓ 手术申请单存在(doc_request_form)")
|
||
print(" ✗ 手术医嘱不存在(wor_service_request)")
|
||
print("\n 结论:保存手术申请单时未生成手术医嘱")
|
||
print(" 原因:代码修复可能未生效或未部署到生产环境")
|
||
elif service_requests:
|
||
print("\n✅ 数据正常:")
|
||
print(" ✓ 手术申请单存在")
|
||
print(" ✓ 手术医嘱存在")
|
||
print("\n 请在医嘱TAB页面查看是否能显示")
|
||
|
||
print()
|
||
|
||
cursor.close()
|
||
conn.close()
|