From 6edf7a4958c9d78c6e08a59adf2e6546ced1977c Mon Sep 17 00:00:00 2001 From: Administrator Date: Sat, 10 Jan 2026 00:58:29 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B8=9A=E5=8A=A1=E9=80=BB=E8=BE=91=E4=BF=AE?= =?UTF-8?q?=E6=94=B9=E4=BB=A5=E5=8F=8A=E5=AE=8C=E5=96=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 15 +--- .../ai/HotakeAiCommonToolsController.java | 5 +- vetti-common/pom.xml | 13 --- .../common/utils/html/ReadHtmlByOkHttp.java | 33 -------- .../service/IHotakeAiCommonToolsService.java | 2 +- .../impl/HotakeAiCommonToolsServiceImpl.java | 79 ++++++++++++++----- 6 files changed, 63 insertions(+), 84 deletions(-) diff --git a/pom.xml b/pom.xml index 82f1379..60460d0 100644 --- a/pom.xml +++ b/pom.xml @@ -8,7 +8,7 @@ vetti-service 3.9.0 - haotaike + hotake Vetti Dashboard @@ -366,19 +366,6 @@ 1.0.10 - - - com.openhtmltopdf - openhtmltopdf-slf4j - 1.0.10 - - - - net.sourceforge.htmlunit - htmlunit - 2.70.0 - - diff --git a/vetti-admin/src/main/java/com/vetti/web/controller/ai/HotakeAiCommonToolsController.java b/vetti-admin/src/main/java/com/vetti/web/controller/ai/HotakeAiCommonToolsController.java index a5efb54..2c90023 100644 --- a/vetti-admin/src/main/java/com/vetti/web/controller/ai/HotakeAiCommonToolsController.java +++ b/vetti-admin/src/main/java/com/vetti/web/controller/ai/HotakeAiCommonToolsController.java @@ -155,10 +155,9 @@ public class HotakeAiCommonToolsController extends BaseController { */ @ApiOperation("招聘链接信息分析补全(使用提示词)") @PostMapping(value = "/roleLinkAnalysis") - public R handleRoleLinkAnalysis(@RequestBody HotakeRoleLinkAnalysisVo roleLinkAnalysisVo) + public R handleRoleLinkAnalysis(@RequestBody HotakeRoleLinkAnalysisVo roleLinkAnalysisVo) { - hotakeAiCommonToolsService.getRoleLinkAnalysis(roleLinkAnalysisVo); - return R.ok(); + return R.ok(hotakeAiCommonToolsService.getRoleLinkAnalysis(roleLinkAnalysisVo)); } } diff --git a/vetti-common/pom.xml b/vetti-common/pom.xml index 91298fb..187bb55 100644 --- a/vetti-common/pom.xml +++ b/vetti-common/pom.xml @@ -229,19 +229,6 @@ openhtmltopdf-pdfbox - - - com.openhtmltopdf - openhtmltopdf-slf4j - - - - - net.sourceforge.htmlunit - htmlunit - - - \ No newline at end of file diff --git a/vetti-common/src/main/java/com/vetti/common/utils/html/ReadHtmlByOkHttp.java b/vetti-common/src/main/java/com/vetti/common/utils/html/ReadHtmlByOkHttp.java index de74757..a3a7574 100644 --- a/vetti-common/src/main/java/com/vetti/common/utils/html/ReadHtmlByOkHttp.java +++ b/vetti-common/src/main/java/com/vetti/common/utils/html/ReadHtmlByOkHttp.java @@ -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(); - } - } } diff --git a/vetti-hotakes/src/main/java/com/vetti/hotake/service/IHotakeAiCommonToolsService.java b/vetti-hotakes/src/main/java/com/vetti/hotake/service/IHotakeAiCommonToolsService.java index cc3dac3..2faae69 100644 --- a/vetti-hotakes/src/main/java/com/vetti/hotake/service/IHotakeAiCommonToolsService.java +++ b/vetti-hotakes/src/main/java/com/vetti/hotake/service/IHotakeAiCommonToolsService.java @@ -108,7 +108,7 @@ public interface IHotakeAiCommonToolsService { * @param roleLinkAnalysisVo 岗位链接对象 * @return */ - public String getRoleLinkAnalysis(HotakeRoleLinkAnalysisVo roleLinkAnalysisVo); + public HotakeRolesInfoDto getRoleLinkAnalysis(HotakeRoleLinkAnalysisVo roleLinkAnalysisVo); } 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 941367a..feb0dac 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 @@ -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> list = new LinkedList(); - Map mapEntity = new HashMap<>(); - mapEntity.put("role", "system"); - mapEntity.put("content",prompt); - list.add(mapEntity); - Map 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> list = new LinkedList(); +// Map mapEntity = new HashMap<>(); +// mapEntity.put("role", "system"); +// mapEntity.put("content",prompt); +// list.add(mapEntity); +// Map 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 requiredSkillsList = (List)dataMap.get("requiredSkills"); + hotakeRolesInfoDto.setRequiredSkillsList(requiredSkillsList); + + List niceToHaveSkillsList = (List)dataMap.get("niceToHaveSkillsList"); + hotakeRolesInfoDto.setNiceToHaveSkillsList(niceToHaveSkillsList); + + List roleBenefitsList = (List)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 certificationsLicensesList = (List)dataMap.get("certificationsLicensesList"); + hotakeRolesInfoDto.setCertificationsLicensesList(certificationsLicensesList); + return hotakeRolesInfoDto; }