陈昶聿
4 天以前 a1d7878bc5e76eccce087f758fc3b3e1f1cf5af3
ruoyi-system/src/main/resources/mapper/system/SysDeptMapper.xml
@@ -26,11 +26,13 @@
        <result property="deptType" column="dept_type"/>
        <result property="guid" column="guid"/>
        <result property="orgid" column="orgid"/>
        <result property="campusid" column="campusid"/>
    </resultMap>
    <sql id="selectDeptVo">
        select d.dept_id,
               d.dept_code,
               d.campusid,
               d.parent_id,
               d.ancestors,
               d.dept_name,
@@ -71,11 +73,25 @@
        <if test="deptType != null and deptType != ''">
            AND dept_type = #{deptType}
        </if>
        <if test="campusid != null and campusid != ''">
            AND campusid = #{campusid}
        </if>
        <if test="hisDeptId != null and hisDeptId != ''">
            AND his_dept_id = #{hisDeptId}
        </if>
        <if test="hisParentId != null and hisParentId != ''">
            AND his_parent_id = #{hisParentId}
        </if>
        <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}
@@ -105,17 +121,21 @@
               d.leader,
               d.phone,
               d.email,
               d.campusid,
               d.status,
               d.his_dept_id,
               d.his_parent_id,
               (select dept_name from sys_dept where dept_id = d.parent_id) parent_name
        from sys_dept d
        where d.dept_id = #{deptId}
        limit 1
    </select>
    <select id="selectDeptByCode" parameterType="string" resultMap="SysDeptResult">
        select d.dept_id,
               d.parent_id,
               d.campusid,
               d.orgid,
               d.dept_code,
               d.dept_type,
               d.ancestors,
@@ -129,7 +149,14 @@
               d.status
        from sys_dept d
        where del_flag = 0
          and d.dept_code = #{deptCode}
        and d.dept_code = #{deptCode}
        <if test="orgid != null and orgid != ''">
            and d.orgid = #{orgid}
        </if>
        <if test="deptType != null and deptType != ''">
            and d.dept_type = #{deptType}
        </if>
        limit 1
    </select>
    <select id="checkDeptExistUser" parameterType="Long" resultType="int">
@@ -151,6 +178,8 @@
        from sys_dept
        where find_in_set(#{deptId}, ancestors)
    </select>
    <select id="selectNormalChildrenDeptById" parameterType="Long" resultType="int">
        select count(*)
@@ -182,6 +211,7 @@
        <if test="hisDeptId != null and hisDeptId != ''">his_dept_id,</if>
        <if test="hisParentId != null and hisParentId != ''">his_parent_id,</if>
        <if test="orgid != null and orgid != ''">orgid,</if>
        <if test="campusid != null and campusid != ''">campusid,</if>
        create_time
        )values(
        <if test="deptId != null and deptId != 0">#{deptId},</if>
@@ -199,6 +229,7 @@
        <if test="hisDeptId != null and hisDeptId != ''">#{hisDeptId},</if>
        <if test="hisParentId != null and hisParentId != ''">#{hisParentId},</if>
        <if test="orgid != null and orgid != ''">#{orgid},</if>
        <if test="campusid != null and campusid != ''">#{campusid},</if>
        sysdate()
        )
    </insert>
@@ -220,6 +251,7 @@
            <if test="hisParentId != null and hisParentId != ''">his_parent_id = #{hisParentId},</if>
            <if test="hisDeptId != null and hisDeptId != ''">his_dept_id = #{hisDeptId},</if>
            <if test="orgid != null and orgid != ''">orgid = #{orgid},</if>
            <if test="campusid != null and campusid != ''">campusid = #{campusid},</if>
            update_time = sysdate()
        </set>
        where dept_id = #{deptId}
@@ -247,8 +279,40 @@
    <delete id="deleteDeptById" parameterType="Long">
        update sys_dept
        set del_flag = '2'
        set del_flag = '1'
        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>