diff --git a/vetti-admin/target/classes/application-druid.yml b/vetti-admin/target/classes/application-druid.yml index 1463f6f..feb4f08 100644 --- a/vetti-admin/target/classes/application-druid.yml +++ b/vetti-admin/target/classes/application-druid.yml @@ -138,6 +138,7 @@ twilio: reply-to-em7941: noreply@em7941.routez.app template-ids: routez-verification-code: d-18475c5d41e349e2bc3a35f2b4992182 + interview-template-code: d-c377f1e7f5e04cb794e2753af9d2e0c8 accountSID: 1111 authToken: 22222 sendPhoneNumber: 33333 diff --git a/vetti-hotakes/src/main/java/com/vetti/hotake/domain/HotakeRolesApplyInfo.java b/vetti-hotakes/src/main/java/com/vetti/hotake/domain/HotakeRolesApplyInfo.java index af542a4..11673a9 100644 --- a/vetti-hotakes/src/main/java/com/vetti/hotake/domain/HotakeRolesApplyInfo.java +++ b/vetti-hotakes/src/main/java/com/vetti/hotake/domain/HotakeRolesApplyInfo.java @@ -143,6 +143,12 @@ public class HotakeRolesApplyInfo extends BaseEntity @ApiModelProperty("候选人面试综合评估最终得分") private BigDecimal evaluationScore; + @ApiModelProperty("AI面试分析JSON 数据") + private String aiInterviewAnalysisJson; + + @ApiModelProperty("AI面试问答数据记录JSON") + private String aiInterviewAnalysisQaJson; + @ApiModelProperty("岗位信息") private HotakeRolesInfo rolesInfo; diff --git a/vetti-hotakes/src/main/java/com/vetti/hotake/domain/HotakeRolesInfo.java b/vetti-hotakes/src/main/java/com/vetti/hotake/domain/HotakeRolesInfo.java index 38f26e3..2e5de8d 100644 --- a/vetti-hotakes/src/main/java/com/vetti/hotake/domain/HotakeRolesInfo.java +++ b/vetti-hotakes/src/main/java/com/vetti/hotake/domain/HotakeRolesInfo.java @@ -1,6 +1,8 @@ package com.vetti.hotake.domain; import java.math.BigDecimal; +import java.util.List; + import lombok.Data; import lombok.experimental.Accessors; import io.swagger.annotations.ApiModelProperty; @@ -175,5 +177,8 @@ public class HotakeRolesInfo extends BaseEntity @ApiModelProperty("当前岗位状态(pause:暂停,archived:关闭/归档,open:发布,editing:编辑中)") private String status; + @ApiModelProperty("岗位申请数据集合") + private List rolesApplyInfoList; + } diff --git a/vetti-hotakes/src/main/java/com/vetti/hotake/service/impl/HotakeAiCommonToolsServiceImpl.java b/vetti-hotakes/src/main/java/com/vetti/hotake/service/impl/HotakeAiCommonToolsServiceImpl.java index ad280cc..629c658 100644 --- a/vetti-hotakes/src/main/java/com/vetti/hotake/service/impl/HotakeAiCommonToolsServiceImpl.java +++ b/vetti-hotakes/src/main/java/com/vetti/hotake/service/impl/HotakeAiCommonToolsServiceImpl.java @@ -1138,8 +1138,13 @@ public class HotakeAiCommonToolsServiceImpl extends BaseServiceImpl implements I throw new ServiceException("No rating"); } } - //todo 把面试结果分析保存到记录表中 - + //把面试结果分析和问答Qa保存到记录表中 + if(analysisVo.getRoleApplyId() != null){ + HotakeRolesApplyInfo applyInfo = hotakeRolesApplyInfoMapper.selectHotakeRolesApplyInfoById(analysisVo.getRoleApplyId()); + applyInfo.setAiInterviewAnalysisJson(JSONUtil.toJsonStr(analysisVo)); + applyInfo.setAiInterviewAnalysisQaJson(JSONUtil.toJsonStr(analysisVo.getAiInterviewQuestionRecordVoList())); + hotakeRolesApplyInfoMapper.updateHotakeRolesApplyInfo(applyInfo); + } return analysisDto; } diff --git a/vetti-hotakes/src/main/java/com/vetti/hotake/service/impl/HotakeRolesApplyInfoServiceImpl.java b/vetti-hotakes/src/main/java/com/vetti/hotake/service/impl/HotakeRolesApplyInfoServiceImpl.java index 4def05e..f15fa88 100644 --- a/vetti-hotakes/src/main/java/com/vetti/hotake/service/impl/HotakeRolesApplyInfoServiceImpl.java +++ b/vetti-hotakes/src/main/java/com/vetti/hotake/service/impl/HotakeRolesApplyInfoServiceImpl.java @@ -105,6 +105,7 @@ public class HotakeRolesApplyInfoServiceImpl extends BaseServiceImpl implements List applyInfoList = hotakeRolesApplyInfoMapper.selectHotakeRolesApplyInfoList(hotakeRolesApplyInfo); if(CollectionUtil.isNotEmpty(applyInfoList)) { + List sysUserList = userService.selectUserList(new SysUser()); List screQuestionsReplyRecordInfoList = initScreQuestionsReplyRecordInfoMapper.selectHotakeInitScreQuestionsReplyRecordInfoList(new HotakeInitScreQuestionsReplyRecordInfo()); @@ -149,6 +150,12 @@ public class HotakeRolesApplyInfoServiceImpl extends BaseServiceImpl implements } applyInfo.setScreQuestionsReplyRecordInfoList(screQuestionsReplyRecordInfos); } + if(applyInfo.getCandidateId() != null){ + List userList = sysUserList.stream().filter(e->e.getUserId().longValue() == applyInfo.getCandidateId().longValue()).toList(); + if(CollectionUtil.isNotEmpty(userList)) { + applyInfo.setCandidateUSer(userList.get(0)); + } + } } } return applyInfoList; diff --git a/vetti-hotakes/src/main/java/com/vetti/hotake/service/impl/HotakeRolesInfoServiceImpl.java b/vetti-hotakes/src/main/java/com/vetti/hotake/service/impl/HotakeRolesInfoServiceImpl.java index dd2283d..75fdd94 100644 --- a/vetti-hotakes/src/main/java/com/vetti/hotake/service/impl/HotakeRolesInfoServiceImpl.java +++ b/vetti-hotakes/src/main/java/com/vetti/hotake/service/impl/HotakeRolesInfoServiceImpl.java @@ -16,10 +16,12 @@ import com.vetti.common.utils.SecurityUtils; import com.vetti.common.utils.uuid.IdUtils; import com.vetti.hotake.domain.HotakeAiInterviewQuestionsInfo; import com.vetti.hotake.domain.HotakeInitialScreeningQuestionsInfo; +import com.vetti.hotake.domain.HotakeRolesApplyInfo; import com.vetti.hotake.domain.HotakeRolesInfo; import com.vetti.hotake.domain.dto.AiQuestionDto; import com.vetti.hotake.domain.dto.HotakeRolesInfoDto; import com.vetti.hotake.domain.dto.roleDto.*; +import com.vetti.hotake.mapper.HotakeRolesApplyInfoMapper; import com.vetti.hotake.mapper.HotakeRolesInfoMapper; import com.vetti.hotake.service.IHotakeAiInterviewQuestionsInfoService; import com.vetti.hotake.service.IHotakeInitialScreeningQuestionsInfoService; @@ -48,6 +50,9 @@ public class HotakeRolesInfoServiceImpl extends BaseServiceImpl implements IHota @Autowired private SysUserMapper sysUserMapper; + @Autowired + private HotakeRolesApplyInfoMapper hotakeRolesApplyInfoMapper; + @Autowired private IHotakeInitialScreeningQuestionsInfoService hotakeInitialScreeningQuestionsInfoService; @@ -144,13 +149,30 @@ public class HotakeRolesInfoServiceImpl extends BaseServiceImpl implements IHota @Override public List selectHotakeRolesInfoList(HotakeRolesInfo hotakeRolesInfo) { - List rolesInfoList = hotakeRolesInfoMapper.selectHotakeRolesInfoList(hotakeRolesInfo); //计算一个发布日期 if(CollectionUtil.isNotEmpty(rolesInfoList)){ + List applyInfoList = hotakeRolesApplyInfoMapper.selectHotakeRolesApplyInfoList(new HotakeRolesApplyInfo()); + + List sysUserList = sysUserMapper.selectUserList(new SysUser()); for (HotakeRolesInfo rolesInfo : rolesInfoList) { String posted = DateUtils.getTimeAgo(rolesInfo.getCreateTime()); rolesInfo.setPosted(posted); + + if(CollectionUtil.isNotEmpty(applyInfoList)){ + List applyInfos = applyInfoList.stream().filter(e->e.getRoleId().longValue() == rolesInfo.getId().longValue()).toList(); + if(CollectionUtil.isNotEmpty(applyInfos)){ + for (HotakeRolesApplyInfo applyInfo : applyInfos) { + if(applyInfo.getCandidateId() != null){ + List userList = sysUserList.stream().filter(e->e.getUserId().longValue() == applyInfo.getCandidateId().longValue()).toList(); + if(CollectionUtil.isNotEmpty(userList)) { + applyInfo.setCandidateUSer(userList.get(0)); + } + } + } + rolesInfo.setRolesApplyInfoList(applyInfos); + } + } } } return rolesInfoList; diff --git a/vetti-hotakes/src/main/resources/mapper/hotake/HotakeRolesApplyInfoMapper.xml b/vetti-hotakes/src/main/resources/mapper/hotake/HotakeRolesApplyInfoMapper.xml index b6e771a..59e7ac6 100644 --- a/vetti-hotakes/src/main/resources/mapper/hotake/HotakeRolesApplyInfoMapper.xml +++ b/vetti-hotakes/src/main/resources/mapper/hotake/HotakeRolesApplyInfoMapper.xml @@ -36,6 +36,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + + + + @@ -49,6 +53,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" cover_letter, candidate_status, stage, last_contact, cv_template_json, cv_score, cv_md5, experience, ai_match_score, ai_match_score_percentage,status, ai_cv_scoring_ranking_json,ai_cv_score,candidate_compatibility_json, candidate_compatibility_score,evaluation_json,evaluation_score, + ai_match_score_percentage,status, ai_cv_scoring_ranking_json,ai_cv_score,candidate_compatibility_json, + candidate_compatibility_score,ai_interview_analysis_json,ai_interview_analysis_qa_json, del_flag, create_by, create_time, update_by, update_time, remark from hotake_roles_apply_info @@ -185,6 +191,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" evaluation_json, evaluation_score, + ai_interview_analysis_json, + ai_interview_analysis_qa_json, + del_flag, create_by, create_time, @@ -222,6 +231,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" #{evaluationJson}, #{evaluationScore}, + #{aiInterviewAnalysisJson}, + #{aiInterviewAnalysisQaJson}, + #{delFlag}, #{createBy}, #{createTime}, @@ -263,6 +275,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" evaluation_json = #{evaluationJson}, evaluation_score = #{evaluationScore}, + ai_interview_analysis_json = #{aiInterviewAnalysisJson}, + ai_interview_analysis_qa_json = #{aiInterviewAnalysisQaJson}, + del_flag = #{delFlag}, create_by = #{createBy}, create_time = #{createTime},