提交merge1.3

This commit is contained in:
2025-12-27 15:30:25 +08:00
parent 8c607c8749
commit 088861f66e
1245 changed files with 220442 additions and 77616 deletions

View File

@@ -1,9 +1,216 @@
<?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.ChargeReportMapper">
<!--门诊收入明细-->
<sql id="selectRevenueReportPage">
SELECT T8.tenant_id,
T8.payment_id,
T8.charge_id,
T8.name, -- 姓名
T8.gender_enum, -- 性别
T8.birth_date, -- 出生日期
T8.id_card, -- 证件号
T8.yb_code, -- 医保号
T8.encounter_date, -- 就诊日期
T8.bus_no,-- 患者院内编码/病历号
T8.department_id,-- 科室
T8.department_name,-- 科室
T8.clinical_name,-- 项目名
T8.clinical_no, -- 项目编码
T8.ybNo,-- 医保码
T8.type, -- 类别
T8.issuer_id,-- 开单人
T8.issuer_name,-- 开单人
T8.payee_id,-- 收款人
T8.payee_name,-- 收款人
T8.number,-- 数量
T8.quantity_unit,-- 单位
T8.price,-- 单价
T8.total_price,-- 金额
T8.charge_time,-- 收费时间
T8.total_volume, -- 规格
T8.chrgitmLv,-- 医保等级
T8.clinical_type, -- 项目类型
T8.encounter_id
FROM (SELECT DISTINCT T1.tenant_id,
T1.id AS payment_id,
T4.id AS charge_id,
T15.name, -- 姓名
T15.gender_enum, -- 性别
T15.birth_date, -- 出生日期
T15.id_card, -- 证件号
T16.psn_no AS yb_code, -- 医保号
TO_CHAR(T2.reception_time, 'YYYY-MM-DD') AS encounter_date, -- 就诊日期
T2.bus_no, -- 患者院内编码/病历号
T3.id AS department_id,-- 科室
T3.name AS department_name,-- 科室
CASE
WHEN T5.instance_table = 'adm_device_definition' THEN T11.name
WHEN T5.instance_table = 'adm_healthcare_service' THEN T12.name
WHEN T5.instance_table = 'med_medication_definition' THEN T13.name
WHEN T5.instance_table = 'wor_activity_definition' THEN T14.name
ELSE NULL
END AS clinical_name, -- 项目名
CASE
WHEN T5.instance_table = 'adm_device_definition' THEN T11.bus_no
WHEN T5.instance_table = 'med_medication_definition' THEN T13.bus_no
WHEN T5.instance_table = 'wor_activity_definition' THEN T14.bus_no
ELSE NULL
END AS clinical_no, -- 项目编码
CASE
WHEN T5.instance_table = 'adm_device_definition' THEN T11.yb_no
WHEN T5.instance_table = 'adm_healthcare_service' THEN T12.yb_no
WHEN T5.instance_table = 'med_medication_definition' THEN T13.yb_no
WHEN T5.instance_table = 'wor_activity_definition' THEN T14.yb_no
ELSE NULL
END AS ybNo, -- 医保码
T5.yb_type AS type, -- 医保类别
T6.id AS issuer_id,-- 开单人
T6.name AS issuer_name,-- 开单人
T7.id AS payee_id,-- 收款人
T7.name AS payee_name,-- 收款人
T4.quantity_value AS number,-- 数量
T4.quantity_unit,-- 单位
T4.unit_price AS price,-- 单价
CASE
WHEN T1.status_enum = #{refundAll} THEN -T4.total_price
ELSE T4.total_price
END AS total_price,-- 金额
T1.bill_date AS charge_time,-- 收费时间
CASE
WHEN T5.instance_table = 'adm_device_definition' THEN T17.device_specifications
WHEN T5.instance_table = 'med_medication_definition' THEN T18.total_volume
ELSE NULL
END AS total_volume, -- 规格
CASE
WHEN T5.instance_table = 'adm_device_definition' THEN T11.chrgitm_lv
WHEN T5.instance_table = 'med_medication_definition' THEN T13.chrgitm_lv
WHEN T5.instance_table = 'wor_activity_definition' THEN T14.chrgitm_lv
ELSE NULL
END AS chrgitmLv,-- 医保等级
CASE
WHEN T5.instance_table = 'adm_device_definition' THEN #{device}
WHEN T5.instance_table = 'adm_healthcare_service' THEN #{register}
WHEN T5.instance_table = 'med_medication_definition' THEN #{medication}
WHEN T5.instance_table = 'wor_activity_definition' THEN #{activity}
ELSE NULL
END AS clinical_type, -- 项目类型
T1.encounter_id,
CASE WHEN T5.instance_table = 'adm_device_definition' THEN T11.category_code ELSE NULL END AS
device_category_code,
CASE WHEN T5.instance_table = 'med_medication_definition' THEN T13.category_code ELSE NULL END AS
medication_category_code,
CASE WHEN T5.instance_table = 'wor_activity_definition' THEN T14.category_code ELSE NULL END AS
activity_category_code
FROM fin_payment_reconciliation T1
LEFT JOIN adm_encounter T2
ON T2.id = T1.encounter_id
AND T2.delete_flag = '0'
AND T2.class_enum = 2
LEFT JOIN adm_patient AS T15
ON T1.patient_id = T15.id
AND T15.delete_flag = '0'
LEFT JOIN yb_clinc_reg AS T16
ON T2.bus_no = T16.ipt_otp_no
LEFT JOIN adm_organization AS T3
ON T2.organization_id = T3.id
AND T3.delete_flag = '0'
LEFT JOIN adm_charge_item T4
ON CONCAT(',', T1.charge_item_ids, ',') LIKE CONCAT('%,', T4.id, ',%')
AND T4.delete_flag = '0'
LEFT JOIN adm_charge_item_definition T5
ON T4.definition_id = T5.id
AND T5.delete_flag = '0'
LEFT JOIN adm_device_definition T11
ON T5.instance_id = T11.id
AND T5.instance_table = 'adm_device_definition'
AND T11.delete_flag = '0'
LEFT JOIN adm_device T17
ON T11.id = T17.device_def_id
AND T17.delete_flag = '0'
LEFT JOIN adm_healthcare_service T12
ON T5.instance_id = T12.id
AND T5.instance_table = 'adm_healthcare_service'
AND T12.delete_flag = '0'
LEFT JOIN med_medication_definition T13
ON T5.instance_id = T13.id
AND T5.instance_table = 'med_medication_definition'
AND T13.delete_flag = '0'
LEFT JOIN med_medication T18
ON T13.id = T18.medication_def_id
AND T18.delete_flag = '0'
LEFT JOIN wor_activity_definition T14
ON T5.instance_id = T14.id
AND T5.instance_table = 'wor_activity_definition'
AND T14.delete_flag = '0'
LEFT JOIN adm_practitioner T6
ON T4.enterer_id = T6.id
AND T6.delete_flag = '0'
LEFT JOIN adm_practitioner T7
ON T1.enterer_id = T7.id
AND T7.delete_flag = '0'
<if test="statisticsFlg == 0 or statisticsFlg == 1">
INNER JOIN adm_account T19
ON T4.account_id = T19.id
AND T19.delete_flag = '0'
INNER JOIN fin_contract T20
ON T19.contract_no = T20.bus_no
AND T20.yb_flag = #{statisticsFlg}
AND T20.delete_flag = '0'
</if>
<if test="statisticsFlg == 3">
WHERE T1.status_enum = #{refundAll}
</if>
<if test="statisticsFlg != 3">
WHERE T1.status_enum IN (#{success}, #{refundAll})
</if>
AND T1.delete_flag = '0'
ORDER BY T2.bus_no,
T4.ID,
T1.bill_date) AS T8
${ew.customSqlSegment}
<!-- clinicalType 筛选条件 -->
<if test="clinicalType != null and !clinicalType.isEmpty()">
AND (
<trim prefix="" suffix="" suffixOverrides="OR">
<if test="clinicalType.contains(1)">
T8.clinical_type = 1
AND T8.medication_category_code IN
<foreach collection="medicationCategoryCode" item="code" open="(" separator="," close=")">
#{code}
</foreach>
OR
</if>
<if test="clinicalType.contains(2)">
T8.clinical_type = 2
AND T8.device_category_code IN
<foreach collection="deviceCategoryCode" item="code" open="(" separator="," close=")">
#{code}
</foreach>
OR
</if>
<if test="clinicalType.contains(3)">
T8.clinical_type = 3
AND T8.activity_category_code IN
<foreach collection="activityCategoryCode" item="code" open="(" separator="," close=")">
#{code}
</foreach>
OR
</if>
<if test="clinicalType.contains(4)">
T8.clinical_type = 4
</if>
</trim>
)
</if>
</sql>
<!--门诊收入明细 -->
<select id="selectRevenueReportPage"
resultType="com.openhis.web.reportmanage.dto.ChargeReportPageDto">
<<<<<<< HEAD
SELECT T8.tenant_id,
T8.payment_id,
T8.charge_id,
@@ -164,5 +371,510 @@
T4.ID,
T1.bill_date) AS T8
${ew.customSqlSegment}
=======
<include refid="selectRevenueReportPage"/>
</select>
<!--门诊收入明细,不分页 -->
<select id="selectAllRevenueReportPage" resultType="com.openhis.web.reportmanage.dto.ChargeReportPageDto">
<include refid="selectRevenueReportPage"/>
</select>
<select id="selectOrgWorkload" resultType="com.openhis.web.reportmanage.dto.workloadReportDto">
SELECT
T8.requesting_org_id AS org_id,
T3.name AS org_name,
T5.type_code AS charge_code,
T5.yb_type AS yb_Charge_Code,
T8.trade_type AS charge_type,
SUM(T8.total_price) AS total_price, -- 退款为负数,汇总自动抵消,保留原有逻辑
SUM(T8.system_discount_price) AS system_discount_price_total,
SUM(
CASE
WHEN T5.instance_table = #{medicationTableName} THEN
T8.quantity_value * COALESCE(acidd.amount, 0) *
CASE
WHEN T8.quantity_unit = T13.min_unit_code THEN 1.0 / COALESCE(T13.part_percent, 1)
ELSE 1
END
WHEN T5.instance_table = #{deviceTableName} THEN
T8.quantity_value * COALESCE(acidd.amount, 0) *
CASE
WHEN T8.quantity_unit = T11.min_unit_code THEN 1.0 / COALESCE(T11.part_percent, 1)
ELSE 1
END
ELSE 0
END
) AS cost_price,
SUM(T8.total_price) - SUM(
CASE
WHEN T5.instance_table IN (#{medicationTableName}, #{deviceTableName}) THEN
T8.quantity_value * COALESCE(acidd.amount, 0) *
CASE
WHEN T5.instance_table = #{medicationTableName} THEN
CASE
WHEN T8.quantity_unit = T13.min_unit_code THEN 1.0 / COALESCE(T13.part_percent, 1)
ELSE 1
END
ELSE
CASE
WHEN T8.quantity_unit = T11.min_unit_code THEN 1.0 / COALESCE(T11.part_percent, 1)
ELSE 1
END
END
ELSE 0
END
) AS profit
FROM (
WITH base_payment AS (
SELECT
T1.id AS payment_id,
T1.tenant_id,
T1.status_enum,
T1.bill_date,
T1.charge_item_ids,
NULL AS relation_id,
T1.delete_flag
FROM fin_payment_reconciliation T1
WHERE T1.status_enum = #{success}
AND T1.delete_flag = '0'
AND T1.tenant_id = #{tenantId}
<if test="startTime != null and startTime != '' and endTime != null and endTime != ''">
AND T1.bill_date BETWEEN
to_timestamp(#{startTime}, 'YYYY-MM-DD HH24:MI:SS')::timestamptz
AND
to_timestamp(#{endTime}, 'YYYY-MM-DD HH24:MI:SS')::timestamptz
</if>
UNION ALL
SELECT
refund.id AS payment_id,
refund.tenant_id,
refund.status_enum,
refund.bill_date,
refund.charge_item_ids,
refund.relation_id,
refund.delete_flag
FROM fin_payment_reconciliation refund
WHERE refund.status_enum = #{refund}
AND refund.delete_flag = '0'
AND refund.tenant_id = #{tenantId}
<if test="startTime != null and startTime != '' and endTime != null and endTime != ''">
AND refund.bill_date BETWEEN
to_timestamp(#{startTime}, 'YYYY-MM-DD HH24:MI:SS')::timestamptz
AND
to_timestamp(#{endTime}, 'YYYY-MM-DD HH24:MI:SS')::timestamptz
</if>
),
payment_charge_item AS (
SELECT
bp.payment_id,
bp.tenant_id,
bp.status_enum,
bp.bill_date,
bp.relation_id,
unnest(string_to_array(bp.charge_item_ids, ','))::BIGINT AS charge_item_id
FROM base_payment bp
WHERE bp.charge_item_ids IS NOT NULL AND bp.charge_item_ids != ''
),
charge_item_calc AS (
SELECT
pci.payment_id,
pci.tenant_id,
pci.status_enum,
pci.bill_date,
pci.charge_item_id,
CASE
WHEN pci.status_enum = #{success} THEN 1
WHEN pci.status_enum = #{refund} THEN -1
ELSE 0
END AS calc_flag
FROM payment_charge_item pci
LEFT JOIN base_payment orig ON pci.relation_id = orig.payment_id
),
charge_item_detail AS (
SELECT
cic.tenant_id,
ac.id AS charge_id,
ac.requesting_org_id,
ac.quantity_value,
ac.quantity_unit,
ac.definition_id,
ac.service_id,
ac.total_price * cic.calc_flag AS total_price,
COALESCE(ac.system_discount_price, ac.total_price) * cic.calc_flag AS system_discount_price,
cic.bill_date,
CASE WHEN cic.status_enum = #{refund} THEN 2 ELSE 1 END AS trade_type,
COALESCE(
CASE
WHEN acd.instance_table = #{medicationTableName} THEN mmd.lot_number
WHEN acd.instance_table = #{deviceTableName} THEN wdd.lot_number
ELSE NULL
END, ''
) AS lot_number
FROM charge_item_calc cic
LEFT JOIN adm_charge_item ac ON cic.charge_item_id = ac.id AND ac.delete_flag = '0' AND ac.tenant_id =
#{tenantId}
LEFT JOIN adm_charge_item_definition acd ON ac.definition_id = acd.id AND acd.delete_flag = '0' AND
acd.tenant_id = #{tenantId}
LEFT JOIN med_medication_request mmr ON ac.service_id = mmr.id AND mmr.delete_flag = '0' AND mmr.tenant_id =
#{tenantId}
LEFT JOIN med_medication_dispense mmd ON mmd.med_req_id = mmr.id AND mmd.delete_flag = '0' AND mmd.tenant_id =
#{tenantId}
LEFT JOIN wor_device_request wdr ON ac.service_id = wdr.id AND wdr.delete_flag = '0' AND wdr.tenant_id =
#{tenantId}
LEFT JOIN wor_device_dispense wdd ON wdd.device_req_id = wdr.id AND wdd.delete_flag = '0' AND wdd.tenant_id =
#{tenantId}
LEFT JOIN fin_payment_rec_detail paydel ON cic.payment_id = paydel.reconciliation_id AND paydel.tenant_id =
#{tenantId}
LEFT JOIN adm_account account ON paydel.account_id = account.id AND account.tenant_id = #{tenantId}
WHERE ac.id IS NOT NULL
),
-- 按「charge_id + trade_type」组合维度去重保留正常/退款各一条)
charge_item_distinct AS (
SELECT
*,
-- 分区键charge_id收费项 + trade_type正常/退款),确保不同类型不互相覆盖
ROW_NUMBER() OVER (PARTITION BY charge_id, trade_type ORDER BY bill_date DESC) AS rn
FROM charge_item_detail
)
-- 只保留每个「收费项+交易类型」的第一条记录(去重),同时保留正常/退款数据
SELECT
tenant_id,
charge_id,
requesting_org_id,
quantity_value,
quantity_unit,
definition_id,
service_id,
total_price,
system_discount_price,
trade_type,
lot_number
FROM charge_item_distinct
WHERE rn = 1
) AS T8
-- 关联成本详情表(保留原有逻辑)
LEFT JOIN adm_charge_item_def_detail acidd
ON T8.definition_id = acidd.definition_id
AND acidd.tenant_id = #{tenantId}
AND acidd.id = (
SELECT cidd.id
FROM adm_charge_item_def_detail cidd
WHERE cidd.definition_id = T8.definition_id
AND cidd.condition_code = #{conditionCode}
AND cidd.delete_flag = '0'
AND cidd.tenant_id = #{tenantId}
AND (cidd.condition_value = T8.lot_number OR (T8.lot_number = '' AND cidd.condition_value IS NULL))
ORDER BY cidd.create_time DESC
LIMIT 1
)
-- 关联机构表(保留原有逻辑)
LEFT JOIN adm_organization T3
ON T8.requesting_org_id = T3.id
AND T3.delete_flag = '0'
AND T3.tenant_id = #{tenantId}
-- 关联收费项定义表(保留原有逻辑)
LEFT JOIN adm_charge_item_definition T5
ON T8.definition_id = T5.id
AND T5.delete_flag = '0'
AND T5.tenant_id = #{tenantId}
-- 关联药品定义表(保留原有去重逻辑)
LEFT JOIN (
SELECT id, min_unit_code, part_percent, tenant_id
FROM med_medication_definition
WHERE delete_flag = '0'
GROUP BY id, min_unit_code, part_percent, tenant_id
) T13
ON T5.instance_id = T13.id
AND T5.instance_table = #{medicationTableName}
AND T13.tenant_id = #{tenantId}
-- 关联设备定义表(保留原有去重逻辑)
LEFT JOIN (
SELECT id, min_unit_code, part_percent, tenant_id
FROM adm_device_definition
WHERE delete_flag = '0'
GROUP BY id, min_unit_code, part_percent, tenant_id
) T11
ON T5.instance_id = T11.id
AND T5.instance_table = #{deviceTableName}
AND T11.tenant_id = #{tenantId}
-- 保留原有分组逻辑包含trade_type确保正常/退款分开统计)
GROUP BY
T8.requesting_org_id,
T3.name,
T5.yb_type,
T5.type_code,
T8.trade_type
ORDER BY
T8.requesting_org_id,
T3.name,
T5.yb_type,
T5.type_code,
T8.trade_type;
</select>
<select id="selectDoctorWorkload" resultType="com.openhis.web.reportmanage.dto.workloadReportDto">
SELECT
T8.requesting_org_id AS org_id,
T3.name AS org_name,
T8.enterer_id AS doctor_id,
T8.name AS doctor_name,
T5.type_code AS charge_code,
T5.yb_type AS yb_Charge_Code,
T8.trade_type AS charge_type,
SUM(T8.total_price) AS total_price,
SUM(T8.system_discount_price) AS system_discount_price_total,
SUM(
CASE
WHEN T5.instance_table = #{medicationTableName} THEN
T8.quantity_value * COALESCE(acidd.amount, 0) *
CASE
WHEN T8.quantity_unit = T13.min_unit_code THEN 1.0 / COALESCE(T13.part_percent, 1)
ELSE 1
END
WHEN T5.instance_table = #{deviceTableName} THEN
T8.quantity_value * COALESCE(acidd.amount, 0) *
CASE
WHEN T8.quantity_unit = T11.min_unit_code THEN 1.0 / COALESCE(T11.part_percent, 1)
ELSE 1
END
ELSE 0
END
) AS cost_price,
-- 净收入 = 收入 - 成本(完全保留原有计算逻辑)
SUM(T8.total_price) - SUM(
CASE
WHEN T5.instance_table IN (#{medicationTableName}, #{deviceTableName}) THEN
T8.quantity_value * COALESCE(acidd.amount, 0) *
CASE
WHEN T5.instance_table = #{medicationTableName} THEN
CASE
WHEN T8.quantity_unit = T13.min_unit_code THEN 1.0 / COALESCE(T13.part_percent, 1)
ELSE 1
END
ELSE
CASE
WHEN T8.quantity_unit = T11.min_unit_code THEN 1.0 / COALESCE(T11.part_percent, 1)
ELSE 1
END
END
ELSE 0
END
) AS profit
FROM (
-- 基础支付对账数据(整合正常+退款和科室SQL完全一致
WITH base_payment AS (
SELECT
T1.id AS payment_id,
T1.tenant_id,
T1.status_enum,
T1.bill_date,
T1.charge_item_ids,
NULL AS relation_id,
T1.delete_flag
FROM fin_payment_reconciliation T1
WHERE T1.status_enum = #{success}
AND T1.delete_flag = '0'
AND T1.tenant_id = #{tenantId}
<if test="startTime != null and startTime != '' and endTime != null and endTime != ''">
AND T1.bill_date BETWEEN
to_timestamp(#{startTime}, 'YYYY-MM-DD HH24:MI:SS')::timestamptz
AND
to_timestamp(#{endTime}, 'YYYY-MM-DD HH24:MI:SS')::timestamptz
</if>
UNION ALL
SELECT
refund.id AS payment_id,
refund.tenant_id,
refund.status_enum,
refund.bill_date,
refund.charge_item_ids,
refund.relation_id,
refund.delete_flag
FROM fin_payment_reconciliation refund
WHERE refund.status_enum = #{refund}
AND refund.delete_flag = '0'
AND refund.tenant_id = #{tenantId}
<if test="startTime != null and startTime != '' and endTime != null and endTime != ''">
AND refund.bill_date BETWEEN
to_timestamp(#{startTime}, 'YYYY-MM-DD HH24:MI:SS')::timestamptz
AND
to_timestamp(#{endTime}, 'YYYY-MM-DD HH24:MI:SS')::timestamptz
</if>
),
-- 拆分charge_item_ids替代原有LIKE匹配精准且高效
payment_charge_item AS (
SELECT
bp.payment_id,
bp.tenant_id,
bp.status_enum,
bp.bill_date,
bp.relation_id,
unnest(string_to_array(bp.charge_item_ids, ','))::BIGINT AS charge_item_id
FROM base_payment bp
WHERE bp.charge_item_ids IS NOT NULL AND bp.charge_item_ids != ''
),
-- 计算calc_flag正常=1退款=-1和科室SQL一致
charge_item_calc AS (
SELECT
pci.payment_id,
pci.tenant_id,
pci.status_enum,
pci.bill_date,
pci.charge_item_id,
CASE
WHEN pci.status_enum = #{success} THEN 1
WHEN pci.status_enum = #{refund} THEN -1
ELSE 0
END AS calc_flag
FROM payment_charge_item pci
LEFT JOIN base_payment orig ON pci.relation_id = orig.payment_id
),
-- 关联收费项+医生信息(核心新增医生维度字段)
charge_item_detail AS (
SELECT
cic.tenant_id,
ac.id AS charge_id,
ac.requesting_org_id,
ac.quantity_value,
ac.quantity_unit,
ac.definition_id,
ac.service_id,
-- 金额计算和科室SQL一致退款为负数
ac.total_price * cic.calc_flag AS total_price,
-- 折后价计算和科室SQL一致退款为负数
COALESCE(ac.system_discount_price, ac.total_price) * cic.calc_flag AS system_discount_price,
cic.bill_date,
-- 交易类型1=正常2=退款,和原有逻辑一致)
CASE WHEN cic.status_enum = #{refund} THEN 2 ELSE 1 END AS trade_type,
-- 医生维度核心字段(新增)
ac.enterer_id,
ap.name,
-- 处理lot_number空值避免关联异常
COALESCE(
CASE
WHEN acd.instance_table = #{medicationTableName} THEN mmd.lot_number
WHEN acd.instance_table = #{deviceTableName} THEN wdd.lot_number
ELSE NULL
END, ''
) AS lot_number
FROM charge_item_calc cic
-- 关联收费项精准匹配替代原有LIKE
LEFT JOIN adm_charge_item ac
ON cic.charge_item_id = ac.id
AND ac.delete_flag = '0'
AND ac.tenant_id = #{tenantId}
-- 关联收费项定义获取instance_table等信息
LEFT JOIN adm_charge_item_definition acd
ON ac.definition_id = acd.id
AND acd.delete_flag = '0'
AND acd.tenant_id = #{tenantId}
-- 关联医生信息核心医生ID+姓名)
LEFT JOIN adm_practitioner ap
ON ac.enterer_id = ap.id
AND ap.delete_flag = '0'
AND ap.tenant_id = #{tenantId}
-- 关联药品/设备相关表(保留原有逻辑)
LEFT JOIN med_medication_request mmr
ON ac.service_id = mmr.id
AND mmr.delete_flag = '0'
AND mmr.tenant_id = #{tenantId}
LEFT JOIN med_medication_dispense mmd
ON mmd.med_req_id = mmr.id
AND mmd.delete_flag = '0'
AND mmd.tenant_id = #{tenantId}
LEFT JOIN wor_device_request wdr
ON ac.service_id = wdr.id
AND wdr.delete_flag = '0'
AND wdr.tenant_id = #{tenantId}
LEFT JOIN wor_device_dispense wdd
ON wdd.device_req_id = wdr.id
AND wdd.delete_flag = '0'
AND wdd.tenant_id = #{tenantId}
WHERE ac.id IS NOT NULL
),
--核心去重医生维度charge_id + enterer_id + trade_type
charge_item_distinct AS (
SELECT
*,
-- 分区键:收费项+医生+交易类型,确保不同医生/不同类型不重复
ROW_NUMBER() OVER (PARTITION BY charge_id, enterer_id, trade_type ORDER BY bill_date DESC) AS rn
FROM charge_item_detail
)
SELECT
tenant_id,
charge_id,
requesting_org_id,
quantity_value,
quantity_unit,
definition_id,
service_id,
total_price,
system_discount_price,
trade_type,
enterer_id,
name,
lot_number
FROM charge_item_distinct
WHERE rn = 1
) AS T8
-- 关联成本详情表和科室SQL一致修复lot_number空值匹配
LEFT JOIN adm_charge_item_def_detail acidd
ON T8.definition_id = acidd.definition_id
AND acidd.tenant_id = #{tenantId}
AND acidd.id = (
SELECT cidd.id
FROM adm_charge_item_def_detail cidd
WHERE cidd.definition_id = T8.definition_id
AND cidd.condition_code = #{conditionCode}
AND cidd.delete_flag = '0'
AND cidd.tenant_id = #{tenantId}
-- 关键处理lot_number为空的情况
AND (cidd.condition_value = T8.lot_number OR (T8.lot_number = '' AND cidd.condition_value IS NULL))
ORDER BY cidd.create_time DESC
LIMIT 1
)
-- 关联机构表和科室SQL一致
LEFT JOIN adm_organization T3
ON T8.requesting_org_id = T3.id
AND T3.delete_flag = '0'
AND T3.tenant_id = #{tenantId}
-- 关联收费项定义表和科室SQL一致获取yb_type
LEFT JOIN adm_charge_item_definition T5
ON T8.definition_id = T5.id
AND T5.delete_flag = '0'
AND T5.tenant_id = #{tenantId}
-- 关联药品定义表(去重,避免笛卡尔积)
LEFT JOIN (
SELECT id, min_unit_code, part_percent, tenant_id
FROM med_medication_definition
WHERE delete_flag = '0'
GROUP BY id, min_unit_code, part_percent, tenant_id
) T13
ON T5.instance_id = T13.id
AND T5.instance_table = #{medicationTableName}
AND T13.tenant_id = #{tenantId}
-- 关联设备定义表(去重,避免笛卡尔积)
LEFT JOIN (
SELECT id, min_unit_code, part_percent, tenant_id
FROM adm_device_definition
WHERE delete_flag = '0'
GROUP BY id, min_unit_code, part_percent, tenant_id
) T11
ON T5.instance_id = T11.id
AND T5.instance_table = #{deviceTableName}
AND T11.tenant_id = #{tenantId}
GROUP BY
T8.requesting_org_id,
T3.name,
T8.enterer_id,
T8.name,
T5.type_code,
T5.yb_type,
T8.trade_type
ORDER BY
T8.requesting_org_id,
T3.name,
T5.yb_type,
T5.type_code,
T8.trade_type;
>>>>>>> v1.3
</select>
</mapper>

View File

@@ -126,4 +126,129 @@
${ew.customSqlSegment}
ORDER BY T10.supply_bus_no DESC
</select>
<select id="excelInboundReportPage"
resultType="com.openhis.web.reportmanage.dto.InboundReportPageDto">
SELECT T10.supply_bus_no, --单据号
T10.name, --药品名称
T10.bus_no, --药品编码
T10.lot_number, --批次号
T10.purpose_location_id, --目的仓库ID
T10.location_name, --仓库名称
T10.location_store_name, --货位名称
T10.unit_code, --计量单位
T10.quantity, --采购数量
T10.price, --采购单价
T10.total_price AS total_price, --采购金额(总价)
T10.sale_price, --售价
T10.sale_price * T10.quantity AS total_sale_price, --售价金额(总价)
T10.supplier_id, --供应商id
T10.supplier, --供应商
T10.approver_id, --审核人
T10.occurrence_time, --制单日期
T10.approval_time, --审核日期
T10.tenant_id -- 租户ID
FROM (SELECT T1.bus_no AS supply_bus_no, --单据号
T2.name, --药品名称
T2.bus_no, --药品编码
T1.lot_number, --批次号
T1.purpose_location_id, -- 目的仓库ID
T7.name AS location_name, --仓库名称
T8.name AS location_store_name, --货位名称
T1.unit_code, --计量单位
T1.item_quantity AS quantity, --采购数量
T4.amount AS price, --采购单价
T1.total_price, --采购金额(总价)
T4.amount AS sale_price, --售价
T2.part_percent, --拆零比
T1.supplier_id, --供应商id
T9.name AS supplier, --供应商
T1.approver_id, --审核人
T1.occurrence_time, --制单日期
T1.approval_time, --审核日期
T1.tenant_id -- 租户ID
FROM wor_supply_request AS T1
INNER JOIN wor_supply_delivery AS T14
ON T14.request_id = T1.id
AND T14.status_enum = #{deliveryStatus}
AND T14.delete_flag = '0'
LEFT JOIN med_medication_definition AS T2
ON T2.id = T1.item_id
AND T2.delete_flag = '0'
LEFT JOIN adm_charge_item_definition AS T3
ON T3.instance_id = T1.item_id
AND T3.delete_flag = '0'
LEFT JOIN adm_charge_item_def_detail AS T4
ON T4.definition_id = T3.id
AND T4.delete_flag = '0'
AND T4.condition_value = T1.lot_number
AND T4.condition_code = '1'--1:批号进价
LEFT JOIN med_medication AS T5
ON T5.medication_def_id = T2.id
AND T5.delete_flag = '0'
LEFT JOIN adm_location AS T7
ON T7.id = T1.purpose_location_id
AND T7.delete_flag = '0'
LEFT JOIN adm_location AS T8
ON T8.id = T1.purpose_location_store_id
AND T8.delete_flag = '0'
LEFT JOIN adm_supplier AS T9
ON T9.id = T1.supplier_id
AND T9.delete_flag = '0'
WHERE T1.delete_flag = '0'
AND T1.type_enum = #{purchaseInventory}
AND T1.status_enum = #{supplyStatus}
AND T1.item_table = #{medicationTableName}
UNION
SELECT T1.bus_no AS supply_bus_no, --单据号
T11.name, --器材名称
T11.bus_no, --器材编码
T1.lot_number, --批次号
T1.purpose_location_id, -- 目的仓库ID
T7.name AS location_name, --仓库名称
T8.name AS location_store_name, --货位名称
T1.unit_code, --计量单位
T1.item_quantity AS quantity, --采购数量
T4.amount AS price, --采购单价
T1.total_price, --采购金额(总价)
T4.amount AS sale_price, --售价
T11.part_percent, --拆零比
T1.supplier_id, --供应商id
T9.name AS supplier, --供应商
T1.approver_id, --审核人
T1.occurrence_time, --制单日期
T1.approval_time, --审核日期
T1.tenant_id -- 租户ID
FROM wor_supply_request AS T1
INNER JOIN wor_supply_delivery AS T14
ON T14.request_id = T1.id
AND T14.status_enum = #{deliveryStatus}
AND T14.delete_flag = '0'
LEFT JOIN adm_device_definition AS T11
ON T11.id = T1.item_id
AND T11.delete_flag = '0'
LEFT JOIN adm_charge_item_definition AS T3
ON T3.instance_id = T1.item_id
AND T3.delete_flag = '0'
LEFT JOIN adm_charge_item_def_detail AS T4
ON T4.definition_id = T3.id
AND T4.delete_flag = '0'
AND T4.condition_value = T1.lot_number
AND T4.condition_code = '1'--1:批号进价
LEFT JOIN adm_location AS T7
ON T7.id = T1.purpose_location_id
AND T7.delete_flag = '0'
LEFT JOIN adm_location AS T8
ON T8.id = T1.purpose_location_store_id
AND T8.delete_flag = '0'
LEFT JOIN adm_supplier AS T9
ON T9.id = T1.supplier_id
AND T9.delete_flag = '0'
WHERE T1.delete_flag = '0'
AND T1.type_enum = #{purchaseInventory}
AND T1.status_enum = #{supplyStatus}
AND T1.item_table = #{deviceTableName}) AS T10
${ew.customSqlSegment}
ORDER BY T10.supply_bus_no DESC
</select>
</mapper>

View File

@@ -107,4 +107,110 @@
${ew.customSqlSegment}
ORDER BY T9.supply_bus_no DESC
</select>
<select id="excelLossReportPage"
resultType="com.openhis.web.reportmanage.dto.LossReportPageDto">
SELECT T9.bus_no, --编码
T9.name, --名称
T9.total_volume, --规格
T9.manufacturer_text, --厂家
T9.lot_number, --产品批号
T9.location_name, --目的仓库
T9.unit_code, --小单位
T9.item_quantity, --数量
T9.approval_time, --审批时间
T9.supply_bus_no,--单据号
T9.purpose_location_id,-- 目的仓库id
T9.price,--采购单价
T9.location_store_name,--仓库货位
T9.total_price,--报损金额
T9.name AS supplier,--供应商
T9.approver_id, --审核人
T9.occurrence_time, --制单日期
T9.tenant_id -- 租户ID
FROM (SELECT T2.bus_no, --编码
T2.name, --名称
T3.total_volume, --规格
T2.manufacturer_text, --厂家
T1.lot_number, --产品批号
T5.name AS location_name, --目的仓库
T1.unit_code, --单位
T1.item_quantity, --数量
T1.approval_time, --审批时间
T1.bus_no AS supply_bus_no,--单据号
T1.purpose_location_id,-- 目的仓库id
T1.price,--采购单价
T4.name AS location_store_name,--仓库货位
T1.total_price,--报损金额
T9.name AS supplier,--供应商
T1.approver_id, --审核人
T1.occurrence_time, --制单日期
T1.tenant_id -- 租户ID
FROM wor_supply_request AS T1
INNER JOIN wor_supply_delivery AS T8
ON T8.request_id = T1.id
AND T8.status_enum = #{deliveryStatus}
AND T8.delete_flag = '0'
LEFT JOIN med_medication_definition AS T2
ON T1.item_id = T2.id
AND T2.delete_flag = '0'
LEFT JOIN med_medication AS T3
ON T2.id = T3.medication_def_id
AND T3.delete_flag = '0'
LEFT JOIN adm_location T5
ON T1.purpose_location_id = T5.id
AND T5.delete_flag = '0'
LEFT JOIN adm_location AS T4
ON T4.id = T1.purpose_location_store_id
AND T4.delete_flag = '0'
LEFT JOIN adm_supplier AS T9
ON T9.id = T1.supplier_id
AND T9.delete_flag = '0'
WHERE T1.type_enum = #{lossReport}
AND T1.status_enum = #{supplyStatus}
AND T1.item_table = #{medicationTableName}
AND T1.delete_flag = '0'
UNION
SELECT T6.bus_no, --编码
T6.name, --名称
T6.size AS total_volume, --规格(器材规格)
T6.manufacturer_text, --厂家
T1.lot_number, --产品批号
T5.name AS location_name, --目的仓库
T1.unit_code, --单位
T1.item_quantity, --数量
T1.approval_time, --审批时间
T1.bus_no AS supply_bus_no,--单据号
T1.purpose_location_id,-- 目的仓库id
T1.price,--采购单价
T4.name AS location_store_name,--仓库货位
T1.total_price,--报损金额
T9.name AS supplier,--供应商
T1.approver_id, --审核人
T1.occurrence_time, --制单日期
T1.tenant_id -- 租户ID
FROM wor_supply_request AS T1
INNER JOIN wor_supply_delivery AS T8
ON T8.request_id = T1.id
AND T8.status_enum = #{deliveryStatus}
AND T8.delete_flag = '0'
LEFT JOIN adm_device_definition AS T6
ON T1.item_id = T6.id
AND T6.delete_flag = '0'
LEFT JOIN adm_location T5
ON T1.purpose_location_id = T5.id
AND T5.delete_flag = '0'
LEFT JOIN adm_location AS T4
ON T4.id = T1.purpose_location_store_id
AND T4.delete_flag = '0'
LEFT JOIN adm_supplier AS T9
ON T9.id = T1.supplier_id
AND T9.delete_flag = '0'
WHERE T1.type_enum = #{lossReport}
AND T1.status_enum = #{supplyStatus}
AND T1.item_table = #{deviceTableName}
AND T1.delete_flag = '0') AS T9
${ew.customSqlSegment}
ORDER BY T9.supply_bus_no DESC
</select>
</mapper>

View File

@@ -0,0 +1,46 @@
<?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.MedicationInboundReportMapper">
<select id="getMedicationInboundPage" resultType="com.openhis.web.reportmanage.dto.MedicationInboundReportDto">
SELECT ii.medication_id, --药品id
ii.NAME, --药品名称
ii.py_str, --拼音码
ii.wb_str, --五笔码
ii.yb_no, --医保编码
ii.bus_no, --药品编号
ii.total_price, --总价
ii.item_quantity, --数量
ii.unit_code, --单位
ii.min_unit_code, --最小单位
ii.part_percent, --拆零比
ii.occurrence_time --发放时间
FROM (SELECT T1.tenant_id,
T3.ID AS medication_id,
T3.NAME,
T3.py_str,
T3.wb_str,
T3.yb_no,
T3.bus_no,
T1.total_price,
T1.item_quantity,
T1.unit_code,
T3.min_unit_code,
T3.part_percent,
T2.occurrence_time
FROM wor_supply_request T1
LEFT JOIN wor_supply_delivery AS T2 ON T2.request_id = T1.ID
AND T2.delete_flag = '0'
LEFT JOIN med_medication_definition AS T3 ON T2.item_id = T3.ID
AND T3.delete_flag = '0'
LEFT JOIN med_medication AS T4 ON T3.ID = T4.medication_def_id
AND T4.delete_flag = '0'
WHERE T1.delete_flag = '0'
AND T1.status_enum = #{requestStatus}
AND T2.status_enum = #{dispenseStatus}
AND T1.type_enum = #{typeStatus}
AND T1.item_table = #{medMedicationDefinition}) AS ii
${ew.customSqlSegment}
</select>
</mapper>

View File

@@ -131,4 +131,134 @@
${ew.customSqlSegment}
ORDER BY T10.supply_bus_no DESC
</select>
<select id="excelOutboundReportPage"
resultType="com.openhis.web.reportmanage.dto.OutboundReportPageDto">
select T10.supply_bus_no, --单据号
T10.name, --药品名称
T10.bus_no, --编码
T10.lot_number, --批号
T10.source_location_id, -- 源仓库ID(存放仓库)
T10.source_location_name, -- 源仓库(存放仓库)
T10.source_location_store_id, -- 源仓位ID
T10.source_location_store_name, -- 源仓位
T10.purpose_location_id, -- 目的仓库ID(领用科室)
T10.purpose_location_name, -- 目的仓库(领用科室)
T10.unit_code, --计量单位
T10.item_quantity, --数量
T10.purchase_price, --采购单价
T10.price, --领用单价
T10.total_price, --金额
T10.supplier_id, --供应商
T10.approver_id, --审核人
T10.approval_time, --审批时间
T10.occurrence_time, --制单日期
T10.remake, --出库原因
T10.tenant_id -- 租户ID
from (
select T1.bus_no as supply_bus_no, --单据号
T3.name, --药品名称
T3.bus_no, --编码
T1.lot_number, --批号
T1.source_location_id, -- 源仓库ID
T4.name AS source_location_name, -- 源仓库
T1.source_location_store_id, -- 源仓位ID
T5.name AS source_location_store_name, -- 源仓位
T1.purpose_location_id, -- 目的仓库ID
T8.name AS purpose_location_name, -- 目的仓库(领用科室)
T1.unit_code, --计量单位
T1.item_quantity, --数量
T7.amount as purchase_price, --采购单价
T1.price, --领用单价
T1.total_price, --金额
T1.supplier_id, --供应商
T1.approver_id, --审核人
T1.approval_time, --审批时间
T1.occurrence_time, --制单日期
T1.remake, --出库原因(备注)
T1.tenant_id -- 租户ID
from wor_supply_request as T1
inner join wor_supply_delivery as T2
on T1.id = T2.request_id
and T2.status_enum = #{deliveryStatus}
and T2.delete_flag = '0'
left join med_medication_definition as T3
on T1.item_id = T3.id
and T3.delete_flag = '0'
left join adm_location T4
on T1.source_location_id = T4.id
and T4.delete_flag = '0'
left join adm_location T5
on T1.source_location_store_id = T5.id
and T5.delete_flag = '0'
left join adm_charge_item_definition as T6
on T3.id = T6.instance_id
and T6.delete_flag = '0'
left join adm_charge_item_def_detail as T7
on T6.id = T7.definition_id
and T7.delete_flag = '0'
AND T7.condition_value = T1.lot_number
AND T7.condition_code = '1'--1:批号进价
left join adm_organization T8
on T1.purpose_location_id = T8.id
and T8.delete_flag = '0'
where T1.delete_flag = '0'
and T1.type_enum = #{issueInventory}
and T1.status_enum = #{supplyStatus}
and T1.item_table = #{medicationTableName}
union
select T1.bus_no as supply_bus_no, --单据号
T3.name, --药品名称
T3.bus_no, --编码
T1.lot_number, --批号
T1.source_location_id, -- 源仓库ID
T4.name AS source_location_name, -- 源仓库
T1.source_location_store_id, -- 源仓位ID
T5.name AS source_location_store_name, -- 源仓位
T1.purpose_location_id, -- 目的仓库ID
T8.name AS purpose_location_name, -- 目的仓库(领用科室)
T1.unit_code, --计量单位
T1.item_quantity, --数量
T7.amount as purchase_price, --采购单价
T1.price, --领用单价
T1.total_price, --金额
T1.supplier_id, --供应商
T1.approver_id, --审核人
T1.approval_time, --审批时间
T1.occurrence_time, --制单日期
T1.remake, --出库原因
T1.tenant_id -- 租户ID
from wor_supply_request as T1
inner join wor_supply_delivery as T2
on T1.id = T2.request_id
and T2.status_enum = #{deliveryStatus}
and T2.delete_flag = '0'
inner join adm_device_definition as T3
on T1.item_id = T3.id
and T3.delete_flag = '0'
left join adm_location T4
on T1.source_location_id = T4.id
and T4.delete_flag = '0'
left join adm_location T5
on T1.source_location_store_id = T5.id
and T5.delete_flag = '0'
left join adm_charge_item_definition as T6
on T3.id = T6.instance_id
and T6.delete_flag = '0'
left join adm_charge_item_def_detail as T7
on T6.id = T7.definition_id
and T7.delete_flag = '0'
AND T7.condition_value = T1.lot_number
AND T7.condition_code = '1'--1:批号进价
left join adm_organization T8
on T1.purpose_location_id = T8.id
and T8.delete_flag = '0'
where T1.delete_flag = '0'
and T1.type_enum = #{issueInventory}
and T1.status_enum = #{supplyStatus}
and T1.item_table = #{deviceTableName}
) as T10
${ew.customSqlSegment}
ORDER BY T10.supply_bus_no DESC
</select>
</mapper>

View File

@@ -0,0 +1,191 @@
<?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.ReportMapper">
<!--患者明细报表-->
<select id="selectPatientDetailsPage"
resultType="com.openhis.web.reportmanage.dto.ReportPatientDetailsDto">
SELECT T6.tenant_id,
T6.encounter_bus_no,
T6.med_name,
T6.med_yb_no,
T6.category_code,
T6.dose_form_code,
T6.total_volume,
T6.package_unit,
T6.unit_code,
T6.is_selected,
T6.manufacturer_text,
T6.price,
T6.quantity,
T6.total_price
FROM (SELECT T1.tenant_id,
T2.bus_no AS encounter_bus_no,--门诊住院号
T4.name AS med_name,--药品通用名
T4.yb_no AS med_yb_no,--药品医保编码
T4.category_code AS category_code,--药品类别
T5.dose_form_code AS dose_form_code,--剂型
T5.total_volume AS total_volume,--规格
T4.unit_code AS package_unit,--包装
T1.quantity_unit AS unit_code,--计价单位
'' AS is_selected,--是否中选产品
T4.manufacturer_text AS manufacturer_text,--生产企业
T1.unit_price AS price,--单价(元)
T1.quantity_value AS quantity,--使用数量(片袋支)
T1.total_price AS total_price--使用总金额(元)
FROM adm_charge_item T1
LEFT JOIN adm_encounter T2 ON T1.encounter_id = T2.id
AND T2.delete_flag = '0'
LEFT JOIN med_medication_request T3 ON T1.service_id = T3.id
AND T3.delete_flag = '0'
LEFT JOIN med_medication_definition T4 ON T3.medication_id = T4.id
AND T4.delete_flag = '0'
LEFT JOIN med_medication T5 ON T4.id = T5.medication_def_id
AND T5.delete_flag = '0'
WHERE T1.service_table = #{medicationTableName}
AND T1.delete_flag = '0'
) AS T6
${ew.customSqlSegment}
</select>
<select id="selectMedicationInboundDetailsPage"
resultType="com.openhis.web.reportmanage.dto.ReportMedicationInboundDetailsDto">
SELECT T2.med_name AS product_name,
T2.unit_label,
T2.min_unit_label AS min_unit,
T2.item_quantity,
T2.total_quantity,
T2.part_percent
FROM (SELECT T1.bus_no,
T4.NAME AS med_name,
T1.item_quantity,
T1.total_quantity,
sdd.dict_label AS unit_label,
sdd1.dict_label AS min_unit_label,
T4.part_percent
FROM wor_supply_request AS T1
LEFT JOIN med_medication_definition T4 ON T1.item_id = T4.ID
AND T4.delete_flag = '0'
LEFT JOIN sys_dict_data sdd ON sdd.dict_value = T4.unit_code
AND sdd.dict_type = 'unit_code'
LEFT JOIN sys_dict_data sdd1 ON sdd1.dict_value = T4.min_unit_code
AND sdd1.dict_type = 'unit_code'
WHERE T1.type_enum IN (#{transferCode}, #{batchTransferCode})
AND T1.source_location_id = #{sourceLocationId}
AND T1.purpose_location_id = #{purposeLocationId}
AND T1.occurrence_time BETWEEN #{startTime} AND #{endTime}
GROUP BY T1.bus_no,
T4.NAME,
T1.item_quantity,
T1.total_quantity,
sdd.dict_label,
sdd1.dict_label,
T4.part_percent,
T4.unit_code,
T4.min_unit_code
ORDER BY T1.bus_no DESC) AS T2
</select>
<!--患者明细主表做成-->
<select id="selectPatientMasterDetailPage"
resultType="com.openhis.web.reportmanage.dto.ReportPatientMasterDetailDto">
SELECT T7.tenant_id,
T7.encounter_bus_no,
T7.patient_name,
T7.id_card,
T7.psn_no,--人员编码
T7.insu_plc_no,--参保地区编码
T7.yb_type,
T7.encounter_start_time,
T7.encounter_end_time,
T7.issue_time,--处方日期
T7.out_diagnose_name,--出院诊断
T7.fee_amount,
T7.inscp_scp_amt,--政策范围内
T7.tc_pay_amount--基本医保统筹支付金额(元)
FROM (SELECT T1.tenant_id,
T2.bus_no AS encounter_bus_no,
T3.name AS patient_name,
T3.id_card AS id_card,
'' AS psn_no,--人员编码
'' AS insu_plc_no,--参保地区编码
T5.contract_name AS yb_type,--参保类型
T2.start_time AS encounter_start_time,
T2.end_time AS encounter_end_time,
MAX(T6.issue_time ) AS issue_time,--处方日期
'' AS out_diagnose_name,--出院诊断
SUM(T1.total_price) AS fee_amount,--总费用(元)
NULL AS inscp_scp_amt,--政策范围内
NULL AS tc_pay_amount--基本医保统筹支付金额(元)
FROM adm_charge_item T1
LEFT JOIN adm_encounter T2 ON T1.encounter_id = T2.id
AND T2.delete_flag = '0'
LEFT JOIN adm_patient T3 ON T1.patient_id = T3.id
AND T3.delete_flag = '0'
LEFT JOIN adm_account T4 ON T1.encounter_id = T4.encounter_id
AND T4.delete_flag = '0'
LEFT JOIN fin_contract T5 ON T4.contract_no = T5.bus_no
AND T5.delete_flag = '0'
LEFT JOIN elep_medication_request T6 ON T1.prescription_no = T6.prescription_no
AND T6.delete_flag = '0'
WHERE T2.class_enum = #{encounterClass}--住院
AND T1.delete_flag = '0'
GROUP BY
T1.tenant_id,
T2.bus_no,
T3.name,
T3.id_card,
T2.start_time,
T2.end_time,
T5.contract_name
) AS T7
${ew.customSqlSegment}
</select>
<select id="selectMedicationUsagePage"
resultType="com.openhis.web.reportmanage.dto.ReportMedicationUsageDto">
SELECT
mmde.yb_no AS national_drugCode,
md.medication_def_id AS bus_no,
mmde.name AS item_name,
SUM(aci.total_price) AS total_sales_price,
SUM(CASE
WHEN mmdi.unit_code = mmde.min_unit_code THEN mmdi.dispense_quantity
WHEN mmdi.unit_code = mmde.unit_code THEN mmdi.dispense_quantity * mmde.part_percent
ELSE 0
END) AS package_sales_quantity,
SUM(CASE
WHEN mmdi.unit_code = mmde.unit_code THEN mmdi.dispense_quantity
WHEN mmdi.unit_code = mmde.min_unit_code THEN mmdi.dispense_quantity / mmde.part_percent
ELSE 0
END) AS dosage_sales_quantity,
mmde.min_unit_code AS unit_code,
md.tenant_id
FROM med_medication md
INNER JOIN med_medication_definition mmde
ON md.medication_def_id = mmde.id
AND mmde.delete_flag = '0'
INNER JOIN med_medication_dispense mmdi
ON md.medication_def_id = mmdi.medication_id
AND mmdi.status_enum = #{dispenseStatus}
AND mmdi.delete_flag = '0'
LEFT JOIN adm_charge_item aci
ON mmdi.encounter_id = aci.encounter_id
AND product_table = 'med_medication_definition'
AND aci.delete_flag = '0'
WHERE
md.delete_flag = '0'
<if test="searchKey != null">
AND mmde.name LIKE CONCAT('%', #{searchKey}, '%')
</if>
<if test="startTime != null">
AND mmdi.dispense_time >= CAST(#{startTime} AS timestamp with time zone)
</if>
<if test="endTime != null">
AND mmdi.dispense_time &gt;= CAST(#{endTime} AS timestamp with time zone)
</if>
GROUP BY
mmde.yb_no,
md.medication_def_id,
mmde.name,
mmde.min_unit_code,
md.tenant_id
</select>
</mapper>

View File

@@ -4,52 +4,52 @@
<select id="selectStocktakingReportPage"
resultType="com.openhis.web.reportmanage.dto.StocktakingReportPageDto">
SELECT T9.id, --ID
T9.bus_no, --编码
T9.name, --名称
T9.total_volume, --规格
T9.manufacturer_text, --厂家
T9.lot_number, --产品批号
T9.location_name, --目的仓库
T9.unit_code, --小单位
T9.item_quantity, --数量
T9.approval_time, --审批时间
SELECT T9.id, --ID
T9.bus_no, --编码
T9.name, --名称
T9.total_volume, --规格
T9.manufacturer_text, --厂家
T9.lot_number, --产品批号
T9.location_name, --目的仓库
T9.unit_code, --小单位
T9.item_quantity, --数量
T9.approval_time, --审批时间
T9.supply_bus_no,--单据号
T9.purpose_location_id,-- 目的仓库id
T9.price,--采购单价
T9.location_store_name,--仓库货位
T9.total_price,--报损金额
T9.name AS supplier,--供应商
T9.approver_id, --审核人
T9.occurrence_time, --制单日期
T9.tenant_id -- 租户ID
FROM (SELECT T1.id, --ID
T2.bus_no, --编码
T2.name, --名称
T3.total_volume, --规格
T2.manufacturer_text, --厂家
T1.lot_number, --产品批号
T5.name AS location_name, --目的仓库
T1.unit_code, --小单位
T1.item_quantity, --盈亏数量
T9.profit_loss_price,
T9.name AS supplier,--供应商
T9.approver_id, --审核人
T9.occurrence_time, --制单日期
T9.tenant_id -- 租户ID
FROM (SELECT T1.id, --ID
T2.bus_no, --编码
T2.name, --名称
T3.total_volume, --规格
T2.manufacturer_text, --厂家
T1.lot_number, --产品批号
T5.name AS location_name, --目的仓库
T1.unit_code, --小单位
T1.item_quantity, --盈亏数量
T1.approval_time, --审批时间
T1.bus_no AS supply_bus_no,--单据号
T1.bus_no AS supply_bus_no,--单据号
T1.purpose_location_id,-- 目的仓库id
T1.price,--采购单价
T4.name AS location_store_name,--仓库货位
T1.total_price,--报损金额
T9.name AS supplier,--供应商
T1.approver_id, --审核人
T1.occurrence_time, --制单日期
T1.tenant_id -- 租户ID
T4.name AS location_store_name,--仓库货位
T1.profit_loss_price,
T9.name AS supplier,--供应商
T1.approver_id, --审核人
T1.occurrence_time, --制单日期
T1.tenant_id -- 租户ID
FROM wor_supply_request AS T1
INNER JOIN wor_supply_delivery AS T8
ON T8.request_id = T1.id
AND T8.status_enum = #{deliveryStatus}
AND T8.delete_flag = '0'
LEFT JOIN med_medication_definition AS T2
ON T1.item_id = T2.id
AND T2.delete_flag = '0'
ON T1.item_id = T2.id
AND T2.delete_flag = '0'
LEFT JOIN med_medication AS T3
ON T2.id = T3.medication_def_id
AND T3.delete_flag = '0'
@@ -67,33 +67,33 @@
AND T1.item_table = #{medicationTableName}
AND T1.delete_flag = '0'
UNION
SELECT T1.id, --ID
T6.bus_no, --编码
T6.name, --名称
T6.size AS total_volume, --规格(器材规格)
T6.manufacturer_text, --厂家
T1.lot_number, --产品批号
T5.name AS location_name, --目的仓库
T1.unit_code, --小单位
T1.item_quantity, --盈亏数量
T1.approval_time, --审批时间
T1.bus_no AS supply_bus_no,--单据号
SELECT T1.id, --ID
T6.bus_no, --编码
T6.name, --名称
T6.size AS total_volume, --规格(器材规格)
T6.manufacturer_text, --厂家
T1.lot_number, --产品批号
T5.name AS location_name, --目的仓库
T1.unit_code, --小单位
T1.item_quantity, --盈亏数量
T1.approval_time, --审批时间
T1.bus_no AS supply_bus_no,--单据号
T1.purpose_location_id,-- 目的仓库id
T1.price,--采购单价
T4.name AS location_store_name,--仓库货位
T1.total_price,--报损金额
T9.name AS supplier,--供应商
T1.approver_id, --审核人
T1.occurrence_time, --制单日期
T1.tenant_id -- 租户ID
T4.name AS location_store_name,--仓库货位
T1.profit_loss_price,
T9.name AS supplier,--供应商
T1.approver_id, --审核人
T1.occurrence_time, --制单日期
T1.tenant_id -- 租户ID
FROM wor_supply_request AS T1
INNER JOIN wor_supply_delivery AS T8
ON T8.request_id = T1.id
AND T8.status_enum = #{deliveryStatus}
AND T8.delete_flag = '0'
LEFT JOIN adm_device_definition AS T6
ON T1.item_id = T6.id
AND T6.delete_flag = '0'
ON T1.item_id = T6.id
AND T6.delete_flag = '0'
LEFT JOIN adm_location T5
ON T1.purpose_location_id = T5.id
AND T5.delete_flag = '0'
@@ -113,44 +113,44 @@
<select id="selectAutoStocktakingReportPage"
resultType="com.openhis.web.reportmanage.dto.StocktakingReportPageDto">
SELECT T9.id, --ID
T9.bus_no, --编码
T9.name, --名称
T9.total_volume, --规格
T9.manufacturer_text, --厂家
T9.lot_number, --产品批号
T9.location_name, --目的仓库
T9.unit_code, --小单位
T9.item_quantity, --数量
T9.approval_time, --审批时间
SELECT T9.id, --ID
T9.bus_no, --编码
T9.name, --名称
T9.total_volume, --规格
T9.manufacturer_text, --厂家
T9.lot_number, --产品批号
T9.location_name, --目的仓库
T9.unit_code, --小单位
T9.item_quantity, --数量
T9.approval_time, --审批时间
T9.supply_bus_no,--单据号
T9.purpose_location_id,-- 目的仓库id
T9.price,--采购单价
T9.location_store_name,--仓库货位
T9.total_price,--报损金额
T9.name AS supplier,--供应商
T9.approver_id, --审核人
T9.occurrence_time, --制单日期
T9.tenant_id -- 租户ID
FROM (SELECT T1.id, --ID
T2.bus_no, --编码
T2.name, --名称
T3.total_volume, --规格
T2.manufacturer_text, --厂家
T1.lot_number, --产品批号
T5.name AS location_name, --目的仓库
T1.unit_code, --小单位
T1.item_quantity, --盈亏数量
T9.name AS supplier,--供应商
T9.approver_id, --审核人
T9.occurrence_time, --制单日期
T9.tenant_id -- 租户ID
FROM (SELECT T1.id, --ID
T2.bus_no, --编码
T2.name, --名称
T3.total_volume, --规格
T2.manufacturer_text, --厂家
T1.lot_number, --产品批号
T5.name AS location_name, --目的仓库
T1.unit_code, --小单位
T1.item_quantity, --盈亏数量
T1.approval_time, --审批时间
T1.bus_no AS supply_bus_no,--单据号
T1.bus_no AS supply_bus_no,--单据号
T1.purpose_location_id,-- 目的仓库id
T1.price,--采购单价
T4.name AS location_store_name,--仓库货位
T4.name AS location_store_name,--仓库货位
T1.total_price,--报损金额
T9.name AS supplier,--供应商
T1.approver_id, --审核人
T1.occurrence_time, --制单日期
T1.tenant_id -- 租户ID
T9.name AS supplier,--供应商
T1.approver_id, --审核人
T1.occurrence_time, --制单日期
T1.tenant_id -- 租户ID
FROM wor_aut_supply_request AS T1
LEFT JOIN med_medication_definition AS T2
ON T1.item_id = T2.id
@@ -173,25 +173,25 @@
AND T1.delete_flag = '0'
AND TO_CHAR(T1.occurrence_time, 'yyyy-MM-dd HH24:mi:ss') = #{time}
UNION
SELECT T1.id, --ID
T6.bus_no, --编码
T6.name, --名称
T6.size AS total_volume, --规格(器材规格)
T6.manufacturer_text, --厂家
T1.lot_number, --产品批号
T5.name AS location_name, --目的仓库
T1.unit_code, --小单位
T1.item_quantity, --盈亏数量
T1.approval_time, --审批时间
T1.bus_no AS supply_bus_no,--单据号
SELECT T1.id, --ID
T6.bus_no, --编码
T6.name, --名称
T6.size AS total_volume, --规格(器材规格)
T6.manufacturer_text, --厂家
T1.lot_number, --产品批号
T5.name AS location_name, --目的仓库
T1.unit_code, --小单位
T1.item_quantity, --盈亏数量
T1.approval_time, --审批时间
T1.bus_no AS supply_bus_no,--单据号
T1.purpose_location_id,-- 目的仓库id
T1.price,--采购单价
T4.name AS location_store_name,--仓库货位
T4.name AS location_store_name,--仓库货位
T1.total_price,--报损金额
T9.name AS supplier,--供应商
T1.approver_id, --审核人
T1.occurrence_time, --制单日期
T1.tenant_id -- 租户ID
T9.name AS supplier,--供应商
T1.approver_id, --审核人
T1.occurrence_time, --制单日期
T1.tenant_id -- 租户ID
FROM wor_aut_supply_request AS T1
LEFT JOIN adm_device_definition AS T6
ON T1.item_id = T6.id
@@ -212,4 +212,113 @@
AND TO_CHAR(T1.occurrence_time, 'yyyy-MM-dd HH24:mi:ss') = #{time}) AS T9
ORDER BY T9.supply_bus_no DESC
</select>
<select id="excelStocktakingReportPage"
resultType="com.openhis.web.reportmanage.dto.StocktakingReportPageDto">
SELECT T9.id, --ID
T9.bus_no, --编码
T9.name, --名称
T9.total_volume, --规格
T9.manufacturer_text, --厂家
T9.lot_number, --产品批号
T9.location_name, --目的仓库
T9.unit_code, --小单位
T9.item_quantity, --数量
T9.approval_time, --审批时间
T9.supply_bus_no,--单据号
T9.purpose_location_id,-- 目的仓库id
T9.price,--采购单价
T9.location_store_name,--仓库货位
T9.profit_loss_price,
T9.name AS supplier,--供应商
T9.approver_id, --审核人
T9.occurrence_time, --制单日期
T9.tenant_id -- 租户ID
FROM (SELECT T1.id, --ID
T2.bus_no, --编码
T2.name, --名称
T3.total_volume, --规格
T2.manufacturer_text, --厂家
T1.lot_number, --产品批号
T5.name AS location_name, --目的仓库
T1.unit_code, --小单位
T1.item_quantity, --盈亏数量
T1.approval_time, --审批时间
T1.bus_no AS supply_bus_no,--单据号
T1.purpose_location_id,-- 目的仓库id
T1.price,--采购单价
T4.name AS location_store_name,--仓库货位
T1.profit_loss_price,
T9.name AS supplier,--供应商
T1.approver_id, --审核人
T1.occurrence_time, --制单日期
T1.tenant_id -- 租户ID
FROM wor_supply_request AS T1
INNER JOIN wor_supply_delivery AS T8
ON T8.request_id = T1.id
AND T8.status_enum = #{deliveryStatus}
AND T8.delete_flag = '0'
LEFT JOIN med_medication_definition AS T2
ON T1.item_id = T2.id
AND T2.delete_flag = '0'
LEFT JOIN med_medication AS T3
ON T2.id = T3.medication_def_id
AND T3.delete_flag = '0'
LEFT JOIN adm_location T5
ON T1.purpose_location_id = T5.id
AND T5.delete_flag = '0'
LEFT JOIN adm_location AS T4
ON T4.id = T1.purpose_location_store_id
AND T4.delete_flag = '0'
LEFT JOIN adm_supplier AS T9
ON T9.id = T1.supplier_id
AND T9.delete_flag = '0'
WHERE T1.type_enum in (#{stocktakingReport}, #{stocktakingBatchReport})
AND T1.status_enum = #{supplyStatus}
AND T1.item_table = #{medicationTableName}
AND T1.delete_flag = '0'
UNION
SELECT T1.id, --ID
T6.bus_no, --编码
T6.name, --名称
T6.size AS total_volume, --规格(器材规格)
T6.manufacturer_text, --厂家
T1.lot_number, --产品批号
T5.name AS location_name, --目的仓库
T1.unit_code, --小单位
T1.item_quantity, --盈亏数量
T1.approval_time, --审批时间
T1.bus_no AS supply_bus_no,--单据号
T1.purpose_location_id,-- 目的仓库id
T1.price,--采购单价
T4.name AS location_store_name,--仓库货位
T1.profit_loss_price,
T9.name AS supplier,--供应商
T1.approver_id, --审核人
T1.occurrence_time, --制单日期
T1.tenant_id -- 租户ID
FROM wor_supply_request AS T1
INNER JOIN wor_supply_delivery AS T8
ON T8.request_id = T1.id
AND T8.status_enum = #{deliveryStatus}
AND T8.delete_flag = '0'
LEFT JOIN adm_device_definition AS T6
ON T1.item_id = T6.id
AND T6.delete_flag = '0'
LEFT JOIN adm_location T5
ON T1.purpose_location_id = T5.id
AND T5.delete_flag = '0'
LEFT JOIN adm_location AS T4
ON T4.id = T1.purpose_location_store_id
AND T4.delete_flag = '0'
LEFT JOIN adm_supplier AS T9
ON T9.id = T1.supplier_id
AND T9.delete_flag = '0'
WHERE T1.type_enum in (#{stocktakingReport}, #{stocktakingBatchReport})
AND T1.status_enum = #{supplyStatus}
AND T1.item_table = #{deviceTableName}
AND T1.delete_flag = '0') AS T9
${ew.customSqlSegment}
ORDER BY T9.supply_bus_no DESC
</select>
</mapper>

View File

@@ -125,4 +125,128 @@
${ew.customSqlSegment}
ORDER BY T6.supply_bus_no DESC
</select>
<select id="excelTransferReportPage"
resultType="com.openhis.web.reportmanage.dto.TransferReportPageDto">
SELECT T6.id,
T6.supply_bus_no, -- 商品调拨单据号
T6.name, -- 药品名称
T6.status_enum, -- 状态
T6.lot_number, -- 产品批号
T6.source_location_id, -- 源仓库ID
T6.source_location_name, -- 源仓库
T6.source_location_store_id, -- 源仓位ID
T6.source_location_store_name, -- 源仓位
T6.purpose_location_id, -- 目的仓库ID
T6.purpose_location_name, -- 目的仓库
T6.purpose_location_store_id, -- 目的货位ID
T6.purpose_location_store_name, -- 目的货位
T6.item_quantity, -- 调拨数量
T6.unit_code, -- 物品计量单位
T6.price, -- 采购单价
T6.total_price, -- 总价
T6.applicant_id, -- 申请人(制单人)
T6.approver_id, -- 审核人
T6.occurrence_time, -- 制单日期
T6.apply_time, -- 申请日期
T6.approval_time, -- 审批时间(调拨日期)
T6.tenant_id -- 租户ID
FROM (SELECT T1.id,
T1.bus_no AS supply_bus_no, -- 商品调拨单据号
T3.name, -- 药品名称
T1.status_enum, -- 状态
T1.lot_number, -- 产品批号
T1.source_location_id, -- 源仓库ID
T4.name AS source_location_name, -- 源仓库
T1.source_location_store_id, -- 源仓位ID
T5.name AS source_location_store_name, -- 源仓位
T1.purpose_location_id, -- 目的仓库ID
T9.name AS purpose_location_name, -- 目的仓库
T1.purpose_location_store_id, -- 目的货位ID
T10.name AS purpose_location_store_name, -- 目的货位
T1.item_quantity, -- 调拨数量
T1.unit_code, -- 物品计量单位
T1.price, -- 采购单价
T1.total_price, -- 总价
T1.applicant_id, -- 申请人(制单人)
T1.approver_id, -- 审核人
T1.occurrence_time, -- 制单日期
T1.apply_time, -- 申请日期
T1.approval_time, -- 审批时间(调拨日期)
T1.tenant_id -- 租户ID
FROM wor_supply_request T1
INNER JOIN wor_supply_delivery AS T2
ON T2.request_id = T1.id
AND T2.status_enum = #{deliveryStatus}
AND T2.delete_flag = '0'
LEFT JOIN med_medication_definition T3
ON T1.item_id = T3.id
AND T3.delete_flag = '0'
LEFT JOIN adm_location T4
ON T1.source_location_id = T4.id
AND T4.delete_flag = '0'
LEFT JOIN adm_location T5
ON T1.source_location_store_id = T5.id
AND T5.delete_flag = '0'
LEFT JOIN adm_location T9
ON T1.purpose_location_id = T9.id
AND T9.delete_flag = '0'
LEFT JOIN adm_location T10
ON T1.purpose_location_store_id = T10.id
AND T10.delete_flag = '0'
WHERE T1.type_enum in (#{transferReport}, #{transferBatchReport})
AND T1.status_enum = #{supplyStatus}
AND T1.item_table = #{medicationTableName}
AND T1.delete_flag = '0'
UNION
SELECT T1.id,
T1.bus_no AS supply_bus_no, -- 商品调拨单据号
T7.name, -- 器材名称
T1.status_enum, -- 状态
T1.lot_number, -- 产品批号
T1.source_location_id, -- 源仓库ID
T4.name AS source_location_name, -- 源仓库
T1.source_location_store_id, -- 源仓位ID
T5.name AS source_location_store_name, -- 源仓位
T1.purpose_location_id, -- 目的仓库ID
T9.name AS purpose_location_name, -- 目的仓库
T1.purpose_location_store_id, -- 目的货位ID
T10.name AS purpose_location_store_name, -- 目的货位
T1.item_quantity, -- 调拨数量
T1.unit_code, -- 物品计量单位
T1.price, -- 采购单价
T1.total_price, -- 总价
T1.applicant_id, -- 申请人(制单人)
T1.approver_id, -- 审核人
T1.occurrence_time, -- 制单日期
T1.apply_time, -- 申请日期
T1.approval_time, -- 审批时间(调拨日期)
T1.tenant_id -- 租户ID
FROM wor_supply_request T1
INNER JOIN wor_supply_delivery AS T2
ON T2.request_id = T1.id
AND T2.status_enum = #{deliveryStatus}
AND T2.delete_flag = '0'
LEFT JOIN adm_device_definition T7
ON T1.item_id = T7.id
AND T7.delete_flag = '0'
LEFT JOIN adm_location T4
ON T1.source_location_id = T4.id
AND T4.delete_flag = '0'
LEFT JOIN adm_location T5
ON T1.source_location_store_id = T5.id
AND T5.delete_flag = '0'
LEFT JOIN adm_location T9
ON T1.purpose_location_id = T9.id
AND T9.delete_flag = '0'
LEFT JOIN adm_location T10
ON T1.purpose_location_store_id = T10.id
AND T10.delete_flag = '0'
WHERE T1.type_enum in (#{transferReport}, #{transferBatchReport})
AND T1.status_enum = #{supplyStatus}
AND T1.item_table = #{deviceTableName}
AND T1.delete_flag = '0') AS T6
${ew.customSqlSegment}
ORDER BY T6.supply_bus_no DESC
</select>
</mapper>