Files
his/scripts/test_doctorstation_sql.py

117 lines
3.4 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 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("测试 DoctorStation SQL (模拟 doctor-station API)")
print("=" * 80)
print()
encounter_id = 2038823905749327873
practitioner_id = 1980296166230962178
# 使用修改后的 SQL 查询(第三部分 - ServiceRequest
cursor.execute(
"""
SELECT
COALESCE(T1.category_enum, 3) AS advice_type,
T1.id AS request_id,
T1.id || '-3' AS unique_key,
'' AS prescription_no,
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', T1.content_json::jsonb->>'adviceName') 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,
99 AS sort_number,
T1.based_on_id AS based_on_id,
T1.category_enum AS category_enum
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 T1.status_enum
""",
(practitioner_id, encounter_id),
)
rows = cursor.fetchall()
print(f"查询到 {len(rows)} 条 ServiceRequest 记录")
print()
for row in rows:
advice_type = row[0]
request_id = row[1]
advice_name = row[10]
category_enum = row[25]
print(f"request_id: {request_id}")
print(f" advice_type: {advice_type} (应该=4)")
print(f" category_enum: {category_enum}")
print(f" advice_name: {advice_name}")
print(f" advice_name是否为空: {advice_name is None or advice_name == ''}")
print()
# 特别检查手术医嘱
surgery_rows = [r for r in rows if r[24] == 4] # category_enum = 4
print(f"手术医嘱 (category_enum=4) 数量: {len(surgery_rows)}")
print()
if surgery_rows:
for row in surgery_rows:
print(f"✓ 手术医嘱:")
print(f" request_id: {row[1]}")
print(f" advice_type: {row[0]} (应该=4)")
print(f" advice_name: {row[10]}")
print(
f" 是否通过前端过滤: {'否 (adviceName为空)' if not row[10] or row[10].strip() == '' else ''}"
)
else:
print("✗ 未找到手术医嘱")
print()
print("可能原因:")
print(" 1. SQL COALESCE 语法错误")
print(" 2. content_json 中没有 surgeryName 字段")
print(" 3. 数据未正确保存")
cursor.close()
conn.close()