浏览代码

1.控制台人员数递归次数过多

wuhp 1 年之前
父节点
当前提交
e56f06b84b
共有 1 个文件被更改,包括 41 次插入39 次删除
  1. 41 39
      src/main/resources/mapper/modules/admin/SysUserMapper.xml

+ 41 - 39
src/main/resources/mapper/modules/admin/SysUserMapper.xml

@@ -1941,45 +1941,47 @@
         </if>
     </select>
     <select id="selectByParams" resultType="com.ydtech.modules.admin.model.SysUser">
-        select * from sys_user su
-        left join sys_dept sd on sd.id =su.dept_id
-        <where>
-            su.leader_id is not null
-            AND su.id not LIKE '%M%'
-            AND su.status ='1'
-            <if test="leaderId !=null and  leaderId !=''">
-                and su.leader_id =#{leaderId}
-            </if>
-            and (
-            WITH RECURSIVE user_subtree AS (
-            SELECT su1.id,
-            su1.leader_id,
-            0 AS level,
-            sd1.management_source
-            FROM sys_user su1
-            left join sys_dept sd1 on sd1.id = su1.dept_id
-            where
-            su1.id = su.id
-            UNION ALL
-            SELECT su1.id,
-            su1.leader_id,
-            ust.level + 1,
-            sd1.management_source
-            FROM sys_user su1
-            INNER JOIN
-            user_subtree ust ON su1.leader_id = ust.id
-            LEFT JOIN sys_dept sd1 ON sd1.id = su1.dept_id
-            )
-            SELECT count(0)
-            FROM user_subtree
-            where
-            <if test="managementSource != null  and  managementSource != ''">
-                management_source = #{managementSource}
-            </if>
-            ORDER BY level,
-            id
-            ) >0
-        </where>
+        SELECT
+        su.*,
+        sd.*
+        FROM
+        sys_user su
+        LEFT JOIN sys_dept sd ON sd.id = su.dept_id
+        WHERE
+        su.leader_id IS NOT NULL
+        AND su.id NOT LIKE '%M%'
+        AND su.STATUS = '1'
+        <if test = "leaderId !=null and  leaderId !=''" >
+            AND su.leader_id = #{leaderId}
+        </if>
+        AND EXISTS (
+        SELECT
+        1
+        FROM
+        sys_user su1
+        LEFT JOIN sys_user su2 ON su2.leader_id = su1.id
+        LEFT JOIN sys_user su3 ON su3.leader_id = su2.id
+        WHERE
+        su1.id = su.id
+        AND (
+        SELECT
+        count( 0 )
+        FROM
+        (
+        SELECT
+        sd1.management_source
+        FROM
+        sys_user su4
+        LEFT JOIN sys_dept sd1 ON sd1.id = su4.dept_id
+        WHERE
+        su4.id IN ( su1.id, su2.id, su3.id )
+        ) AS subquery
+        WHERE
+        <if test = "managementSource != null  and  managementSource != ''" >
+         management_source = #{managementSource}
+        </if>
+        ORDER BY 1
+       ) > 0 )
     </select>