liusheng
2 天以前 18f876d637cf1e9b0b264a4586e4a676a21f8166
ruoyi-system/src/main/resources/mapper/system/SysDeptMapper.xml
@@ -85,6 +85,14 @@
        <if test="orgid != null and orgid != ''">
            AND orgid = #{orgid}
        </if>
        <if test="deptCodes != null and deptCodes.size() > 0">
            AND dept_code IN
            <foreach collection="deptCodes" item="deptCodeItem" open="("
                     separator=","
                     close=")">
                #{deptCodeItem}
            </foreach>
        </if>
        <!-- 数据范围过滤 -->
        ${params.dataScope}
        order by d.dept_type asc, d.parent_id, d.order_num
@@ -127,6 +135,7 @@
        select d.dept_id,
               d.parent_id,
               d.campusid,
               d.orgid,
               d.dept_code,
               d.dept_type,
               d.ancestors,
@@ -169,6 +178,8 @@
        from sys_dept
        where find_in_set(#{deptId}, ancestors)
    </select>
    <select id="selectNormalChildrenDeptById" parameterType="Long" resultType="int">
        select count(*)
@@ -272,4 +283,36 @@
        where dept_id = #{deptId}
    </delete>
    <!--
        查询科室/病区:
          · userId 有值(普通用户 / 用户编辑页:查某个用户名下的部门)→ 关联 sys_user_dept;
          · userId 为空(管理员:看本机构全部科室/病区)→ 只查 sys_dept,不关联关系表。
        为什么要分支:HIS 采集写 sys_user_dept 时明确排除了 admin(CollectHISMapper 的
        yhyksxx/yhybfxx 都有 ud.user_id != 'admin'),管理员在关系表里没有数据,走 inner join
        会得到空列表,表现就是「登录成功但创建任务时选不到科室病区」。
        另外不做院区过滤(管理员跨院区),院区隔离只对普通用户生效。
    -->
    <select id="selectSysDeptListBySysUserDept" parameterType="com.ruoyi.common.core.domain.entity.SysUserDept"
            resultMap="SysDeptResult">
        <choose>
            <when test="userId != null">
                <include refid="selectDeptVo"/>
                inner join sys_user_dept ud
                on d.dept_code = ud.dept_code
                where 1=1
                and d.del_flag = 0
                and ud.del_flag = 0
                <if test="orgid != null">and d.orgid = #{orgid} and ud.orgid = #{orgid}</if>
                <if test="campusid != null">and d.campusid = #{campusid}</if>
                <if test="deptType != null and deptType != ''">and d.dept_type = #{deptType}</if>
                and ud.user_id = #{userId}
            </when>
            <otherwise>
                <include refid="selectDeptVo"/>
                where d.del_flag = 0
                <if test="orgid != null">and d.orgid = #{orgid}</if>
                <if test="deptType != null and deptType != ''">and d.dept_type = #{deptType}</if>
            </otherwise>
        </choose>
    </select>
</mapper>