117 lines
4.0 KiB
SQL
117 lines
4.0 KiB
SQL
-- 详细检查诊疗项目检索问题
|
||
-- 已知:wor_activity_definition 表中有4条数据
|
||
|
||
-- 1. 检查这4条诊疗项目定义的详细信息
|
||
SELECT
|
||
id,
|
||
name,
|
||
bus_no,
|
||
delete_flag,
|
||
tenant_id,
|
||
create_time
|
||
FROM wor_activity_definition
|
||
ORDER BY id;
|
||
|
||
-- 2. 检查收费项目中是否有诊疗项目类型的记录
|
||
-- 注意:ChargeItemContext.ACTIVITY.getValue() 返回的是 Integer 3
|
||
-- 但数据库中 context_enum 可能是字符串类型,需要检查是 '3' 还是 3
|
||
SELECT
|
||
COUNT(*) as total_activity_charge_items,
|
||
COUNT(CASE WHEN delete_flag = '0' THEN 1 END) as active_activity_charge_items,
|
||
COUNT(CASE WHEN delete_flag != '0' THEN 1 END) as deleted_activity_charge_items
|
||
FROM adm_charge_item
|
||
WHERE context_enum::text = '3' OR context_enum = 3; -- 诊疗项目类型是3
|
||
|
||
-- 3. 检查收费项目中的product_id是否能匹配到诊疗项目定义
|
||
-- 注意:诊疗项目类型的 context_enum = 3(ChargeItemContext.ACTIVITY.getValue())
|
||
SELECT
|
||
aci.id as charge_item_id,
|
||
aci.encounter_id,
|
||
aci.context_enum,
|
||
aci.product_id as charge_product_id,
|
||
aci.status_enum,
|
||
aci.delete_flag as charge_delete_flag,
|
||
wad.id as activity_def_id,
|
||
wad.name as activity_name,
|
||
wad.delete_flag as activity_delete_flag,
|
||
CASE
|
||
WHEN wad.id IS NULL THEN '❌ 诊疗项目定义不存在'
|
||
WHEN wad.delete_flag != '0' THEN '❌ 诊疗项目定义已删除'
|
||
WHEN aci.delete_flag != '0' THEN '❌ 收费项目已删除'
|
||
ELSE '✅ 正常'
|
||
END as match_status
|
||
FROM adm_charge_item aci
|
||
LEFT JOIN wor_activity_definition wad
|
||
ON aci.product_id = wad.id
|
||
WHERE (aci.context_enum::text = '3' OR aci.context_enum = 3) -- 诊疗项目类型是3
|
||
LIMIT 20;
|
||
|
||
-- 4. 检查context_enum的所有可能值(确认诊疗项目的枚举值是什么)
|
||
SELECT DISTINCT
|
||
context_enum,
|
||
COUNT(*) as count
|
||
FROM adm_charge_item
|
||
WHERE delete_flag = '0'
|
||
GROUP BY context_enum
|
||
ORDER BY context_enum;
|
||
|
||
-- 5. 检查是否有收费项目,但无法匹配到诊疗项目定义
|
||
SELECT
|
||
COUNT(*) as unmatched_count,
|
||
STRING_AGG(DISTINCT CAST(product_id AS VARCHAR), ', ') as unmatched_product_ids,
|
||
STRING_AGG(DISTINCT CAST(id AS VARCHAR), ', ') as unmatched_charge_item_ids
|
||
FROM adm_charge_item aci
|
||
WHERE (aci.context_enum::text = '3' OR aci.context_enum = 3) -- 诊疗项目类型是3
|
||
AND aci.delete_flag = '0'
|
||
AND NOT EXISTS (
|
||
SELECT 1
|
||
FROM wor_activity_definition wad
|
||
WHERE wad.id = aci.product_id
|
||
AND wad.delete_flag = '0'
|
||
);
|
||
|
||
-- 6. 检查具体某个就诊的诊疗项目(如果有具体的encounterId)
|
||
-- SELECT
|
||
-- T1.encounter_id,
|
||
-- T1.id as charge_item_id,
|
||
-- T1.context_enum,
|
||
-- T1.product_id,
|
||
-- T1.status_enum,
|
||
-- T1.delete_flag,
|
||
-- T2.id as activity_def_id,
|
||
-- T2.name as activity_name,
|
||
-- T2.delete_flag as activity_delete_flag
|
||
-- FROM adm_charge_item AS T1
|
||
-- LEFT JOIN wor_activity_definition AS T2
|
||
-- ON T1.product_id = T2.id
|
||
-- WHERE T1.encounter_id = :encounterId -- 替换为实际的encounterId
|
||
-- AND T1.context_enum IN ('ACTIVITY', '1', 'ACTIVITY_CODE') -- 尝试多种可能的值
|
||
-- AND T1.delete_flag = '0';
|
||
|
||
-- 7. 检查后端代码中使用的context_enum值
|
||
-- ChargeItemContext.ACTIVITY.getValue() 的实际返回值需要查看枚举类
|
||
-- 可能是:'ACTIVITY', '1', 'ACTIVITY_CODE', 或其他值
|
||
-- 建议先运行查询4,查看数据库中实际使用的context_enum值
|
||
|
||
-- 8. 检查status_enum的值(查询条件中需要匹配的状态)
|
||
-- SQL查询中要求 status_enum IN (1, 2, 3, 4, 5, 6)
|
||
-- 检查收费项目中的状态值是否在这个范围内
|
||
SELECT
|
||
status_enum,
|
||
COUNT(*) as count,
|
||
CASE
|
||
WHEN status_enum IN (1, 2, 3, 4, 5, 6) THEN '✅ 在查询范围内'
|
||
ELSE '❌ 不在查询范围内'
|
||
END as status_check
|
||
FROM adm_charge_item
|
||
WHERE context_enum IN (
|
||
SELECT DISTINCT context_enum
|
||
FROM adm_charge_item
|
||
WHERE delete_flag = '0'
|
||
LIMIT 10
|
||
)
|
||
AND delete_flag = '0'
|
||
GROUP BY status_enum
|
||
ORDER BY status_enum;
|
||
|