Files
his/openhis-server/openhis-application/src/main/resources/mapper/outpatientmanage/OutpatientManageMapper.xml
liuhongrui ef80116180 up
2025-03-20 09:27:52 +08:00

302 lines
15 KiB
XML
Raw 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.

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.openhis.web.outpatientmanage.mapper.OutpatientManageMapper">
<!-- 门诊皮试记录相关查询-->
<select id="getSkinTestRecords"
parameterType="com.openhis.web.outpatientmanage.dto.OutpatientSkinTestRecordSearchParam"
resultType="com.openhis.web.outpatientmanage.dto.OutpatientSkinTestRecordDto">
SELECT
sr.id, --服务申请管理ID
sr.prescription_no, --处方号
e.bus_no as encounterBusNo, --就诊号
pt.name AS patientName, --病人姓名
pt.bus_no AS patientBusNo, --病人ID前台显示用
sr.patient_id, --病人ID
ad.name AS medicationInformation, --药品信息
md.bus_no || ' ' || md.name || ' 规格:' || COALESCE(m.total_volume, '') AS medicationDetail,--药品
m.lot_number AS medicationLotNumber, --药品批次号
mr.status_enum AS medicationStatusEnum, --药品状态
sr.performer_id, --执行护士
sr.performer_check_id,--核对人
to_char(sr.occurrence_start_time, 'YYYY-MM-DD HH24:MI:SS') AS occurrenceStartTime, --预计执行时间
to_char(sr.occurrence_end_time, 'YYYY-MM-DD HH24:MI:SS') AS occurrenceEndTime, --预计结束时间
ai.clinical_status_enum, --皮试结果
ai.verification_status_enum, --皮试检查项目状态
mr.practitioner_id as doctorId, --开单医生
ai.note --备注
FROM
wor_service_request sr
LEFT JOIN adm_encounter e ON e.id = sr.encounter_id
LEFT JOIN adm_patient pt ON pt.id = sr.patient_id
LEFT JOIN wor_activity_definition ad ON ad.id = sr.activity_id
LEFT JOIN med_medication_request mr ON mr.prescription_no = sr.prescription_no
LEFT JOIN med_medication m ON m.id = mr.medication_id
LEFT JOIN med_medication_definition md ON md.id = m.medication_def_id
LEFT JOIN cli_allergy_intolerance ai ON ai.request_id = sr.id
<where>
ad.bus_no = 'ps001' -- 皮试检查的编号todo编号未定后期修改
AND mr.skin_test_flag = 1
AND md.skin_test_flag = 1
AND sr.status_enum in (2,3,6) --服务状态有效
<!-- 门诊号 查询条件-->
<if test="OutpatientSkinTestRecordSearchParam != null and OutpatientSkinTestRecordSearchParam.encounterBusNo != null and OutpatientSkinTestRecordSearchParam.encounterBusNo != ''">
AND e.bus_no LIKE CONCAT('%',#{OutpatientSkinTestRecordSearchParam.encounterBusNo}, '%')
</if>
<!-- 病人号 查询条件-->
<if test="OutpatientSkinTestRecordSearchParam != null and OutpatientSkinTestRecordSearchParam.patientBusNo != null and OutpatientSkinTestRecordSearchParam.patientBusNo != ''">
AND pt.bus_no LIKE CONCAT('%',#{OutpatientSkinTestRecordSearchParam.patientBusNo}, '%')
</if>
<!-- 处方号 查询条件-->
<if test="OutpatientSkinTestRecordSearchParam != null and OutpatientSkinTestRecordSearchParam.prescriptionNo != null and OutpatientSkinTestRecordSearchParam.prescriptionNo != ''">
AND sr.prescription_no LIKE CONCAT('%',#{OutpatientSkinTestRecordSearchParam.prescriptionNo}, '%')
</if>
<!-- 手机号 查询条件-->
<if test="OutpatientSkinTestRecordSearchParam != null and OutpatientSkinTestRecordSearchParam.phone != null and OutpatientSkinTestRecordSearchParam.phone != ''">
AND pt.phone LIKE CONCAT('%',#{OutpatientSkinTestRecordSearchParam.phone}, '%')
</if>
<!-- 时间筛选 -->
<if test="OutpatientSkinTestRecordSearchParam != null and OutpatientSkinTestRecordSearchParam.beginTime != null and OutpatientSkinTestRecordSearchParam.endTime != null">
AND ai.recorded_date BETWEEN
TO_TIMESTAMP(#{OutpatientSkinTestRecordSearchParam.beginTime} || ' 00:00:00', 'YYYY-MM-DD HH24:MI:SS')
AND
TO_TIMESTAMP(#{OutpatientSkinTestRecordSearchParam.endTime} || ' 23:59:59', 'YYYY-MM-DD HH24:MI:SS')
</if>
<!-- 皮试项目检查状态 查询条件-->
<if test="OutpatientSkinTestRecordSearchParam != null and OutpatientSkinTestRecordSearchParam.status != null and OutpatientSkinTestRecordSearchParam.status != null">
AND ai.verification_status_enum = #{OutpatientSkinTestRecordSearchParam.status}
</if>
</where>
ORDER BY sr.prescription_no,e.bus_no,md.bus_no
LIMIT #{pageSize} OFFSET #{offset}
</select>
<select id="countOutpatientSkinTestRecords" resultType="long">
SELECT COUNT(*)
FROM
wor_service_request sr
LEFT JOIN adm_encounter e ON e.id = sr.encounter_id
LEFT JOIN adm_patient pt ON pt.id = sr.patient_id
LEFT JOIN wor_activity_definition ad ON ad.id = sr.activity_id
LEFT JOIN med_medication_request mr ON mr.prescription_no = sr.prescription_no
LEFT JOIN med_medication m ON m.id = mr.medication_id
LEFT JOIN med_medication_definition md ON md.id = m.medication_def_id
LEFT JOIN cli_allergy_intolerance ai ON ai.request_id = sr.id
<where>
ad.bus_no = 'ps001' -- 皮试检查的编号todo编号未定后期修改
AND mr.skin_test_flag = 1
AND md.skin_test_flag = 1
AND sr.status_enum in (2,3,6) --服务状态有效
<!-- 门诊号 查询条件-->
<if test="OutpatientSkinTestRecordSearchParam != null and OutpatientSkinTestRecordSearchParam.encounterBusNo != null and OutpatientSkinTestRecordSearchParam.encounterBusNo != ''">
AND e.bus_no LIKE CONCAT('%',#{OutpatientSkinTestRecordSearchParam.encounterBusNo}, '%')
</if>
<!-- 病人号 查询条件-->
<if test="OutpatientSkinTestRecordSearchParam != null and OutpatientSkinTestRecordSearchParam.patientBusNo != null and OutpatientSkinTestRecordSearchParam.patientBusNo != ''">
AND pt.bus_no LIKE CONCAT('%',#{OutpatientSkinTestRecordSearchParam.patientBusNo}, '%')
</if>
<!-- 处方号 查询条件-->
<if test="OutpatientSkinTestRecordSearchParam != null and OutpatientSkinTestRecordSearchParam.prescriptionNo != null and OutpatientSkinTestRecordSearchParam.prescriptionNo != ''">
AND sr.prescription_no LIKE CONCAT('%',#{OutpatientSkinTestRecordSearchParam.prescriptionNo}, '%')
</if>
<!-- 手机号 查询条件-->
<if test="OutpatientSkinTestRecordSearchParam != null and OutpatientSkinTestRecordSearchParam.phone != null and OutpatientSkinTestRecordSearchParam.phone != ''">
AND pt.phone LIKE CONCAT('%',#{OutpatientSkinTestRecordSearchParam.phone}, '%')
</if>
<!-- 时间筛选 -->
<if test="OutpatientSkinTestRecordSearchParam != null and OutpatientSkinTestRecordSearchParam.beginTime != null and OutpatientSkinTestRecordSearchParam.endTime != null">
AND ai.recorded_date BETWEEN
TO_TIMESTAMP(#{OutpatientSkinTestRecordSearchParam.beginTime} || ' 00:00:00', 'YYYY-MM-DD HH24:MI:SS')
AND
TO_TIMESTAMP(#{OutpatientSkinTestRecordSearchParam.endTime} || ' 23:59:59', 'YYYY-MM-DD HH24:MI:SS')
</if>
<!-- 皮试项目检查状态 查询条件-->
<if test="OutpatientSkinTestRecordSearchParam != null and OutpatientSkinTestRecordSearchParam.status != null and OutpatientSkinTestRecordSearchParam.status != null">
AND ai.verification_status_enum = #{OutpatientSkinTestRecordSearchParam.status}
</if>
</where>
</select>
<!-- 门诊输液记录患者列表信息查询-->
<select id="getOutpatientInfusionPatient"
resultType="com.openhis.web.outpatientmanage.dto.OutpatientInfusionPatientDto">
SELECT
T1.tenant_id,
T1.service_id,
T1.prescription_no,
T1.encounter_bus_no,
T1.birth_date,
T1.patient_bus_no,
T1.patient_id,
T1.patient_name,
T1.id_card,
T1.gender_enum,
T1.create_time
FROM
(
SELECT DISTINCT
sr.id AS service_id, --服务申请管理ID
sr.prescription_no, --处方号
sr.encounter_id,
e.bus_no as encounter_bus_no, --就诊号
pt.birth_date , --病人生日
pt.bus_no AS patient_bus_no, --病人ID前台显示用
sr.patient_id, --病人ID
pt.name AS patient_name, --病人姓名
pt.id_card AS id_card, --病人身份证号
sr.tenant_id,
pt.gender_enum AS gender_enum, --病人性别
mr.create_time AS create_time --开单时间
FROM
wor_service_request sr
LEFT JOIN adm_encounter e ON e.id = sr.encounter_id
LEFT JOIN adm_patient pt ON pt.id = sr.patient_id
LEFT JOIN wor_activity_definition ad ON ad.id = sr.activity_id
LEFT JOIN med_medication_request mr ON mr.prescription_no = sr.prescription_no
<where>
ad.bus_no = 'sy001' -- 输液的编号todo编号未定后期修改
AND mr.infusion_flag = 1
AND sr.status_enum in (2,3) --服务状态未完成
AND sr.based_on_id = null
</where>
ORDER BY
mr.create_time,e.bus_no,pt.bus_no
) AS T1
${ew.customSqlSegment}
</select>
<!-- 门诊输液记录初始化,默认显示今天待执行输液记录-->
<select id="getOutpatientInfusionRecord"
resultType="com.openhis.web.outpatientmanage.dto.OutpatientInfusionRecordDto">
SELECT
T1.service_id,
T1.request_status,
T1.bus_no,
T1.execute_num,
T1.based_on_id,
T1.activity_id,
T1.prescription_no,
T1.encounter_id,
T1.encounter_bus_No,
T1.patient_name,
T1.patient_bus_No,
T1.patient_id,
T1.medication_information,
T1.medication_antity,
T1.medication_status_Enum,
T1.group_id,
T1.clinical_status_enum,
T1.skin_test_flag,
T1.speed,
T1.method_code,
T1.dose,
T1.doctor_id,
T1.perform_org,
T1.performer_id,
T1.occurrence_start_time,
T1.occurrence_end_time,
T1.create_time
FROM
(
SELECT
sr.tenant_id,
sr.id AS service_id, --服务申请管理ID
sr.bus_no, -- 服务请求编码
sr.based_on_id, -- 请求基于什么的ID
sr.execute_num, -- 执行次数
sr.activity_id,--请求code,输液
sr.prescription_no, --处方号
sr.encounter_id , --就诊ID
sr.status_enum AS request_status, --服务请求状态
e.bus_no AS encounter_busNo, --就诊ID前台显示用
pt.name AS patient_name, --病人姓名
pt.bus_no AS patient_busNo, --病人ID前台显示用
sr.patient_id, --病人ID
md.id AS medication_id, --药品ID
md.name AS medication_information, --药品信息
mr.antity AS medication_antity,--药品数量
mr.status_enum AS medication_status_Enum, --药品状态
mr.group_id, --注射药品组号
CASE mr.skin_test_flag
WHEN 1 THEN 1
ELSE 0
END AS skin_test_flag ,--皮试标志
ai.clinical_status_enum, --皮试检查结果
mr.speed, --输液速度
mr.method_code,--用法
mr.dose || ' '|| mr.dose_unit_code AS dose,--单次剂量,剂量单位
mr.practitioner_id as doctor_id, --开单医生
mr.org_id,--开单科室
sr.performer_id, --执行护士
to_char(sr.occurrence_start_time, 'YYYY-MM-DD HH24:MI:SS') AS occurrence_start_time, --预计执行时间
to_char(sr.occurrence_end_time, 'YYYY-MM-DD HH24:MI:SS') AS occurrence_end_time, --预计结束时间
mr.create_time --开单时间
FROM
wor_service_request sr
LEFT JOIN adm_encounter e ON e.id = sr.encounter_id
LEFT JOIN adm_patient pt ON pt.id = sr.patient_id
LEFT JOIN wor_activity_definition ad ON ad.id = sr.activity_id
LEFT JOIN med_medication_request mr ON mr.prescription_no = sr.prescription_no
LEFT JOIN med_medication m ON m.id = mr.medication_id
LEFT JOIN med_medication_definition md ON md.id = m.medication_def_id
LEFT JOIN cli_allergy_intolerance ai ON ai.request_id = sr.id
<where>
ad.bus_no = 'sy001' -- 输液检查的编号todo编号未定后期修改
AND mr.infusion_flag = 1
AND md.infusion_flag = 1
</where>
ORDER BY
mr.create_time desc,e.bus_no,pt.bus_no
) AS T1
${ew.customSqlSegment}
</select>
<!-- 查询药品已执行数量/查询同组内药品数量 -->
<select id="countExecuteNumOrGroupNum" resultType="long">
SELECT COUNT(*)
FROM
wor_service_request sr
LEFT JOIN adm_encounter e ON e.id = sr.encounter_id
LEFT JOIN adm_patient pt ON pt.id = sr.patient_id
LEFT JOIN wor_activity_definition ad ON ad.id = sr.activity_id
LEFT JOIN med_medication_request mr ON mr.prescription_no = sr.prescription_no
LEFT JOIN med_medication m ON m.id = mr.medication_id
LEFT JOIN med_medication_definition md ON md.id = m.medication_def_id
LEFT JOIN cli_allergy_intolerance ai ON ai.request_id = sr.id
<where>
ad.bus_no = 'sy001' -- 输液检查的编号todo编号未定后期修改
AND mr.infusion_flag = 1
AND md.infusion_flag = 1
<!-- 药品已执行数量 条件筛选 -->
<if test="flag and paramId != null and paramId != '' and prefixBusNo != null and prefixBusNo != '' ">
AND sr.based_on_id = #{paramId}
AND sr.bus_no LIKE CONCAT(#{prefixBusNo}, '%')
AND sr.status_enum = 6 --服务状态是已完成
</if>
<!-- 同组内药品数量 条件筛选 -->
<if test="!flag and paramId != null and paramId != '' and groupId != null and groupId != ''">
AND sr.id = #{paramId}
AND mr.group_id = #{groupId}
AND sr.status_enum = 2 --服务状态是进行中
</if>
</where>
</select>
</mapper>