Pārlūkot izejas kodu

1、优化整合老师端信息

rayson 4 mēneši atpakaļ
vecāks
revīzija
7965477506
69 mainītis faili ar 2761 papildinājumiem un 160 dzēšanām
  1. 9 0
      menduner/menduner-system-api/src/main/java/com/citu/module/menduner/system/enums/ErrorCodeConstants.java
  2. 20 0
      menduner/menduner-system-api/src/main/java/com/citu/module/menduner/system/enums/person/TeacherAuthStatusEnum.java
  3. 19 0
      menduner/menduner-system-api/src/main/java/com/citu/module/menduner/system/enums/school/SchoolOrganizationTypeEnum.java
  4. 109 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/admin/teacher/TeacherController.java
  5. 14 3
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/app/common/major/AppMajorController.java
  6. 1 1
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/app/common/major/vo/AppMajorRespVO.java
  7. 76 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/app/common/school/AppSchoolController.java
  8. 26 1
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/app/jobhunt/person/AppPersonResumeController.java
  9. 4 4
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/app/jobhunt/person/AppStudentController.java
  10. 3 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/app/jobhunt/person/student/AppStudentSaveReqVO.java
  11. 0 38
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/app/jobhunt/school/AppSchoolController.java
  12. 69 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/app/teacher/info/AppTeacherController.java
  13. 100 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/app/teacher/school/AppSchoolInfoController.java
  14. 122 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/app/teacher/school/AppSchoolStudentController.java
  15. 1 1
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/base/fair/JobFairEnterpriseRespVO.java
  16. 3 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/base/person/info/PersonSimpleRespVO.java
  17. 8 17
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/base/person/student/StudentPageReqVO.java
  18. 28 24
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/base/person/student/StudentRespVO.java
  19. 6 17
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/base/person/student/StudentSaveReqVO.java
  20. 21 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/base/person/student/record/StudentPracticeRecordSchoolPageReqVO.java
  21. 20 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/base/person/student/record/StudentPracticeRecordSchoolRespVO.java
  22. 19 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/base/person/student/report/StudentPracticeReportQueryReqVO.java
  23. 15 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/base/person/teacher/TeacherAuthReqVO.java
  24. 55 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/base/person/teacher/TeacherPageReqVO.java
  25. 52 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/base/person/teacher/TeacherRegisterReqVO.java
  26. 96 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/base/person/teacher/TeacherRespVO.java
  27. 39 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/base/person/teacher/TeacherSaveReqVO.java
  28. 43 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/base/school/SchoolInfoPageReqVO.java
  29. 57 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/base/school/SchoolInfoRespVO.java
  30. 36 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/base/school/SchoolInfoSaveReqVO.java
  31. 39 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/base/school/SchoolOrganizationChildrenRespVO.java
  32. 30 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/base/school/SchoolOrganizationDeptSaveReqVO.java
  33. 26 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/base/school/SchoolOrganizationListReqVO.java
  34. 40 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/base/school/SchoolOrganizationPageReqVO.java
  35. 44 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/base/school/SchoolOrganizationRespVO.java
  36. 35 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/base/school/SchoolOrganizationSaveReqVO.java
  37. 17 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/base/school/SchoolOrganizationSimpleSaveVO.java
  38. 1 1
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/convert/MajorConvert.java
  39. 0 1
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/dal/dataobject/fair/FairTagContent.java
  40. 4 20
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/dal/dataobject/person/StudentDO.java
  41. 98 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/dal/dataobject/person/TeacherDO.java
  42. 68 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/dal/dataobject/school/SchoolInfoDO.java
  43. 51 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/dal/dataobject/school/SchoolOrganizationDO.java
  44. 47 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/dal/dataobject/school/SchoolTeacherDO.java
  45. 35 5
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/dal/mysql/person/StudentMapper.java
  46. 86 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/dal/mysql/person/StudentPracticeRecordMapper.java
  47. 40 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/dal/mysql/person/TeacherMapper.java
  48. 42 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/dal/mysql/school/SchoolInfoMapper.java
  49. 18 12
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/dal/mysql/school/SchoolMapper.java
  50. 33 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/dal/mysql/school/SchoolTeacherMapper.java
  51. 17 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/dal/redis/RedisKeyConstants.java
  52. 1 1
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/fair/FairServiceImpl.java
  53. 3 1
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/major/MajorService.java
  54. 22 1
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/major/MajorServiceImpl.java
  55. 11 2
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/person/info/PersonInfoServiceImpl.java
  56. 28 2
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/person/student/StudentPracticeRecordService.java
  57. 43 2
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/person/student/StudentPracticeRecordServiceImpl.java
  58. 2 1
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/person/student/StudentPracticeReportService.java
  59. 2 2
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/person/student/StudentPracticeReportServiceImpl.java
  60. 17 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/person/student/StudentService.java
  61. 39 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/person/student/StudentServiceImpl.java
  62. 75 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/person/teacher/TeacherService.java
  63. 129 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/person/teacher/TeacherServiceImpl.java
  64. 83 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/school/SchoolInfoService.java
  65. 121 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/school/SchoolInfoServiceImpl.java
  66. 98 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/school/SchoolOrganizationService.java
  67. 200 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/school/SchoolOrganizationServiceImpl.java
  68. 14 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/school/SchoolService.java
  69. 31 3
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/school/SchoolServiceImpl.java

+ 9 - 0
menduner/menduner-system-api/src/main/java/com/citu/module/menduner/system/enums/ErrorCodeConstants.java

@@ -656,4 +656,13 @@ public interface ErrorCodeConstants {
     ErrorCode STUDENT_PRACTICE_RECORD_NOT_EXISTS = new ErrorCode(1_100_066_001, "学生实习记录不存在");
     ErrorCode STUDENT_PRACTICE_EVALUATE_NOT_EXISTS = new ErrorCode(1_100_066_002, "学生实习评价不存在");
     ErrorCode STUDENT_PRACTICE_REPORT_NOT_EXISTS = new ErrorCode(1_100_066_003, "学生实习报告不存在");
+
+    // ========== 老师信息 1_100_067_000 ==========
+    ErrorCode TEACHER_NOT_EXISTS = new ErrorCode(1_100_067_001, "老师信息不存在");
+
+    ErrorCode TEACHER_NAME_NOT_NULL = new ErrorCode(1_100_067_002, "老师姓名不能为空");
+
+    // ========== 学校信息 1_100_068_000 ==========
+    ErrorCode SCHOOL_INFO_NOT_EXISTS = new ErrorCode(1_100_068_001, "学校信息不存在");
+    ErrorCode SCHOOL_ORGANIZATION_NOT_EXISTS = new ErrorCode(1_100_068_002, "学校组织机构不存在");
 }

+ 20 - 0
menduner/menduner-system-api/src/main/java/com/citu/module/menduner/system/enums/person/TeacherAuthStatusEnum.java

@@ -0,0 +1,20 @@
+package com.citu.module.menduner.system.enums.person;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+/**
+ * 审核状态 0.待审核 1.已通过  2.拒绝
+ */
+@Getter
+@AllArgsConstructor
+public enum TeacherAuthStatusEnum {
+    PENDING("0", "待审核"),
+    PASSED("1", "已通过"),
+    REJECTED("2", "拒绝");
+
+    private final String status;
+    private final String desc;
+
+
+}

+ 19 - 0
menduner/menduner-system-api/src/main/java/com/citu/module/menduner/system/enums/school/SchoolOrganizationTypeEnum.java

@@ -0,0 +1,19 @@
+package com.citu.module.menduner.system.enums.school;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+/**
+ * 学校机构类型(0院系|1专业|2班级)
+ */
+@Getter
+@AllArgsConstructor
+public enum SchoolOrganizationTypeEnum {
+    DEPARTMENT("0", "院系"),
+    MAJOR("1", "专业"),
+    CLASS("2", "班级");
+
+    private final String type;
+    private final String name;
+
+}

+ 109 - 0
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/admin/teacher/TeacherController.java

@@ -0,0 +1,109 @@
+package com.citu.module.menduner.system.controller.admin.teacher;
+
+
+import com.citu.framework.apilog.core.annotation.ApiAccessLog;
+import com.citu.framework.common.pojo.CommonResult;
+import com.citu.framework.common.pojo.PageParam;
+import com.citu.framework.common.pojo.PageResult;
+import com.citu.framework.common.util.object.BeanUtils;
+import com.citu.framework.excel.core.util.ExcelUtils;
+import com.citu.module.menduner.system.controller.base.person.teacher.TeacherAuthReqVO;
+import com.citu.module.menduner.system.controller.base.person.teacher.TeacherPageReqVO;
+import com.citu.module.menduner.system.controller.base.person.teacher.TeacherRespVO;
+import com.citu.module.menduner.system.controller.base.school.SchoolRespVO;
+import com.citu.module.menduner.system.dal.dataobject.person.TeacherDO;
+import com.citu.module.menduner.system.dal.dataobject.school.SchoolDO;
+import com.citu.module.menduner.system.service.person.teacher.TeacherService;
+import com.citu.module.menduner.system.service.school.SchoolInfoService;
+import com.citu.module.menduner.system.service.school.SchoolService;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletResponse;
+import javax.validation.Valid;
+import java.io.IOException;
+import java.util.List;
+
+import static com.citu.framework.apilog.core.enums.OperateTypeEnum.EXPORT;
+import static com.citu.framework.common.pojo.CommonResult.success;
+
+
+@Tag(name = "管理后台 - 老师信息")
+@RestController
+@RequestMapping("/menduner/system/teacher")
+@Validated
+public class TeacherController {
+
+    @Resource
+    private TeacherService teacherService;
+
+    @Resource
+    private SchoolInfoService schoolInfoService;
+
+    @DeleteMapping("/delete")
+    @Operation(summary = "删除老师信息")
+    @Parameter(name = "id", description = "编号", required = true)
+    @PreAuthorize("@ss.hasPermission('menduner:system:teacher:delete')")
+    public CommonResult<Boolean> deleteTeacher(@RequestParam("id") Long id) {
+        teacherService.deleteTeacher(id);
+        return success(true);
+    }
+
+    @GetMapping("/get")
+    @Operation(summary = "获得老师信息")
+    @Parameter(name = "id", description = "编号", required = true, example = "1024")
+//    @PreAuthorize("@ss.hasPermission('menduner:system:teacher:query')")
+    public CommonResult<TeacherRespVO> getTeacher(@RequestParam("id") Long id) {
+        TeacherDO teacher = teacherService.getTeacher(id);
+        return success(BeanUtils.toBean(teacher, TeacherRespVO.class));
+    }
+
+    @GetMapping("/page")
+    @Operation(summary = "获得老师信息分页")
+//    @PreAuthorize("@ss.hasPermission('menduner:system:teacher:query')")
+    public CommonResult<PageResult<TeacherRespVO>> getTeacherPage(@Valid TeacherPageReqVO pageReqVO) {
+        PageResult<TeacherDO> pageResult = teacherService.getTeacherPage(pageReqVO);
+        PageResult<TeacherRespVO> resp = BeanUtils.toBean(pageResult, TeacherRespVO.class);
+        for (TeacherRespVO vo : resp.getList()) {
+            vo.setSchool(schoolInfoService.getBySchoolId(vo.getSchoolId()));
+        }
+        return success(resp);
+    }
+
+    @GetMapping("/export-excel")
+    @Operation(summary = "导出老师信息 Excel")
+    @PreAuthorize("@ss.hasPermission('menduner:system:teacher:export')")
+    @ApiAccessLog(operateType = EXPORT)
+    public void exportTeacherExcel(@Valid TeacherPageReqVO pageReqVO,
+                                   HttpServletResponse response) throws IOException {
+        pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
+        List<TeacherDO> list = teacherService.getTeacherPage(pageReqVO).getList();
+        // 导出 Excel
+        ExcelUtils.write(response, "老师信息.xls", "数据", TeacherRespVO.class,
+                BeanUtils.toBean(list, TeacherRespVO.class));
+    }
+
+    @PostMapping("/approved")
+    @Operation(summary = "审批通过")
+//    @PreAuthorize("@ss.hasPermission('menduner:system:teacher:update')")
+    public CommonResult<Boolean> approved(@Valid @RequestBody TeacherAuthReqVO reqVO) {
+        teacherService.approved(reqVO);
+        return success(true);
+    }
+
+
+    @PostMapping("/refuse")
+    @Operation(summary = "审批拒绝")
+//    @PreAuthorize("@ss.hasPermission('menduner:system:teacher:update')")
+    public CommonResult<Boolean> refuse(@Valid @RequestBody TeacherAuthReqVO reqVO) {
+        teacherService.refuse(reqVO);
+        return success(true);
+    }
+
+
+}

+ 14 - 3
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/app/jobhunt/major/AppMajorController.java → menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/app/common/major/AppMajorController.java

@@ -1,10 +1,14 @@
-package com.citu.module.menduner.system.controller.app.jobhunt.major;
+package com.citu.module.menduner.system.controller.app.common.major;
 
 import com.citu.framework.common.pojo.CommonResult;
-import com.citu.module.menduner.system.controller.app.jobhunt.major.vo.AppMajorRespVO;
+import com.citu.framework.common.util.object.BeanUtils;
+import com.citu.module.menduner.system.controller.app.common.major.vo.AppMajorRespVO;
+import com.citu.module.menduner.system.controller.base.major.MajorRespVO;
+import com.citu.module.menduner.system.dal.dataobject.major.MajorDO;
 import com.citu.module.menduner.system.service.major.MajorService;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.tags.Tag;
+import org.springframework.context.annotation.Bean;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
@@ -17,7 +21,7 @@ import java.util.Map;
 
 import static com.citu.framework.common.pojo.CommonResult.success;
 
-@Tag(name = "求职端 - 专业信息")
+@Tag(name = "公共 - 专业信息")
 @RestController
 @RequestMapping("/menduner/system/major")
 @Validated
@@ -43,4 +47,11 @@ public class AppMajorController {
     public CommonResult<Map<String, List<AppMajorRespVO>>> getAll() {
         return success(majorService.getAll());
     }
+
+    @GetMapping("/list")
+    @Operation(summary = "获取所有专业列表")
+    public CommonResult<List<MajorRespVO>> List(@RequestParam(value = "name", required = false) String name) {
+        List<MajorDO> list = majorService.list(name);
+        return success(BeanUtils.toBean(list, MajorRespVO.class));
+    }
 }

+ 1 - 1
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/app/jobhunt/major/vo/AppMajorRespVO.java → menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/app/common/major/vo/AppMajorRespVO.java

@@ -1,4 +1,4 @@
-package com.citu.module.menduner.system.controller.app.jobhunt.major.vo;
+package com.citu.module.menduner.system.controller.app.common.major.vo;
 
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Data;

+ 76 - 0
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/app/common/school/AppSchoolController.java

@@ -0,0 +1,76 @@
+package com.citu.module.menduner.system.controller.app.common.school;
+
+import com.citu.framework.common.pojo.CommonResult;
+import com.citu.framework.common.util.object.BeanUtils;
+import com.citu.framework.security.core.annotations.PreAuthenticated;
+import com.citu.module.menduner.system.controller.base.CommonRespVO;
+import com.citu.module.menduner.system.controller.base.school.SchoolInfoRespVO;
+import com.citu.module.menduner.system.controller.base.school.SchoolOrganizationListReqVO;
+import com.citu.module.menduner.system.controller.base.school.SchoolOrganizationRespVO;
+import com.citu.module.menduner.system.controller.base.school.SchoolRespVO;
+import com.citu.module.menduner.system.dal.dataobject.school.SchoolDO;
+import com.citu.module.menduner.system.dal.dataobject.school.SchoolInfoDO;
+import com.citu.module.menduner.system.dal.dataobject.school.SchoolOrganizationDO;
+import com.citu.module.menduner.system.service.school.SchoolInfoService;
+import com.citu.module.menduner.system.service.school.SchoolOrganizationService;
+import com.citu.module.menduner.system.service.school.SchoolService;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+import static com.citu.framework.common.pojo.CommonResult.success;
+
+@Tag(name = "公共 - 学校信息")
+@RestController
+@RequestMapping("/menduner/system/school")
+@Validated
+@Slf4j
+public class AppSchoolController {
+
+    @Resource
+    private SchoolService schoolService;
+
+    @Resource
+    private SchoolOrganizationService schoolOrganizationService;
+    
+    @Resource
+    private SchoolInfoService schoolInfoService;
+
+    @GetMapping("/search/by/name")
+    @Operation(summary = "根据学校名称模糊搜索")
+    public CommonResult<List<CommonRespVO>> search(@RequestParam("name") String name) {
+        return success(schoolService.searchByName(name));
+    }
+
+    @GetMapping("/list")
+    @Operation(summary = "获取学校列表")
+    public CommonResult<List<SchoolRespVO>> list(@RequestParam(value = "name", required = false) String name) {
+        List<SchoolDO> list = schoolService.list(name);
+        return success(BeanUtils.toBean(list, SchoolRespVO.class));
+    }
+
+    @GetMapping("/info/list")
+    @Operation(summary = "获取学校信息列表")
+    public CommonResult<List<SchoolInfoRespVO>> getInfoList(@RequestParam(value = "name", required = false) String name) {
+        List<SchoolInfoDO> list =
+                schoolInfoService.list(name);
+        return success(BeanUtils.toBean(list, SchoolInfoRespVO.class));
+    }
+
+    
+    @GetMapping("/organization/list")
+    @Operation(summary = "根据条件机构信息")
+    public CommonResult<List<SchoolOrganizationRespVO>> list(SchoolOrganizationListReqVO reqVO) {
+        List<SchoolOrganizationDO> organization = schoolOrganizationService.list(reqVO);
+        return success(BeanUtils.toBean(organization, SchoolOrganizationRespVO.class));
+    }
+
+}

+ 26 - 1
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/app/jobhunt/person/AppPersonResumeController.java

@@ -28,7 +28,9 @@ import com.citu.module.menduner.system.controller.app.jobhunt.person.trainexp.Ap
 import com.citu.module.menduner.system.controller.app.jobhunt.person.vo.AppResumeSaveReqVO;
 import com.citu.module.menduner.system.controller.app.jobhunt.person.workexp.AppWorkExpRespVO;
 import com.citu.module.menduner.system.controller.app.jobhunt.person.workexp.AppWorkExpSaveReqVO;
+import com.citu.module.menduner.system.controller.base.major.MajorRespVO;
 import com.citu.module.menduner.system.controller.base.person.student.StudentRespVO;
+import com.citu.module.menduner.system.controller.base.school.SchoolOrganizationRespVO;
 import com.citu.module.menduner.system.convert.*;
 import com.citu.module.menduner.system.dal.dataobject.cvattachment.CvAttachmentDO;
 import com.citu.module.menduner.system.dal.dataobject.eduexp.EduExpDO;
@@ -36,16 +38,20 @@ import com.citu.module.menduner.system.dal.dataobject.job.JobInterestedDO;
 import com.citu.module.menduner.system.dal.dataobject.person.PersonSkillDO;
 import com.citu.module.menduner.system.dal.dataobject.person.StudentDO;
 import com.citu.module.menduner.system.dal.dataobject.projectexp.ProjectExpDO;
+import com.citu.module.menduner.system.dal.dataobject.school.SchoolOrganizationDO;
 import com.citu.module.menduner.system.dal.dataobject.trainexp.TrainExpDO;
 import com.citu.module.menduner.system.dal.dataobject.workexp.WorkExpDO;
 import com.citu.module.menduner.system.service.cvattachment.CvAttachmentService;
 import com.citu.module.menduner.system.service.eduexp.EduExpService;
 import com.citu.module.menduner.system.service.job.JobInterestedService;
+import com.citu.module.menduner.system.service.major.MajorService;
 import com.citu.module.menduner.system.service.person.ResumeService;
 import com.citu.module.menduner.system.service.person.info.PersonInfoService;
 import com.citu.module.menduner.system.service.person.skill.PersonSkillService;
 import com.citu.module.menduner.system.service.person.student.StudentService;
 import com.citu.module.menduner.system.service.projectexp.ProjectExpService;
+import com.citu.module.menduner.system.service.school.SchoolInfoService;
+import com.citu.module.menduner.system.service.school.SchoolOrganizationService;
 import com.citu.module.menduner.system.service.trainexp.TrainExpService;
 import com.citu.module.menduner.system.service.workexp.WorkExpService;
 import io.swagger.v3.oas.annotations.Operation;
@@ -97,6 +103,15 @@ public class AppPersonResumeController {
     @Resource
     private StudentService studentService;
 
+    @Resource
+    private SchoolInfoService schoolInfoService;
+
+    @Resource
+    private SchoolOrganizationService schoolOrganizationService;
+
+    @Resource
+    private MajorService majorService;
+
     @PreAuthenticated
     @PostMapping("/info/save")
     @ApiSignature(timeout = 30)
@@ -145,7 +160,17 @@ public class AppPersonResumeController {
     public CommonResult<StudentRespVO> getStudentInfo() {
         StudentDO student =
                 studentService.getStudentInfo(LoginUserContext.getUserId());
-        return success(BeanUtils.toBean(student, StudentRespVO.class));
+        StudentRespVO resp = BeanUtils.toBean(student, StudentRespVO.class);
+        if (null != resp) {
+            resp.setSchoolInfo(schoolInfoService.getBySchoolId(resp.getSchoolId()));
+            SchoolOrganizationDO dept = schoolOrganizationService.getSchoolOrganization(resp.getSchoolDeptId());
+            resp.setSchoolDept(BeanUtils.toBean(dept, SchoolOrganizationRespVO.class));
+            SchoolOrganizationDO schoolClass = schoolOrganizationService.getSchoolOrganization(resp.getSchoolClassId());
+            resp.setSchoolClass(BeanUtils.toBean(schoolClass, SchoolOrganizationRespVO.class));
+            resp.setMajor(BeanUtils.toBean(majorService.getMajor(resp.getMajorId()), MajorRespVO.class));
+
+        }
+        return success(resp);
     }
 
 

+ 4 - 4
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/app/jobhunt/person/AppStudentController.java

@@ -36,8 +36,6 @@ import static com.citu.framework.common.pojo.CommonResult.success;
 @Validated
 public class AppStudentController {
 
-    @Resource
-    private StudentService service;
     @Resource
     private StudentPracticeRecordService studentPracticeRecordService;
     @Resource
@@ -76,7 +74,7 @@ public class AppStudentController {
     @Operation(summary = "获取学生实习报告列表")
     public CommonResult<Map<String, List<StudentPracticeReportRespVO>>> getReportList
             (@RequestParam(value = "enterpriseId", required = false) Long enterpriseId) {
-        return success(reportService.getReportList(enterpriseId));
+        return success(reportService.getReportList(enterpriseId,LoginUserContext.getUserId()));
     }
 
     @PreAuthenticated
@@ -92,7 +90,7 @@ public class AppStudentController {
     @GetMapping("/record-enterprise/list")
     @Operation(summary = "获取学生实习的企业列表")
     public CommonResult<List<EnterpriseBaseSimpleRespVO>> getRecordEnterpriseId() {
-        List<Long> enterpriseIds = studentPracticeRecordService.getRecordEnterpriseId();
+        List<Long> enterpriseIds = studentPracticeRecordService.getRecordEnterpriseId(LoginUserContext.getUserId());
         if (CollUtil.isNotEmpty(enterpriseIds)) {
             List<EnterpriseDO> enterpriseList = enterpriseService.getByIdList(enterpriseIds);
             return success(BeanUtils.toBean(enterpriseList, EnterpriseBaseSimpleRespVO.class));
@@ -100,4 +98,6 @@ public class AppStudentController {
         return success(null);
     }
 
+
+
 }

+ 3 - 0
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/app/jobhunt/person/student/AppStudentSaveReqVO.java

@@ -26,4 +26,7 @@ public class AppStudentSaveReqVO extends StudentSaveReqVO {
     @Schema(description = "联系手机号")
     private String phone;
 
+    @Schema(description = "学校班级名称")
+    private String schoolClassName;
+
 }

+ 0 - 38
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/app/jobhunt/school/AppSchoolController.java

@@ -1,38 +0,0 @@
-package com.citu.module.menduner.system.controller.app.jobhunt.school;
-
-import com.citu.framework.common.pojo.CommonResult;
-import com.citu.framework.security.core.annotations.PreAuthenticated;
-import com.citu.module.menduner.system.controller.base.CommonRespVO;
-import com.citu.module.menduner.system.service.school.SchoolService;
-import io.swagger.v3.oas.annotations.Operation;
-import io.swagger.v3.oas.annotations.tags.Tag;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestParam;
-import org.springframework.web.bind.annotation.RestController;
-
-import javax.annotation.Resource;
-import java.util.List;
-
-import static com.citu.framework.common.pojo.CommonResult.success;
-
-@Tag(name = "求职端 - 学校信息")
-@RestController
-@RequestMapping("/menduner/system/school")
-@Validated
-@Slf4j
-public class AppSchoolController {
-
-    @Resource
-    private SchoolService schoolService;
-
-    @PreAuthenticated
-    @GetMapping("/search/by/name")
-    @Operation(summary = "根据学校名称模糊搜索")
-    public CommonResult<List<CommonRespVO>> search(@RequestParam("name") String name) {
-        return success(schoolService.searchByName(name));
-    }
-
-}

+ 69 - 0
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/app/teacher/info/AppTeacherController.java

@@ -0,0 +1,69 @@
+package com.citu.module.menduner.system.controller.app.teacher.info;
+
+import com.citu.framework.common.pojo.CommonResult;
+import com.citu.framework.common.util.object.BeanUtils;
+import com.citu.framework.security.core.annotations.PreAuthenticated;
+import com.citu.module.menduner.common.util.LoginUserContext;
+import com.citu.module.menduner.system.controller.base.person.teacher.TeacherRegisterReqVO;
+import com.citu.module.menduner.system.controller.base.person.teacher.TeacherRespVO;
+import com.citu.module.menduner.system.controller.base.person.teacher.TeacherSaveReqVO;
+import com.citu.module.menduner.system.dal.dataobject.person.TeacherDO;
+import com.citu.module.menduner.system.service.person.teacher.TeacherService;
+import com.citu.module.menduner.system.service.school.SchoolInfoService;
+import com.citu.module.menduner.system.service.school.SchoolOrganizationService;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import javax.validation.Valid;
+
+import static com.citu.framework.common.pojo.CommonResult.success;
+
+@Tag(name = "老师端 - 老师信息")
+@RestController
+@RequestMapping("/menduner/system/teacher/info")
+@Validated
+@Slf4j
+public class AppTeacherController {
+
+    @Resource
+    private TeacherService teacherService;
+
+    @Resource
+    private SchoolInfoService schoolInfoService;
+
+    @Resource
+    private SchoolOrganizationService schoolOrganizationService;
+
+    @PreAuthenticated
+    @GetMapping("/get")
+    @Operation(summary = "获取老师信息")
+    public CommonResult<TeacherRespVO> get() {
+        TeacherDO teacher = teacherService.get(LoginUserContext.getUserId());
+        TeacherRespVO resp = BeanUtils.toBean(teacher, TeacherRespVO.class);
+        if (null != resp) {
+            resp.setSchool(schoolInfoService.getBySchoolId(resp.getSchoolId()));
+            resp.setOrganizationList(schoolOrganizationService.getRelationByTeacherId(teacher.getId()));
+        }
+        return success(resp);
+    }
+
+    @PreAuthenticated
+    @PostMapping("/register")
+    @Operation(summary = "注册老师信息")
+    public CommonResult<Boolean> register(@Valid @RequestBody TeacherRegisterReqVO reqVO) {
+        teacherService.register(reqVO);
+        return success(true);
+    }
+
+    @PreAuthenticated
+    @PostMapping("/update")
+    @Operation(summary = "更新老师信息")
+    public CommonResult<Boolean> update(@Valid @RequestBody TeacherSaveReqVO reqVO) {
+        teacherService.update(reqVO);
+        return success(true);
+    }
+}

+ 100 - 0
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/app/teacher/school/AppSchoolInfoController.java

@@ -0,0 +1,100 @@
+package com.citu.module.menduner.system.controller.app.teacher.school;
+
+import com.citu.framework.common.pojo.CommonResult;
+import com.citu.framework.common.pojo.PageResult;
+import com.citu.framework.common.util.object.BeanUtils;
+import com.citu.framework.security.core.annotations.PreAuthenticated;
+import com.citu.module.menduner.system.controller.base.job.JobAdvertisedPageReqVO;
+import com.citu.module.menduner.system.controller.base.job.JobAdvertisedRespVO;
+import com.citu.module.menduner.system.controller.base.job.JobAdvertisedSaveReqVO;
+import com.citu.module.menduner.system.controller.base.school.*;
+import com.citu.module.menduner.system.dal.dataobject.job.JobAdvertisedDO;
+import com.citu.module.menduner.system.dal.dataobject.school.SchoolOrganizationDO;
+import com.citu.module.menduner.system.service.school.SchoolInfoService;
+import com.citu.module.menduner.system.service.school.SchoolOrganizationService;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import javax.validation.Valid;
+import java.util.List;
+
+import static com.citu.framework.common.pojo.CommonResult.success;
+
+@Tag(name = "老师端 - 学校信息")
+@RestController
+@RequestMapping("/menduner/system/teacher/school")
+@Validated
+@Slf4j
+public class AppSchoolInfoController {
+
+    @Resource
+    private SchoolOrganizationService schoolOrganizationService;
+
+    @Resource
+    private SchoolInfoService schoolInfoService;
+
+    @PreAuthenticated
+    @GetMapping("/organization/get")
+    @Operation(summary = "根据学校id获取院系信息")
+    public CommonResult<List<SchoolOrganizationRespVO>> get(@RequestParam("schoolId") Long schoolId) {
+        List<SchoolOrganizationDO> organization = schoolOrganizationService.getDeptBySchoolId(schoolId);
+        return success(BeanUtils.toBean(organization, SchoolOrganizationRespVO.class));
+    }
+
+    @PreAuthenticated
+    @GetMapping("/organization/get/tree")
+    @Operation(summary = "根据学校id获取机构树")
+    public CommonResult<List<SchoolOrganizationChildrenRespVO>> getTree(@RequestParam("schoolId") Long schoolId) {
+        return success(schoolOrganizationService.getTree(schoolId));
+    }
+
+    @PreAuthenticated
+    @GetMapping("/organization/list")
+    @Operation(summary = "根据条件机构信息")
+    public CommonResult<List<SchoolOrganizationRespVO>> list(SchoolOrganizationListReqVO reqVO) {
+        List<SchoolOrganizationDO> organization = schoolOrganizationService.list(reqVO);
+        return success(BeanUtils.toBean(organization, SchoolOrganizationRespVO.class));
+    }
+
+    @PostMapping("/organization/create")
+    @Operation(summary = "创建机构")
+    public CommonResult<Long> createOrganization(@Valid @RequestBody SchoolOrganizationSaveReqVO createReqVO) {
+        return success(schoolOrganizationService.createSchoolOrganization(createReqVO));
+    }
+
+    @PostMapping("/organization/update")
+    @Operation(summary = "更新机构")
+    public CommonResult<Boolean> updateOrganization(@Valid @RequestBody SchoolOrganizationSaveReqVO updateReqVO) {
+        schoolOrganizationService.updateSchoolOrganization(updateReqVO);
+        return success(true);
+    }
+
+    @GetMapping("/organization/page")
+    @Operation(summary = "获得机构分页")
+    public CommonResult<PageResult<SchoolOrganizationRespVO>> getOrganizationPage(@Valid SchoolOrganizationPageReqVO pageReqVO) {
+        PageResult<SchoolOrganizationDO> pageResult = schoolOrganizationService.getSchoolOrganizationPage(pageReqVO);
+        return success(BeanUtils.toBean(pageResult, SchoolOrganizationRespVO.class));
+    }
+
+    @PostMapping("/delete")
+    @Operation(summary = "删除机构")
+    @Parameter(name = "id", description = "编号", required = true)
+    public CommonResult<Boolean> deleteOrganization(@RequestParam("id") Long id) {
+        schoolOrganizationService.deleteSchoolOrganization(id);
+        return success(true);
+    }
+
+    @PreAuthenticated
+    @PostMapping("/update")
+    @Operation(summary = "修改学校信息")
+    public CommonResult<Boolean> update(@Valid @RequestBody SchoolInfoSaveReqVO reqVO) {
+        schoolInfoService.update(reqVO);
+        return success(true);
+    }
+}

+ 122 - 0
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/app/teacher/school/AppSchoolStudentController.java

@@ -0,0 +1,122 @@
+package com.citu.module.menduner.system.controller.app.teacher.school;
+
+import cn.hutool.core.collection.CollUtil;
+import com.citu.framework.common.pojo.CommonResult;
+import com.citu.framework.common.pojo.PageResult;
+import com.citu.framework.common.util.object.BeanUtils;
+import com.citu.framework.security.core.annotations.PreAuthenticated;
+import com.citu.module.menduner.common.util.LoginUserContext;
+import com.citu.module.menduner.system.controller.base.CommonRespVO;
+import com.citu.module.menduner.system.controller.base.analysis.RecruitAnalysisPageReqVO;
+import com.citu.module.menduner.system.controller.base.enterprise.vo.EnterpriseBaseSimpleRespVO;
+import com.citu.module.menduner.system.controller.base.person.student.StudentPageReqVO;
+import com.citu.module.menduner.system.controller.base.person.student.StudentRespVO;
+import com.citu.module.menduner.system.controller.base.person.student.record.StudentPracticeRecordDetailRespVO;
+import com.citu.module.menduner.system.controller.base.person.student.record.StudentPracticeRecordSchoolPageReqVO;
+import com.citu.module.menduner.system.controller.base.person.student.record.StudentPracticeRecordSchoolRespVO;
+import com.citu.module.menduner.system.controller.base.person.student.report.StudentPracticeReportQueryReqVO;
+import com.citu.module.menduner.system.controller.base.person.student.report.StudentPracticeReportRespVO;
+import com.citu.module.menduner.system.dal.dataobject.enterprise.EnterpriseDO;
+import com.citu.module.menduner.system.service.enterprise.EnterpriseService;
+import com.citu.module.menduner.system.service.person.student.StudentPracticeRecordService;
+import com.citu.module.menduner.system.service.person.student.StudentPracticeReportService;
+import com.citu.module.menduner.system.service.person.student.StudentService;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+import java.util.List;
+import java.util.Map;
+
+import static com.citu.framework.common.pojo.CommonResult.success;
+
+@Tag(name = "老师端 - 学校老师同学")
+@RestController
+@RequestMapping("/menduner/system/teacher/school/student")
+@Validated
+@Slf4j
+public class AppSchoolStudentController {
+
+
+    @Resource
+    private StudentService studentService;
+
+    @Resource
+    private StudentPracticeRecordService studentPracticeRecordService;
+
+    @Resource
+    private StudentPracticeReportService studentPracticeReportService;
+
+    @Resource
+    private EnterpriseService enterpriseService;
+
+    @PreAuthenticated
+    @GetMapping("/page")
+    @Operation(summary = "获得学生信息分页")
+    public CommonResult<PageResult<StudentRespVO>> getStudentPage(StudentPageReqVO reqVO) {
+        return success(studentService.page(reqVO));
+    }
+
+    @PreAuthenticated
+    @GetMapping("/get")
+    @Operation(summary = "获得学生信息详情")
+    public CommonResult<StudentRespVO> get(@RequestParam("id") Long id) {
+        return success(studentService.get(id));
+    }
+
+    @PreAuthenticated
+    @GetMapping("/practice/record/get")
+    @Operation(summary = "根据用户id获取实习记录")
+    public CommonResult<List<StudentPracticeRecordDetailRespVO>> getByUserId(@RequestParam("userId") Long userId) {
+        return success(studentPracticeRecordService.getByUserId(userId));
+    }
+
+    @PreAuthenticated
+    @GetMapping("/practice/record-status/count")
+    @Operation(summary = "根据学校id获得学生实习记录状态统计")
+    public CommonResult<List<CommonRespVO>> getStatusCount(@RequestParam("schoolId")Long schoolId) {
+        return success(studentPracticeRecordService.getStatusCountBySchoolId(schoolId));
+    }
+
+    @PreAuthenticated
+    @GetMapping("/practice/record/enterprise/page")
+    @Operation(summary = "基于企业统计实习数量")
+    public CommonResult<PageResult<StudentPracticeRecordSchoolRespVO>> getRecordCount
+            (StudentPracticeRecordSchoolPageReqVO reqVO) {
+        return success(studentPracticeRecordService.getCount(reqVO));
+    }
+
+    @PreAuthenticated
+    @GetMapping("/practice/record-enterprise/list")
+    @Operation(summary = "获取学生实习的企业列表")
+    public CommonResult<List<EnterpriseBaseSimpleRespVO>> getRecordEnterpriseId(@RequestParam("userId")Long userId) {
+        List<Long> enterpriseIds = studentPracticeRecordService.getRecordEnterpriseId(userId);
+        if (CollUtil.isNotEmpty(enterpriseIds)) {
+            List<EnterpriseDO> enterpriseList = enterpriseService.getByIdList(enterpriseIds);
+            return success(BeanUtils.toBean(enterpriseList, EnterpriseBaseSimpleRespVO.class));
+        }
+        return success(null);
+    }
+
+    @PreAuthenticated
+    @GetMapping("/practice/record/page")
+    @Operation(summary = "获取学生实习记录分页")
+    public CommonResult<PageResult<StudentPracticeRecordDetailRespVO>> page(StudentPracticeRecordSchoolPageReqVO reqVO) {
+        return success(studentPracticeRecordService.page(reqVO));
+    }
+
+    @PreAuthenticated
+    @GetMapping("/report/get")
+    @Operation(summary = "根据企业id和用户id获取实习报告")
+    public CommonResult<Map<String, List<StudentPracticeReportRespVO>>> getReportList(StudentPracticeReportQueryReqVO reqVO) {
+        return success(studentPracticeReportService.getReportList(reqVO.getEnterpriseId(), reqVO.getUserId()));
+    }
+
+
+}

+ 1 - 1
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/base/fair/JobFairEnterpriseRespVO.java

@@ -14,7 +14,7 @@ public class JobFairEnterpriseRespVO extends EnterpriseRespVO {
     @Schema(description = "招聘会id")
     private Long jobFairId;
 
-    @Schema(description = "最后5个职位")
+    @Schema(description = "最后3个职位")
     private List<AppJobAdvertisedSimpleRespVO> lastJobTop5;
 
     @Schema(description = "职位总数")

+ 3 - 0
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/base/person/info/PersonSimpleRespVO.java

@@ -31,6 +31,9 @@ public class PersonSimpleRespVO {
     @Schema(description = "出生日期")
     private LocalDateTime birthday;
 
+    @Schema(description = "联系电话")
+    private String phone;
+
     @Schema(description = "求职状态(0离职-随时到岗 1在职-月内到岗 2在职-考虑机会 3在职-暂不考虑)", example = "1")
     private String jobStatus;
 

+ 8 - 17
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/base/person/student/StudentPageReqVO.java

@@ -45,30 +45,18 @@ public class StudentPageReqVO extends PageParam {
     @Schema(description = "学生认证状态 0.未认证 1.已认证 ", example = "1")
     private String authStatus;
 
-    @Schema(description = "学校id", example = "23869")
+    @Schema(description = "学校id")
     private Long schoolId;
 
-    @Schema(description = "学校名称", example = "李四")
-    private String schoolName;
+    @Schema(description = "学生院系id")
+    private Long schoolDeptId;
 
-    @Schema(description = "学生班级", example = "19418")
+    @Schema(description = "学生班级id")
     private Long schoolClassId;
 
-    @Schema(description = "院系名称", example = "张三")
-    private String schoolDepartmentName;
-
-    @Schema(description = "学生班级", example = "王五")
-    private String schoolClassName;
-
-    @Schema(description = "学生专业", example = "19527")
+    @Schema(description = "学生专业id", example = "19527")
     private Long majorId;
 
-    @Schema(description = "学生专业", example = "张三")
-    private String majorName;
-
-    @Schema(description = "专业代码")
-    private String majorCode;
-
     @Schema(description = "紧急联系人姓名", example = "王五")
     private String emergencyContactName;
 
@@ -79,4 +67,7 @@ public class StudentPageReqVO extends PageParam {
     @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
     private LocalDateTime[] createTime;
 
+    @Schema(description = "学生姓名")
+    private String name;
+
 }

+ 28 - 24
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/base/person/student/StudentRespVO.java

@@ -3,6 +3,11 @@ package com.citu.module.menduner.system.controller.base.person.student;
 
 import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
 import com.alibaba.excel.annotation.ExcelProperty;
+import com.citu.module.menduner.system.controller.base.major.MajorRespVO;
+import com.citu.module.menduner.system.controller.base.person.info.PersonSimpleRespVO;
+import com.citu.module.menduner.system.controller.base.school.SchoolInfoRespVO;
+import com.citu.module.menduner.system.controller.base.school.SchoolOrganizationRespVO;
+import com.citu.module.menduner.system.service.major.MajorService;
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Data;
 
@@ -61,38 +66,22 @@ public class StudentRespVO {
     @ExcelProperty("学生认证状态 0.未认证 1.已认证 ")
     private String authStatus;
 
-    @Schema(description = "学校id", example = "23869")
+    @Schema(description = "学校id")
     @ExcelProperty("学校id")
     private Long schoolId;
 
-    @Schema(description = "学校名称", example = "李四")
-    @ExcelProperty("学校名称")
-    private String schoolName;
+    @Schema(description = "学生院系id")
+    @ExcelProperty("学生院系id")
+    private Long schoolDeptId;
 
-    @Schema(description = "学生班级", example = "19418")
-    @ExcelProperty("学生班级")
+    @Schema(description = "学生班级id")
+    @ExcelProperty("学生班级id")
     private Long schoolClassId;
 
-    @Schema(description = "院系名称", example = "张三")
-    @ExcelProperty("院系名称")
-    private String schoolDepartmentName;
-
-    @Schema(description = "学生班级", example = "王五")
-    @ExcelProperty("学生班级")
-    private String schoolClassName;
-
-    @Schema(description = "学生专业", example = "19527")
-    @ExcelProperty("学生专业")
+    @Schema(description = "学生专业id", example = "19527")
+    @ExcelProperty("学生专业id")
     private Long majorId;
 
-    @Schema(description = "学生专业", example = "张三")
-    @ExcelProperty("学生专业")
-    private String majorName;
-
-    @Schema(description = "专业代码")
-    @ExcelProperty("专业代码")
-    private String majorCode;
-
     @Schema(description = "紧急联系人姓名", example = "王五")
     @ExcelProperty("紧急联系人姓名")
     private String emergencyContactName;
@@ -105,4 +94,19 @@ public class StudentRespVO {
     @ExcelProperty("创建时间")
     private LocalDateTime createTime;
 
+    @Schema(description = "人才信息")
+    private PersonSimpleRespVO person;
+
+    @Schema(description = "学校基本信息")
+    private SchoolInfoRespVO schoolInfo;
+
+    @Schema(description = "院系信息")
+    private SchoolOrganizationRespVO schoolDept;
+
+    @Schema(description = "班级信息")
+    private SchoolOrganizationRespVO schoolClass;
+
+    @Schema(description = "专业信息")
+    private MajorRespVO major;
+
 }

+ 6 - 17
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/base/person/student/StudentSaveReqVO.java

@@ -1,6 +1,7 @@
 package com.citu.module.menduner.system.controller.base.person.student;
 
 
+import com.alibaba.excel.annotation.ExcelProperty;
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.*;
 import java.util.*;
@@ -34,30 +35,18 @@ public class StudentSaveReqVO {
     @Schema(description = "身份证反面")
     private String idCardImg2;
 
-    @Schema(description = "学校id", example = "23869")
+    @Schema(description = "学校id")
     private Long schoolId;
 
-    @Schema(description = "学校名称", example = "李四")
-    private String schoolName;
+    @Schema(description = "学生院系id")
+    private Long schoolDeptId;
 
-    @Schema(description = "学生班级", example = "19418")
+    @Schema(description = "学生班级id")
     private Long schoolClassId;
 
-    @Schema(description = "院系名称", example = "张三")
-    private String schoolDepartmentName;
-
-    @Schema(description = "学生班级", example = "王五")
-    private String schoolClassName;
-
-    @Schema(description = "学生专业", example = "19527")
+    @Schema(description = "学生专业id", example = "19527")
     private Long majorId;
 
-    @Schema(description = "学生专业", example = "张三")
-    private String majorName;
-
-    @Schema(description = "专业代码")
-    private String majorCode;
-
     @Schema(description = "紧急联系人姓名", example = "王五")
     private String emergencyContactName;
 

+ 21 - 0
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/base/person/student/record/StudentPracticeRecordSchoolPageReqVO.java

@@ -0,0 +1,21 @@
+package com.citu.module.menduner.system.controller.base.person.student.record;
+
+
+import com.citu.framework.common.pojo.PageParam;
+import com.citu.module.menduner.system.controller.base.enterprise.vo.EnterpriseBaseSimpleRespVO;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+@Schema(description = "学生实习记录-实习企业统计 Response VO")
+@Data
+public class StudentPracticeRecordSchoolPageReqVO extends PageParam {
+
+    @Schema(description = "学校id")
+    private Long schoolId;
+
+    @Schema(description = "企业id")
+    private Long enterpriseId;
+
+    @Schema(description = "实习状态")
+    private String status;
+}

+ 20 - 0
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/base/person/student/record/StudentPracticeRecordSchoolRespVO.java

@@ -0,0 +1,20 @@
+package com.citu.module.menduner.system.controller.base.person.student.record;
+
+
+import com.citu.module.menduner.system.controller.base.enterprise.vo.EnterpriseBaseSimpleRespVO;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+@Schema(description = "学生实习记录-实习企业统计 Response VO")
+@Data
+public class StudentPracticeRecordSchoolRespVO extends EnterpriseBaseSimpleRespVO {
+
+    @Schema(description = "等待中")
+    private Long waitingNum;
+
+    @Schema(description = "进行中")
+    private Long inProgressNum;
+
+    @Schema(description = "已结束")
+    private Long endNum;
+}

+ 19 - 0
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/base/person/student/report/StudentPracticeReportQueryReqVO.java

@@ -0,0 +1,19 @@
+package com.citu.module.menduner.system.controller.base.person.student.report;
+
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+@Schema(description = "学生实习报告查询条件 Request VO")
+@Data
+
+public class StudentPracticeReportQueryReqVO {
+
+    @Schema(description = "用户id", example = "20376")
+    private Long userId;
+
+    @Schema(description = "企业id", example = "29786")
+    private Long enterpriseId;
+
+
+}

+ 15 - 0
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/base/person/teacher/TeacherAuthReqVO.java

@@ -0,0 +1,15 @@
+package com.citu.module.menduner.system.controller.base.person.teacher;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+@Schema(description = "老师信息注册审批 Request VO")
+@Data
+public class TeacherAuthReqVO {
+
+    @Schema(description = "id", requiredMode = Schema.RequiredMode.REQUIRED, example = "27330")
+    private Long id;
+
+    @Schema(description = "审核消息")
+    private String authMessage;
+}

+ 55 - 0
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/base/person/teacher/TeacherPageReqVO.java

@@ -0,0 +1,55 @@
+package com.citu.module.menduner.system.controller.base.person.teacher;
+
+import com.citu.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 com.citu.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 TeacherPageReqVO extends PageParam {
+
+    @Schema(description = "用户id", example = "20929")
+    private Long userId;
+
+    @Schema(description = "老师姓名", example = "李四")
+    private String name;
+
+    @Schema(description = "学校id", example = "4823")
+    private Long schoolId;
+
+    @Schema(description = "电话")
+    private String phone;
+
+    @Schema(description = "邮箱")
+    private String email;
+
+    @Schema(description = "性别")
+    private String sex;
+
+    @Schema(description = "帐号状态(0正常 1停用)", example = "1")
+    private String status;
+
+    @Schema(description = "审核状态 0.待审核 1.已通过  2.拒绝", example = "2")
+    private String authStatus;
+
+    @Schema(description = "审核消息")
+    private String authMessage;
+
+    @Schema(description = "审核时间")
+    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+    private LocalDateTime[] authTime;
+
+    @Schema(description = "创建时间")
+    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+    private LocalDateTime[] createTime;
+
+}

+ 52 - 0
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/base/person/teacher/TeacherRegisterReqVO.java

@@ -0,0 +1,52 @@
+package com.citu.module.menduner.system.controller.base.person.teacher;
+
+
+import com.citu.module.menduner.system.controller.base.school.SchoolOrganizationSimpleSaveVO;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.NotNull;
+import java.time.LocalDateTime;
+import java.util.List;
+
+@Schema(description = "老师信息注册 Request VO")
+@Data
+public class TeacherRegisterReqVO {
+
+    @Schema(description = "id", requiredMode = Schema.RequiredMode.REQUIRED, example = "20929")
+    private Long id;
+
+    @Schema(description = "老师姓名", requiredMode = Schema.RequiredMode.REQUIRED, example = "李四")
+    @NotEmpty(message = "{1_100_067_002}")
+    private String name;
+
+    @Schema(description = "学校id", requiredMode = Schema.RequiredMode.REQUIRED, example = "4823")
+    @NotNull(message = "{1_100_010_001}")
+    private Long schoolId;
+
+    @Schema(description = "电话")
+    private String phone;
+
+    @Schema(description = "邮箱")
+    private String email;
+
+    @Schema(description = "性别")
+    private String sex;
+
+    @Schema(description = "头像地址")
+    private String avatar;
+
+    @Schema(description = "在职证明")
+    private String employmentCertificate;
+
+    @Schema(description = "身份证正面")
+    private String idCardFront;
+
+    @Schema(description = "身份证反面")
+    private String idCardBack;
+
+    @Schema(description = "注册时提交的院系信息")
+    private List<SchoolOrganizationSimpleSaveVO> authDept;
+
+}

+ 96 - 0
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/base/person/teacher/TeacherRespVO.java

@@ -0,0 +1,96 @@
+package com.citu.module.menduner.system.controller.base.person.teacher;
+
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
+import com.citu.module.menduner.system.controller.base.school.SchoolInfoRespVO;
+import com.citu.module.menduner.system.controller.base.school.SchoolOrganizationRespVO;
+import com.citu.module.menduner.system.controller.base.school.SchoolOrganizationSimpleSaveVO;
+import com.citu.module.menduner.system.controller.base.school.SchoolRespVO;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+import java.util.List;
+
+@Schema(description = "管理后台 - 老师信息 Response VO")
+@Data
+@ExcelIgnoreUnannotated
+public class TeacherRespVO {
+
+    @Schema(description = "id", requiredMode = Schema.RequiredMode.REQUIRED, example = "27330")
+    @ExcelProperty("id")
+    private Long id;
+
+    @Schema(description = "用户id", requiredMode = Schema.RequiredMode.REQUIRED, example = "20929")
+    @ExcelProperty("用户id")
+    private Long userId;
+
+    @Schema(description = "老师姓名", requiredMode = Schema.RequiredMode.REQUIRED, example = "李四")
+    @ExcelProperty("老师姓名")
+    private String name;
+
+    @Schema(description = "学校id", requiredMode = Schema.RequiredMode.REQUIRED, example = "4823")
+    @ExcelProperty("学校id")
+    private Long schoolId;
+
+    @Schema(description = "电话")
+    @ExcelProperty("电话")
+    private String phone;
+
+    @Schema(description = "邮箱")
+    @ExcelProperty("邮箱")
+    private String email;
+
+    @Schema(description = "性别")
+    @ExcelProperty("性别")
+    private String sex;
+
+    @Schema(description = "头像地址")
+    @ExcelProperty("头像地址")
+    private String avatar;
+
+    @Schema(description = "帐号状态(0正常 1停用)", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
+    @ExcelProperty("帐号状态(0正常 1停用)")
+    private String status;
+
+    @Schema(description = "审核状态 0.待审核 1.已通过  2.拒绝", requiredMode = Schema.RequiredMode.REQUIRED, example = "2")
+    @ExcelProperty("审核状态 0.待审核 1.已通过  2.拒绝")
+    private String authStatus;
+
+    @Schema(description = "审核消息")
+    @ExcelProperty("审核消息")
+    private String authMessage;
+
+    @Schema(description = "审核时间")
+    @ExcelProperty("审核时间")
+    private LocalDateTime authTime;
+
+    @Schema(description = "注册时提交的院系信息")
+    @ExcelProperty("注册时提交的院系信息")
+    private List<SchoolOrganizationSimpleSaveVO> authDept;
+
+    @Schema(description = "在职证明")
+    @ExcelProperty("在职证明")
+    private String employmentCertificate;
+
+    @Schema(description = "身份证正面")
+    @ExcelProperty("身份证正面")
+    private String idCardFront;
+
+    @Schema(description = "身份证反面")
+    @ExcelProperty("身份证反面")
+    private String idCardBack;
+
+    @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
+    @ExcelProperty("创建时间")
+    private LocalDateTime createTime;
+
+    @Schema(description = "学校信息")
+    private SchoolInfoRespVO school;
+
+    @Schema(description = "老师管辖的院系")
+    private List<SchoolOrganizationRespVO> organizationList;
+
+}

+ 39 - 0
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/base/person/teacher/TeacherSaveReqVO.java

@@ -0,0 +1,39 @@
+package com.citu.module.menduner.system.controller.base.person.teacher;
+
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.citu.module.menduner.system.controller.base.school.SchoolOrganizationSimpleSaveVO;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import javax.validation.constraints.NotEmpty;
+import java.util.List;
+
+@Schema(description = "管理后台 - 老师信息新增/修改 Request VO")
+@Data
+public class TeacherSaveReqVO {
+
+    @Schema(description = "id", requiredMode = Schema.RequiredMode.REQUIRED, example = "27330")
+    private Long id;
+
+    @Schema(description = "老师姓名", requiredMode = Schema.RequiredMode.REQUIRED, example = "李四")
+    @NotEmpty(message = "{1_100_067_002}")
+    private String name;
+
+    @Schema(description = "电话")
+    private String phone;
+
+    @Schema(description = "邮箱")
+    private String email;
+
+    @Schema(description = "性别")
+    private String sex;
+
+    @Schema(description = "头像地址")
+    private String avatar;
+
+    @Schema(description = "修改后的院系")
+    @ExcelProperty("修改后的院系")
+    private List<SchoolOrganizationSimpleSaveVO> organizationList;
+
+}

+ 43 - 0
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/base/school/SchoolInfoPageReqVO.java

@@ -0,0 +1,43 @@
+package com.citu.module.menduner.system.controller.base.school;
+
+
+import com.citu.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 com.citu.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 SchoolInfoPageReqVO extends PageParam {
+
+    @Schema(description = "创建用户id", example = "22304")
+    private Long userId;
+
+    @Schema(description = "创建老师id", example = "7481")
+    private Long teacherId;
+
+    @Schema(description = "学校id", example = "14339")
+    private Long schoolId;
+
+    @Schema(description = "名称", example = "张三")
+    private String name;
+
+    @Schema(description = "邮箱")
+    private String email;
+
+    @Schema(description = "学校地址")
+    private String address;
+
+    @Schema(description = "创建时间")
+    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+    private LocalDateTime[] createTime;
+
+}

+ 57 - 0
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/base/school/SchoolInfoRespVO.java

@@ -0,0 +1,57 @@
+package com.citu.module.menduner.system.controller.base.school;
+
+
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+import java.util.List;
+
+@Schema(description = "管理后台 - 学校信息 Response VO")
+@Data
+@ExcelIgnoreUnannotated
+public class SchoolInfoRespVO {
+
+    @Schema(description = "id", requiredMode = Schema.RequiredMode.REQUIRED, example = "23484")
+    @ExcelProperty("id")
+    private Long id;
+
+    @Schema(description = "创建用户id", requiredMode = Schema.RequiredMode.REQUIRED, example = "22304")
+    @ExcelProperty("创建用户id")
+    private Long userId;
+
+    @Schema(description = "创建老师id", requiredMode = Schema.RequiredMode.REQUIRED, example = "7481")
+    @ExcelProperty("创建老师id")
+    private Long teacherId;
+
+    @Schema(description = "学校id", requiredMode = Schema.RequiredMode.REQUIRED, example = "14339")
+    @ExcelProperty("学校id")
+    private Long schoolId;
+
+    @Schema(description = "名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "张三")
+    @ExcelProperty("名称")
+    private String name;
+
+    @Schema(description = "邮箱")
+    @ExcelProperty("邮箱")
+    private String email;
+
+    @Schema(description = "学校地址")
+    @ExcelProperty("学校地址")
+    private String address;
+
+    @Schema(description = "简介")
+    @ExcelProperty("简介")
+    private String introduce;
+
+    @Schema(description = "环境照片")
+    @ExcelProperty("环境照片")
+    private List<String> photos;
+
+    @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
+    @ExcelProperty("创建时间")
+    private LocalDateTime createTime;
+
+}

+ 36 - 0
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/base/school/SchoolInfoSaveReqVO.java

@@ -0,0 +1,36 @@
+package com.citu.module.menduner.system.controller.base.school;
+
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.*;
+import java.util.*;
+import javax.validation.constraints.*;
+
+@Schema(description = "管理后台 - 学校信息新增/修改 Request VO")
+@Data
+public class SchoolInfoSaveReqVO {
+
+    @Schema(description = "id", requiredMode = Schema.RequiredMode.REQUIRED, example = "23484")
+    private Long id;
+
+    @Schema(description = "学校id", requiredMode = Schema.RequiredMode.REQUIRED, example = "14339")
+    @NotNull(message = "{1_100_010_001}")
+    private Long schoolId;
+
+    @Schema(description = "名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "张三")
+    @NotEmpty(message = "名称不能为空")
+    private String name;
+
+    @Schema(description = "邮箱")
+    private String email;
+
+    @Schema(description = "学校地址")
+    private String address;
+
+    @Schema(description = "简介")
+    private String introduce;
+
+    @Schema(description = "环境照片")
+    private List<String> photos;
+
+}

+ 39 - 0
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/base/school/SchoolOrganizationChildrenRespVO.java

@@ -0,0 +1,39 @@
+package com.citu.module.menduner.system.controller.base.school;
+
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.util.List;
+
+@Schema(description = "学校组织机构树形 Response VO")
+@Data
+public class SchoolOrganizationChildrenRespVO {
+
+    @Schema(description = "id", requiredMode = Schema.RequiredMode.REQUIRED, example = "21595")
+    private Long id;
+
+    @Schema(description = "学校id", requiredMode = Schema.RequiredMode.REQUIRED, example = "7040")
+    private Long schoolId;
+
+    @Schema(description = "专业id", example = "11109")
+    private Long majorId;
+
+    @Schema(description = "名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "李四")
+    private String name;
+
+    @Schema(description = "类型(0院系|1专业|2班级)", requiredMode = Schema.RequiredMode.REQUIRED, example = "2")
+    private String type;
+
+    @Schema(description = "上级id", example = "8442")
+    private Long parentId;
+
+    @Schema(description = "路径")
+    private String path;
+
+    /**
+     * 子节点
+     */
+    private List<SchoolOrganizationChildrenRespVO> children;
+
+}

+ 30 - 0
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/base/school/SchoolOrganizationDeptSaveReqVO.java

@@ -0,0 +1,30 @@
+package com.citu.module.menduner.system.controller.base.school;
+
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.NotNull;
+
+@Schema(description = "学校组织机构院系新增 Request VO")
+@Data
+@Builder
+@AllArgsConstructor
+@NoArgsConstructor
+public class SchoolOrganizationDeptSaveReqVO {
+
+
+    @Schema(description = "学校id", requiredMode = Schema.RequiredMode.REQUIRED, example = "7040")
+    @NotNull(message = "学校id不能为空")
+    private Long schoolId;
+
+    @Schema(description = "名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "李四")
+    @NotEmpty(message = "名称不能为空")
+    private String name;
+
+
+}

+ 26 - 0
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/base/school/SchoolOrganizationListReqVO.java

@@ -0,0 +1,26 @@
+package com.citu.module.menduner.system.controller.base.school;
+
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.NotNull;
+
+@Schema(description = "管理后台 - 学校组织机构新增/修改 Request VO")
+@Data
+public class SchoolOrganizationListReqVO {
+
+    @Schema(description = "学校id", requiredMode = Schema.RequiredMode.REQUIRED, example = "7040")
+    private Long schoolId;
+
+    @Schema(description = "名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "李四")
+    private String name;
+
+    @Schema(description = "类型(0院系|1专业|2班级)", requiredMode = Schema.RequiredMode.REQUIRED, example = "2")
+    private String type;
+
+    @Schema(description = "上级id", example = "8442")
+    private Long parentId;
+
+}

+ 40 - 0
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/base/school/SchoolOrganizationPageReqVO.java

@@ -0,0 +1,40 @@
+package com.citu.module.menduner.system.controller.base.school;
+
+
+import com.citu.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 com.citu.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 SchoolOrganizationPageReqVO extends PageParam {
+
+    @Schema(description = "学校id", example = "7040")
+    private Long schoolId;
+
+    @Schema(description = "专业id", example = "11109")
+    private Long majorId;
+
+    @Schema(description = "名称", example = "李四")
+    private String name;
+
+    @Schema(description = "类型(0院系|1专业|2班级)", example = "2")
+    private String type;
+
+    @Schema(description = "上级id", example = "8442")
+    private Long parentId;
+
+    @Schema(description = "创建时间")
+    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+    private LocalDateTime[] createTime;
+
+}

+ 44 - 0
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/base/school/SchoolOrganizationRespVO.java

@@ -0,0 +1,44 @@
+package com.citu.module.menduner.system.controller.base.school;
+
+
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+@Schema(description = "管理后台 - 学校组织机构 Response VO")
+@Data
+@ExcelIgnoreUnannotated
+public class SchoolOrganizationRespVO {
+
+    @Schema(description = "id", requiredMode = Schema.RequiredMode.REQUIRED, example = "21595")
+    @ExcelProperty("id")
+    private Long id;
+
+    @Schema(description = "学校id", requiredMode = Schema.RequiredMode.REQUIRED, example = "7040")
+    @ExcelProperty("学校id")
+    private Long schoolId;
+
+    @Schema(description = "专业id", example = "11109")
+    @ExcelProperty("专业id")
+    private Long majorId;
+
+    @Schema(description = "名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "李四")
+    @ExcelProperty("名称")
+    private String name;
+
+    @Schema(description = "类型(0院系|1专业|2班级)", requiredMode = Schema.RequiredMode.REQUIRED, example = "2")
+    @ExcelProperty("类型(0院系|1专业|2班级)")
+    private String type;
+
+    @Schema(description = "上级id", example = "8442")
+    @ExcelProperty("上级id")
+    private Long parentId;
+
+    @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
+    @ExcelProperty("创建时间")
+    private LocalDateTime createTime;
+
+}

+ 35 - 0
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/base/school/SchoolOrganizationSaveReqVO.java

@@ -0,0 +1,35 @@
+package com.citu.module.menduner.system.controller.base.school;
+
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.NotNull;
+
+@Schema(description = "管理后台 - 学校组织机构新增/修改 Request VO")
+@Data
+public class SchoolOrganizationSaveReqVO {
+
+    @Schema(description = "id", requiredMode = Schema.RequiredMode.REQUIRED, example = "21595")
+    private Long id;
+
+    @Schema(description = "学校id", requiredMode = Schema.RequiredMode.REQUIRED, example = "7040")
+    @NotNull(message = "学校id不能为空")
+    private Long schoolId;
+
+    @Schema(description = "专业id", example = "11109")
+    private Long majorId;
+
+    @Schema(description = "名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "李四")
+    @NotEmpty(message = "名称不能为空")
+    private String name;
+
+    @Schema(description = "类型(0院系|1专业|2班级)", requiredMode = Schema.RequiredMode.REQUIRED, example = "2")
+    @NotEmpty(message = "类型(0院系|1专业|2班级)不能为空")
+    private String type;
+
+    @Schema(description = "上级id", example = "8442")
+    private Long parentId;
+
+}

+ 17 - 0
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/base/school/SchoolOrganizationSimpleSaveVO.java

@@ -0,0 +1,17 @@
+package com.citu.module.menduner.system.controller.base.school;
+
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+@Data
+@Schema(description = "学校组织机构保存 Response VO")
+public class SchoolOrganizationSimpleSaveVO {
+
+    @Schema(description = "院系id", example = "7040")
+    private Long organizationId;
+
+    @Schema(description = "院系名称", example = "11109")
+    private String name;
+
+}

+ 1 - 1
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/convert/MajorConvert.java

@@ -1,6 +1,6 @@
 package com.citu.module.menduner.system.convert;
 
-import com.citu.module.menduner.system.controller.app.jobhunt.major.vo.AppMajorRespVO;
+import com.citu.module.menduner.system.controller.app.common.major.vo.AppMajorRespVO;
 import com.citu.module.menduner.system.dal.dataobject.major.MajorDO;
 import org.mapstruct.Mapper;
 import org.mapstruct.factory.Mappers;

+ 0 - 1
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/dal/dataobject/fair/FairTagContent.java

@@ -4,7 +4,6 @@ import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Data;
 
 import java.util.List;
-import java.util.Map;
 
 /**
  * 招聘会标签

+ 4 - 20
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/dal/dataobject/person/StudentDO.java

@@ -75,33 +75,17 @@ public class StudentDO extends TenantBaseDO {
      */
     private Long schoolId;
     /**
-     * 学校名称
+     * 学生院系id
      */
-    private String schoolName;
+    private Long schoolDeptId;
     /**
-     * 学生班级
+     * 学生班级id
      */
     private Long schoolClassId;
     /**
-     * 院系名称
-     */
-    private String schoolDepartmentName;
-    /**
-     * 学生班级
-     */
-    private String schoolClassName;
-    /**
-     * 学生专业
+     * 学生专业id
      */
     private Long majorId;
-    /**
-     * 学生专业
-     */
-    private String majorName;
-    /**
-     * 专业代码
-     */
-    private String majorCode;
     /**
      * 紧急联系人姓名
      */

+ 98 - 0
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/dal/dataobject/person/TeacherDO.java

@@ -0,0 +1,98 @@
+package com.citu.module.menduner.system.dal.dataobject.person;
+
+
+import com.baomidou.mybatisplus.annotation.KeySequence;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
+import com.citu.framework.mybatis.core.dataobject.BaseDO;
+import com.citu.module.menduner.system.controller.base.school.SchoolOrganizationSimpleSaveVO;
+import lombok.*;
+
+import java.time.LocalDateTime;
+import java.util.List;
+
+/**
+ * 老师信息 DO
+ *
+ * @author Rayson
+ */
+@TableName(value = "mde_teacher", autoResultMap = true)
+@KeySequence("mde_teacher_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class TeacherDO extends BaseDO {
+
+    /**
+     * id
+     */
+    @TableId
+    private Long id;
+    /**
+     * 用户id
+     */
+    private Long userId;
+    /**
+     * 老师姓名
+     */
+    private String name;
+    /**
+     * 学校id
+     */
+    private Long schoolId;
+    /**
+     * 电话
+     */
+    private String phone;
+    /**
+     * 邮箱
+     */
+    private String email;
+    /**
+     * 性别
+     */
+    private String sex;
+    /**
+     * 头像地址
+     */
+    private String avatar;
+    /**
+     * 帐号状态(0正常 1停用)
+     */
+    private String status;
+    /**
+     * 审核状态 0.待审核 1.已通过  2.拒绝
+     */
+    private String authStatus;
+    /**
+     * 审核消息
+     */
+    private String authMessage;
+    /**
+     * 审核时间
+     */
+    private LocalDateTime authTime;
+    /**
+     * 注册时提交的院系信息
+     */
+    @TableField(typeHandler = JacksonTypeHandler.class)
+    private List<SchoolOrganizationSimpleSaveVO> authDept;
+    /**
+     * 在职证明
+     */
+    private String employmentCertificate;
+    /**
+     * 身份证正面
+     */
+    private String idCardFront;
+    /**
+     * 身份证反面
+     */
+    private String idCardBack;
+
+}

+ 68 - 0
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/dal/dataobject/school/SchoolInfoDO.java

@@ -0,0 +1,68 @@
+package com.citu.module.menduner.system.dal.dataobject.school;
+
+
+import com.baomidou.mybatisplus.annotation.KeySequence;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
+import com.citu.framework.mybatis.core.dataobject.BaseDO;
+import lombok.*;
+
+import java.util.List;
+
+/**
+ * 学校信息 DO
+ *
+ * @author Rayson
+ */
+@TableName(value = "mde_school_info", autoResultMap = true)
+@KeySequence("mde_school_info_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class SchoolInfoDO extends BaseDO {
+
+    /**
+     * id
+     */
+    @TableId
+    private Long id;
+    /**
+     * 创建用户id
+     */
+    private Long userId;
+    /**
+     * 创建老师id
+     */
+    private Long teacherId;
+    /**
+     * 学校id
+     */
+    private Long schoolId;
+    /**
+     * 名称
+     */
+    private String name;
+    /**
+     * 邮箱
+     */
+    private String email;
+    /**
+     * 学校地址
+     */
+    private String address;
+    /**
+     * 简介
+     */
+    private String introduce;
+    /**
+     * 环境照片
+     */
+    @TableField(typeHandler = JacksonTypeHandler.class)
+    private List<String> photos;
+
+}

+ 51 - 0
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/dal/dataobject/school/SchoolOrganizationDO.java

@@ -0,0 +1,51 @@
+package com.citu.module.menduner.system.dal.dataobject.school;
+
+
+import com.baomidou.mybatisplus.annotation.KeySequence;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.citu.framework.mybatis.core.dataobject.BaseDO;
+import lombok.*;
+
+/**
+ * 学校组织机构 DO
+ *
+ * @author Rayson
+ */
+@TableName("mde_school_organization")
+@KeySequence("mde_school_organization_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class SchoolOrganizationDO extends BaseDO {
+
+    /**
+     * id
+     */
+    @TableId
+    private Long id;
+    /**
+     * 学校id
+     */
+    private Long schoolId;
+    /**
+     * 专业id
+     */
+    private Long majorId;
+    /**
+     * 名称
+     */
+    private String name;
+    /**
+     * 类型(0院系|1专业|2班级)
+     */
+    private String type;
+    /**
+     * 上级id
+     */
+    private Long parentId;
+
+}

+ 47 - 0
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/dal/dataobject/school/SchoolTeacherDO.java

@@ -0,0 +1,47 @@
+package com.citu.module.menduner.system.dal.dataobject.school;
+
+
+import com.baomidou.mybatisplus.annotation.KeySequence;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.citu.framework.mybatis.core.dataobject.BaseDO;
+import lombok.*;
+
+/**
+ * 老师与学校机构的关联 DO
+ *
+ * @author Rayson
+ */
+@TableName("mde_school_teacher")
+@KeySequence("mde_school_teacher_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class SchoolTeacherDO extends BaseDO {
+
+    /**
+     * id
+     */
+    @TableId
+    private Long id;
+    /**
+     * 用户id
+     */
+    private Long userId;
+    /**
+     * 老师id
+     */
+    private Long teacherId;
+    /**
+     * 学校id
+     */
+    private Long schoolId;
+    /**
+     * 学校组织id
+     */
+    private Long schoolOrganizationId;
+
+}

+ 35 - 5
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/dal/mysql/person/StudentMapper.java

@@ -4,7 +4,10 @@ package com.citu.module.menduner.system.dal.mysql.person;
 import com.citu.framework.common.pojo.PageResult;
 import com.citu.framework.mybatis.core.mapper.BaseMapperX;
 import com.citu.framework.mybatis.core.query.LambdaQueryWrapperX;
+import com.citu.framework.mybatis.core.query.MPJLambdaWrapperX;
 import com.citu.module.menduner.system.controller.base.person.student.StudentPageReqVO;
+import com.citu.module.menduner.system.controller.base.person.student.StudentRespVO;
+import com.citu.module.menduner.system.dal.dataobject.person.PersonInfoDO;
 import com.citu.module.menduner.system.dal.dataobject.person.StudentDO;
 import com.citu.module.menduner.system.dal.dataobject.user.UserAccountDO;
 import org.apache.ibatis.annotations.Mapper;
@@ -30,13 +33,9 @@ public interface StudentMapper extends BaseMapperX<StudentDO> {
                 .eqIfPresent(StudentDO::getIdCardNo, reqVO.getIdCardNo())
                 .eqIfPresent(StudentDO::getAuthStatus, reqVO.getAuthStatus())
                 .eqIfPresent(StudentDO::getSchoolId, reqVO.getSchoolId())
-                .likeIfPresent(StudentDO::getSchoolName, reqVO.getSchoolName())
+                .eqIfPresent(StudentDO::getSchoolDeptId, reqVO.getSchoolDeptId())
                 .eqIfPresent(StudentDO::getSchoolClassId, reqVO.getSchoolClassId())
-                .likeIfPresent(StudentDO::getSchoolDepartmentName, reqVO.getSchoolDepartmentName())
-                .likeIfPresent(StudentDO::getSchoolClassName, reqVO.getSchoolClassName())
                 .eqIfPresent(StudentDO::getMajorId, reqVO.getMajorId())
-                .likeIfPresent(StudentDO::getMajorName, reqVO.getMajorName())
-                .eqIfPresent(StudentDO::getMajorCode, reqVO.getMajorCode())
                 .likeIfPresent(StudentDO::getEmergencyContactName, reqVO.getEmergencyContactName())
                 .eqIfPresent(StudentDO::getEmergencyContactPhone, reqVO.getEmergencyContactPhone())
                 .betweenIfPresent(StudentDO::getCreateTime, reqVO.getCreateTime())
@@ -47,4 +46,35 @@ public interface StudentMapper extends BaseMapperX<StudentDO> {
         return selectOne(new LambdaQueryWrapperX<StudentDO>().eq(StudentDO::getUserId, userId));
     }
 
+    default PageResult<StudentRespVO> page(StudentPageReqVO reqVO) {
+        MPJLambdaWrapperX<StudentDO> wrapper = new MPJLambdaWrapperX<StudentDO>();
+        wrapper.selectAll(StudentDO.class);
+        wrapper.selectAssociation(PersonInfoDO.class, StudentRespVO::getPerson);
+        wrapper.innerJoin(PersonInfoDO.class, PersonInfoDO::getId, StudentDO::getPersonId);
+        wrapper
+                .eqIfPresent(StudentDO::getStudentNo, reqVO.getStudentNo())
+                .likeIfPresent(StudentDO::getIdCardName, reqVO.getIdCardName())
+                .eqIfPresent(StudentDO::getIdCardNo, reqVO.getIdCardNo())
+                .eqIfPresent(StudentDO::getSchoolId, reqVO.getSchoolId())
+                .eqIfPresent(StudentDO::getSchoolDeptId, reqVO.getSchoolDeptId())
+                .eqIfPresent(StudentDO::getSchoolClassId, reqVO.getSchoolClassId())
+                .eqIfPresent(StudentDO::getMajorId, reqVO.getMajorId())
+                .likeIfPresent(StudentDO::getEmergencyContactName, reqVO.getEmergencyContactName())
+                .eqIfPresent(StudentDO::getEmergencyContactPhone, reqVO.getEmergencyContactPhone());
+        wrapper.likeIfExists(PersonInfoDO::getName, reqVO.getName());
+
+        return selectJoinPage(reqVO, StudentRespVO.class, wrapper);
+    }
+
+    default StudentRespVO selectByStudentId(Long id) {
+        MPJLambdaWrapperX<StudentDO> wrapper = new MPJLambdaWrapperX<StudentDO>();
+        wrapper.selectAll(StudentDO.class);
+        wrapper.selectAssociation(PersonInfoDO.class, StudentRespVO::getPerson);
+        wrapper.innerJoin(PersonInfoDO.class, PersonInfoDO::getId, StudentDO::getPersonId);
+        wrapper
+                .eq(StudentDO::getId, id);
+
+        return selectJoinOne(StudentRespVO.class, wrapper);
+    }
+
 }

+ 86 - 0
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/dal/mysql/person/StudentPracticeRecordMapper.java

@@ -9,6 +9,8 @@ import com.citu.module.menduner.system.controller.base.CommonRespVO;
 import com.citu.module.menduner.system.controller.base.analysis.RecruitAnalysisPageReqVO;
 import com.citu.module.menduner.system.controller.base.person.student.record.StudentPracticeRecordDetailRespVO;
 import com.citu.module.menduner.system.controller.base.person.student.record.StudentPracticeRecordPageReqVO;
+import com.citu.module.menduner.system.controller.base.person.student.record.StudentPracticeRecordSchoolPageReqVO;
+import com.citu.module.menduner.system.controller.base.person.student.record.StudentPracticeRecordSchoolRespVO;
 import com.citu.module.menduner.system.dal.dataobject.enterprise.EnterpriseDO;
 import com.citu.module.menduner.system.dal.dataobject.job.JobAdvertisedDO;
 import com.citu.module.menduner.system.dal.dataobject.person.PersonInfoDO;
@@ -95,6 +97,25 @@ public interface StudentPracticeRecordMapper extends BaseMapperX<StudentPractice
         return selectJoinList(CommonRespVO.class, wrapper);
     }
 
+    /**
+     * 实习记录状态统计
+     **/
+    default List<CommonRespVO> getStatusCountBySchoolId(Long schoolId) {
+        MPJLambdaWrapperX<StudentPracticeRecordDO> wrapper = new MPJLambdaWrapperX<>();
+        wrapper.selectAs(StudentPracticeRecordDO::getStatus, "`key`");
+        wrapper.selectCount(StudentPracticeRecordDO::getId, CommonRespVO::getValue);
+
+        wrapper.innerJoin(PersonInfoDO.class, PersonInfoDO::getId, StudentPracticeRecordDO::getPersonId);
+        wrapper.innerJoin(StudentDO.class, StudentDO::getId, StudentPracticeRecordDO::getStudentId);
+        wrapper.innerJoin(EnterpriseDO.class, EnterpriseDO::getId, StudentPracticeRecordDO::getEnterpriseId);
+        wrapper.innerJoin(JobAdvertisedDO.class, JobAdvertisedDO::getId, StudentPracticeRecordDO::getJobId);
+
+        wrapper.eqIfExists(StudentDO::getSchoolId, schoolId);
+        wrapper.groupBy(StudentPracticeRecordDO::getStatus);
+        wrapper.orderByAsc("`key`");
+
+        return selectJoinList(CommonRespVO.class, wrapper);
+    }
 
     default List<Long> selectEnterpriseIdListByUserId(Long userId) {
         MPJLambdaWrapperX<StudentPracticeRecordDO> wrapper = new MPJLambdaWrapperX<>();
@@ -103,4 +124,69 @@ public interface StudentPracticeRecordMapper extends BaseMapperX<StudentPractice
         return selectJoinList(Long.class, wrapper);
     }
 
+
+    default List<StudentPracticeRecordDetailRespVO> selectByUserId(Long userId) {
+        MPJLambdaWrapperX<StudentPracticeRecordDO> wrapper =
+                new MPJLambdaWrapperX<>();
+        wrapper.selectAll(StudentPracticeRecordDO.class);
+        wrapper.selectAssociation(EnterpriseDO.class, StudentPracticeRecordDetailRespVO::getEnterprise);
+        wrapper.selectAssociation(JobAdvertisedDO.class, StudentPracticeRecordDetailRespVO::getJob);
+        wrapper.innerJoin(PersonInfoDO.class, PersonInfoDO::getId, StudentPracticeRecordDO::getPersonId);
+        wrapper.innerJoin(StudentDO.class, StudentDO::getId, StudentPracticeRecordDO::getStudentId);
+        wrapper.innerJoin(EnterpriseDO.class, EnterpriseDO::getId, StudentPracticeRecordDO::getEnterpriseId);
+        wrapper.innerJoin(JobAdvertisedDO.class, JobAdvertisedDO::getId, StudentPracticeRecordDO::getJobId);
+        wrapper.eq(StudentPracticeRecordDO::getUserId, userId);
+        return selectJoinList(StudentPracticeRecordDetailRespVO.class, wrapper);
+    }
+
+    default PageResult<StudentPracticeRecordSchoolRespVO> selectCount(StudentPracticeRecordSchoolPageReqVO reqVO) {
+        MPJLambdaWrapperX<StudentPracticeRecordDO> wrapper =
+                new MPJLambdaWrapperX<>();
+        wrapper.selectAsClass(EnterpriseDO.class, StudentPracticeRecordSchoolRespVO.class);
+        wrapper.innerJoin(PersonInfoDO.class, PersonInfoDO::getId, StudentPracticeRecordDO::getPersonId);
+        wrapper.innerJoin(StudentDO.class, StudentDO::getId, StudentPracticeRecordDO::getStudentId);
+        wrapper.innerJoin(EnterpriseDO.class, EnterpriseDO::getId, StudentPracticeRecordDO::getEnterpriseId);
+        wrapper.innerJoin(JobAdvertisedDO.class, JobAdvertisedDO::getId, StudentPracticeRecordDO::getJobId);
+        wrapper.eq(StudentDO::getSchoolId, reqVO.getSchoolId());
+        wrapper.eqIfExists(StudentPracticeRecordDO::getEnterpriseId, reqVO.getEnterpriseId());
+        wrapper.eqIfExists(StudentPracticeRecordDO::getStatus, reqVO.getStatus());
+        wrapper.groupBy(StudentPracticeRecordDO::getEnterpriseId);
+        return selectJoinPage(reqVO, StudentPracticeRecordSchoolRespVO.class, wrapper);
+
+    }
+
+
+    default Long getNumByEnterpriseIdAndStatus(Long enterpriseId, String status) {
+        MPJLambdaWrapperX<StudentPracticeRecordDO> wrapper =
+                new MPJLambdaWrapperX<>();
+        wrapper.innerJoin(PersonInfoDO.class, PersonInfoDO::getId, StudentPracticeRecordDO::getPersonId);
+        wrapper.innerJoin(StudentDO.class, StudentDO::getId, StudentPracticeRecordDO::getStudentId);
+        wrapper.innerJoin(EnterpriseDO.class, EnterpriseDO::getId, StudentPracticeRecordDO::getEnterpriseId);
+        wrapper.innerJoin(JobAdvertisedDO.class, JobAdvertisedDO::getId, StudentPracticeRecordDO::getJobId);
+        wrapper.eqIfExists(StudentPracticeRecordDO::getEnterpriseId, enterpriseId);
+        wrapper.eqIfExists(StudentPracticeRecordDO::getStatus, status);
+        return selectJoinCount(wrapper);
+    }
+
+    /**
+     * 招聘端-企业分页查询实习的学生信息
+     */
+    default PageResult<StudentPracticeRecordDetailRespVO> page(StudentPracticeRecordSchoolPageReqVO reqVO) {
+        MPJLambdaWrapperX<StudentPracticeRecordDO> wrapper =
+                new MPJLambdaWrapperX<>();
+        wrapper.selectAll(StudentPracticeRecordDO.class);
+        wrapper.selectAssociation(PersonInfoDO.class, StudentPracticeRecordDetailRespVO::getPerson);
+        wrapper.selectAssociation(StudentDO.class, StudentPracticeRecordDetailRespVO::getStudent);
+        wrapper.selectAssociation(EnterpriseDO.class, StudentPracticeRecordDetailRespVO::getEnterprise);
+        wrapper.selectAssociation(JobAdvertisedDO.class, StudentPracticeRecordDetailRespVO::getJob);
+        wrapper.innerJoin(PersonInfoDO.class, PersonInfoDO::getId, StudentPracticeRecordDO::getPersonId);
+        wrapper.innerJoin(StudentDO.class, StudentDO::getId, StudentPracticeRecordDO::getStudentId);
+        wrapper.innerJoin(EnterpriseDO.class, EnterpriseDO::getId, StudentPracticeRecordDO::getEnterpriseId);
+        wrapper.innerJoin(JobAdvertisedDO.class, JobAdvertisedDO::getId, StudentPracticeRecordDO::getJobId);
+        wrapper.eq(StudentDO::getSchoolId, reqVO.getSchoolId());
+        wrapper.eqIfExists(StudentPracticeRecordDO::getEnterpriseId, reqVO.getEnterpriseId());
+        wrapper.eqIfExists(StudentPracticeRecordDO::getStatus, reqVO.getStatus());
+        return selectJoinPage(reqVO, StudentPracticeRecordDetailRespVO.class, wrapper);
+    }
+
 }

+ 40 - 0
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/dal/mysql/person/TeacherMapper.java

@@ -0,0 +1,40 @@
+package com.citu.module.menduner.system.dal.mysql.person;
+
+
+import com.citu.framework.common.pojo.PageResult;
+import com.citu.framework.mybatis.core.mapper.BaseMapperX;
+import com.citu.framework.mybatis.core.query.LambdaQueryWrapperX;
+import com.citu.module.menduner.system.controller.base.person.teacher.TeacherPageReqVO;
+import com.citu.module.menduner.system.dal.dataobject.person.TeacherDO;
+import org.apache.ibatis.annotations.Mapper;
+
+
+/**
+ * 老师信息 Mapper
+ *
+ * @author Rayson
+ */
+@Mapper
+public interface TeacherMapper extends BaseMapperX<TeacherDO> {
+
+    default PageResult<TeacherDO> selectPage(TeacherPageReqVO reqVO) {
+        return selectPage(reqVO, new LambdaQueryWrapperX<TeacherDO>()
+                .eqIfPresent(TeacherDO::getUserId, reqVO.getUserId())
+                .likeIfPresent(TeacherDO::getName, reqVO.getName())
+                .eqIfPresent(TeacherDO::getSchoolId, reqVO.getSchoolId())
+                .eqIfPresent(TeacherDO::getPhone, reqVO.getPhone())
+                .eqIfPresent(TeacherDO::getEmail, reqVO.getEmail())
+                .eqIfPresent(TeacherDO::getSex, reqVO.getSex())
+                .eqIfPresent(TeacherDO::getStatus, reqVO.getStatus())
+                .eqIfPresent(TeacherDO::getAuthStatus, reqVO.getAuthStatus())
+                .eqIfPresent(TeacherDO::getAuthMessage, reqVO.getAuthMessage())
+                .betweenIfPresent(TeacherDO::getAuthTime, reqVO.getAuthTime())
+                .betweenIfPresent(TeacherDO::getCreateTime, reqVO.getCreateTime())
+                .orderByDesc(TeacherDO::getId));
+    }
+
+    default TeacherDO selectByUserId(Long userId) {
+        return selectOne(TeacherDO::getUserId, userId);
+    }
+
+}

+ 42 - 0
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/dal/mysql/school/SchoolInfoMapper.java

@@ -0,0 +1,42 @@
+package com.citu.module.menduner.system.dal.mysql.school;
+
+
+import com.citu.framework.common.pojo.PageResult;
+import com.citu.framework.mybatis.core.mapper.BaseMapperX;
+import com.citu.framework.mybatis.core.query.LambdaQueryWrapperX;
+import com.citu.module.menduner.system.controller.base.school.SchoolInfoPageReqVO;
+import com.citu.module.menduner.system.dal.dataobject.school.SchoolInfoDO;
+import org.apache.ibatis.annotations.Mapper;
+
+import java.util.List;
+
+/**
+ * 学校信息 Mapper
+ *
+ * @author Rayson
+ */
+@Mapper
+public interface SchoolInfoMapper extends BaseMapperX<SchoolInfoDO> {
+
+    default PageResult<SchoolInfoDO> selectPage(SchoolInfoPageReqVO reqVO) {
+        return selectPage(reqVO, new LambdaQueryWrapperX<SchoolInfoDO>()
+                .eqIfPresent(SchoolInfoDO::getUserId, reqVO.getUserId())
+                .eqIfPresent(SchoolInfoDO::getTeacherId, reqVO.getTeacherId())
+                .eqIfPresent(SchoolInfoDO::getSchoolId, reqVO.getSchoolId())
+                .likeIfPresent(SchoolInfoDO::getName, reqVO.getName())
+                .likeIfPresent(SchoolInfoDO::getEmail, reqVO.getEmail())
+                .likeIfPresent(SchoolInfoDO::getAddress, reqVO.getAddress())
+                .betweenIfPresent(SchoolInfoDO::getCreateTime, reqVO.getCreateTime())
+                .orderByDesc(SchoolInfoDO::getId));
+    }
+
+    default SchoolInfoDO selectBySchoolId(Long schoolId) {
+        return selectOne(SchoolInfoDO::getSchoolId, schoolId);
+    }
+
+
+    default List<SchoolInfoDO> selectListByName(String name) {
+        return selectList(new LambdaQueryWrapperX<SchoolInfoDO>().likeRightIfPresent(SchoolInfoDO::getName, name));
+    }
+
+}

+ 18 - 12
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/dal/mysql/school/SchoolMapper.java

@@ -1,13 +1,11 @@
 package com.citu.module.menduner.system.dal.mysql.school;
 
 import com.citu.framework.common.pojo.PageResult;
-import com.citu.framework.mybatis.core.query.LambdaQueryWrapperX;
 import com.citu.framework.mybatis.core.mapper.BaseMapperX;
+import com.citu.framework.mybatis.core.query.LambdaQueryWrapperX;
 import com.citu.framework.mybatis.core.query.MPJLambdaWrapperX;
-import com.citu.module.menduner.system.controller.base.school.SchoolPageReqVO;
 import com.citu.module.menduner.system.controller.base.CommonRespVO;
-import com.citu.module.menduner.system.dal.dataobject.job.JobCvRelDO;
-import com.citu.module.menduner.system.dal.dataobject.person.PersonInfoDO;
+import com.citu.module.menduner.system.controller.base.school.SchoolPageReqVO;
 import com.citu.module.menduner.system.dal.dataobject.school.SchoolDO;
 import com.citu.module.menduner.system.enums.MendunerStatusEnum;
 import org.apache.ibatis.annotations.Mapper;
@@ -43,12 +41,20 @@ public interface SchoolMapper extends BaseMapperX<SchoolDO> {
     Integer truncate();
 
 
-   default List<CommonRespVO> searchByName(String name){
-       MPJLambdaWrapperX<SchoolDO> wrapper = new MPJLambdaWrapperX<>();
-       wrapper.selectAs(SchoolDO::getId, "`key`");
-       wrapper.selectAs(SchoolDO::getName, CommonRespVO::getValue);
-       wrapper.like(SchoolDO::getName, name);
-       wrapper.eq(SchoolDO::getStatus, MendunerStatusEnum.ENABLE.getStatus());
-       return selectJoinList(CommonRespVO.class, wrapper);
-   }
+    default List<CommonRespVO> searchByName(String name) {
+        MPJLambdaWrapperX<SchoolDO> wrapper = new MPJLambdaWrapperX<>();
+        wrapper.selectAs(SchoolDO::getId, "`key`");
+        wrapper.selectAs(SchoolDO::getName, CommonRespVO::getValue);
+        wrapper.like(SchoolDO::getName, name);
+        wrapper.eq(SchoolDO::getStatus, MendunerStatusEnum.ENABLE.getStatus());
+        return selectJoinList(CommonRespVO.class, wrapper);
+    }
+
+
+    default List<SchoolDO> selectByList(String name) {
+        MPJLambdaWrapperX<SchoolDO> wrapper = new MPJLambdaWrapperX<>();
+        wrapper.likeIfExists(SchoolDO::getName, name);
+        wrapper.eq(SchoolDO::getStatus, MendunerStatusEnum.ENABLE.getStatus());
+        return selectList(wrapper);
+    }
 }

+ 33 - 0
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/dal/mysql/school/SchoolTeacherMapper.java

@@ -0,0 +1,33 @@
+package com.citu.module.menduner.system.dal.mysql.school;
+
+
+import com.citu.framework.mybatis.core.mapper.BaseMapperX;
+import com.citu.framework.mybatis.core.query.LambdaQueryWrapperX;
+import com.citu.module.menduner.system.dal.dataobject.school.SchoolTeacherDO;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 老师与学校机构的关联 Mapper
+ *
+ * @author Rayson
+ */
+@Mapper
+public interface SchoolTeacherMapper extends BaseMapperX<SchoolTeacherDO> {
+
+
+    default SchoolTeacherDO selectBySchoolIdAndTeacherIdAndOrganizationId( Long schoolId,Long teacherId, Long organizationId) {
+        return selectOne(new LambdaQueryWrapperX<SchoolTeacherDO>()
+                .eq(SchoolTeacherDO::getTeacherId, teacherId)
+                .eq(SchoolTeacherDO::getSchoolId, schoolId)
+                .eq(SchoolTeacherDO::getSchoolOrganizationId, organizationId)
+        );
+    }
+
+    default void deleteBySchoolIdAndTeacherId(Long schoolId, Long teacherId) {
+        delete(new LambdaQueryWrapperX<SchoolTeacherDO>()
+                .eq(SchoolTeacherDO::getTeacherId, teacherId)
+                .eq(SchoolTeacherDO::getSchoolId, schoolId)
+        );
+    }
+
+}

+ 17 - 0
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/dal/redis/RedisKeyConstants.java

@@ -154,6 +154,23 @@ public interface RedisKeyConstants {
      */
     String MDE_SKILL_CHILDREN ="mde_skill_children";
 
+
+    /**
+     * 学校信息的缓存
+     * <p>
+     * KEY 格式:mde_school_list:{id}
+     * VALUE 数据类型:String 区域编号集合
+     */
+    String MDE_SCHOOL_LIST ="mde_school_list";
+
+    /**
+     * 学校信息的缓存
+     * <p>
+     * KEY 格式:mde_major_list:{id}
+     * VALUE 数据类型:String 区域编号集合
+     */
+    String MDE_MAJOR_LIST ="mde_major_list";
+
     /**
      * 企业树形
      * <p>

+ 1 - 1
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/fair/FairServiceImpl.java

@@ -400,7 +400,7 @@ public class FairServiceImpl implements FairService {
             // 取出最新的5个职位
             List<Long> jobIdList = fairDetailList.stream()
                     .sorted(Comparator.comparing(FairDetailDO::getUpdateTime).reversed())
-                    .limit(5)
+                    .limit(3)
                     .map(FairDetailDO::getJobId).collect(Collectors.toList());
             if (ObjectUtil.isNotEmpty(jobIdList)) {
                 // 赋值

+ 3 - 1
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/major/MajorService.java

@@ -4,7 +4,7 @@ import javax.validation.*;
 
 import com.citu.module.menduner.system.controller.base.major.MajorPageReqVO;
 import com.citu.module.menduner.system.controller.base.major.MajorSaveReqVO;
-import com.citu.module.menduner.system.controller.app.jobhunt.major.vo.AppMajorRespVO;
+import com.citu.module.menduner.system.controller.app.common.major.vo.AppMajorRespVO;
 import com.citu.module.menduner.system.dal.dataobject.major.MajorDO;
 import com.citu.framework.common.pojo.PageResult;
 
@@ -67,4 +67,6 @@ public interface MajorService {
     AppMajorRespVO get(Long id);
 
     Map<String, List<AppMajorRespVO>> getAll();
+
+    List<MajorDO> list(String name);
 }

+ 22 - 1
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/major/MajorServiceImpl.java

@@ -3,13 +3,16 @@ package com.citu.module.menduner.system.service.major;
 import com.citu.framework.common.pojo.PageResult;
 import com.citu.framework.common.util.object.BeanUtils;
 import com.citu.framework.mybatis.core.query.LambdaQueryWrapperX;
-import com.citu.module.menduner.system.controller.app.jobhunt.major.vo.AppMajorRespVO;
+import com.citu.module.menduner.system.controller.app.common.major.vo.AppMajorRespVO;
 import com.citu.module.menduner.system.controller.base.major.MajorPageReqVO;
 import com.citu.module.menduner.system.controller.base.major.MajorSaveReqVO;
 import com.citu.module.menduner.system.convert.MajorConvert;
 import com.citu.module.menduner.system.dal.dataobject.major.MajorDO;
 import com.citu.module.menduner.system.dal.mysql.major.MajorMapper;
+import com.citu.module.menduner.system.dal.redis.RedisKeyConstants;
 import com.citu.module.menduner.system.enums.MendunerStatusEnum;
+import org.springframework.cache.annotation.CacheEvict;
+import org.springframework.cache.annotation.Cacheable;
 import org.springframework.stereotype.Service;
 import org.springframework.validation.annotation.Validated;
 
@@ -34,6 +37,10 @@ public class MajorServiceImpl implements MajorService {
     private MajorMapper majorMapper;
 
     @Override
+    @CacheEvict(cacheNames = {
+            RedisKeyConstants.MDE_MAJOR_LIST,
+    },
+            allEntries = true)
     public Long createMajor(MajorSaveReqVO createReqVO) {
         // 插入
         MajorDO major = BeanUtils.toBean(createReqVO, MajorDO.class);
@@ -43,6 +50,10 @@ public class MajorServiceImpl implements MajorService {
     }
 
     @Override
+    @CacheEvict(cacheNames = {
+            RedisKeyConstants.MDE_MAJOR_LIST,
+    },
+            allEntries = true)
     public void updateMajor(MajorSaveReqVO updateReqVO) {
         // 校验存在
         validateMajorExists(updateReqVO.getId());
@@ -52,6 +63,10 @@ public class MajorServiceImpl implements MajorService {
     }
 
     @Override
+    @CacheEvict(cacheNames = {
+            RedisKeyConstants.MDE_MAJOR_LIST,
+    },
+            allEntries = true)
     public void deleteMajor(Long id) {
         // 校验存在
         validateMajorExists(id);
@@ -95,4 +110,10 @@ public class MajorServiceImpl implements MajorService {
         return respVOList.stream()
                 .collect(Collectors.groupingBy(AppMajorRespVO::getCategorize));
     }
+
+    @Override
+    @Cacheable(cacheNames = RedisKeyConstants.MDE_MAJOR_LIST, unless = "#result.size==0 || #name != null")
+    public List<MajorDO> list(String name) {
+        return majorMapper.searchByName(name);
+    }
 }

+ 11 - 2
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/person/info/PersonInfoServiceImpl.java

@@ -26,6 +26,7 @@ import com.citu.module.menduner.system.dal.mysql.person.StudentMapper;
 import com.citu.module.menduner.system.enums.person.PersonTypeEnum;
 import com.citu.module.menduner.system.enums.sync.SyncConstants;
 import com.citu.module.menduner.system.mq.producer.GraphProducer;
+import com.citu.module.menduner.system.service.school.SchoolOrganizationService;
 import org.springframework.stereotype.Service;
 import org.springframework.util.StringUtils;
 import org.springframework.validation.annotation.Validated;
@@ -56,6 +57,9 @@ public class PersonInfoServiceImpl implements PersonInfoService {
     @Resource
     private StudentMapper studentMapper;
 
+    @Resource
+    private SchoolOrganizationService schoolOrganizationService;
+
     @Resource
     private GraphProducer graphProducer;
 
@@ -295,7 +299,7 @@ public class PersonInfoServiceImpl implements PersonInfoService {
                 throw exception(MDE_PERSON_PHONE_NOT_EXISTS);
             }
             PersonInfoDO person = personInfoMapper.getByUserId(userId);
-            if(null == person) {
+            if (null == person) {
                 // 新增
                 PersonInfoDO userInfo = PersonInfoDO.builder()
                         .userId(userId)
@@ -308,7 +312,7 @@ public class PersonInfoServiceImpl implements PersonInfoService {
                         .build();
                 personInfoMapper.insert(userInfo);
                 reqObj.setPersonId(userInfo.getId());
-            }else {
+            } else {
                 person.setType(PersonTypeEnum.STUDENT.getType());
                 person.setAvatar(reqVO.getAvatar());
                 person.setName(reqVO.getName());
@@ -324,6 +328,11 @@ public class PersonInfoServiceImpl implements PersonInfoService {
         } else {
             // 修改
             reqObj.setId(student.getId());
+            if (null != reqVO.getSchoolDeptId() && null != reqVO.getSchoolClassName()) {
+                Long classId = schoolOrganizationService
+                        .saveClass(reqVO.getSchoolId(), reqVO.getSchoolDeptId(), reqVO.getSchoolClassName());
+                reqObj.setSchoolClassId(classId);
+            }
             studentMapper.updateById(reqObj);
         }
     }

+ 28 - 2
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/person/student/StudentPracticeRecordService.java

@@ -67,12 +67,11 @@ public interface StudentPracticeRecordService {
 
 
 
-    // ========== 招聘端 ==========
     /**
      * 获得学生实习的企业id列表
      * @return 企业id
      */
-    List<Long> getRecordEnterpriseId();
+    List<Long> getRecordEnterpriseId(Long userId);
 
     // ========== 招聘端 ==========
     /**
@@ -88,5 +87,32 @@ public interface StudentPracticeRecordService {
      */
     PageResult<StudentPracticeRecordDetailRespVO> page(Long userId, StudentPracticeRecordPageReqVO reqVO);
 
+    // ========== 老师端 ==========
+
+    /**
+     * 根据学生id获取实习情况
+     * @param userId 学生id
+     * @return 学生实习记录
+     */
+    List<StudentPracticeRecordDetailRespVO> getByUserId(Long userId);
+
+    /**
+     * 根据学校id获得学生实习记录状态统计
+     * @param schoolId 学校id
+     */
+    List<CommonRespVO> getStatusCountBySchoolId(Long schoolId);
+
+    /**
+     * 获得学生实习记录状态基于企业统计
+     * @param reqVO 分页查询
+     */
+    PageResult<StudentPracticeRecordSchoolRespVO> getCount(StudentPracticeRecordSchoolPageReqVO reqVO);
 
+    /**
+     * 获得学生实习记录分页
+     *
+     * @param reqVO 分页查询
+     * @return 学生实习记录分页
+     */
+    PageResult<StudentPracticeRecordDetailRespVO> page(StudentPracticeRecordSchoolPageReqVO reqVO);
 }

+ 43 - 2
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/person/student/StudentPracticeRecordServiceImpl.java

@@ -118,7 +118,48 @@ public class StudentPracticeRecordServiceImpl implements StudentPracticeRecordSe
     }
 
     @Override
-    public List<Long> getRecordEnterpriseId() {
-        return mapper.selectEnterpriseIdListByUserId(LoginUserContext.getUserId());
+    public List<Long> getRecordEnterpriseId(Long userId) {
+        return mapper.selectEnterpriseIdListByUserId(userId);
+    }
+
+    @Override
+    public List<StudentPracticeRecordDetailRespVO> getByUserId(Long userId) {
+        return mapper.selectByUserId(userId);
+    }
+
+    @Override
+    public List<CommonRespVO> getStatusCountBySchoolId(Long schoolId) {
+        List<CommonRespVO> result = mapper.getStatusCountBySchoolId(schoolId);
+        // 填充
+        for (StudentPracticeStatusEnum value : StudentPracticeStatusEnum.values()) {
+            CommonRespVO respVO = result.stream()
+                    .filter(c -> value.getStatus().equals(c.getKey())).findFirst().orElse(null);
+            if (null == respVO) {
+                CommonRespVO newResp = new CommonRespVO();
+                newResp.setKey(value.getStatus());
+                newResp.setValue(0L);
+                result.add(newResp);
+            }
+        }
+        return result;
+    }
+
+    @Override
+    public PageResult<StudentPracticeRecordSchoolRespVO> getCount(StudentPracticeRecordSchoolPageReqVO reqVO) {
+        PageResult<StudentPracticeRecordSchoolRespVO> result = mapper.selectCount(reqVO);
+        result.getList().forEach(resp -> {
+            resp.setWaitingNum(mapper
+                    .getNumByEnterpriseIdAndStatus(resp.getId(), StudentPracticeStatusEnum.WAITING.getStatus()));
+            resp.setInProgressNum(mapper
+                    .getNumByEnterpriseIdAndStatus(resp.getId(), StudentPracticeStatusEnum.IN_PROGRESS.getStatus()));
+            resp.setEndNum(mapper
+                    .getNumByEnterpriseIdAndStatus(resp.getId(), StudentPracticeStatusEnum.END.getStatus()));
+        });
+        return result;
+    }
+
+    @Override
+    public PageResult<StudentPracticeRecordDetailRespVO> page(StudentPracticeRecordSchoolPageReqVO reqVO) {
+        return mapper.page(reqVO);
     }
 }

+ 2 - 1
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/person/student/StudentPracticeReportService.java

@@ -25,8 +25,9 @@ public interface StudentPracticeReportService {
      * 获取学生实习报告列表
      *
      * @param enterpriseId 企业id
+     * @param userId 用户id
      * @return 学生实习报告列表
      */
-    Map<String, List<StudentPracticeReportRespVO>> getReportList(Long enterpriseId);
+    Map<String, List<StudentPracticeReportRespVO>> getReportList(Long enterpriseId,Long userId);
 
 }

+ 2 - 2
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/person/student/StudentPracticeReportServiceImpl.java

@@ -56,8 +56,8 @@ public class StudentPracticeReportServiceImpl implements StudentPracticeReportSe
     }
 
     @Override
-    public Map<String, List<StudentPracticeReportRespVO>> getReportList(Long enterpriseId) {
-        List<StudentPracticeReportDO> list = mapper.selectByUserIdAndEnterpriseId(LoginUserContext.getUserId(), enterpriseId);
+    public Map<String, List<StudentPracticeReportRespVO>> getReportList(Long enterpriseId,Long userId) {
+        List<StudentPracticeReportDO> list = mapper.selectByUserIdAndEnterpriseId(userId, enterpriseId);
         return list.stream()
                 .map(doObj -> {
                     // 这里简单地将 submitDate 传递给 VO 对象,实际可能需要更多属性转换

+ 17 - 0
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/person/student/StudentService.java

@@ -3,6 +3,7 @@ package com.citu.module.menduner.system.service.person.student;
 
 import com.citu.framework.common.pojo.PageResult;
 import com.citu.module.menduner.system.controller.base.person.student.StudentPageReqVO;
+import com.citu.module.menduner.system.controller.base.person.student.StudentRespVO;
 import com.citu.module.menduner.system.controller.base.person.student.StudentSaveReqVO;
 import com.citu.module.menduner.system.dal.dataobject.person.StudentDO;
 
@@ -61,4 +62,20 @@ public interface StudentService {
      */
     StudentDO getStudentInfo(Long userId);
 
+    // ========== 老师端 ==========
+    /**
+     * 获得学生信息分页
+     *
+     * @param reqVO 分页查询
+     * @return 学生信息分页
+     */
+    PageResult<StudentRespVO> page(StudentPageReqVO reqVO);
+
+    /**
+     * 获得学生信息
+     *
+     * @param id 学生id
+     * @return 学生信息
+     */
+    StudentRespVO get(Long id);
 }

+ 39 - 0
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/person/student/StudentServiceImpl.java

@@ -3,10 +3,17 @@ package com.citu.module.menduner.system.service.person.student;
 
 import com.citu.framework.common.pojo.PageResult;
 import com.citu.framework.common.util.object.BeanUtils;
+import com.citu.module.menduner.system.controller.base.major.MajorRespVO;
 import com.citu.module.menduner.system.controller.base.person.student.StudentPageReqVO;
+import com.citu.module.menduner.system.controller.base.person.student.StudentRespVO;
 import com.citu.module.menduner.system.controller.base.person.student.StudentSaveReqVO;
+import com.citu.module.menduner.system.controller.base.school.SchoolOrganizationRespVO;
 import com.citu.module.menduner.system.dal.dataobject.person.StudentDO;
+import com.citu.module.menduner.system.dal.dataobject.school.SchoolOrganizationDO;
 import com.citu.module.menduner.system.dal.mysql.person.StudentMapper;
+import com.citu.module.menduner.system.service.major.MajorService;
+import com.citu.module.menduner.system.service.school.SchoolInfoService;
+import com.citu.module.menduner.system.service.school.SchoolOrganizationService;
 import org.springframework.stereotype.Service;
 import org.springframework.validation.annotation.Validated;
 
@@ -27,6 +34,16 @@ public class StudentServiceImpl implements StudentService {
     @Resource
     private StudentMapper studentMapper;
 
+    @Resource
+    private SchoolInfoService schoolInfoService;
+
+    @Resource
+    private SchoolOrganizationService schoolOrganizationService;
+
+    @Resource
+    private MajorService majorService;
+
+
     @Override
     public Long createStudent(StudentSaveReqVO createReqVO) {
         // 插入
@@ -77,4 +94,26 @@ public class StudentServiceImpl implements StudentService {
         }
         return student;
     }
+
+    @Override
+    public PageResult<StudentRespVO> page(StudentPageReqVO reqVO) {
+        PageResult<StudentRespVO> pageResult = studentMapper.page(reqVO);
+        pageResult.getList().forEach(this::fill);
+        return pageResult;
+    }
+
+    @Override
+    public StudentRespVO get(Long id) {
+        StudentRespVO resp = studentMapper.selectByStudentId(id);
+        fill(resp);
+        return resp;
+    }
+
+    public void fill(StudentRespVO resp) {
+        SchoolOrganizationDO dept = schoolOrganizationService.getSchoolOrganization(resp.getSchoolDeptId());
+        resp.setSchoolDept(BeanUtils.toBean(dept, SchoolOrganizationRespVO.class));
+        SchoolOrganizationDO schoolClass = schoolOrganizationService.getSchoolOrganization(resp.getSchoolClassId());
+        resp.setSchoolClass(BeanUtils.toBean(schoolClass, SchoolOrganizationRespVO.class));
+        resp.setMajor(BeanUtils.toBean(majorService.getMajor(resp.getMajorId()), MajorRespVO.class));
+    }
 }

+ 75 - 0
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/person/teacher/TeacherService.java

@@ -0,0 +1,75 @@
+package com.citu.module.menduner.system.service.person.teacher;
+
+
+import com.citu.framework.common.pojo.PageResult;
+import com.citu.module.menduner.system.controller.base.person.teacher.TeacherAuthReqVO;
+import com.citu.module.menduner.system.controller.base.person.teacher.TeacherPageReqVO;
+import com.citu.module.menduner.system.controller.base.person.teacher.TeacherRegisterReqVO;
+import com.citu.module.menduner.system.controller.base.person.teacher.TeacherSaveReqVO;
+import com.citu.module.menduner.system.dal.dataobject.person.TeacherDO;
+
+/**
+ * 老师信息 Service 接口
+ *
+ * @author Rayson
+ */
+public interface TeacherService {
+
+    /**
+     * 删除老师信息
+     *
+     * @param id 编号
+     */
+    void deleteTeacher(Long id);
+
+    /**
+     * 获得老师信息
+     *
+     * @param id 编号
+     * @return 老师信息
+     */
+    TeacherDO getTeacher(Long id);
+
+    /**
+     * 获得老师信息分页
+     *
+     * @param pageReqVO 分页查询
+     * @return 老师信息分页
+     */
+    PageResult<TeacherDO> getTeacherPage(TeacherPageReqVO pageReqVO);
+
+    /**
+     * 注册老师信息
+     *
+     * @param reqVO 注册信息
+     */
+    void register(TeacherRegisterReqVO reqVO);
+
+    /**
+     * 根据用户id查询老师信息
+     *
+     * @param userId 用户id
+     * @return 老师信息
+     */
+    TeacherDO get(Long userId);
+
+    /**
+     * 审核通过
+     *
+     * @param reqVO 审核信息
+     */
+    void approved(TeacherAuthReqVO reqVO);
+
+    /**
+     * 审核拒绝
+     *
+     * @param reqVO 审核信息
+     */
+    void refuse(TeacherAuthReqVO reqVO);
+
+
+    /**
+     * 更新老师信息
+     */
+    void update(TeacherSaveReqVO reqVO);
+}

+ 129 - 0
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/person/teacher/TeacherServiceImpl.java

@@ -0,0 +1,129 @@
+package com.citu.module.menduner.system.service.person.teacher;
+
+
+import com.baomidou.dynamic.datasource.annotation.DSTransactional;
+import com.citu.framework.common.pojo.PageResult;
+import com.citu.framework.common.util.object.BeanUtils;
+import com.citu.module.menduner.common.util.LoginUserContext;
+import com.citu.module.menduner.system.controller.base.person.teacher.TeacherAuthReqVO;
+import com.citu.module.menduner.system.controller.base.person.teacher.TeacherPageReqVO;
+import com.citu.module.menduner.system.controller.base.person.teacher.TeacherRegisterReqVO;
+import com.citu.module.menduner.system.controller.base.person.teacher.TeacherSaveReqVO;
+import com.citu.module.menduner.system.dal.dataobject.person.TeacherDO;
+import com.citu.module.menduner.system.dal.mysql.person.TeacherMapper;
+import com.citu.module.menduner.system.enums.MendunerStatusEnum;
+import com.citu.module.menduner.system.enums.person.TeacherAuthStatusEnum;
+import com.citu.module.menduner.system.service.school.SchoolInfoService;
+import org.springframework.stereotype.Service;
+import org.springframework.validation.annotation.Validated;
+
+import javax.annotation.Resource;
+import java.time.LocalDateTime;
+
+import static com.citu.framework.common.exception.util.ServiceExceptionUtil.exception;
+import static com.citu.module.menduner.system.enums.ErrorCodeConstants.TEACHER_NOT_EXISTS;
+
+/**
+ * 老师信息 Service 实现类
+ *
+ * @author Rayson
+ */
+@Service
+@Validated
+public class TeacherServiceImpl implements TeacherService {
+
+    @Resource
+    private TeacherMapper teacherMapper;
+
+    @Resource
+    private SchoolInfoService schoolInfoService;
+
+
+    @Override
+    public void deleteTeacher(Long id) {
+        // 校验存在
+        validateTeacherExists(id);
+        // 删除
+        teacherMapper.deleteById(id);
+    }
+
+    private void validateTeacherExists(Long id) {
+        if (teacherMapper.selectById(id) == null) {
+            throw exception(TEACHER_NOT_EXISTS);
+        }
+    }
+
+    @Override
+    public TeacherDO getTeacher(Long id) {
+        return teacherMapper.selectById(id);
+    }
+
+    @Override
+    public PageResult<TeacherDO> getTeacherPage(TeacherPageReqVO pageReqVO) {
+        return teacherMapper.selectPage(pageReqVO);
+    }
+
+    @Override
+    public void register(TeacherRegisterReqVO reqVO) {
+        TeacherDO teacher = BeanUtils.toBean(reqVO, TeacherDO.class);
+        teacher.setUserId(LoginUserContext.getUserId());
+        teacher.setStatus(MendunerStatusEnum.DISABLE.getStatus());
+        teacher.setAuthStatus(TeacherAuthStatusEnum.PENDING.getStatus());
+        teacher.setAuthDept(reqVO.getAuthDept());
+        if (null == reqVO.getId()) {
+            teacherMapper.insert(teacher);
+        } else {
+            teacherMapper.updateById(teacher);
+        }
+        // TODO 通知管理员审核
+    }
+
+    @Override
+    public TeacherDO get(Long userId) {
+        return teacherMapper.selectByUserId(userId);
+    }
+
+    @Override
+    @DSTransactional
+    public void approved(TeacherAuthReqVO reqVO) {
+        TeacherDO teacher = teacherMapper.selectById(reqVO.getId());
+        teacher.setStatus(MendunerStatusEnum.ENABLE.getStatus());
+        teacher.setAuthStatus(TeacherAuthStatusEnum.PASSED.getStatus());
+        teacher.setAuthMessage(reqVO.getAuthMessage());
+        teacher.setAuthTime(LocalDateTime.now());
+        teacherMapper.updateById(teacher);
+
+        // 保存学校 and 院系信息
+        schoolInfoService.save(teacher);
+        // TODO 短信通知
+    }
+
+    @Override
+    public void refuse(TeacherAuthReqVO reqVO) {
+        TeacherDO teacher = teacherMapper.selectById(reqVO.getId());
+        teacher.setStatus(MendunerStatusEnum.DISABLE.getStatus());
+        teacher.setAuthStatus(TeacherAuthStatusEnum.REJECTED.getStatus());
+        teacher.setAuthMessage(reqVO.getAuthMessage());
+        teacher.setAuthTime(LocalDateTime.now());
+        teacherMapper.updateById(teacher);
+        // TODO 短信通知
+    }
+
+    @Override
+    @DSTransactional
+    public void update(TeacherSaveReqVO reqVO) {
+        TeacherDO teacher = teacherMapper.selectById(reqVO.getId());
+        teacher.setName(reqVO.getName());
+        teacher.setPhone(reqVO.getPhone());
+        teacher.setEmail(reqVO.getEmail());
+        teacher.setSex(reqVO.getSex());
+        teacher.setAvatar(reqVO.getAvatar());
+        teacherMapper.updateById(teacher);
+
+        // 这个字段不用保存
+        teacher.setAuthDept(reqVO.getOrganizationList());
+        // 保存学校 and 院系信息
+        schoolInfoService.save(teacher);
+
+    }
+}

+ 83 - 0
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/school/SchoolInfoService.java

@@ -0,0 +1,83 @@
+package com.citu.module.menduner.system.service.school;
+
+
+import com.citu.framework.common.pojo.PageResult;
+import com.citu.module.menduner.system.controller.base.person.teacher.TeacherAuthReqVO;
+import com.citu.module.menduner.system.controller.base.school.SchoolInfoPageReqVO;
+import com.citu.module.menduner.system.controller.base.school.SchoolInfoRespVO;
+import com.citu.module.menduner.system.controller.base.school.SchoolInfoSaveReqVO;
+import com.citu.module.menduner.system.dal.dataobject.person.TeacherDO;
+import com.citu.module.menduner.system.dal.dataobject.school.SchoolInfoDO;
+
+import javax.validation.Valid;
+import java.util.List;
+
+/**
+ * 学校信息 Service 接口
+ *
+ * @author Rayson
+ */
+public interface SchoolInfoService {
+
+    /**
+     * 创建学校信息
+     *
+     * @param createReqVO 创建信息
+     * @return 编号
+     */
+    Long createSchoolInfo(@Valid SchoolInfoSaveReqVO createReqVO);
+
+    /**
+     * 更新学校信息
+     *
+     * @param updateReqVO 更新信息
+     */
+    void updateSchoolInfo(@Valid SchoolInfoSaveReqVO updateReqVO);
+
+    /**
+     * 删除学校信息
+     *
+     * @param id 编号
+     */
+    void deleteSchoolInfo(Long id);
+
+    /**
+     * 获得学校信息
+     *
+     * @param id 编号
+     * @return 学校信息
+     */
+    SchoolInfoDO getSchoolInfo(Long id);
+
+    /**
+     * 获得学校信息分页
+     *
+     * @param pageReqVO 分页查询
+     * @return 学校信息分页
+     */
+    PageResult<SchoolInfoDO> getSchoolInfoPage(SchoolInfoPageReqVO pageReqVO);
+
+    SchoolInfoRespVO getBySchoolId(Long schoolId);
+
+    /**
+     * 根据老师审核的信息保存学校信息
+     *
+     * @param teacher 老师信息
+     */
+    void save(TeacherDO teacher);
+
+    /**
+     * 根据老师审核的信息更新学校信息
+     *
+     * @param update
+     */
+    void update(SchoolInfoSaveReqVO update);
+
+    /**
+     * 根据学校名称模糊搜索
+     *
+     * @param name 学校名称
+     */
+    List<SchoolInfoDO> list(String name);
+
+}

+ 121 - 0
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/school/SchoolInfoServiceImpl.java

@@ -0,0 +1,121 @@
+package com.citu.module.menduner.system.service.school;
+
+
+import com.citu.framework.common.pojo.PageResult;
+import com.citu.framework.common.util.object.BeanUtils;
+import com.citu.module.menduner.system.controller.base.school.SchoolInfoPageReqVO;
+import com.citu.module.menduner.system.controller.base.school.SchoolInfoRespVO;
+import com.citu.module.menduner.system.controller.base.school.SchoolInfoSaveReqVO;
+import com.citu.module.menduner.system.dal.dataobject.person.TeacherDO;
+import com.citu.module.menduner.system.dal.dataobject.school.SchoolDO;
+import com.citu.module.menduner.system.dal.dataobject.school.SchoolInfoDO;
+import com.citu.module.menduner.system.dal.mysql.school.SchoolInfoMapper;
+import org.springframework.stereotype.Service;
+import org.springframework.validation.annotation.Validated;
+
+import javax.annotation.Resource;
+
+import java.util.List;
+
+import static com.citu.framework.common.exception.util.ServiceExceptionUtil.exception;
+import static com.citu.module.menduner.system.enums.ErrorCodeConstants.SCHOOL_INFO_NOT_EXISTS;
+
+/**
+ * 学校信息 Service 实现类
+ *
+ * @author Rayson
+ */
+@Service
+@Validated
+public class SchoolInfoServiceImpl implements SchoolInfoService {
+
+    @Resource
+    private SchoolInfoMapper schoolInfoMapper;
+
+    @Resource
+    private SchoolOrganizationService schoolOrganizationService;
+
+    @Resource
+    private SchoolService schoolService;
+
+    @Override
+    public Long createSchoolInfo(SchoolInfoSaveReqVO createReqVO) {
+        // 插入
+        SchoolInfoDO schoolInfo = BeanUtils.toBean(createReqVO, SchoolInfoDO.class);
+        schoolInfoMapper.insert(schoolInfo);
+        // 返回
+        return schoolInfo.getId();
+    }
+
+    @Override
+    public void updateSchoolInfo(SchoolInfoSaveReqVO updateReqVO) {
+        // 校验存在
+        validateSchoolInfoExists(updateReqVO.getId());
+        // 更新
+        SchoolInfoDO updateObj = BeanUtils.toBean(updateReqVO, SchoolInfoDO.class);
+        schoolInfoMapper.updateById(updateObj);
+    }
+
+    @Override
+    public void deleteSchoolInfo(Long id) {
+        // 校验存在
+        validateSchoolInfoExists(id);
+        // 删除
+        schoolInfoMapper.deleteById(id);
+    }
+
+    private void validateSchoolInfoExists(Long id) {
+        if (schoolInfoMapper.selectById(id) == null) {
+            throw exception(SCHOOL_INFO_NOT_EXISTS);
+        }
+    }
+
+    @Override
+    public SchoolInfoDO getSchoolInfo(Long id) {
+        return schoolInfoMapper.selectById(id);
+    }
+
+    @Override
+    public PageResult<SchoolInfoDO> getSchoolInfoPage(SchoolInfoPageReqVO pageReqVO) {
+        return schoolInfoMapper.selectPage(pageReqVO);
+    }
+
+    @Override
+    public SchoolInfoRespVO getBySchoolId(Long schoolId) {
+        return BeanUtils.toBean(schoolInfoMapper.selectBySchoolId(schoolId), SchoolInfoRespVO.class);
+    }
+
+    @Override
+    public void save(TeacherDO teacher) {
+        // 查询学校信息
+        SchoolInfoDO schoolInfo =
+                schoolInfoMapper.selectBySchoolId(teacher.getSchoolId());
+        // 查询学校字典
+        SchoolDO school = schoolService.get(teacher.getSchoolId());
+        if (null == schoolInfo) {
+            schoolInfoMapper.insert(SchoolInfoDO.builder()
+                    .userId(teacher.getUserId())
+                    .teacherId(teacher.getId())
+                    .schoolId(teacher.getSchoolId())
+                    .name(school.getName())
+                    .build()
+            );
+        }
+
+        // 增加院系信息
+        // 添加院系,存在则不添加
+        schoolOrganizationService.saveOrganization(teacher.getSchoolId(), teacher.getId(), teacher.getAuthDept());
+
+    }
+
+    @Override
+    public void update(SchoolInfoSaveReqVO update) {
+        SchoolInfoDO schoolInfo = BeanUtils.toBean(update, SchoolInfoDO.class);
+        schoolInfoMapper.updateById(schoolInfo);
+    }
+
+    @Override
+    public List<SchoolInfoDO> list(String name) {
+        return schoolInfoMapper.selectListByName(name);
+    }
+}

+ 98 - 0
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/school/SchoolOrganizationService.java

@@ -0,0 +1,98 @@
+package com.citu.module.menduner.system.service.school;
+
+
+import com.citu.framework.common.pojo.PageResult;
+import com.citu.module.menduner.system.controller.base.school.*;
+import com.citu.module.menduner.system.dal.dataobject.school.SchoolOrganizationDO;
+
+import javax.validation.Valid;
+import java.util.List;
+
+/**
+ * 学校组织机构 Service 接口
+ *
+ * @author Rayson
+ */
+public interface SchoolOrganizationService {
+
+    /**
+     * 创建学校组织机构
+     *
+     * @param createReqVO 创建信息
+     * @return 编号
+     */
+    Long createSchoolOrganization(@Valid SchoolOrganizationSaveReqVO createReqVO);
+
+    /**
+     * 更新学校组织机构
+     *
+     * @param updateReqVO 更新信息
+     */
+    void updateSchoolOrganization(@Valid SchoolOrganizationSaveReqVO updateReqVO);
+
+    /**
+     * 删除学校组织机构
+     *
+     * @param id 编号
+     */
+    void deleteSchoolOrganization(Long id);
+
+    /**
+     * 获得学校组织机构
+     *
+     * @param id 编号
+     * @return 学校组织机构
+     */
+    SchoolOrganizationDO getSchoolOrganization(Long id);
+
+    /**
+     * 获得学校组织机构分页
+     *
+     * @param pageReqVO 分页查询
+     * @return 学校组织机构分页
+     */
+    PageResult<SchoolOrganizationDO> getSchoolOrganizationPage(SchoolOrganizationPageReqVO pageReqVO);
+
+    /**
+     * 添加学校院系
+     */
+    void saveOrganization(Long schoolId,Long teacherId,List<SchoolOrganizationSimpleSaveVO> organizationSimpleSaveList);
+
+    /**
+     * 根据学校id获取院系信息
+     *
+     * @param schoolId 学校id
+     * @return
+     */
+    List<SchoolOrganizationDO> getDeptBySchoolId(Long schoolId);
+
+    /**
+     * 获取机构树
+     *
+     * @param schoolId 学校id
+     * @return
+     */
+    List<SchoolOrganizationChildrenRespVO> getTree(Long schoolId);
+
+    /**
+     * 获取机构列表
+     *
+     * @param reqVO
+     * @return
+     */
+    List<SchoolOrganizationDO> list(SchoolOrganizationListReqVO reqVO);
+
+    /**
+     * 根据老师id获取老师管辖的组织机构
+     * @param teacherId 老师id
+     */
+    List<SchoolOrganizationRespVO> getRelationByTeacherId(Long teacherId);
+
+    /**
+     * 添加班级
+     * @param schoolId 学校id
+     * @param deptId 院系id
+     * @param name 班级名称
+     */
+    Long saveClass(Long schoolId,Long deptId,String name);
+}

+ 200 - 0
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/school/SchoolOrganizationServiceImpl.java

@@ -0,0 +1,200 @@
+package com.citu.module.menduner.system.service.school;
+
+
+import com.citu.framework.common.pojo.PageResult;
+import com.citu.framework.common.util.object.BeanUtils;
+import com.citu.module.menduner.common.util.LoginUserContext;
+import com.citu.module.menduner.system.controller.base.school.*;
+import com.citu.module.menduner.system.dal.dataobject.school.SchoolOrganizationDO;
+import com.citu.module.menduner.system.dal.dataobject.school.SchoolTeacherDO;
+import com.citu.module.menduner.system.dal.mysql.school.SchoolOrganizationMapper;
+import com.citu.module.menduner.system.dal.mysql.school.SchoolTeacherMapper;
+import com.citu.module.menduner.system.enums.school.SchoolOrganizationTypeEnum;
+import org.springframework.stereotype.Service;
+import org.springframework.util.StringUtils;
+import org.springframework.validation.annotation.Validated;
+
+import javax.annotation.Resource;
+import java.util.Comparator;
+import java.util.List;
+import java.util.Objects;
+import java.util.stream.Collectors;
+
+import static com.citu.framework.common.exception.util.ServiceExceptionUtil.exception;
+import static com.citu.module.menduner.system.enums.ErrorCodeConstants.SCHOOL_ORGANIZATION_NOT_EXISTS;
+
+/**
+ * 学校组织机构 Service 实现类
+ *
+ * @author Rayson
+ */
+@Service
+@Validated
+public class SchoolOrganizationServiceImpl implements SchoolOrganizationService {
+
+    @Resource
+    private SchoolOrganizationMapper schoolOrganizationMapper;
+
+    @Resource
+    private SchoolTeacherMapper schoolTeacherMapper;
+
+    @Override
+    public Long createSchoolOrganization(SchoolOrganizationSaveReqVO createReqVO) {
+        // 插入
+        SchoolOrganizationDO schoolOrganization = BeanUtils.toBean(createReqVO, SchoolOrganizationDO.class);
+        schoolOrganizationMapper.insert(schoolOrganization);
+        // 返回
+        return schoolOrganization.getId();
+    }
+
+    @Override
+    public void updateSchoolOrganization(SchoolOrganizationSaveReqVO updateReqVO) {
+        // 校验存在
+        validateSchoolOrganizationExists(updateReqVO.getId());
+        // 更新
+        SchoolOrganizationDO updateObj = BeanUtils.toBean(updateReqVO, SchoolOrganizationDO.class);
+        schoolOrganizationMapper.updateById(updateObj);
+    }
+
+    @Override
+    public void deleteSchoolOrganization(Long id) {
+        // 校验存在
+        validateSchoolOrganizationExists(id);
+        // 删除
+        schoolOrganizationMapper.deleteById(id);
+    }
+
+    private void validateSchoolOrganizationExists(Long id) {
+        if (schoolOrganizationMapper.selectById(id) == null) {
+            throw exception(SCHOOL_ORGANIZATION_NOT_EXISTS);
+        }
+    }
+
+    @Override
+    public SchoolOrganizationDO getSchoolOrganization(Long id) {
+        return schoolOrganizationMapper.selectById(id);
+    }
+
+    @Override
+    public PageResult<SchoolOrganizationDO> getSchoolOrganizationPage(SchoolOrganizationPageReqVO pageReqVO) {
+        return schoolOrganizationMapper.selectPage(pageReqVO);
+    }
+
+    @Override
+    public void saveOrganization(Long schoolId, Long teacherId, List<SchoolOrganizationSimpleSaveVO> organizationSimpleSaveList) {
+        // 先清映射关系
+        schoolTeacherMapper.deleteBySchoolIdAndTeacherId(schoolId, teacherId);
+        for (SchoolOrganizationSimpleSaveVO reqVO : organizationSimpleSaveList) {
+            if (null == reqVO.getOrganizationId() && StringUtils.hasText(reqVO.getName())) {
+                SchoolOrganizationDO schoolOrganization = schoolOrganizationMapper
+                        .selectBySchoolIdAndTypeAndName(schoolId,
+                                SchoolOrganizationTypeEnum.DEPARTMENT.getType(),
+                                reqVO.getName());
+                // TODO 这里存在问题,没有考虑到如果删了院系然后加了新的,那么删掉的那个应该怎么去删除呢?
+                if (null == schoolOrganization) {
+                    // 没有院系
+                    SchoolOrganizationDO insertObj = SchoolOrganizationDO.builder()
+                            .schoolId(schoolId)
+                            .name(reqVO.getName())
+                            .type(SchoolOrganizationTypeEnum.DEPARTMENT.getType())
+                            .parentId(0L)
+                            .build();
+                    schoolOrganizationMapper.insert(insertObj);
+                    addRelation(schoolId, teacherId, insertObj.getId());
+                } else {
+                    // 已经有院系了
+                    addRelation(schoolId, teacherId, schoolOrganization.getId());
+                }
+                continue;
+            }
+            if (null != reqVO.getOrganizationId()) {
+                addRelation(schoolId, teacherId, reqVO.getOrganizationId());
+            }
+        }
+    }
+
+    public void addRelation(Long schoolId, Long teacherId, Long organizationId) {
+        // 查询是否有关联
+        SchoolTeacherDO relation =
+                schoolTeacherMapper.selectBySchoolIdAndTeacherIdAndOrganizationId(schoolId, teacherId, organizationId);
+        if (null == relation) {
+            // 添加
+            schoolTeacherMapper.insert(SchoolTeacherDO.builder().userId(LoginUserContext.getUserId())
+                    .schoolId(schoolId).teacherId(teacherId).schoolOrganizationId(organizationId).build());
+        }
+    }
+
+    @Override
+    public List<SchoolOrganizationDO> getDeptBySchoolId(Long schoolId) {
+        return schoolOrganizationMapper.selectDeptBySchoolId(schoolId);
+    }
+
+    @Override
+    public List<SchoolOrganizationChildrenRespVO> getTree(Long schoolId) {
+        List<SchoolOrganizationDO> organizations = schoolOrganizationMapper.selectBySchoolId(schoolId);
+        if (null == organizations) {
+            return null;
+        }
+        List<SchoolOrganizationChildrenRespVO> convertList =
+                BeanUtils.toBean(organizations, SchoolOrganizationChildrenRespVO.class);
+
+        List<SchoolOrganizationChildrenRespVO> convertListSort = convertList.stream()
+                .sorted(Comparator.comparing(SchoolOrganizationChildrenRespVO::getType))
+                .collect(Collectors.toList());
+        // 获取父节点并设置path
+        List<SchoolOrganizationChildrenRespVO> result = convertListSort.stream()
+                .filter(root -> root.getParentId() == 0)
+                .peek(root -> {
+                    root.setPath(String.valueOf(root.getId()));
+                    root.setChildren(getChildren(root, convertListSort));
+                })
+                .collect(Collectors.toList());
+        return result;
+    }
+
+    /**
+     * 递归查询子节点
+     *
+     * @param root 根节点
+     * @param all  所有节点
+     * @return 根节点信息
+     */
+    private List<SchoolOrganizationChildrenRespVO> getChildren(SchoolOrganizationChildrenRespVO root, List<SchoolOrganizationChildrenRespVO> all) {
+        return all.stream()
+                .filter(child -> Objects.equals(child.getParentId(), root.getId()))
+                .map(child -> {
+                    child.setPath(root.getPath() + "," + child.getId());
+                    child.setChildren(getChildren(child, all));
+                    return child;
+                })
+                .collect(Collectors.toList());
+    }
+
+    @Override
+    public List<SchoolOrganizationDO> list(SchoolOrganizationListReqVO reqVO) {
+        return schoolOrganizationMapper.selectList(reqVO);
+    }
+
+    @Override
+    public List<SchoolOrganizationRespVO> getRelationByTeacherId(Long teacherId) {
+        return schoolOrganizationMapper.selectRelationByTeacherId(teacherId);
+    }
+
+    @Override
+    public Long saveClass(Long schoolId, Long deptId, String name) {
+        SchoolOrganizationDO organization =
+                schoolOrganizationMapper
+                        .selectBySchoolIdAndName(schoolId, deptId, name, SchoolOrganizationTypeEnum.CLASS.getType());
+        if (null != organization) {
+            return organization.getId();
+        }
+        SchoolOrganizationDO insertObj = SchoolOrganizationDO.builder()
+                .schoolId(schoolId)
+                .name(name)
+                .type(SchoolOrganizationTypeEnum.CLASS.getType())
+                .parentId(deptId)
+                .build();
+        schoolOrganizationMapper.insert(insertObj);
+        return insertObj.getId();
+    }
+}

+ 14 - 0
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/school/SchoolService.java

@@ -47,6 +47,14 @@ public interface SchoolService {
      */
     SchoolDO getSchool(Long id);
 
+    /**
+     * 获得学校
+     *
+     * @param id 编号
+     * @return 学校
+     */
+    SchoolDO get(Long id);
+
     /**
      * 获得学校分页
      *
@@ -66,4 +74,10 @@ public interface SchoolService {
      * @return List<AppCommonRespVO>
      **/
     List<CommonRespVO> searchByName(String name);
+
+    /**
+     * 获取学校信息
+     * @return List<SchoolDO>
+     **/
+    List<SchoolDO> list(String name);
 }

+ 31 - 3
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/school/SchoolServiceImpl.java

@@ -5,15 +5,18 @@ import cn.hutool.core.io.resource.ResourceUtil;
 import cn.hutool.json.JSONUtil;
 import com.citu.framework.common.pojo.PageResult;
 import com.citu.framework.common.util.object.BeanUtils;
+import com.citu.module.menduner.system.controller.base.CommonRespVO;
 import com.citu.module.menduner.system.controller.base.school.SchoolPageReqVO;
 import com.citu.module.menduner.system.controller.base.school.SchoolSaveReqVO;
-import com.citu.module.menduner.system.controller.base.CommonRespVO;
 import com.citu.module.menduner.system.dal.dataobject.area.AreaDO;
 import com.citu.module.menduner.system.dal.dataobject.school.SchoolDO;
 import com.citu.module.menduner.system.dal.mysql.school.SchoolMapper;
+import com.citu.module.menduner.system.dal.redis.RedisKeyConstants;
 import com.citu.module.menduner.system.enums.school.SchoolStatusEnum;
 import com.citu.module.menduner.system.service.area.AreaService;
 import lombok.extern.slf4j.Slf4j;
+import org.springframework.cache.annotation.CacheEvict;
+import org.springframework.cache.annotation.Cacheable;
 import org.springframework.scheduling.annotation.Async;
 import org.springframework.stereotype.Service;
 import org.springframework.validation.annotation.Validated;
@@ -44,6 +47,10 @@ public class SchoolServiceImpl implements SchoolService {
 
 
     @Override
+    @CacheEvict(cacheNames = {
+            RedisKeyConstants.MDE_SCHOOL_LIST,
+    },
+            allEntries = true)
     public Long createSchool(SchoolSaveReqVO createReqVO) {
         // 插入
         SchoolDO school = BeanUtils.toBean(createReqVO, SchoolDO.class);
@@ -53,6 +60,10 @@ public class SchoolServiceImpl implements SchoolService {
     }
 
     @Override
+    @CacheEvict(cacheNames = {
+            RedisKeyConstants.MDE_SCHOOL_LIST,
+    },
+            allEntries = true)
     public void updateSchool(SchoolSaveReqVO updateReqVO) {
         // 校验存在
         validateSchoolExists(updateReqVO.getId());
@@ -62,6 +73,10 @@ public class SchoolServiceImpl implements SchoolService {
     }
 
     @Override
+    @CacheEvict(cacheNames = {
+            RedisKeyConstants.MDE_SCHOOL_LIST,
+    },
+            allEntries = true)
     public void deleteSchool(Long id) {
         // 校验存在
         validateSchoolExists(id);
@@ -69,10 +84,12 @@ public class SchoolServiceImpl implements SchoolService {
         schoolMapper.deleteById(id);
     }
 
-    private void validateSchoolExists(Long id) {
-        if (schoolMapper.selectById(id) == null) {
+    private SchoolDO validateSchoolExists(Long id) {
+        SchoolDO school = schoolMapper.selectById(id);
+        if (null == school) {
             throw exception(MDE_SCHOOL_NOT_EXISTS);
         }
+        return school;
     }
 
     @Override
@@ -80,6 +97,11 @@ public class SchoolServiceImpl implements SchoolService {
         return schoolMapper.selectById(id);
     }
 
+    @Override
+    public SchoolDO get(Long id) {
+        return validateSchoolExists(id);
+    }
+
     @Override
     public PageResult<SchoolDO> getSchoolPage(SchoolPageReqVO pageReqVO) {
         return schoolMapper.selectPage(pageReqVO);
@@ -123,4 +145,10 @@ public class SchoolServiceImpl implements SchoolService {
     public List<CommonRespVO> searchByName(String name) {
         return schoolMapper.searchByName(name);
     }
+
+    @Override
+    @Cacheable(cacheNames = RedisKeyConstants.MDE_SCHOOL_LIST, unless = "#result.size==0 || #name != null")
+    public List<SchoolDO> list(String name) {
+        return schoolMapper.selectByList(name);
+    }
 }