Преглед на файлове

用户支持部门ID递归条件查询

hubin преди 1 година
родител
ревизия
a602364ea3

+ 3 - 0
src/main/java/com/aizuda/boot/modules/system/entity/vo/SysUserVO.java

@@ -17,6 +17,9 @@ public class SysUserVO extends SysUser {
     @Schema(description = "角色ID")
     private Long roleId;
 
+    @Schema(description = "部门ID")
+    private Long departmentId;
+
     @Schema(description = "所属角色多个英文逗号分割")
     private String roles;
 

+ 2 - 2
src/main/java/com/aizuda/boot/modules/system/mapper/SysUserMapper.java

@@ -26,6 +26,6 @@ import java.util.List;
 @Mapper
 public interface SysUserMapper extends CrudMapper<SysUser> {
 
-    @Select("SELECT u.* FROM sys_user u JOIN sys_user_role r ON u.id=r.user_id WHERE r.role_id=#{vo.roleId} AND u.deleted=0")
-    List<SysUser> selectPageByVO(Page page, @Param("vo") SysUserVO vo);
+    Page<SysUser> selectPageByVO(Page page, @Param("vo") SysUserVO vo);
+
 }

+ 4 - 7
src/main/java/com/aizuda/boot/modules/system/service/impl/SysUserServiceImpl.java

@@ -49,18 +49,15 @@ public class SysUserServiceImpl extends BaseServiceImpl<SysUserMapper, SysUser>
 
     @Override
     public Page<SysUser> page(Page<SysUser> page, SysUserVO vo) {
-        if (null == vo || null == vo.getRoleId()) {
-            return super.page(page);
-        }
-        List<SysUser> sysUsers = baseMapper.selectPageByVO(page, vo);
-        if (CollectionUtils.isNotEmpty(sysUsers)) {
+        Page<SysUser> sysUserPage = baseMapper.selectPageByVO(page, vo);
+        if (sysUserPage.getTotal() > 0) {
             // 对外隐藏属性
-            sysUsers.forEach(t -> {
+            sysUserPage.getRecords().forEach(t -> {
                 t.setPassword(null);
                 t.setSalt(null);
             });
         }
-        return page.setRecords(sysUsers);
+        return sysUserPage;
     }
 
     @Override

+ 26 - 0
src/main/resources/mapper/SysUserMapper.xml

@@ -0,0 +1,26 @@
+<?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.aizuda.boot.modules.system.mapper.SysUserMapper">
+
+    <select id="selectPageByVO" resultType="com.aizuda.boot.modules.system.entity.SysUser">
+        SELECT u.* FROM sys_user u
+        <if test="vo != null">
+            <if test="vo.roleId != null">
+                JOIN sys_user_role r ON u.id = r.user_id AND r.role_id=#{vo.roleId}
+            </if>
+            <if test="vo.departmentId != null">
+                JOIN (WITH RECURSIVE r AS (SELECT id FROM sys_department WHERE id=#{vo.departmentId} UNION ALL SELECT c.id FROM sys_department c JOIN r ON c.pid=r.id AND c.deleted=0
+                    ) SELECT DISTINCT d.user_id FROM sys_user_department d JOIN r ON d.department_id=r.id) dr ON u.id = dr.user_id
+            </if>
+        </if>
+        WHERE u.deleted = 0
+        <if test="vo != null">
+            <if test="vo.username != null">
+                AND u.username LIKE CONCAT(CONCAT('%',#{vo.username}),'%')
+            </if>
+            <if test="vo.jobNum != null">
+                AND u.job_num LIKE CONCAT(CONCAT('%',#{vo.jobNum}),'%')
+            </if>
+        </if>
+    </select>
+</mapper>