Crazy 2 months ago
parent
commit
c3322d0c1d
43 changed files with 1626 additions and 20 deletions
  1. 10 0
      yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/enums/ErrorCodeConstants.java
  2. 103 0
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/studentSelectSupervisorRecord/studentSelectSupervisorRecordController.java
  3. 54 0
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/studentSelectSupervisorRecord/vo/studentSelectSupervisorRecordPageReqVO.java
  4. 64 0
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/studentSelectSupervisorRecord/vo/studentSelectSupervisorRecordRespVO.java
  5. 49 0
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/studentSelectSupervisorRecord/vo/studentSelectSupervisorRecordSaveReqVO.java
  6. 117 0
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/studentSelectionProject/studentSelectionProjectController.java
  7. 35 0
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/studentSelectionProject/vo/studentSelectionProjectPageReqVO.java
  8. 51 0
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/studentSelectionProject/vo/studentSelectionProjectRespVO.java
  9. 43 0
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/studentSelectionProject/vo/studentSelectionProjectSaveReqVO.java
  10. 96 0
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/supervisorSelectionSetting/supervisorSelectionSettingController.java
  11. 40 0
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/supervisorSelectionSetting/vo/supervisorSelectionSettingPageReqVO.java
  12. 52 0
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/supervisorSelectionSetting/vo/supervisorSelectionSettingRespVO.java
  13. 29 0
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/supervisorSelectionSetting/vo/supervisorSelectionSettingSaveReqVO.java
  14. 4 1
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/vo/profile/UserProfileRespVO.java
  15. 11 2
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/vo/profile/UserProfileUpdateReqVO.java
  16. 2 1
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/vo/user/StudentExportExcelVO.java
  17. 2 1
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/vo/user/StudentImportExcelVO.java
  18. 2 2
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/vo/user/UserImportExcelVO.java
  19. 2 2
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/vo/user/UserPageReqVO.java
  20. 7 1
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/vo/user/UserRespVO.java
  21. 8 2
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/vo/user/UserSaveReqVO.java
  22. 2 1
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/vo/user/graduateStudentExportExcelVO.java
  23. 2 1
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/vo/user/graduateStudentImportExcelVO.java
  24. 77 0
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/studentSelectSupervisorRecord/studentSelectSupervisorRecordDO.java
  25. 62 0
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/studentSelectionProject/studentSelectionProjectDO.java
  26. 71 0
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/supervisorSelectionSetting/supervisorSelectionSettingDO.java
  27. 13 4
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/user/AdminUserDO.java
  28. 50 0
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/studentSelectSupervisorRecord/studentSelectSupervisorRecordMapper.java
  29. 44 0
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/studentSelectionProject/studentSelectionProjectMapper.java
  30. 42 0
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/supervisorSelectionSetting/supervisorSelectionSettingMapper.java
  31. 7 2
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/user/AdminUserMapper.java
  32. 1 0
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/auth/AdminAuthServiceImpl.java
  33. 58 0
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/studentSelectSupervisorRecord/studentSelectSupervisorRecordService.java
  34. 91 0
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/studentSelectSupervisorRecord/studentSelectSupervisorRecordServiceImpl.java
  35. 53 0
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/studentSelectionProject/studentSelectionProjectService.java
  36. 86 0
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/studentSelectionProject/studentSelectionProjectServiceImpl.java
  37. 55 0
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/supervisorSelectionSetting/supervisorSelectionSettingService.java
  38. 88 0
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/supervisorSelectionSetting/supervisorSelectionSettingServiceImpl.java
  39. 3 0
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/user/AdminUserService.java
  40. 4 0
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/user/AdminUserServiceImpl.java
  41. 12 0
      yudao-module-system/yudao-module-system-biz/src/main/resources/Mapper/studentSelectSupervisorRecord/studentSelectSupervisorRecordMapper.xml
  42. 12 0
      yudao-module-system/yudao-module-system-biz/src/main/resources/Mapper/studentSelectionProject/studentSelectionProjectMapper.xml
  43. 12 0
      yudao-module-system/yudao-module-system-biz/src/main/resources/Mapper/supervisorSelectionSetting/supervisorSelectionSettingMapper.xml

+ 10 - 0
yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/enums/ErrorCodeConstants.java

@@ -180,5 +180,15 @@ public interface ErrorCodeConstants {
 
     ErrorCode UPLOADED_FOLDER_NOT_ZIP = new ErrorCode(1_002_033_001, "上传的文件格式不为zip!");
 
+    // ========== 师生互选项目 TODO 补充编号 ==========
+    ErrorCode STUDENT_SELECTION_PROJECT_NOT_EXISTS = new ErrorCode(1_002_034_001, "师生互选项目不存在");
+
+    // ========== 导师学硕专硕名额设置 TODO 补充编号 ==========
+    ErrorCode SUPERVISOR_SELECTION_SETTING_NOT_EXISTS = new ErrorCode(1_002_035_000, "设置记录不存在");
+    ErrorCode SUPERVISOR_AcademicSlots_NOT_EXISTS = new ErrorCode(1_002_035_001, "导师学硕名额不存在");
+    ErrorCode SUPERVISOR_ProfessionalSlots_NOT_EXISTS = new ErrorCode(1_002_035_001, "导师专硕名额不存在");
+
+    // ========== 师生互选记录 TODO 补充编号 ==========
+    ErrorCode STUDENT_SELECT_SUPERVISOR_RECORD_NOT_EXISTS = new ErrorCode(1_002_036_001, "师生互选记录不存在");
 
 }

+ 103 - 0
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/studentSelectSupervisorRecord/studentSelectSupervisorRecordController.java

@@ -0,0 +1,103 @@
+package cn.iocoder.yudao.module.system.controller.admin.studentSelectSupervisorRecord;
+
+import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils;
+import org.springframework.web.bind.annotation.*;
+import javax.annotation.Resource;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.security.access.prepost.PreAuthorize;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.Operation;
+
+import javax.validation.constraints.*;
+import javax.validation.*;
+import javax.servlet.http.*;
+import java.util.*;
+import java.io.IOException;
+
+import cn.iocoder.yudao.framework.common.pojo.PageParam;
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.common.pojo.CommonResult;
+import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
+import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
+
+import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
+
+import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog;
+import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.*;
+
+import cn.iocoder.yudao.module.system.controller.admin.studentSelectSupervisorRecord.vo.*;
+import cn.iocoder.yudao.module.system.dal.dataobject.studentSelectSupervisorRecord.studentSelectSupervisorRecordDO;
+import cn.iocoder.yudao.module.system.service.studentSelectSupervisorRecord.studentSelectSupervisorRecordService;
+
+@Tag(name = "管理后台 - 师生互选记录")
+@RestController
+@RequestMapping("/system/student-select-supervisor-record")
+@Validated
+public class studentSelectSupervisorRecordController {
+
+    @Resource
+    private studentSelectSupervisorRecordService studentSelectSupervisorRecordService;
+
+
+    @PostMapping("/create")
+    @Operation(summary = "创建师生互选记录")
+    @PreAuthorize("@ss.hasPermission('system:student-select-supervisor-record:create')")
+    public CommonResult<Integer> createStudentSelectSupervisorRecord(@Valid @RequestBody studentSelectSupervisorRecordSaveReqVO createReqVO) {
+        Long loginId = SecurityFrameworkUtils.getLoginUserId();
+        createReqVO.setStudentId(loginId);
+        createReqVO.setSelectType(0L);
+        String StudentSignature =createReqVO.getStudentSignature();
+        System.out.println("电子签名"+StudentSignature);
+        return success(studentSelectSupervisorRecordService.createStudentSelectSupervisorRecord(createReqVO));
+    }
+
+//    撤回,同意,退回,
+    @PutMapping("/update")
+    @Operation(summary = "更新师生互选记录")
+    @PreAuthorize("@ss.hasPermission('system:student-select-supervisor-record:update')")
+    public CommonResult<Boolean> updateStudentSelectSupervisorRecord(@Valid @RequestBody studentSelectSupervisorRecordSaveReqVO updateReqVO) {
+        studentSelectSupervisorRecordService.updateStudentSelectSupervisorRecord(updateReqVO);
+        return success(true);
+    }
+
+    @DeleteMapping("/delete")
+    @Operation(summary = "删除师生互选记录")
+    @Parameter(name = "id", description = "编号", required = true)
+    @PreAuthorize("@ss.hasPermission('system:student-select-supervisor-record:delete')")
+    public CommonResult<Boolean> deleteStudentSelectSupervisorRecord(@RequestParam("id") Integer id) {
+        studentSelectSupervisorRecordService.deleteStudentSelectSupervisorRecord(id);
+        return success(true);
+    }
+
+    @GetMapping("/get")
+    @Operation(summary = "获得师生互选记录")
+    @Parameter(name = "id", description = "编号", required = true, example = "1024")
+    @PreAuthorize("@ss.hasPermission('system:student-select-supervisor-record:query')")
+    public CommonResult<studentSelectSupervisorRecordRespVO> getStudentSelectSupervisorRecord(@RequestParam("id") Integer id) {
+        studentSelectSupervisorRecordDO studentSelectSupervisorRecord = studentSelectSupervisorRecordService.getStudentSelectSupervisorRecord(id);
+        return success(BeanUtils.toBean(studentSelectSupervisorRecord, studentSelectSupervisorRecordRespVO.class));
+    }
+
+    @GetMapping("/page")
+    @Operation(summary = "获得师生互选记录分页")
+    @PreAuthorize("@ss.hasPermission('system:student-select-supervisor-record:query')")
+    public CommonResult<PageResult<studentSelectSupervisorRecordRespVO>> getStudentSelectSupervisorRecordPage(@Valid studentSelectSupervisorRecordPageReqVO pageReqVO) {
+        PageResult<studentSelectSupervisorRecordDO> pageResult = studentSelectSupervisorRecordService.getStudentSelectSupervisorRecordPage(pageReqVO);
+        return success(BeanUtils.toBean(pageResult, studentSelectSupervisorRecordRespVO.class));
+    }
+
+    @GetMapping("/export-excel")
+    @Operation(summary = "导出师生互选记录 Excel")
+    @PreAuthorize("@ss.hasPermission('system:student-select-supervisor-record:export')")
+    @ApiAccessLog(operateType = EXPORT)
+    public void exportStudentSelectSupervisorRecordExcel(@Valid studentSelectSupervisorRecordPageReqVO pageReqVO,
+              HttpServletResponse response) throws IOException {
+        pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
+        List<studentSelectSupervisorRecordDO> list = studentSelectSupervisorRecordService.getStudentSelectSupervisorRecordPage(pageReqVO).getList();
+        // 导出 Excel
+        ExcelUtils.write(response, "师生互选记录.xls", "数据", studentSelectSupervisorRecordRespVO.class,
+                        BeanUtils.toBean(list, studentSelectSupervisorRecordRespVO.class));
+    }
+
+}

+ 54 - 0
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/studentSelectSupervisorRecord/vo/studentSelectSupervisorRecordPageReqVO.java

@@ -0,0 +1,54 @@
+package cn.iocoder.yudao.module.system.controller.admin.studentSelectSupervisorRecord.vo;
+
+import lombok.*;
+import java.util.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+import cn.iocoder.yudao.framework.common.pojo.PageParam;
+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 = "管理后台 - 师生互选记录分页 Request VO")
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+public class studentSelectSupervisorRecordPageReqVO extends PageParam {
+
+    @Schema(description = "项目id", example = "20003")
+    private Integer projectId;
+
+    @Schema(description = "学生id", example = "14632")
+    private Integer studentId;
+
+    @Schema(description = "校内导师id", example = "24599")
+    private Integer supervisorId;
+
+    @Schema(description = "选择时间")
+    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+    private LocalDateTime[] selectTime;
+
+    @Schema(description = "选择状态(0编辑(撤回),1待处理,2同意,3退回)", example = "1")
+    private Long selectType;
+
+    @Schema(description = "学生电子签名")
+    private String studentSignature;
+
+    @Schema(description = "创建时间")
+    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+    private LocalDateTime[] createTime;
+
+    @Schema(description = "导师审批时间")
+    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+    private LocalDateTime[] supervisorApproveTime;
+
+    @Schema(description = "导师电子签名")
+    private String supervisorSignature;
+
+    @Schema(description = "校外导师id", example = "17747")
+    private Integer externalSupervisorId;
+
+    @Schema(description = "硕士类型")
+    private Integer masterType;
+
+}

+ 64 - 0
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/studentSelectSupervisorRecord/vo/studentSelectSupervisorRecordRespVO.java

@@ -0,0 +1,64 @@
+package cn.iocoder.yudao.module.system.controller.admin.studentSelectSupervisorRecord.vo;
+
+import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.*;
+import java.util.*;
+import org.springframework.format.annotation.DateTimeFormat;
+import java.time.LocalDateTime;
+import com.alibaba.excel.annotation.*;
+
+@Schema(description = "管理后台 - 师生互选记录 Response VO")
+@Data
+@ExcelIgnoreUnannotated
+public class studentSelectSupervisorRecordRespVO {
+
+    @Schema(description = "选择id,自增", requiredMode = Schema.RequiredMode.REQUIRED, example = "2519")
+    @ExcelProperty("选择id,自增")
+    private Integer id;
+
+    @Schema(description = "项目id", requiredMode = Schema.RequiredMode.REQUIRED, example = "20003")
+    @ExcelProperty("项目id")
+    private Integer projectId;
+
+    @Schema(description = "学生id", requiredMode = Schema.RequiredMode.REQUIRED, example = "14632")
+    @ExcelProperty("学生id")
+    private Integer studentId;
+
+    @Schema(description = "校内导师id", example = "24599")
+    @ExcelProperty("校内导师id")
+    private Integer supervisorId;
+
+    @Schema(description = "选择时间")
+    @ExcelProperty("选择时间")
+    private LocalDateTime selectTime;
+
+    @Schema(description = "选择状态(0编辑(撤回),1待处理,2同意,3退回)", example = "1")
+    @ExcelProperty("选择状态(0编辑(撤回),1待处理,2同意,3退回)")
+    private Long selectType;
+
+    @Schema(description = "学生电子签名")
+    @ExcelProperty("学生电子签名")
+    private String studentSignature;
+
+    @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
+    @ExcelProperty("创建时间")
+    private LocalDateTime createTime;
+
+    @Schema(description = "导师审批时间")
+    @ExcelProperty("导师审批时间")
+    private LocalDateTime supervisorApproveTime;
+
+    @Schema(description = "导师电子签名")
+    @ExcelProperty("导师电子签名")
+    private String supervisorSignature;
+
+    @Schema(description = "校外导师id", example = "17747")
+    @ExcelProperty("校外导师id")
+    private Integer externalSupervisorId;
+
+    @Schema(description = "硕士类型")
+    @DictFormat("system_student_master_type")
+    private Integer masterType;
+
+}

+ 49 - 0
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/studentSelectSupervisorRecord/vo/studentSelectSupervisorRecordSaveReqVO.java

@@ -0,0 +1,49 @@
+package cn.iocoder.yudao.module.system.controller.admin.studentSelectSupervisorRecord.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.*;
+import java.util.*;
+import javax.validation.constraints.*;
+import org.springframework.format.annotation.DateTimeFormat;
+import java.time.LocalDateTime;
+
+@Schema(description = "管理后台 - 师生互选记录新增/修改 Request VO")
+@Data
+public class studentSelectSupervisorRecordSaveReqVO {
+
+    @Schema(description = "选择id,自增", requiredMode = Schema.RequiredMode.REQUIRED, example = "2519")
+    private Integer id;
+
+    @Schema(description = "项目id", requiredMode = Schema.RequiredMode.REQUIRED, example = "20003")
+//    @NotNull(message = "项目id不能为空")
+    private Integer projectId;
+
+    @Schema(description = "学生id", requiredMode = Schema.RequiredMode.REQUIRED, example = "14632")
+//    @NotNull(message = "学生id不能为空")
+    private Long studentId;
+
+    @Schema(description = "校内导师id", example = "24599")
+    private Integer supervisorId;
+
+    @Schema(description = "选择时间")
+    private LocalDateTime selectTime;
+
+    @Schema(description = "选择状态(0编辑(撤回),1待处理,2同意,3退回)", example = "1")
+    private Long selectType;
+
+    @Schema(description = "学生电子签名")
+    private String studentSignature;
+
+    @Schema(description = "导师审批时间")
+    private LocalDateTime supervisorApproveTime;
+
+    @Schema(description = "导师电子签名")
+    private String supervisorSignature;
+
+    @Schema(description = "校外导师id", example = "17747")
+    private Integer externalSupervisorId;
+
+    @Schema(description = "硕士类型")
+    private Integer masterType;
+
+}

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

@@ -0,0 +1,117 @@
+package cn.iocoder.yudao.module.system.controller.admin.studentSelectionProject;
+
+import cn.iocoder.yudao.module.system.controller.admin.supervisorSelectionSetting.vo.supervisorSelectionSettingSaveReqVO;
+import cn.iocoder.yudao.module.system.service.supervisorSelectionSetting.supervisorSelectionSettingService;
+import org.springframework.web.bind.annotation.*;
+import javax.annotation.Resource;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.security.access.prepost.PreAuthorize;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.Operation;
+
+import javax.validation.constraints.*;
+import javax.validation.*;
+import javax.servlet.http.*;
+import java.util.*;
+import java.io.IOException;
+
+import cn.iocoder.yudao.framework.common.pojo.PageParam;
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.common.pojo.CommonResult;
+import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
+
+import static cn.iocoder.yudao.framework.common.pojo.CommonResult.error;
+import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
+
+import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
+
+import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog;
+import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.*;
+
+import cn.iocoder.yudao.module.system.controller.admin.studentSelectionProject.vo.*;
+import cn.iocoder.yudao.module.system.dal.dataobject.studentSelectionProject.studentSelectionProjectDO;
+import cn.iocoder.yudao.module.system.service.studentSelectionProject.studentSelectionProjectService;
+
+@Tag(name = "管理后台 - 师生互选项目")
+@RestController
+@RequestMapping("/system/student-selection-project")
+@Validated
+public class studentSelectionProjectController {
+
+    @Resource
+    private studentSelectionProjectService studentSelectionProjectService;
+    @Resource
+    private supervisorSelectionSettingService supervisorSelectionSettingService;
+
+    @PostMapping("/create")
+    @Operation(summary = "创建师生互选项目")
+    @PreAuthorize("@ss.hasPermission('system:student-selection-project:create')")
+    public CommonResult<String> createStudentSelectionProject(@Valid @RequestBody studentSelectionProjectSaveReqVO createReqVO) {
+        if (createReqVO.getStudentStartTime().isAfter(createReqVO.getSupervisorConfirmDeadline())){
+            return error(1,"时间设置错误");
+        }
+        Integer projectId =studentSelectionProjectService.createStudentSelectionProject(createReqVO);
+        //创建初始化的导师名额设置
+        supervisorSelectionSettingSaveReqVO settingSaveReqVO =new supervisorSelectionSettingSaveReqVO();
+        if (createReqVO.getSupervisorIds()!=null||!createReqVO.getSupervisorIds().isEmpty()){
+            createReqVO.getSupervisorIds().forEach(supervisorId->{
+                settingSaveReqVO.setSupervisorId(supervisorId);
+                settingSaveReqVO.setProjectId(projectId);
+                supervisorSelectionSettingService.createSupervisorSelectionSetting(settingSaveReqVO);
+            });
+        }
+        return success("创建项目成功");
+    }
+
+    @PutMapping("/update")
+    @Operation(summary = "更新师生互选项目")
+    @PreAuthorize("@ss.hasPermission('system:student-selection-project:update')")
+    public CommonResult<Boolean> updateStudentSelectionProject(@Valid @RequestBody studentSelectionProjectSaveReqVO updateReqVO) {
+        if (updateReqVO.getStudentStartTime().isAfter(updateReqVO.getSupervisorConfirmDeadline())){
+            return error(1,"时间设置错误");
+        }
+        studentSelectionProjectService.updateStudentSelectionProject(updateReqVO);
+        return success(true);
+    }
+
+    @DeleteMapping("/delete")
+    @Operation(summary = "删除师生互选项目")
+    @Parameter(name = "id", description = "编号", required = true)
+    @PreAuthorize("@ss.hasPermission('system:student-selection-project:delete')")
+    public CommonResult<Boolean> deleteStudentSelectionProject(@RequestParam("id") Integer id) {
+        studentSelectionProjectService.deleteStudentSelectionProject(id);
+        return success(true);
+    }
+
+    @GetMapping("/get")
+    @Operation(summary = "获得师生互选项目")
+    @Parameter(name = "id", description = "编号", required = true, example = "1024")
+    @PreAuthorize("@ss.hasPermission('system:student-selection-project:query')")
+    public CommonResult<studentSelectionProjectRespVO> getStudentSelectionProject(@RequestParam("id") Integer id) {
+        studentSelectionProjectDO studentSelectionProject = studentSelectionProjectService.getStudentSelectionProject(id);
+        return success(BeanUtils.toBean(studentSelectionProject, studentSelectionProjectRespVO.class));
+    }
+
+    @GetMapping("/page")
+    @Operation(summary = "获得师生互选项目分页")
+    @PreAuthorize("@ss.hasPermission('system:student-selection-project:query')")
+    public CommonResult<PageResult<studentSelectionProjectRespVO>> getStudentSelectionProjectPage(@Valid studentSelectionProjectPageReqVO pageReqVO) {
+        PageResult<studentSelectionProjectDO> pageResult = studentSelectionProjectService.getStudentSelectionProjectPage(pageReqVO);
+        return success(BeanUtils.toBean(pageResult, studentSelectionProjectRespVO.class));
+    }
+
+    @GetMapping("/export-excel")
+    @Operation(summary = "导出师生互选项目 Excel")
+    @PreAuthorize("@ss.hasPermission('system:student-selection-project:export')")
+    @ApiAccessLog(operateType = EXPORT)
+    public void exportStudentSelectionProjectExcel(@Valid studentSelectionProjectPageReqVO pageReqVO,
+              HttpServletResponse response) throws IOException {
+        pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
+        List<studentSelectionProjectDO> list = studentSelectionProjectService.getStudentSelectionProjectPage(pageReqVO).getList();
+        // 导出 Excel
+        ExcelUtils.write(response, "师生互选项目.xls", "数据", studentSelectionProjectRespVO.class,
+                        BeanUtils.toBean(list, studentSelectionProjectRespVO.class));
+    }
+
+}

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

@@ -0,0 +1,35 @@
+package cn.iocoder.yudao.module.system.controller.admin.studentSelectionProject.vo;
+
+import lombok.*;
+import java.util.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+import cn.iocoder.yudao.framework.common.pojo.PageParam;
+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 = "管理后台 - 师生互选项目分页 Request VO")
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+public class studentSelectionProjectPageReqVO extends PageParam {
+
+    @Schema(description = "项目名称", example = "2024师生互选项目")
+    private String projectName;
+
+    @Schema(description = "学生开始时间")
+    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+    private LocalDateTime[] studentStartTime;
+
+    @Schema(description = "导师截止时间")
+    private LocalDateTime supervisorConfirmDeadline;
+
+    @Schema(description = "学生年级")
+    private String studentGrade;
+
+    @Schema(description = "创建时间")
+    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+    private LocalDateTime[] createTime;
+
+}

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

@@ -0,0 +1,51 @@
+package cn.iocoder.yudao.module.system.controller.admin.studentSelectionProject.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.*;
+import java.util.*;
+import org.springframework.format.annotation.DateTimeFormat;
+import java.time.LocalDateTime;
+import com.alibaba.excel.annotation.*;
+
+import javax.validation.constraints.NotEmpty;
+
+@Schema(description = "管理后台 - 师生互选项目 Response VO")
+@Data
+@ExcelIgnoreUnannotated
+public class studentSelectionProjectRespVO {
+
+    @Schema(description = "项目id", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
+    @ExcelProperty("项目id")
+    private Integer id;
+
+    @Schema(description = "项目名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "2024师生互选项目")
+    @ExcelProperty("项目名称")
+    private String projectName;
+
+    @Schema(description = "学生开始时间", requiredMode = Schema.RequiredMode.REQUIRED)
+    @ExcelProperty("学生开始时间")
+    private LocalDateTime studentStartTime;
+
+    @Schema(description = "导师截止时间", requiredMode = Schema.RequiredMode.REQUIRED)
+    @ExcelProperty("导师截止时间")
+    private LocalDateTime supervisorConfirmDeadline;
+
+    @Schema(description = "学生年级", requiredMode = Schema.RequiredMode.REQUIRED)
+    @ExcelProperty("学生年级")
+    private String studentGrade;
+
+    @Schema(description = "导师数组", requiredMode = Schema.RequiredMode.REQUIRED)
+    @ExcelProperty("导师id数组")
+    private List<Long> supervisorIds;
+
+    @Schema(description = "是否开启导师弹窗")
+    private Integer isSupervisor;
+
+    @Schema(description = "是否开启学生弹窗")
+    private Integer isStudent;
+
+    @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
+    @ExcelProperty("创建时间")
+    private LocalDateTime createTime;
+
+}

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

@@ -0,0 +1,43 @@
+package cn.iocoder.yudao.module.system.controller.admin.studentSelectionProject.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.*;
+import java.util.*;
+import javax.validation.constraints.*;
+import org.springframework.format.annotation.DateTimeFormat;
+import java.time.LocalDateTime;
+
+@Schema(description = "管理后台 - 师生互选项目新增/修改 Request VO")
+@Data
+public class studentSelectionProjectSaveReqVO {
+
+    @Schema(description = "项目id", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
+    private Integer id;
+
+    @Schema(description = "项目名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "2024师生互选项目")
+    @NotEmpty(message = "项目名称不能为空")
+    private String projectName;
+
+    @Schema(description = "学生开始时间", requiredMode = Schema.RequiredMode.REQUIRED)
+    @NotNull(message = "学生开始时间不能为空")
+    private LocalDateTime studentStartTime;
+
+    @Schema(description = "导师截止时间", requiredMode = Schema.RequiredMode.REQUIRED)
+    @NotNull(message = "导师截止时间不能为空")
+    private LocalDateTime supervisorConfirmDeadline;
+
+    @Schema(description = "学生年级", requiredMode = Schema.RequiredMode.REQUIRED)
+    @NotEmpty(message = "学生年级不能为空")
+    private String studentGrade;
+
+    @Schema(description = "导师数组", requiredMode = Schema.RequiredMode.REQUIRED)
+    @NotEmpty(message = "导师不能为空")
+    private List<Long> supervisorIds;
+
+    @Schema(description = "是否开启导师弹窗")
+    private Integer isSupervisor;
+
+    @Schema(description = "是否开启学生弹窗")
+    private Integer isStudent;
+
+}

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

@@ -0,0 +1,96 @@
+package cn.iocoder.yudao.module.system.controller.admin.supervisorSelectionSetting;
+
+import org.springframework.web.bind.annotation.*;
+import javax.annotation.Resource;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.security.access.prepost.PreAuthorize;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.Operation;
+
+import javax.validation.constraints.*;
+import javax.validation.*;
+import javax.servlet.http.*;
+import java.util.*;
+import java.io.IOException;
+
+import cn.iocoder.yudao.framework.common.pojo.PageParam;
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.common.pojo.CommonResult;
+import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
+import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
+
+import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
+
+import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog;
+import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.*;
+
+import cn.iocoder.yudao.module.system.controller.admin.supervisorSelectionSetting.vo.*;
+import cn.iocoder.yudao.module.system.dal.dataobject.supervisorSelectionSetting.supervisorSelectionSettingDO;
+import cn.iocoder.yudao.module.system.service.supervisorSelectionSetting.supervisorSelectionSettingService;
+
+@Tag(name = "管理后台 - 导师学硕专硕名额设置")
+@RestController
+@RequestMapping("/system/supervisor-selection-setting")
+@Validated
+public class supervisorSelectionSettingController {
+
+    @Resource
+    private supervisorSelectionSettingService supervisorSelectionSettingService;
+
+    @PostMapping("/create")
+    @Operation(summary = "创建导师学硕专硕名额设置")
+    @PreAuthorize("@ss.hasPermission('system:supervisor-selection-setting:create')")
+    public CommonResult<Integer> createSupervisorSelectionSetting(@Valid @RequestBody supervisorSelectionSettingSaveReqVO createReqVO) {
+        return success(supervisorSelectionSettingService.createSupervisorSelectionSetting(createReqVO));
+    }
+
+    @PutMapping("/update")
+    @Operation(summary = "更新导师学硕专硕名额设置")
+    @PreAuthorize("@ss.hasPermission('system:supervisor-selection-setting:update')")
+    public CommonResult<Boolean> updateSupervisorSelectionSetting(@Valid @RequestBody supervisorSelectionSettingSaveReqVO updateReqVO) {
+        supervisorSelectionSettingService.updateSupervisorSelectionSetting(updateReqVO);
+        return success(true);
+    }
+
+    @DeleteMapping("/delete")
+    @Operation(summary = "删除导师学硕专硕名额设置")
+    @Parameter(name = "id", description = "编号", required = true)
+    @PreAuthorize("@ss.hasPermission('system:supervisor-selection-setting:delete')")
+    public CommonResult<Boolean> deleteSupervisorSelectionSetting(@RequestParam("id") Integer id) {
+        supervisorSelectionSettingService.deleteSupervisorSelectionSetting(id);
+        return success(true);
+    }
+
+    @GetMapping("/get")
+    @Operation(summary = "获得导师学硕专硕名额设置")
+    @Parameter(name = "id", description = "编号", required = true, example = "1024")
+    @PreAuthorize("@ss.hasPermission('system:supervisor-selection-setting:query')")
+    public CommonResult<supervisorSelectionSettingRespVO> getSupervisorSelectionSetting(@RequestParam("id") Integer id) {
+        supervisorSelectionSettingDO supervisorSelectionSetting = supervisorSelectionSettingService.getSupervisorSelectionSetting(id);
+        return success(BeanUtils.toBean(supervisorSelectionSetting, supervisorSelectionSettingRespVO.class));
+    }
+
+
+    @GetMapping("/page")
+    @Operation(summary = "获得导师学硕专硕名额设置分页")
+    @PreAuthorize("@ss.hasPermission('system:supervisor-selection-setting:query')")
+    public CommonResult<PageResult<supervisorSelectionSettingRespVO>> getSupervisorSelectionSettingPage(@Valid supervisorSelectionSettingPageReqVO pageReqVO) {
+        PageResult<supervisorSelectionSettingDO> pageResult = supervisorSelectionSettingService.getSupervisorSelectionSettingPage(pageReqVO);
+        return success(BeanUtils.toBean(pageResult, supervisorSelectionSettingRespVO.class));
+    }
+
+    @GetMapping("/export-excel")
+    @Operation(summary = "导出导师学硕专硕名额设置 Excel")
+    @PreAuthorize("@ss.hasPermission('system:supervisor-selection-setting:export')")
+    @ApiAccessLog(operateType = EXPORT)
+    public void exportSupervisorSelectionSettingExcel(@Valid supervisorSelectionSettingPageReqVO pageReqVO,
+              HttpServletResponse response) throws IOException {
+        pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
+        List<supervisorSelectionSettingDO> list = supervisorSelectionSettingService.getSupervisorSelectionSettingPage(pageReqVO).getList();
+        // 导出 Excel
+        ExcelUtils.write(response, "导师学硕专硕名额设置.xls", "数据", supervisorSelectionSettingRespVO.class,
+                        BeanUtils.toBean(list, supervisorSelectionSettingRespVO.class));
+    }
+
+}

+ 40 - 0
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/supervisorSelectionSetting/vo/supervisorSelectionSettingPageReqVO.java

@@ -0,0 +1,40 @@
+package cn.iocoder.yudao.module.system.controller.admin.supervisorSelectionSetting.vo;
+
+import lombok.*;
+import java.util.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+import cn.iocoder.yudao.framework.common.pojo.PageParam;
+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 = "管理后台 - 导师学硕专硕名额设置分页 Request VO")
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+public class supervisorSelectionSettingPageReqVO extends PageParam {
+
+    @Schema(description = "项目id", example = "1")
+    private Integer projectId;
+
+    @Schema(description = "导师id", example = "1")
+    private Integer supervisorId;
+
+    @Schema(description = "学硕名额")
+    private Integer academicSlots;
+
+    @Schema(description = "专硕名额")
+    private Integer professionalSlots;
+
+    @Schema(description = "导师姓名")
+    private String supervisorName;
+
+    @Schema(description = "导师类型")
+    private String userType;
+
+    @Schema(description = "创建时间")
+    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+    private LocalDateTime[] createTime;
+
+}

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

@@ -0,0 +1,52 @@
+package cn.iocoder.yudao.module.system.controller.admin.supervisorSelectionSetting.vo;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.*;
+import java.util.*;
+import org.springframework.format.annotation.DateTimeFormat;
+import java.time.LocalDateTime;
+import com.alibaba.excel.annotation.*;
+
+@Schema(description = "管理后台 - 导师学硕专硕名额设置 Response VO")
+@Data
+@ExcelIgnoreUnannotated
+public class supervisorSelectionSettingRespVO {
+
+    @Schema(description = "自增id", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
+    @ExcelProperty("自增id")
+    private Integer id;
+
+    @Schema(description = "项目id", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
+    @ExcelProperty("项目id")
+    private Integer projectId;
+
+    @Schema(description = "导师id", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
+    @ExcelProperty("导师id")
+    private Integer supervisorId;
+
+    @Schema(description = "学硕名额")
+    @ExcelProperty("学硕名额")
+    private Integer academicSlots;
+
+    @Schema(description = "专硕名额")
+    @ExcelProperty("专硕名额")
+    private Integer professionalSlots;
+    
+    @Schema(description = "已经占用的学硕名额")
+    private  Integer  occupiedAcademicSlots;
+
+    @Schema(description = "已经占用的专硕名额")
+    private  Integer  occupiedProfessionalSlots;
+
+    @Schema(description = "导师姓名")
+    private String supervisorName;
+
+    @Schema(description = "导师类型")
+    private String userType;
+
+    @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
+    @ExcelProperty("创建时间")
+    private LocalDateTime createTime;
+
+}

+ 29 - 0
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/supervisorSelectionSetting/vo/supervisorSelectionSettingSaveReqVO.java

@@ -0,0 +1,29 @@
+package cn.iocoder.yudao.module.system.controller.admin.supervisorSelectionSetting.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.*;
+import java.util.*;
+import javax.validation.constraints.*;
+
+@Schema(description = "管理后台 - 导师学硕专硕名额设置新增/修改 Request VO")
+@Data
+public class supervisorSelectionSettingSaveReqVO {
+
+    @Schema(description = "自增id", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
+    private Integer id;
+
+    @Schema(description = "项目id", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
+    @NotNull(message = "项目id不能为空")
+    private Integer projectId;
+
+    @Schema(description = "导师id", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
+    @NotNull(message = "导师id不能为空")
+    private Long supervisorId;
+
+    @Schema(description = "学硕名额")
+    private Integer academicSlots;
+
+    @Schema(description = "专硕名额")
+    private Integer professionalSlots;
+
+}

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

@@ -86,7 +86,7 @@ public class UserProfileRespVO {
     private String major;
 
     @ExcelProperty("硕士类型")
-    private String masterType;
+    private Integer masterType;
 
     @Schema(description = "导师id", example = "21284")
     private Long supervisorId;
@@ -103,4 +103,7 @@ public class UserProfileRespVO {
     @Schema(description = "照片url")
     private String photoUrl;
 
+    @Schema(description = "学生成果要求")
+    private String studentAchievementRequirement;
+
 }

+ 11 - 2
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/vo/profile/UserProfileUpdateReqVO.java

@@ -41,24 +41,33 @@ public class UserProfileUpdateReqVO {
     private String major;
 
     @ExcelProperty("硕士类型")
-    private String masterType;
+    private Integer masterType;
 
     @Schema(description = "导师id", example = "21284")
     private Long supervisorId;
 
+    @Schema(description = "校外导师id")
+    private Long externalSupervisorId;
+
     @Schema(description = "学号")
     private String userNumber;
 
     @Schema(description = "年级")
     private String grade;
 
-    @Schema(description = "导师名称")
+    @Schema(description = "校内导师名称")
     private String supervisor;
 
+    @Schema(description = "校外导师名称")
+    private String externalSupervisor;
+
     @Schema(description = "照片url")
     private String photoUrl;
 
     @Schema(description = "用户头像")
     private String avatar;
 
+    @Schema(description = "学生成果要求")
+    private String studentAchievementRequirement;
+
 }

+ 2 - 1
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/vo/user/StudentExportExcelVO.java

@@ -41,7 +41,8 @@ public class StudentExportExcelVO {
     private String major;
 
     @ExcelProperty("硕士类型")
-    private String masterType;
+    @DictFormat("system_student_master_type")
+    private Integer masterType;
 
     @ExcelIgnore
     private String userType;

+ 2 - 1
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/vo/user/StudentImportExcelVO.java

@@ -40,7 +40,8 @@ public class StudentImportExcelVO {
     private String major;
 
     @ExcelProperty("硕士类型")
-    private String masterType;
+    @DictFormat("system_student_master_type")
+    private Integer masterType;
 
     @ExcelProperty(value = "用户性别", converter = DictConvert.class)
     @DictFormat(DictTypeConstants.USER_SEX)

+ 2 - 2
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/vo/user/UserImportExcelVO.java

@@ -54,8 +54,8 @@ public class UserImportExcelVO {
     @ExcelProperty("专业名称")
     private String major;
 
-    @ExcelProperty("专硕名称")
-    private String masterType;
+    @ExcelProperty("硕士类型")
+    private Integer masterType;
 
     @ExcelProperty("工作间名称")
     private String deptName;

+ 2 - 2
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/vo/user/UserPageReqVO.java

@@ -47,8 +47,8 @@ public class UserPageReqVO extends PageParam {
     @Schema(description = "专业名称")
     private String major;
 
-    @Schema(description = "专硕(学硕)名称", example = "2")
-    private String masterType;
+    @Schema(description = "硕士类型", example = "2")
+    private Integer masterType;
 
     @Schema(description = "学号")
     private String userNumber;

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

@@ -114,7 +114,7 @@ public class UserRespVO{
     private String major;
 
     @Schema(description = "硕士类型")
-    private String masterType;
+    private Integer masterType;
     //
 
     @Schema(description = "用户照片是否存在")
@@ -123,5 +123,11 @@ public class UserRespVO{
     @Schema(description = "用户照片是达成毕业条件")
     private Long isGraduate;
 
+    @Schema(description = "学生成果要求")
+    private String studentAchievementRequirement;
+
+    @Schema(description = "校外导师id")
+    private Long externalSupervisorId;
+
 
 }

+ 8 - 2
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/vo/user/UserSaveReqVO.java

@@ -101,12 +101,18 @@ public class UserSaveReqVO {
     @Schema(description = "专业名称")
     private String major;
 
-    @Schema(description = "专硕名称")
-    private String masterType;
+    @Schema(description = "硕士类型")
+    private Integer masterType;
 
     @Schema(description = "年级")
     private String grade;
 
+    @Schema(description = "学生成果要求")
+    private String studentAchievementRequirement;
+
+    @Schema(description = "校外导师id")
+    private Long externalSupervisorId;
+
     // ========== 仅【创建】时,需要传递的字段 ==========
 
     @Schema(description = "密码", requiredMode = Schema.RequiredMode.REQUIRED, example = "123456")

+ 2 - 1
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/vo/user/graduateStudentExportExcelVO.java

@@ -35,7 +35,8 @@ public class graduateStudentExportExcelVO {
     private String major;
 
     @ExcelProperty("硕士类型")
-    private String masterType;
+    @DictFormat("system_student_master_type")
+    private Integer masterType;
 
     @ExcelProperty("学号")
     private String userNumber;

+ 2 - 1
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/vo/user/graduateStudentImportExcelVO.java

@@ -43,7 +43,8 @@ public class graduateStudentImportExcelVO {
     private String major;
 
     @ExcelProperty("硕士类型")
-    private String masterType;
+    @DictFormat("system_student_master_type")
+    private Integer masterType;
 
     @ExcelProperty("学号")
     private String userNumber;

+ 77 - 0
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/studentSelectSupervisorRecord/studentSelectSupervisorRecordDO.java

@@ -0,0 +1,77 @@
+package cn.iocoder.yudao.module.system.dal.dataobject.studentSelectSupervisorRecord;
+
+import lombok.*;
+import java.util.*;
+import java.time.LocalDateTime;
+import java.time.LocalDateTime;
+import java.time.LocalDateTime;
+import java.time.LocalDateTime;
+import com.baomidou.mybatisplus.annotation.*;
+import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
+
+/**
+ * 师生互选记录 DO
+ *
+ * @author 123123
+ */
+@TableName("student_select_supervisor_record")
+@KeySequence("student_select_supervisor_record_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class studentSelectSupervisorRecordDO extends BaseDO {
+
+
+    /**
+     * 选择id,自增
+     */
+    @TableId
+    private Integer id;
+
+    /**
+     * 项目id
+     */
+    private Integer projectId;
+    /**
+     * 学生id
+     */
+    private Integer studentId;
+    /**
+     * 校内导师id
+     */
+    private Integer supervisorId;
+    /**
+     * 校外导师id
+     */
+    private Integer externalSupervisorId;
+    /**
+     * 选择时间
+     */
+    private LocalDateTime selectTime;
+    /**
+     * 选择状态(0编辑(撤回),1待处理,2同意,3退回)
+     */
+    private Long selectType;
+    /**
+     * 学生电子签名
+     */
+    private String studentSignature;
+    /**
+     * 导师审批时间
+     */
+    private LocalDateTime supervisorApproveTime;
+    /**
+     * 导师电子签名
+     */
+    private String supervisorSignature;
+
+    /**
+     * 硕士类型
+     */
+    private Integer masterType;
+
+
+}

+ 62 - 0
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/studentSelectionProject/studentSelectionProjectDO.java

@@ -0,0 +1,62 @@
+package cn.iocoder.yudao.module.system.dal.dataobject.studentSelectionProject;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.*;
+
+import java.time.LocalDateTime;
+
+import com.baomidou.mybatisplus.annotation.*;
+import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
+
+/**
+ * 师生互选项目 DO
+ *
+ * @author 1
+ */
+@TableName("supervisor_student_selection_project")
+@KeySequence("supervisor_student_selection_project_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class studentSelectionProjectDO extends BaseDO {
+
+    /**
+     * 项目id
+     */
+    @TableId
+    private Integer id;
+    /**
+     * 项目名称
+     */
+    private String projectName;
+    /**
+     * 学生开始时间
+     */
+    private LocalDateTime studentStartTime;
+    /**
+     * 导师截止时间
+     */
+    private LocalDateTime supervisorConfirmDeadline;
+    /**
+     * 学生年级
+     */
+    private String studentGrade;
+    /**
+     * 导师数组
+     */
+    private String supervisorIds;
+
+    /**
+     * 是否开启导师弹窗
+     */
+    private Integer isSupervisor;
+
+    /**
+     * 是否开启学生弹窗
+     */
+    private Integer isStudent;
+
+}

+ 71 - 0
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/supervisorSelectionSetting/supervisorSelectionSettingDO.java

@@ -0,0 +1,71 @@
+package cn.iocoder.yudao.module.system.dal.dataobject.supervisorSelectionSetting;
+
+import lombok.*;
+import java.util.*;
+import java.time.LocalDateTime;
+import java.time.LocalDateTime;
+import com.baomidou.mybatisplus.annotation.*;
+import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
+
+/**
+ * 导师学硕专硕名额设置 DO
+ *
+ * @author 123123
+ */
+@TableName("supervisor_selection_setting")
+@KeySequence("supervisor_selection_setting_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class supervisorSelectionSettingDO extends BaseDO {
+
+    /**
+     * 自增id
+     */
+    @TableId
+    private Integer id;
+    /**
+     * 项目id
+     */
+    private Integer projectId;
+    /**
+     * 导师id
+     */
+    private Integer supervisorId;
+    /**
+     * 学硕名额
+     */
+    private Integer academicSlots;
+    /**
+     * 专硕名额
+     */
+    private Integer professionalSlots;
+
+    /**
+     * 导师姓名
+     */
+    @TableField(exist = false)
+    private String supervisorName;
+
+    /**
+     * 导师类型
+     */
+    @TableField(exist = false)
+    private String userType;
+
+    /**
+     * 已经占用的学硕名额
+     */
+    @TableField(exist = false)
+    private  Integer  occupiedAcademicSlots;
+
+    /**
+     * 已经占用的专硕名额
+     */
+    @TableField(exist = false)
+    private  Integer  occupiedProfessionalSlots;
+
+}

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

@@ -104,14 +104,17 @@ public class AdminUserDO extends TenantBaseDO {
      */
     private String major;
     /**
-     * 专硕名称
+     * 硕士类型
      */
-    private String masterType;
+    private Integer masterType;
     /**
-     * 导师id
+     * 校内导师id
      */
     private Long supervisorId;
-
+    /**
+     * 校外导师id
+     */
+    private Long externalSupervisorId;
     /**
      * 学号
      */
@@ -135,6 +138,12 @@ public class AdminUserDO extends TenantBaseDO {
      */
     private LocalDateTime photoUpdateTime;
 
+    /**
+     * 学生成果要求
+     */
+    private String studentAchievementRequirement;
+
+
     /**
      * 导师名称
      */

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

@@ -0,0 +1,50 @@
+package cn.iocoder.yudao.module.system.dal.mysql.studentSelectSupervisorRecord;
+
+import java.util.*;
+
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
+import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
+import cn.iocoder.yudao.module.system.dal.dataobject.studentSelectSupervisorRecord.studentSelectSupervisorRecordDO;
+import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO;
+import org.apache.ibatis.annotations.Mapper;
+import cn.iocoder.yudao.module.system.controller.admin.studentSelectSupervisorRecord.vo.*;
+import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.Select;
+
+/**
+ * 师生互选记录 Mapper
+ *
+ * @author 123123
+ */
+@Mapper
+public interface studentSelectSupervisorRecordMapper extends BaseMapperX<studentSelectSupervisorRecordDO> {
+
+    default PageResult<studentSelectSupervisorRecordDO> selectPage(studentSelectSupervisorRecordPageReqVO reqVO, Set<Long>roleIds, AdminUserDO loginUser) {
+
+        LambdaQueryWrapperX<studentSelectSupervisorRecordDO> queryWrapperX =new LambdaQueryWrapperX<>();
+
+        queryWrapperX.eqIfPresent(studentSelectSupervisorRecordDO::getProjectId, reqVO.getProjectId())
+                .eqIfPresent(studentSelectSupervisorRecordDO::getStudentId, reqVO.getStudentId())
+                .eqIfPresent(studentSelectSupervisorRecordDO::getSupervisorId, reqVO.getSupervisorId())//学院看招生情况会传导师id
+                .betweenIfPresent(studentSelectSupervisorRecordDO::getSelectTime, reqVO.getSelectTime())
+                .eqIfPresent(studentSelectSupervisorRecordDO::getSelectType, reqVO.getSelectType())
+                .eqIfPresent(studentSelectSupervisorRecordDO::getStudentSignature, reqVO.getStudentSignature())
+                .betweenIfPresent(studentSelectSupervisorRecordDO::getCreateTime, reqVO.getCreateTime())
+                .betweenIfPresent(studentSelectSupervisorRecordDO::getSupervisorApproveTime, reqVO.getSupervisorApproveTime())
+                .eqIfPresent(studentSelectSupervisorRecordDO::getSupervisorSignature, reqVO.getSupervisorSignature())
+                .eqIfPresent(studentSelectSupervisorRecordDO::getExternalSupervisorId, reqVO.getExternalSupervisorId())
+                .orderByDesc(studentSelectSupervisorRecordDO::getId);
+        if (roleIds.contains(113L)){//校内导师(查看选择了自己的)
+            queryWrapperX.eqIfPresent(studentSelectSupervisorRecordDO::getSupervisorId,loginUser.getId());
+        }else if (roleIds.contains(114L)){//学院看招生情况
+//            queryWrapperX.eqIfPresent(studentSelectSupervisorRecordDO::getSupervisorId,reqVO.getSupervisorId());
+        }
+        return selectPage(reqVO,queryWrapperX);
+    }
+
+    @Select("SELECT COUNT(*) FROM student_select_supervisor_record WHERE project_id =#{projectId} AND supervisor_id =#{supervisorId} AND master_type = #{masterType}")
+    Integer getSelectionOccupiedSlots(@Param("projectId") Integer projectId, @Param("supervisorId") Integer supervisorId,@Param("masterType")Integer masterType);
+
+
+}

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

@@ -0,0 +1,44 @@
+package cn.iocoder.yudao.module.system.dal.mysql.studentSelectionProject;
+
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
+import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
+import cn.iocoder.yudao.module.system.dal.dataobject.studentSelectionProject.studentSelectionProjectDO;
+import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO;
+import org.apache.ibatis.annotations.Mapper;
+import cn.iocoder.yudao.module.system.controller.admin.studentSelectionProject.vo.*;
+
+import java.util.Collections;
+import java.util.Set;
+
+/**
+ * 师生互选项目 Mapper
+ *
+ * @author 1
+ */
+@Mapper
+public interface studentSelectionProjectMapper extends BaseMapperX<studentSelectionProjectDO> {
+
+    default PageResult<studentSelectionProjectDO> selectPage(studentSelectionProjectPageReqVO reqVO, Set<Long> roleIds, AdminUserDO loginUser) {
+
+        LambdaQueryWrapperX<studentSelectionProjectDO> queryWrapperX =new LambdaQueryWrapperX<>();
+
+        queryWrapperX.likeIfPresent(studentSelectionProjectDO::getProjectName, reqVO.getProjectName())
+                .geIfPresent(studentSelectionProjectDO::getStudentStartTime, reqVO.getStudentStartTime())  // 大于等于学生开始时间
+                .leIfPresent(studentSelectionProjectDO::getSupervisorConfirmDeadline, reqVO.getSupervisorConfirmDeadline())  // 小于等于导师截至时间
+                .eqIfPresent(studentSelectionProjectDO::getStudentGrade, reqVO.getStudentGrade())
+                .betweenIfPresent(studentSelectionProjectDO::getCreateTime, reqVO.getCreateTime())
+                .orderByDesc(studentSelectionProjectDO::getId);
+
+        if (roleIds.contains(112L)){//学生
+            queryWrapperX.eqIfPresent(studentSelectionProjectDO::getStudentGrade,loginUser.getGrade());
+        }else if (roleIds.contains(113L)){//
+            queryWrapperX.apply("JSON_CONTAINS(supervisor_student_selection_project.supervisor_ids, CAST({0} AS JSON))", String.valueOf(loginUser.getId()));
+        }else if (roleIds.contains(114L)){//学院
+
+        }
+
+        return selectPage(reqVO,queryWrapperX);
+    }
+
+}

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

@@ -0,0 +1,42 @@
+package cn.iocoder.yudao.module.system.dal.mysql.supervisorSelectionSetting;
+
+import java.util.*;
+
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+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.query.MPJLambdaWrapperX;
+import cn.iocoder.yudao.module.system.dal.dataobject.dept.DeptDO;
+import cn.iocoder.yudao.module.system.dal.dataobject.studentAttendance.StudentAttendanceDO;
+import cn.iocoder.yudao.module.system.dal.dataobject.supervisorSelectionSetting.supervisorSelectionSettingDO;
+import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO;
+import org.apache.ibatis.annotations.Mapper;
+import cn.iocoder.yudao.module.system.controller.admin.supervisorSelectionSetting.vo.*;
+
+/**
+ * 导师学硕专硕名额设置 Mapper
+ *
+ * @author 123123
+ */
+@Mapper
+public interface supervisorSelectionSettingMapper extends BaseMapperX<supervisorSelectionSettingDO> {
+
+    default PageResult<supervisorSelectionSettingDO> selectPage(supervisorSelectionSettingPageReqVO reqVO) {
+
+        MPJLambdaWrapperX<supervisorSelectionSettingDO> mpjLambdaWrapperX = new MPJLambdaWrapperX<>();
+
+        mpjLambdaWrapperX
+                .betweenIfPresent(supervisorSelectionSettingDO::getCreateTime, reqVO.getCreateTime())
+                .selectAll(supervisorSelectionSettingDO.class)
+                .leftJoin(AdminUserDO.class, AdminUserDO::getId, supervisorSelectionSettingDO::getSupervisorId)
+                .selectAs(AdminUserDO::getNickname,supervisorSelectionSettingDO::getSupervisorName)//导师姓名
+                .selectAs(AdminUserDO::getUserType,supervisorSelectionSettingDO::getUserType)//导师类型
+                .eqIfExists(supervisorSelectionSettingDO::getProjectId, reqVO.getProjectId())
+                .eqIfExists(supervisorSelectionSettingDO::getSupervisorId, reqVO.getSupervisorId())
+                .eqIfExists(supervisorSelectionSettingDO::getAcademicSlots, reqVO.getAcademicSlots())
+                .eqIfExists(supervisorSelectionSettingDO::getProfessionalSlots, reqVO.getProfessionalSlots())
+                .orderByDesc(supervisorSelectionSettingDO::getId);
+        return selectPage(reqVO,mpjLambdaWrapperX);
+    }
+
+}

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

@@ -228,7 +228,7 @@ public interface AdminUserMapper extends BaseMapperX<AdminUserDO> {
                 .likeIfPresent(AdminUserDO::getUserNumber,reqVO.getUserNumber())//学号查询
                 .likeIfPresent(AdminUserDO::getWorkPlace,reqVO.getWorkPlace())//工作地点
                 .likeIfPresent(AdminUserDO::getMajor, reqVO.getMajor())//专业
-                .likeIfPresent(AdminUserDO::getMasterType, reqVO.getMasterType())//专硕
+                .eqIfPresent(AdminUserDO::getMasterType, reqVO.getMasterType())//专硕
                 .orderByDesc(AdminUserDO::getId);
         if (roleIds.contains( 114L)){//如果是教师
 
@@ -256,7 +256,7 @@ public interface AdminUserMapper extends BaseMapperX<AdminUserDO> {
                 .likeIfPresent(AdminUserDO::getWorkPlace,reqVO.getWorkPlace())
                 .likeIfPresent(AdminUserDO::getWorkPlace,reqVO.getWorkPlace())//工作地点
                 .likeIfPresent(AdminUserDO::getMajor, reqVO.getMajor())//专业
-                .likeIfPresent(AdminUserDO::getMasterType, reqVO.getMasterType())//专硕
+                .eqIfPresent(AdminUserDO::getMasterType, reqVO.getMasterType())//专硕
                 .orderByDesc(AdminUserDO::getId);
         if (roleIds.contains(113L)){//如果是教师
             queryWrapper.eqIfPresent(AdminUserDO::getSupervisorId,loginId);
@@ -335,5 +335,10 @@ public interface AdminUserMapper extends BaseMapperX<AdminUserDO> {
             "HAVING COUNT(sa.id) > 2;")
     List<AdminUserDO> getStudentErrorAttendance();
 
+    @Select("SELECT COUNT(*)  FROM system_user WHERE supervisor_id =#{supervisorId} AND master_type =#{masterType} AND deleted =0")
+    Integer countStudentListBySupervisorId(@Param("supervisorId") Integer supervisorId,@Param("masterType")Integer masterType);
 
+//    //是否开启弹窗
+//    @Select("SELECT is_selection_")
+//    Map<String,Integer>
 }

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

@@ -76,6 +76,7 @@ public class AdminAuthServiceImpl implements AdminAuthService {
         final LoginLogTypeEnum logTypeEnum = LoginLogTypeEnum.LOGIN_USERNAME;
         // 校验账号是否存在
         AdminUserDO user = userService.getUserByUsername(username);
+
         if (user == null) {
             createLoginLog(null, username, logTypeEnum, LoginResultEnum.BAD_CREDENTIALS);
             throw exception(AUTH_LOGIN_BAD_CREDENTIALS);

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

@@ -0,0 +1,58 @@
+package cn.iocoder.yudao.module.system.service.studentSelectSupervisorRecord;
+
+import java.util.*;
+import javax.validation.*;
+import cn.iocoder.yudao.module.system.controller.admin.studentSelectSupervisorRecord.vo.*;
+import cn.iocoder.yudao.module.system.dal.dataobject.studentSelectSupervisorRecord.studentSelectSupervisorRecordDO;
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.common.pojo.PageParam;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * 师生互选记录 Service 接口
+ *
+ * @author 123123
+ */
+public interface studentSelectSupervisorRecordService {
+
+    /**
+     * 创建师生互选记录
+     *
+     * @param createReqVO 创建信息
+     * @return 编号
+     */
+    Integer createStudentSelectSupervisorRecord(@Valid studentSelectSupervisorRecordSaveReqVO createReqVO);
+
+    /**
+     * 更新师生互选记录
+     *
+     * @param updateReqVO 更新信息
+     */
+    void updateStudentSelectSupervisorRecord(@Valid studentSelectSupervisorRecordSaveReqVO updateReqVO);
+
+    /**
+     * 删除师生互选记录
+     *
+     * @param id 编号
+     */
+    void deleteStudentSelectSupervisorRecord(Integer id);
+
+    /**
+     * 获得师生互选记录
+     *
+     * @param id 编号
+     * @return 师生互选记录
+     */
+    studentSelectSupervisorRecordDO getStudentSelectSupervisorRecord(Integer id);
+
+    /**
+     * 获得师生互选记录分页
+     *
+     * @param pageReqVO 分页查询
+     * @return 师生互选记录分页
+     */
+    PageResult<studentSelectSupervisorRecordDO> getStudentSelectSupervisorRecordPage(studentSelectSupervisorRecordPageReqVO pageReqVO);
+
+    Integer getSelectionOccupiedSlots( Integer projectId, Integer supervisorId,Integer masterType);
+
+}

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

@@ -0,0 +1,91 @@
+package cn.iocoder.yudao.module.system.service.studentSelectSupervisorRecord;
+
+import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils;
+import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO;
+import cn.iocoder.yudao.module.system.service.permission.PermissionService;
+import cn.iocoder.yudao.module.system.service.user.AdminUserService;
+import org.springframework.stereotype.Service;
+import javax.annotation.Resource;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.*;
+import cn.iocoder.yudao.module.system.controller.admin.studentSelectSupervisorRecord.vo.*;
+import cn.iocoder.yudao.module.system.dal.dataobject.studentSelectSupervisorRecord.studentSelectSupervisorRecordDO;
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.common.pojo.PageParam;
+import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
+
+import cn.iocoder.yudao.module.system.dal.mysql.studentSelectSupervisorRecord.studentSelectSupervisorRecordMapper;
+
+import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
+import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.*;
+
+/**
+ * 师生互选记录 Service 实现类
+ *
+ * @author 123123
+ */
+@Service
+@Validated
+public class studentSelectSupervisorRecordServiceImpl implements studentSelectSupervisorRecordService {
+
+    @Resource
+    private studentSelectSupervisorRecordMapper studentSelectSupervisorRecordMapper;
+
+    @Resource
+    private AdminUserService adminUserService;
+    @Resource
+    private PermissionService permissionService;
+
+    @Override
+    public Integer createStudentSelectSupervisorRecord(studentSelectSupervisorRecordSaveReqVO createReqVO) {
+        // 插入
+        studentSelectSupervisorRecordDO studentSelectSupervisorRecord = BeanUtils.toBean(createReqVO, studentSelectSupervisorRecordDO.class);
+        studentSelectSupervisorRecordMapper.insert(studentSelectSupervisorRecord);
+        // 返回
+        return studentSelectSupervisorRecord.getId();
+    }
+
+    @Override
+    public void updateStudentSelectSupervisorRecord(studentSelectSupervisorRecordSaveReqVO updateReqVO) {
+        // 校验存在
+        validateStudentSelectSupervisorRecordExists(updateReqVO.getId());
+        // 更新
+        studentSelectSupervisorRecordDO updateObj = BeanUtils.toBean(updateReqVO, studentSelectSupervisorRecordDO.class);
+        studentSelectSupervisorRecordMapper.updateById(updateObj);
+    }
+
+    @Override
+    public void deleteStudentSelectSupervisorRecord(Integer id) {
+        // 校验存在
+        validateStudentSelectSupervisorRecordExists(id);
+        // 删除
+        studentSelectSupervisorRecordMapper.deleteById(id);
+    }
+
+    private void validateStudentSelectSupervisorRecordExists(Integer id) {
+        if (studentSelectSupervisorRecordMapper.selectById(id) == null) {
+            throw exception(STUDENT_SELECT_SUPERVISOR_RECORD_NOT_EXISTS);
+        }
+    }
+
+    @Override
+    public studentSelectSupervisorRecordDO getStudentSelectSupervisorRecord(Integer id) {
+        return studentSelectSupervisorRecordMapper.selectById(id);
+    }
+
+    @Override
+    public PageResult<studentSelectSupervisorRecordDO> getStudentSelectSupervisorRecordPage(studentSelectSupervisorRecordPageReqVO pageReqVO) {
+        Long loginId = SecurityFrameworkUtils.getLoginUserId();
+        AdminUserDO loginUser = adminUserService.getUser(loginId);
+        Set<Long> roleIds = permissionService.getUserRoleIdListByUserId(loginId);
+        return studentSelectSupervisorRecordMapper.selectPage(pageReqVO,roleIds,loginUser);
+    }
+
+    @Override
+    public Integer getSelectionOccupiedSlots( Integer projectId, Integer supervisorId ,Integer masterType){
+        return studentSelectSupervisorRecordMapper.getSelectionOccupiedSlots(projectId,supervisorId,masterType);
+    }
+
+}

+ 53 - 0
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/studentSelectionProject/studentSelectionProjectService.java

@@ -0,0 +1,53 @@
+package cn.iocoder.yudao.module.system.service.studentSelectionProject;
+
+import javax.validation.*;
+import cn.iocoder.yudao.module.system.controller.admin.studentSelectionProject.vo.*;
+import cn.iocoder.yudao.module.system.dal.dataobject.studentSelectionProject.studentSelectionProjectDO;
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+
+/**
+ * 师生互选项目 Service 接口
+ *
+ * @author 1
+ */
+public interface studentSelectionProjectService {
+
+    /**
+     * 创建师生互选项目
+     *
+     * @param createReqVO 创建信息
+     * @return 编号
+     */
+    Integer createStudentSelectionProject(@Valid studentSelectionProjectSaveReqVO createReqVO);
+
+    /**
+     * 更新师生互选项目
+     *
+     * @param updateReqVO 更新信息
+     */
+    void updateStudentSelectionProject(@Valid studentSelectionProjectSaveReqVO updateReqVO);
+
+    /**
+     * 删除师生互选项目
+     *
+     * @param id 编号
+     */
+    void deleteStudentSelectionProject(Integer id);
+
+    /**
+     * 获得师生互选项目
+     *
+     * @param id 编号
+     * @return 师生互选项目
+     */
+    studentSelectionProjectDO getStudentSelectionProject(Integer id);
+
+    /**
+     * 获得师生互选项目分页
+     *
+     * @param pageReqVO 分页查询
+     * @return 师生互选项目分页
+     */
+    PageResult<studentSelectionProjectDO> getStudentSelectionProjectPage(studentSelectionProjectPageReqVO pageReqVO);
+
+}

+ 86 - 0
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/studentSelectionProject/studentSelectionProjectServiceImpl.java

@@ -0,0 +1,86 @@
+package cn.iocoder.yudao.module.system.service.studentSelectionProject;
+
+import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils;
+import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO;
+import cn.iocoder.yudao.module.system.service.permission.PermissionService;
+import cn.iocoder.yudao.module.system.service.user.AdminUserService;
+import org.springframework.stereotype.Service;
+import javax.annotation.Resource;
+import org.springframework.validation.annotation.Validated;
+
+import cn.iocoder.yudao.module.system.controller.admin.studentSelectionProject.vo.*;
+import cn.iocoder.yudao.module.system.dal.dataobject.studentSelectionProject.studentSelectionProjectDO;
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
+
+import cn.iocoder.yudao.module.system.dal.mysql.studentSelectionProject.studentSelectionProjectMapper;
+
+import java.util.Set;
+
+import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
+import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.*;
+
+/**
+ * 师生互选项目 Service 实现类
+ *
+ * @author 1
+ */
+@Service
+@Validated
+public class studentSelectionProjectServiceImpl implements studentSelectionProjectService {
+
+    @Resource
+    private studentSelectionProjectMapper studentSelectionProjectMapper;
+
+    @Resource
+    private PermissionService permissionService;
+
+    @Resource
+    private AdminUserService adminUserService;
+
+    @Override
+    public Integer createStudentSelectionProject(studentSelectionProjectSaveReqVO createReqVO) {
+        // 插入
+        studentSelectionProjectDO studentSelectionProject = BeanUtils.toBean(createReqVO, studentSelectionProjectDO.class);
+        studentSelectionProjectMapper.insert(studentSelectionProject);
+        // 返回
+        return studentSelectionProject.getId();
+    }
+
+    @Override
+    public void updateStudentSelectionProject(studentSelectionProjectSaveReqVO updateReqVO) {
+        // 校验存在
+        validateStudentSelectionProjectExists(updateReqVO.getId());
+        // 更新
+        studentSelectionProjectDO updateObj = BeanUtils.toBean(updateReqVO, studentSelectionProjectDO.class);
+        studentSelectionProjectMapper.updateById(updateObj);
+    }
+
+    @Override
+    public void deleteStudentSelectionProject(Integer id) {
+        // 校验存在
+        validateStudentSelectionProjectExists(id);
+        // 删除
+        studentSelectionProjectMapper.deleteById(id);
+    }
+
+    private void validateStudentSelectionProjectExists(Integer id) {
+        if (studentSelectionProjectMapper.selectById(id) == null) {
+            throw exception(STUDENT_SELECTION_PROJECT_NOT_EXISTS);
+        }
+    }
+
+    @Override
+    public studentSelectionProjectDO getStudentSelectionProject(Integer id) {
+        return studentSelectionProjectMapper.selectById(id);
+    }
+
+    @Override
+    public PageResult<studentSelectionProjectDO> getStudentSelectionProjectPage(studentSelectionProjectPageReqVO pageReqVO) {
+        Long loginId = SecurityFrameworkUtils.getLoginUserId();
+        AdminUserDO loginUser = adminUserService.getUser(loginId);
+        Set<Long> roleIds = permissionService.getUserRoleIdListByUserId(loginId);
+        return studentSelectionProjectMapper.selectPage(pageReqVO,roleIds,loginUser);
+    }
+
+}

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

@@ -0,0 +1,55 @@
+package cn.iocoder.yudao.module.system.service.supervisorSelectionSetting;
+
+import java.util.*;
+import javax.validation.*;
+import cn.iocoder.yudao.module.system.controller.admin.supervisorSelectionSetting.vo.*;
+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.PageParam;
+
+/**
+ * 导师学硕专硕名额设置 Service 接口
+ *
+ * @author 123123
+ */
+public interface supervisorSelectionSettingService {
+
+    /**
+     * 创建导师学硕专硕名额设置
+     *
+     * @param createReqVO 创建信息
+     * @return 编号
+     */
+    Integer createSupervisorSelectionSetting(@Valid supervisorSelectionSettingSaveReqVO createReqVO);
+
+    /**
+     * 更新导师学硕专硕名额设置
+     *
+     * @param updateReqVO 更新信息
+     */
+    void updateSupervisorSelectionSetting(@Valid supervisorSelectionSettingSaveReqVO updateReqVO);
+
+    /**
+     * 删除导师学硕专硕名额设置
+     *
+     * @param id 编号
+     */
+    void deleteSupervisorSelectionSetting(Integer id);
+
+    /**
+     * 获得导师学硕专硕名额设置
+     *
+     * @param id 编号
+     * @return 导师学硕专硕名额设置
+     */
+    supervisorSelectionSettingDO getSupervisorSelectionSetting(Integer id);
+
+    /**
+     * 获得导师学硕专硕名额设置分页
+     *
+     * @param pageReqVO 分页查询
+     * @return 导师学硕专硕名额设置分页
+     */
+    PageResult<supervisorSelectionSettingDO> getSupervisorSelectionSettingPage(supervisorSelectionSettingPageReqVO pageReqVO);
+
+}

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

@@ -0,0 +1,88 @@
+package cn.iocoder.yudao.module.system.service.supervisorSelectionSetting;
+
+import cn.iocoder.yudao.module.system.service.studentSelectSupervisorRecord.studentSelectSupervisorRecordService;
+import cn.iocoder.yudao.module.system.service.user.AdminUserService;
+import org.springframework.stereotype.Service;
+import javax.annotation.Resource;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.*;
+import cn.iocoder.yudao.module.system.controller.admin.supervisorSelectionSetting.vo.*;
+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.PageParam;
+import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
+
+import cn.iocoder.yudao.module.system.dal.mysql.supervisorSelectionSetting.supervisorSelectionSettingMapper;
+
+import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
+import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.*;
+
+/**
+ * 导师学硕专硕名额设置 Service 实现类
+ *
+ * @author 123123
+ */
+@Service
+@Validated
+public class supervisorSelectionSettingServiceImpl implements supervisorSelectionSettingService {
+
+    @Resource
+    private supervisorSelectionSettingMapper supervisorSelectionSettingMapper;
+    @Resource
+    private AdminUserService adminUserService;
+    @Resource
+    private studentSelectSupervisorRecordService studentSelectSupervisorRecordService;
+
+    @Override
+    public Integer createSupervisorSelectionSetting(supervisorSelectionSettingSaveReqVO createReqVO) {
+        // 插入
+        supervisorSelectionSettingDO supervisorSelectionSetting = BeanUtils.toBean(createReqVO, supervisorSelectionSettingDO.class);
+        supervisorSelectionSettingMapper.insert(supervisorSelectionSetting);
+        // 返回
+        return supervisorSelectionSetting.getId();
+    }
+
+    @Override
+    public void updateSupervisorSelectionSetting(supervisorSelectionSettingSaveReqVO updateReqVO) {
+        // 校验存在
+        validateSupervisorSelectionSettingExists(updateReqVO.getId());
+        // 更新
+        supervisorSelectionSettingDO updateObj = BeanUtils.toBean(updateReqVO, supervisorSelectionSettingDO.class);
+        supervisorSelectionSettingMapper.updateById(updateObj);
+    }
+
+    @Override
+    public void deleteSupervisorSelectionSetting(Integer id) {
+        // 校验存在
+        validateSupervisorSelectionSettingExists(id);
+        // 删除
+        supervisorSelectionSettingMapper.deleteById(id);
+    }
+
+    private void validateSupervisorSelectionSettingExists(Integer id) {
+        if (supervisorSelectionSettingMapper.selectById(id) == null) {
+            throw exception(SUPERVISOR_SELECTION_SETTING_NOT_EXISTS);
+        }
+    }
+
+    @Override
+    public supervisorSelectionSettingDO getSupervisorSelectionSetting(Integer id) {
+        return supervisorSelectionSettingMapper.selectById(id);
+    }
+
+    @Override
+    public PageResult<supervisorSelectionSettingDO> getSupervisorSelectionSettingPage(supervisorSelectionSettingPageReqVO pageReqVO) {
+        PageResult<supervisorSelectionSettingDO> result =supervisorSelectionSettingMapper.selectPage(pageReqVO);
+        result.getList().forEach(re->{
+            Integer supervisorId =re.getSupervisorId();
+            Integer  occupiedAcademicSlots =adminUserService.countStudentListBySupervisorId(supervisorId,1);//占用学硕
+            Integer  occupiedProfessionalSlots =adminUserService.countStudentListBySupervisorId(supervisorId,2);//占用专硕
+            re.setOccupiedAcademicSlots(occupiedAcademicSlots);
+            re.setOccupiedProfessionalSlots(occupiedProfessionalSlots);
+        });
+        return result;
+    }
+
+}

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

@@ -8,6 +8,7 @@ import cn.iocoder.yudao.module.system.controller.admin.user.vo.user.*;
 import cn.iocoder.yudao.framework.common.pojo.PageResult;
 import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO;
 import cn.iocoder.yudao.module.system.dal.mysql.user.AdminUserMapper;
+import org.apache.ibatis.annotations.Param;
 
 import javax.validation.Valid;
 import java.io.InputStream;
@@ -238,6 +239,8 @@ public interface AdminUserService {
 
     //获取三天内都缺勤的人
     List<AdminUserDO> getStudentErrorAttendance();
+
+    Integer countStudentListBySupervisorId(Integer supervisorId,Integer masterType);
 }
 
 

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

@@ -1176,5 +1176,9 @@ public class AdminUserServiceImpl implements AdminUserService {
     public  List<AdminUserDO> getStudentErrorAttendance(){
         return userMapper.getStudentErrorAttendance();
     }
+    @Override
+     public Integer countStudentListBySupervisorId(Integer supervisorId,Integer masterType){
+        return userMapper.countStudentListBySupervisorId(supervisorId,masterType);
+    }
 }
 

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

@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="cn.iocoder.yudao.module.system.dal.mysql.studentSelectSupervisorRecord.studentSelectSupervisorRecordMapper">
+
+    <!--
+        一般情况下,尽可能使用 Mapper 进行 CRUD 增删改查即可。
+        无法满足的场景,例如说多表关联查询,才使用 XML 编写 SQL。
+        代码生成器暂时只生成 Mapper XML 文件本身,更多推荐 MybatisX 快速开发插件来生成查询。
+        文档可见:https://www.iocoder.cn/MyBatis/x-plugins/
+     -->
+
+</mapper>

+ 12 - 0
yudao-module-system/yudao-module-system-biz/src/main/resources/Mapper/studentSelectionProject/studentSelectionProjectMapper.xml

@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="cn.iocoder.yudao.module.system.dal.mysql.studentSelectionProject.studentSelectionProjectMapper">
+
+    <!--
+        一般情况下,尽可能使用 Mapper 进行 CRUD 增删改查即可。
+        无法满足的场景,例如说多表关联查询,才使用 XML 编写 SQL。
+        代码生成器暂时只生成 Mapper XML 文件本身,更多推荐 MybatisX 快速开发插件来生成查询。
+        文档可见:https://www.iocoder.cn/MyBatis/x-plugins/
+     -->
+
+</mapper>

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

@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="cn.iocoder.yudao.module.system.dal.mysql.supervisorSelectionSetting.supervisorSelectionSettingMapper">
+
+    <!--
+        一般情况下,尽可能使用 Mapper 进行 CRUD 增删改查即可。
+        无法满足的场景,例如说多表关联查询,才使用 XML 编写 SQL。
+        代码生成器暂时只生成 Mapper XML 文件本身,更多推荐 MybatisX 快速开发插件来生成查询。
+        文档可见:https://www.iocoder.cn/MyBatis/x-plugins/
+     -->
+
+</mapper>