feat: 合并 upstream/v1.3 新增功能模块(安全合并策略)

新增功能模块:
- 药房管理:住院退药、处方审核功能
- 报表管理:门诊管理报表、药房结算报表、医嘱统计报表
- 支付管理:三方对账功能
- 新增枚举类:电子处方类型、频次类型、病历状态等10个
- 新增实体类:处方审核记录、第三方支付请求、中医结算目录
- 工具类增强:年龄计算、Excel工具

合并策略:仅合并低风险新增文件,保留现有业务功能
上游版本:v1.3 (2025-03-06发版)
合并分支:merge-upstream-v1.3-0310

🤖 Auto-generated by Claude Code
This commit is contained in:
2026-03-10 18:16:23 +08:00
parent 39b608dfd0
commit fe07cee58c
116 changed files with 5406 additions and 330 deletions

View File

@@ -0,0 +1,165 @@
<?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.pharmacymanage.mapper.InHospitalReturnMedicineAppMapper">
<select id="selectEncounterInfoListPage" resultType="com.openhis.web.pharmacymanage.dto.EncounterInfoDto">
SELECT ii.reception_time,
ii.start_time,
ii.encounter_id,
ii.encounter_no,
ii.refund_enum,
ii.patient_name,
ii.patient_wb_str,
ii.patient_py_str,
ii.id_card,
ii.gender_enum,
ii.birth_date,
ii.department_name
FROM (
SELECT ae.reception_time,
ae.id AS encounter_id,
ae.bus_no AS encounter_no,
ae.tenant_id,
ae.start_time,
ae.class_enum,
mmd.status_enum AS refund_enum,
ap."name" AS patient_name,
ap.wb_str AS patient_wb_str,
ap.py_str AS patient_py_str,
ap.id_card,
ap.gender_enum,
ap.birth_date,
ao."name" AS department_name,
#{medMedicationDefinition} AS item_table
FROM adm_encounter ae
LEFT JOIN med_medication_request mmr
ON mmr.encounter_id = ae.id
AND mmr.delete_flag = '0'
LEFT JOIN med_medication_dispense mmd
ON mmd.med_req_id = mmr.id
AND mmd.delete_flag = '0'
LEFT JOIN adm_patient ap
ON ae.patient_id = ap.id
AND ap.delete_flag = '0'
LEFT JOIN adm_organization ao
ON ao.id = ae.organization_id
AND ao.delete_flag = '0'
WHERE ae.delete_flag = '0'
AND ae.class_enum = #{imp}
<if test="refundStatus == null">
AND mmd.status_enum IN (#{refunded},#{pendingRefund})
</if>
<if test="refundStatus != null">
AND mmd.status_enum = #{refundStatus}
</if>
UNION
SELECT ae.reception_time,
ae.id AS encounter_id,
ae.bus_no AS encounter_no,
ae.tenant_id,
ae.start_time,
ae.class_enum,
wdd.status_enum AS refund_enum,
ap."name" AS patient_name,
ap.wb_str AS patient_wb_str,
ap.py_str AS patient_py_str,
ap.id_card,
ap.gender_enum,
ap.birth_date,
ao."name" AS department_name,
#{admDeviceDefinition} AS item_table
FROM adm_encounter ae
LEFT JOIN wor_device_request wdr
ON wdr.encounter_id = ae.id
AND wdr.delete_flag = '0'
LEFT JOIN wor_device_dispense wdd
ON wdd.device_req_id = wdr.id
AND wdd.delete_flag = '0'
LEFT JOIN adm_patient ap
ON ae.patient_id = ap.id
AND ap.delete_flag = '0'
LEFT JOIN adm_organization ao
ON ao.id = ae.organization_id
AND ao.delete_flag = '0'
WHERE ae.delete_flag = '0'
AND ae.class_enum = #{imp}
<if test="refundStatus == null">
AND wdd.status_enum IN (#{refunded},#{pendingRefund})
</if>
<if test="refundStatus != null">
AND wdd.status_enum = #{refundStatus}
</if>
) AS ii
${ew.customSqlSegment}
ORDER BY ii.reception_time DESC
</select>
<select id="selectReturnMedicineInfo"
resultType="com.openhis.web.pharmacymanage.dto.ReturnMedicineInfoDto">
<if test="itemTable == null or itemTable == medMedicationDefinition">
SELECT mmd.status_enum AS refund_enum,
mmd.quantity,
mmd.unit_code,
mmd.lot_number,
mmd.dispense_quantity,
mmd.id AS dispense_id,
mmr.id AS request_id,
med."name" AS item_name,
med.id AS item_id,
doc."name" AS doctor_name,
mmd.trace_no,
#{medMedicationRequest} AS service_table
FROM med_medication_dispense mmd
INNER JOIN med_medication_request mmr
ON mmr.id = mmd.med_req_id
AND mmr.delete_flag = '0'
INNER JOIN med_medication_definition med
ON mmr.medication_id = med.id
AND med.delete_flag = '0'
LEFT JOIN adm_practitioner doc
ON mmr.practitioner_id = doc.id
AND doc.delete_flag = '0'
WHERE mmd.delete_flag = '0'
AND mmd.encounter_id = #{encounterId}
<if test="refundStatus == null">
AND mmd.status_enum IN (#{refunded},#{pendingRefund})
</if>
<if test="refundStatus != null">
AND mmd.status_enum = #{refundStatus}
</if>
</if>
<if test="itemTable == null">
UNION
</if>
<if test="itemTable == null or itemTable == admDeviceDefinition">
SELECT wdd.status_enum AS refund_enum,
wdd.quantity,
wdd.unit_code,
wdd.lot_number,
wdd.dispense_quantity,
wdd.id AS dispense_id,
wdr.id AS request_id,
dev."name" AS item_name,
dev.id AS item_id,
doc."name" AS doctor_name,
wdd.trace_no,
#{worDeviceRequest} AS service_table
FROM wor_device_dispense wdd
INNER JOIN wor_device_request wdr
ON wdr.id = wdd.device_req_id
AND wdr.delete_flag = '0'
INNER JOIN adm_device_definition dev
ON wdr.device_def_id = dev.id
AND dev.delete_flag = '0'
LEFT JOIN adm_practitioner doc
ON wdr.requester_id = doc.id
AND doc.delete_flag = '0'
WHERE wdd.delete_flag = '0'
AND wdd.encounter_id = #{encounterId}
<if test="refundStatus == null">
AND wdd.status_enum IN (#{refunded},#{pendingRefund})
</if>
<if test="refundStatus != null">
AND wdd.status_enum = #{refundStatus}
</if>
</if>
</select>
</mapper>