Ver Fonte

1、增加学生实习企业评价逻辑
2、增加学生实习上传报告

rayson há 4 meses atrás
pai
commit
2f90492d0e
32 ficheiros alterados com 856 adições e 49 exclusões
  1. 2 1
      menduner/menduner-system-api/src/main/java/com/citu/module/menduner/system/enums/ErrorCodeConstants.java
  2. 5 1
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/app/jobhunt/person/AppPersonResumeController.java
  3. 83 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/app/jobhunt/person/AppStudentController.java
  4. 25 8
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/app/recruit/person/AppRecruitStudentController.java
  5. 34 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/base/person/student/evaluate/StudentPracticeEvaluatePageReqVO.java
  6. 52 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/base/person/student/evaluate/StudentPracticeEvaluateRespVO.java
  7. 30 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/base/person/student/evaluate/StudentPracticeEvaluateSaveReqVO.java
  8. 19 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/base/person/student/record/StudentEvaluateReqVO.java
  9. 2 1
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/base/person/student/record/StudentPracticeRecordDetailRespVO.java
  10. 1 1
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/base/person/student/record/StudentPracticeRecordPageReqVO.java
  11. 21 1
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/base/person/student/record/StudentPracticeRecordRespVO.java
  12. 12 1
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/base/person/student/record/StudentPracticeRecordSaveReqVO.java
  13. 15 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/base/person/student/record/StudentRecommendationLetterReqVO.java
  14. 41 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/base/person/student/report/StudentPracticeReportPageReqVO.java
  15. 44 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/base/person/student/report/StudentPracticeReportRespVO.java
  16. 24 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/base/person/student/report/StudentPracticeReportSaveReqVO.java
  17. 60 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/dal/dataobject/person/StudentPracticeEvaluateDO.java
  18. 22 1
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/dal/dataobject/person/StudentPracticeRecordDO.java
  19. 53 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/dal/dataobject/person/StudentPracticeReportDO.java
  20. 37 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/dal/mysql/person/StudentPracticeEvaluateMapper.java
  21. 4 5
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/dal/mysql/person/StudentPracticeRecordMapper.java
  22. 39 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/dal/mysql/person/StudentPracticeReportMapper.java
  23. 0 6
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/person/info/PersonInfoService.java
  24. 0 5
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/person/info/PersonInfoServiceImpl.java
  25. 27 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/person/student/StudentPracticeEvaluateService.java
  26. 45 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/person/student/StudentPracticeEvaluateServiceImpl.java
  27. 12 5
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/person/student/StudentPracticeRecordService.java
  28. 25 13
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/person/student/StudentPracticeRecordServiceImpl.java
  29. 32 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/person/student/StudentPracticeReportService.java
  30. 74 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/person/student/StudentPracticeReportServiceImpl.java
  31. 8 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/person/student/StudentService.java
  32. 8 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/person/student/StudentServiceImpl.java

+ 2 - 1
menduner/menduner-system-api/src/main/java/com/citu/module/menduner/system/enums/ErrorCodeConstants.java

@@ -654,5 +654,6 @@ public interface ErrorCodeConstants {
 
     // ========== 学生实习记录 1_100_066_000 ==========
     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, "学生实习报告不存在");
 }

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

@@ -44,6 +44,7 @@ import com.citu.module.menduner.system.service.job.JobInterestedService;
 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.trainexp.TrainExpService;
 import com.citu.module.menduner.system.service.workexp.WorkExpService;
@@ -93,6 +94,9 @@ public class AppPersonResumeController {
     @Resource
     private CvAttachmentService cvAttachmentService;
 
+    @Resource
+    private StudentService studentService;
+
     @PreAuthenticated
     @PostMapping("/info/save")
     @ApiSignature(timeout = 30)
@@ -140,7 +144,7 @@ public class AppPersonResumeController {
     @Idempotent(keyResolver = UserIdempotentKeyResolver.class)
     public CommonResult<StudentRespVO> getStudentInfo() {
         StudentDO student =
-                personInfoService.getStudentInfo(LoginUserContext.getUserId());
+                studentService.getStudentInfo(LoginUserContext.getUserId());
         return success(BeanUtils.toBean(student, StudentRespVO.class));
     }
 

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

@@ -0,0 +1,83 @@
+package com.citu.module.menduner.system.controller.app.jobhunt.person;
+
+import com.citu.framework.common.pojo.CommonResult;
+import com.citu.framework.common.pojo.PageResult;
+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.student.evaluate.StudentPracticeEvaluateSaveReqVO;
+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.report.StudentPracticeReportRespVO;
+import com.citu.module.menduner.system.controller.base.person.student.report.StudentPracticeReportSaveReqVO;
+import com.citu.module.menduner.system.service.person.student.StudentPracticeEvaluateService;
+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 org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import javax.validation.Valid;
+
+import java.util.List;
+import java.util.Map;
+
+import static com.citu.framework.common.pojo.CommonResult.success;
+
+@Tag(name = "求职端 - 学生信息")
+@RestController
+@RequestMapping("/menduner/system/student")
+@Validated
+public class AppStudentController {
+
+    @Resource
+    private StudentService service;
+    @Resource
+    private StudentPracticeRecordService studentPracticeRecordService;
+    @Resource
+    private StudentPracticeEvaluateService evaluateService;
+    @Resource
+    private StudentPracticeReportService reportService;
+
+    @PreAuthenticated
+    @GetMapping("/page")
+    @Operation(summary = "获得学生实习记录分页")
+    public CommonResult<PageResult<StudentPracticeRecordDetailRespVO>> page
+            (StudentPracticeRecordPageReqVO reqVO) {
+        return success(studentPracticeRecordService.page(LoginUserContext.getUserId(),reqVO));
+    }
+
+    @PreAuthenticated
+    @GetMapping("/evaluate/check")
+    @Operation(summary = "效验是否评价企业")
+    public CommonResult<Boolean> checkEvaluate
+            (@RequestParam("enterpriseId") Long enterpriseId) {
+        return success(evaluateService.checkEvaluate(enterpriseId));
+    }
+
+    @PreAuthenticated
+    @PostMapping("/evaluate/save")
+    @Operation(summary = "保存评价信息")
+    public CommonResult<Boolean> saveEvaluate(@Valid @RequestBody StudentPracticeEvaluateSaveReqVO reqVO) {
+        evaluateService.save(reqVO);
+        return success(true);
+    }
+
+    @PreAuthenticated
+    @GetMapping("/get/report/list")
+    @Operation(summary = "获取学生实习报告列表")
+    public CommonResult<Map<String, List<StudentPracticeReportRespVO>>> getReportList
+            (@RequestParam("enterpriseId") Long enterpriseId) {
+        return success(reportService.getReportList(enterpriseId));
+    }
+
+    @PreAuthenticated
+    @PostMapping("/report/save")
+    @Operation(summary = "保存学生实习报告")
+    public CommonResult<Boolean> saveReport(@Valid @RequestBody StudentPracticeReportSaveReqVO reqVO) {
+        reportService.save(reqVO);
+        return success(true);
+    }
+}

+ 25 - 8
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/app/recruit/person/AppRecruitStudentController.java

@@ -5,21 +5,20 @@ import com.citu.framework.common.pojo.PageResult;
 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.analysis.RecruitAnalysisPageReqVO;
-import com.citu.module.menduner.system.controller.base.person.student.StudentPracticeRecordDetailRespVO;
-import com.citu.module.menduner.system.controller.base.person.student.StudentPracticeRecordPageReqVO;
+import com.citu.module.menduner.system.controller.base.person.student.record.StudentEvaluateReqVO;
+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.StudentRecommendationLetterReqVO;
 import com.citu.module.menduner.system.service.person.student.StudentPracticeRecordService;
 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 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.RestController;
+import org.springframework.web.bind.annotation.*;
 
 import javax.annotation.Resource;
-
+import javax.validation.Valid;
 import java.util.List;
-import java.util.Map;
 
 import static com.citu.framework.common.pojo.CommonResult.success;
 
@@ -47,7 +46,25 @@ public class AppRecruitStudentController {
     @Operation(summary = "获得学生实习记录分页")
     public CommonResult<PageResult<StudentPracticeRecordDetailRespVO>> page
             (StudentPracticeRecordPageReqVO pageReqVO) {
-        return success(studentPracticeRecordService.page(pageReqVO));
+        return success(studentPracticeRecordService.page(null,pageReqVO));
+    }
+
+    @PreAuthenticated
+    @PostMapping("/upload/recommendation-letter")
+    @Operation(summary = "上传推荐信")
+    public CommonResult<Boolean> uploadRecommendationLetter
+            (@RequestBody @Valid StudentRecommendationLetterReqVO reqVO) {
+        studentPracticeRecordService.uploadRecommendationLetter(reqVO);
+        return success(true);
     }
 
+
+    @PreAuthenticated
+    @PostMapping("/save/evaluate")
+    @Operation(summary = "保存实习评价")
+    public CommonResult<Boolean> saveEvaluate
+            (@RequestBody @Valid StudentEvaluateReqVO reqVO) {
+        studentPracticeRecordService.saveEvaluate(reqVO);
+        return success(true);
+    }
 }

+ 34 - 0
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/base/person/student/evaluate/StudentPracticeEvaluatePageReqVO.java

@@ -0,0 +1,34 @@
+package com.citu.module.menduner.system.controller.base.person.student.evaluate;
+
+
+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 StudentPracticeEvaluatePageReqVO extends PageParam {
+
+    @Schema(description = "用户id", example = "10415")
+    private Long userId;
+
+    @Schema(description = "学生id", example = "12787")
+    private Long studentId;
+
+    @Schema(description = "企业id", example = "27549")
+    private Long enterpriseId;
+
+    @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/student/evaluate/StudentPracticeEvaluateRespVO.java

@@ -0,0 +1,52 @@
+package com.citu.module.menduner.system.controller.base.person.student.evaluate;
+
+
+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 StudentPracticeEvaluateRespVO {
+
+    @Schema(description = "id", requiredMode = Schema.RequiredMode.REQUIRED, example = "27929")
+    @ExcelProperty("id")
+    private Long id;
+
+    @Schema(description = "用户id", requiredMode = Schema.RequiredMode.REQUIRED, example = "10415")
+    @ExcelProperty("用户id")
+    private Long userId;
+
+    @Schema(description = "学生id", requiredMode = Schema.RequiredMode.REQUIRED, example = "12787")
+    @ExcelProperty("学生id")
+    private Long studentId;
+
+    @Schema(description = "企业id", requiredMode = Schema.RequiredMode.REQUIRED, example = "27549")
+    @ExcelProperty("企业id")
+    private Long enterpriseId;
+
+    @Schema(description = "领导评分")
+    @ExcelProperty("领导评分")
+    private Integer leaderScore;
+
+    @Schema(description = "环境评分")
+    @ExcelProperty("环境评分")
+    private Integer environmentScore;
+
+    @Schema(description = "福利评分")
+    @ExcelProperty("福利评分")
+    private Integer welfareScore;
+
+    @Schema(description = "满意度评分")
+    @ExcelProperty("满意度评分")
+    private Integer satisfactionScore;
+
+    @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
+    @ExcelProperty("创建时间")
+    private LocalDateTime createTime;
+
+}

+ 30 - 0
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/base/person/student/evaluate/StudentPracticeEvaluateSaveReqVO.java

@@ -0,0 +1,30 @@
+package com.citu.module.menduner.system.controller.base.person.student.evaluate;
+
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+
+@Schema(description = "管理后台 - 学生实习评价新增/修改 Request VO")
+@Data
+public class StudentPracticeEvaluateSaveReqVO {
+
+
+    @Schema(description = "企业id", requiredMode = Schema.RequiredMode.REQUIRED, example = "27549")
+    @NotNull(message = "企业id不能为空")
+    private Long enterpriseId;
+
+    @Schema(description = "领导评分")
+    private Integer leaderScore;
+
+    @Schema(description = "环境评分")
+    private Integer environmentScore;
+
+    @Schema(description = "福利评分")
+    private Integer welfareScore;
+
+    @Schema(description = "满意度评分")
+    private Integer satisfactionScore;
+
+}

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

@@ -0,0 +1,19 @@
+package com.citu.module.menduner.system.controller.base.person.student.record;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+@Schema(description = "学生实习评价 Request VO")
+@Data
+public class StudentEvaluateReqVO {
+
+    @Schema(description = "id", requiredMode = Schema.RequiredMode.REQUIRED, example = "2479")
+    private Long id;
+
+    @Schema(description = "评价")
+    private String evaluate;
+
+    @Schema(description = "实习证书")
+    private String certificate;
+
+}

+ 2 - 1
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/base/person/student/StudentPracticeRecordDetailRespVO.java → menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/base/person/student/record/StudentPracticeRecordDetailRespVO.java

@@ -1,10 +1,11 @@
-package com.citu.module.menduner.system.controller.base.person.student;
+package com.citu.module.menduner.system.controller.base.person.student.record;
 
 
 import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
 import com.citu.module.menduner.system.controller.base.enterprise.vo.EnterpriseBaseSimpleRespVO;
 import com.citu.module.menduner.system.controller.base.job.JobAdvertisedSimpleRespVO;
 import com.citu.module.menduner.system.controller.base.person.info.PersonSimpleRespVO;
+import com.citu.module.menduner.system.controller.base.person.student.StudentRespVO;
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Data;
 

+ 1 - 1
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/base/person/student/StudentPracticeRecordPageReqVO.java → menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/base/person/student/record/StudentPracticeRecordPageReqVO.java

@@ -1,4 +1,4 @@
-package com.citu.module.menduner.system.controller.base.person.student;
+package com.citu.module.menduner.system.controller.base.person.student.record;
 
 
 import com.citu.framework.common.pojo.PageParam;

+ 21 - 1
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/base/person/student/StudentPracticeRecordRespVO.java → menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/base/person/student/record/StudentPracticeRecordRespVO.java

@@ -1,4 +1,4 @@
-package com.citu.module.menduner.system.controller.base.person.student;
+package com.citu.module.menduner.system.controller.base.person.student.record;
 
 
 import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
@@ -57,6 +57,26 @@ public class StudentPracticeRecordRespVO {
     @ExcelProperty("拒绝原因")
     private String refuseMsg;
 
+    @Schema(description = "推荐信")
+    @ExcelProperty("推荐信")
+    private String recommendationLetter;
+
+    @Schema(description = "评价")
+    @ExcelProperty("评价")
+    private String evaluate;
+
+    @Schema(description = "评价时间")
+    @ExcelProperty("评价时间")
+    private LocalDateTime evaluateTime;
+
+    @Schema(description = "评价用户id")
+    @ExcelProperty("评价用户id")
+    private Long evaluateUserId;
+
+    @Schema(description = "实习证书")
+    @ExcelProperty("实习证书")
+    private String certificate;
+
     @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
     @ExcelProperty("创建时间")
     private LocalDateTime createTime;

+ 12 - 1
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/base/person/student/StudentPracticeRecordSaveReqVO.java → menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/base/person/student/record/StudentPracticeRecordSaveReqVO.java

@@ -1,6 +1,7 @@
-package com.citu.module.menduner.system.controller.base.person.student;
+package com.citu.module.menduner.system.controller.base.person.student.record;
 
 
+import com.alibaba.excel.annotation.ExcelProperty;
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Data;
 
@@ -49,4 +50,14 @@ public class StudentPracticeRecordSaveReqVO {
     @Schema(description = "拒绝原因")
     private String refuseMsg;
 
+    @Schema(description = "推荐信")
+    @ExcelProperty("推荐信")
+    private String recommendationLetter;
+
+    @Schema(description = "评价")
+    private String evaluate;
+
+    @Schema(description = "实习证书")
+    private String certificate;
+
 }

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

@@ -0,0 +1,15 @@
+package com.citu.module.menduner.system.controller.base.person.student.record;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+@Schema(description = "学生推荐信 Request VO")
+@Data
+public class StudentRecommendationLetterReqVO {
+
+    @Schema(description = "id", requiredMode = Schema.RequiredMode.REQUIRED, example = "2479")
+    private Long id;
+
+    @Schema(description = "推荐信")
+    private String recommendationLetter;
+}

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

@@ -0,0 +1,41 @@
+package com.citu.module.menduner.system.controller.base.person.student.report;
+
+
+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 StudentPracticeReportPageReqVO extends PageParam {
+
+    @Schema(description = "用户id", example = "20376")
+    private Long userId;
+
+    @Schema(description = "学生id", example = "4285")
+    private Long studentId;
+
+    @Schema(description = "企业id", example = "29786")
+    private Long enterpriseId;
+
+    @Schema(description = "报告地址", example = "https://www.iocoder.cn")
+    private String url;
+
+    @Schema(description = "日期")
+    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+    private LocalDateTime[] submitDate;
+
+    @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/person/student/report/StudentPracticeReportRespVO.java

@@ -0,0 +1,44 @@
+package com.citu.module.menduner.system.controller.base.person.student.report;
+
+
+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 StudentPracticeReportRespVO {
+
+    @Schema(description = "id", requiredMode = Schema.RequiredMode.REQUIRED, example = "28778")
+    @ExcelProperty("id")
+    private Long id;
+
+    @Schema(description = "用户id", requiredMode = Schema.RequiredMode.REQUIRED, example = "20376")
+    @ExcelProperty("用户id")
+    private Long userId;
+
+    @Schema(description = "学生id", requiredMode = Schema.RequiredMode.REQUIRED, example = "4285")
+    @ExcelProperty("学生id")
+    private Long studentId;
+
+    @Schema(description = "企业id", requiredMode = Schema.RequiredMode.REQUIRED, example = "29786")
+    @ExcelProperty("企业id")
+    private Long enterpriseId;
+
+    @Schema(description = "报告地址", requiredMode = Schema.RequiredMode.REQUIRED, example = "https://www.iocoder.cn")
+    @ExcelProperty("报告地址")
+    private String url;
+
+    @Schema(description = "日期", requiredMode = Schema.RequiredMode.REQUIRED)
+    @ExcelProperty("日期")
+    private LocalDateTime submitDate;
+
+    @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
+    @ExcelProperty("创建时间")
+    private LocalDateTime createTime;
+
+}

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

@@ -0,0 +1,24 @@
+package com.citu.module.menduner.system.controller.base.person.student.report;
+
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+import java.util.List;
+
+@Schema(description = "管理后台 - 学生实习报告新增/修改 Request VO")
+@Data
+public class StudentPracticeReportSaveReqVO {
+
+    @Schema(description = "id", requiredMode = Schema.RequiredMode.REQUIRED, example = "28778")
+    private Long id;
+
+    @Schema(description = "企业id", requiredMode = Schema.RequiredMode.REQUIRED, example = "29786")
+    @NotNull(message = "企业id不能为空")
+    private Long enterpriseId;
+
+    @Schema(description = "报告地址", requiredMode = Schema.RequiredMode.REQUIRED, example = "https://www.iocoder.cn")
+    private List<String> urlList;
+
+}

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

@@ -0,0 +1,60 @@
+package com.citu.module.menduner.system.dal.dataobject.person;
+
+
+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 com.citu.framework.tenant.core.db.TenantBaseDO;
+import lombok.*;
+
+/**
+ * 学生实习评价 DO
+ *
+ * @author Rayson
+ */
+@TableName("mde_student_practice_evaluate")
+@KeySequence("mde_student_practice_evaluate_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class StudentPracticeEvaluateDO extends TenantBaseDO {
+
+    /**
+     * id
+     */
+    @TableId
+    private Long id;
+    /**
+     * 用户id
+     */
+    private Long userId;
+    /**
+     * 学生id
+     */
+    private Long studentId;
+    /**
+     * 企业id
+     */
+    private Long enterpriseId;
+    /**
+     * 领导评分
+     */
+    private Integer leaderScore;
+    /**
+     * 环境评分
+     */
+    private Integer environmentScore;
+    /**
+     * 福利评分
+     */
+    private Integer welfareScore;
+    /**
+     * 满意度评分
+     */
+    private Integer satisfactionScore;
+
+}

+ 22 - 1
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/dal/dataobject/person/StudentPracticeRecordDO.java

@@ -5,6 +5,7 @@ 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 com.citu.framework.tenant.core.db.TenantBaseDO;
 import lombok.*;
 
 import java.time.LocalDateTime;
@@ -22,7 +23,7 @@ import java.time.LocalDateTime;
 @Builder
 @NoArgsConstructor
 @AllArgsConstructor
-public class StudentPracticeRecordDO extends BaseDO {
+public class StudentPracticeRecordDO extends TenantBaseDO {
 
     /**
      * id
@@ -73,5 +74,25 @@ public class StudentPracticeRecordDO extends BaseDO {
      * 拒绝原因
      */
     private String refuseMsg;
+    /**
+     * 推荐信
+     */
+    private String recommendationLetter;
+    /**
+     * 评价
+     */
+    private String evaluate;
+    /**
+     * 评价时间
+     */
+    private LocalDateTime evaluateTime;
+    /**
+     * 评价用户id
+     */
+    private Long evaluateUserId;
+    /**
+     * 实习证书
+     */
+    private String certificate;
 
 }

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

@@ -0,0 +1,53 @@
+package com.citu.module.menduner.system.dal.dataobject.person;
+
+
+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.*;
+
+import java.time.LocalDateTime;
+
+/**
+ * 学生实习报告 DO
+ *
+ * @author Rayson
+ */
+@TableName("mde_student_practice_report")
+@KeySequence("mde_student_practice_report_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class StudentPracticeReportDO extends BaseDO {
+
+    /**
+     * id
+     */
+    @TableId
+    private Long id;
+    /**
+     * 用户id
+     */
+    private Long userId;
+    /**
+     * 学生id
+     */
+    private Long studentId;
+    /**
+     * 企业id
+     */
+    private Long enterpriseId;
+    /**
+     * 报告地址
+     */
+    private String url;
+    /**
+     * 日期
+     */
+    private LocalDateTime submitDate;
+
+}

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

@@ -0,0 +1,37 @@
+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.student.evaluate.StudentPracticeEvaluatePageReqVO;
+import com.citu.module.menduner.system.dal.dataobject.person.StudentPracticeEvaluateDO;
+import org.apache.ibatis.annotations.Mapper;
+
+import java.util.List;
+
+/**
+ * 学生实习评价 Mapper
+ *
+ * @author Rayson
+ */
+@Mapper
+public interface StudentPracticeEvaluateMapper extends BaseMapperX<StudentPracticeEvaluateDO> {
+
+    default PageResult<StudentPracticeEvaluateDO> selectPage(StudentPracticeEvaluatePageReqVO reqVO) {
+        return selectPage(reqVO, new LambdaQueryWrapperX<StudentPracticeEvaluateDO>()
+                .eqIfPresent(StudentPracticeEvaluateDO::getUserId, reqVO.getUserId())
+                .eqIfPresent(StudentPracticeEvaluateDO::getStudentId, reqVO.getStudentId())
+                .eqIfPresent(StudentPracticeEvaluateDO::getEnterpriseId, reqVO.getEnterpriseId())
+                .betweenIfPresent(StudentPracticeEvaluateDO::getCreateTime, reqVO.getCreateTime())
+                .orderByDesc(StudentPracticeEvaluateDO::getId));
+    }
+
+
+    default List<StudentPracticeEvaluateDO> selectListByUserIdAndEnterpriseId(Long userId, Long enterpriseId) {
+        return selectList(new LambdaQueryWrapperX<StudentPracticeEvaluateDO>()
+                .eq(StudentPracticeEvaluateDO::getUserId, userId)
+                .eq(StudentPracticeEvaluateDO::getEnterpriseId, enterpriseId));
+    }
+
+}

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

@@ -7,15 +7,13 @@ import com.citu.framework.mybatis.core.query.LambdaQueryWrapperX;
 import com.citu.framework.mybatis.core.query.MPJLambdaWrapperX;
 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.StudentPracticeRecordDetailRespVO;
-import com.citu.module.menduner.system.controller.base.person.student.StudentPracticeRecordPageReqVO;
+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.dal.dataobject.enterprise.EnterpriseDO;
 import com.citu.module.menduner.system.dal.dataobject.job.JobAdvertisedDO;
-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.dal.dataobject.person.StudentDO;
 import com.citu.module.menduner.system.dal.dataobject.person.StudentPracticeRecordDO;
-import com.github.yulichang.wrapper.MPJLambdaWrapper;
 import org.apache.ibatis.annotations.Mapper;
 
 import java.time.LocalDateTime;
@@ -48,7 +46,7 @@ public interface StudentPracticeRecordMapper extends BaseMapperX<StudentPractice
     /**
      * 招聘端-企业分页查询实习的学生信息
      */
-    default PageResult<StudentPracticeRecordDetailRespVO> page(StudentPracticeRecordPageReqVO reqVO) {
+    default PageResult<StudentPracticeRecordDetailRespVO> page(Long userId,StudentPracticeRecordPageReqVO reqVO) {
         MPJLambdaWrapperX<StudentPracticeRecordDO> wrapper =
                 new MPJLambdaWrapperX<>();
         wrapper.selectAll(StudentPracticeRecordDO.class);
@@ -63,6 +61,7 @@ public interface StudentPracticeRecordMapper extends BaseMapperX<StudentPractice
         wrapper.eqIfPresent(StudentPracticeRecordDO::getJobId, reqVO.getJobId());
         wrapper.eqIfPresent(StudentPracticeRecordDO::getJobFairId, reqVO.getJobFairId());
         wrapper.eqIfPresent(StudentPracticeRecordDO::getEnterpriseId, reqVO.getEnterpriseId());
+        wrapper.inIfPresent(StudentPracticeRecordDO::getUserId, userId);
         wrapper.betweenIfPresent(StudentPracticeRecordDO::getStartTime, reqVO.getStartTime());
         wrapper.betweenIfPresent(StudentPracticeRecordDO::getEndTime, reqVO.getEndTime());
         wrapper.eqIfPresent(StudentPracticeRecordDO::getStatus, reqVO.getStatus());

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

@@ -0,0 +1,39 @@
+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.student.report.StudentPracticeReportPageReqVO;
+import com.citu.module.menduner.system.dal.dataobject.person.StudentPracticeReportDO;
+import org.apache.ibatis.annotations.Mapper;
+
+import java.util.List;
+
+
+/**
+ * 学生实习报告 Mapper
+ *
+ * @author Rayson
+ */
+@Mapper
+public interface StudentPracticeReportMapper extends BaseMapperX<StudentPracticeReportDO> {
+
+    default PageResult<StudentPracticeReportDO> selectPage(StudentPracticeReportPageReqVO reqVO) {
+        return selectPage(reqVO, new LambdaQueryWrapperX<StudentPracticeReportDO>()
+                .eqIfPresent(StudentPracticeReportDO::getUserId, reqVO.getUserId())
+                .eqIfPresent(StudentPracticeReportDO::getStudentId, reqVO.getStudentId())
+                .eqIfPresent(StudentPracticeReportDO::getEnterpriseId, reqVO.getEnterpriseId())
+                .eqIfPresent(StudentPracticeReportDO::getUrl, reqVO.getUrl())
+                .betweenIfPresent(StudentPracticeReportDO::getSubmitDate, reqVO.getSubmitDate())
+                .betweenIfPresent(StudentPracticeReportDO::getCreateTime, reqVO.getCreateTime())
+                .orderByDesc(StudentPracticeReportDO::getId));
+    }
+
+
+    default List<StudentPracticeReportDO> selectByUserIdAndEnterpriseId(Long userId, Long enterpriseId) {
+        return selectList(new LambdaQueryWrapperX<StudentPracticeReportDO>()
+                .eq(StudentPracticeReportDO::getUserId, userId)
+                .eqIfPresent(StudentPracticeReportDO::getEnterpriseId, enterpriseId));
+    }
+}

+ 0 - 6
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/person/info/PersonInfoService.java

@@ -138,10 +138,4 @@ public interface PersonInfoService {
      */
     void saveStudentInfo(AppStudentSaveReqVO reqVO);
 
-    /**
-     * 获取学生信息
-     *
-     * @param userId 用户id
-     */
-    StudentDO getStudentInfo(Long userId);
 }

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

@@ -327,9 +327,4 @@ public class PersonInfoServiceImpl implements PersonInfoService {
             studentMapper.updateById(reqObj);
         }
     }
-
-    @Override
-    public StudentDO getStudentInfo(Long userId) {
-        return studentMapper.selectByUserId(userId);
-    }
 }

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

@@ -0,0 +1,27 @@
+package com.citu.module.menduner.system.service.person.student;
+
+
+import com.citu.module.menduner.system.controller.base.person.student.evaluate.StudentPracticeEvaluateSaveReqVO;
+
+/**
+ * 学生实习评价 Service 接口
+ *
+ * @author Rayson
+ */
+public interface StudentPracticeEvaluateService {
+
+
+    /**
+     * 效验是否评价
+     *
+     * @return 创建成功的学生实习评价信息
+     */
+    boolean checkEvaluate(Long enterpriseId);
+
+    /**
+     * 保存评价信息
+     *
+     * @param reqVO 分页查询参数
+     */
+    void save(StudentPracticeEvaluateSaveReqVO reqVO);
+}

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

@@ -0,0 +1,45 @@
+package com.citu.module.menduner.system.service.person.student;
+
+
+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.student.evaluate.StudentPracticeEvaluateSaveReqVO;
+import com.citu.module.menduner.system.dal.dataobject.person.StudentDO;
+import com.citu.module.menduner.system.dal.dataobject.person.StudentPracticeEvaluateDO;
+import com.citu.module.menduner.system.dal.mysql.person.StudentPracticeEvaluateMapper;
+import org.springframework.stereotype.Service;
+import org.springframework.validation.annotation.Validated;
+
+import javax.annotation.Resource;
+
+
+/**
+ * 学生实习评价 Service 实现类
+ *
+ * @author Rayson
+ */
+@Service
+@Validated
+public class StudentPracticeEvaluateServiceImpl implements StudentPracticeEvaluateService {
+
+    @Resource
+    private StudentPracticeEvaluateMapper mapper;
+
+    @Resource
+    private StudentService studentService;
+
+    @Override
+    public boolean checkEvaluate(Long enterpriseId) {
+        return !mapper.selectListByUserIdAndEnterpriseId(LoginUserContext.getUserId(), enterpriseId).isEmpty();
+    }
+
+    @Override
+    public void save(StudentPracticeEvaluateSaveReqVO reqVO) {
+        StudentPracticeEvaluateDO evaluateDO =
+                BeanUtils.toBean(reqVO, StudentPracticeEvaluateDO.class);
+        StudentDO student = studentService.getStudentInfo(LoginUserContext.getUserId());
+        evaluateDO.setUserId(student.getUserId());
+        evaluateDO.setStudentId(student.getId());
+        mapper.insert(evaluateDO);
+    }
+}

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

@@ -4,14 +4,11 @@ package com.citu.module.menduner.system.service.person.student;
 import com.citu.framework.common.pojo.PageResult;
 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.StudentPracticeRecordDetailRespVO;
-import com.citu.module.menduner.system.controller.base.person.student.StudentPracticeRecordPageReqVO;
-import com.citu.module.menduner.system.controller.base.person.student.StudentPracticeRecordSaveReqVO;
+import com.citu.module.menduner.system.controller.base.person.student.record.*;
 import com.citu.module.menduner.system.dal.dataobject.person.StudentPracticeRecordDO;
 
 import javax.validation.Valid;
 import java.util.List;
-import java.util.Map;
 
 /**
  * 学生实习记录 Service 接口
@@ -71,5 +68,15 @@ public interface StudentPracticeRecordService {
      * @param reqVO 分页查询
      * @return 学生实习记录分页
      */
-    PageResult<StudentPracticeRecordDetailRespVO> page(StudentPracticeRecordPageReqVO reqVO);
+    PageResult<StudentPracticeRecordDetailRespVO> page(Long userId, StudentPracticeRecordPageReqVO reqVO);
+
+    /**
+     * 上传学生推荐信
+     */
+    void uploadRecommendationLetter(StudentRecommendationLetterReqVO reqVO);
+
+    /**
+     * 评价实习
+     */
+    void saveEvaluate(StudentEvaluateReqVO reqVO);
 }

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

@@ -3,30 +3,23 @@ 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.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.person.student.StudentPracticeRecordDetailRespVO;
-import com.citu.module.menduner.system.controller.base.person.student.StudentPracticeRecordPageReqVO;
-import com.citu.module.menduner.system.controller.base.person.student.StudentPracticeRecordSaveReqVO;
+import com.citu.module.menduner.system.controller.base.person.student.record.*;
 import com.citu.module.menduner.system.dal.dataobject.person.StudentPracticeRecordDO;
 import com.citu.module.menduner.system.dal.mysql.person.StudentPracticeRecordMapper;
-import com.citu.module.menduner.system.enums.eduexp.EducationTypeEnum;
 import com.citu.module.menduner.system.enums.person.StudentPracticeStatusEnum;
 import org.springframework.stereotype.Service;
 import org.springframework.validation.annotation.Validated;
 
 import javax.annotation.Resource;
-
 import java.time.LocalDateTime;
-import java.util.Comparator;
 import java.util.List;
-import java.util.Map;
-import java.util.stream.Collectors;
 
 import static com.citu.framework.common.exception.util.ServiceExceptionUtil.exception;
 import static com.citu.module.menduner.common.util.TimeUtils.generateDateTimeRange;
 import static com.citu.module.menduner.system.enums.ErrorCodeConstants.STUDENT_PRACTICE_RECORD_NOT_EXISTS;
-import static com.citu.module.menduner.system.util.RecruitAnalysisUtils.packBarCount;
 
 /**
  * 学生实习记录 Service 实现类
@@ -66,10 +59,12 @@ public class StudentPracticeRecordServiceImpl implements StudentPracticeRecordSe
         mapper.deleteById(id);
     }
 
-    private void validateStudentPracticeRecordExists(Long id) {
-        if (mapper.selectById(id) == null) {
+    private StudentPracticeRecordDO validateStudentPracticeRecordExists(Long id) {
+        StudentPracticeRecordDO studentPracticeRecord = mapper.selectById(id);
+        if (null == studentPracticeRecord) {
             throw exception(STUDENT_PRACTICE_RECORD_NOT_EXISTS);
         }
+        return studentPracticeRecord;
     }
 
     @Override
@@ -101,7 +96,24 @@ public class StudentPracticeRecordServiceImpl implements StudentPracticeRecordSe
     }
 
     @Override
-    public PageResult<StudentPracticeRecordDetailRespVO> page(StudentPracticeRecordPageReqVO reqVO) {
-        return mapper.page(reqVO);
+    public PageResult<StudentPracticeRecordDetailRespVO> page(Long userId, StudentPracticeRecordPageReqVO reqVO) {
+        return mapper.page(userId,reqVO);
+    }
+
+    @Override
+    public void uploadRecommendationLetter(StudentRecommendationLetterReqVO reqVO) {
+        StudentPracticeRecordDO studentPracticeRecord = validateStudentPracticeRecordExists(reqVO.getId());
+        studentPracticeRecord.setRecommendationLetter(reqVO.getRecommendationLetter());
+        mapper.updateById(studentPracticeRecord);
+    }
+
+    @Override
+    public void saveEvaluate(StudentEvaluateReqVO reqVO) {
+        StudentPracticeRecordDO studentPracticeRecord = validateStudentPracticeRecordExists(reqVO.getId());
+        studentPracticeRecord.setEvaluate(reqVO.getEvaluate());
+        studentPracticeRecord.setCertificate(reqVO.getCertificate());
+        studentPracticeRecord.setEvaluateTime(LocalDateTime.now());
+        studentPracticeRecord.setEvaluateUserId(LoginUserContext.getUserId());
+        mapper.updateById(studentPracticeRecord);
     }
 }

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

@@ -0,0 +1,32 @@
+package com.citu.module.menduner.system.service.person.student;
+
+
+import com.citu.module.menduner.system.controller.base.person.student.report.StudentPracticeReportRespVO;
+import com.citu.module.menduner.system.controller.base.person.student.report.StudentPracticeReportSaveReqVO;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 学生实习报告 Service 接口
+ *
+ * @author Rayson
+ */
+public interface StudentPracticeReportService {
+
+    /**
+     * 保存学生实习报告
+     *
+     * @param reqVO 学生实习报告创建信息
+     */
+    void save(StudentPracticeReportSaveReqVO reqVO);
+
+    /**
+     * 获取学生实习报告列表
+     *
+     * @param enterpriseId 企业id
+     * @return 学生实习报告列表
+     */
+    Map<String, List<StudentPracticeReportRespVO>> getReportList(Long enterpriseId);
+
+}

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

@@ -0,0 +1,74 @@
+package com.citu.module.menduner.system.service.person.student;
+
+
+import com.baomidou.dynamic.datasource.annotation.DSTransactional;
+import com.citu.framework.common.util.date.DateUtils;
+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.student.report.StudentPracticeReportRespVO;
+import com.citu.module.menduner.system.controller.base.person.student.report.StudentPracticeReportSaveReqVO;
+import com.citu.module.menduner.system.dal.dataobject.person.StudentDO;
+import com.citu.module.menduner.system.dal.dataobject.person.StudentPracticeReportDO;
+import com.citu.module.menduner.system.dal.mysql.person.StudentPracticeReportMapper;
+import org.springframework.stereotype.Service;
+import org.springframework.util.StringUtils;
+import org.springframework.validation.annotation.Validated;
+
+import javax.annotation.Resource;
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+/**
+ * 学生实习报告 Service 实现类
+ *
+ * @author Rayson
+ */
+@Service
+@Validated
+public class StudentPracticeReportServiceImpl implements StudentPracticeReportService {
+
+    @Resource
+    private StudentPracticeReportMapper mapper;
+
+    @Resource
+    private StudentService studentService;
+
+    @Override
+    @DSTransactional
+    public void save(StudentPracticeReportSaveReqVO reqVO) {
+        StudentDO student = studentService.getStudentInfo(LoginUserContext.getUserId());
+        reqVO.getUrlList().forEach(url -> {
+            if(StringUtils.hasText(url)){
+                return;
+            }
+            mapper.insert(StudentPracticeReportDO.builder()
+                    .enterpriseId(reqVO.getEnterpriseId())
+                    .url(url)
+                    .userId(student.getUserId())
+                    .studentId(student.getId())
+                    .submitDate(LocalDateTime.now())
+                    .build()
+            );
+        });
+    }
+
+    @Override
+    public Map<String, List<StudentPracticeReportRespVO>> getReportList(Long enterpriseId) {
+        List<StudentPracticeReportDO> list = mapper.selectByUserIdAndEnterpriseId(LoginUserContext.getUserId(), enterpriseId);
+        return list.stream()
+                .map(doObj -> {
+                    // 这里简单地将 submitDate 传递给 VO 对象,实际可能需要更多属性转换
+                    return BeanUtils.toBean(doObj, StudentPracticeReportRespVO.class);
+                })
+                .collect(Collectors.groupingBy(
+                        vo -> {
+                            // 将 submitDate 格式化为字符串作为 Map 的键
+                            return vo.getSubmitDate().format(DateTimeFormatter.ofPattern(DateUtils.FORMAT_YEAR_MONTH_DAY));
+                        },
+                        Collectors.toList()
+                ));
+    }
+}

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

@@ -53,4 +53,12 @@ public interface StudentService {
      */
     PageResult<StudentDO> getStudentPage(StudentPageReqVO pageReqVO);
 
+    /**
+     * 获得学生信息
+     *
+     * @param userId 用户id
+     * @return 学生信息
+     */
+    StudentDO getStudentInfo(Long userId);
+
 }

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

@@ -69,4 +69,12 @@ public class StudentServiceImpl implements StudentService {
         return studentMapper.selectPage(pageReqVO);
     }
 
+    @Override
+    public StudentDO getStudentInfo(Long userId) {
+        StudentDO student = studentMapper.selectByUserId(userId);
+        if (null == student) {
+            throw exception(STUDENT_NOT_EXISTS);
+        }
+        return student;
+    }
 }