wlzboy
2 天以前 8cb5d3440208a3be3e772e65f1bd0ec63031ba62
ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml
@@ -25,6 +25,12 @@
        <result property="updateBy"     column="update_by"    />
        <result property="updateTime"   column="update_time"  />
        <result property="remark"       column="remark"       />
        <result property="openId"       column="open_id"       />
        <result property="unionId"     column="union_id"     />
        <result property="wechatNickname" column="wechat_nickname" />
        <result property="qyWechatUserId" column="qy_wechat_user_id" />
        <result property="qyWechatUpdateTime" column="qy_wechat_update_time" />
        <result property="canViewAllConsult" column="can_view_all_consult" />
        <association property="dept"    javaType="SysDept"         resultMap="deptResult" />
        <collection  property="roles"   javaType="java.util.List"  resultMap="RoleResult" />
    </resultMap>
@@ -49,7 +55,7 @@
    </resultMap>
   
   <sql id="selectUserVo">
        select u.user_id, u.dept_id, u.user_name,u.oa_user_id, u.oa_order_class, u.nick_name, u.email, u.avatar, u.phonenumber, u.password, u.sex, u.status, u.del_flag, u.login_ip, u.login_date, u.oa_user_id, u.create_by, u.create_time, u.remark,
        select u.user_id, u.dept_id, u.user_name,u.oa_user_id, u.oa_order_class, u.nick_name, u.email, u.avatar, u.phonenumber, u.password, u.sex, u.status, u.del_flag, u.login_ip, u.login_date, u.oa_user_id, u.create_by, u.create_time, u.remark,u.open_id,u.union_id,u.wechat_nickname,u.qy_wechat_user_id,u.qy_wechat_update_time,u.can_view_all_consult,
        d.dept_id, d.parent_id, d.ancestors, d.dept_name, d.order_num, d.leader, d.status as dept_status,
        r.role_id, r.role_name, r.role_key, r.role_sort, r.data_scope, r.status as role_status
        from sys_user u
@@ -81,44 +87,11 @@
         AND date_format(u.create_time,'%Y%m%d') &lt;= date_format(#{params.endTime},'%Y%m%d')
      </if>
      <if test="deptId != null and deptId != 0">
         <![CDATA[
         AND u.dept_id IN (
            -- 查询用户所属分公司及其所有子部门
            SELECT t.dept_id FROM sys_dept t
            WHERE t.del_flag = '0' AND (
               -- 情况1:传入的部门就是分公司(parent_id=100)
               (t.dept_id = ]]>#{deptId}<![CDATA[ AND EXISTS (
                  SELECT 1 FROM sys_dept d WHERE d.dept_id = ]]>#{deptId}<![CDATA[ AND d.parent_id = 100
               ))
               OR
               -- 查询该分公司的所有子部门
               (find_in_set(
                  (SELECT d.dept_id FROM sys_dept d WHERE d.dept_id = ]]>#{deptId}<![CDATA[ AND d.parent_id = 100),
                  t.ancestors
               ) > 0)
               OR
               -- 情况2:传入的是子部门,找到其所属分公司
               (t.dept_id IN (
                  SELECT branch.dept_id FROM sys_dept branch
                  WHERE branch.parent_id = 100
                    AND find_in_set(branch.dept_id, (
                     SELECT sub.ancestors FROM sys_dept sub WHERE sub.dept_id = ]]>#{deptId}<![CDATA[
                    )) > 0
               ))
               OR
               -- 查询该分公司的所有子部门
               (find_in_set(
                  (SELECT branch.dept_id FROM sys_dept branch
                   WHERE branch.parent_id = 100
                     AND find_in_set(branch.dept_id, (
                      SELECT sub.ancestors FROM sys_dept sub WHERE sub.dept_id = ]]>#{deptId}<![CDATA[
                     )) > 0
                  ),
                  t.ancestors
               ) > 0)
            )
         )
         ]]>
         -- 查询指定部门及其所有子部门的用户
         AND (u.dept_id = #{deptId} OR u.dept_id IN (
            SELECT dept_id FROM sys_dept
            WHERE del_flag = '0' AND find_in_set(#{deptId}, ancestors) > 0
         ))
      </if>
      <!-- 数据范围过滤 -->
      ${params.dataScope}
@@ -199,6 +172,8 @@
          <if test="status != null and status != ''">status,</if>
          <if test="oaUserId != null">oa_user_id,</if>
          <if test="oaOrderClass != null and oaOrderClass != ''">oa_order_class,</if>
          <if test="qyWechatUserId != null and qyWechatUserId != ''">qy_wechat_user_id,</if>
          <if test="qyWechatUpdateTime != null">qy_wechat_update_time,</if>
          <if test="createBy != null and createBy != ''">create_by,</if>
          <if test="remark != null and remark != ''">remark,</if>
          create_time
@@ -215,6 +190,9 @@
          <if test="status != null and status != ''">#{status},</if>
          <if test="oaUserId != null">#{oaUserId},</if>
          <if test="oaOrderClass != null and oaOrderClass != ''">#{oaOrderClass},</if>
          <if test="canViewAllConsult != null and canViewAllConsult != ''">#{canViewAllConsult},</if>
          <if test="qyWechatUserId != null and qyWechatUserId != ''">#{qyWechatUserId},</if>
          <if test="qyWechatUpdateTime != null">#{qyWechatUpdateTime},</if>
          <if test="createBy != null and createBy != ''">#{createBy},</if>
          <if test="remark != null and remark != ''">#{remark},</if>
          sysdate()
@@ -234,9 +212,11 @@
          <if test="status != null and status != ''">status = #{status},</if>
          <if test="oaUserId != null">oa_user_id = #{oaUserId},</if>
          <if test="oaOrderClass != null">oa_order_class = #{oaOrderClass},</if>
          <if test="canViewAllConsult != null and canViewAllConsult != ''">can_view_all_consult = #{canViewAllConsult},</if>
          <if test="qyWechatUserId != null and qyWechatUserId != ''">qy_wechat_user_id = #{qyWechatUserId},</if>
          <if test="qyWechatUpdateTime != null">qy_wechat_update_time = #{qyWechatUpdateTime},</if>
          <if test="openId != null and openId != ''">open_id = #{openId},</if>
          <if test="unionId != null and unionId != ''">union_id = #{unionId},</if>
          <if test="wechatNickname != null and wechatNickname != ''">wechat_nickname = #{wechatNickname},</if>
          <if test="loginIp != null and loginIp != ''">login_ip = #{loginIp},</if>
          <if test="loginDate != null">login_date = #{loginDate},</if>
          <if test="updateBy != null and updateBy != ''">update_by = #{updateBy},</if>
@@ -283,4 +263,56 @@
      where u.open_id = #{openId} and u.del_flag = '0'
   </select>
   
</mapper>
   <!-- 通过企业微信用户ID查询用户 -->
   <select id="selectUserByQyWechatUserId" parameterType="String" resultMap="SysUserResult">
      <include refid="selectUserVo"/>
      where u.qy_wechat_user_id = #{qyWechatUserId} and u.del_flag = '0'
   </select>
   <!-- 根据分公司ID列表查询用户(包含分公司及其所有子部门的用户) -->
   <select id="selectUsersByBranchDeptIds" resultMap="SysUserResult">
      SELECT DISTINCT
         u.user_id, u.dept_id, u.user_name, u.nick_name, u.email,
         u.avatar, u.phonenumber, u.sex, u.status, u.del_flag, u.create_time,
         d.dept_id, d.parent_id, d.ancestors, d.dept_name, d.order_num, d.leader, d.status as dept_status,
         r.role_id, r.role_name, r.role_key, r.role_sort, r.data_scope, r.status as role_status
      FROM sys_user u
      LEFT JOIN sys_dept d ON u.dept_id = d.dept_id
      LEFT JOIN sys_user_role ur ON u.user_id = ur.user_id
      LEFT JOIN sys_role r ON r.role_id = ur.role_id
      WHERE u.del_flag = '0'
         AND u.status = '0'
         AND u.dept_id IN (
            SELECT t.dept_id
            FROM sys_dept t
            WHERE t.del_flag = '0'
               AND (
                  t.dept_id IN
                  <foreach collection="branchDeptIds" item="deptId" open="(" separator="," close=")">
                     #{deptId}
                  </foreach>
                  OR
                  <foreach collection="branchDeptIds" item="deptId" open="(" separator=" OR " close=")">
                     find_in_set(#{deptId}, t.ancestors) > 0
                  </foreach>
               )
         )
      ORDER BY u.create_time DESC
   </select>
   <!-- 根据serviceOrderClass或dispatchOrderClass查询具有canViewAllConsult权限的用户 -->
   <select id="selectUsersByOrderClassAndCanViewAllConsult" resultMap="SysUserResult">
      SELECT DISTINCT
         u.user_id, u.dept_id, u.user_name, u.nick_name, u.email,
         u.avatar, u.phonenumber, u.sex, u.status, u.del_flag, u.create_time,
         u.can_view_all_consult,u.oa_order_class
      FROM sys_user u
      WHERE u.del_flag = '0'
         AND u.status = '0'
         AND u.can_view_all_consult = '1'
         AND u.oa_order_class like concat('%', #{orderClass}, '%')
      ORDER BY u.create_time DESC
   </select>
</mapper>