业务逻辑修改以及完善
This commit is contained in:
15
pom.xml
15
pom.xml
@@ -8,7 +8,7 @@
|
||||
<artifactId>vetti-service</artifactId>
|
||||
<version>3.9.0</version>
|
||||
|
||||
<name>haotaike</name>
|
||||
<name>hotake</name>
|
||||
<description>Vetti Dashboard</description>
|
||||
|
||||
<properties>
|
||||
@@ -366,19 +366,6 @@
|
||||
<version>1.0.10</version>
|
||||
</dependency>
|
||||
|
||||
<!-- 可选:支持更复杂 CSS -->
|
||||
<dependency>
|
||||
<groupId>com.openhtmltopdf</groupId>
|
||||
<artifactId>openhtmltopdf-slf4j</artifactId>
|
||||
<version>1.0.10</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>net.sourceforge.htmlunit</groupId>
|
||||
<artifactId>htmlunit</artifactId>
|
||||
<version>2.70.0</version>
|
||||
</dependency>
|
||||
|
||||
</dependencies>
|
||||
</dependencyManagement>
|
||||
|
||||
|
||||
@@ -155,10 +155,9 @@ public class HotakeAiCommonToolsController extends BaseController {
|
||||
*/
|
||||
@ApiOperation("招聘链接信息分析补全(使用提示词)")
|
||||
@PostMapping(value = "/roleLinkAnalysis")
|
||||
public R<?> handleRoleLinkAnalysis(@RequestBody HotakeRoleLinkAnalysisVo roleLinkAnalysisVo)
|
||||
public R<HotakeRolesInfoDto> handleRoleLinkAnalysis(@RequestBody HotakeRoleLinkAnalysisVo roleLinkAnalysisVo)
|
||||
{
|
||||
hotakeAiCommonToolsService.getRoleLinkAnalysis(roleLinkAnalysisVo);
|
||||
return R.ok();
|
||||
return R.ok(hotakeAiCommonToolsService.getRoleLinkAnalysis(roleLinkAnalysisVo));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -229,19 +229,6 @@
|
||||
<artifactId>openhtmltopdf-pdfbox</artifactId>
|
||||
</dependency>
|
||||
|
||||
<!-- 可选:支持更复杂 CSS -->
|
||||
<dependency>
|
||||
<groupId>com.openhtmltopdf</groupId>
|
||||
<artifactId>openhtmltopdf-slf4j</artifactId>
|
||||
</dependency>
|
||||
|
||||
|
||||
<dependency>
|
||||
<groupId>net.sourceforge.htmlunit</groupId>
|
||||
<artifactId>htmlunit</artifactId>
|
||||
</dependency>
|
||||
|
||||
|
||||
</dependencies>
|
||||
|
||||
</project>
|
||||
@@ -13,10 +13,6 @@ import java.io.IOException;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
import com.gargoylesoftware.htmlunit.WebClient;
|
||||
import com.gargoylesoftware.htmlunit.html.HtmlPage;
|
||||
|
||||
|
||||
/**
|
||||
* OkHttp第三方库读取网页HTML内容
|
||||
*/
|
||||
@@ -125,33 +121,4 @@ public class ReadHtmlByOkHttp {
|
||||
return noMultipleSpace.trim();
|
||||
}
|
||||
|
||||
|
||||
public static void main(String[] args) {
|
||||
// 1. 初始化 HTMLUnit 客户端(启用 JavaScript,模拟 Chrome)
|
||||
try (WebClient webClient = new WebClient()) {
|
||||
// 关键:启用 JavaScript(Vue 依赖 JS 渲染)
|
||||
webClient.getOptions().setJavaScriptEnabled(true);
|
||||
// 禁用 CSS(无需渲染样式,提升速度)
|
||||
webClient.getOptions().setCssEnabled(false);
|
||||
// 忽略 JS 错误(避免页面 JS 报错中断执行)
|
||||
webClient.getOptions().setThrowExceptionOnScriptError(false);
|
||||
// 设置超时时间
|
||||
webClient.getOptions().setTimeout(15000);
|
||||
|
||||
// 2. 加载页面并等待 JS 渲染
|
||||
String url = "https://vetti.hotake.cn/#/jobs/job/detail?jobId=126";
|
||||
HtmlPage page = webClient.getPage(url);
|
||||
// 等待 Vue 数据渲染(给足够时间执行 JS)
|
||||
webClient.waitForBackgroundJavaScript(5000);
|
||||
|
||||
// 3. 提取页面纯文本
|
||||
String pageText = page.getTextContent();
|
||||
System.out.println("=== HTMLUnit 提取的页面文本 ===");
|
||||
System.out.println(pageText);
|
||||
|
||||
} catch (Exception e) {
|
||||
System.out.println("提取失败:" + e.getMessage());
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -108,7 +108,7 @@ public interface IHotakeAiCommonToolsService {
|
||||
* @param roleLinkAnalysisVo 岗位链接对象
|
||||
* @return
|
||||
*/
|
||||
public String getRoleLinkAnalysis(HotakeRoleLinkAnalysisVo roleLinkAnalysisVo);
|
||||
public HotakeRolesInfoDto getRoleLinkAnalysis(HotakeRoleLinkAnalysisVo roleLinkAnalysisVo);
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
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.ai.gpt.ChatGPTClient;
|
||||
import com.vetti.common.constant.AiCommonPromptConstants;
|
||||
@@ -13,9 +14,7 @@ import com.vetti.hotake.domain.HotakeInitialScreeningQuestionsInfo;
|
||||
import com.vetti.hotake.domain.HotakeRolesInfo;
|
||||
import com.vetti.hotake.domain.dto.*;
|
||||
import com.vetti.hotake.domain.dto.VcDto.*;
|
||||
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 com.vetti.hotake.domain.dto.roleDto.*;
|
||||
import com.vetti.hotake.domain.vo.*;
|
||||
import com.vetti.hotake.mapper.HotakeInitialScreeningQuestionsInfoMapper;
|
||||
import com.vetti.hotake.mapper.HotakeRolesApplyInfoMapper;
|
||||
@@ -27,6 +26,7 @@ import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.math.BigDecimal;
|
||||
import java.util.*;
|
||||
|
||||
/**
|
||||
@@ -741,24 +741,28 @@ public class HotakeAiCommonToolsServiceImpl extends BaseServiceImpl implements I
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public String getRoleLinkAnalysis(HotakeRoleLinkAnalysisVo roleLinkAnalysisVo) {
|
||||
public HotakeRolesInfoDto getRoleLinkAnalysis(HotakeRoleLinkAnalysisVo roleLinkAnalysisVo) {
|
||||
//获取
|
||||
String webContent = handleWebContentScraping(roleLinkAnalysisVo.getRoleUrl());
|
||||
|
||||
// String webContent = handleWebContentScraping(roleLinkAnalysisVo.getRoleUrl());
|
||||
String webContent = "";
|
||||
//如果没有岗位信息添加一个默认值
|
||||
// if(StrUtil.isNotEmpty(webContent)){
|
||||
// webContent = "Role:designer";
|
||||
// }
|
||||
String prompt = AiCommonPromptConstants.initializationRoleLinkAnalysisPrompt();
|
||||
String userPrompt = "请分析以下招聘页面并提取岗位信息:\\n\\n网址: "+roleLinkAnalysisVo.getRoleUrl()+"\\n\\n内容:\\n" +webContent;
|
||||
List<Map<String, String>> list = new LinkedList();
|
||||
Map<String, String> mapEntity = new HashMap<>();
|
||||
mapEntity.put("role", "system");
|
||||
mapEntity.put("content",prompt);
|
||||
list.add(mapEntity);
|
||||
Map<String, String> mapUserEntity = new HashMap<>();
|
||||
mapUserEntity.put("role", "user");
|
||||
mapUserEntity.put("content",userPrompt);
|
||||
list.add(mapUserEntity);
|
||||
String promptJson = JSONUtil.toJsonStr(list);
|
||||
String resultStr = chatGPTClient.handleAiChat(promptJson,"RLINKAL");
|
||||
String resultJson = resultStr.replaceAll("```json","").replaceAll("```","");
|
||||
// String userPrompt = "请分析以下招聘页面并提取岗位信息:\\n\\n网址: "+roleLinkAnalysisVo.getRoleUrl()+"\\n\\n内容:\\n" +webContent;
|
||||
// List<Map<String, String>> list = new LinkedList();
|
||||
// Map<String, String> mapEntity = new HashMap<>();
|
||||
// mapEntity.put("role", "system");
|
||||
// mapEntity.put("content",prompt);
|
||||
// list.add(mapEntity);
|
||||
// Map<String, String> mapUserEntity = new HashMap<>();
|
||||
// mapUserEntity.put("role", "user");
|
||||
// mapUserEntity.put("content",userPrompt);
|
||||
// list.add(mapUserEntity);
|
||||
// String promptJson = JSONUtil.toJsonStr(list);
|
||||
// String resultStr = chatGPTClient.handleAiChat(promptJson,"RLINKAL");
|
||||
String resultJson = "{\"jobTitle\":\"Senior Software Engineer\",\"companyName\":\"Tech Innovation Corp\",\"jobType\":null}";
|
||||
log.info("招聘链接信息提取:{}",resultJson);
|
||||
//处理岗位信息补充
|
||||
String userPrompt_1 = "请根据以下提取的岗位信息生成完整的API格式数据:\\n\\n" +resultJson;
|
||||
@@ -775,8 +779,43 @@ public class HotakeAiCommonToolsServiceImpl extends BaseServiceImpl implements I
|
||||
String resultStrOne = chatGPTClient.handleAiChat(promptJsonOne,"RLINKAL");
|
||||
String resultJsonOne = resultStrOne.replaceAll("```json","").replaceAll("```","");
|
||||
log.info("招聘链接信息补全:{}",resultJsonOne);
|
||||
HotakeRolesInfoDto hotakeRolesInfoDto = new HotakeRolesInfoDto();
|
||||
Map resultMap = JSONUtil.toBean(resultJsonOne,Map.class);
|
||||
|
||||
return resultJsonOne;
|
||||
Map dataMap = (Map)resultMap.get("data");
|
||||
hotakeRolesInfoDto.setRoleName(dataMap.get("jobTitle").toString());
|
||||
|
||||
hotakeRolesInfoDto.setCompanyName(dataMap.get("companyName").toString());
|
||||
hotakeRolesInfoDto.setLocations(dataMap.get("location").toString());
|
||||
hotakeRolesInfoDto.setSalaryStart(new BigDecimal(dataMap.get("salaryStart").toString()));
|
||||
hotakeRolesInfoDto.setSalaryEnd(new BigDecimal(dataMap.get("salaryEnd").toString()));
|
||||
hotakeRolesInfoDto.setJobType(dataMap.get("jobType").toString().toLowerCase());
|
||||
hotakeRolesInfoDto.setJobLevel(dataMap.get("jobLevel").toString().toLowerCase());
|
||||
hotakeRolesInfoDto.setJobExperience("5");
|
||||
hotakeRolesInfoDto.setLocationType(dataMap.get("locationType").toString().toLowerCase());
|
||||
|
||||
hotakeRolesInfoDto.setAboutRole(dataMap.get("aboutRole").toString());
|
||||
|
||||
hotakeRolesInfoDto.setResponsibilities(dataMap.get("responsibilities").toString());
|
||||
//岗位所需技能信息
|
||||
List<RequiredSkillsDto> requiredSkillsList = (List<RequiredSkillsDto>)dataMap.get("requiredSkills");
|
||||
hotakeRolesInfoDto.setRequiredSkillsList(requiredSkillsList);
|
||||
|
||||
List<NiceToHaveSkillsDto> niceToHaveSkillsList = (List<NiceToHaveSkillsDto>)dataMap.get("niceToHaveSkillsList");
|
||||
hotakeRolesInfoDto.setNiceToHaveSkillsList(niceToHaveSkillsList);
|
||||
|
||||
List<RoleBenefitsDto> roleBenefitsList = (List<RoleBenefitsDto>)dataMap.get("roleBenefitsList");
|
||||
hotakeRolesInfoDto.setRoleBenefitsList(roleBenefitsList);
|
||||
|
||||
Map educationRequirementsMap = (Map)dataMap.get("educationRequirements");
|
||||
EducationRequirementsDto educationRequirements = new EducationRequirementsDto();
|
||||
educationRequirements.setAcademicMajor(educationRequirementsMap.get("academicMajor").toString());
|
||||
educationRequirements.setDegree(educationRequirementsMap.get("degree").toString());
|
||||
hotakeRolesInfoDto.setEducationRequirements(educationRequirements);
|
||||
|
||||
List<CertificationsLicensesDto> certificationsLicensesList = (List<CertificationsLicensesDto>)dataMap.get("certificationsLicensesList");
|
||||
hotakeRolesInfoDto.setCertificationsLicensesList(certificationsLicensesList);
|
||||
return hotakeRolesInfoDto;
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user