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

94 lines
2.8 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.document.mapper.DocDefinitionAppMapper">
<select id="getDefinationList" parameterType="java.util.Map"
resultType="com.openhis.web.document.dto.DocDefinitionDto">
SELECT
dd.id,
dd.name,
dd.version,
dd.primary_menu_enum,
dd.sub_menu,
dd.bus_no,
dd.vue_router,
dd.hospital_id,
dd.is_valid,
dd.display_order,
dd.use_range_enum,
dd.doctor_permission_enum,
dd.nursing_permission_enum,
dd.medical_permission_enum,
dd.pharmacist_permission_enum,
ARRAY_AGG(ddo.organization_id) FILTER (WHERE ddo.organization_id IS NOT NULL) AS organization_ids
FROM doc_definition dd
LEFT JOIN doc_definition_organization ddo
ON dd.id = ddo.definition_id
AND ddo.delete_flag = '0'
WHERE dd.delete_flag = '0'
AND dd.is_valid = 0
<!-- 关键:医院 + 科室联合可见 -->
<if test="organizationId != null and organizationId != 0">
AND (
-- 本医院的文书
dd.hospital_id = #{hospitalId}
-- 或者:已分配给当前科室的文书(允许跨医院)
OR EXISTS (
SELECT 1
FROM doc_definition_organization z
WHERE z.definition_id = dd.id
AND z.organization_id = #{organizationId}
AND z.delete_flag = '0'
)
)
</if>
<if test="useRanges != null and !useRanges.isEmpty()">
AND dd.use_range_enum IN
<foreach collection="useRanges" item="useRange" open="(" separator="," close=")">
#{useRange}
</foreach>
</if>
<!-- 使用范围过滤 -->
<if test="organizationId != null and organizationId != 0">
AND (
-- 全院可用
dd.use_range_enum = 1
OR dd.use_range_enum IS NULL
-- 科室可用(必须真的分配给该科室)
OR (
dd.use_range_enum = 2
AND EXISTS (
SELECT 1
FROM doc_definition_organization y
WHERE y.definition_id = dd.id
AND y.organization_id = #{organizationId}
AND y.delete_flag = '0'
)
)
)
</if>
<if test="name != null and !name.isEmpty()">
AND dd.name LIKE CONCAT('%', #{name}, '%')
</if>
<if test="primaryMenuEnum != null">
AND dd.primary_menu_enum = #{primaryMenuEnum}
</if>
GROUP BY dd.id, dd.primary_menu_enum, dd.sub_menu
ORDER BY dd.display_order
</select>
</mapper>