AI接入逻辑完善

This commit is contained in:
2025-12-29 08:57:46 +08:00
parent ff49f1c0c1
commit 5663e8abfd
60 changed files with 2666 additions and 108 deletions

View File

@@ -1,6 +1,7 @@
package com.vetti.hotake.domain;
import com.vetti.hotake.domain.dto.HotakeCvInfoDto;
import com.vetti.hotake.domain.dto.HotakeCvOptimizeDto;
import lombok.Data;
import lombok.experimental.Accessors;
import io.swagger.annotations.ApiModelProperty;
@@ -80,4 +81,16 @@ public class HotakeCvInfo extends BaseEntity
@ApiModelProperty("简历评分")
private String score;
@ApiModelProperty("简历分析结果数据存储")
private String cvOptimizeJson;
@ApiModelProperty("文本修正的数量")
private Integer textCorrectionsNums;
@ApiModelProperty("逻辑修正的数量")
private Integer logicCorrectionsNum;
@ApiModelProperty("简历分析结果数据")
private HotakeCvOptimizeDto cvOptimizeDto;
}

View File

@@ -59,7 +59,7 @@ public class HotakeMeetingCalendarInfo extends BaseEntity
private String messageVia;
/** 状态0 取消1 正常) */
@ApiModelProperty("状态0 取消1 正常)")
@ApiModelProperty("状态0 取消1 正常,2 已完成面试")
private String status;
@ApiModelProperty("岗位基本信息")
@@ -69,4 +69,8 @@ public class HotakeMeetingCalendarInfo extends BaseEntity
private List<HotakeMeetingCalendarDetail> calendarDetails;
@ApiModelProperty("会议ID数据集合-查询使用")
private List<Long> meetingIds;
}

View File

@@ -0,0 +1,30 @@
package com.vetti.hotake.domain.dto;
import com.vetti.hotake.domain.dto.VcDto.*;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.experimental.Accessors;
/**
* 简历优化器 返回对象
*
* @author wangxiangshun
* @date 2025-11-30
*/
@Data
@Accessors(chain = true)
public class HotakeCvOptimizeDto {
@ApiModelProperty("分析总结")
private CvAnalysisSummaryDto analysisSummary;
@ApiModelProperty("文本修正(文字、语法等错误)")
private CvTextCorrectionsDto textCorrections;
@ApiModelProperty("逻辑修正")
private CvLogicCorrectionsDto logicCorrections;
@ApiModelProperty("优化建议")
private CvOptimizationSuggestionsDto optimizationSuggestions;
@ApiModelProperty("行动计划")
private CvActionPlanDto actionPlan;
@ApiModelProperty("预期改进效果")
private CvEstimatedImprovementDto estimatedImprovement;
}

View File

@@ -0,0 +1,22 @@
package com.vetti.hotake.domain.dto;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.experimental.Accessors;
/**
* 初步筛选问题淘汰评分 返回对象
*
* @author wangxiangshun
* @date 2025-11-30
*/
@Data
@Accessors(chain = true)
public class HotakeInitialQuestionEliminationScoreDto {
@ApiModelProperty("评分")
private String score;
@ApiModelProperty("描述")
private String evaluate;
}

View File

@@ -0,0 +1,41 @@
package com.vetti.hotake.domain.dto;
import com.vetti.hotake.domain.dto.roleDto.NiceToHaveSkillsDto;
import com.vetti.hotake.domain.dto.roleDto.RequiredSkillsDto;
import com.vetti.hotake.domain.dto.roleDto.ResponsibilitiesDto;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.experimental.Accessors;
import java.util.List;
/**
* 岗位-职位描述 返回信息
*
* @author wangxiangshun
* @date 2025-11-30
*/
@Data
@Accessors(chain = true)
public class HotakeJobDescriptionGeneratorDto {
/** 关于职位 */
@ApiModelProperty("关于职位")
private String aboutRole;
/** 职责 */
@ApiModelProperty("职责")
private List<ResponsibilitiesDto> responsibilitiesList;
@ApiModelProperty("岗位所需技能信息数据集合")
private List<RequiredSkillsDto> skillsDtoList;
@ApiModelProperty("岗位加分技能信息数据集合")
private List<NiceToHaveSkillsDto> haveSkillsDtoList;
}

View File

@@ -0,0 +1,30 @@
package com.vetti.hotake.domain.dto;
import com.vetti.common.annotation.Excel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.experimental.Accessors;
/**
* 会议日历返回数据 实体类对象
*
* @author wangxiangshun
* @date 2025-11-30
*/
@Data
@Accessors(chain = true)
public class HotakeMeetingCalendarDataDto {
/** 会议日期 */
@ApiModelProperty("会议日期(年月日)")
@Excel(name = "会议日期")
private String meetingDate;
@ApiModelProperty("是否有会议(0:无,1:有会议)")
private String meetingFlag;
@ApiModelProperty("当前日期对应的会议数量")
private Integer nums;
}

View File

@@ -0,0 +1,27 @@
package com.vetti.hotake.domain.dto.VcDto;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.experimental.Accessors;
import java.util.List;
/**
* 简历-优化器-行动计划 -返回对象
*
* @author wangxiangshun
* @date 2025-11-30
*/
@Data
@Accessors(chain = true)
public class CvActionPlanDto {
@ApiModelProperty("立即修正项,优先级最高 ")
private List<String> immediateFixes;
@ApiModelProperty("内容改进项,中期执行 ")
private List<String> contentImprovements;
@ApiModelProperty("战略性提升项,长期优化 ")
private List<String> strategicEnhancements;
}

View File

@@ -0,0 +1,33 @@
package com.vetti.hotake.domain.dto.VcDto;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.experimental.Accessors;
import java.util.List;
/**
* 简历-优化器-分析总结 -返回对象
*
* @author wangxiangshun
* @date 2025-11-30
*/
@Data
@Accessors(chain = true)
public class CvAnalysisSummaryDto {
@ApiModelProperty("简历综合评分 (0-100) ")
private String overallScore;
@ApiModelProperty("主要优势列表,突出候选人核心竞争力 ")
private List<String> mainStrengths;
@ApiModelProperty("关键问题列表,需要优先解决的问题 ")
private List<String> criticalIssues;
@ApiModelProperty("改进潜力high/medium/low")
private String improvementPotential;
}

View File

@@ -0,0 +1,26 @@
package com.vetti.hotake.domain.dto.VcDto;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.experimental.Accessors;
/**
* 简历-优化器-职业发展逻辑 -返回对象
*
* @author wangxiangshun
* @date 2025-11-30
*/
@Data
@Accessors(chain = true)
public class CvCareerProgressionDto {
@ApiModelProperty("问题")
private String issue;
@ApiModelProperty("详细信息")
private String details;
@ApiModelProperty("建议")
private String suggestion;
}

View File

@@ -0,0 +1,29 @@
package com.vetti.hotake.domain.dto.VcDto;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.experimental.Accessors;
/**
* 简历-优化器-预期改进效果 -返回对象
*
* @author wangxiangshun
* @date 2025-11-30
*/
@Data
@Accessors(chain = true)
public class CvEstimatedImprovementDto {
@ApiModelProperty("当前ATS系统评分 (0-100) ")
private String currentAtsScore;
@ApiModelProperty("优化后预期ATS评分 ")
private String potentialAtsScore;
@ApiModelProperty("对招聘官的吸引力提升程度")
private String recruiterAppeal;
@ApiModelProperty("获得面试机会的概率提升")
private String interviewProbability;
}

View File

@@ -0,0 +1,28 @@
package com.vetti.hotake.domain.dto.VcDto;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.experimental.Accessors;
import java.util.List;
/**
* 简历-优化器-格式错误 -返回对象
*
* @author wangxiangshun
* @date 2025-11-30
*/
@Data
@Accessors(chain = true)
public class CvFormattingIssuesDto {
@ApiModelProperty("问题")
private String issue;
@ApiModelProperty("修正建议")
private String suggestion;
@ApiModelProperty("错误位置")
private List<String> locations;
}

View File

@@ -0,0 +1,30 @@
package com.vetti.hotake.domain.dto.VcDto;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.experimental.Accessors;
/**
* 简历-优化器-语法错误 -返回对象
*
* @author wangxiangshun
* @date 2025-11-30
*/
@Data
@Accessors(chain = true)
public class CvGrammarErrorsDto {
@ApiModelProperty("原始数据")
private String original;
@ApiModelProperty("修正数据")
private String corrected;
@ApiModelProperty("错误位置")
private String location;
@ApiModelProperty("解释说明")
private String explanation;
}

View File

@@ -0,0 +1,27 @@
package com.vetti.hotake.domain.dto.VcDto;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.experimental.Accessors;
import java.util.List;
/**
* 简历-优化器-关键词优化 -返回对象
*
* @author wangxiangshun
* @date 2025-11-30
*/
@Data
@Accessors(chain = true)
public class CvKeywordOptimizationDto {
@ApiModelProperty("缺少关键字")
private List<String> missingKeywords;
@ApiModelProperty("行业术语")
private List<String> industryTerms;
@ApiModelProperty("ats关键字")
private List<String> atsKeywords;
}

View File

@@ -0,0 +1,27 @@
package com.vetti.hotake.domain.dto.VcDto;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.experimental.Accessors;
import java.util.List;
/**
* 简历-优化器-逻辑修正 -返回对象
*
* @author wangxiangshun
* @date 2025-11-30
*/
@Data
@Accessors(chain = true)
public class CvLogicCorrectionsDto {
@ApiModelProperty("时间线冲突列表数据集合")
private List<CvTimelineConflictsDto> timelineConflicts;
@ApiModelProperty("职业发展逻辑数据集合")
private List<CvCareerProgressionDto> careerProgressionDtos;
@ApiModelProperty("技能经验匹配数据集合")
private List<CvSkillExperienceMismatchDto> skillExperienceMismatchDtos;
}

View File

@@ -0,0 +1,31 @@
package com.vetti.hotake.domain.dto.VcDto;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.experimental.Accessors;
import java.util.List;
/**
* 简历-优化器-优化建议 -返回对象
*
* @author wangxiangshun
* @date 2025-11-30
*/
@Data
@Accessors(chain = true)
public class CvOptimizationSuggestionsDto {
@ApiModelProperty("个人简介优化")
private CvPersonalSummaryDto personalSummary;
@ApiModelProperty("工作经历优化建议")
private List<CvWorkExperienceDto> workExperienceDtoList;
@ApiModelProperty("技能部分优化")
private CvSkillsSectionDto skillsSection;
@ApiModelProperty("关键词优化")
private CvKeywordOptimizationDto keywordOptimization;
}

View File

@@ -0,0 +1,28 @@
package com.vetti.hotake.domain.dto.VcDto;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.experimental.Accessors;
import java.util.List;
/**
* 简历-优化器-个人总结 -返回对象
*
* @author wangxiangshun
* @date 2025-11-30
*/
@Data
@Accessors(chain = true)
public class CvPersonalSummaryDto {
@ApiModelProperty("当前问题列表")
private List<String> currentIssues;
@ApiModelProperty("优化后的个人简介")
private String optimizedVersion;
@ApiModelProperty("关键改进点")
private List<String> keyImprovements;
}

View File

@@ -0,0 +1,25 @@
package com.vetti.hotake.domain.dto.VcDto;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.experimental.Accessors;
/**
* 简历-优化器-技能经验匹配 -返回对象
*
* @author wangxiangshun
* @date 2025-11-30
*/
@Data
@Accessors(chain = true)
public class CvSkillExperienceMismatchDto {
@ApiModelProperty("技能")
private String skill;
@ApiModelProperty("问题")
private String issue;
@ApiModelProperty("建议")
private String suggestion;
}

View File

@@ -0,0 +1,26 @@
package com.vetti.hotake.domain.dto.VcDto;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.experimental.Accessors;
import java.util.List;
/**
* 简历-优化器-技能部分优化 -返回对象
*
* @author wangxiangshun
* @date 2025-11-30
*/
@Data
@Accessors(chain = true)
public class CvSkillsSectionDto {
@ApiModelProperty("当前问题")
private List<String> currentIssues;
@ApiModelProperty("建议结构")
private CvSuggestedStructureDto suggestedStructureDto;
}

View File

@@ -0,0 +1,25 @@
package com.vetti.hotake.domain.dto.VcDto;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.experimental.Accessors;
/**
* 简历-优化器-识别拼写错误 -返回对象
*
* @author wangxiangshun
* @date 2025-11-30
*/
@Data
@Accessors(chain = true)
public class CvSpellingErrorsDto {
@ApiModelProperty("原始数据")
private String original;
@ApiModelProperty("修正数据")
private String corrected;
@ApiModelProperty("错误位置")
private String location;
}

View File

@@ -0,0 +1,27 @@
package com.vetti.hotake.domain.dto.VcDto;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.experimental.Accessors;
import java.util.List;
/**
* 简历-优化器-建议结构 -返回对象
*
* @author wangxiangshun
* @date 2025-11-30
*/
@Data
@Accessors(chain = true)
public class CvSuggestedStructureDto {
@ApiModelProperty("核心技能")
private List<String> coreSkills;
@ApiModelProperty("技术技能")
private List<String> technicalSkills;
@ApiModelProperty("认证")
private List<String> certifications;
}

View File

@@ -0,0 +1,27 @@
package com.vetti.hotake.domain.dto.VcDto;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.experimental.Accessors;
import java.util.List;
/**
* 简历-优化器-文本修正(文字、语法等错误) -返回对象
*
* @author wangxiangshun
* @date 2025-11-30
*/
@Data
@Accessors(chain = true)
public class CvTextCorrectionsDto {
@ApiModelProperty("识别拼写错误数据集合")
private List<CvSpellingErrorsDto> spellingErrors;
@ApiModelProperty("语法错误数据集合")
private List<CvGrammarErrorsDto> grammarErrors;
@ApiModelProperty("格式错误数据集合")
private List<CvFormattingIssuesDto> formattingIssues;
}

View File

@@ -0,0 +1,25 @@
package com.vetti.hotake.domain.dto.VcDto;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.experimental.Accessors;
/**
* 简历-优化器-检查时间线冲突 -返回对象
*
* @author wangxiangshun
* @date 2025-11-30
*/
@Data
@Accessors(chain = true)
public class CvTimelineConflictsDto {
@ApiModelProperty("冲突类型 ")
private String conflict;
@ApiModelProperty("冲突详情 ")
private String details;
@ApiModelProperty("解决建议 ")
private String suggestion;
}

View File

@@ -0,0 +1,30 @@
package com.vetti.hotake.domain.dto.VcDto;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.experimental.Accessors;
import java.util.List;
/**
* 简历-优化器-工作经验 -返回对象
*
* @author wangxiangshun
* @date 2025-11-30
*/
@Data
@Accessors(chain = true)
public class CvWorkExperienceDto {
@ApiModelProperty("职位名称")
private String position;
@ApiModelProperty("当前描述")
private String currentDescription;
@ApiModelProperty("优化后描述")
private String optimizedDescription;
@ApiModelProperty("改进要点")
private List<String> improvements;
}

View File

@@ -0,0 +1,20 @@
package com.vetti.hotake.domain.dto.roleDto;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.experimental.Accessors;
/**
* 岗位-职责信息 返回信息
*
* @author wangxiangshun
* @date 2025-11-30
*/
@Data
@Accessors(chain = true)
public class ResponsibilitiesDto {
/** 职责 */
@ApiModelProperty("职责")
private String responsibilities;
}

View File

@@ -0,0 +1,32 @@
package com.vetti.hotake.domain.vo;
import com.vetti.common.annotation.Excel;
import com.vetti.hotake.domain.HotakeInitScreQuestionsReplyRecordInfo;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.experimental.Accessors;
import java.util.List;
/**
* 岗位-初步筛选问题淘汰评分 对象
*
* @author wangxiangshun
* @date 2025-12-14
*/
@Data
@Accessors(chain = true)
public class HotakeInitialQuestionEliminationScoreVo {
@ApiModelProperty("岗位名称")
private String roleName;
/** 岗位ID */
@ApiModelProperty("岗位ID")
@Excel(name = "岗位ID")
private Long roleId;
@ApiModelProperty("初步筛选问题回答记录数据集合")
private List<HotakeInitScreQuestionsReplyRecordInfo> initScreQuestionsReplyRecordInfoList;
}

View File

@@ -0,0 +1,25 @@
package com.vetti.hotake.domain.vo;
import com.vetti.hotake.domain.HotakeInitialScreeningQuestionsInfo;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.experimental.Accessors;
import java.util.List;
/**
* 岗位-初筛问题 对象
*
* @author wangxiangshun
* @date 2025-12-14
*/
@Data
@Accessors(chain = true)
public class HotakeInitialScreeningQuestionsInfoVo {
@ApiModelProperty("岗位ID")
private Long roleId;
@ApiModelProperty("初步筛选问题数据集合")
private List<HotakeInitialScreeningQuestionsInfo> questionsInfoList;
}

View File

@@ -0,0 +1,19 @@
package com.vetti.hotake.domain.vo;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.experimental.Accessors;
/**
* 岗位-初筛问题 对象
*
* @author wangxiangshun
* @date 2025-12-14
*/
@Data
@Accessors(chain = true)
public class HotakeInitialScreeningQuestionsVo {
@ApiModelProperty("岗位ID")
private Long roleId;
}

View File

@@ -0,0 +1,28 @@
package com.vetti.hotake.domain.vo;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.experimental.Accessors;
/**
* 岗位-职位描述生成器 对象
*
* @author wangxiangshun
* @date 2025-12-14
*/
@Data
@Accessors(chain = true)
public class HotakeJobDescriptionGeneratorVo {
@ApiModelProperty("岗位ID")
private Long roleId;
// @ApiModelProperty("岗位名")
// private String jobTitle;
//
// @ApiModelProperty("行业领域-岗位类型")
// private String industry;
//
// @ApiModelProperty("关键技能或经验要求")
// private String coreRequirements;
}

View File

@@ -0,0 +1,38 @@
package com.vetti.hotake.domain.vo;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.experimental.Accessors;
/**
* 岗位-简历岗位匹配度评分 对象
*
* @author wangxiangshun
* @date 2025-12-14
*/
@Data
@Accessors(chain = true)
public class HotakeResumeJobMatchingScoreVo {
@ApiModelProperty("岗位名")
private String jobTitle;
@ApiModelProperty("岗位描述")
private String jobDescription;
@ApiModelProperty("主要职责")
private String keyResponsibilities;
@ApiModelProperty("任职要求")
private String jobRequirements;
@ApiModelProperty("个人信息")
private String personalInformation;
@ApiModelProperty("工作经历")
private String workHistory;
@ApiModelProperty("项目经验")
private String projectExperience;
@ApiModelProperty("技能清单")
private String skillsList;
@ApiModelProperty("教育背景")
private String educationalBackground;
@ApiModelProperty("其他相关信息")
private String otherRelevantInformation;
}

View File

@@ -51,6 +51,15 @@ public interface HotakeInitialScreeningQuestionsInfoMapper
*/
public int deleteHotakeInitialScreeningQuestionsInfoById(Long id);
/**
* 删除初步筛选问题信息
*
* @param roleId 岗位ID
* @return 结果
*/
public int deleteHotakeInitialScreeningQuestionsInfoByRoleId(Long roleId);
/**
* 批量删除初步筛选问题信息
*

View File

@@ -0,0 +1,52 @@
package com.vetti.hotake.service;
import com.vetti.hotake.domain.HotakeAiInterviewQuestionsInfo;
import com.vetti.hotake.domain.HotakeInitialScreeningQuestionsInfo;
import com.vetti.hotake.domain.dto.HotakeCvOptimizeDto;
import com.vetti.hotake.domain.dto.HotakeInitialQuestionEliminationScoreDto;
import com.vetti.hotake.domain.dto.HotakeJobDescriptionGeneratorDto;
import com.vetti.hotake.domain.vo.HotakeInitialQuestionEliminationScoreVo;
import com.vetti.hotake.domain.vo.HotakeInitialScreeningQuestionsVo;
import com.vetti.hotake.domain.vo.HotakeResumeJobMatchingScoreVo;
import java.util.List;
/**
* AI共通工具信息Service接口
*
* @author wangxiangshun
* @date 2025-12-14
*/
public interface IHotakeAiCommonToolsService {
/**
* 职位描述生成器
**/
public HotakeJobDescriptionGeneratorDto getJobDescriptionGenerator(Long roleId);
/**
* 初筛问题生成
**/
public List<HotakeInitialScreeningQuestionsInfo> getInitialScreeningQuestionsGenerator(HotakeInitialScreeningQuestionsVo questionsVo);
/**
* 简历岗位匹配度评分
**/
public String getResumeJobMatchingScore(HotakeResumeJobMatchingScoreVo scoreVo);
/**
* 简历分析优化器
**/
public HotakeCvOptimizeDto getResumeAnalysisOptimizer(String cvConnect);
/**
* 初步筛选问题淘汰评分
**/
public HotakeInitialQuestionEliminationScoreDto getInitialQuestionEliminationScore(HotakeInitialQuestionEliminationScoreVo questionEliminationScoreVo);
}

View File

@@ -2,6 +2,7 @@ package com.vetti.hotake.service;
import java.util.List;
import com.vetti.hotake.domain.HotakeInitialScreeningQuestionsInfo;
import com.vetti.hotake.domain.vo.HotakeInitialScreeningQuestionsInfoVo;
/**
* 初步筛选问题信息Service接口
@@ -62,9 +63,9 @@ public interface IHotakeInitialScreeningQuestionsInfoService
/**
* 批量新增初步筛选问题信息
*
* @param hotakeInitialScreeningQuestionsInfoList 初步筛选问题信息列表
* @param questionsInfoVo 初步筛选问题数据对象
* @return 结果
*/
public int batchInsertHotakeInitialScreeningQuestionsInfo(List<HotakeInitialScreeningQuestionsInfo> hotakeInitialScreeningQuestionsInfoList);
public void batchInsertHotakeInitialScreeningQuestionsInfo(HotakeInitialScreeningQuestionsInfoVo questionsInfoVo);
}

View File

@@ -2,6 +2,7 @@ package com.vetti.hotake.service;
import java.util.List;
import com.vetti.hotake.domain.HotakeMeetingCalendarInfo;
import com.vetti.hotake.domain.dto.HotakeMeetingCalendarDataDto;
import com.vetti.hotake.domain.vo.HotakeMeetingCalendarVo;
/**
@@ -28,6 +29,16 @@ public interface IHotakeMeetingCalendarInfoService
*/
public List<HotakeMeetingCalendarInfo> selectHotakeMeetingCalendarInfoList(HotakeMeetingCalendarInfo hotakeMeetingCalendarInfo);
/**
* 查询会议日历记录主列表
*
* @param hotakeMeetingCalendarInfo 会议日历记录主
* @return 会议日历记录主集合
*/
public List<HotakeMeetingCalendarInfo> selectHotakeMeetingCalendarInfoCandidateList(HotakeMeetingCalendarInfo hotakeMeetingCalendarInfo);
/**
* 新增会议日历记录主
*
@@ -78,4 +89,12 @@ public interface IHotakeMeetingCalendarInfoService
public void saveHotakeMeetingCalendarInfo(HotakeMeetingCalendarVo calendarVo);
/**
* 查询当前候选者会议日历数据
*
* @return 查询当前候选者会议日历数据
*/
public List<HotakeMeetingCalendarDataDto> selectHotakeMeetingCalendarDataDtoList();
}

View File

@@ -14,8 +14,10 @@ import com.vetti.common.utils.readFile.FileContentUtil;
import com.vetti.hotake.domain.HotakeCvInfo;
import com.vetti.hotake.domain.HotakeProblemBaseInfo;
import com.vetti.hotake.domain.dto.HotakeCvInfoDto;
import com.vetti.hotake.domain.dto.HotakeCvOptimizeDto;
import com.vetti.hotake.domain.dto.VcDto.*;
import com.vetti.hotake.mapper.HotakeCvInfoMapper;
import com.vetti.hotake.service.IHotakeAiCommonToolsService;
import com.vetti.hotake.service.IHotakeCvInfoService;
import com.vetti.hotake.service.IHotakeProblemBaseInfoService;
import io.minio.GetObjectArgs;
@@ -60,6 +62,9 @@ public class HotakeCvInfoServiceImpl extends BaseServiceImpl implements IHotakeC
@Autowired
private IHotakeProblemBaseInfoService hotakeProblemBaseInfoService;
@Autowired
private IHotakeAiCommonToolsService aiCommonToolsService;
/**
* 查询简历信息
*
@@ -74,7 +79,23 @@ public class HotakeCvInfoServiceImpl extends BaseServiceImpl implements IHotakeC
HotakeCvInfoDto cvInfoDto = JSONUtil.toBean(cvInfo.getCvTemplateJson(),HotakeCvInfoDto.class);
cvInfo.setCvInfoDto(cvInfoDto);
}
if(StrUtil.isNotEmpty(cvInfo.getCvOptimizeJson())){
//解析优化简历
HotakeCvOptimizeDto cvOptimizeDto = JSONUtil.toBean(cvInfo.getCvOptimizeJson(),HotakeCvOptimizeDto.class);
if(cvOptimizeDto != null){
cvInfo.setCvOptimizeDto(cvOptimizeDto);
if(cvOptimizeDto.getTextCorrections() != null && CollectionUtil.isNotEmpty(cvOptimizeDto.getTextCorrections().getFormattingIssues())){
cvInfo.setTextCorrectionsNums(cvOptimizeDto.getTextCorrections().getFormattingIssues().size());
}else{
cvInfo.setTextCorrectionsNums(0);
}
if(cvOptimizeDto.getLogicCorrections() != null && CollectionUtil.isNotEmpty(cvOptimizeDto.getLogicCorrections().getCareerProgressionDtos())){
cvInfo.setLogicCorrectionsNum(cvOptimizeDto.getTextCorrections().getFormattingIssues().size());
}else{
cvInfo.setLogicCorrectionsNum(0);
}
}
}
HotakeProblemBaseInfo query = new HotakeProblemBaseInfo();
query.setCvId(id);
List<HotakeProblemBaseInfo> problemBaseInfoList = hotakeProblemBaseInfoService.selectHotakeProblemBaseInfoList(query);
@@ -264,25 +285,42 @@ public class HotakeCvInfoServiceImpl extends BaseServiceImpl implements IHotakeC
//对简历数据进行处理生成相应的题库数据
HotakeProblemBaseInfo problemBaseInfo = handleHotakeCvInfo(cvInfoDto,hotakeCvInfo.getId());
cvInfo.setProblemBaseInfo(problemBaseInfo);
//生成对应的简历评分
String resultMsg = handleHotakeCvInfoScore(cvInfoDto);
cvInfo.setCvScore(resultMsg);
cvInfo.setExperience(cvInfoDto.getExperienceYear());
//分数解析
String[] strs = resultMsg.split("\n");
if(strs != null && strs.length > 0){
String score = strs[0].replaceAll("Score:","").trim();
String[] scores = score.split("/");
if(scores != null && scores.length > 0){
cvInfo.setAiMatchScore(scores[0]);
try{
cvInfo.setAiMatchScorePercentage(String.valueOf(new BigDecimal(scores[0]).
divide(new BigDecimal(5)).setScale(2,4)));
}catch (Exception e){e.printStackTrace();}
//解析优化简历
HotakeCvOptimizeDto cvOptimizeDto = aiCommonToolsService.getResumeAnalysisOptimizer(contents);
if(cvOptimizeDto != null){
cvInfo.setCvOptimizeJson(JSONUtil.toJsonStr(cvOptimizeDto));
if(cvOptimizeDto.getTextCorrections() != null && CollectionUtil.isNotEmpty(cvOptimizeDto.getTextCorrections().getFormattingIssues())){
cvInfo.setTextCorrectionsNums(cvOptimizeDto.getTextCorrections().getFormattingIssues().size());
}else{
cvInfo.setTextCorrectionsNums(0);
}
if(cvOptimizeDto.getLogicCorrections() != null && CollectionUtil.isNotEmpty(cvOptimizeDto.getLogicCorrections().getCareerProgressionDtos())){
cvInfo.setLogicCorrectionsNum(cvOptimizeDto.getTextCorrections().getFormattingIssues().size());
}else{
cvInfo.setLogicCorrectionsNum(0);
}
cvInfo.setCvOptimizeDto(cvOptimizeDto);
}
// //生成对应的简历评分
// String resultMsg = handleHotakeCvInfoScore(cvInfoDto);
// cvInfo.setCvScore(resultMsg);
cvInfo.setExperience(cvInfoDto.getExperienceYear());
//分数解析
// String[] strs = resultMsg.split("\n");
// if(strs != null && strs.length > 0){
// String score = strs[0].replaceAll("Score:","").trim();
// String[] scores = score.split("/");
// if(scores != null && scores.length > 0){
// cvInfo.setAiMatchScore(scores[0]);
// try{
// cvInfo.setAiMatchScorePercentage(String.valueOf(new BigDecimal(scores[0]).
// divide(new BigDecimal(5)).setScale(2,4)));
// }catch (Exception e){e.printStackTrace();}
//
// }
// }
cvInfo.setCvTemplateJson(JSONUtil.toJsonStr(cvInfoDto));
fill(FillTypeEnum.UPDATE.getCode(), cvInfo);
hotakeCvInfoMapper.updateHotakeCvInfo(cvInfo);

View File

@@ -22,11 +22,14 @@ import com.vetti.common.utils.SecurityUtils;
import com.vetti.common.utils.readFile.FileContentUtil;
import com.vetti.hotake.domain.*;
import com.vetti.hotake.domain.dto.HotakeCvInfoDto;
import com.vetti.hotake.domain.dto.HotakeInitialQuestionEliminationScoreDto;
import com.vetti.hotake.domain.dto.VcDto.*;
import com.vetti.hotake.domain.vo.HotakeInitScreQuestionsReplyRecordInfoVo;
import com.vetti.hotake.domain.vo.HotakeInitialQuestionEliminationScoreVo;
import com.vetti.hotake.mapper.HotakeCvInfoMapper;
import com.vetti.hotake.mapper.HotakeRolesApplyInfoMapper;
import com.vetti.hotake.mapper.HotakeRolesInfoMapper;
import com.vetti.hotake.service.IHotakeAiCommonToolsService;
import io.minio.GetObjectArgs;
import io.minio.MinioClient;
import lombok.extern.slf4j.Slf4j;
@@ -60,6 +63,9 @@ public class HotakeInitScreQuestionsReplyRecordInfoServiceImpl extends BaseServi
@Autowired
private HotakeCvInfoMapper hotakeCvInfoMapper;
@Autowired
private IHotakeAiCommonToolsService aiCommonToolsService;
@Autowired
private MinioClient minioClient;
@@ -180,62 +186,70 @@ public class HotakeInitScreQuestionsReplyRecordInfoServiceImpl extends BaseServi
HotakeRolesApplyInfo applyInfo = hotakeRolesApplyInfoMapper.selectHotakeRolesApplyInfoById(initScreQuestionsReplyRecordInfoVo.getRoleApplyId());
if (applyInfo != null) {
HotakeRolesInfo rolesInf = hotakeRolesInfoMapper.selectHotakeRolesInfoById(initScreQuestionsReplyRecordInfoVo.getRoleId());
//获取初步筛选问题评分
HotakeInitialQuestionEliminationScoreVo eliminationScoreVo = new HotakeInitialQuestionEliminationScoreVo();
eliminationScoreVo.setRoleId(rolesInf.getId());
eliminationScoreVo.setRoleName(rolesInf.getRoleName());
eliminationScoreVo.setInitScreQuestionsReplyRecordInfoList(initScreQuestionsReplyRecordInfoVo.getInitScreQuestionsReplyRecordInfoList());
HotakeInitialQuestionEliminationScoreDto eliminationScoreDto = aiCommonToolsService.getInitialQuestionEliminationScore(eliminationScoreVo);
//查询候选人的当前最新简历信息
HotakeCvInfo queryCv = new HotakeCvInfo();
queryCv.setUserId(SecurityUtils.getUserId());
queryCv.setCvFileType("cv");
List<HotakeCvInfo> cvInfos = hotakeCvInfoMapper.selectHotakeCvInfoList(queryCv);
HotakeCvInfo cvInfo = null;
if(CollectionUtil.isNotEmpty(cvInfos)) {
cvInfo = cvInfos.get(0);
}
//解析简历内容以及获取简历对应的评分数据
log.info("开始处理简历");
try {
InputStream inputStream = minioClient.getObject(
GetObjectArgs.builder()
.bucket(MinioBucketNameEnum.CV.getCode())
.object(applyInfo.getCvFile())
.build());
String contents = FileContentUtil.readFileContent(inputStream, applyInfo.getCvFileSuffix());
log.info("简历信息:{}", contents);
//验证文件内容是否改变,如果未改变不进行模型解析直接返回原有结果
String md5Hash = MD5.create().digestHex16(contents);
String scoreStr = "";
if (StrUtil.isNotEmpty(md5Hash) && cvInfo != null && md5Hash.equals(cvInfo.getCvMd5())) {
//直接获取简历表中的简历解析的详细数据
applyInfo.setCvScore(cvInfo.getCvScore());
applyInfo.setCvTemplateJson(cvInfo.getCvTemplateJson());
fill(FillTypeEnum.UPDATE.getCode(), applyInfo);
applyInfo.setCvMd5(md5Hash);
applyInfo.setExperience(cvInfo.getExperience());
scoreStr = cvInfo.getCvScore();
}else{
//生成简历模版数据信息
HotakeCvInfoDto cvInfoDto = handleAnalysisCvInfo(contents);
//生成对应的简历评分
String resultMsg = handleHotakeCvInfoScore(cvInfoDto);
applyInfo.setCvScore(resultMsg);
applyInfo.setCvTemplateJson(JSONUtil.toJsonStr(cvInfoDto));
fill(FillTypeEnum.UPDATE.getCode(), cvInfo);
applyInfo.setCvMd5(md5Hash);
applyInfo.setExperience(cvInfoDto.getExperienceYear());
scoreStr = resultMsg;
}
// HotakeCvInfo queryCv = new HotakeCvInfo();
// queryCv.setUserId(SecurityUtils.getUserId());
// queryCv.setCvFileType("cv");
// List<HotakeCvInfo> cvInfos = hotakeCvInfoMapper.selectHotakeCvInfoList(queryCv);
// HotakeCvInfo cvInfo = null;
// if(CollectionUtil.isNotEmpty(cvInfos)) {
// cvInfo = cvInfos.get(0);
// }
// //解析简历内容以及获取简历对应的评分数据
// log.info("开始处理简历");
// try {
// InputStream inputStream = minioClient.getObject(
// GetObjectArgs.builder()
// .bucket(MinioBucketNameEnum.CV.getCode())
// .object(applyInfo.getCvFile())
// .build());
// String contents = FileContentUtil.readFileContent(inputStream, applyInfo.getCvFileSuffix());
// log.info("简历信息:{}", contents);
// //验证文件内容是否改变,如果未改变不进行模型解析直接返回原有结果
// String md5Hash = MD5.create().digestHex16(contents);
// String scoreStr = "";
// if (StrUtil.isNotEmpty(md5Hash) && cvInfo != null && md5Hash.equals(cvInfo.getCvMd5())) {
// //直接获取简历表中的简历解析的详细数据
// applyInfo.setCvScore(cvInfo.getCvScore());
// applyInfo.setCvTemplateJson(cvInfo.getCvTemplateJson());
// fill(FillTypeEnum.UPDATE.getCode(), applyInfo);
// applyInfo.setCvMd5(md5Hash);
// applyInfo.setExperience(cvInfo.getExperience());
// scoreStr = cvInfo.getCvScore();
// }else{
// //生成简历模版数据信息
// HotakeCvInfoDto cvInfoDto = handleAnalysisCvInfo(contents);
// //生成对应的简历评分
// String resultMsg = handleHotakeCvInfoScore(cvInfoDto);
// applyInfo.setCvScore(resultMsg);
// applyInfo.setCvTemplateJson(JSONUtil.toJsonStr(cvInfoDto));
// fill(FillTypeEnum.UPDATE.getCode(), cvInfo);
// applyInfo.setCvMd5(md5Hash);
// applyInfo.setExperience(cvInfoDto.getExperienceYear());
// scoreStr = resultMsg;
// }
//更新岗位申请数据记录--根据评分进行计算
//分数解析
String[] strs = scoreStr.split("\n");
if(strs != null && strs.length > 0){
String score = strs[0].replaceAll("Score:","").trim();
String[] scores = score.split("/");
if(scores != null && scores.length > 0){
applyInfo.setAiMatchScore(scores[0]);
// String[] strs = scoreStr.split("\n");
// if(strs != null && strs.length > 0){
// String score = strs[0].replaceAll("Score:","").trim();
// String[] scores = score.split("/");
// if(scores != null && scores.length > 0){
// applyInfo.setAiMatchScore(scores[0]);
try{
applyInfo.setAiMatchScorePercentage(new BigDecimal(scores[0]).
divide(new BigDecimal(5)).setScale(2,4));
applyInfo.setAiMatchScorePercentage(new BigDecimal(eliminationScoreDto.getScore()).
divide(new BigDecimal(100)).setScale(2,4));
}catch (Exception e){e.printStackTrace();}
}
}
// }
// }
if(applyInfo.getAiMatchScorePercentage() != null){
if(applyInfo.getAiMatchScorePercentage().compareTo(new BigDecimal(0.85)) >= 0){
applyInfo.setCandidateStatus(CandidateStatusEnum.HOT.getCode());
@@ -252,9 +266,9 @@ public class HotakeInitScreQuestionsReplyRecordInfoServiceImpl extends BaseServi
applyInfo.setRecruiterId(rolesInf.getRecruiterId());
applyInfo.setStage(StageEnum.APPLIED.getCode());
hotakeRolesApplyInfoMapper.updateHotakeRolesApplyInfo(applyInfo);
} catch (Exception e) {
e.printStackTrace();
}
// } catch (Exception e) {
// e.printStackTrace();
// }
return 0;
}
return 0;

View File

@@ -8,6 +8,7 @@ import com.vetti.common.enums.FillTypeEnum;
import com.vetti.common.utils.SecurityUtils;
import com.vetti.hotake.domain.HotakeInitialScreeningQuestionsInfo;
import com.vetti.hotake.domain.dto.AnswerOptionsDto;
import com.vetti.hotake.domain.vo.HotakeInitialScreeningQuestionsInfoVo;
import com.vetti.hotake.mapper.HotakeInitialScreeningQuestionsInfoMapper;
import com.vetti.hotake.service.IHotakeInitialScreeningQuestionsInfoService;
import org.springframework.beans.factory.annotation.Autowired;
@@ -128,12 +129,26 @@ public class HotakeInitialScreeningQuestionsInfoServiceImpl extends BaseServiceI
/**
* 批量新增初步筛选问题信息
*
* @param hotakeInitialScreeningQuestionsInfoList 初步筛选问题信息列表
* @param questionsInfoVo 初步筛选问题信息
* @return 结果
*/
@Transactional(rollbackFor=Exception.class)
@Override
public int batchInsertHotakeInitialScreeningQuestionsInfo(List<HotakeInitialScreeningQuestionsInfo> hotakeInitialScreeningQuestionsInfoList){
return hotakeInitialScreeningQuestionsInfoMapper.batchInsertHotakeInitialScreeningQuestionsInfo(hotakeInitialScreeningQuestionsInfoList);
public void batchInsertHotakeInitialScreeningQuestionsInfo(HotakeInitialScreeningQuestionsInfoVo questionsInfoVo){
//先删除之前的初步筛选问题数据
// hotakeInitialScreeningQuestionsInfoMapper.deleteHotakeInitialScreeningQuestionsInfoByRoleId(questionsInfoVo.getRoleId());
if(CollectionUtil.isNotEmpty(questionsInfoVo.getQuestionsInfoList())){
for(HotakeInitialScreeningQuestionsInfo questionsInfo : questionsInfoVo.getQuestionsInfoList()){
fill(FillTypeEnum.INSERT.getCode(), questionsInfo);
questionsInfo.setRecruiterId(SecurityUtils.getUserId());
if(CollectionUtil.isNotEmpty(questionsInfo.getAnswerOptionsList())){
questionsInfo.setAnswerOptions(JSONUtil.toJsonStr(questionsInfo.getAnswerOptionsList()));
}else {
questionsInfo.setAnswerOptions("");
}
questionsInfo.setRoleId(questionsInfoVo.getRoleId());
}
hotakeInitialScreeningQuestionsInfoMapper.batchInsertHotakeInitialScreeningQuestionsInfo(questionsInfoVo.getQuestionsInfoList());
}
}
}

View File

@@ -1,5 +1,7 @@
package com.vetti.hotake.service.impl;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
@@ -10,9 +12,11 @@ import com.vetti.common.core.service.BaseServiceImpl;
import com.vetti.common.enums.FillTypeEnum;
import com.vetti.common.enums.MeetingCalendarStatus;
import com.vetti.common.enums.StageEnum;
import com.vetti.common.utils.SecurityUtils;
import com.vetti.hotake.domain.HotakeMeetingCalendarDetail;
import com.vetti.hotake.domain.HotakeRolesApplyInfo;
import com.vetti.hotake.domain.HotakeRolesInfo;
import com.vetti.hotake.domain.dto.HotakeMeetingCalendarDataDto;
import com.vetti.hotake.domain.vo.HotakeMeetingCalendarInfoVo;
import com.vetti.hotake.domain.vo.HotakeMeetingCalendarVo;
import com.vetti.hotake.mapper.HotakeMeetingCalendarDetailMapper;
@@ -160,6 +164,69 @@ public class HotakeMeetingCalendarInfoServiceImpl extends BaseServiceImpl implem
return calendarInfos;
}
/**
* 查询候选者相关的会议记录数据
* @param hotakeMeetingCalendarInfo 会议日历记录主
* @return
*/
@Override
public List<HotakeMeetingCalendarInfo> selectHotakeMeetingCalendarInfoCandidateList(HotakeMeetingCalendarInfo hotakeMeetingCalendarInfo) {
//根据候选者查询会议明细数据
HotakeMeetingCalendarDetail queryCalendarDetail = new HotakeMeetingCalendarDetail();
queryCalendarDetail.setCandidateId(SecurityUtils.getUserId());
List<HotakeMeetingCalendarDetail> calendarDetailList = hotakeMeetingCalendarDetailMapper.selectHotakeMeetingCalendarDetailList(queryCalendarDetail);
if(CollectionUtil.isNotEmpty(calendarDetailList)) {
//查询明细中的会议主表ID
List<Long> meetingIds = calendarDetailList.stream().map(HotakeMeetingCalendarDetail::getMeetingId).collect(Collectors.toList());
hotakeMeetingCalendarInfo.setMeetingIds(meetingIds);
List<HotakeMeetingCalendarInfo> calendarInfos = hotakeMeetingCalendarInfoMapper.selectHotakeMeetingCalendarInfoList(hotakeMeetingCalendarInfo);
if (CollectionUtil.isNotEmpty(calendarInfos)) {
//查询岗位数据
HotakeRolesInfo query = new HotakeRolesInfo();
List<HotakeRolesInfo> rolesInfoList = hotakeRolesInfoMapper.selectHotakeRolesInfoList(query);
//查询岗位数据
HotakeRolesApplyInfo queryApply = new HotakeRolesApplyInfo();
List<HotakeRolesApplyInfo> applyInfoList = hotakeRolesApplyInfoMapper.selectHotakeRolesApplyInfoList(queryApply);
//获取对应的参会人员数据
HotakeMeetingCalendarDetail queryDetail = new HotakeMeetingCalendarDetail();
List<HotakeMeetingCalendarDetail> detailList = calendarDetailService.selectHotakeMeetingCalendarDetailList(queryDetail);
if (CollectionUtil.isNotEmpty(detailList)) {
Map<Long, List<HotakeMeetingCalendarDetail>> mapDetailList = detailList.stream().collect(Collectors.groupingBy(HotakeMeetingCalendarDetail::getMeetingId));
SysUser queryUser = new SysUser();
List<SysUser> userList = userService.selectUserList(queryUser);
for (HotakeMeetingCalendarInfo calendarInfo : calendarInfos) {
List<HotakeMeetingCalendarDetail> calendarDetails = mapDetailList.get(calendarInfo.getId());
for (HotakeMeetingCalendarDetail detail : calendarDetails) {
List<SysUser> users = userList.stream().filter(e -> e.getUserId() == detail.getCandidateId()).collect(Collectors.toList());
if (CollectionUtil.isNotEmpty(users)) {
detail.setCandidateUser(users.get(0));
}
}
calendarInfo.setCalendarDetails(calendarDetails);
//返回岗位数据信息
List<HotakeRolesApplyInfo> applyInfos = applyInfoList.stream().filter(e->e.getId().longValue() == calendarInfo.getRoleApplyId().longValue()).toList();
if(CollectionUtil.isNotEmpty(applyInfos)) {
HotakeRolesApplyInfo applyInfo = applyInfos.get(0);
List<HotakeRolesInfo> rolesInfos = rolesInfoList.stream().filter(e->e.getId().longValue() == applyInfo.getRoleId().longValue()).toList();
if(CollectionUtil.isNotEmpty(rolesInfos)) {
HotakeRolesInfo rolesInfo = rolesInfos.get(0);
calendarInfo.setRolesInfo(rolesInfo);
}
}
}
}
}
return calendarInfos;
}else{
return new ArrayList<>();
}
}
/**
* 新增会议日历记录主
*
@@ -262,7 +329,7 @@ public class HotakeMeetingCalendarInfoServiceImpl extends BaseServiceImpl implem
calendarInfo.setMeetingName(meetingName);
//保存主表数据
fill(FillTypeEnum.INSERT.getCode(), calendarInfo);
insertHotakeMeetingCalendarInfo(calendarInfo);
hotakeMeetingCalendarInfoMapper.insertHotakeMeetingCalendarInfo(calendarInfo);
//保存明细数据
HotakeMeetingCalendarDetail hotakeMeetingCalendarDetail = new HotakeMeetingCalendarDetail();
hotakeMeetingCalendarDetail.setMeetingId(calendarInfo.getId());
@@ -279,4 +346,41 @@ public class HotakeMeetingCalendarInfoServiceImpl extends BaseServiceImpl implem
}
}
}
/**
* 查询当前候选者会议日历数据
* @return
*/
@Override
public List<HotakeMeetingCalendarDataDto> selectHotakeMeetingCalendarDataDtoList() {
List<HotakeMeetingCalendarDataDto> dataDtos = new ArrayList<>();
//根据候选者查询会议明细数据
HotakeMeetingCalendarDetail queryCalendarDetail = new HotakeMeetingCalendarDetail();
queryCalendarDetail.setCandidateId(SecurityUtils.getUserId());
List<HotakeMeetingCalendarDetail> calendarDetailList = hotakeMeetingCalendarDetailMapper.selectHotakeMeetingCalendarDetailList(queryCalendarDetail);
if(CollectionUtil.isNotEmpty(calendarDetailList)) {
HotakeMeetingCalendarInfo queryCalendarInfo = new HotakeMeetingCalendarInfo();
//查询明细中的会议主表ID
List<Long> meetingIds = calendarDetailList.stream().map(HotakeMeetingCalendarDetail::getMeetingId).collect(Collectors.toList());
queryCalendarInfo.setMeetingIds(meetingIds);
List<HotakeMeetingCalendarInfo> calendarInfos = hotakeMeetingCalendarInfoMapper.selectHotakeMeetingCalendarInfoList(queryCalendarInfo);
if (CollectionUtil.isNotEmpty(calendarInfos)) {
//获取对应的参会人员数据
Map<String,List<HotakeMeetingCalendarInfo>> mapCalendarInfo = calendarInfos.stream().collect(Collectors.groupingBy(HotakeMeetingCalendarInfo::getMeetingDate));
if(mapCalendarInfo != null) {
for(String key : mapCalendarInfo.keySet()) {
List<HotakeMeetingCalendarInfo> calendarInfoList = mapCalendarInfo.get(key);
HotakeMeetingCalendarDataDto dataDto = new HotakeMeetingCalendarDataDto();
dataDto.setMeetingDate(key);
dataDto.setMeetingFlag("1");
dataDto.setNums(calendarInfoList.size());
dataDtos.add(dataDto);
}
}
}
return dataDtos;
}else{
return new ArrayList<>();
}
}
}

View File

@@ -21,6 +21,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<result property="aiMatchScore" column="ai_match_score" />
<result property="aiMatchScorePercentage" column="ai_match_score_percentage" />
<result property="cvOptimizeJson" column="cv_optimize_json" />
<result property="delFlag" column="del_flag" />
<result property="createBy" column="create_by" />
<result property="createTime" column="create_time" />
@@ -31,7 +32,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<sql id="selectHotakeCvInfoVo">
select id, user_id, cv_name, cv_file_type, cv_url,file_size_show,cv_file_suffix,
status,cv_template_json,cv_score,cv_md5,experience,ai_match_score,ai_match_score_percentage,
status,cv_template_json,cv_score,cv_md5,experience,ai_match_score,ai_match_score_percentage,cv_optimize_json,
del_flag, create_by, create_time, update_by, update_time, remark from hotake_cv_info
</sql>
@@ -70,6 +71,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="experience != null">experience,</if>
<if test="aiMatchScore != null">ai_match_score,</if>
<if test="aiMatchScorePercentage != null">ai_match_score_percentage,</if>
<if test="cvOptimizeJson != null">cv_optimize_json,</if>
<if test="delFlag != null">del_flag,</if>
<if test="createBy != null">create_by,</if>
@@ -93,6 +95,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="experience != null">#{experience},</if>
<if test="aiMatchScore != null">#{aiMatchScore},</if>
<if test="aiMatchScorePercentage != null">#{aiMatchScorePercentage},</if>
<if test="cvOptimizeJson != null">#{cvOptimizeJson},</if>
<if test="delFlag != null">#{delFlag},</if>
<if test="createBy != null">#{createBy},</if>
@@ -121,6 +124,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="aiMatchScore != null">ai_match_score = #{aiMatchScore},</if>
<if test="aiMatchScorePercentage != null">ai_match_score_percentage = #{aiMatchScorePercentage},</if>
<if test="cvOptimizeJson != null">cv_optimize_json = #{cvOptimizeJson},</if>
<if test="delFlag != null">del_flag = #{delFlag},</if>
<if test="createBy != null">create_by = #{createBy},</if>
<if test="createTime != null">create_time = #{createTime},</if>

View File

@@ -96,6 +96,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
delete from hotake_initial_screening_questions_info where id = #{id}
</delete>
<delete id="deleteHotakeInitialScreeningQuestionsInfoByRoleId" parameterType="Long">
delete from hotake_initial_screening_questions_info where role_id = #{roleId}
</delete>
<delete id="deleteHotakeInitialScreeningQuestionsInfoByIds" parameterType="String">
delete from hotake_initial_screening_questions_info where id in
<foreach item="id" collection="array" open="(" separator="," close=")">

View File

@@ -37,6 +37,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="meetingDate != null and meetingDate != ''"> and meeting_date = #{meetingDate}</if>
<if test="times != null and times != ''"> and times = #{times}</if>
<if test="status != null and status != ''"> and status = #{status}</if>
<if test="meetingIds != null ">
and id in
<foreach item="meetingId" collection="meetingIds" open="(" separator="," close=")">
#{meetingId}
</foreach>
</if>
</where>
</select>