岗位- AI问题业务逻辑完善
This commit is contained in:
@@ -0,0 +1,68 @@
|
||||
package com.vetti.hotake.domain;
|
||||
|
||||
import com.vetti.hotake.domain.dto.AiQuestionDto;
|
||||
import lombok.Data;
|
||||
import lombok.experimental.Accessors;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import com.vetti.common.annotation.Excel;
|
||||
import com.vetti.common.core.domain.BaseEntity;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* AI面试问题信息对象 hotake_ai_interview_questions_info
|
||||
*
|
||||
* @author wangxiangshun
|
||||
* @date 2025-12-14
|
||||
*/
|
||||
@Data
|
||||
@Accessors(chain = true)
|
||||
public class HotakeAiInterviewQuestionsInfo extends BaseEntity
|
||||
{
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/** 主键ID */
|
||||
@ApiModelProperty("主键ID")
|
||||
private Long id;
|
||||
|
||||
/** 岗位ID */
|
||||
@ApiModelProperty("岗位ID")
|
||||
@Excel(name = "岗位ID")
|
||||
private Long roleId;
|
||||
|
||||
/** 招聘人ID */
|
||||
@ApiModelProperty("招聘人ID")
|
||||
@Excel(name = "招聘人ID")
|
||||
private Long recruiterId;
|
||||
|
||||
/** 问题 */
|
||||
@ApiModelProperty("问题")
|
||||
@Excel(name = "问题")
|
||||
private String questionTitle;
|
||||
|
||||
/** 概述 */
|
||||
@ApiModelProperty("概述")
|
||||
@Excel(name = "概述")
|
||||
private String overview;
|
||||
|
||||
/** 焦点类型 */
|
||||
@ApiModelProperty("焦点类型")
|
||||
@Excel(name = "焦点类型")
|
||||
private String focusType;
|
||||
|
||||
/** 问题明细记录json */
|
||||
@ApiModelProperty("问题明细记录json")
|
||||
@Excel(name = "问题明细记录json")
|
||||
private String questionJson;
|
||||
|
||||
@ApiModelProperty("问题数量")
|
||||
private Integer questionNum;
|
||||
|
||||
@ApiModelProperty("所需时间(分钟.min)")
|
||||
private String times;
|
||||
|
||||
@ApiModelProperty("AI问题数据集合")
|
||||
private List<AiQuestionDto> aiQuestionList;
|
||||
|
||||
}
|
||||
@@ -155,6 +155,15 @@ public class HotakeRolesInfo extends BaseEntity
|
||||
@ApiModelProperty("语言")
|
||||
private String languages;
|
||||
|
||||
@ApiModelProperty("AI筛选音频标识")
|
||||
private String aiScreeningVideoFlag;
|
||||
|
||||
@ApiModelProperty("语音ID")
|
||||
private String videoId;
|
||||
|
||||
@ApiModelProperty("语速")
|
||||
private String speechSpeed;
|
||||
|
||||
@ApiModelProperty("数据类型(release:发布Job,draft:草稿,template:模版)")
|
||||
private String dataType;
|
||||
|
||||
|
||||
@@ -0,0 +1,19 @@
|
||||
package com.vetti.hotake.domain.dto;
|
||||
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
import lombok.experimental.Accessors;
|
||||
|
||||
/**
|
||||
* AI面试问题对象
|
||||
*
|
||||
* @author wangxiangshun
|
||||
* @date 2025-11-30
|
||||
*/
|
||||
@Data
|
||||
@Accessors(chain = true)
|
||||
public class AiQuestionDto {
|
||||
|
||||
@ApiModelProperty("问题")
|
||||
private String questions;
|
||||
}
|
||||
@@ -1,5 +1,6 @@
|
||||
package com.vetti.hotake.domain.dto;
|
||||
|
||||
import com.vetti.hotake.domain.HotakeAiInterviewQuestionsInfo;
|
||||
import com.vetti.hotake.domain.HotakeInitialScreeningQuestionsInfo;
|
||||
import com.vetti.hotake.domain.HotakeRolesInfo;
|
||||
import com.vetti.hotake.domain.dto.roleDto.*;
|
||||
@@ -40,4 +41,7 @@ public class HotakeRolesInfoDto extends HotakeRolesInfo {
|
||||
@ApiModelProperty("初步筛选问题数据集合")
|
||||
private List<HotakeInitialScreeningQuestionsInfo> initialScreeningQuestionsInfoList;
|
||||
|
||||
@ApiModelProperty("AI面试问题数据集合")
|
||||
private List<HotakeAiInterviewQuestionsInfo> aiInterviewQuestionsInfoList;
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,69 @@
|
||||
package com.vetti.hotake.mapper;
|
||||
|
||||
import java.util.List;
|
||||
import com.vetti.hotake.domain.HotakeAiInterviewQuestionsInfo;
|
||||
|
||||
/**
|
||||
* AI面试问题信息Mapper接口
|
||||
*
|
||||
* @author wangxiangshun
|
||||
* @date 2025-12-14
|
||||
*/
|
||||
public interface HotakeAiInterviewQuestionsInfoMapper
|
||||
{
|
||||
/**
|
||||
* 查询AI面试问题信息
|
||||
*
|
||||
* @param id AI面试问题信息主键
|
||||
* @return AI面试问题信息
|
||||
*/
|
||||
public HotakeAiInterviewQuestionsInfo selectHotakeAiInterviewQuestionsInfoById(Long id);
|
||||
|
||||
/**
|
||||
* 查询AI面试问题信息列表
|
||||
*
|
||||
* @param hotakeAiInterviewQuestionsInfo AI面试问题信息
|
||||
* @return AI面试问题信息集合
|
||||
*/
|
||||
public List<HotakeAiInterviewQuestionsInfo> selectHotakeAiInterviewQuestionsInfoList(HotakeAiInterviewQuestionsInfo hotakeAiInterviewQuestionsInfo);
|
||||
|
||||
/**
|
||||
* 新增AI面试问题信息
|
||||
*
|
||||
* @param hotakeAiInterviewQuestionsInfo AI面试问题信息
|
||||
* @return 结果
|
||||
*/
|
||||
public int insertHotakeAiInterviewQuestionsInfo(HotakeAiInterviewQuestionsInfo hotakeAiInterviewQuestionsInfo);
|
||||
|
||||
/**
|
||||
* 修改AI面试问题信息
|
||||
*
|
||||
* @param hotakeAiInterviewQuestionsInfo AI面试问题信息
|
||||
* @return 结果
|
||||
*/
|
||||
public int updateHotakeAiInterviewQuestionsInfo(HotakeAiInterviewQuestionsInfo hotakeAiInterviewQuestionsInfo);
|
||||
|
||||
/**
|
||||
* 删除AI面试问题信息
|
||||
*
|
||||
* @param id AI面试问题信息主键
|
||||
* @return 结果
|
||||
*/
|
||||
public int deleteHotakeAiInterviewQuestionsInfoById(Long id);
|
||||
|
||||
/**
|
||||
* 批量删除AI面试问题信息
|
||||
*
|
||||
* @param ids 需要删除的数据主键集合
|
||||
* @return 结果
|
||||
*/
|
||||
public int deleteHotakeAiInterviewQuestionsInfoByIds(Long[] ids);
|
||||
/**
|
||||
* 批量新增AI面试问题信息
|
||||
*
|
||||
* @param hotakeAiInterviewQuestionsInfoList AI面试问题信息列表
|
||||
* @return 结果
|
||||
*/
|
||||
public int batchInsertHotakeAiInterviewQuestionsInfo(List<HotakeAiInterviewQuestionsInfo> hotakeAiInterviewQuestionsInfoList);
|
||||
|
||||
}
|
||||
@@ -0,0 +1,70 @@
|
||||
package com.vetti.hotake.service;
|
||||
|
||||
import java.util.List;
|
||||
import com.vetti.hotake.domain.HotakeAiInterviewQuestionsInfo;
|
||||
|
||||
/**
|
||||
* AI面试问题信息Service接口
|
||||
*
|
||||
* @author wangxiangshun
|
||||
* @date 2025-12-14
|
||||
*/
|
||||
public interface IHotakeAiInterviewQuestionsInfoService
|
||||
{
|
||||
/**
|
||||
* 查询AI面试问题信息
|
||||
*
|
||||
* @param id AI面试问题信息主键
|
||||
* @return AI面试问题信息
|
||||
*/
|
||||
public HotakeAiInterviewQuestionsInfo selectHotakeAiInterviewQuestionsInfoById(Long id);
|
||||
|
||||
/**
|
||||
* 查询AI面试问题信息列表
|
||||
*
|
||||
* @param hotakeAiInterviewQuestionsInfo AI面试问题信息
|
||||
* @return AI面试问题信息集合
|
||||
*/
|
||||
public List<HotakeAiInterviewQuestionsInfo> selectHotakeAiInterviewQuestionsInfoList(HotakeAiInterviewQuestionsInfo hotakeAiInterviewQuestionsInfo);
|
||||
|
||||
/**
|
||||
* 新增AI面试问题信息
|
||||
*
|
||||
* @param hotakeAiInterviewQuestionsInfo AI面试问题信息
|
||||
* @return 结果
|
||||
*/
|
||||
public int insertHotakeAiInterviewQuestionsInfo(HotakeAiInterviewQuestionsInfo hotakeAiInterviewQuestionsInfo);
|
||||
|
||||
/**
|
||||
* 修改AI面试问题信息
|
||||
*
|
||||
* @param hotakeAiInterviewQuestionsInfo AI面试问题信息
|
||||
* @return 结果
|
||||
*/
|
||||
public int updateHotakeAiInterviewQuestionsInfo(HotakeAiInterviewQuestionsInfo hotakeAiInterviewQuestionsInfo);
|
||||
|
||||
/**
|
||||
* 批量删除AI面试问题信息
|
||||
*
|
||||
* @param ids 需要删除的AI面试问题信息主键集合
|
||||
* @return 结果
|
||||
*/
|
||||
public int deleteHotakeAiInterviewQuestionsInfoByIds(Long[] ids);
|
||||
|
||||
/**
|
||||
* 删除AI面试问题信息信息
|
||||
*
|
||||
* @param id AI面试问题信息主键
|
||||
* @return 结果
|
||||
*/
|
||||
public int deleteHotakeAiInterviewQuestionsInfoById(Long id);
|
||||
|
||||
/**
|
||||
* 批量新增AI面试问题信息
|
||||
*
|
||||
* @param hotakeAiInterviewQuestionsInfoList AI面试问题信息列表
|
||||
* @return 结果
|
||||
*/
|
||||
public int batchInsertHotakeAiInterviewQuestionsInfo(List<HotakeAiInterviewQuestionsInfo> hotakeAiInterviewQuestionsInfoList);
|
||||
|
||||
}
|
||||
@@ -0,0 +1,161 @@
|
||||
package com.vetti.hotake.service.impl;
|
||||
|
||||
import cn.hutool.core.collection.CollectionUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import cn.hutool.json.JSONUtil;
|
||||
import com.vetti.common.core.service.BaseServiceImpl;
|
||||
import com.vetti.common.enums.FillTypeEnum;
|
||||
import com.vetti.hotake.domain.HotakeAiInterviewQuestionsInfo;
|
||||
import com.vetti.hotake.domain.dto.AiQuestionDto;
|
||||
import com.vetti.hotake.mapper.HotakeAiInterviewQuestionsInfoMapper;
|
||||
import com.vetti.hotake.service.IHotakeAiInterviewQuestionsInfoService;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* AI面试问题信息Service业务层处理
|
||||
*
|
||||
* @author wangxiangshun
|
||||
* @date 2025-12-14
|
||||
*/
|
||||
@SuppressWarnings("all")
|
||||
@Service
|
||||
public class HotakeAiInterviewQuestionsInfoServiceImpl extends BaseServiceImpl implements IHotakeAiInterviewQuestionsInfoService
|
||||
{
|
||||
@Autowired
|
||||
private HotakeAiInterviewQuestionsInfoMapper hotakeAiInterviewQuestionsInfoMapper;
|
||||
|
||||
/**
|
||||
* 查询AI面试问题信息
|
||||
*
|
||||
* @param id AI面试问题信息主键
|
||||
* @return AI面试问题信息
|
||||
*/
|
||||
@Transactional(readOnly = true)
|
||||
@Override
|
||||
public HotakeAiInterviewQuestionsInfo selectHotakeAiInterviewQuestionsInfoById(Long id)
|
||||
{
|
||||
HotakeAiInterviewQuestionsInfo questionsInfo = hotakeAiInterviewQuestionsInfoMapper.selectHotakeAiInterviewQuestionsInfoById(id);
|
||||
if(questionsInfo != null){
|
||||
Integer questionNum = 0;
|
||||
String times = "0";
|
||||
if(StrUtil.isNotEmpty(questionsInfo.getQuestionJson())){
|
||||
List<AiQuestionDto> aiQuestionList = JSONUtil.toList(questionsInfo.getQuestionJson(), AiQuestionDto.class);
|
||||
questionsInfo.setAiQuestionList(aiQuestionList);
|
||||
questionNum = aiQuestionList.size();
|
||||
times = String.valueOf(aiQuestionList.size() * 1.5);
|
||||
}
|
||||
questionsInfo.setQuestionNum(questionNum);
|
||||
questionsInfo.setTimes(times);
|
||||
}
|
||||
return questionsInfo;
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询AI面试问题信息列表
|
||||
*
|
||||
* @param hotakeAiInterviewQuestionsInfo AI面试问题信息
|
||||
* @return AI面试问题信息
|
||||
*/
|
||||
@Transactional(readOnly = true)
|
||||
@Override
|
||||
public List<HotakeAiInterviewQuestionsInfo> selectHotakeAiInterviewQuestionsInfoList(HotakeAiInterviewQuestionsInfo hotakeAiInterviewQuestionsInfo)
|
||||
{
|
||||
List<HotakeAiInterviewQuestionsInfo> questionsInfoList = hotakeAiInterviewQuestionsInfoMapper.selectHotakeAiInterviewQuestionsInfoList(hotakeAiInterviewQuestionsInfo);
|
||||
if(CollectionUtil.isNotEmpty(questionsInfoList)){
|
||||
for (HotakeAiInterviewQuestionsInfo questionsInfo : questionsInfoList) {
|
||||
if(questionsInfo != null){
|
||||
Integer questionNum = 0;
|
||||
String times = "0";
|
||||
if(StrUtil.isNotEmpty(questionsInfo.getQuestionJson())){
|
||||
List<AiQuestionDto> aiQuestionList = JSONUtil.toList(questionsInfo.getQuestionJson(), AiQuestionDto.class);
|
||||
questionsInfo.setAiQuestionList(aiQuestionList);
|
||||
questionNum = aiQuestionList.size();
|
||||
times = String.valueOf(aiQuestionList.size() * 1.5);
|
||||
}
|
||||
questionsInfo.setQuestionNum(questionNum);
|
||||
questionsInfo.setTimes(times);
|
||||
}
|
||||
}
|
||||
}
|
||||
return questionsInfoList;
|
||||
}
|
||||
|
||||
/**
|
||||
* 新增AI面试问题信息
|
||||
*
|
||||
* @param hotakeAiInterviewQuestionsInfo AI面试问题信息
|
||||
* @return 结果
|
||||
*/
|
||||
@Transactional(rollbackFor=Exception.class)
|
||||
@Override
|
||||
public int insertHotakeAiInterviewQuestionsInfo(HotakeAiInterviewQuestionsInfo hotakeAiInterviewQuestionsInfo)
|
||||
{
|
||||
fill(FillTypeEnum.INSERT.getCode(), hotakeAiInterviewQuestionsInfo);
|
||||
if(CollectionUtil.isNotEmpty(hotakeAiInterviewQuestionsInfo.getAiQuestionList())){
|
||||
hotakeAiInterviewQuestionsInfo.setQuestionJson(JSONUtil.toJsonStr(hotakeAiInterviewQuestionsInfo.getAiQuestionList()));
|
||||
}else{
|
||||
hotakeAiInterviewQuestionsInfo.setQuestionJson("");
|
||||
}
|
||||
return hotakeAiInterviewQuestionsInfoMapper.insertHotakeAiInterviewQuestionsInfo(hotakeAiInterviewQuestionsInfo);
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改AI面试问题信息
|
||||
*
|
||||
* @param hotakeAiInterviewQuestionsInfo AI面试问题信息
|
||||
* @return 结果
|
||||
*/
|
||||
@Transactional(rollbackFor=Exception.class)
|
||||
@Override
|
||||
public int updateHotakeAiInterviewQuestionsInfo(HotakeAiInterviewQuestionsInfo hotakeAiInterviewQuestionsInfo)
|
||||
{
|
||||
fill(FillTypeEnum.UPDATE.getCode(), hotakeAiInterviewQuestionsInfo);
|
||||
if(CollectionUtil.isNotEmpty(hotakeAiInterviewQuestionsInfo.getAiQuestionList())){
|
||||
hotakeAiInterviewQuestionsInfo.setQuestionJson(JSONUtil.toJsonStr(hotakeAiInterviewQuestionsInfo.getAiQuestionList()));
|
||||
}else{
|
||||
hotakeAiInterviewQuestionsInfo.setQuestionJson("");
|
||||
}
|
||||
return hotakeAiInterviewQuestionsInfoMapper.updateHotakeAiInterviewQuestionsInfo(hotakeAiInterviewQuestionsInfo);
|
||||
}
|
||||
|
||||
/**
|
||||
* 批量删除AI面试问题信息
|
||||
*
|
||||
* @param ids 需要删除的AI面试问题信息主键
|
||||
* @return 结果
|
||||
*/
|
||||
@Transactional(rollbackFor=Exception.class)
|
||||
@Override
|
||||
public int deleteHotakeAiInterviewQuestionsInfoByIds(Long[] ids)
|
||||
{
|
||||
return hotakeAiInterviewQuestionsInfoMapper.deleteHotakeAiInterviewQuestionsInfoByIds(ids);
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除AI面试问题信息信息
|
||||
*
|
||||
* @param id AI面试问题信息主键
|
||||
* @return 结果
|
||||
*/
|
||||
@Transactional(rollbackFor=Exception.class)
|
||||
@Override
|
||||
public int deleteHotakeAiInterviewQuestionsInfoById(Long id)
|
||||
{
|
||||
return hotakeAiInterviewQuestionsInfoMapper.deleteHotakeAiInterviewQuestionsInfoById(id);
|
||||
}
|
||||
/**
|
||||
* 批量新增AI面试问题信息
|
||||
*
|
||||
* @param hotakeAiInterviewQuestionsInfoList AI面试问题信息列表
|
||||
* @return 结果
|
||||
*/
|
||||
@Transactional(rollbackFor=Exception.class)
|
||||
@Override
|
||||
public int batchInsertHotakeAiInterviewQuestionsInfo(List<HotakeAiInterviewQuestionsInfo> hotakeAiInterviewQuestionsInfoList){
|
||||
return hotakeAiInterviewQuestionsInfoMapper.batchInsertHotakeAiInterviewQuestionsInfo(hotakeAiInterviewQuestionsInfoList);
|
||||
}
|
||||
}
|
||||
@@ -13,17 +13,21 @@ import com.vetti.common.utils.DateUtils;
|
||||
import com.vetti.common.utils.MessageUtils;
|
||||
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.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.HotakeRolesInfoMapper;
|
||||
import com.vetti.hotake.service.IHotakeAiInterviewQuestionsInfoService;
|
||||
import com.vetti.hotake.service.IHotakeInitialScreeningQuestionsInfoService;
|
||||
import com.vetti.hotake.service.IHotakeRolesInfoService;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
@@ -42,6 +46,9 @@ public class HotakeRolesInfoServiceImpl extends BaseServiceImpl implements IHota
|
||||
@Autowired
|
||||
private IHotakeInitialScreeningQuestionsInfoService hotakeInitialScreeningQuestionsInfoService;
|
||||
|
||||
@Autowired
|
||||
private IHotakeAiInterviewQuestionsInfoService hotakeAiInterviewQuestionsInfoService;
|
||||
|
||||
/**
|
||||
* 查询岗位信息
|
||||
*
|
||||
@@ -106,6 +113,11 @@ public class HotakeRolesInfoServiceImpl extends BaseServiceImpl implements IHota
|
||||
queryQuestion.setRoleId(id);
|
||||
List<HotakeInitialScreeningQuestionsInfo> questionsInfoList = hotakeInitialScreeningQuestionsInfoService.selectHotakeInitialScreeningQuestionsInfoList(queryQuestion);
|
||||
dto.setInitialScreeningQuestionsInfoList(questionsInfoList);
|
||||
|
||||
HotakeAiInterviewQuestionsInfo queryAiQuestion = new HotakeAiInterviewQuestionsInfo();
|
||||
queryAiQuestion.setRoleId(id);
|
||||
List<HotakeAiInterviewQuestionsInfo> aiInterviewQuestionsInfoList = hotakeAiInterviewQuestionsInfoService.selectHotakeAiInterviewQuestionsInfoList(queryAiQuestion);
|
||||
dto.setAiInterviewQuestionsInfoList(aiInterviewQuestionsInfoList);
|
||||
}
|
||||
|
||||
return dto;
|
||||
@@ -273,6 +285,8 @@ public class HotakeRolesInfoServiceImpl extends BaseServiceImpl implements IHota
|
||||
}else{
|
||||
rolesInfo.setRoleBenefitsJson("");
|
||||
}
|
||||
//todo 暂时加在这里,完成第3步的时候,初始化第5步的内容
|
||||
createAiQuestion(rolesInfoId);
|
||||
}
|
||||
if(RoleOperStepsEnum.STEPS_4.getCode().equals(hotakeRolesInfo.getOperStep())){
|
||||
|
||||
@@ -306,4 +320,26 @@ public class HotakeRolesInfoServiceImpl extends BaseServiceImpl implements IHota
|
||||
HotakeRolesInfoDto rolesInfoDto = selectHotakeRolesInfoDtoById(rolesInfo.getId());
|
||||
return rolesInfoDto;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 初始化AI面试问题-临时的
|
||||
* @param roleId 岗位ID
|
||||
*/
|
||||
private void createAiQuestion(Long roleId){
|
||||
HotakeAiInterviewQuestionsInfo questionsInfo = new HotakeAiInterviewQuestionsInfo();
|
||||
questionsInfo.setQuestionTitle("General Questions");
|
||||
questionsInfo.setFocusType("Personality & Culture");
|
||||
questionsInfo.setRoleId(roleId);
|
||||
questionsInfo.setRecruiterId(SecurityUtils.getUserId());
|
||||
questionsInfo.setOverview("This is General Questions Overview");
|
||||
|
||||
List<AiQuestionDto> questionDtoList = new ArrayList<>();
|
||||
AiQuestionDto questionDto = new AiQuestionDto();
|
||||
questionDto.setQuestions("Can you provide an example of a situation where you had to work in a physically demanding environment?,How do you plan to handle tasks that require specific construction knowledge or skills that you may not have yet?");
|
||||
questionDtoList.add(questionDto);
|
||||
questionsInfo.setAiQuestionList(questionDtoList);
|
||||
|
||||
hotakeAiInterviewQuestionsInfoService.insertHotakeAiInterviewQuestionsInfo(questionsInfo);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user