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:
@@ -0,0 +1,43 @@
|
||||
<?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.paymentmanage.mapper.ThreePartPayMapper">
|
||||
|
||||
<select id="getThreePartComparePaymentDtoList"
|
||||
resultType="com.openhis.web.paymentmanage.dto.ThreePartComparePaymentDto">
|
||||
SELECT
|
||||
fin.ID AS payment_id,
|
||||
fin.payment_no AS payment_no,
|
||||
fin.tendered_amount AS tendered_amount,
|
||||
del.amount AS paid_amount,
|
||||
fin.bill_date AS bill_date,
|
||||
pat."name" AS patient_name
|
||||
FROM
|
||||
fin_payment_reconciliation fin
|
||||
LEFT JOIN fin_payment_rec_detail del ON fin."id" = del.reconciliation_id
|
||||
AND del.pay_enum = 500000
|
||||
LEFT JOIN adm_patient pat ON fin.patient_id = pat."id"
|
||||
WHERE
|
||||
fin.delete_flag = '0' AND fin.status_enum != 0 AND
|
||||
fin.bill_date BETWEEN
|
||||
to_timestamp(#{startTime}, 'YYYY-MM-DD HH24:MI:SS')::timestamptz
|
||||
AND
|
||||
to_timestamp(#{endTime}, 'YYYY-MM-DD HH24:MI:SS')::timestamptz
|
||||
|
||||
</select>
|
||||
<select id="getThreePartCompareRequestDtoList"
|
||||
resultType="com.openhis.web.paymentmanage.dto.ThreePartCompareRequestDto">
|
||||
SELECT
|
||||
req.ID AS request_id,
|
||||
req.payment_id,
|
||||
req.amount,
|
||||
req.request_type
|
||||
FROM
|
||||
fin_three_part_pay_request req
|
||||
LEFT JOIN fin_payment_reconciliation fin ON fin."id" = req.payment_id
|
||||
WHERE
|
||||
req.payment_id IN
|
||||
<foreach item="paymentId" collection="paymentIds" separator="," close=")" open="(" index="">
|
||||
#{paymentId}
|
||||
</foreach>
|
||||
</select>
|
||||
</mapper>
|
||||
@@ -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>
|
||||
@@ -0,0 +1,100 @@
|
||||
<?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.reportmanage.mapper.AmbAdviceStatisticsAppMapper">
|
||||
|
||||
<select id="getMedStatistics" resultType="com.openhis.web.reportmanage.dto.AmbMedAdviceStatisticsDto">
|
||||
SELECT mmr.prescription_no,
|
||||
mmr.req_authored_time,
|
||||
ap.name AS patient_name,
|
||||
fc.bus_no AS contract_no,
|
||||
fc.contract_name,
|
||||
ccd.name AS condition_name,
|
||||
ccd.yb_no AS condition_yb_no,
|
||||
mmd.name AS advice_name,
|
||||
mmr.quantity,
|
||||
sdd.dict_label AS unit_code_text,
|
||||
aci.total_price,
|
||||
aper.name AS doctor_name,
|
||||
ao.id AS open_org_id,
|
||||
ao.name AS open_org_name
|
||||
FROM med_medication_request AS mmr
|
||||
LEFT JOIN adm_patient AS ap ON ap.id = mmr.patient_id AND ap.delete_flag = '0'
|
||||
LEFT JOIN adm_charge_item AS aci ON aci.service_id = mmr.id AND aci.delete_flag = '0'
|
||||
LEFT JOIN adm_account AS aa ON aa.id = aci.account_id AND aa.delete_flag = '0'
|
||||
LEFT JOIN fin_contract AS fc ON fc.bus_no = aa.contract_no AND fc.delete_flag = '0'
|
||||
LEFT JOIN adm_encounter_diagnosis AS aed
|
||||
ON aed.id = mmr.encounter_diagnosis_id AND aed.delete_flag = '0'
|
||||
LEFT JOIN cli_condition AS cc ON cc.id = aed.condition_id AND cc.delete_flag = '0'
|
||||
LEFT JOIN cli_condition_definition AS ccd ON ccd.id = cc.definition_id AND ccd.delete_flag = '0'
|
||||
LEFT JOIN med_medication_definition AS mmd ON mmd.id = mmr.medication_id AND mmd.delete_flag = '0'
|
||||
LEFT JOIN sys_dict_data AS sdd ON mmr.unit_code = sdd.dict_value AND sdd.dict_type = 'unit_code'
|
||||
LEFT JOIN adm_practitioner AS aper ON aper.id = mmr.practitioner_id AND aper.delete_flag = '0'
|
||||
LEFT JOIN adm_organization AS ao ON ao.id = mmr.org_id AND ao.delete_flag = '0'
|
||||
WHERE mmr.delete_flag = '0'
|
||||
AND mmr.status_enum = #{statusEnum}
|
||||
<if test="contractNo != null and contractNo != ''">
|
||||
AND fc.bus_no = #{contractNo}
|
||||
</if>
|
||||
<if test="patientName != null and patientName != ''">
|
||||
AND ap.name like concat('%', #{patientName}, '%')
|
||||
</if>
|
||||
<if test="openOrgId != null">
|
||||
AND ao.id = #{openOrgId}
|
||||
</if>
|
||||
AND mmr.req_authored_time >= #{startTime} ::timestamp
|
||||
AND mmr.req_authored_time <= #{endTime} :: timestamp
|
||||
AND EXISTS (SELECT 1
|
||||
FROM adm_encounter AS ae
|
||||
WHERE ae.ID = mmr.encounter_id
|
||||
AND ae.delete_flag = '0'
|
||||
AND ae.class_enum = #{classEnum})
|
||||
ORDER BY mmr.req_authored_time DESC
|
||||
</select>
|
||||
|
||||
<select id="getActStatistics" resultType="com.openhis.web.reportmanage.dto.AmbActAdviceStatisticsDto">
|
||||
SELECT wsr.authored_time AS req_authored_time,
|
||||
ap.name AS patient_name,
|
||||
fc.bus_no AS contract_no,
|
||||
fc.contract_name,
|
||||
ccd.name AS condition_name,
|
||||
ccd.yb_no AS condition_yb_no,
|
||||
wad.name AS advice_name,
|
||||
wsr.quantity,
|
||||
aci.total_price,
|
||||
aper.name AS doctor_name,
|
||||
ao.id AS open_org_id,
|
||||
ao.name AS open_org_name
|
||||
FROM wor_service_request AS wsr
|
||||
LEFT JOIN adm_patient AS ap ON ap.id = wsr.patient_id AND ap.delete_flag = '0'
|
||||
LEFT JOIN adm_charge_item AS aci ON aci.service_id = wsr.id AND aci.delete_flag = '0'
|
||||
LEFT JOIN adm_account AS aa ON aa.id = aci.account_id AND aa.delete_flag = '0'
|
||||
LEFT JOIN fin_contract AS fc ON fc.bus_no = aa.contract_no AND fc.delete_flag = '0'
|
||||
LEFT JOIN adm_encounter_diagnosis AS aed
|
||||
ON aed.id = wsr.encounter_diagnosis_id AND aed.delete_flag = '0'
|
||||
LEFT JOIN cli_condition AS cc ON cc.id = aed.condition_id AND cc.delete_flag = '0'
|
||||
LEFT JOIN cli_condition_definition AS ccd ON ccd.id = cc.definition_id AND ccd.delete_flag = '0'
|
||||
LEFT JOIN wor_activity_definition AS wad ON wad.id = wsr.activity_id AND wad.delete_flag = '0'
|
||||
LEFT JOIN adm_practitioner AS aper ON aper.id = wsr.requester_id AND aper.delete_flag = '0'
|
||||
LEFT JOIN adm_organization AS ao ON ao.id = wsr.org_id AND ao.delete_flag = '0'
|
||||
WHERE wsr.delete_flag = '0'
|
||||
AND wsr.status_enum = #{statusEnum}
|
||||
<if test="contractNo != null and contractNo != ''">
|
||||
AND fc.bus_no = #{contractNo}
|
||||
</if>
|
||||
<if test="patientName != null and patientName != ''">
|
||||
AND ap.name like concat('%', #{patientName}, '%')
|
||||
</if>
|
||||
<if test="openOrgId != null">
|
||||
AND ao.id = #{openOrgId}
|
||||
</if>
|
||||
AND wsr.authored_time >= #{startTime} ::timestamp
|
||||
AND wsr.authored_time <= #{endTime} :: timestamp
|
||||
AND EXISTS ( SELECT 1
|
||||
FROM adm_encounter AS ae
|
||||
WHERE ae.ID = wsr.encounter_id
|
||||
AND ae.delete_flag = '0'
|
||||
AND ae.class_enum = #{classEnum} )
|
||||
ORDER BY wsr.authored_time DESC
|
||||
</select>
|
||||
|
||||
</mapper>
|
||||
@@ -0,0 +1,123 @@
|
||||
<?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.reportmanage.mapper.PharmacySettlementReportAppMapper">
|
||||
|
||||
<select id="getListInfo" resultType="com.openhis.web.reportmanage.dto.PharmacySettlementReportDto">
|
||||
SELECT sdd.dict_label AS category_code_text,
|
||||
mmd.bus_no AS item_no,
|
||||
mmd.ID AS item_id,
|
||||
mmd.NAME AS item_name,
|
||||
mm.total_volume,
|
||||
mmd.unit_code,
|
||||
sdd1.dict_label AS unit_code_text,
|
||||
mmd.min_unit_code,
|
||||
sdd2.dict_label AS min_unit_code_text,
|
||||
mmd.part_percent
|
||||
FROM med_medication_definition AS mmd
|
||||
LEFT JOIN med_medication AS mm ON mmd.ID = mm.medication_def_id
|
||||
AND mm.delete_flag = '0'
|
||||
LEFT JOIN sys_dict_data AS sdd ON sdd.dict_value = mmd.category_code
|
||||
AND sdd.status = '0'
|
||||
AND sdd.dict_type = 'med_category_code'
|
||||
LEFT JOIN sys_dict_data AS sdd1 ON sdd1.dict_value = mmd.unit_code
|
||||
AND sdd1.status = '0'
|
||||
AND sdd1.dict_type = 'unit_code'
|
||||
LEFT JOIN sys_dict_data AS sdd2 ON sdd2.dict_value = mmd.min_unit_code
|
||||
AND sdd2.status = '0'
|
||||
AND sdd2.dict_type = 'unit_code'
|
||||
WHERE mmd.delete_flag = '0'
|
||||
<if test="searchKey != null and searchKey != ''">
|
||||
AND (mmd.py_str LIKE concat('%', #{searchKey}, '%') OR mmd.NAME LIKE concat('%', #{searchKey}, '%'))
|
||||
</if>
|
||||
order by mmd.category_code
|
||||
</select>
|
||||
|
||||
<select id="getDispenseInfo" resultType="com.openhis.web.reportmanage.dto.PharmacySettlementMedDto">
|
||||
SELECT medication_id,
|
||||
min_unit_code,
|
||||
COALESCE(SUM(CASE WHEN status = 'dispense' THEN quantity END), 0) -
|
||||
COALESCE(SUM(CASE WHEN status = 'return' THEN quantity END), 0) AS actual_quantity,
|
||||
sum(total_price) AS dispense_price
|
||||
FROM (
|
||||
SELECT mmdis.medication_id,
|
||||
CASE
|
||||
WHEN mmdis.unit_code = mmd.min_unit_code THEN
|
||||
mmdis.unit_code
|
||||
ELSE mmd.min_unit_code
|
||||
END AS min_unit_code,
|
||||
CASE
|
||||
|
||||
WHEN mmdis.unit_code = mmd.min_unit_code THEN
|
||||
mmdis.quantity
|
||||
ELSE mmdis.quantity * mmd.part_percent
|
||||
END AS quantity,
|
||||
CASE
|
||||
WHEN mmdis.status_enum = #{completed} THEN
|
||||
'dispense'
|
||||
WHEN mmdis.status_enum = #{refunded} THEN
|
||||
'return'
|
||||
END AS status,
|
||||
aci.total_price AS total_price
|
||||
FROM med_medication_dispense AS mmdis
|
||||
LEFT JOIN med_medication_definition AS mmd ON mmd.ID = mmdis.medication_id
|
||||
AND mmd.delete_flag = '0'
|
||||
LEFT JOIN med_medication_request AS mmr ON mmr.id = mmdis.med_req_id
|
||||
AND mmr.delete_flag = '0'
|
||||
LEFT JOIN adm_charge_item AS aci ON aci.service_id = mmr.id
|
||||
AND mmr.delete_flag = '0'
|
||||
WHERE mmdis.delete_flag = '0'
|
||||
AND mmdis.location_id = #{locationId}
|
||||
AND mmdis.dispense_time >= #{startTime} ::timestamp
|
||||
AND mmdis.dispense_time <= #{endTime} :: timestamp
|
||||
AND mmdis.status_enum IN ( #{completed}
|
||||
, #{refunded} )
|
||||
) AS subquery
|
||||
GROUP BY medication_id,
|
||||
min_unit_code
|
||||
</select>
|
||||
|
||||
<select id="getSupplyRequestInfo" resultType="com.openhis.web.reportmanage.dto.PharmacySettlementMedDto">
|
||||
SELECT wsr.item_id AS medication_id,
|
||||
mmd.min_unit_code AS min_unit_code,
|
||||
wsr.item_quantity AS supply_request_quantity,
|
||||
wsr.total_price,
|
||||
wsr.profit_loss_price,
|
||||
wsr.type_enum,
|
||||
wsr.source_location_id,
|
||||
wsr.purpose_location_id
|
||||
FROM wor_supply_request AS wsr
|
||||
LEFT JOIN wor_supply_delivery AS wsd ON wsr.ID = wsd.request_id
|
||||
AND wsd.delete_flag = '0'
|
||||
LEFT JOIN med_medication_definition AS mmd ON mmd.ID = wsr.item_id
|
||||
AND mmd.delete_flag = '0'
|
||||
WHERE wsr.delete_flag = '0'
|
||||
AND wsr.item_table = #{medTableName}
|
||||
AND wsd.status_enum = #{completed}
|
||||
AND wsr.approval_time >= #{startTime} ::timestamp
|
||||
AND wsr.approval_time <= #{endTime} :: timestamp
|
||||
AND (wsr.source_location_id = #{locationId}
|
||||
OR wsr.purpose_location_id = #{locationId})
|
||||
AND wsr.type_enum IN (#{productBatchStocktaking}
|
||||
, #{productStocktaking}
|
||||
, #{productTransfer}
|
||||
, #{productBatchTransfer}
|
||||
, #{lossReportForm}
|
||||
, #{issueInventory}
|
||||
, #{returnIssue})
|
||||
</select>
|
||||
|
||||
<select id="getInventoryInfo" resultType="com.openhis.web.reportmanage.dto.PharmacySettlementMedDto">
|
||||
SELECT wii.item_id AS medication_id,
|
||||
wii.quantity AS inventory_quantity,
|
||||
wii.lot_number,
|
||||
acidd.amount
|
||||
FROM wor_inventory_item AS wii
|
||||
LEFT JOIN adm_charge_item_def_detail AS acidd ON acidd.condition_value = wii.lot_number
|
||||
AND acidd.delete_flag = '0'
|
||||
AND acidd.condition_code = #{conditionCode}
|
||||
WHERE wii.delete_flag = '0'
|
||||
AND wii.item_table = #{medTableName}
|
||||
AND wii.location_id = #{locationId}
|
||||
</select>
|
||||
|
||||
</mapper>
|
||||
Reference in New Issue
Block a user