Crazy 7 bulan lalu
induk
melakukan
618d8482bf

+ 9 - 8
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dept/DeptController.java

@@ -20,6 +20,7 @@ import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.Parameter;
 import io.swagger.v3.oas.annotations.tags.Tag;
 import lombok.var;
+import org.springframework.cache.annotation.Cacheable;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
@@ -284,7 +285,7 @@ public class DeptController {
             // 毕业达成率
             req.setDeptId(dept.getId());
             req.setUserType("1");
-            List<AdminUserDO> studentList = adminUserService.getUserList(req); // 获取这个部门下的学生
+            List<AdminUserDO> studentList = adminUserService.selectAllList(req); // 获取这个部门下的学生
             // 如果没有学生,跳过当前部门
             if (studentList == null || studentList.isEmpty()) {
                 dept.setGraduationRate("0.00%");
@@ -292,16 +293,18 @@ public class DeptController {
             }
             double graduationRate = 0.0;
 
+            //TODO
             List<AdminUserDO> filteredStudents = studentList.stream()
                     .filter(student -> {
                         if (student.getGrade() != null) {
                             try {
                                 Integer studentGrade = extractGradeNumber(student.getGrade());  // 将年级转换为整数
-
-                                if (now.isBefore(cutoffDate)) {
-                                    return studentGrade != (currentYear - 1);  // 排除上一年级的学生
-                                } else {
-                                    return studentGrade != currentYear;  // 排除当前年级的学生
+                                if (studentGrade!=null) {
+                                    if (now.isBefore(cutoffDate)) {
+                                        return !studentGrade.equals(currentYear - 1);  // 排除上一年级学生
+                                    } else {
+                                        return !studentGrade.equals(currentYear);  // 排除当前年级学生
+                                    }
                                 }
                             } catch (NumberFormatException e) {
                                 return false;
@@ -344,6 +347,4 @@ public class DeptController {
 
 
 
-
-
 }

+ 5 - 34
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/UserController.java

@@ -484,16 +484,11 @@ public class UserController {
     @Operation(summary = "获取达成毕业体条件生人数统计")
     public CommonResult<Map<String,Integer>> getGraduateCount() throws Exception {
         UserPageReqVO reqVO= new UserPageReqVO();
-        List<AdminUserDO> userList = userService.getUserList1(reqVO);
-        List<AdminUserDO> studentList = new ArrayList<>();
-        List<AdminUserDO> graduateList = new ArrayList<>();
-        userList.stream().forEach(user->{
-            if (user.getIsGraduate()==0){
-                graduateList.add(user);
-            }else if (user.getIsGraduate()==1L){
-                studentList.add(user);
-            }
-        });
+        reqVO.setIsGraduate(1L);//未达成
+        List<AdminUserDO> studentList =  userService.getUserList1(reqVO);
+        reqVO.setIsGraduate(0L);//已达成
+        List<AdminUserDO> graduateList = userService.getUserList1(reqVO);
+
         Integer studentNum =studentList.size();
         Integer graduateNum =graduateList.size();
         Map<String, Integer> result = new HashMap<>();
@@ -502,29 +497,5 @@ public class UserController {
         return success(result);
     }
 
-        //传数组
-//    @GetMapping("/getGraduateCount")
-//    @Operation(summary = "获取达成毕业体条件生人数统计")
-//    public CommonResult<List<Map<String, Integer>>> getGraduateCount() throws Exception {
-//        UserPageReqVO reqVO= new UserPageReqVO();
-//        List<AdminUserDO> userList = userService.getUserList1(reqVO);
-//        List<AdminUserDO> studentList = new ArrayList<>();
-//        List<AdminUserDO> graduateList = new ArrayList<>();
-//        userList.stream().forEach(user->{
-//            if (user.getIsGraduate()==0){
-//                graduateList.add(user);
-//            }else if (user.getIsGraduate()==1L){
-//                studentList.add(user);
-//            }
-//        });
-//        Integer studentNum =studentList.size();
-//        Integer graduateNum =graduateList.size();
-//        List<Map<String, Integer>> result = new ArrayList<>();
-//        Map<String, Integer> Map = new HashMap<>();
-//        Map.put("studentNum", studentNum);
-//        Map.put("graduateNum", graduateNum);
-//        result.add(Map);
-//        return success(result);
-//    }
 
 }

+ 2 - 0
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/dept/DeptMapper.java

@@ -8,6 +8,8 @@ import cn.iocoder.yudao.module.system.controller.admin.dept.vo.dept.DeptListReqV
 import cn.iocoder.yudao.module.system.controller.admin.dept.vo.dept.deptPageReqVO;
 import cn.iocoder.yudao.module.system.dal.dataobject.dept.DeptDO;
 import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.Select;
 
 import java.util.Arrays;
 import java.util.Collection;

+ 40 - 28
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/user/AdminUserMapper.java

@@ -40,6 +40,11 @@ public interface AdminUserMapper extends BaseMapperX<AdminUserDO> {
         return selectOne(AdminUserDO::getMobile, mobile);
     }
 
+    List<AdminUserDO> selectAllList(
+            @Param("reqVO") UserPageReqVO reqVO,
+            @Param("deptIds") Collection<Long> deptIds
+    );
+
     //查询所有人
     default PageResult<AdminUserDO> selectPage(UserPageReqVO reqVO, Collection<Long> deptIds) {
         return selectPage(reqVO, new LambdaQueryWrapperX<AdminUserDO>()
@@ -144,35 +149,42 @@ public interface AdminUserMapper extends BaseMapperX<AdminUserDO> {
 //    }
 
     //查学生
-    default List<AdminUserDO> selectList1(UserPageReqVO reqVO, Collection<Long> deptIds,Set<Long>roleIds,Long deptId) {
-
-        LambdaQueryWrapperX<AdminUserDO> queryWrapperX =new LambdaQueryWrapperX<AdminUserDO>();
-        queryWrapperX.likeIfPresent(AdminUserDO::getUsername, reqVO.getUsername())
-                .likeIfPresent(AdminUserDO::getEmail,reqVO.getEmail())
-                .likeIfPresent(AdminUserDO::getMobile, reqVO.getMobile())
-                .likeIfPresent(AdminUserDO::getUserNumber,reqVO.getUserNumber())//学号查询
-                .likeIfPresent(AdminUserDO::getNickname, reqVO.getNickname())//昵称查询
-                .eqIfPresent(AdminUserDO::getUserType,reqVO.getUserType())//类型查询
-                .likeIfPresent(AdminUserDO::getGrade, reqVO.getGrade())//班级查询
-                .likeIfPresent(AdminUserDO::getMajor, reqVO.getMajor())//专业
-                .likeIfPresent(AdminUserDO::getMasterType, reqVO.getMasterType())//专硕
-                .eqIfPresent(AdminUserDO::getStatus, reqVO.getStatus())
-                .eqIfPresent(AdminUserDO::getSupervisorId,reqVO.getSupervisorId())//导师查询
-                .betweenIfPresent(AdminUserDO::getCreateTime, reqVO.getCreateTime())
-                .inIfPresent(AdminUserDO::getDeptId, deptIds)
-                .orderByDesc(AdminUserDO::getId);
 
-        if (roleIds.contains(113L)){//如果是教师,只找导师是登录的
-            queryWrapperX.eqIfPresent(AdminUserDO::getDeptId,deptId)
-                    .eqIfPresent(AdminUserDO::getUserType,1);
-        } else if (roleIds.contains(114L)) {//学院
-            queryWrapperX.eqIfPresent(AdminUserDO::getUserType,1);
-        }else if (roleIds.contains(1L)){//管理员
-            queryWrapperX.inIfPresent(AdminUserDO::getUserType,1,2);
-        }
-       List<AdminUserDO> result = selectList(queryWrapperX);
-        return result;
-    }
+    List<AdminUserDO> selectList1(
+            @Param("reqVO") UserPageReqVO reqVO,
+            @Param("deptIds") Collection<Long> deptIds,
+            @Param("roleIds") Set<Long> roleIds,
+            @Param("deptId") Long deptId
+    );
+//    default List<AdminUserDO> selectList1(UserPageReqVO reqVO, Collection<Long> deptIds,Set<Long>roleIds,Long deptId) {
+//
+//        LambdaQueryWrapperX<AdminUserDO> queryWrapperX =new LambdaQueryWrapperX<AdminUserDO>();
+//        queryWrapperX.likeIfPresent(AdminUserDO::getUsername, reqVO.getUsername())
+//                .likeIfPresent(AdminUserDO::getEmail,reqVO.getEmail())
+//                .likeIfPresent(AdminUserDO::getMobile, reqVO.getMobile())
+//                .likeIfPresent(AdminUserDO::getUserNumber,reqVO.getUserNumber())//学号查询
+//                .likeIfPresent(AdminUserDO::getNickname, reqVO.getNickname())//昵称查询
+//                .eqIfPresent(AdminUserDO::getUserType,reqVO.getUserType())//类型查询
+//                .likeIfPresent(AdminUserDO::getGrade, reqVO.getGrade())//班级查询
+//                .likeIfPresent(AdminUserDO::getMajor, reqVO.getMajor())//专业
+//                .likeIfPresent(AdminUserDO::getMasterType, reqVO.getMasterType())//专硕
+//                .eqIfPresent(AdminUserDO::getStatus, reqVO.getStatus())
+//                .eqIfPresent(AdminUserDO::getSupervisorId,reqVO.getSupervisorId())//导师查询
+//                .betweenIfPresent(AdminUserDO::getCreateTime, reqVO.getCreateTime())
+//                .inIfPresent(AdminUserDO::getDeptId, deptIds)
+//                .orderByDesc(AdminUserDO::getId);
+//
+//        if (roleIds.contains(113L)){//如果是教师,只找导师是登录的
+//            queryWrapperX.eqIfPresent(AdminUserDO::getDeptId,deptId)
+//                    .eqIfPresent(AdminUserDO::getUserType,1);
+//        } else if (roleIds.contains(114L)) {//学院
+//            queryWrapperX.eqIfPresent(AdminUserDO::getUserType,1);
+//        }else if (roleIds.contains(1L)){//管理员
+//            queryWrapperX.inIfPresent(AdminUserDO::getUserType,1,2);
+//        }
+//       List<AdminUserDO> result = selectList(queryWrapperX);
+//        return result;
+//    }
 
     //   根据登录人员查所有毕业学生
     default PageResult<AdminUserDO> selectGraduateStudentPage(UserPageReqVO reqVO, Collection<Long> deptIds, Set<Long> roleIds,Long loginId) {

+ 1 - 0
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/dept/DeptServiceImpl.java

@@ -279,4 +279,5 @@ public class DeptServiceImpl implements DeptService {
     public DeptDO getDeptByDeptName(String deptName){
         return deptMapper.selectByDeptName(deptName);
     }
+
 }

+ 2 - 0
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/user/AdminUserService.java

@@ -128,9 +128,11 @@ public interface AdminUserService {
     //查毕业生(学院和导师)
     PageResult<AdminUserDO> getGraduateStudentPage(UserPageReqVO reqVO);
     List<AdminUserDO>  selectGraduateStudentList(UserPageReqVO reqVO);
+
     //查所有导师
     List<AdminUserDO> getSupervisor();
 
+    List<AdminUserDO> selectAllList(UserPageReqVO reqVO);
     /**
      * 通过用户 ID 查询用户
      *

+ 7 - 32
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/user/AdminUserServiceImpl.java

@@ -319,6 +319,10 @@ public class AdminUserServiceImpl implements AdminUserService {
         return userMapper.selectByMobile(mobile);
     }
 
+    @Override
+    public  List<AdminUserDO> selectAllList(UserPageReqVO reqVO){
+        return userMapper.selectAllList(reqVO,getDeptCondition(reqVO.getDeptId()));
+    }
 
     //获取所有用户分页
     @Override
@@ -404,30 +408,13 @@ public class AdminUserServiceImpl implements AdminUserService {
         return new PageResult<>(result, size);
     }
 
+
     @Override
     public  List<AdminUserDO> getUserList1(UserPageReqVO reqVO){
         Long loginId = SecurityFrameworkUtils.getLoginUserId();
         Long deptId = SecurityFrameworkUtils.getLoginUserDeptId();
         Set<Long> roleIds = permissionService.getUserRoleIdListByUserId(loginId);
         List<AdminUserDO> result =userMapper.selectList1(reqVO, getDeptCondition(reqVO.getDeptId()),roleIds,deptId);
-        // 遍历结果集,设置 photoIsExist
-        result.stream().forEach(user -> {
-            user.setPhotoIsExist(Long.valueOf(user.getPhotoUrl() != null && !user.getPhotoUrl().isEmpty() ? 1 : 0));
-            user.setIsGraduate(vilidateIsGraduate(user));
-            if (user.getDeptId()==null||user.getDeptId()==0L){
-                user.setDeptName("测绘学院");
-            }
-            if ("1".equals(user.getUserType()) ||"2".equals(user.getUserType())) {
-                if (user.getSupervisorId() != null) {
-                    AdminUserDO supervisorUser = getUser(user.getSupervisorId());
-                    String supervisor = supervisorUser.getNickname();
-                    String mobile = supervisorUser.getMobile();
-                    // 赋值给 对应 字段
-                    user.setSupervisor(supervisor);
-                    user.setSupervisorMobile(mobile);
-                }
-            }
-        });
         return result;
     };
 
@@ -435,7 +422,6 @@ public class AdminUserServiceImpl implements AdminUserService {
     @Override
     public PageResult<AdminUserDO> getUserPage0(UserPageReqVO reqVO) {
 
-
         Long loginId = SecurityFrameworkUtils.getLoginUserId();
         Set<Long> roleIds = permissionService.getUserRoleIdListByUserId(loginId);
         PageResult<AdminUserDO> result =userMapper.selectPage0(reqVO, getDeptCondition(reqVO.getDeptId()),roleIds,loginId);
@@ -476,20 +462,9 @@ public class AdminUserServiceImpl implements AdminUserService {
     public List<AdminUserDO>  selectGraduateStudentList(UserPageReqVO reqVO){
         Long loginId = SecurityFrameworkUtils.getLoginUserId();
         Set<Long> roleIds = permissionService.getUserRoleIdListByUserId(loginId);
-        List<AdminUserDO> ResultList = userMapper.selectGraduateStudentList(reqVO, getDeptCondition(reqVO.getDeptId()),roleIds,loginId);
+        List<AdminUserDO> resultList = userMapper.selectGraduateStudentList(reqVO, getDeptCondition(reqVO.getDeptId()),roleIds,loginId);
         // 循环处理每个毕业生
-        for (AdminUserDO student :ResultList) {
-            // 根据 supervisorId 查询导师信息
-            if (student.getSupervisorId() != null) {
-                AdminUserDO supervisorUser = getUser(student.getSupervisorId());
-                String supervisor = supervisorUser.getNickname();
-                String mobile = supervisorUser.getMobile();
-                // 赋值给 对应 字段
-                student.setSupervisor(supervisor);
-                student.setSupervisorMobile(mobile);
-            }
-        }
-        return ResultList;
+        return resultList;
     }
 
     //查询所有导师

+ 205 - 4
yudao-module-system/yudao-module-system-biz/src/main/resources/Mapper/AdminUserMapper/AdminUserMapper.xml

@@ -45,8 +45,9 @@
             AND a.user_type = #{reqVO.userType}
         </if>
 
-        <if test="reqVO.grade != null and reqVO.grade != ''">
-            AND a.grade LIKE CONCAT('%', #{reqVO.grade.substring(0, 4)}, '%')
+        <bind name="gradePrefix" value="reqVO.grade != null and reqVO.grade.length() >= 4 ? reqVO.grade.substring(0, 4) : ''"/>
+        <if test="gradePrefix != ''">
+            AND a.grade LIKE CONCAT('%', #{gradePrefix}, '%')
         </if>
 
         <if test="reqVO.supervisorId != null">
@@ -131,9 +132,12 @@
         <if test="reqVO.userType != null">
             AND a.user_type = #{reqVO.userType}
         </if>
-        <if test="reqVO.grade != null and reqVO.grade != ''">
-            AND a.grade LIKE CONCAT('%', #{reqVO.grade.substring(0, 4)}, '%')
+
+        <bind name="gradePrefix" value="reqVO.grade != null and reqVO.grade.length() >= 4 ? reqVO.grade.substring(0, 4) : ''"/>
+        <if test="gradePrefix != ''">
+            AND a.grade LIKE CONCAT('%', #{gradePrefix}, '%')
         </if>
+
         <if test="reqVO.supervisorId != null">
             AND a.supervisor_id = #{reqVO.supervisorId}
         </if>
@@ -185,4 +189,201 @@
         GROUP BY a.id
         ) AS subquery;
     </select>
+
+
+    <select id="selectList1" resultType="cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO">
+        SELECT
+        a.*,
+        COALESCE(
+        (SELECT MIN(ua.is_graduate) FROM system_user_achievement ua WHERE ua.user_id = a.id),
+        1
+        ) AS is_graduate,
+        CASE
+        WHEN a.photo_url IS NOT NULL AND TRIM(a.photo_url) != '' THEN 1
+        ELSE 0
+        END AS photoIsExist,
+
+        COALESCE(system_dept.name, "测绘学院") AS deptName,
+        supervisor_user.nickname as supervisor,
+        supervisor_user.mobile as supervisorMobile
+        FROM
+        system_users a
+        LEFT JOIN
+        system_user_achievement ua ON ua.user_id = a.id
+        LEFT JOIN
+        system_users supervisor_user ON supervisor_user.id = a.supervisor_id  -- 自连接获取 supervisor 的信息
+        LEFT JOIN
+        system_dept system_dept ON system_dept.id = a.dept_id
+        WHERE
+        1=1
+        <if test="reqVO.username != null and reqVO.username != ''">
+            AND a.username LIKE CONCAT('%', #{reqVO.username}, '%')
+        </if>
+        <if test="reqVO.email != null and reqVO.email != ''">
+            AND a.email LIKE CONCAT('%', #{reqVO.email}, '%')
+        </if>
+        <if test="reqVO.mobile != null and reqVO.mobile != ''">
+            AND a.mobile LIKE CONCAT('%', #{reqVO.mobile}, '%')
+        </if>
+        <if test="reqVO.userNumber != null and reqVO.userNumber != ''">
+            AND a.user_number LIKE CONCAT('%', #{reqVO.userNumber}, '%')
+        </if>
+        <if test="reqVO.nickname != null and reqVO.nickname != ''">
+            AND a.nickname LIKE CONCAT('%', #{reqVO.nickname}, '%')
+        </if>
+        <if test="reqVO.userType != null">
+            AND a.user_type = #{reqVO.userType}
+        </if>
+
+        <bind name="gradePrefix" value="reqVO.grade != null and reqVO.grade.length() >= 4 ? reqVO.grade.substring(0, 4) : ''"/>
+        <if test="gradePrefix != ''">
+            AND a.grade LIKE CONCAT('%', #{gradePrefix}, '%')
+        </if>
+
+        <if test="reqVO.supervisorId != null">
+            AND a.supervisor_id = #{reqVO.supervisorId}
+        </if>
+
+        <if test="reqVO.major != null">
+            AND a.major = #{reqVO.major}
+        </if>
+
+        <if test="reqVO.masterType != null">
+            AND a.masterType = #{reqVO.masterType}
+        </if>
+
+        <if test="reqVO.status != null">
+            AND a.status = #{reqVO.status}
+        </if>
+        <if test="deptIds != null and !deptIds.isEmpty()">
+            AND a.dept_id IN
+            <foreach collection="deptIds" item="deptId" open="(" separator="," close=")">
+                #{deptId}
+            </foreach>
+        </if>
+        <if test="roleIds != null and roleIds.contains(113L)">
+            AND a.dept_id = #{deptId}
+            AND a.user_type = 1
+        </if>
+        <if test="roleIds != null and roleIds.contains(114L)">
+            AND a.user_type = 1
+        </if>
+        <if test="roleIds != null and roleIds.contains(1L)">
+            AND a.user_type IN (1, 2)
+        </if>
+        <if test="reqVO.isGraduate != null">
+            <if test="reqVO.isGraduate == 1">
+                AND a.id NOT IN (SELECT user_id FROM system_user_achievement WHERE user_id = a.id AND is_graduate = 0)
+            </if>
+            <if test="reqVO.isGraduate == 0">
+                AND a.id IN (SELECT user_id FROM system_user_achievement WHERE user_id = a.id AND is_graduate = #{reqVO.isGraduate})
+                AND ua.is_graduate = 0
+            </if>
+        </if>
+        <if test="reqVO.photoIsExist != null">
+            <if test="reqVO.photoIsExist == 0">
+                AND a.photo_url IS NULL
+            </if>
+            <if test="reqVO.photoIsExist == 1">
+                AND a.photo_url IS NOT NULL AND a.photo_url != ''
+            </if>
+        </if>
+        GROUP BY
+        a.id
+        ORDER BY
+        a.id
+    </select>
+
+    <select id="selectAllList" resultType="cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO">
+        SELECT
+        a.*,
+        COALESCE(
+        (SELECT MIN(ua.is_graduate) FROM system_user_achievement ua WHERE ua.user_id = a.id),
+        1
+        ) AS is_graduate,
+        CASE
+        WHEN a.photo_url IS NOT NULL AND TRIM(a.photo_url) != '' THEN 1
+        ELSE 0
+        END AS photoIsExist,
+
+        COALESCE(system_dept.name, "测绘学院") AS deptName,
+        supervisor_user.nickname as supervisor,
+        supervisor_user.mobile as supervisorMobile
+        FROM
+        system_users a
+        LEFT JOIN
+        system_user_achievement ua ON ua.user_id = a.id
+        LEFT JOIN
+        system_users supervisor_user ON supervisor_user.id = a.supervisor_id  -- 自连接获取 supervisor 的信息
+        LEFT JOIN
+        system_dept system_dept ON system_dept.id = a.dept_id
+        WHERE
+        1=1
+        <if test="reqVO.username != null and reqVO.username != ''">
+            AND a.username LIKE CONCAT('%', #{reqVO.username}, '%')
+        </if>
+        <if test="reqVO.email != null and reqVO.email != ''">
+            AND a.email LIKE CONCAT('%', #{reqVO.email}, '%')
+        </if>
+        <if test="reqVO.mobile != null and reqVO.mobile != ''">
+            AND a.mobile LIKE CONCAT('%', #{reqVO.mobile}, '%')
+        </if>
+        <if test="reqVO.userNumber != null and reqVO.userNumber != ''">
+            AND a.user_number LIKE CONCAT('%', #{reqVO.userNumber}, '%')
+        </if>
+        <if test="reqVO.nickname != null and reqVO.nickname != ''">
+            AND a.nickname LIKE CONCAT('%', #{reqVO.nickname}, '%')
+        </if>
+        <if test="reqVO.userType != null">
+            AND a.user_type = #{reqVO.userType}
+        </if>
+
+        <bind name="gradePrefix" value="reqVO.grade != null and reqVO.grade.length() >= 4 ? reqVO.grade.substring(0, 4) : ''"/>
+        <if test="gradePrefix != ''">
+            AND a.grade LIKE CONCAT('%', #{gradePrefix}, '%')
+        </if>
+
+        <if test="reqVO.supervisorId != null">
+            AND a.supervisor_id = #{reqVO.supervisorId}
+        </if>
+
+        <if test="reqVO.major != null">
+            AND a.major = #{reqVO.major}
+        </if>
+
+        <if test="reqVO.masterType != null">
+            AND a.masterType = #{reqVO.masterType}
+        </if>
+
+        <if test="reqVO.status != null">
+            AND a.status = #{reqVO.status}
+        </if>
+        <if test="deptIds != null and !deptIds.isEmpty()">
+            AND a.dept_id IN
+            <foreach collection="deptIds" item="deptId" open="(" separator="," close=")">
+                #{deptId}
+            </foreach>
+        </if>
+        <if test="reqVO.isGraduate != null">
+            <if test="reqVO.isGraduate == 1">
+                AND a.id NOT IN (SELECT user_id FROM system_user_achievement WHERE user_id = a.id AND is_graduate = 0)
+            </if>
+            <if test="reqVO.isGraduate == 0">
+                AND a.id IN (SELECT user_id FROM system_user_achievement WHERE user_id = a.id AND is_graduate = #{reqVO.isGraduate})
+                AND ua.is_graduate = 0
+            </if>
+        </if>
+        <if test="reqVO.photoIsExist != null">
+            <if test="reqVO.photoIsExist == 0">
+                AND a.photo_url IS NULL
+            </if>
+            <if test="reqVO.photoIsExist == 1">
+                AND a.photo_url IS NOT NULL AND a.photo_url != ''
+            </if>
+        </if>
+        GROUP BY
+        a.id
+        ORDER BY
+        a.id
+    </select>
 </mapper>