Files
his/openhis-server-new/openhis-application/src/main/resources/mapper/Inventorymanage/RequisitionIssueMapper.xml
zhangfei 9c3e603b94 Fix Bug #443: 手术计费:点击签发耗材时异常报错
当手术计费弹窗中点击"签发"耗材时,因耗材的locationId(发放库房)为空导致后端异常。
在DoctorStationAdviceAppServiceImpl.handDevice方法中,当locationId为null时,使用登录用户的科室ID作为默认值,
与NurseBillingAppService中的处理方式保持一致。
2026-05-08 09:14:18 +08:00

351 lines
16 KiB
XML
Executable File

<?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.inventorymanage.mapper.RequisitionIssueMapper">
<select id="selectRequisitionDepartment" resultType="com.openhis.web.inventorymanage.dto.IssueDepartmentDto">
SELECT id AS location_id,--科室id
name,--名称
type_enum--科室
FROM adm_organization
WHERE type_enum = #{department}--科室类型
AND delete_flag = '0'
</select>
<select id="selectRequisitionIssuePage"
resultType="com.openhis.web.inventorymanage.dto.IssuePageDto">
SELECT T2.supply_bus_no,--单据号
T2.status_enum,--状态
T2.approver_id,--审批人
T2.approval_time,--审批时间
T2.applicant_id,--申请人
T2.create_time, -- 制单时间
T2.practitioner_id,--经手人
T2.tenant_id,--租户ID
T2.purpose_location_id,--领用部门ID
T2.location_name, --领用部门名
T2.total_amount--总金额
FROM (SELECT T1.bus_no AS supply_bus_no,
T1.status_enum,
T1.approver_id,
T1.approval_time,
T1.applicant_id,
MIN(T1.create_time) AS create_time,
T1.practitioner_id,
T1.tenant_id,
T1.purpose_location_id,--领用部门ID
T4.name AS location_name,
SUM(T1.total_price) AS total_amount
FROM wor_supply_request AS T1
LEFT JOIN adm_location T3
ON T1.source_location_id = T3.id
LEFT JOIN adm_organization T4
ON T1.purpose_location_id = T4.id
WHERE T1.type_enum = #{issueInventory}
AND T1.delete_flag = '0'
GROUP BY T1.bus_no,
T1.status_enum,
T1.approver_id,
T1.approval_time,
T1.applicant_id,
T1.practitioner_id,
T1.tenant_id,
T1.purpose_location_id,
T4.name
ORDER BY T1.bus_no desc
) AS T2
${ew.customSqlSegment}
</select>
<select id="requisitionIssueDetail" resultType="com.openhis.web.inventorymanage.dto.IssueDetailDto">
SELECT T1.id,
T1.bus_no,--单据号
T1.item_id,
T1.item_quantity,--数量
T1.unit_code AS measurement_unit_code, -- 物品计量单位
T2.unit_code, -- 包装单位
T2.min_unit_code, -- 最小单位
T1.detail_json,--请求细节
T1.purpose_type_enum,--目的类型
#{medicine} AS item_type,--药品类型
T1.apply_time,--申请时间
T1.lot_number,--产品批号
T1.trace_no,--追溯码
T1.invoice_no,--发票号
T1.start_time,--开始时间
T1.end_time,--结束时间
T1.price,--单价
T1.total_price,--总价
T2."name" AS item_name,--药品类型
T2.part_percent,--拆零比
T2."yb_no",--医保编码
T3.total_volume,--规格
T4."name" AS supplier_name,--供应商名称
T2.manufacturer_text, -- 生产厂商
T10.quantity AS total_quantity, -- 当前库存总数
T1.source_location_id, -- 源仓库ID
T1.source_location_store_id, -- 源仓位ID
T1.purpose_location_id, -- 目的仓库ID
T1.purpose_location_store_id, -- 目的货位ID
T6."name" AS source_location_name, -- 源仓库
T7."name" AS source_location_store_name, -- 源仓位
T8."name" AS purpose_location_name, -- 目的仓库
T9."name" AS purpose_location_store_name, -- 目的货位
T1.practitioner_id, -- 经办人
T1.remake, -- 备注
T1.occurrence_time,
T11."name" AS practitioner_name -- 经办人名称
FROM wor_supply_request T1
LEFT JOIN med_medication_definition T2
ON T1.item_id = T2.id
LEFT JOIN med_medication T3
ON T3.medication_def_id = T2.id
LEFT JOIN adm_supplier T4
ON T4.id = T1.supplier_id
LEFT JOIN adm_location T6
ON T1.source_location_id = T6.id
LEFT JOIN adm_location T7
ON T1.source_location_store_id = T7.id
LEFT JOIN adm_organization T8
ON T1.purpose_location_id = T8.id
LEFT JOIN adm_organization T9
ON T1.purpose_location_store_id = T9.id
LEFT JOIN wor_inventory_item T10
ON T1.item_id = T10.item_id
AND T1.source_location_id = T10.location_id
AND T10.lot_number = T1.lot_number
AND T10.delete_flag = '0'
LEFT JOIN adm_practitioner T11
ON T1.practitioner_id = T11.id
-- LEFT JOIN adm_charge_item_definition AS T12
-- ON T12.instance_id = T10.item_id
-- AND T12.delete_flag = '0'
-- LEFT JOIN adm_charge_item_def_detail AS T13
-- ON T13.definition_id = T12.id
-- AND T13.delete_flag = '0'
-- AND T13.condition_value = T10.lot_number
-- AND T13.condition_code = '1'--1:批号进价
WHERE T1.bus_no = #{busNo}
AND T1.item_table = #{medicationTableName}
AND T1.delete_flag = '0'
UNION
SELECT T1.id,
T1.bus_no,
T1.item_id,
T1.item_quantity,
T1.unit_code AS measurement_unit_code, -- 物品计量单位
T2.unit_code, -- 包装单位
T2.min_unit_code, -- 最小单位
T1.detail_json,
T1.purpose_type_enum,
#{device} AS item_type, --耗材类型
T1.apply_time,
T1.lot_number,
T1.trace_no,
T1.invoice_no,
T1.start_time,
T1.end_time,
T1.price,--单价
T1.total_price,
T2."name" AS item_name,
T2.part_percent,
T2."size" AS total_volume,
T2."yb_no",
T4."name" AS supplier_name,
T2.manufacturer_text, -- 生产厂商
T10.quantity AS total_quantity, -- 当前库存总数
T1.source_location_id, -- 源仓库ID
T1.source_location_store_id, -- 源仓位ID
T1.purpose_location_id, -- 目的仓库ID
T1.purpose_location_store_id, -- 目的货位ID
T6."name" AS source_location_name, -- 源仓库
T7."name" AS source_location_store_name, -- 源仓位
T8."name" AS purpose_location_name, -- 目的仓库
T9."name" AS purpose_location_store_name, -- 目的货位
T1.practitioner_id, -- 经办人
T1.remake, -- 备注
T1.occurrence_time,
T11."name" AS practitioner_name -- 经办人名称
FROM wor_supply_request T1
LEFT JOIN adm_device_definition T2
ON T1.item_id = T2.id
LEFT JOIN adm_supplier T4
ON T4.id = T1.supplier_id
LEFT JOIN adm_location T6
ON T1.source_location_id = T6.id
LEFT JOIN adm_location T7
ON T1.source_location_store_id = T7.id
LEFT JOIN adm_organization T8
ON T1.purpose_location_id = T8.id
LEFT JOIN adm_organization T9
ON T1.purpose_location_store_id = T9.id
LEFT JOIN wor_inventory_item T10
ON T1.item_id = T10.item_id
AND T1.source_location_id = T10.location_id
AND T10.lot_number = T1.lot_number
AND T10.delete_flag = '0'
LEFT JOIN adm_practitioner T11
ON T1.practitioner_id = T11.id
-- LEFT JOIN adm_charge_item_definition AS T12
-- ON T12.instance_id = T10.item_id
-- AND T12.delete_flag = '0'
-- LEFT JOIN adm_charge_item_def_detail AS T13
-- ON T13.definition_id = T12.id
-- AND T13.delete_flag = '0'
-- AND T13.condition_value = T10.lot_number
-- AND T13.condition_code = '1'--1:批号进价
WHERE T1.bus_no = #{busNo}
AND T1.item_table = #{deviceTableName}
AND T1.delete_flag = '0'
</select>
<select id="getMonthlySettlementDetail" resultType="com.openhis.web.inventorymanage.dto.IssueDetailDto">
SELECT T1.id,
T1.bus_no,--单据号
T1.item_id,
T1.item_quantity,--数量
T1.unit_code AS measurement_unit_code, -- 物品计量单位
T2.unit_code, -- 包装单位
T2.min_unit_code, -- 最小单位
T1.detail_json,--请求细节
T1.purpose_type_enum,--目的类型
#{medicine} AS item_type,--药品类型
T1.apply_time,--申请时间
T1.lot_number,--产品批号
T1.trace_no,--追溯码
T1.invoice_no,--发票号
T1.start_time,--开始时间
T1.end_time,--结束时间
T13.amount AS price,--单价
T1.total_price,--总价
T2."name" AS item_name,--药品类型
T2.part_percent,--拆零比
T2."yb_no",--医保编码
T3.total_volume,--规格
T4."name" AS supplier_name,--供应商名称
T2.manufacturer_text , -- 生产厂商
T10.quantity AS total_quantity, -- 当前库存总数
T1.source_location_id, -- 源仓库ID
T1.source_location_store_id, -- 源仓位ID
T1.purpose_location_id, -- 目的仓库ID
T1.purpose_location_store_id, -- 目的货位ID
T6."name" AS source_location_name, -- 源仓库
T7."name" AS source_location_store_name, -- 源仓位
T8."name" AS purpose_location_name, -- 目的仓库
T9."name" AS purpose_location_store_name, -- 目的货位
T1.practitioner_id, -- 经办人
T1.remake, -- 备注
T1.occurrence_time,
T11."name" AS practitioner_name -- 经办人名称
FROM wor_supply_request T1
LEFT JOIN med_medication_definition T2
ON T1.item_id = T2.id
LEFT JOIN med_medication T3
ON T3.medication_def_id = T2.id
LEFT JOIN adm_supplier T4
ON T4.id = T1.supplier_id
LEFT JOIN adm_location T6
ON T1.source_location_id = T6.id
LEFT JOIN adm_location T7
ON T1.source_location_store_id = T7.id
LEFT JOIN adm_organization T8
ON T1.purpose_location_id = T8.id
LEFT JOIN adm_organization T9
ON T1.purpose_location_store_id = T9.id
LEFT JOIN wor_inventory_item T10
ON T1.item_id = T10.item_id
AND T1.source_location_id = T10.location_id
AND T10.lot_number = T1.lot_number
AND T10.delete_flag = '0'
LEFT JOIN adm_practitioner T11
ON T1.practitioner_id = T11.id
LEFT JOIN adm_charge_item_definition AS T12
ON T12.instance_id = T10.item_id
AND T12.delete_flag = '0'
LEFT JOIN adm_charge_item_def_detail AS T13
ON T13.definition_id = T12.id
AND T13.delete_flag = '0'
AND T13.condition_value = T10.lot_number
AND T13.condition_code = '1'--1:批号进价
WHERE T1.source_location_id = #{locationId}
AND T1.status_enum = #{statusEnum}
AND T1.type_enum IN
<foreach collection="typeEnum" item="item" separator="," open="(" close=")">
#{item}
</foreach>
AND T1.occurrence_time BETWEEN TO_TIMESTAMP(#{startTime}, 'yyyy-MM-dd HH24:mi:ss') AND TO_TIMESTAMP(#{endTime}, 'yyyy-MM-dd HH24:mi:ss')
AND T1.item_table = #{medicationTableName}
AND T1.delete_flag = '0'
UNION
SELECT T1.id,
T1.bus_no,
T1.item_id,
T1.item_quantity,
T1.unit_code AS measurement_unit_code, -- 物品计量单位
T2.unit_code, -- 包装单位
T2.min_unit_code, -- 最小单位
T1.detail_json,
T1.purpose_type_enum,
#{device} AS item_type, --耗材类型
T1.apply_time,
T1.lot_number,
T1.trace_no,
T1.invoice_no,
T1.start_time,
T1.end_time,
T13.amount AS price,--单价
T1.total_price,
T2."name" AS item_name,
T2.part_percent,
T2."size" AS total_volume,
T2."yb_no",
T4."name" AS supplier_name,
T2.manufacturer_text , -- 生产厂商
T10.quantity AS total_quantity, -- 当前库存总数
T1.source_location_id, -- 源仓库ID
T1.source_location_store_id, -- 源仓位ID
T1.purpose_location_id, -- 目的仓库ID
T1.purpose_location_store_id, -- 目的货位ID
T6."name" AS source_location_name, -- 源仓库
T7."name" AS source_location_store_name, -- 源仓位
T8."name" AS purpose_location_name, -- 目的仓库
T9."name" AS purpose_location_store_name, -- 目的货位
T1.practitioner_id, -- 经办人
T1.remake, -- 备注
T1.occurrence_time,
T11."name" AS practitioner_name -- 经办人名称
FROM wor_supply_request T1
LEFT JOIN adm_device_definition T2
ON T1.item_id = T2.id
LEFT JOIN adm_supplier T4
ON T4.id = T1.supplier_id
LEFT JOIN adm_location T6
ON T1.source_location_id = T6.id
LEFT JOIN adm_location T7
ON T1.source_location_store_id = T7.id
LEFT JOIN adm_organization T8
ON T1.purpose_location_id = T8.id
LEFT JOIN adm_organization T9
ON T1.purpose_location_store_id = T9.id
LEFT JOIN wor_inventory_item T10
ON T1.item_id = T10.item_id
AND T1.source_location_id = T10.location_id
AND T10.lot_number = T1.lot_number
AND T10.delete_flag = '0'
LEFT JOIN adm_practitioner T11
ON T1.practitioner_id = T11.id
LEFT JOIN adm_charge_item_definition AS T12
ON T12.instance_id = T10.item_id
AND T12.delete_flag = '0'
LEFT JOIN adm_charge_item_def_detail AS T13
ON T13.definition_id = T12.id
AND T13.delete_flag = '0'
AND T13.condition_value = T10.lot_number
AND T13.condition_code = '1'--1:批号进价
WHERE T1.source_location_id = #{locationId}
AND T1.status_enum = #{statusEnum}
AND T1.type_enum IN
<foreach collection="typeEnum" item="item" separator="," open="(" close=")">
#{item}
</foreach>
AND T1.occurrence_time BETWEEN TO_TIMESTAMP(#{startTime}, 'yyyy-MM-dd HH24:mi:ss') AND TO_TIMESTAMP(#{endTime}, 'yyyy-MM-dd HH24:mi:ss')
AND T1.item_table = #{deviceTableName}
AND T1.delete_flag = '0'
</select>
</mapper>