Crazy hai 3 meses
pai
achega
4d67a2d480
Modificáronse 27 ficheiros con 728 adicións e 113 borrados
  1. 1 2
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/mail/MailTemplateController.java
  2. 100 77
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/studentSelectSupervisorRecord/StudentSelectSupervisorRecordController.java
  3. 1 1
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/studentSelectSupervisorRecord/vo/StudentSelectSupervisorRecordPageReqVO.java
  4. 1 1
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/studentSelectSupervisorRecord/vo/StudentSelectSupervisorRecordRespVO.java
  5. 24 3
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/studentSelectionProject/studentSelectionProjectController.java
  6. 23 0
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/studentSelectionProject/vo/studentPageReqVO.java
  7. 1 1
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/supervisorSelectionSetting/supervisorSelectionSettingController.java
  8. 1 1
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/supervisorSelectionSetting/vo/supervisorBookRespVO.java
  9. 1 1
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/supervisorSelectionSetting/vo/supervisorSelectionSettingRespVO.java
  10. 61 3
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/UserController.java
  11. 14 1
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/UserProfileController.java
  12. 4 0
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/vo/profile/UserProfileRespVO.java
  13. 4 0
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/vo/user/UserRespVO.java
  14. 3 2
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/user/AdminUserDO.java
  15. 100 15
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/studentSelectSupervisorRecord/studentSelectSupervisorRecordMapper.java
  16. 2 1
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/studentSelectionProject/studentSelectionProjectMapper.java
  17. 2 0
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/supervisorSelectionSetting/supervisorSelectionSettingMapper.java
  18. 70 1
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/user/AdminUserMapper.java
  19. 22 0
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/studentSelectSupervisorRecord/studentSelectSupervisorRecordService.java
  20. 50 0
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/studentSelectSupervisorRecord/studentSelectSupervisorRecordServiceImpl.java
  21. 8 1
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/supervisorSelectionSetting/supervisorSelectionSettingService.java
  22. 8 0
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/supervisorSelectionSetting/supervisorSelectionSettingServiceImpl.java
  23. 12 0
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/user/AdminUserService.java
  24. 42 0
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/user/AdminUserServiceImpl.java
  25. 31 0
      yudao-module-system/yudao-module-system-biz/src/main/resources/Mapper/studentSelectSupervisorRecord/studentSelectSupervisorRecordMapper.xml
  26. 18 0
      yudao-module-system/yudao-module-system-biz/src/main/resources/Mapper/supervisorSelectionSetting/supervisorSelectionSettingMapper.xml
  27. 124 2
      yudao-module-system/yudao-module-system-biz/src/main/resources/Mapper/user/AdminUserMapper.xml

+ 1 - 2
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/mail/MailTemplateController.java

@@ -20,13 +20,12 @@ import com.alibaba.excel.ExcelWriter;
 import com.alibaba.excel.write.metadata.WriteSheet;
 import com.alibaba.excel.write.metadata.WriteSheet;
 import com.itextpdf.text.DocumentException;
 import com.itextpdf.text.DocumentException;
 import com.itextpdf.text.Paragraph;
 import com.itextpdf.text.Paragraph;
-import com.itextpdf.text.pdf.PdfDocument;
+
 import com.itextpdf.text.pdf.PdfWriter;
 import com.itextpdf.text.pdf.PdfWriter;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.Parameter;
 import io.swagger.v3.oas.annotations.Parameter;
 import io.swagger.v3.oas.annotations.tags.Tag;
 import io.swagger.v3.oas.annotations.tags.Tag;
 
 
-import jdk.javadoc.internal.doclets.formats.html.Table;
 import org.apache.poi.xwpf.usermodel.*;
 import org.apache.poi.xwpf.usermodel.*;
 
 
 import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.scheduling.annotation.Scheduled;

+ 100 - 77
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/studentSelectSupervisorRecord/StudentSelectSupervisorRecordController.java

@@ -62,43 +62,43 @@ public class StudentSelectSupervisorRecordController {
     private studentSelectionProjectService studentSelectionProjectService;
     private studentSelectionProjectService studentSelectionProjectService;
 
 
 //    @Scheduled(cron = "0 00 00 * * ?") // 每天0:00检测
 //    @Scheduled(cron = "0 00 00 * * ?") // 每天0:00检测
-    @Scheduled(cron = "0 0 * * * ?") // 每1小时执行
-    @Idempotent(timeout = 10)
-    public void checkIsSelection() {
-        LocalDateTime nowTime =LocalDateTime.now();
-        studentSelectionProjectSaveReqVO project
-                = BeanUtils.toBean(
-                        studentSelectionProjectService.getStudentSelectionProjectByYear(nowTime.getYear())
-                ,studentSelectionProjectSaveReqVO.class);
-        LocalDateTime endTime = project.getSupervisorConfirmDeadline();
-        if (nowTime.isAfter(endTime)){
-            checkSelection();
-        }
-    }
-    //在项目结束的时候生成编辑记录,学院直接设置
-    @GetMapping("/ceshi")
-    @Operation(summary = "测试生成编辑记录")
-    public void checkSelection() {
-        //获取今年的选择记录
-        LocalDate date =LocalDate.now();
-        studentSelectionProjectSaveReqVO project = BeanUtils.toBean(studentSelectionProjectService.getStudentSelectionProjectByYear(date.getYear()),studentSelectionProjectSaveReqVO.class);
-
-        if (project==null){
-            return;
-        }
-        //没有选择成功导师的学生
-        List<AdminUserDO> studentList =adminUserService.getStudentAndSupervisorNull(project.getStudentGrade());
-        //更新所有待处理的记录=>撤回
-        studentSelectSupervisorRecordService.updatePendingSelectType(project.getId());
-        //创建其他的记录
-        StudentSelectSupervisorRecordSaveReqVO createReqVO =new StudentSelectSupervisorRecordSaveReqVO();
-        for (AdminUserDO student :studentList){
-            createReqVO.setProjectId(project.getId());
-            createReqVO.setStudentId(student.getId());
-            createReqVO.setSelectType(4);//编辑状态
-            studentSelectSupervisorRecordService.createStudentSelectSupervisorRecord(createReqVO);
-        }
-    }
+//    @Scheduled(cron = "0 0 * * * ?") // 每1小时执行
+//    @Idempotent(timeout = 10)
+//    public void checkIsSelection() {
+//        LocalDateTime nowTime =LocalDateTime.now();
+//        studentSelectionProjectSaveReqVO project
+//                = BeanUtils.toBean(
+//                        studentSelectionProjectService.getStudentSelectionProjectByYear(nowTime.getYear())
+//                ,studentSelectionProjectSaveReqVO.class);
+//        LocalDateTime endTime = project.getSupervisorConfirmDeadline();
+//        if (nowTime.isAfter(endTime)){
+//            checkSelection();
+//        }
+//    }
+//    //在项目结束的时候生成编辑记录,学院直接设置
+//    @GetMapping("/ceshi")
+//    @Operation(summary = "测试生成编辑记录")
+//    public void checkSelection() {
+//        //获取今年的选择记录
+//        LocalDate date =LocalDate.now();
+//        studentSelectionProjectSaveReqVO project = BeanUtils.toBean(studentSelectionProjectService.getStudentSelectionProjectByYear(date.getYear()),studentSelectionProjectSaveReqVO.class);
+//
+//        if (project==null){
+//            return;
+//        }
+//        //没有选择成功导师的学生
+//        List<AdminUserDO> studentList =adminUserService.getStudentAndSupervisorNull(project.getStudentGrade());
+//        //更新所有待处理的记录=>撤回
+//        studentSelectSupervisorRecordService.updatePendingSelectType(project.getId());
+//        //创建其他的记录
+//        StudentSelectSupervisorRecordSaveReqVO createReqVO =new StudentSelectSupervisorRecordSaveReqVO();
+//        for (AdminUserDO student :studentList){
+//            createReqVO.setProjectId(project.getId());
+//            createReqVO.setStudentId(student.getId());
+//            createReqVO.setSelectType(4);//编辑状态
+//            studentSelectSupervisorRecordService.createStudentSelectSupervisorRecord(createReqVO);
+//        }
+//    }
 
 
 
 
     @PostMapping("/create")
     @PostMapping("/create")
@@ -155,6 +155,7 @@ public class StudentSelectSupervisorRecordController {
     @PreAuthorize("@ss.hasPermission('system:student-select-supervisor-record:update')")
     @PreAuthorize("@ss.hasPermission('system:student-select-supervisor-record:update')")
     public CommonResult<String> updateStudentSelectSupervisorRecord(@Valid @RequestBody StudentSelectSupervisorRecordSaveReqVO updateReqVO) {
     public CommonResult<String> updateStudentSelectSupervisorRecord(@Valid @RequestBody StudentSelectSupervisorRecordSaveReqVO updateReqVO) {
 
 
+        AdminUserDO student =adminUserService.getUser(updateReqVO.getStudentId());
         studentSelectSupervisorRecordDO record =studentSelectSupervisorRecordService.getStudentSelectSupervisorRecord(updateReqVO.getId());
         studentSelectSupervisorRecordDO record =studentSelectSupervisorRecordService.getStudentSelectSupervisorRecord(updateReqVO.getId());
         //
         //
         studentSelectionProjectSaveReqVO project = BeanUtils.toBean(studentSelectionProjectService.getStudentSelectionProject(record.getProjectId()), studentSelectionProjectSaveReqVO.class);
         studentSelectionProjectSaveReqVO project = BeanUtils.toBean(studentSelectionProjectService.getStudentSelectionProject(record.getProjectId()), studentSelectionProjectSaveReqVO.class);
@@ -176,40 +177,42 @@ public class StudentSelectSupervisorRecordController {
                 return error(1, "该老师专硕名额已经满了");
                 return error(1, "该老师专硕名额已经满了");
             }
             }
         }
         }
+        if (user.getSelectStatus()==0){//要新建
 
 
-        UserSaveReqVO saveReqVO =new UserSaveReqVO();
-        saveReqVO.setId(record.getStudentId());
-        System.out.println(updateReqVO.getSupervisorId());
-        if (updateReqVO.getSupervisorId()!=null) {
-            AdminUserDO supervisor = adminUserService.getUser(updateReqVO.getSupervisorId());
-            if (supervisor != null) {
-                if (supervisor.getUserType().equals("3")) {
-                    saveReqVO.setSupervisorId(updateReqVO.getSupervisorId());
-                } else if (supervisor.getUserType().equals("5")) {
-                    saveReqVO.setExternalSupervisorId(updateReqVO.getSupervisorId());
+        }else {
+            //更新志愿
+            UserSaveReqVO saveReqVO = new UserSaveReqVO();
+            saveReqVO.setId(record.getStudentId());
+            System.out.println(updateReqVO.getSupervisorId());
+            if (updateReqVO.getSupervisorId() != null) {
+                AdminUserDO supervisor = adminUserService.getUser(updateReqVO.getSupervisorId());
+                if (supervisor != null) {
+                    if (supervisor.getUserType().equals("3")) {
+                        saveReqVO.setSupervisorId(updateReqVO.getSupervisorId());
+                    } else if (supervisor.getUserType().equals("5")) {
+                        saveReqVO.setExternalSupervisorId(updateReqVO.getSupervisorId());
 //                //校外导师的合作导师
 //                //校外导师的合作导师
-                    if (supervisor.getSupervisorId() != null && supervisor.getSupervisorId() != 0) {
-                        saveReqVO.setSupervisorId(supervisor.getSupervisorId());
+                        if (supervisor.getSupervisorId() != null && supervisor.getSupervisorId() != 0) {
+                            saveReqVO.setSupervisorId(supervisor.getSupervisorId());
+                        }
                     }
                     }
                 }
                 }
             }
             }
-        }
 
 
-        if(record.getSelectType()==4){//编辑状态
-            updateReqVO.setSelectType(2);//同意
-        }else if (record.getSelectType()==2){//同意了的
-            //初始化记录里面的签名
-            updateReqVO.setStudentSignature("");//学生签名
-            updateReqVO.setStudentSignDate(null);//TODO 这个审批时间
-            updateReqVO.setSupervisorSignature("");
-            updateReqVO.setStudentSignDate(null);
-            updateReqVO.setSupervisorSignDate(null);
-        }else if (record.getSelectType()==1){
-            updateReqVO.setStudentSignature("");//学生签名
-            updateReqVO.setStudentSignDate(null);
+          if (record.getSelectType() == 2) {//同意了的
+                //初始化记录里面的签名 TODO
+                record.setSupervisorApproveTime(null);//审批时间
+                record.setStudentSignature(null);//学生签名
+                record.setStudentSignDate(null);////学生签名日期
+                record.setSupervisorSignature(null);//导师签名
+                record.setSupervisorSignDate(null);//导师签名日期
+            } else if (record.getSelectType() == 1) {//待处理的
+                record.setStudentSignature(null);//学生签名
+                record.setStudentSignDate(null);
+            }
+            adminUserService.updateUser(saveReqVO);
+            studentSelectSupervisorRecordService.updateRecordNull(BeanUtils.toBean(record, StudentSelectSupervisorRecordSaveReqVO.class));
         }
         }
-        adminUserService.updateUser(saveReqVO);
-        studentSelectSupervisorRecordService.updateStudentSelectSupervisorRecord(updateReqVO);
         return success("志愿修改成功");
         return success("志愿修改成功");
     }
     }
 
 
@@ -236,16 +239,9 @@ public class StudentSelectSupervisorRecordController {
     @Operation(summary = "获得师生互选记录分页")
     @Operation(summary = "获得师生互选记录分页")
     @PreAuthorize("@ss.hasPermission('system:student-select-supervisor-record:query')")
     @PreAuthorize("@ss.hasPermission('system:student-select-supervisor-record:query')")
     public CommonResult<PageResult<StudentSelectSupervisorRecordRespVO>> getStudentSelectSupervisorRecordPage(@Valid StudentSelectSupervisorRecordPageReqVO pageReqVO) {
     public CommonResult<PageResult<StudentSelectSupervisorRecordRespVO>> getStudentSelectSupervisorRecordPage(@Valid StudentSelectSupervisorRecordPageReqVO pageReqVO) {
-//        LocalDateTime dateTime = LocalDateTime.now();
-//        studentSelectionProjectSaveReqVO project = BeanUtils.toBean(studentSelectionProjectService.getStudentSelectionProjectByYear(dateTime.getYear()), studentSelectionProjectSaveReqVO.class);
-//        Long loginId = SecurityFrameworkUtils.getLoginUserId();
-//        Set<Long> roleIds = permissionService.getUserRoleIdListByUserId(loginId);
-//        if ((roleIds.contains(112L) || roleIds.contains(113L)) && project.getSupervisorConfirmDeadline().isBefore(dateTime)) {
-//            return error(1, "该项目已过截至日期");
-//        }else {
-            PageResult<studentSelectSupervisorRecordDO> pageResult = studentSelectSupervisorRecordService.getStudentSelectSupervisorRecordPage(pageReqVO);
-            return success(BeanUtils.toBean(pageResult, StudentSelectSupervisorRecordRespVO.class));
-//        }
+        PageResult<studentSelectSupervisorRecordDO> pageResult = studentSelectSupervisorRecordService.getStudentSelectSupervisorRecordPage(pageReqVO);
+        return success(BeanUtils.toBean(pageResult, StudentSelectSupervisorRecordRespVO.class));
+//
     }
     }
 
 
     @GetMapping("/export-excel")
     @GetMapping("/export-excel")
@@ -389,8 +385,12 @@ public class StudentSelectSupervisorRecordController {
     @Operation(summary = "互选表打印数据列表")
     @Operation(summary = "互选表打印数据列表")
     @PreAuthorize("@ss.hasPermission('system:student-select-supervisor-record:getSelectionList')")
     @PreAuthorize("@ss.hasPermission('system:student-select-supervisor-record:getSelectionList')")
     public CommonResult<List<PrintBookVO>> getSelectionBookList() {
     public CommonResult<List<PrintBookVO>> getSelectionBookList() {
-        LocalDate date = LocalDate.now();
-        studentSelectionProjectSaveReqVO project = BeanUtils.toBean(studentSelectionProjectService.getStudentSelectionProjectByYear(date.getYear()), studentSelectionProjectSaveReqVO.class);
+        LocalDate date =LocalDate.now();
+        Integer nextYear =date.getYear()+1 ;
+        studentSelectionProjectSaveReqVO project =new studentSelectionProjectSaveReqVO();
+        studentSelectionProjectSaveReqVO project1 = BeanUtils.toBean(studentSelectionProjectService.getStudentSelectionProjectByYear(nextYear),studentSelectionProjectSaveReqVO.class);
+        studentSelectionProjectSaveReqVO project2 = BeanUtils.toBean(studentSelectionProjectService.getStudentSelectionProjectByYear(date.getYear()),studentSelectionProjectSaveReqVO.class);
+        project =project1==null?project2:project1;
         if (project == null) {
         if (project == null) {
             return error(1, "项目不存在");
             return error(1, "项目不存在");
         }
         }
@@ -420,7 +420,11 @@ public class StudentSelectSupervisorRecordController {
         Set<Long> roleIds =permissionService.getUserRoleIdListByUserId(loginId);
         Set<Long> roleIds =permissionService.getUserRoleIdListByUserId(loginId);
 
 
         LocalDate date =LocalDate.now();
         LocalDate date =LocalDate.now();
-        studentSelectionProjectSaveReqVO project = BeanUtils.toBean(studentSelectionProjectService.getStudentSelectionProjectByYear(date.getYear()),studentSelectionProjectSaveReqVO.class);
+        Integer nextYear =date.getYear()+1 ;
+        studentSelectionProjectSaveReqVO project =new studentSelectionProjectSaveReqVO();
+        studentSelectionProjectSaveReqVO project1 = BeanUtils.toBean(studentSelectionProjectService.getStudentSelectionProjectByYear(nextYear),studentSelectionProjectSaveReqVO.class);
+        studentSelectionProjectSaveReqVO project2 = BeanUtils.toBean(studentSelectionProjectService.getStudentSelectionProjectByYear(date.getYear()),studentSelectionProjectSaveReqVO.class);
+        project =project1==null?project2:project1;
         if (project==null){
         if (project==null){
             return error(1,"请检查今年是否创建了项目");
             return error(1,"请检查今年是否创建了项目");
         }
         }
@@ -484,4 +488,23 @@ public class StudentSelectSupervisorRecordController {
         Long loginId =SecurityFrameworkUtils.getLoginUserId();
         Long loginId =SecurityFrameworkUtils.getLoginUserId();
         return success(studentSelectSupervisorRecordService.getSupervisorSignatureById(loginId));
         return success(studentSelectSupervisorRecordService.getSupervisorSignatureById(loginId));
     }
     }
+
+
+    @GetMapping("/pendingApprovalPage")
+    @Operation(summary = "获得待审批记录分页")
+    @PreAuthorize("@ss.hasPermission('system:student-select-supervisor-record:pendingApprovalPage')")
+    public CommonResult<PageResult<StudentSelectSupervisorRecordRespVO>> getPendingApprovalRecordPage(@Valid StudentSelectSupervisorRecordPageReqVO pageReqVO) {
+        PageResult<studentSelectSupervisorRecordDO> pageResult = studentSelectSupervisorRecordService.getPendingApprovalRecordPage(pageReqVO);
+        return success(BeanUtils.toBean(pageResult, StudentSelectSupervisorRecordRespVO.class));
+    }
+
+    @GetMapping("/approvedRecordPage")
+    @Operation(summary = "获得已审批记录分页")
+    @PreAuthorize("@ss.hasPermission('system:student-select-supervisor-record:approvedRecordPage')")
+    public CommonResult<PageResult<StudentSelectSupervisorRecordRespVO>> getApprovedRecordPage(@Valid StudentSelectSupervisorRecordPageReqVO pageReqVO) {
+        PageResult<studentSelectSupervisorRecordDO> pageResult = studentSelectSupervisorRecordService.getApprovedRecordPage(pageReqVO);
+        return success(BeanUtils.toBean(pageResult, StudentSelectSupervisorRecordRespVO.class));
+    }
+
+
 }
 }

+ 1 - 1
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/studentSelectSupervisorRecord/vo/StudentSelectSupervisorRecordPageReqVO.java

@@ -15,7 +15,7 @@ import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_
 public class StudentSelectSupervisorRecordPageReqVO extends PageParam {
 public class StudentSelectSupervisorRecordPageReqVO extends PageParam {
 
 
     @Schema(description = "项目id", example = "20003")
     @Schema(description = "项目id", example = "20003")
-    private Integer projectId;
+    private Long projectId;
 
 
     @Schema(description = "学生id", example = "14632")
     @Schema(description = "学生id", example = "14632")
     private Long studentId;
     private Long studentId;

+ 1 - 1
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/studentSelectSupervisorRecord/vo/StudentSelectSupervisorRecordRespVO.java

@@ -19,7 +19,7 @@ public class StudentSelectSupervisorRecordRespVO {
 
 
     @Schema(description = "项目id", requiredMode = Schema.RequiredMode.REQUIRED, example = "20003")
     @Schema(description = "项目id", requiredMode = Schema.RequiredMode.REQUIRED, example = "20003")
     @ExcelProperty("项目id")
     @ExcelProperty("项目id")
-    private Integer projectId;
+    private Long projectId;
 
 
     @Schema(description = "学生id", requiredMode = Schema.RequiredMode.REQUIRED, example = "14632")
     @Schema(description = "学生id", requiredMode = Schema.RequiredMode.REQUIRED, example = "14632")
     @ExcelProperty("学生id")
     @ExcelProperty("学生id")

+ 24 - 3
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/studentSelectionProject/studentSelectionProjectController.java

@@ -2,8 +2,10 @@ package cn.iocoder.yudao.module.system.controller.admin.studentSelectionProject;
 
 
 import cn.iocoder.yudao.module.system.controller.admin.supervisorSelectionSetting.vo.supervisorSelectionSettingPageReqVO;
 import cn.iocoder.yudao.module.system.controller.admin.supervisorSelectionSetting.vo.supervisorSelectionSettingPageReqVO;
 import cn.iocoder.yudao.module.system.controller.admin.supervisorSelectionSetting.vo.supervisorSelectionSettingSaveReqVO;
 import cn.iocoder.yudao.module.system.controller.admin.supervisorSelectionSetting.vo.supervisorSelectionSettingSaveReqVO;
+import cn.iocoder.yudao.module.system.dal.dataobject.studentSelectSupervisorRecord.studentSelectSupervisorRecordDO;
 import cn.iocoder.yudao.module.system.dal.dataobject.supervisorSelectionSetting.supervisorSelectionSettingDO;
 import cn.iocoder.yudao.module.system.dal.dataobject.supervisorSelectionSetting.supervisorSelectionSettingDO;
 import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO;
 import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO;
+import cn.iocoder.yudao.module.system.service.studentSelectSupervisorRecord.studentSelectSupervisorRecordService;
 import cn.iocoder.yudao.module.system.service.supervisorSelectionSetting.supervisorSelectionSettingService;
 import cn.iocoder.yudao.module.system.service.supervisorSelectionSetting.supervisorSelectionSettingService;
 import cn.iocoder.yudao.module.system.service.user.AdminUserService;
 import cn.iocoder.yudao.module.system.service.user.AdminUserService;
 import org.apache.ibatis.annotations.Param;
 import org.apache.ibatis.annotations.Param;
@@ -48,7 +50,7 @@ import cn.iocoder.yudao.module.system.service.studentSelectionProject.studentSel
 public class studentSelectionProjectController {
 public class studentSelectionProjectController {
     // TODO 1.删除项目时,应该同时删除对应的关联信息
     // TODO 1.删除项目时,应该同时删除对应的关联信息
     //  2. 新增接口 ,学院 :(1) 查看所有未提交、未通过、(注意提交但是撤回的状态)的学生 (2) 查看所有已通过的学生 (3) 招生详情只展示同意的
     //  2. 新增接口 ,学院 :(1) 查看所有未提交、未通过、(注意提交但是撤回的状态)的学生 (2) 查看所有已通过的学生 (3) 招生详情只展示同意的
-    //   老师: (1) 新增菜单, 待审批接口 (2)已审批
+    //   老师: (1) 新增菜单, 待审批接口 (2)已审批 //ok
     //   学生:  (1)  操作提示 ,还有请求在待处理中 改为 已存在申请 , (2)申请表样式
     //   学生:  (1)  操作提示 ,还有请求在待处理中 改为 已存在申请 , (2)申请表样式
     //  3.合并菜单
     //  3.合并菜单
     //  4. 项目创建表单 名称和描述  年份默认
     //  4. 项目创建表单 名称和描述  年份默认
@@ -59,6 +61,8 @@ public class studentSelectionProjectController {
     private supervisorSelectionSettingService supervisorSelectionSettingService;
     private supervisorSelectionSettingService supervisorSelectionSettingService;
     @Resource
     @Resource
     private AdminUserService adminUserService;
     private AdminUserService adminUserService;
+    @Resource
+    private studentSelectSupervisorRecordService studentSelectSupervisorRecordService;
 
 
     @PostMapping("/create")
     @PostMapping("/create")
     @Operation(summary = "创建师生互选项目")
     @Operation(summary = "创建师生互选项目")
@@ -82,8 +86,12 @@ public class studentSelectionProjectController {
         if (createReqVO.getStudentStartTime().isAfter(createReqVO.getSupervisorConfirmDeadline())){
         if (createReqVO.getStudentStartTime().isAfter(createReqVO.getSupervisorConfirmDeadline())){
             return error(1,"时间设置错误");
             return error(1,"时间设置错误");
         }
         }
-        LocalDate date = LocalDate.now();
-        studentSelectionProjectDO project = studentSelectionProjectService.getStudentSelectionProjectByYear(date.getYear());
+        LocalDate date =LocalDate.now();
+        Integer nextYear =date.getYear()+1 ;
+        studentSelectionProjectSaveReqVO project =new studentSelectionProjectSaveReqVO();
+        studentSelectionProjectSaveReqVO project1 = BeanUtils.toBean(studentSelectionProjectService.getStudentSelectionProjectByYear(nextYear),studentSelectionProjectSaveReqVO.class);
+        studentSelectionProjectSaveReqVO project2 = BeanUtils.toBean(studentSelectionProjectService.getStudentSelectionProjectByYear(date.getYear()),studentSelectionProjectSaveReqVO.class);
+        project =project1==null?project2:project1;
         if (project!=null){
         if (project!=null){
             return error(1,"今年已经创建过项目了");
             return error(1,"今年已经创建过项目了");
         }else {
         }else {
@@ -205,10 +213,20 @@ public class studentSelectionProjectController {
     @Parameter(name = "id", description = "编号", required = true)
     @Parameter(name = "id", description = "编号", required = true)
     @PreAuthorize("@ss.hasPermission('system:student-selection-project:delete')")
     @PreAuthorize("@ss.hasPermission('system:student-selection-project:delete')")
     public CommonResult<Boolean> deleteStudentSelectionProject(@RequestParam("id") Long id) {
     public CommonResult<Boolean> deleteStudentSelectionProject(@RequestParam("id") Long id) {
+        studentSelectionProjectSaveReqVO project = BeanUtils.toBean(studentSelectionProjectService.getStudentSelectionProject(id), studentSelectionProjectSaveReqVO.class);
+        List<Long> supervisorIds =project.getSupervisorIds();
+        //删除项目下的导师设置
+        supervisorSelectionSettingService.deleteSettingsBySupervisorIds(id,supervisorIds);
+        //删除项目下的互选记录
+        studentSelectSupervisorRecordService.deleteRecordsByProjectId(id);
+        //初始化选中的学生的导师id
+        adminUserService.updateStudentSupervisorId(project.getStudentGrade());
+        //删除项目;
         studentSelectionProjectService.deleteStudentSelectionProject(id);
         studentSelectionProjectService.deleteStudentSelectionProject(id);
         return success(true);
         return success(true);
     }
     }
 
 
+
     @GetMapping("/get")
     @GetMapping("/get")
     @Operation(summary = "获得师生互选项目")
     @Operation(summary = "获得师生互选项目")
     @Parameter(name = "id", description = "编号", required = true, example = "1024")
     @Parameter(name = "id", description = "编号", required = true, example = "1024")
@@ -276,6 +294,9 @@ public class studentSelectionProjectController {
     public CommonResult<List<AdminUserDO>> getProjectSupervisors(@RequestParam("projectId") Long projectId) {
     public CommonResult<List<AdminUserDO>> getProjectSupervisors(@RequestParam("projectId") Long projectId) {
         // 获取项目数据并转换成相应的 VO
         // 获取项目数据并转换成相应的 VO
         studentSelectionProjectSaveReqVO project = BeanUtils.toBean(studentSelectionProjectService.getStudentSelectionProject(projectId), studentSelectionProjectSaveReqVO.class);
         studentSelectionProjectSaveReqVO project = BeanUtils.toBean(studentSelectionProjectService.getStudentSelectionProject(projectId), studentSelectionProjectSaveReqVO.class);
+        if (project==null){
+            return error(1,"不存在该项目");
+        }
         List<Long> supervisorIds = project.getSupervisorIds();
         List<Long> supervisorIds = project.getSupervisorIds();
         Set<Long> newSupervisorIds = new HashSet<>(supervisorIds);
         Set<Long> newSupervisorIds = new HashSet<>(supervisorIds);
         List<AdminUserDO> supervisors = adminUserService.getUserList(newSupervisorIds);
         List<AdminUserDO> supervisors = adminUserService.getUserList(newSupervisorIds);

+ 23 - 0
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/studentSelectionProject/vo/studentPageReqVO.java

@@ -0,0 +1,23 @@
+package cn.iocoder.yudao.module.system.controller.admin.studentSelectionProject.vo;
+
+import cn.iocoder.yudao.framework.common.pojo.PageParam;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.ToString;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.time.LocalDateTime;
+
+import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
+
+@Schema(description = "管理后台 -学生互选项目 page VO")
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+public class studentPageReqVO extends PageParam {
+
+    @Schema(description = "学生年级")
+    private String studentGrade;
+
+}

+ 1 - 1
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/supervisorSelectionSetting/supervisorSelectionSettingController.java

@@ -132,7 +132,7 @@ public class supervisorSelectionSettingController {
     }
     }
 
 
     @GetMapping("/getSupervisorInfo")
     @GetMapping("/getSupervisorInfo")
-    @Operation(summary = "导师这个项目的信息")
+    @Operation(summary = "导师这个项目的设置信息")
     public CommonResult<supervisorSelectionSettingDO> getSupervisorInfo(@RequestParam("supervisorId") Integer supervisorId,@RequestParam("projectId") Long projectId) {
     public CommonResult<supervisorSelectionSettingDO> getSupervisorInfo(@RequestParam("supervisorId") Integer supervisorId,@RequestParam("projectId") Long projectId) {
         return success(supervisorSelectionSettingService.getSettingBySupervisorIdAndProjectId(Long.valueOf(supervisorId),projectId));
         return success(supervisorSelectionSettingService.getSettingBySupervisorIdAndProjectId(Long.valueOf(supervisorId),projectId));
     }
     }

+ 1 - 1
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/supervisorSelectionSetting/vo/supervisorBookRespVO.java

@@ -12,7 +12,7 @@ import java.time.LocalDate;
 public class supervisorBookRespVO {
 public class supervisorBookRespVO {
 
 
     @Schema(description = "项目")
     @Schema(description = "项目")
-    private Integer projectId;
+    private Long projectId;
 
 
     @Schema(description = "导师Id")
     @Schema(description = "导师Id")
     private String supervisorId;
     private String supervisorId;

+ 1 - 1
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/supervisorSelectionSetting/vo/supervisorSelectionSettingRespVO.java

@@ -19,7 +19,7 @@ public class supervisorSelectionSettingRespVO {
 
 
     @Schema(description = "项目id", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
     @Schema(description = "项目id", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
     @ExcelProperty("项目id")
     @ExcelProperty("项目id")
-    private Integer projectId;
+    private Long projectId;
 
 
     @Schema(description = "导师id", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
     @Schema(description = "导师id", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
     @ExcelProperty("导师id")
     @ExcelProperty("导师id")

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

@@ -11,6 +11,7 @@ import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
 import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils;
 import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils;
 import cn.iocoder.yudao.module.system.controller.admin.dept.vo.dept.DeptListReqVO;
 import cn.iocoder.yudao.module.system.controller.admin.dept.vo.dept.DeptListReqVO;
 import cn.iocoder.yudao.module.system.controller.admin.dept.vo.dept.DeptSaveReqVO;
 import cn.iocoder.yudao.module.system.controller.admin.dept.vo.dept.DeptSaveReqVO;
+import cn.iocoder.yudao.module.system.controller.admin.studentSelectionProject.vo.studentPageReqVO;
 import cn.iocoder.yudao.module.system.controller.admin.studentSelectionProject.vo.studentSelectionProjectSaveReqVO;
 import cn.iocoder.yudao.module.system.controller.admin.studentSelectionProject.vo.studentSelectionProjectSaveReqVO;
 import cn.iocoder.yudao.module.system.controller.admin.user.vo.user.*;
 import cn.iocoder.yudao.module.system.controller.admin.user.vo.user.*;
 
 
@@ -334,7 +335,7 @@ public class UserController {
                 if (!(user.getExternalSupervisorId() == null || user.getExternalSupervisorId() == 0)) {
                 if (!(user.getExternalSupervisorId() == null || user.getExternalSupervisorId() == 0)) {
                     AdminUserDO externalSupervisor = userService.getUser(user.getExternalSupervisorId());
                     AdminUserDO externalSupervisor = userService.getUser(user.getExternalSupervisorId());
                     if (externalSupervisor != null) {
                     if (externalSupervisor != null) {
-                        user.setWorkSupervisor(externalSupervisor.getNickname());
+                        user.setExternalSupervisor(externalSupervisor.getNickname());//校外导师名字
                     }
                     }
                 }
                 }
             }
             }
@@ -352,6 +353,17 @@ public class UserController {
                 }
                 }
             }
             }
         }
         }
+//      //查询用户的选择状态()
+        LocalDate date =LocalDate.now();
+        Integer nextYear =date.getYear()+1 ;
+        studentSelectionProjectSaveReqVO project =new studentSelectionProjectSaveReqVO();
+        studentSelectionProjectSaveReqVO project1 = BeanUtils.toBean(studentSelectionProjectService.getStudentSelectionProjectByYear(nextYear),studentSelectionProjectSaveReqVO.class);
+        studentSelectionProjectSaveReqVO project2 = BeanUtils.toBean(studentSelectionProjectService.getStudentSelectionProjectByYear(date.getYear()),studentSelectionProjectSaveReqVO.class);
+        project =project1==null?project2:project1;
+        if ((user.getGrade()!=null&&!user.getGrade().isEmpty())&&user.getGrade().equals(project.getStudentGrade())){
+            user.setSelectStatus(userService.getUserSelectStatus(id,project.getId()));
+        }
+
         // 拼接数据
         // 拼接数据
         DeptDO dept = deptService.getDept(user.getDeptId());
         DeptDO dept = deptService.getDept(user.getDeptId());
         return success(UserConvert.INSTANCE.convert(user, dept));
         return success(UserConvert.INSTANCE.convert(user, dept));
@@ -607,7 +619,11 @@ public class UserController {
         AdminUserDO loginUser =userService.getUser(loginId);
         AdminUserDO loginUser =userService.getUser(loginId);
         Set<Long> roleIds = permissionService.getUserRoleIdListByUserId(loginId);
         Set<Long> roleIds = permissionService.getUserRoleIdListByUserId(loginId);
 
 
-        studentSelectionProjectSaveReqVO project = BeanUtils.toBean(studentSelectionProjectService.getStudentSelectionProjectByYear(date.getYear()),studentSelectionProjectSaveReqVO.class);
+        Integer nextYear =date.getYear()+1 ;
+        studentSelectionProjectSaveReqVO project =new studentSelectionProjectSaveReqVO();
+        studentSelectionProjectSaveReqVO project1 = BeanUtils.toBean(studentSelectionProjectService.getStudentSelectionProjectByYear(nextYear),studentSelectionProjectSaveReqVO.class);
+        studentSelectionProjectSaveReqVO project2 = BeanUtils.toBean(studentSelectionProjectService.getStudentSelectionProjectByYear(date.getYear()),studentSelectionProjectSaveReqVO.class);
+        project =project1==null?project2:project1;
         if (project==null){
         if (project==null){
             return error(1,"请检查今年是否创建了项目");
             return error(1,"请检查今年是否创建了项目");
         }
         }
@@ -638,8 +654,14 @@ public class UserController {
         PopDo PD =userService.getPopData();
         PopDo PD =userService.getPopData();
         if (popData.getIsStudent() != null || popData.getIsSupervisor() != null) {
         if (popData.getIsStudent() != null || popData.getIsSupervisor() != null) {
             userService.updatePop(popData);
             userService.updatePop(popData);
+
             LocalDate date =LocalDate.now();
             LocalDate date =LocalDate.now();
-            studentSelectionProjectSaveReqVO project = BeanUtils.toBean(studentSelectionProjectService.getStudentSelectionProjectByYear(date.getYear()),studentSelectionProjectSaveReqVO.class);
+            Integer nextYear =date.getYear()+1 ;
+            studentSelectionProjectSaveReqVO project =new studentSelectionProjectSaveReqVO();
+            studentSelectionProjectSaveReqVO project1 = BeanUtils.toBean(studentSelectionProjectService.getStudentSelectionProjectByYear(nextYear),studentSelectionProjectSaveReqVO.class);
+            studentSelectionProjectSaveReqVO project2 = BeanUtils.toBean(studentSelectionProjectService.getStudentSelectionProjectByYear(date.getYear()),studentSelectionProjectSaveReqVO.class);
+            project =project1==null?project2:project1;
+
             if (project==null){
             if (project==null){
                 return error(1,"请检查今年是否创建了项目");
                 return error(1,"请检查今年是否创建了项目");
             }
             }
@@ -680,4 +702,40 @@ public class UserController {
         return success( userService.getPopData());
         return success( userService.getPopData());
     }
     }
 
 
+
+    @GetMapping("/getPassedStudentsPage")
+    @Operation(summary = "获取今年项目学生通过分页")
+    @PreAuthorize("@ss.hasPermission('system:user:getPassedStudentsPage')")
+    public CommonResult<PageResult<AdminUserDO>> getPassedStudentsPage(@Valid UserPageReqVO pageReqVO) {
+        LocalDate date =LocalDate.now();
+        Integer nextYear =date.getYear()+1 ;
+        studentSelectionProjectSaveReqVO project =new studentSelectionProjectSaveReqVO();
+        studentSelectionProjectSaveReqVO project1 = BeanUtils.toBean(studentSelectionProjectService.getStudentSelectionProjectByYear(nextYear),studentSelectionProjectSaveReqVO.class);
+        studentSelectionProjectSaveReqVO project2 = BeanUtils.toBean(studentSelectionProjectService.getStudentSelectionProjectByYear(date.getYear()),studentSelectionProjectSaveReqVO.class);
+        project =project1==null?project2:project1;
+
+        pageReqVO.setGrade(project.getStudentGrade());
+        pageReqVO.setUserType("1");
+
+        PageResult<AdminUserDO>  result = userService.getPassedStudentsPage(pageReqVO);
+        return success(result);
+    }
+
+    @GetMapping("/getUnPassedStudentsPage")
+    @Operation(summary = "获取今年互选项目学生未通过分页")
+    @PreAuthorize("@ss.hasPermission('system:user:getUnPassedStudentsPage')")
+    public CommonResult<PageResult<AdminUserDO>> getUnPassedStudentsPage(@Valid UserPageReqVO reqVO) {
+        LocalDate date =LocalDate.now();
+        Integer nextYear =date.getYear()+1 ;
+        studentSelectionProjectSaveReqVO project =new studentSelectionProjectSaveReqVO();
+        studentSelectionProjectSaveReqVO project1 = BeanUtils.toBean(studentSelectionProjectService.getStudentSelectionProjectByYear(nextYear),studentSelectionProjectSaveReqVO.class);
+        studentSelectionProjectSaveReqVO project2 = BeanUtils.toBean(studentSelectionProjectService.getStudentSelectionProjectByYear(date.getYear()),studentSelectionProjectSaveReqVO.class);
+        project =project1==null?project2:project1;
+
+        reqVO.setGrade(project.getStudentGrade());
+        reqVO.setUserType("1");
+        PageResult<AdminUserDO>  result = userService.getUnPassedStudentsPage(reqVO);
+        return success(result);
+    }
+
 }
 }

+ 14 - 1
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/UserProfileController.java

@@ -3,7 +3,9 @@ package cn.iocoder.yudao.module.system.controller.admin.user;
 import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.collection.CollUtil;
 import cn.iocoder.yudao.framework.common.enums.UserTypeEnum;
 import cn.iocoder.yudao.framework.common.enums.UserTypeEnum;
 import cn.iocoder.yudao.framework.common.pojo.CommonResult;
 import cn.iocoder.yudao.framework.common.pojo.CommonResult;
+import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
 import cn.iocoder.yudao.framework.datapermission.core.annotation.DataPermission;
 import cn.iocoder.yudao.framework.datapermission.core.annotation.DataPermission;
+import cn.iocoder.yudao.module.system.controller.admin.studentSelectionProject.vo.studentSelectionProjectSaveReqVO;
 import cn.iocoder.yudao.module.system.controller.admin.user.vo.profile.UserProfileRespVO;
 import cn.iocoder.yudao.module.system.controller.admin.user.vo.profile.UserProfileRespVO;
 import cn.iocoder.yudao.module.system.controller.admin.user.vo.profile.UserProfileUpdatePasswordReqVO;
 import cn.iocoder.yudao.module.system.controller.admin.user.vo.profile.UserProfileUpdatePasswordReqVO;
 import cn.iocoder.yudao.module.system.controller.admin.user.vo.profile.UserProfileUpdateReqVO;
 import cn.iocoder.yudao.module.system.controller.admin.user.vo.profile.UserProfileUpdateReqVO;
@@ -78,9 +80,20 @@ public class UserProfileController {
             if (supervisorUser!=null) {
             if (supervisorUser!=null) {
                 String supervisor = supervisorUser.getNickname();
                 String supervisor = supervisorUser.getNickname();
                 user.setSupervisor(supervisor);
                 user.setSupervisor(supervisor);
-                System.out.println("学生基本信息" + user);
             }
             }
         }
         }
+
+        //获取互选项目用户的选择状态()
+        LocalDate date =LocalDate.now();
+        Integer nextYear =date.getYear()+1 ;
+        studentSelectionProjectSaveReqVO project =new studentSelectionProjectSaveReqVO();
+        studentSelectionProjectSaveReqVO project1 = BeanUtils.toBean(studentSelectionProjectService.getStudentSelectionProjectByYear(nextYear),studentSelectionProjectSaveReqVO.class);
+        studentSelectionProjectSaveReqVO project2 = BeanUtils.toBean(studentSelectionProjectService.getStudentSelectionProjectByYear(date.getYear()),studentSelectionProjectSaveReqVO.class);
+        project =project1==null?project2:project1;
+        if ((user.getGrade()!=null&&!user.getGrade().isEmpty())&&user.getGrade().equals(project.getStudentGrade())){
+            user.setSelectStatus(userService.getUserSelectStatus(user.getId(),project.getId()));
+        }
+
         // 获得用户角色
         // 获得用户角色
         List<RoleDO> userRoles = roleService.getRoleListFromCache(permissionService.getUserRoleIdListByUserId(user.getId()));
         List<RoleDO> userRoles = roleService.getRoleListFromCache(permissionService.getUserRoleIdListByUserId(user.getId()));
         // 获得部门信息
         // 获得部门信息

+ 4 - 0
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/vo/profile/UserProfileRespVO.java

@@ -115,4 +115,8 @@ public class UserProfileRespVO {
     @Schema(description = "工作地点")
     @Schema(description = "工作地点")
     private String workPlace;
     private String workPlace;
 
 
+    //选择状态
+    @Schema(description = "选择状态")
+    private Integer selectStatus;
+
 }
 }

+ 4 - 0
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/vo/user/UserRespVO.java

@@ -138,4 +138,8 @@ public class UserRespVO{
     @Schema(description = "合作导师名称")
     @Schema(description = "合作导师名称")
     private String workSupervisor;
     private String workSupervisor;
 
 
+    //选择状态
+    @Schema(description = "选择状态")
+    private Integer selectStatus;
+
 }
 }

+ 3 - 2
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/user/AdminUserDO.java

@@ -188,8 +188,9 @@ public class AdminUserDO extends TenantBaseDO {
 
 
     @TableField(exist = false)
     @TableField(exist = false)
     private String deptName;
     private String deptName;
-    
-
 
 
+    //选择状态
+    @TableField(exist = false)
+    private Integer selectStatus;
 
 
 }
 }

+ 100 - 15
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/studentSelectSupervisorRecord/studentSelectSupervisorRecordMapper.java

@@ -22,6 +22,10 @@ import org.apache.ibatis.annotations.Update;
 @Mapper
 @Mapper
 public interface studentSelectSupervisorRecordMapper extends BaseMapperX<studentSelectSupervisorRecordDO> {
 public interface studentSelectSupervisorRecordMapper extends BaseMapperX<studentSelectSupervisorRecordDO> {
 
 
+    // 部分能传null
+    void updateRecordNull(@Param("recordDO") studentSelectSupervisorRecordDO recordDO);
+
+    //招生详情和导师的项目详情
     default PageResult<studentSelectSupervisorRecordDO> selectPage(StudentSelectSupervisorRecordPageReqVO reqVO, Set<Long>roleIds, AdminUserDO loginUser) {
     default PageResult<studentSelectSupervisorRecordDO> selectPage(StudentSelectSupervisorRecordPageReqVO reqVO, Set<Long>roleIds, AdminUserDO loginUser) {
 
 
         MPJLambdaWrapperX<studentSelectSupervisorRecordDO> queryWrapperX =new MPJLambdaWrapperX<>();
         MPJLambdaWrapperX<studentSelectSupervisorRecordDO> queryWrapperX =new MPJLambdaWrapperX<>();
@@ -46,17 +50,21 @@ public interface studentSelectSupervisorRecordMapper extends BaseMapperX<student
                 .eqIfExists(studentSelectSupervisorRecordDO::getStudentSignature, reqVO.getStudentSignature())
                 .eqIfExists(studentSelectSupervisorRecordDO::getStudentSignature, reqVO.getStudentSignature())
                 .eqIfExists(studentSelectSupervisorRecordDO::getSupervisorSignature, reqVO.getSupervisorSignature())
                 .eqIfExists(studentSelectSupervisorRecordDO::getSupervisorSignature, reqVO.getSupervisorSignature())
                 .eqIfExists(studentSelectSupervisorRecordDO::getExternalSupervisorId, reqVO.getExternalSupervisorId())
                 .eqIfExists(studentSelectSupervisorRecordDO::getExternalSupervisorId, reqVO.getExternalSupervisorId())
-                .orderByDesc(studentSelectSupervisorRecordDO::getId);
+                .orderByDesc(studentSelectSupervisorRecordDO::getCreateTime);
 
 
-        if (roleIds.contains(113L)){
+        if (roleIds.contains(113L)){//导师看自己的待处理,同意,退回
             queryWrapperX.eqIfPresent(studentSelectSupervisorRecordDO::getSupervisorId,loginUser.getId())
             queryWrapperX.eqIfPresent(studentSelectSupervisorRecordDO::getSupervisorId,loginUser.getId())
                     .inIfPresent(studentSelectSupervisorRecordDO::getSelectType,1,2,3)
                     .inIfPresent(studentSelectSupervisorRecordDO::getSelectType,1,2,3)
                     .orderBy(true, true, studentSelectSupervisorRecordDO::getSelectType)
                     .orderBy(true, true, studentSelectSupervisorRecordDO::getSelectType)
                     .last("ORDER BY FIELD(select_type, 1,2,3)");
                     .last("ORDER BY FIELD(select_type, 1,2,3)");
-        }else if (roleIds.contains(114L)){//学院看所有的编辑、待处理、退回记录
-            queryWrapperX.inIfPresent(studentSelectSupervisorRecordDO::getSelectType,0,1,2,3,4)
-                    .orderBy(true, true, studentSelectSupervisorRecordDO::getSelectType)
-                    .last("ORDER BY FIELD(select_type, 4, 1, 3, 2,0)");
+        }else if (roleIds.contains(114L)){
+            if ( reqVO.getSupervisorId()!=null&&reqVO.getSupervisorId()!=0) {//招生详情学院看对应导师的同意的
+                queryWrapperX.eqIfPresent(studentSelectSupervisorRecordDO::getSelectType, 2);
+            }else {//互选记录看所有
+                queryWrapperX.inIfPresent(studentSelectSupervisorRecordDO::getSelectType,0,1,2,3)
+                        .orderBy(true, true, studentSelectSupervisorRecordDO::getSelectType)
+                        .last("ORDER BY FIELD(select_type,2,1,3,0)");
+            }
         }else if (roleIds.contains(112L)){//学生看自己的
         }else if (roleIds.contains(112L)){//学生看自己的
             queryWrapperX.eqIfPresent(studentSelectSupervisorRecordDO::getStudentId,loginUser.getId());
             queryWrapperX.eqIfPresent(studentSelectSupervisorRecordDO::getStudentId,loginUser.getId());
         }
         }
@@ -84,23 +92,96 @@ public interface studentSelectSupervisorRecordMapper extends BaseMapperX<student
                 .eqIfExists(studentSelectSupervisorRecordDO::getStudentSignature, reqVO.getStudentSignature())
                 .eqIfExists(studentSelectSupervisorRecordDO::getStudentSignature, reqVO.getStudentSignature())
                 .eqIfExists(studentSelectSupervisorRecordDO::getSupervisorSignature, reqVO.getSupervisorSignature())
                 .eqIfExists(studentSelectSupervisorRecordDO::getSupervisorSignature, reqVO.getSupervisorSignature())
                 .eqIfExists(studentSelectSupervisorRecordDO::getExternalSupervisorId, reqVO.getExternalSupervisorId())
                 .eqIfExists(studentSelectSupervisorRecordDO::getExternalSupervisorId, reqVO.getExternalSupervisorId())
-                .orderByDesc(studentSelectSupervisorRecordDO::getId);
-        if (roleIds.contains(113L)){
+                .orderByDesc(studentSelectSupervisorRecordDO::getCreateTime);
+        if (roleIds.contains(113L)){//导师看自己的待处理,同意,退回
             queryWrapperX.eqIfPresent(studentSelectSupervisorRecordDO::getSupervisorId,loginUser.getId())
             queryWrapperX.eqIfPresent(studentSelectSupervisorRecordDO::getSupervisorId,loginUser.getId())
-                            .inIfPresent(studentSelectSupervisorRecordDO::getSelectType,1,2,3)
-                            .orderBy(true, true, studentSelectSupervisorRecordDO::getSelectType)
-                            .last("ORDER BY FIELD(select_type, 1,2,3)");
-        }else if (roleIds.contains(114L)){//学院看所有的编辑、待处理、退回记录
-            queryWrapperX.inIfPresent(studentSelectSupervisorRecordDO::getSelectType,0,1,2,3,4)
+                    .inIfPresent(studentSelectSupervisorRecordDO::getSelectType,1,2,3)
                     .orderBy(true, true, studentSelectSupervisorRecordDO::getSelectType)
                     .orderBy(true, true, studentSelectSupervisorRecordDO::getSelectType)
-                            .last("ORDER BY FIELD(select_type, 4, 1, 3, 2)");
-
+                    .last("ORDER BY FIELD(select_type, 1,2,3)");
+        }else if (roleIds.contains(114L)){//
+            if ( reqVO.getSupervisorId()!=null&&reqVO.getSupervisorId()!=0) {//招生详情
+                queryWrapperX.eqIfPresent(studentSelectSupervisorRecordDO::getSelectType, 2);
+            }else {//互选记录看所有
+                queryWrapperX.inIfPresent(studentSelectSupervisorRecordDO::getSelectType,0,1,2,3)
+                        .orderBy(true, true, studentSelectSupervisorRecordDO::getSelectType)
+                        .last("ORDER BY FIELD(select_type,2,1,3,0)");
+            }
         }else if (roleIds.contains(112L)){//学生看自己的
         }else if (roleIds.contains(112L)){//学生看自己的
             queryWrapperX.eqIfPresent(studentSelectSupervisorRecordDO::getStudentId,loginUser.getId());
             queryWrapperX.eqIfPresent(studentSelectSupervisorRecordDO::getStudentId,loginUser.getId());
         }
         }
         return selectList(queryWrapperX);
         return selectList(queryWrapperX);
     }
     }
 
 
+    //导师待审批
+    default PageResult<studentSelectSupervisorRecordDO> getPendingApprovalRecordPage(StudentSelectSupervisorRecordPageReqVO reqVO, Set<Long>roleIds, AdminUserDO loginUser) {
+
+        MPJLambdaWrapperX<studentSelectSupervisorRecordDO> queryWrapperX =new MPJLambdaWrapperX<>();
+
+        queryWrapperX
+                .betweenIfPresent(studentSelectSupervisorRecordDO::getSupervisorApproveTime, reqVO.getSupervisorApproveTime())
+                .selectAll(studentSelectSupervisorRecordDO.class)
+                .leftJoin(AdminUserDO.class,AdminUserDO::getId,studentSelectSupervisorRecordDO::getStudentId)//关联学生信息
+                .leftJoin(studentSelectionProjectDO.class,studentSelectionProjectDO::getId,studentSelectSupervisorRecordDO::getProjectId)//关联项目
+                .selectAs(AdminUserDO::getNickname,studentSelectSupervisorRecordDO::getStudentName)//学生姓名
+                .selectAs(AdminUserDO::getGrade,studentSelectSupervisorRecordDO::getStudentGrade)//学生年级
+                .selectAs(AdminUserDO::getMasterType,studentSelectSupervisorRecordDO::getMasterType)//硕士类型
+                .selectAs(AdminUserDO::getMajor,studentSelectSupervisorRecordDO::getMajor)//专业
+                .selectAs(AdminUserDO::getIntroduction,studentSelectSupervisorRecordDO::getIntroduction)//简历
+                .selectAs(studentSelectionProjectDO::getProjectName,studentSelectSupervisorRecordDO::getProjectName)//项目名称
+                .likeIfExists(AdminUserDO::getNickname,reqVO.getStudentName())//学生姓名
+                .eqIfExists(AdminUserDO::getGrade,reqVO.getStudentGrade())//学生年级
+                .eqIfExists(studentSelectSupervisorRecordDO::getProjectId, reqVO.getProjectId())
+                .eqIfExists(studentSelectSupervisorRecordDO::getStudentId, reqVO.getStudentId())
+                .eqIfExists(studentSelectSupervisorRecordDO::getSupervisorId, reqVO.getSupervisorId())//学院看招生情况会传导师id
+                .eqIfExists(studentSelectSupervisorRecordDO::getSelectType, reqVO.getSelectType())
+                .eqIfExists(studentSelectSupervisorRecordDO::getStudentSignature, reqVO.getStudentSignature())
+                .eqIfExists(studentSelectSupervisorRecordDO::getSupervisorSignature, reqVO.getSupervisorSignature())
+                .eqIfExists(studentSelectSupervisorRecordDO::getExternalSupervisorId, reqVO.getExternalSupervisorId())
+                .orderByDesc(studentSelectSupervisorRecordDO::getCreateTime);
+
+        if (roleIds.contains(113L)){//导师看自己的待处理
+            queryWrapperX.eqIfPresent(studentSelectSupervisorRecordDO::getSupervisorId,loginUser.getId())
+                    .eqIfPresent(studentSelectSupervisorRecordDO::getSelectType,1);
+        }
+        return selectPage(reqVO,queryWrapperX);
+    }
+
+    //导师已审批
+    default PageResult<studentSelectSupervisorRecordDO> getApprovedRecordPage(StudentSelectSupervisorRecordPageReqVO reqVO, Set<Long>roleIds, AdminUserDO loginUser) {
+
+        MPJLambdaWrapperX<studentSelectSupervisorRecordDO> queryWrapperX =new MPJLambdaWrapperX<>();
+
+        queryWrapperX
+                .betweenIfPresent(studentSelectSupervisorRecordDO::getSupervisorApproveTime, reqVO.getSupervisorApproveTime())
+                .selectAll(studentSelectSupervisorRecordDO.class)
+                .leftJoin(AdminUserDO.class,AdminUserDO::getId,studentSelectSupervisorRecordDO::getStudentId)//关联学生信息
+                .leftJoin(studentSelectionProjectDO.class,studentSelectionProjectDO::getId,studentSelectSupervisorRecordDO::getProjectId)//关联项目
+                .selectAs(AdminUserDO::getNickname,studentSelectSupervisorRecordDO::getStudentName)//学生姓名
+                .selectAs(AdminUserDO::getGrade,studentSelectSupervisorRecordDO::getStudentGrade)//学生年级
+                .selectAs(AdminUserDO::getMasterType,studentSelectSupervisorRecordDO::getMasterType)//硕士类型
+                .selectAs(AdminUserDO::getMajor,studentSelectSupervisorRecordDO::getMajor)//专业
+                .selectAs(AdminUserDO::getIntroduction,studentSelectSupervisorRecordDO::getIntroduction)//简历
+                .selectAs(studentSelectionProjectDO::getProjectName,studentSelectSupervisorRecordDO::getProjectName)//项目名称
+                .likeIfExists(AdminUserDO::getNickname,reqVO.getStudentName())//学生姓名
+                .eqIfExists(AdminUserDO::getGrade,reqVO.getStudentGrade())//学生年级
+                .eqIfExists(studentSelectSupervisorRecordDO::getProjectId, reqVO.getProjectId())
+                .eqIfExists(studentSelectSupervisorRecordDO::getStudentId, reqVO.getStudentId())
+                .eqIfExists(studentSelectSupervisorRecordDO::getSupervisorId, reqVO.getSupervisorId())//学院看招生情况会传导师id
+                .eqIfExists(studentSelectSupervisorRecordDO::getSelectType, reqVO.getSelectType())
+                .eqIfExists(studentSelectSupervisorRecordDO::getStudentSignature, reqVO.getStudentSignature())
+                .eqIfExists(studentSelectSupervisorRecordDO::getSupervisorSignature, reqVO.getSupervisorSignature())
+                .eqIfExists(studentSelectSupervisorRecordDO::getExternalSupervisorId, reqVO.getExternalSupervisorId())
+                .orderByDesc(studentSelectSupervisorRecordDO::getCreateTime);
+
+        if (roleIds.contains(113L)){//导师看自己的同意和退回
+            queryWrapperX.eqIfPresent(studentSelectSupervisorRecordDO::getSupervisorId,loginUser.getId())
+                    .inIfPresent(studentSelectSupervisorRecordDO::getSelectType,2,3);
+        }
+        return selectPage(reqVO,queryWrapperX);
+    }
+
+
+
     //只能查一直只有一条记录的,同意/未处理
     //只能查一直只有一条记录的,同意/未处理
     studentSelectSupervisorRecordDO getRecordByStudentIdAndSupervisorId(
     studentSelectSupervisorRecordDO getRecordByStudentIdAndSupervisorId(
             @Param("projectId") Long projectId,
             @Param("projectId") Long projectId,
@@ -120,4 +201,8 @@ public interface studentSelectSupervisorRecordMapper extends BaseMapperX<student
     @Select("SELECT supervisor_signature FROM student_select_supervisor_record WHERE supervisor_id=#{supervisorId} AND select_type =2 AND supervisor_signature IS NOT NULL AND supervisor_signature != '' AND deleted =0 ORDER BY supervisor_sign_date DESC LIMIT 1")
     @Select("SELECT supervisor_signature FROM student_select_supervisor_record WHERE supervisor_id=#{supervisorId} AND select_type =2 AND supervisor_signature IS NOT NULL AND supervisor_signature != '' AND deleted =0 ORDER BY supervisor_sign_date DESC LIMIT 1")
     String getSupervisorSignatureById(@Param("supervisorId") Long supervisorId);
     String getSupervisorSignatureById(@Param("supervisorId") Long supervisorId);
 
 
+    @Update("UPDATE student_select_supervisor_record SET deleted = 1 WHERE project_id = #{projectId} AND deleted = 0")
+    void deleteRecordsByProjectId(@Param("projectId") Long projectId);
+
+
 }
 }

+ 2 - 1
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/studentSelectionProject/studentSelectionProjectMapper.java

@@ -3,6 +3,8 @@ package cn.iocoder.yudao.module.system.dal.mysql.studentSelectionProject;
 import cn.iocoder.yudao.framework.common.pojo.PageResult;
 import cn.iocoder.yudao.framework.common.pojo.PageResult;
 import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
 import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
 import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
 import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
+import cn.iocoder.yudao.framework.mybatis.core.query.MPJLambdaWrapperX;
+import cn.iocoder.yudao.module.system.dal.dataobject.studentSelectSupervisorRecord.studentSelectSupervisorRecordDO;
 import cn.iocoder.yudao.module.system.dal.dataobject.studentSelectionProject.studentSelectionProjectDO;
 import cn.iocoder.yudao.module.system.dal.dataobject.studentSelectionProject.studentSelectionProjectDO;
 import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO;
 import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Mapper;
@@ -39,7 +41,6 @@ public interface studentSelectionProjectMapper extends BaseMapperX<studentSelect
         }else if (roleIds.contains(114L)){//学院
         }else if (roleIds.contains(114L)){//学院
 
 
         }
         }
-
         return selectPage(reqVO,queryWrapperX);
         return selectPage(reqVO,queryWrapperX);
     }
     }
     @Select("SELECT * FROM supervisor_student_selection_project WHERE YEAR(create_time) = #{year} AND deleted =0")
     @Select("SELECT * FROM supervisor_student_selection_project WHERE YEAR(create_time) = #{year} AND deleted =0")

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

@@ -49,6 +49,8 @@ public interface supervisorSelectionSettingMapper extends BaseMapperX<supervisor
 //    @Select("SELECT * FROM supervisor_selection_setting WHERE supervisor_id = #{supervisorId} AND project_id = #{projectId} AND deleted =0")
 //    @Select("SELECT * FROM supervisor_selection_setting WHERE supervisor_id = #{supervisorId} AND project_id = #{projectId} AND deleted =0")
 //    supervisorSelectionSettingDO getSettingBySupervisorIdAndProjectId(@Param("supervisorId") Long supervisorId,@Param("projectId") Integer projectId);
 //    supervisorSelectionSettingDO getSettingBySupervisorIdAndProjectId(@Param("supervisorId") Long supervisorId,@Param("projectId") Integer projectId);
 
 
+     void deleteSettingsBySupervisorIds(@Param("projectId")Long projectId,@Param("supervisorIds") List<Long> supervisorIds);
+
 
 
 
 
 }
 }

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

@@ -5,9 +5,12 @@ import cn.iocoder.yudao.framework.common.pojo.PageResult;
 import cn.iocoder.yudao.framework.mybatis.core.enums.SqlConstants;
 import cn.iocoder.yudao.framework.mybatis.core.enums.SqlConstants;
 import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
 import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
 import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
 import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
+import cn.iocoder.yudao.framework.mybatis.core.query.MPJLambdaWrapperX;
 import cn.iocoder.yudao.framework.security.core.LoginUser;
 import cn.iocoder.yudao.framework.security.core.LoginUser;
 import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils;
 import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils;
+import cn.iocoder.yudao.module.system.controller.admin.studentSelectionProject.vo.studentPageReqVO;
 import cn.iocoder.yudao.module.system.controller.admin.user.vo.user.UserPageReqVO;
 import cn.iocoder.yudao.module.system.controller.admin.user.vo.user.UserPageReqVO;
+import cn.iocoder.yudao.module.system.dal.dataobject.studentSelectSupervisorRecord.studentSelectSupervisorRecordDO;
 import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO;
 import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO;
 import cn.iocoder.yudao.module.system.dal.dataobject.user.PopDo;
 import cn.iocoder.yudao.module.system.dal.dataobject.user.PopDo;
 import cn.iocoder.yudao.module.system.dal.dataobject.userAchievement.UserAchievementDO;
 import cn.iocoder.yudao.module.system.dal.dataobject.userAchievement.UserAchievementDO;
@@ -21,6 +24,7 @@ import org.apache.ibatis.annotations.*;
 
 
 import javax.annotation.Resource;
 import javax.annotation.Resource;
 import java.util.*;
 import java.util.*;
+import java.util.stream.Collectors;
 
 
 @Mapper
 @Mapper
 public interface AdminUserMapper extends BaseMapperX<AdminUserDO> {
 public interface AdminUserMapper extends BaseMapperX<AdminUserDO> {
@@ -267,7 +271,6 @@ public interface AdminUserMapper extends BaseMapperX<AdminUserDO> {
                 .likeIfPresent(AdminUserDO::getEmail,reqVO.getEmail())
                 .likeIfPresent(AdminUserDO::getEmail,reqVO.getEmail())
                 .likeIfPresent(AdminUserDO::getNickname, reqVO.getNickname())//昵称查询
                 .likeIfPresent(AdminUserDO::getNickname, reqVO.getNickname())//昵称查询
                 .likeIfPresent(AdminUserDO::getUserNumber,reqVO.getUserNumber())//学号查询
                 .likeIfPresent(AdminUserDO::getUserNumber,reqVO.getUserNumber())//学号查询
-                .likeIfPresent(AdminUserDO::getWorkPlace,reqVO.getWorkPlace())
                 .likeIfPresent(AdminUserDO::getWorkPlace,reqVO.getWorkPlace())//工作地点
                 .likeIfPresent(AdminUserDO::getWorkPlace,reqVO.getWorkPlace())//工作地点
                 .likeIfPresent(AdminUserDO::getMajor, reqVO.getMajor())//专业
                 .likeIfPresent(AdminUserDO::getMajor, reqVO.getMajor())//专业
                 .eqIfPresent(AdminUserDO::getMasterType, reqVO.getMasterType())//专硕
                 .eqIfPresent(AdminUserDO::getMasterType, reqVO.getMasterType())//专硕
@@ -369,6 +372,72 @@ public interface AdminUserMapper extends BaseMapperX<AdminUserDO> {
     @Update("UPDATE system_users SET introduction = #{introduction} WHERE id = #{id}")
     @Update("UPDATE system_users SET introduction = #{introduction} WHERE id = #{id}")
     void updateUserIntroduction(@Param("id") Long id, @Param("introduction") String introduction);
     void updateUserIntroduction(@Param("id") Long id, @Param("introduction") String introduction);
 
 
+    //找当年级下导师值为空的在校生
     @Select("SELECT * FROM system_users WHERE (supervisor_id = 0 OR supervisor_id IS NULL) AND grade = #{grade} AND user_type = '1' AND deleted = 0")
     @Select("SELECT * FROM system_users WHERE (supervisor_id = 0 OR supervisor_id IS NULL) AND grade = #{grade} AND user_type = '1' AND deleted = 0")
     List<AdminUserDO> getStudentAndSupervisorNull(@Param("grade") String grade);
     List<AdminUserDO> getStudentAndSupervisorNull(@Param("grade") String grade);
+
+    //初始化当年级下的校生的导师id
+    @Update("UPDATE system_users " +
+            "SET supervisor_id = NULL, external_supervisor_id = NULL " +
+            "WHERE supervisor_id IS NOT NULL AND supervisor_id != 0 " +
+            "AND grade = #{grade} " +
+            "AND user_type = '1' " +//在校生
+            "AND deleted = 0")
+    void updateStudentSupervisorId(@Param("grade") String grade);
+
+    //已通过学生
+    default PageResult<AdminUserDO> getPassedStudentsPage(UserPageReqVO pageReqVO) {
+
+        MPJLambdaWrapperX<AdminUserDO> mpjLambdaWrapperX = new MPJLambdaWrapperX<>();
+
+        // 使用 select 语句返回计算出来的 selectStatus 字段
+        mpjLambdaWrapperX
+                .select("t.*, CASE " +
+                        "    WHEN COALESCE(MAX(t1.select_type), 0) = 2 THEN 2" +
+                        "    WHEN COALESCE(MAX(t1.select_type), 0) = 1 THEN 1 " + // 带处理
+                        "    ELSE 0 " + // 未提交
+                        "END AS selectStatus")  // 将 selectStatus 返回
+                .leftJoin("student_select_supervisor_record t1 on t1.student_id = t.id and t1.deleted = 0")
+                .eqIfExists(AdminUserDO::getUserType, 1)
+                .eqIfExists(AdminUserDO::getGrade, pageReqVO.getGrade())
+                .likeIfExists(AdminUserDO::getMobile, pageReqVO.getMobile())
+                .likeIfExists(AdminUserDO::getStatus, pageReqVO.getStatus())
+                .eqIfExists(AdminUserDO::getSupervisorId, pageReqVO.getSupervisorId()) // 导师查询
+                .likeIfExists(AdminUserDO::getEmail, pageReqVO.getEmail())
+                .likeIfExists(AdminUserDO::getNickname, pageReqVO.getNickname()) // 昵称查询
+                .likeIfExists(AdminUserDO::getUserNumber, pageReqVO.getUserNumber()) // 学号查询
+                .likeIfExists(AdminUserDO::getMajor, pageReqVO.getMajor()) // 专业
+                .eqIfExists(AdminUserDO::getMasterType, pageReqVO.getMasterType()) // 专硕
+                .orderByDesc(AdminUserDO::getId);
+
+        // 查询数据
+        PageResult<AdminUserDO> result = selectPage(pageReqVO, mpjLambdaWrapperX);
+
+        List<AdminUserDO> filteredList = result.getList().stream()
+                .filter(user -> user.getSelectStatus() == 2)  // 只保留 selectStatus 1
+                .collect(Collectors.toList());
+
+        // 重新设置过滤后的结果
+        result.setList(filteredList);
+        result.setTotal((long) filteredList.size());
+        return result;
+    }
+
+    //待处理和已提交
+
+    //未通过学生
+     List<AdminUserDO> getIsPassedStudentsPage( @Param("reqVO") UserPageReqVO reqVO,@Param("offset") Integer offset ,@Param("isPassed") Integer isPassed);
+     Long  getIsPassedStudentsPageCount( @Param("reqVO") UserPageReqVO reqVO,@Param("isPassed") Integer isPassed);
+
+
+     //获取用户选择状态
+    @Select("SELECT COALESCE(MAX(CASE " +
+            "WHEN r.select_type = 2 THEN 2 " +
+            "WHEN r.select_type = 1 THEN 1 " +
+            "ELSE 0 " +
+            "END), 0) " +
+            "FROM system_users u " +
+            "LEFT JOIN student_select_supervisor_record r ON r.student_id = u.id " +
+            "WHERE u.id = #{id} AND r.project_id =#{projectId} AND r.deleted = 0 AND u.deleted = 0")
+    Integer getUserSelectStatus(@Param("id") Long id, @Param("projectId") Long projectId);
 }
 }

+ 22 - 0
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/studentSelectSupervisorRecord/studentSelectSupervisorRecordService.java

@@ -29,6 +29,17 @@ public interface studentSelectSupervisorRecordService {
      */
      */
     void updateStudentSelectSupervisorRecord(@Valid StudentSelectSupervisorRecordSaveReqVO updateReqVO);
     void updateStudentSelectSupervisorRecord(@Valid StudentSelectSupervisorRecordSaveReqVO updateReqVO);
 
 
+    /**
+     *能传null
+     *学生签名
+     * 导师签名
+     * 导师审批时间
+     * 学生签字日期
+     * 导师签字日期
+     *
+     */
+    void updateRecordNull( @Valid StudentSelectSupervisorRecordSaveReqVO updateReqVO);
+
     /**
     /**
      * 删除师生互选记录
      * 删除师生互选记录
      *
      *
@@ -53,6 +64,15 @@ public interface studentSelectSupervisorRecordService {
     PageResult<studentSelectSupervisorRecordDO> getStudentSelectSupervisorRecordPage(StudentSelectSupervisorRecordPageReqVO pageReqVO);
     PageResult<studentSelectSupervisorRecordDO> getStudentSelectSupervisorRecordPage(StudentSelectSupervisorRecordPageReqVO pageReqVO);
 
 
     List<studentSelectSupervisorRecordDO> getStudentSelectSupervisorRecordList(StudentSelectSupervisorRecordPageReqVO pageReqVO);
     List<studentSelectSupervisorRecordDO> getStudentSelectSupervisorRecordList(StudentSelectSupervisorRecordPageReqVO pageReqVO);
+    /**
+     * 获得导师待审批分页
+     */
+    PageResult<studentSelectSupervisorRecordDO> getPendingApprovalRecordPage(StudentSelectSupervisorRecordPageReqVO pageReqVO);
+    /**
+     * 获得导师已审批分页
+     */
+    PageResult<studentSelectSupervisorRecordDO> getApprovedRecordPage(StudentSelectSupervisorRecordPageReqVO pageReqVO);
+
 
 
     studentSelectSupervisorRecordDO getRecordByStudentIdAndSupervisorId( Long projectId,Long studentId ,Long supervisorId,Integer selectType);
     studentSelectSupervisorRecordDO getRecordByStudentIdAndSupervisorId( Long projectId,Long studentId ,Long supervisorId,Integer selectType);
 
 
@@ -65,6 +85,8 @@ public interface studentSelectSupervisorRecordService {
 
 
     String getSupervisorSignatureById(Long supervisorId);
     String getSupervisorSignatureById(Long supervisorId);
 
 
+    void deleteRecordsByProjectId(Long projectId);
+
 
 
 
 
 }
 }

+ 50 - 0
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/studentSelectSupervisorRecord/studentSelectSupervisorRecordServiceImpl.java

@@ -6,6 +6,8 @@ import cn.iocoder.yudao.module.system.service.permission.PermissionService;
 import cn.iocoder.yudao.module.system.service.user.AdminUserService;
 import cn.iocoder.yudao.module.system.service.user.AdminUserService;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
 import javax.annotation.Resource;
 import javax.annotation.Resource;
+import javax.validation.Valid;
+
 import org.springframework.validation.annotation.Validated;
 import org.springframework.validation.annotation.Validated;
 
 
 import java.util.*;
 import java.util.*;
@@ -53,6 +55,15 @@ public class studentSelectSupervisorRecordServiceImpl implements studentSelectSu
         studentSelectSupervisorRecordDO updateObj = BeanUtils.toBean(updateReqVO, studentSelectSupervisorRecordDO.class);
         studentSelectSupervisorRecordDO updateObj = BeanUtils.toBean(updateReqVO, studentSelectSupervisorRecordDO.class);
         studentSelectSupervisorRecordMapper.updateById(updateObj);
         studentSelectSupervisorRecordMapper.updateById(updateObj);
     }
     }
+//    能传null
+    @Override
+    public void updateRecordNull(@Valid StudentSelectSupervisorRecordSaveReqVO updateReqVO){
+        // 校验存在
+        validateStudentSelectSupervisorRecordExists(updateReqVO.getId());
+        // 更新
+        studentSelectSupervisorRecordDO recordDO = BeanUtils.toBean(updateReqVO, studentSelectSupervisorRecordDO.class);
+        studentSelectSupervisorRecordMapper.updateRecordNull(recordDO);
+    }
 
 
     @Override
     @Override
     public void deleteStudentSelectSupervisorRecord(Long id) {
     public void deleteStudentSelectSupervisorRecord(Long id) {
@@ -105,6 +116,40 @@ public class studentSelectSupervisorRecordServiceImpl implements studentSelectSu
         return result;
         return result;
     }
     }
 
 
+    @Override
+    public PageResult<studentSelectSupervisorRecordDO> getPendingApprovalRecordPage(StudentSelectSupervisorRecordPageReqVO pageReqVO) {
+        Long loginId = SecurityFrameworkUtils.getLoginUserId();
+        AdminUserDO loginUser = adminUserService.getUser(loginId);
+        Set<Long> roleIds = permissionService.getUserRoleIdListByUserId(loginId);
+        PageResult<studentSelectSupervisorRecordDO> result =studentSelectSupervisorRecordMapper.getPendingApprovalRecordPage(pageReqVO,roleIds,loginUser);
+        result.getList().forEach(re->{
+            AdminUserDO supervisor =adminUserService.getUser(re.getSupervisorId());
+            if (supervisor!=null) {
+                re.setSupervisor(supervisor.getNickname());
+                re.setSupervisorType(supervisor.getUserType());
+            }
+        });
+        return result;
+    }
+
+
+    @Override
+    public PageResult<studentSelectSupervisorRecordDO> getApprovedRecordPage(StudentSelectSupervisorRecordPageReqVO pageReqVO) {
+        Long loginId = SecurityFrameworkUtils.getLoginUserId();
+        AdminUserDO loginUser = adminUserService.getUser(loginId);
+        Set<Long> roleIds = permissionService.getUserRoleIdListByUserId(loginId);
+        PageResult<studentSelectSupervisorRecordDO> result =studentSelectSupervisorRecordMapper.getApprovedRecordPage(pageReqVO,roleIds,loginUser);
+        result.getList().forEach(re->{
+            AdminUserDO supervisor =adminUserService.getUser(re.getSupervisorId());
+            if (supervisor!=null) {
+                re.setSupervisor(supervisor.getNickname());
+                re.setSupervisorType(supervisor.getUserType());
+            }
+        });
+        return result;
+    }
+
+
     @Override
     @Override
     public studentSelectSupervisorRecordDO getRecordByStudentIdAndSupervisorId(Long projectId,Long studentId , Long supervisorId, Integer selectType){
     public studentSelectSupervisorRecordDO getRecordByStudentIdAndSupervisorId(Long projectId,Long studentId , Long supervisorId, Integer selectType){
         return studentSelectSupervisorRecordMapper.getRecordByStudentIdAndSupervisorId(projectId,studentId,supervisorId,selectType);
         return studentSelectSupervisorRecordMapper.getRecordByStudentIdAndSupervisorId(projectId,studentId,supervisorId,selectType);
@@ -130,4 +175,9 @@ public class studentSelectSupervisorRecordServiceImpl implements studentSelectSu
         return studentSelectSupervisorRecordMapper.getSupervisorSignatureById(supervisorId);
         return studentSelectSupervisorRecordMapper.getSupervisorSignatureById(supervisorId);
     }
     }
 
 
+    @Override
+    public void deleteRecordsByProjectId(Long projectId){
+        studentSelectSupervisorRecordMapper.deleteRecordsByProjectId(projectId);
+    }
+
 }
 }

+ 8 - 1
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/supervisorSelectionSetting/supervisorSelectionSettingService.java

@@ -6,6 +6,7 @@ import cn.iocoder.yudao.module.system.controller.admin.supervisorSelectionSettin
 import cn.iocoder.yudao.module.system.dal.dataobject.supervisorSelectionSetting.supervisorSelectionSettingDO;
 import cn.iocoder.yudao.module.system.dal.dataobject.supervisorSelectionSetting.supervisorSelectionSettingDO;
 import cn.iocoder.yudao.framework.common.pojo.PageResult;
 import cn.iocoder.yudao.framework.common.pojo.PageResult;
 import cn.iocoder.yudao.framework.common.pojo.PageParam;
 import cn.iocoder.yudao.framework.common.pojo.PageParam;
+import org.apache.ibatis.annotations.Param;
 
 
 /**
 /**
  * 导师学硕专硕名额设置 Service 接口
  * 导师学硕专硕名额设置 Service 接口
@@ -54,5 +55,11 @@ public interface supervisorSelectionSettingService {
 
 
     supervisorSelectionSettingDO getSettingBySupervisorIdAndProjectId(Long supervisorId,Long projectId);
     supervisorSelectionSettingDO getSettingBySupervisorIdAndProjectId(Long supervisorId,Long projectId);
 
 
-
+    /**
+     * 删除项目下所有导师的名额设置
+     *
+     * @param projectId 项目id
+     * @param supervisorIds 导师ids
+     */
+    void deleteSettingsBySupervisorIds(Long projectId, List<Long> supervisorIds);
 }
 }

+ 8 - 0
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/supervisorSelectionSetting/supervisorSelectionSettingServiceImpl.java

@@ -113,4 +113,12 @@ public class supervisorSelectionSettingServiceImpl implements supervisorSelectio
         return supervisorSelectionSettingMapper.getSettingBySupervisorIdAndProjectId(supervisorId,projectId);
         return supervisorSelectionSettingMapper.getSettingBySupervisorIdAndProjectId(supervisorId,projectId);
     }
     }
 
 
+    //删除项目下所有导师的名额设置
+    @Override
+    public  void deleteSettingsBySupervisorIds(Long projectId, List<Long> supervisorIds){
+        if (supervisorIds == null || supervisorIds.isEmpty()) {
+            return;
+        }
+         supervisorSelectionSettingMapper.deleteSettingsBySupervisorIds(projectId,supervisorIds);
+    }
 }
 }

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

@@ -256,6 +256,18 @@ public interface AdminUserService {
     List<AdminUserDO> getStudentAndSupervisorNull(String grade);
     List<AdminUserDO> getStudentAndSupervisorNull(String grade);
 
 
     Boolean isSupervisorNullHasStudent(Long teacherId);
     Boolean isSupervisorNullHasStudent(Long teacherId);
+
+    //初始化当年级下的校生的导师id
+    void updateStudentSupervisorId(String grade);
+
+    //通过的用户分页
+    PageResult<AdminUserDO> getPassedStudentsPage(UserPageReqVO pageReqVO);
+
+    //未通过的用户分页
+    PageResult<AdminUserDO> getUnPassedStudentsPage(UserPageReqVO reqVO);
+
+    //获取user的选择状态
+    Integer getUserSelectStatus(Long id ,Long projectId);
 }
 }
 
 
 
 

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

@@ -42,6 +42,7 @@ import com.mzt.logapi.service.impl.DiffParseFunction;
 import com.mzt.logapi.starter.annotation.LogRecord;
 import com.mzt.logapi.starter.annotation.LogRecord;
 import lombok.extern.slf4j.Slf4j;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.ibatis.annotations.Param;
 import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.Select;
 import org.springframework.context.annotation.Lazy;
 import org.springframework.context.annotation.Lazy;
 import org.springframework.security.crypto.password.PasswordEncoder;
 import org.springframework.security.crypto.password.PasswordEncoder;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
@@ -1209,5 +1210,46 @@ public class AdminUserServiceImpl implements AdminUserService {
         return !list.isEmpty();
         return !list.isEmpty();
     }
     }
 
 
+    //初始化当年级下的校生的导师id
+    @Override
+    public void updateStudentSupervisorId(String grade){
+        userMapper.updateStudentSupervisorId(grade);
+    }
+
+    @Override
+    public PageResult<AdminUserDO> getPassedStudentsPage(UserPageReqVO reqVO){
+        int offset;
+        if (reqVO.getPageSize() == -1) {
+            offset =-1;  //
+        } else {
+            offset = (reqVO.getPageNo() - 1) * reqVO.getPageSize();
+        }
+        List<AdminUserDO> result =userMapper.getIsPassedStudentsPage(reqVO,offset,1);
+        Long size = userMapper.getIsPassedStudentsPageCount(reqVO,1);
+
+        return new PageResult<>(result,size);
+    }
+
+    @Override
+    public PageResult<AdminUserDO> getUnPassedStudentsPage(UserPageReqVO reqVO){
+        int offset;
+        if (reqVO.getPageSize() == -1) {
+            offset =-1;  //
+        } else {
+            offset = (reqVO.getPageNo() - 1) * reqVO.getPageSize();
+        }
+        List<AdminUserDO> result =userMapper.getIsPassedStudentsPage(reqVO,offset,0);
+        Long size = userMapper.getIsPassedStudentsPageCount(reqVO,0);
+
+        return new PageResult<>(result,size);
+    }
+
+
+
+    //获取学生项目的选择状态
+    @Override
+    public Integer getUserSelectStatus(Long id ,Long projectId){
+        return userMapper.getUserSelectStatus(id,projectId);
+    }
 }
 }
 
 

+ 31 - 0
yudao-module-system/yudao-module-system-biz/src/main/resources/Mapper/studentSelectSupervisorRecord/studentSelectSupervisorRecordMapper.xml

@@ -107,6 +107,37 @@
 
 
     </select>
     </select>
 
 
+    <update id="updateRecordNull" parameterType="studentSelectSupervisorRecordDO">
+        UPDATE student_select_supervisor_record
+        <set>
+            <if test="recordDO.projectId != null">
+                project_id = #{recordDO.projectId},
+            </if>
+            <if test="recordDO.studentId != null">
+                student_id = #{recordDO.studentId},
+            </if>
+            <if test="recordDO.supervisorId != null">
+                supervisor_id = #{recordDO.supervisorId},
+            </if>
+            <if test="recordDO.externalSupervisorId != null">
+                external_supervisor_id = #{recordDO.externalSupervisorId},
+            </if>
+            <if test="recordDO.selectType != null">
+                select_type = #{recordDO.selectType},
+            </if>
+--             TODO 能传null
+            student_signature = #{recordDO.studentSignature},
+
+            supervisor_approve_time = #{recordDO.supervisorApproveTime},
+
+            supervisor_signature = #{recordDO.supervisorSignature},
+
+            student_sign_date = #{recordDO.studentSignDate},
+
+            supervisor_sign_date = #{recordDO.supervisorSignDate},
 
 
+        </set>
+        WHERE id = #{recordDO.id}
+    </update>
 
 
 </mapper>
 </mapper>

+ 18 - 0
yudao-module-system/yudao-module-system-biz/src/main/resources/Mapper/supervisorSelectionSetting/supervisorSelectionSettingMapper.xml

@@ -31,4 +31,22 @@
             </if>
             </if>
         </where>
         </where>
     </select>
     </select>
+
+    <update id="deleteSettingsBySupervisorIds" >
+        UPDATE supervisor_selection_setting
+        SET deleted = 1
+        WHERE 1=1
+            <if test="projectId != null">
+                AND project_id = #{projectId}
+            </if>
+            <if test="supervisorIds != null and supervisorIds.size() > 0">
+                AND supervisor_id IN
+                <foreach collection="supervisorIds" item="supervisorId" open="(" close=")" separator=",">
+                    #{supervisorId}
+                </foreach>
+            </if>
+        AND deleted = 0
+    </update>
+
+
 </mapper>
 </mapper>

+ 124 - 2
yudao-module-system/yudao-module-system-biz/src/main/resources/Mapper/user/AdminUserMapper.xml

@@ -216,7 +216,6 @@
         ) AS subquery;
         ) AS subquery;
     </select>
     </select>
 
 
-
     <select id="selectList1" resultType="cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO">
     <select id="selectList1" resultType="cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO">
         SELECT
         SELECT
         a.*,
         a.*,
@@ -422,9 +421,132 @@
         a.id
         a.id
     </select>
     </select>
 
 
-    <select id="selectIsPop" resultType="Long">
+
+
+    <select id="getIsPassedStudentsPage" resultType="cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO">
+        SELECT
+        a.*,
+
+
+        COALESCE(system_dept.name, "测绘学院") AS deptName,
+        supervisor_user.nickname AS supervisor,
+        supervisor_user.mobile AS supervisorMobile
+        FROM
+        system_users a
+        LEFT JOIN
+        student_select_supervisor_record r ON r.student_id = a.id AND r.deleted = 0
+        LEFT JOIN
+        system_users supervisor_user ON supervisor_user.id = a.supervisor_id AND supervisor_user.deleted = 0
+        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>
+
+        <if test="reqVO.grade != null and reqVO.grade != ''">
+            AND a.grade =#{reqVO.grade}
+        </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>
+        AND a.deleted = 0
+        GROUP BY
+        a.id
+
+        <!-- 合并 HAVING 子句 -->
+
+
+        ORDER BY
+        a.id DESC
+
 
 
     </select>
     </select>
 
 
+    <select id="getIsPassedStudentsPageCount" resultType="Long">
+        SELECT COUNT(*) AS total_count
+        FROM (
+        SELECT a.id
+        FROM system_users a
+        LEFT JOIN student_select_supervisor_record r ON r.student_id = a.id AND r.deleted = 0
+        LEFT JOIN system_users supervisor_user ON supervisor_user.id = a.supervisor_id AND supervisor_user.deleted = 0
+        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>
+        <if test="reqVO.grade != '' and reqVO.grade != null ">
+            AND a.grade = #{reqVO.grade}
+        </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>
+        AND a.deleted = 0
+        GROUP BY a.id
+
+        <!-- 合并 HAVING 条件 -->
+        HAVING
+        CASE
+        WHEN COALESCE(MAX(r.select_type), 0) = 2 THEN 2
+        WHEN COALESCE(MAX(r.select_type), 0) = 1 THEN 1
+        ELSE 0
+        END
+        <choose>
+            <when test="isPassed == 0">IN (0, 1)</when>
+            <when test="isPassed == 1">= 2</when>
+        </choose>
+        ) AS subquery;
+    </select>
+
+
 
 
 </mapper>
 </mapper>