Gqingci 17 horas atrás
pai
commit
f7c4372bd7

+ 7 - 1
ruoyi-admin/src/main/resources/application.yml

@@ -131,9 +131,15 @@ tenant:
   # 排除表
   excludes:
     - sys_menu
-
+    - main_exam_apply
+    - main_training_learn_record
+    - main_post_candidate_review
+    - main_student_appendix
     - sys_tenant_package
+    - cs_session
     - main_post_candidate_hire_attachment
+    - main_student_education
+    - main_student_experience
     - main_student_project
     - sys_role_dept
     - sys_role_menu

+ 2 - 0
ruoyi-modules/ruoyi-main/src/main/java/org/dromara/main/domain/MainStudentEducation.java

@@ -1,6 +1,7 @@
 package org.dromara.main.domain;
 
 import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
 import com.baomidou.mybatisplus.annotation.TableName;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
@@ -26,5 +27,6 @@ public class MainStudentEducation extends BaseEntity {
     private String eduVerification;
     private String checkResult;
 
+    @TableLogic
     private String delFlag;
 }

+ 2 - 0
ruoyi-modules/ruoyi-main/src/main/java/org/dromara/main/domain/MainStudentExperience.java

@@ -1,6 +1,7 @@
 package org.dromara.main.domain;
 
 import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
 import com.baomidou.mybatisplus.annotation.TableName;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
@@ -28,5 +29,6 @@ public class MainStudentExperience extends BaseEntity {
     private String checkResult;
     private String checkRemark;
 
+    @TableLogic
     private String delFlag;
 }

+ 3 - 0
ruoyi-modules/ruoyi-main/src/main/java/org/dromara/main/domain/MainStudentProject.java

@@ -1,6 +1,7 @@
 package org.dromara.main.domain;
 
 import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
 import com.baomidou.mybatisplus.annotation.TableName;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
@@ -22,5 +23,7 @@ public class MainStudentProject extends BaseEntity {
     private String description;
     private String achievement;
     private String link;
+
+    @TableLogic
     private String delFlag;
 }

+ 3 - 0
ruoyi-modules/ruoyi-main/src/main/java/org/dromara/main/domain/vo/MainExamApplyRecordVo.java

@@ -29,6 +29,9 @@ public class MainExamApplyRecordVo implements Serializable {
 
     private String statusType;
 
+    /** 关联岗位名称(来自main_exam_evaluation.position) */
+    private String positionName;
+
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     private Date scheduleStartTime;
 

+ 15 - 0
ruoyi-modules/ruoyi-main/src/main/java/org/dromara/main/domain/vo/MainStudentVo.java

@@ -11,6 +11,7 @@ import org.dromara.common.translation.annotation.Translation;
 import org.dromara.common.translation.constant.TransConstant;
 
 import org.dromara.main.domain.MainOrder;
+import org.dromara.main.domain.MainPostCandidateReview;
 import org.dromara.main.domain.MainStudent;
 
 import java.io.Serial;
@@ -332,6 +333,20 @@ public class MainStudentVo implements Serializable {
      */
     private List<MainStudentAppendixVo> appendixList;
 
+    /**
+     * 测评记录列表
+     */
+    private List<MainExamApplyRecordVo> evaluationList;
+
+    /**
+     * 培训学习记录列表
+     */
+    private List<StudentTrainingRecordVo> trainingList;
+
+    /**
+     * 任职信息列表
+     */
+    private List<StudentJobRecordVo> jobList;
 
 
 

+ 45 - 0
ruoyi-modules/ruoyi-main/src/main/java/org/dromara/main/domain/vo/StudentJobRecordVo.java

@@ -0,0 +1,45 @@
+package org.dromara.main.domain.vo;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * 学员任职记录视图对象(联查岗位表和租户表)
+ */
+@Data
+public class StudentJobRecordVo implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    private Long id;
+    private Long candidateId;
+    private String tenantId;
+    private Long postId;
+    private Long studentId;
+
+    /** 任职状态(onboard在职/left已离职) */
+    private String employmentStatus;
+
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date entryTime;
+
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date leaveTime;
+
+    /** 离职原因 */
+    private String leaveReason;
+
+    /** 公司名称(来自sys_tenant) */
+    private String companyName;
+
+    /** 岗位名称(来自main_position) */
+    private String postName;
+
+    /** 岗位类型(来自main_position) */
+    private String postType;
+}

+ 54 - 0
ruoyi-modules/ruoyi-main/src/main/java/org/dromara/main/domain/vo/StudentTrainingRecordVo.java

@@ -0,0 +1,54 @@
+package org.dromara.main.domain.vo;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * 学员培训记录视图对象(联查培训表,合并线上+线下)
+ */
+@Data
+public class StudentTrainingRecordVo implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /** 记录ID */
+    private Long id;
+
+    /** 培训ID */
+    private Long trainingId;
+
+    /** 学员ID */
+    private Long studentId;
+
+    /** 培训名称(来自main_training.name) */
+    private String name;
+
+    /** 培训方式(来自main_training.training_type: video=视频培训, offline=线下培训, live=直播培训) */
+    private String trainingType;
+
+    /** 培训开始时间(来自main_training.training_start_time) */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date trainingStartTime;
+
+    /** 培训结束时间(来自main_training.training_end_time) */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date trainingEndTime;
+
+    /** 学习进度(线上培训才有, 0-100) */
+    private Integer progress;
+
+    /** 学习状态(线上培训才有) */
+    private Integer learnStatus;
+
+    /** 报名状态(线下培训才有: 0=待审核, 1=已通过, 2=已拒绝, 3=已签到) */
+    private Integer enrollStatus;
+
+    /** 签到时间(线下培训才有) */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date checkInTime;
+}

+ 1 - 0
ruoyi-modules/ruoyi-main/src/main/java/org/dromara/main/mapper/MainExamApplyMapper.java

@@ -24,6 +24,7 @@ public interface MainExamApplyMapper extends BaseMapperPlus<MainExamApply, MainE
             a.id,
             a.evaluation_id AS evaluationId,
             e.evaluation_name AS evaluationName,
+            e.position AS positionName,
             a.student_id AS studentId,
             a.apply_status AS applyStatus,
             a.final_result AS finalResult,

+ 32 - 0
ruoyi-modules/ruoyi-main/src/main/java/org/dromara/main/mapper/MainPostCandidateReviewMapper.java

@@ -1,7 +1,39 @@
 package org.dromara.main.mapper;
 
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.Select;
 import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
 import org.dromara.main.domain.MainPostCandidateReview;
+import org.dromara.main.domain.vo.StudentJobRecordVo;
 
+import java.util.List;
+
+@Mapper
 public interface MainPostCandidateReviewMapper extends BaseMapperPlus<MainPostCandidateReview, MainPostCandidateReview> {
+
+    /**
+     * 查询学员任职记录列表(关联岗位表和租户表)
+     */
+    @Select("""
+        SELECT r.id,
+               r.candidate_id,
+               r.tenant_id,
+               r.post_id,
+               r.student_id,
+               r.employment_status,
+               r.entry_time,
+               r.leave_time,
+               r.leave_reason,
+               t.company_name AS companyName,
+               p.post_name AS postName,
+               p.post_type AS postType
+          FROM main_post_candidate_review r
+          LEFT JOIN sys_tenant t ON t.tenant_id = r.tenant_id
+          LEFT JOIN main_position p ON p.id = r.post_id AND p.del_flag = '0'
+         WHERE r.student_id = #{studentId}
+           AND r.del_flag = '0'
+         ORDER BY r.create_time DESC
+        """)
+    List<StudentJobRecordVo> selectJobListByStudentId(@Param("studentId") Long studentId);
 }

+ 44 - 0
ruoyi-modules/ruoyi-main/src/main/java/org/dromara/main/mapper/MainTrainingLearnRecordMapper.java

@@ -6,6 +6,7 @@ import org.apache.ibatis.annotations.Select;
 import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
 import org.dromara.main.domain.MainTrainingLearnRecord;
 import org.dromara.main.domain.vo.MainTrainingLearnRecordVo;
+import org.dromara.main.domain.vo.StudentTrainingRecordVo;
 
 import java.util.List;
 
@@ -38,4 +39,47 @@ public interface MainTrainingLearnRecordMapper extends BaseMapperPlus<MainTraini
          ORDER BY r.last_learn_time DESC
         """)
     List<MainTrainingLearnRecordVo> selectRecordListByStudentId(@Param("studentId") Long studentId);
+
+    /**
+     * 查询学员全部培训记录(合并线上视频培训 + 线下培训报名)
+     * 关联 main_training 表获取培训名称、类型、时间
+     */
+    @Select("""
+        SELECT r.id,
+               r.training_id AS trainingId,
+               r.student_id AS studentId,
+               t.name AS name,
+               t.training_type AS trainingType,
+               t.training_start_time AS trainingStartTime,
+               t.training_end_time AS trainingEndTime,
+               r.progress AS progress,
+               r.learn_status AS learnStatus,
+               NULL AS enrollStatus,
+               NULL AS checkInTime
+          FROM main_training_learn_record r
+          LEFT JOIN main_training t ON t.id = r.training_id AND t.del_flag = '0'
+         WHERE r.student_id = #{studentId}
+           AND r.del_flag = '0'
+
+        UNION ALL
+
+        SELECT e.id,
+               e.training_id AS trainingId,
+               e.student_id AS studentId,
+               t.name AS name,
+               t.training_type AS trainingType,
+               t.training_start_time AS trainingStartTime,
+               t.training_end_time AS trainingEndTime,
+               NULL AS progress,
+               NULL AS learnStatus,
+               e.enroll_status AS enrollStatus,
+               e.check_in_time AS checkInTime
+          FROM main_training_enrollment e
+          LEFT JOIN main_training t ON t.id = e.training_id AND t.del_flag = '0'
+         WHERE e.student_id = #{studentId}
+           AND e.del_flag = '0'
+
+         ORDER BY trainingStartTime DESC
+        """)
+    List<StudentTrainingRecordVo> selectAllTrainingByStudentId(@Param("studentId") Long studentId);
 }

+ 19 - 0
ruoyi-modules/ruoyi-main/src/main/java/org/dromara/main/service/impl/MainStudentServiceImpl.java

@@ -22,8 +22,12 @@ import org.dromara.main.domain.vo.MainStudentAppendixVo;
 import org.dromara.main.domain.vo.MainStudentVo;
 
 import org.dromara.main.domain.vo.MiniappLoginVo;
+import org.dromara.main.domain.vo.MainExamApplyRecordVo;
+import org.dromara.main.domain.vo.StudentTrainingRecordVo;
+import org.dromara.main.domain.vo.StudentJobRecordVo;
 import org.dromara.main.mapper.*;
 import org.dromara.main.service.IMainStudentService;
+import org.dromara.main.service.IMainExamApplyService;
 import org.dromara.main.utils.WechatMiniAppUtil;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -46,6 +50,9 @@ public class MainStudentServiceImpl implements IMainStudentService {
     private final MainOrderMapper orderMapper;
     private final MainExamApplyMapper examApplyMapper;
     private final MainBackCandidateMapper candidateMapper;
+    private final IMainExamApplyService examApplyService;
+    private final MainTrainingLearnRecordMapper trainingLearnRecordMapper;
+    private final MainPostCandidateReviewMapper candidateReviewMapper;
 
     @Override
     public MainStudentVo queryById(Long id){
@@ -73,6 +80,18 @@ public class MainStudentServiceImpl implements IMainStudentService {
             vo.setProjectList(projectMapper.selectVoList(new LambdaQueryWrapper<MainStudentProject>()
                     .eq(MainStudentProject::getStudentId, id)));
 
+            // 查询测评记录列表
+            List<MainExamApplyRecordVo> evaluationList = examApplyService.queryRecordList(id);
+            vo.setEvaluationList(evaluationList);
+
+            // 查询培训记录列表(合并线上+线下,联查main_training)
+            List<StudentTrainingRecordVo> trainingList = trainingLearnRecordMapper.selectAllTrainingByStudentId(id);
+            vo.setTrainingList(trainingList);
+
+            // 查询任职信息列表 (从 main_post_candidate_review 联查 main_position 和 sys_tenant)
+            List<StudentJobRecordVo> jobList = candidateReviewMapper.selectJobListByStudentId(id);
+            vo.setJobList(jobList);
+
             // 查询所有简历附件
             List<MainStudentAppendixVo> appendixList = appendixMapper.selectVoList(new LambdaQueryWrapper<MainStudentAppendix>()
                 .eq(MainStudentAppendix::getStudentId, id)