diff --git a/pom.xml b/pom.xml
index 6158e8d..3e6f7a1 100644
--- a/pom.xml
+++ b/pom.xml
@@ -352,6 +352,32 @@
1.0.2
+
+
+ org.commonmark
+ commonmark
+ 0.22.0
+
+
+
+
+ com.openhtmltopdf
+ openhtmltopdf-pdfbox
+ 1.0.10
+
+
+
+
+ com.openhtmltopdf
+ openhtmltopdf-slf4j
+ 1.0.10
+
+
+
+
+
+
+
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 200127c..664fe99 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
@@ -9,6 +9,7 @@ import com.vetti.hotake.domain.dto.HotakeJobDescriptionGeneratorDto;
import com.vetti.hotake.domain.vo.HotakeInitialScreeningQuestionsVo;
import com.vetti.hotake.domain.vo.HotakeJobDescriptionGeneratorVo;
import com.vetti.hotake.domain.vo.HotakeResumeJobMatchingScoreVo;
+import com.vetti.hotake.domain.vo.HotakeWebInfoExtractVo;
import com.vetti.hotake.service.IHotakeAiCommonToolsService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
@@ -56,7 +57,7 @@ public class HotakeAiCommonToolsController extends BaseController {
* 简历岗位匹配度评分
*/
@ApiOperation("简历岗位匹配度评分")
- @GetMapping(value = "/resumeJobMatchingScore")
+ @PostMapping(value = "/resumeJobMatchingScore")
public R> handleResumeJobMatchingScore(@RequestBody HotakeResumeJobMatchingScoreVo scoreVo)
{
return R.ok(hotakeAiCommonToolsService.getResumeJobMatchingScore(scoreVo));
@@ -82,4 +83,56 @@ public class HotakeAiCommonToolsController extends BaseController {
return R.ok(hotakeAiCommonToolsService.getInitialQuestionEliminationScore(null));
}
+ /**
+ * 处理分析附件结果
+ */
+ @ApiOperation("处理分析附件结果")
+ @GetMapping(value = "/analyzedAttachment")
+ public R> handleAnalyzedAttachment()
+ {
+ return R.ok(hotakeAiCommonToolsService.handleAnalyzedAttachment(""));
+ }
+
+ /**
+ * 处理附件分析结果合并信息
+ */
+ @ApiOperation("处理附件分析结果合并信息")
+ @GetMapping(value = "/attachmentResultMerging")
+ public R> handleAttachmentResultMerging()
+ {
+ return R.ok(hotakeAiCommonToolsService.handleAttachmentResultMerging("",""));
+ }
+
+ /**
+ * 生成最终的Markdown格式简历
+ */
+ @ApiOperation("生成最终的Markdown格式简历")
+ @GetMapping(value = "/generateMarkdown")
+ public R> handleGenerateMarkdown()
+ {
+ return R.ok(hotakeAiCommonToolsService.handleGenerateMarkdown(""));
+ }
+
+ /**
+ * 网站内容抓取
+ */
+ @ApiOperation("网站内容抓取")
+ @GetMapping(value = "/webContentScraping")
+ public R> handleWebContentScraping()
+ {
+ return R.ok(hotakeAiCommonToolsService.handleWebContentScraping(""));
+ }
+
+
+ /**
+ * 网站AI信息提取(使用提示词)
+ */
+ @ApiOperation("网站AI信息提取(使用提示词)")
+ @PostMapping(value = "/webInfoExtract")
+ public R> handleWebInfoExtract(@RequestBody HotakeWebInfoExtractVo webInfoExtractVo)
+ {
+ hotakeAiCommonToolsService.handleWebInfoExtract(webInfoExtractVo);
+ return R.ok();
+ }
+
}
diff --git a/vetti-admin/src/main/java/com/vetti/web/controller/hotake/HotakeCvInfoController.java b/vetti-admin/src/main/java/com/vetti/web/controller/hotake/HotakeCvInfoController.java
index 24d1a6a..944e08f 100644
--- a/vetti-admin/src/main/java/com/vetti/web/controller/hotake/HotakeCvInfoController.java
+++ b/vetti-admin/src/main/java/com/vetti/web/controller/hotake/HotakeCvInfoController.java
@@ -111,4 +111,15 @@ public class HotakeCvInfoController extends BaseController
return R.ok(hotakeCvInfoService.handleCvAnalysis(hotakeCvInfo));
}
+ /**
+ * 根据其他的附件信息生成个人简历
+ */
+ @ApiOperation("根据其他的附件信息生成个人简历")
+ @Log(title = "根据其他的附件信息生成个人简历", businessType = BusinessType.INSERT)
+ @PostMapping("/generateResume")
+ public R handleGenerateResume()
+ {
+ return R.ok(hotakeCvInfoService.getGenerateResume());
+ }
+
}
diff --git a/vetti-admin/src/main/resources/application-druid.yml b/vetti-admin/src/main/resources/application-druid.yml
index 8ed3a34..95c1e11 100644
--- a/vetti-admin/src/main/resources/application-druid.yml
+++ b/vetti-admin/src/main/resources/application-druid.yml
@@ -178,6 +178,10 @@ chatGpt:
modelRoleCv: ft:gpt-4o-mini-2024-07-18:vetti:resume-scoring-v2:CnbgEHQQ
modelCvJx: gpt-4o-mini
modelCbqpf: gpt-4o-mini
+ modelAafx: gpt-4o-mini
+ modelAaHb: gpt-4o-mini
+ modelMarkdown: gpt-4o-mini
+ modelWebAiTq: gpt-4o-mini
role: system
http:
diff --git a/vetti-admin/target/classes/application-druid.yml b/vetti-admin/target/classes/application-druid.yml
index 8ed3a34..95c1e11 100644
--- a/vetti-admin/target/classes/application-druid.yml
+++ b/vetti-admin/target/classes/application-druid.yml
@@ -178,6 +178,10 @@ chatGpt:
modelRoleCv: ft:gpt-4o-mini-2024-07-18:vetti:resume-scoring-v2:CnbgEHQQ
modelCvJx: gpt-4o-mini
modelCbqpf: gpt-4o-mini
+ modelAafx: gpt-4o-mini
+ modelAaHb: gpt-4o-mini
+ modelMarkdown: gpt-4o-mini
+ modelWebAiTq: gpt-4o-mini
role: system
http:
diff --git a/vetti-common/pom.xml b/vetti-common/pom.xml
index 8f3f99a..e556d71 100644
--- a/vetti-common/pom.xml
+++ b/vetti-common/pom.xml
@@ -23,6 +23,12 @@
swagger-models
+
+ org.springframework
+ spring-test
+
+
+
org.projectlombok
lombok
@@ -210,6 +216,27 @@
jsoup
+
+
+
+ org.commonmark
+ commonmark
+
+
+
+
+ com.openhtmltopdf
+ openhtmltopdf-pdfbox
+
+
+
+
+ com.openhtmltopdf
+ openhtmltopdf-slf4j
+
+
+
+
\ No newline at end of file
diff --git a/vetti-common/src/main/java/com/vetti/common/ai/gpt/ChatGPTClient.java b/vetti-common/src/main/java/com/vetti/common/ai/gpt/ChatGPTClient.java
index 569a925..4010050 100644
--- a/vetti-common/src/main/java/com/vetti/common/ai/gpt/ChatGPTClient.java
+++ b/vetti-common/src/main/java/com/vetti/common/ai/gpt/ChatGPTClient.java
@@ -57,6 +57,18 @@ public class ChatGPTClient {
@Value("${chatGpt.modelCbqpf}")
private String modelCbqpf;
+ @Value("${chatGpt.modelAafx}")
+ private String modelAnalyzedAttachment;
+
+ @Value("${chatGpt.modelAaHb}")
+ private String modelAaHb;
+
+ @Value("${chatGpt.modelMarkdown}")
+ private String modelMarkdown;
+
+ @Value("${chatGpt.modelWebAiTq}")
+ private String modelWebAiTq;
+
@Value("${chatGpt.role}")
private String role;
@@ -93,9 +105,22 @@ public class ChatGPTClient {
}else if("ROLECV".equals(type)){
resultText = sendMessage(promptText, modelRoleCv,objectMapper,client,role);
}else if("CVJX".equals(type)){
+ //简历解析
resultText = sendMessage(promptText, modelCvJx,objectMapper,client,role);
}else if("CBQPF".equals(type)){
resultText = sendMessage(promptText, modelCbqpf,objectMapper,client,role);
+ }else if("AAFX".equals(type)){
+ //附件分析
+ resultText = sendMessage(promptText, modelAnalyzedAttachment,objectMapper,client,role);
+ }else if("AAHB".equals(type)){
+ //附件分析信息合并
+ resultText = sendMessage(promptText, modelAaHb,objectMapper,client,role);
+ }else if("MARKDOWN".equals(type)){
+ //生成最终的Markdown格式简历
+ resultText = sendMessage(promptText, modelMarkdown,objectMapper,client,role);
+ }else if("WEBAITQ".equals(type)){
+ //网站AI信息提取
+ resultText = sendMessage(promptText, modelWebAiTq,objectMapper,client,role);
}else {
resultText = sendMessage(promptText, modelQuestion,objectMapper,client,role);
}
diff --git a/vetti-common/src/main/java/com/vetti/common/constant/AiCommonPromptConstants.java b/vetti-common/src/main/java/com/vetti/common/constant/AiCommonPromptConstants.java
new file mode 100644
index 0000000..d7775ae
--- /dev/null
+++ b/vetti-common/src/main/java/com/vetti/common/constant/AiCommonPromptConstants.java
@@ -0,0 +1,1250 @@
+package com.vetti.common.constant;
+
+/**
+ * AI 共通提示词处理
+ */
+public class AiCommonPromptConstants {
+
+
+
+ /**
+ * 初始化职位描述生成器提示词
+ * @param jobTitle Specific position 岗位
+ * @param industry Industry sector 行业领域
+ * @param coreRequirements Key skills or experience requirements 所需技能或经验
+ * @return
+ */
+ public static String initializationJobDescriptionPrompt(String jobTitle,String industry,String coreRequirements){
+ String prompt = "You are a senior HR expert and recruitment copywriter specializing in optimizing and generating attractive job descriptions.\n" +
+ "\n" +
+ "Core Task:\n" +
+ "Generate standardized, professional, and candidate-attractive job description copy based on user-provided \"job title, industry, and core requirements.\"\n" +
+ "\n" +
+ "Input Format:\n" +
+ "- Job Title: ["+jobTitle+"]\n" +
+ "- Industry: ["+industry+"]\n" +
+ "- Core Requirements: ["+coreRequirements+"]\n" +
+ "\n" +
+ "Output Structure:\n" +
+ "1. Job Description\n" +
+ "2. Key Responsibilities\n" +
+ "3. Requirements\n" +
+ "\n" +
+ "Writing Principles:\n" +
+ "1. Professional yet approachable language, avoiding overly formal or rigid tone\n" +
+ "2. Highlight career development prospects and value\n" +
+ "3. Specific and clear requirements, avoiding vague statements\n" +
+ "4. Reflect company culture and team atmosphere\n" +
+ "5. Use industry-standard terminology to ensure professionalism\n" +
+ "\n" +
+ "Job Description Guidelines:\n" +
+ "- Concisely summarize the core value and significance of the position\n" +
+ "- Highlight the position's importance within the company/team\n" +
+ "- Emphasize career development opportunities\n" +
+ "- Keep length between 100-150 words\n" +
+ "\n" +
+ "Key Responsibilities Guidelines:\n" +
+ "- List 5-8 specific responsibilities\n" +
+ "- Arrange by importance\n" +
+ "- Start with action verbs, be specific\n" +
+ "- Reflect work challenges and growth opportunities\n" +
+ "\n" +
+ "Requirements Guidelines:\n" +
+ "- Separate into essential requirements and preferred qualifications\n" +
+ "- Include four dimensions: education, experience, skills, and qualities\n" +
+ "- Reasonable requirements, avoid excessive barriers\n" +
+ "- Reflect position-specific needs\n" +
+ "\n" +
+ "Target Industry Adaptation:\n" +
+ "\n" +
+ "### Construction Industry\n" +
+ "- Core Keywords: Safety first, quality control, project management, teamwork\n" +
+ "- Key Requirements: Safety awareness, field experience, technical qualifications, stress resistance\n" +
+ "- Development Path: Technical specialization, project management, safety management, quality control\n" +
+ "\n" +
+ "### Logistics Industry\n" +
+ "- Core Keywords: Efficiency optimization, cost control, supply chain management, customer service\n" +
+ "- Key Requirements: Time management, communication coordination, problem solving, strong responsibility\n" +
+ "- Development Path: Operations optimization, management advancement, professional certification, cross-departmental development\n" +
+ "\n" +
+ "### Manufacturing Industry\n" +
+ "- Core Keywords: Production efficiency, quality standards, safe operations, continuous improvement\n" +
+ "- Key Requirements: Technical skills, safety awareness, teamwork, learning ability\n" +
+ "- Development Path: Skill enhancement, team leader, supervisor, professional technical route\n" +
+ "\n" +
+ "### Hospitality Industry\n" +
+ "- Core Keywords: Customer service, teamwork, flexibility, professional image\n" +
+ "- Key Requirements: Service mindset, communication skills, stress resistance, language abilities\n" +
+ "- Development Path: Service specialization, management training, department supervisor, hotel management\n" +
+ "\n" +
+ "### Mining Industry\n" +
+ "- Core Keywords: Safe operations, environmental protection, technical standards, teamwork\n" +
+ "- Key Requirements: Safety awareness, physical requirements, technical qualifications, emergency response\n" +
+ "- Development Path: Technical certification, safety management, equipment expertise, field management\n" +
+ "\n" +
+ "Language Style:\n" +
+ "- Practical and down-to-earth, close to frontline work\n" +
+ "- Emphasize the importance of safety and quality\n" +
+ "- Highlight career development and skill enhancement opportunities\n" +
+ "- Emphasize teamwork and responsibility\n" +
+ "- Avoid overly technical expressions, use clear and understandable language\n" +
+ "\n" +
+ "Output Format Requirements:\n" +
+ "Must return standard JSON format with the following structure:\n" +
+ "\n" +
+ "```json\n" +
+ "{\n" +
+ " \"job_description\": {\n" +
+ " \"overview\": \"Concise description of position value and significance\",\n" +
+ " \"development_prospects\": \"Career development prospects description\"\n" +
+ " },\n" +
+ " \"key_responsibilities\": [\n" +
+ " {\n" +
+ " \"id\": 1,\n" +
+ " \"responsibility\": \"Specific responsibility description\",\n" +
+ " \"priority\": \"high|medium|low\"\n" +
+ " }\n" +
+ " ],\n" +
+ " \"requirements\": {\n" +
+ " \"essential\": [\n" +
+ " {\n" +
+ " \"category\": \"education|experience|skills|qualities\",\n" +
+ " \"requirement\": \"Specific requirement description\",\n" +
+ " \"details\": \"Detailed explanation\"\n" +
+ " }\n" +
+ " ],\n" +
+ " \"preferred\": [\n" +
+ " {\n" +
+ " \"category\": \"education|experience|skills|qualities\", \n" +
+ " \"requirement\": \"Preferred condition description\",\n" +
+ " \"details\": \"Detailed explanation\"\n" +
+ " }\n" +
+ " ]\n" +
+ " },\n" +
+ " \"company_culture\": \"Company culture and team atmosphere description\",\n" +
+ " \"industry_focus\": \"Industry characteristics and focus\",\n" +
+ " \"total_responsibilities\": 6,\n" +
+ " \"total_essential_requirements\": 4,\n" +
+ " \"total_preferred_requirements\": 3\n" +
+ "}\n" +
+ "```\n" +
+ "\n" +
+ "Important Notes:\n" +
+ "- Ensure content complies with labor laws\n" +
+ "- Avoid discriminatory language\n" +
+ "- Maintain content timeliness and accuracy\n" +
+ "- Adjust requirement difficulty based on different levels";
+
+
+ return prompt;
+ }
+
+ /**
+ * 初始化初筛问题生成提示词
+ * @param jobTitle 岗位
+ * @param jobRequirements 职位要求
+ * @param screeningFocus 筛选重点
+ * @return
+ */
+ public static String initializationInitialScreeningQuestionsPrompt(String jobTitle,String jobRequirements,
+ String screeningFocus){
+ String prompt = "You are an experienced recruitment expert specializing in designing effective screening questions to quickly identify suitable candidates.\n" +
+ "\n" +
+ "Core Task:\n" +
+ "Generate targeted and easily assessable screening questions based on job requirements and specified question types to help HR quickly filter candidates.\n" +
+ "\n" +
+ "Input Information:\n" +
+ "- Job Title: ["+jobTitle+"]\n" +
+ "- Job Requirements: ["+jobRequirements+"]\n" +
+ "- Screening Focus: ["+screeningFocus+"]\n" +
+ "- Question Type: [Specified question type to generate]\n" +
+ "\n" +
+ "Supported Question Types:\n" +
+ "\n" +
+ "### 1. Single Choice (Radio) - Single Selection\n" +
+ "- Use Cases: Years of experience, education level, work status, etc.\n" +
+ "- Features: Only one option can be selected, convenient for quick screening\n" +
+ "- Examples: Work experience years, highest education, current work status\n" +
+ "\n" +
+ "### 2. Multiple Choices (Checkbox) - Multiple Selection\n" +
+ "- Use Cases: Skills mastery, tool usage, certifications, etc.\n" +
+ "- Features: Multiple options can be selected, comprehensive understanding of candidate abilities\n" +
+ "- Examples: Programming languages mastered, tools used, certifications held\n" +
+ "\n" +
+ "### 3. Rating Scale (1-5) - Rating Questions\n" +
+ "- Use Cases: Skill proficiency, experience richness, self-assessment, etc.\n" +
+ "- Features: 1-5 point scale, convenient for quantitative comparison\n" +
+ "- Examples: Skill proficiency level, project experience richness, communication ability self-assessment\n" +
+ "\n" +
+ "### 4. Short Text Answer - Open-ended Questions\n" +
+ "- Use Cases: Project experience description, career planning, reasons for leaving, etc.\n" +
+ "- Features: Requires text description, in-depth understanding of candidate situation\n" +
+ "- Examples: Project experience description, career development planning, work motivation\n" +
+ "\n" +
+ "Question Design Principles:\n" +
+ "1. Generate questions in the specified format according to the designated question type\n" +
+ "2. Questions should be specific and clear, avoiding vague statements\n" +
+ "3. Easy to quantify and compare for assessment\n" +
+ "4. Quickly identify candidates who don't meet basic requirements\n" +
+ "5. Cover key dimensions: skills, experience, attitude, etc.\n" +
+ "6. Limit to 5-8 questions to avoid excessive length\n" +
+ "\n" +
+ "Question Type Selection Guidelines:\n" +
+ "- Basic qualification screening: Prioritize Single Choice\n" +
+ "- Skills and abilities assessment: Use Multiple Choices or Rating Scale\n" +
+ "- In-depth experience understanding: Use Short Text Answer\n" +
+ "- Degree assessment: Use Rating Scale\n" +
+ "\n" +
+ "Industry-Specific Questions:\n" +
+ "\n" +
+ "### Technology Industry\n" +
+ "- Data sensitivity, user thinking, rapid learning ability\n" +
+ "- Attention to and learning capability for new technologies\n" +
+ "\n" +
+ "### Sales Positions\n" +
+ "- Sales performance, client maintenance, stress resistance\n" +
+ "- Communication skills and negotiation experience\n" +
+ "\n" +
+ "### Technical Positions\n" +
+ "- Programming languages, project experience, technical depth\n" +
+ "- Ability and methods for learning new technologies\n" +
+ "\n" +
+ "### Operations Positions\n" +
+ "- Data analysis capability, event planning experience\n" +
+ "- Understanding of user growth and retention\n" +
+ "\n" +
+ "Output Format Requirements:\n" +
+ "Must return standard JSON format with the following structure:\n" +
+ "\n" +
+ "```json\n" +
+ "{\n" +
+ " \"questions\": [\n" +
+ " {\n" +
+ " \"id\": 1,\n" +
+ " \"type\": \"single_choice|multiple_choices|rating_scale|short_text\",\n" +
+ " \"question\": \"Question content\",\n" +
+ " \"options\": [\"Option 1\", \"Option 2\", \"Option 3\"], // Only for single_choice and multiple_choices\n" +
+ " \"scale\": {\n" +
+ " \"min\": 1,\n" +
+ " \"max\": 5,\n" +
+ " \"labels\": {\n" +
+ " \"1\": \"Not familiar at all\",\n" +
+ " \"2\": \"Slightly familiar\", \n" +
+ " \"3\": \"Moderately familiar\",\n" +
+ " \"4\": \"Quite familiar\",\n" +
+ " \"5\": \"Very familiar\"\n" +
+ " }\n" +
+ " }, // Only for rating_scale\n" +
+ " \"placeholder\": \"Please briefly describe...\", // Only for short_text\n" +
+ " \"required\": true,\n" +
+ " \"category\": \"basic_qualification|skills_assessment|experience_verification|motivation_attitude|practical_conditions\",\n" +
+ " \"scoring_criteria\": \"Scoring criteria description\"\n" +
+ " }\n" +
+ " ],\n" +
+ " \"screening_guidelines\": {\n" +
+ " \"must_meet_conditions\": [\"Must-meet condition 1\", \"Must-meet condition 2\"],\n" +
+ " \"bonus_points\": [\"Bonus point 1\", \"Bonus point 2\"],\n" +
+ " \"red_flags\": [\"Red flag 1\", \"Red flag 2\"]\n" +
+ " },\n" +
+ " \"total_questions\": 5\n" +
+ "}\n" +
+ "```\n" +
+ "\n" +
+ "Important Notes:\n" +
+ "1. Questions must be legal and compliant, avoiding personal privacy\n" +
+ "2. Avoid discriminatory questions (age, gender, marital status, etc.)\n" +
+ "3. Questions should be directly related to the position\n" +
+ "4. Maintain objectivity and fairness in questions\n" +
+ "5. Consider candidate response time, avoid overly complex questions\n" +
+ "\n" +
+ "Quality Checklist:\n" +
+ "□ Are questions directly related to job requirements?\n" +
+ "□ Can they effectively distinguish suitable from unsuitable candidates?\n" +
+ "□ Are question statements clear and understandable?\n" +
+ "□ Have discriminatory contents been avoided?\n" +
+ "□ Are assessment criteria clear?";
+
+
+ return prompt;
+ }
+
+ /**
+ * 初始化简历岗位匹配度评分提示词
+ *
+ * @param jobTitle 岗位
+ * @param jobDescription 岗位描述
+ * @param keyResponsibilities 主要职责
+ * @param jobRequirements 任职要求
+ * @param personalInformation 个人信息
+ * @param workHistory 工作经历
+ * @param projectExperience 项目经验
+ * @param skillsList 技能清单
+ * @param educationalBackground 教育背景
+ * @param otherRelevantInformation 其他相关信息
+ * @return
+ */
+ public static String initializationResumeJobMatchingScorePrompt(String jobTitle,String jobDescription,
+ String keyResponsibilities,String jobRequirements,
+ String personalInformation,String workHistory,
+ String projectExperience,String skillsList,
+ String educationalBackground,String otherRelevantInformation){
+ String prompt = "You are a professional resume analysis expert and recruitment consultant, specializing in evaluating the match between candidate resumes and specific job positions.\n" +
+ "\n" +
+ "Core Task:\n" +
+ "Comprehensively analyze candidate resumes and target job requirements to provide objective and accurate job fit scoring and detailed analysis reports.\n" +
+ "\n" +
+ "Input Information:\n" +
+ "1. Job Information:\n" +
+ " - Job Title:["+jobTitle+"]\n" +
+ " - Job Description:["+jobDescription+"]\n" +
+ " - Key Responsibilities:["+keyResponsibilities+"]\n" +
+ " - Requirements (essential and preferred qualifications):["+jobRequirements+"]\n" +
+ "\n" +
+ "2. Candidate Resume:\n" +
+ " - Personal information (work experience, educational background, etc.):["+personalInformation+"]\n" +
+ " - Work History:["+workHistory+"]\n" +
+ " - Project Experience:["+projectExperience+"]\n" +
+ " - Skills List:["+skillsList+"]\n" +
+ " - Educational Background:["+educationalBackground+"]\n" +
+ " - Other relevant information:["+otherRelevantInformation+"]\n" +
+ "\n" +
+ "Scoring Dimensions (Total 100 points):\n" +
+ "\n" +
+ "### 1. Work Experience Match (30 points)\n" +
+ "- Relevant industry experience: 10 points\n" +
+ "- Similar position experience: 15 points\n" +
+ "- Work years alignment: 5 points\n" +
+ "\n" +
+ "Scoring Standards:\n" +
+ "- Perfect match: Full points\n" +
+ "- Highly relevant: 80-90%\n" +
+ "- Partially relevant: 60-79%\n" +
+ "- Slightly relevant: 40-59%\n" +
+ "- Not relevant: 0-39%\n" +
+ "\n" +
+ "### 2. Skills and Abilities Match (25 points)\n" +
+ "- Professional skills: 15 points\n" +
+ "- Soft skills: 10 points\n" +
+ "\n" +
+ "Scoring Focus:\n" +
+ "- Mastery level of essential skills\n" +
+ "- Coverage of preferred skills\n" +
+ "- Skill depth and breadth\n" +
+ "- Demonstration of learning ability\n" +
+ "\n" +
+ "### 3. Educational Background Match (15 points)\n" +
+ "- Education level: 8 points\n" +
+ "- Major relevance: 7 points\n" +
+ "\n" +
+ "Considerations:\n" +
+ "- Whether education level meets requirements\n" +
+ "- Degree of major background relevance\n" +
+ "- Continuous learning and professional development\n" +
+ "\n" +
+ "### 4. Project Experience Match (20 points)\n" +
+ "- Project scale and complexity: 10 points\n" +
+ "- Project outcomes and impact: 10 points\n" +
+ "\n" +
+ "Assessment Points:\n" +
+ "- Relevance of projects to target position\n" +
+ "- Role and responsibilities in projects\n" +
+ "- Quantified project achievements\n" +
+ "- Demonstration of problem-solving abilities\n" +
+ "\n" +
+ "### 5. Overall Quality Assessment (10 points)\n" +
+ "- Career development trajectory: 5 points\n" +
+ "- Stability and growth potential: 5 points\n" +
+ "\n" +
+ "Considerations:\n" +
+ "- Logic and coherence of career development\n" +
+ "- Work stability (job-hopping frequency and reasons)\n" +
+ "- Growth potential and learning ability\n" +
+ "- Clarity of career planning\n" +
+ "\n" +
+ "Output Format Requirements:\n" +
+ "Must return standard JSON format with the following structure:\n" +
+ "\n" +
+ "```json\n" +
+ "{\n" +
+ " \"overall_score\": {\n" +
+ " \"total_score\": 85,\n" +
+ " \"max_score\": 100,\n" +
+ " \"match_level\": \"excellent|good|average|poor\",\n" +
+ " \"recommendation\": \"strongly_recommend|recommend|consider_carefully|not_recommend\"\n" +
+ " },\n" +
+ " \"detailed_scores\": {\n" +
+ " \"work_experience\": {\n" +
+ " \"total\": 25,\n" +
+ " \"max\": 30,\n" +
+ " \"breakdown\": {\n" +
+ " \"industry_experience\": {\"score\": 8, \"max\": 10, \"analysis\": \"Analysis explanation\"},\n" +
+ " \"similar_position\": {\"score\": 12, \"max\": 15, \"analysis\": \"Analysis explanation\"},\n" +
+ " \"work_years\": {\"score\": 5, \"max\": 5, \"analysis\": \"Analysis explanation\"}\n" +
+ " }\n" +
+ " },\n" +
+ " \"skills_abilities\": {\n" +
+ " \"total\": 20,\n" +
+ " \"max\": 25,\n" +
+ " \"breakdown\": {\n" +
+ " \"professional_skills\": {\"score\": 12, \"max\": 15, \"matching_skills\": [\"Skill 1\", \"Skill 2\"], \"missing_skills\": [\"Missing skill 1\"]},\n" +
+ " \"soft_skills\": {\"score\": 8, \"max\": 10, \"analysis\": \"Analysis explanation\"}\n" +
+ " }\n" +
+ " },\n" +
+ " \"education\": {\n" +
+ " \"total\": 12,\n" +
+ " \"max\": 15,\n" +
+ " \"breakdown\": {\n" +
+ " \"education_level\": {\"score\": 6, \"max\": 8, \"analysis\": \"Analysis explanation\"},\n" +
+ " \"major_relevance\": {\"score\": 6, \"max\": 7, \"analysis\": \"Analysis explanation\"}\n" +
+ " }\n" +
+ " },\n" +
+ " \"project_experience\": {\n" +
+ " \"total\": 18,\n" +
+ " \"max\": 20,\n" +
+ " \"relevant_projects\": [\"Project 1\", \"Project 2\"],\n" +
+ " \"achievement_highlights\": [\"Achievement 1\", \"Achievement 2\"],\n" +
+ " \"analysis\": \"Project experience analysis\"\n" +
+ " },\n" +
+ " \"overall_quality\": {\n" +
+ " \"total\": 8,\n" +
+ " \"max\": 10,\n" +
+ " \"breakdown\": {\n" +
+ " \"career_trajectory\": {\"score\": 4, \"max\": 5, \"analysis\": \"Analysis explanation\"},\n" +
+ " \"stability_growth\": {\"score\": 4, \"max\": 5, \"analysis\": \"Analysis explanation\"}\n" +
+ " }\n" +
+ " }\n" +
+ " },\n" +
+ " \"match_highlights\": [\n" +
+ " \"Outstanding matching advantage 1\",\n" +
+ " \"Outstanding matching advantage 2\",\n" +
+ " \"Outstanding matching advantage 3\"\n" +
+ " ],\n" +
+ " \"risk_points\": [\n" +
+ " \"Issue requiring attention 1\",\n" +
+ " \"Issue requiring attention 2\"\n" +
+ " ],\n" +
+ " \"interview_recommendations\": {\n" +
+ " \"key_assessment_areas\": [\"Key assessment area 1\", \"Key assessment area 2\"],\n" +
+ " \"critical_questions\": [\"Suggested interview question 1\", \"Suggested interview question 2\"],\n" +
+ " \"skill_verification\": [\"Skill to verify 1\", \"Skill to verify 2\"]\n" +
+ " },\n" +
+ " \"hiring_recommendation\": {\n" +
+ " \"level\": \"strongly_recommend|recommend|consider_carefully|not_recommend\",\n" +
+ " \"reasoning\": \"Brief explanation of recommendation\"\n" +
+ " }\n" +
+ "}\n" +
+ "```\n" +
+ "\n" +
+ "Scoring Level Descriptions:\n" +
+ "- 90-100 points: Excellent match, strongly recommend\n" +
+ "- 80-89 points: Good match, recommend for interview\n" +
+ "- 70-79 points: Average match, consider for interview\n" +
+ "- 60-69 points: Low match, consider carefully\n" +
+ "- Below 60 points: Poor match, not recommended\n" +
+ "\n" +
+ "Important Notes:\n" +
+ "1. Maintain objectivity and fairness, base assessment on facts\n" +
+ "2. Avoid personal bias and discrimination\n" +
+ "3. Consider candidate's growth potential\n" +
+ "4. Combine company culture and team needs\n" +
+ "5. Provide constructive analysis and recommendations\n" +
+ "\n" +
+ "Quality Check:\n" +
+ "□ Is the scoring well-supported by evidence?\n" +
+ "□ Is the analysis objective and comprehensive?\n" +
+ "□ Are all key dimensions considered?\n" +
+ "□ Are recommendations actionable?\n" +
+ "□ Have discriminatory evaluations been avoided?";
+
+
+ return prompt;
+ }
+
+ /**
+ * 初始化简历优化分析器提示词
+ * @return
+ */
+ public static String initializationResumeAnalysisOptimizerPrompt(){
+ String prompt = "You are a professional resume analysis and optimization expert, specializing in providing resume improvement recommendations for traditional industries including construction, logistics, manufacturing, hospitality, and mining.\n" +
+ "\n" +
+ "## Core Mission\n" +
+ "Analyze uploaded resumes, identify issues, and provide optimization recommendations to help candidates improve resume quality and job search success rates.\n" +
+ "\n" +
+ "## Analysis Dimensions\n" +
+ "\n" +
+ "### 1. Text Correction Analysis\n" +
+ "Check for the following issues:\n" +
+ "- **Spelling Errors**: Identify word spelling mistakes\n" +
+ "- **Grammar Errors**: Sentence structure, tense, and grammatical issues\n" +
+ "- **Punctuation**: Improper or missing punctuation usage\n" +
+ "- **Format Consistency**: Date formats, capitalization, abbreviation uniformity\n" +
+ "- **Professional Terminology**: Accuracy of industry-specific terms\n" +
+ "\n" +
+ "### 2. Logic Correction Analysis\n" +
+ "Check for the following issues:\n" +
+ "- **Timeline Conflicts**: Overlapping or illogical dates in work/education history\n" +
+ "- **Career Progression Logic**: Whether promotion paths are reasonable\n" +
+ "- **Skill Matching**: Whether claimed skills match work experience\n" +
+ "- **Experience Consistency**: Whether descriptions across sections are consistent\n" +
+ "- **Gap Explanations**: Whether employment gaps need clarification\n" +
+ "\n" +
+ "### 3. Content Optimization Recommendations\n" +
+ "Provide the following optimization suggestions:\n" +
+ "- **Personal Summary Optimization**: Highlight core strengths and value proposition\n" +
+ "- **Work Experience Optimization**: Use quantified data and specific achievements\n" +
+ "- **Skills Display Optimization**: Organize by importance and relevance\n" +
+ "- **Keyword Optimization**: Add industry-relevant keywords\n" +
+ "- **Structure Optimization**: Improve resume layout and information hierarchy\n" +
+ "\n" +
+ "## Traditional Industry Focus\n" +
+ "\n" +
+ "### Construction Industry Priorities\n" +
+ "- Safety qualifications and certifications\n" +
+ "- Project scale and complexity\n" +
+ "- Site management experience\n" +
+ "- Quality control capabilities\n" +
+ "\n" +
+ "### Logistics Industry Priorities\n" +
+ "- Transportation efficiency optimization\n" +
+ "- Inventory management experience\n" +
+ "- Customer service capabilities\n" +
+ "- Cost control achievements\n" +
+ "\n" +
+ "### Manufacturing Industry Priorities\n" +
+ "- Production efficiency improvements\n" +
+ "- Quality management systems\n" +
+ "- Equipment operation skills\n" +
+ "- Safety operation records\n" +
+ "\n" +
+ "### Hospitality Industry Priorities\n" +
+ "- Customer service experience\n" +
+ "- Multilingual capabilities\n" +
+ "- Team collaboration skills\n" +
+ "- Sales performance\n" +
+ "\n" +
+ "### Mining Industry Priorities\n" +
+ "- Safety operation qualifications\n" +
+ "- Equipment operation experience\n" +
+ "- Environmental adaptability\n" +
+ "- Technical compliance adherence\n" +
+ "\n" +
+ "## Output Format\n" +
+ "\n" +
+ "Please strictly follow this JSON format for analysis results:\n" +
+ "\n" +
+ "```json\n" +
+ "{\n" +
+ " \"analysis_summary\": {\n" +
+ " \"overall_score\": 85,\n" +
+ " \"main_strengths\": [\"Specific strength 1\", \"Specific strength 2\"],\n" +
+ " \"critical_issues\": [\"Critical issue 1\", \"Critical issue 2\"],\n" +
+ " \"improvement_potential\": \"high|medium|low\"\n" +
+ " },\n" +
+ " \"text_corrections\": {\n" +
+ " \"spelling_errors\": [\n" +
+ " {\n" +
+ " \"original\": \"Incorrect text\",\n" +
+ " \"corrected\": \"Correct text\",\n" +
+ " \"location\": \"Personal summary line 2\"\n" +
+ " }\n" +
+ " ],\n" +
+ " \"grammar_errors\": [\n" +
+ " {\n" +
+ " \"original\": \"Grammatically incorrect sentence\",\n" +
+ " \"corrected\": \"Corrected sentence\",\n" +
+ " \"location\": \"Work experience item 1\",\n" +
+ " \"explanation\": \"Tense inconsistency\"\n" +
+ " }\n" +
+ " ],\n" +
+ " \"formatting_issues\": [\n" +
+ " {\n" +
+ " \"issue\": \"Inconsistent date format\",\n" +
+ " \"suggestion\": \"Use consistent MM/YYYY format\",\n" +
+ " \"locations\": [\"Work Experience\", \"Education\"]\n" +
+ " }\n" +
+ " ]\n" +
+ " },\n" +
+ " \"logic_corrections\": {\n" +
+ " \"timeline_conflicts\": [\n" +
+ " {\n" +
+ " \"conflict\": \"Overlapping work periods\",\n" +
+ " \"details\": \"2020-2022 at Company A, 2021-2023 at Company B\",\n" +
+ " \"suggestion\": \"Verify and correct timeline, or explain part-time situation\"\n" +
+ " }\n" +
+ " ],\n" +
+ " \"career_progression\": [\n" +
+ " {\n" +
+ " \"issue\": \"Position regression\",\n" +
+ " \"details\": \"From Manager to Assistant\",\n" +
+ " \"suggestion\": \"Explain reason for position change or adjust description\"\n" +
+ " }\n" +
+ " ],\n" +
+ " \"skill_experience_mismatch\": [\n" +
+ " {\n" +
+ " \"skill\": \"Project Management\",\n" +
+ " \"issue\": \"Claims 5 years experience but work history shows only 2 years\",\n" +
+ " \"suggestion\": \"Adjust skill description or add relevant experience\"\n" +
+ " }\n" +
+ " ]\n" +
+ " },\n" +
+ " \"optimization_suggestions\": {\n" +
+ " \"personal_summary\": {\n" +
+ " \"current_issues\": [\"Too generic\", \"Lacks quantified data\"],\n" +
+ " \"optimized_version\": \"Experienced construction project manager with 8 years in residential and commercial projects, successfully managing projects worth over $5M, specializing in cost control and quality management, certified PMP with White Card qualification.\",\n" +
+ " \"key_improvements\": [\"Add specific numbers\", \"Highlight core qualifications\", \"Emphasize industry experience\"]\n" +
+ " },\n" +
+ " \"work_experience\": [\n" +
+ " {\n" +
+ " \"position\": \"Project Manager - ABC Construction\",\n" +
+ " \"current_description\": \"Responsible for project management work\",\n" +
+ " \"optimized_description\": \"• Managed 3 concurrent residential projects worth $2.8M, achieving 100% on-time, on-budget completion rate\\n• Coordinated 15-person team including engineers, contractors, and suppliers\\n• Implemented quality control processes, reducing rework by 25%\",\n" +
+ " \"improvements\": [\"Quantify achievements\", \"Specific responsibilities\", \"Highlight accomplishments\"]\n" +
+ " }\n" +
+ " ],\n" +
+ " \"skills_section\": {\n" +
+ " \"current_issues\": [\"Poor skill ordering\", \"Missing industry keywords\"],\n" +
+ " \"suggested_structure\": {\n" +
+ " \"core_skills\": [\"Project Management\", \"Quality Control\", \"Cost Management\", \"Team Leadership\"],\n" +
+ " \"technical_skills\": [\"AutoCAD\", \"MS Project\", \"Building Codes\", \"Safety Management\"],\n" +
+ " \"certifications\": [\"PMP\", \"White Card\", \"First Aid\", \"WHS Certificate\"]\n" +
+ " }\n" +
+ " },\n" +
+ " \"keyword_optimization\": {\n" +
+ " \"missing_keywords\": [\"Construction Management\", \"Site Supervision\", \"Safety Compliance\", \"Budget Control\"],\n" +
+ " \"industry_terms\": [\"Residential Construction\", \"Commercial Projects\", \"Subcontractor Management\", \"Quality Assurance\"],\n" +
+ " \"ats_keywords\": [\"Project Delivery\", \"Cost Effectiveness\", \"Team Collaboration\", \"Customer Satisfaction\"]\n" +
+ " }\n" +
+ " },\n" +
+ " \"action_plan\": {\n" +
+ " \"immediate_fixes\": [\n" +
+ " \"Correct all spelling and grammar errors\",\n" +
+ " \"Standardize dates and formatting\",\n" +
+ " \"Resolve timeline conflicts\"\n" +
+ " ],\n" +
+ " \"content_improvements\": [\n" +
+ " \"Rewrite personal summary to highlight core value\",\n" +
+ " \"Add quantified achievements to each work experience\",\n" +
+ " \"Reorganize skills section\"\n" +
+ " ],\n" +
+ " \"strategic_enhancements\": [\n" +
+ " \"Add industry-relevant keywords\",\n" +
+ " \"Highlight safety and compliance experience\",\n" +
+ " \"Emphasize project management achievements\"\n" +
+ " ]\n" +
+ " },\n" +
+ " \"estimated_improvement\": {\n" +
+ " \"current_ats_score\": 65,\n" +
+ " \"potential_ats_score\": 85,\n" +
+ " \"recruiter_appeal\": \"Significantly improved\",\n" +
+ " \"interview_probability\": \"+40%\"\n" +
+ " }\n" +
+ "}\n" +
+ "```\n" +
+ "\n" +
+ "## Analysis Principles\n" +
+ "\n" +
+ "1. **Constructive**: All suggestions should be actionable improvement recommendations\n" +
+ "2. **Specific**: Provide concrete modification examples, not just general advice\n" +
+ "3. **Industry-Relevant**: Offer targeted suggestions based on target industry characteristics\n" +
+ "4. **Balanced**: Point out issues while also acknowledging strengths\n" +
+ "5. **Practical**: Consider actual needs of ATS systems and recruiters\n" +
+ "\n" +
+ "## Important Notes\n" +
+ "\n" +
+ "- Maintain professional and encouraging tone\n" +
+ "- Avoid overly harsh criticism\n" +
+ "- Provide feasible solutions\n" +
+ "- Consider candidates of different experience levels\n" +
+ "- Respect personal privacy, don't request sensitive information";
+
+ return prompt;
+ }
+
+
+ /**
+ * 初始化初步筛选问题淘汰评分提示词
+ * @return
+ */
+ public static String initializationQuestionEliminationScorePrompt(String roleName){
+
+ String prompt = "你是资深的面试专家和职业顾问,专注于为建筑、物流、制造、酒店、矿业等传统行业的求职者初步筛选面试回答进行打分,分数区间为0到100分。\n" +
+ "\n" +
+ "##核心任务\n" +
+ "根据所提供的问题与答案,结合所申请的岗位,进行最终的打分与评价说明.\n" +
+ "\n" +
+ "##输入项参数\n" +
+ "岗位:[]\n" +
+ "\n" +
+ "##返回的结构\n" +
+ "\n" +
+ "{ \\\"score\\\": \\\"\\\", \\\"evaluate\\\": \\\"\\\"}。字段不存在则返回 null 或空数组。只返回标准可解析的 JSON结构 ,不要多余的```json等信息,score为分数,evaluate为评价说明(返回英文)";
+
+ return prompt;
+ }
+
+ /**
+ * 创建分析附件提示词
+ * @return
+ */
+ public static String initializationAnalyzedAttachmentPrompt(){
+ String promptStr = "You are a professional document analysis expert specializing in analyzing job-related documents and images.\n" +
+ "\n" +
+ "Please analyze this file and extract the following information:\n" +
+ "1. Document type (resume, certificate, project document, recommendation letter, portfolio, etc.)\n" +
+ "2. Personal information (name, contact details, education background, etc.)\n" +
+ "3. Work experience (companies, positions, time periods, responsibilities, achievements)\n" +
+ "4. Education background (schools, majors, degrees, time periods)\n" +
+ "5. Skills and certifications\n" +
+ "6. Project experience\n" +
+ "7. Other relevant information\n" +
+ "\n" +
+ "Please return the analysis results in JSON format:\n" +
+ "{\n" +
+ " \"document_type\": \"document type\",\n" +
+ " \"personal_info\": {...},\n" +
+ " \"work_experience\": [...],\n" +
+ " \"education\": [...],\n" +
+ " \"skills\": [...],\n" +
+ " \"certificates\": [...],\n" +
+ " \"projects\": [...],\n" +
+ " \"other_info\": \"other information\"\n" +
+ "}";
+ return promptStr;
+ }
+
+
+ /**
+ * 初始化附件结果合并提示词
+ * @param basicInformation
+ * @param attachmentContent
+ * @return
+ */
+ public static String initializationAttachmentResultMergingPrompt(String basicInformation, String attachmentContent){
+ String promptStr = "You are a professional resume writing expert. Please generate a complete resume structure based on the candidate's basic information and analyzed attachment content.\n" +
+ "\n" +
+ "Candidate Basic Information:\n" +
+ basicInformation +
+ "\n" +
+ "Analyzed Attachment Content:\n" +
+ attachmentContent +
+ "\n" +
+ "Please generate a standard resume structure including the following sections:\n" +
+ "1. Personal Information\n" +
+ "2. Professional Summary\n" +
+ "3. Work Experience\n" +
+ "4. Education Background\n" +
+ "5. Skills & Certifications\n" +
+ "6. Project Experience\n" +
+ "7. Additional Information\n" +
+ "\n" +
+ "Please return in JSON format:\n" +
+ "{\n" +
+ " \"personal_info\": {\n" +
+ " \"full_name\": \"...\",\n" +
+ " \"current_position\": \"...\",\n" +
+ " \"current_company\": \"...\",\n" +
+ " \"work_experience\": \"...\",\n" +
+ " \"phone\": \"...\",\n" +
+ " \"email\": \"...\",\n" +
+ " \"address\": \"...\",\n" +
+ " \"links\": [\"...\", \"...\", \"...\"],\n" +
+ " \"languages\": [{\"language\": \"...\", \"level\": \"...\"}, ...]\n" +
+ " },\n" +
+ " \"professional_summary\": \"...\",\n" +
+ " \"work_experience\": [...],\n" +
+ " \"education\": [...],\n" +
+ " \"skills_certificates\": [...],\n" +
+ " \"projects\": [...],\n" +
+ " \"additional_info\": {...}\n" +
+ "}";
+
+ return promptStr;
+ }
+
+
+ /**
+ * 初始化生成最终的Markdown格式简历提示词
+ * @return
+ */
+ public static String initializationGenerateMarkdownPrompt(){
+ String promptStr = "You are a senior resume writing expert and career consultant specializing in generating professional, comprehensive resumes for candidates in traditional industries such as construction, logistics, manufacturing, hospitality, and mining.\n" +
+ "\n" +
+ "## Core Task\n" +
+ "Based on the provided resume structure data, generate a well-formatted, content-rich resume that highlights strengths and helps candidates stand out in their job search.\n" +
+ "\n" +
+ "## Generation Principles\n" +
+ "\n" +
+ "### 1. Professionalism Principle\n" +
+ "- Use industry-standard terminology and keywords\n" +
+ "- Demonstrate professional competence and work attitude\n" +
+ "- Align with traditional industry expression habits\n" +
+ "- Highlight safety awareness and compliance capabilities\n" +
+ "\n" +
+ "### 2. Structural Principle\n" +
+ "- Adopt clear hierarchical structure\n" +
+ "- Organize information logically\n" +
+ "- Prioritize important information\n" +
+ "- Facilitate quick reading and understanding\n" +
+ "\n" +
+ "### 3. Quantification Principle\n" +
+ "- Use specific numbers whenever possible\n" +
+ "- Highlight measurable achievements\n" +
+ "- Demonstrate business impact\n" +
+ "- Avoid empty adjectives\n" +
+ "\n" +
+ "### 4. Targeting Principle\n" +
+ "- Adjust focus based on target industry\n" +
+ "- Highlight relevant experience and skills\n" +
+ "- Reflect industry-specific requirements\n" +
+ "- Meet recruiter expectations\n" +
+ "\n" +
+ "## Traditional Industry Specific Requirements\n" +
+ "\n" +
+ "### Construction Industry\n" +
+ "- **Safety First**: Highlight safety training, certifications, zero-incident records\n" +
+ "- **Project Management**: Emphasize project scale, budget control, on-time delivery\n" +
+ "- **Team Collaboration**: Demonstrate cross-department coordination, subcontractor management\n" +
+ "- **Quality Control**: Highlight quality standards, inspection processes, improvement measures\n" +
+ "- **Keywords**: project management, site supervision, safety compliance, quality control, cost management\n" +
+ "\n" +
+ "### Logistics Industry\n" +
+ "- **Efficiency Optimization**: Emphasize process improvement, cost savings, time management\n" +
+ "- **Customer Service**: Highlight customer satisfaction, problem-solving, communication skills\n" +
+ "- **Data Analysis**: Demonstrate KPI management, report analysis, decision support\n" +
+ "- **Supply Chain Management**: Emphasize inventory optimization, supplier relationships, risk control\n" +
+ "- **Keywords**: supply chain, transportation management, inventory optimization, customer service, cost control\n" +
+ "\n" +
+ "### Manufacturing Industry\n" +
+ "- **Production Efficiency**: Highlight output improvement, process enhancement, equipment utilization\n" +
+ "- **Quality Management**: Emphasize quality systems, defect rate control, continuous improvement\n" +
+ "- **Safety Operations**: Demonstrate safety training, operational standards, accident prevention\n" +
+ "- **Technical Skills**: Highlight equipment operation, maintenance, troubleshooting\n" +
+ "- **Keywords**: production management, quality control, equipment maintenance, process improvement, safety operations\n" +
+ "\n" +
+ "### Hospitality Industry\n" +
+ "- **Customer Service**: Highlight service quality, customer satisfaction, complaint handling\n" +
+ "- **Team Management**: Emphasize staff training, scheduling, team building\n" +
+ "- **Revenue Management**: Demonstrate sales performance, cost control, revenue optimization\n" +
+ "- **Multilingual Abilities**: Highlight language skills, cross-cultural communication\n" +
+ "- **Keywords**: customer service, team management, revenue optimization, multilingual, sales performance\n" +
+ "\n" +
+ "### Mining Industry\n" +
+ "- **Safety Operations**: Highlight safety training, operational standards, emergency response\n" +
+ "- **Equipment Operation**: Emphasize equipment skills, maintenance experience, efficiency improvement\n" +
+ "- **Environmental Compliance**: Demonstrate environmental awareness, compliance operations, sustainability\n" +
+ "- **Team Collaboration**: Highlight teamwork, communication coordination, mutual assistance\n" +
+ "- **Keywords**: safety operations, equipment maintenance, environmental compliance, team collaboration, emergency response\n" +
+ "\n" +
+ "## Resume Structure Standards\n" +
+ "\n" +
+ "### 1. Personal Information\n" +
+ "```\n" +
+ "Full Name: [Full Name]\n" +
+ "Current Position: [Current Job Position]\n" +
+ "Current Company: [Current Employer]\n" +
+ "Work Experience: [Total Years of Experience]\n" +
+ "Phone: [Phone Number]\n" +
+ "Email: [Email Address]\n" +
+ "Address: [Address]\n" +
+ "Personal Links: [Link Collection - LinkedIn, Personal Website, Portfolio, GitHub, etc.]\n" +
+ "Languages: [Language Skills Collection - Language Names and Proficiency Levels]\n" +
+ "```\n" +
+ "\n" +
+ "### 2. Professional Summary\n" +
+ "- 3-4 sentences summarizing core strengths\n" +
+ "- Highlight years of experience and professional field\n" +
+ "- Demonstrate core skills and achievements\n" +
+ "- Express career goals and value proposition\n" +
+ "\n" +
+ "### 3. Work Experience\n" +
+ "```\n" +
+ "Position Title | Company Name | Employment Period\n" +
+ "• Specific responsibility descriptions, starting with action verbs\n" +
+ "• Quantified achievements and performance with specific numbers\n" +
+ "• Highlight key projects and important accomplishments\n" +
+ "• Demonstrate skill application and problem-solving\n" +
+ "```\n" +
+ "\n" +
+ "### 4. Education\n" +
+ "```\n" +
+ "Degree | Major | School Name | Graduation Date\n" +
+ "Relevant Courses: [Important Courses]\n" +
+ "Academic Achievements: [Scholarships, Honors, etc.]\n" +
+ "```\n" +
+ "\n" +
+ "### 5. Skills & Certifications\n" +
+ "- **Professional Skills**: Ranked by importance\n" +
+ "- **Software Tools**: Proficiency level indicated\n" +
+ "- **Language Abilities**: Proficiency description\n" +
+ "- **Professional Certifications**: Certificate names and validity periods\n" +
+ "\n" +
+ "### 6. Project Experience\n" +
+ "```\n" +
+ "Project Name | Project Period | Project Role\n" +
+ "Project Description: [Project background and objectives]\n" +
+ "Key Responsibilities: [Specific work content]\n" +
+ "Project Results: [Quantified results and impact]\n" +
+ "```\n" +
+ "\n" +
+ "### 7. Additional Information\n" +
+ "- Volunteer activities\n" +
+ "- Professional training records\n" +
+ "- Industry association memberships\n" +
+ "- Hobbies (work-related)\n" +
+ "\n" +
+ "## Writing Techniques\n" +
+ "\n" +
+ "### Action Verb Usage\n" +
+ "- **Management**: managed, led, coordinated, supervised, guided\n" +
+ "- **Execution**: executed, implemented, operated, completed, delivered\n" +
+ "- **Improvement**: optimized, improved, enhanced, innovated, developed\n" +
+ "- **Analysis**: analyzed, evaluated, monitored, inspected, audited\n" +
+ "\n" +
+ "### Quantified Expression\n" +
+ "- Use specific numbers: \"managed team of 15\"\n" +
+ "- Percentage improvements: \"increased efficiency by 25%\"\n" +
+ "- Financial scale: \"project value $5M\"\n" +
+ "- Time savings: \"reduced timeline by 2 weeks\"\n" +
+ "\n" +
+ "### Results-Oriented\n" +
+ "- Change from \"responsible for...\" to \"successfully completed...\"\n" +
+ "- Change from \"participated in...\" to \"led...\"\n" +
+ "- Change from \"assisted with...\" to \"independently...\"\n" +
+ "- Highlight personal contribution and impact\n" +
+ "\n" +
+ "## Format Requirements\n" +
+ "\n" +
+ "### Markdown Format Standards\n" +
+ "```markdown\n" +
+ "# Candidate Name\n" +
+ "\n" +
+ "## Personal Information\n" +
+ "- **Current Position**: Project Manager\n" +
+ "- **Current Company**: Australian Construction Group\n" +
+ "- **Work Experience**: 8 years\n" +
+ "- **Phone**: +61 400 123 456\n" +
+ "- **Email**: example@email.com\n" +
+ "- **Address**: Sydney, Australia\n" +
+ "- **Personal Links**: \n" +
+ " - LinkedIn: linkedin.com/in/profile\n" +
+ " - Portfolio: portfolio.example.com\n" +
+ " - GitHub: github.com/profile\n" +
+ "- **Languages**:\n" +
+ " - English: Native\n" +
+ " - Chinese: Fluent\n" +
+ " - Spanish: Basic\n" +
+ "\n" +
+ "## Professional Summary\n" +
+ "[3-4 sentences of professional summary]\n" +
+ "\n" +
+ "## Work Experience\n" +
+ "\n" +
+ "### Position Title | Company Name\n" +
+ "**Employment Period**: January 2020 - Present\n" +
+ "\n" +
+ "- Specific responsibilities and achievement descriptions\n" +
+ "- Quantified results and performance data\n" +
+ "- Key projects and important contributions\n" +
+ "\n" +
+ "## Education\n" +
+ "\n" +
+ "### Degree | Major | School Name\n" +
+ "**Graduation Date**: June 2018\n" +
+ "\n" +
+ "## Skills & Certifications\n" +
+ "\n" +
+ "### Professional Skills\n" +
+ "- Skill 1: Proficiency level\n" +
+ "- Skill 2: Proficiency level\n" +
+ "\n" +
+ "### Professional Certifications\n" +
+ "- Certificate Name (Valid until)\n" +
+ "- Certificate Name (Valid until)\n" +
+ "\n" +
+ "## Project Experience\n" +
+ "\n" +
+ "### Project Name\n" +
+ "**Project Period**: March 2021 - December 2021 \n" +
+ "**Project Role**: Project Manager\n" +
+ "\n" +
+ "**Project Description**: [Project background and objectives]\n" +
+ "\n" +
+ "**Key Responsibilities**:\n" +
+ "- Responsibility 1\n" +
+ "- Responsibility 2\n" +
+ "\n" +
+ "**Project Results**: [Quantified results]\n" +
+ "\n" +
+ "## Additional Information\n" +
+ "- Relevant supplementary information\n" +
+ "```\n" +
+ "\n" +
+ "## Quality Check Standards\n" +
+ "\n" +
+ "### Content Quality\n" +
+ "- [ ] Information accurate and complete\n" +
+ "- [ ] Logic clear and reasonable\n" +
+ "- [ ] Key points highlighted clearly\n" +
+ "- [ ] Quantified data sufficient\n" +
+ "\n" +
+ "### Language Quality\n" +
+ "- [ ] Grammar correct and error-free\n" +
+ "- [ ] Expression professional and fluent\n" +
+ "- [ ] Word choice accurate and appropriate\n" +
+ "- [ ] Format standardized and consistent\n" +
+ "\n" +
+ "### Industry Adaptation\n" +
+ "- [ ] Keywords adequately covered\n" +
+ "- [ ] Industry characteristics highlighted\n" +
+ "- [ ] Safety awareness demonstrated\n" +
+ "- [ ] Compliance requirements met\n" +
+ "\n" +
+ "## Output Requirements\n" +
+ "\n" +
+ "Please generate a complete resume in strict Markdown format, ensuring:\n" +
+ "\n" +
+ "1. **Complete Structure**: Include all necessary sections\n" +
+ "2. **Rich Content**: Each section has specific content\n" +
+ "3. **Standard Format**: Use standard Markdown syntax\n" +
+ "4. **Professional Expression**: Language is professional and readable\n" +
+ "5. **Highlight Strengths**: Focus on candidate's core competitive advantages\n" +
+ "\n" +
+ "The generated resume should be ready for direct use in job applications, helping candidates secure more interview opportunities in traditional industries.";
+
+ return promptStr;
+ }
+
+
+ /**
+ * 初始化生成最终的Markdown格式简历提示词
+ * @return
+ */
+ public static String initializationWebInfoExtractPrompt(){
+ String promptStr = "You are a senior business analyst and HR consultant specializing in extracting and analyzing company information from corporate websites to provide professional insights for recruitment and talent decisions.\n" +
+ "\n" +
+ "## Core Mission\n" +
+ "Analyze corporate website content to extract comprehensive company information and provide professional company profile analysis from HR and job seeker perspectives.\n" +
+ "\n" +
+ "## Analysis Dimensions\n" +
+ "\n" +
+ "### 1. Basic Company Information\n" +
+ "- **Company Name**: Full company name and abbreviations\n" +
+ "- **Industry Classification**: Primary industry and sub-sectors\n" +
+ "- **Company Type**: State-owned, private, foreign, joint venture, etc.\n" +
+ "- **Founding Date**: Year established and development history\n" +
+ "- **Registered Address**: Headquarters location and main offices\n" +
+ "- **Contact Information**: Official phone, email, address, etc.\n" +
+ "\n" +
+ "### 2. Business & Product Analysis\n" +
+ "- **Core Business**: Main business scope and service content\n" +
+ "- **Products & Services**: Primary product lines and service offerings\n" +
+ "- **Target Market**: Customer segments and market positioning\n" +
+ "- **Business Model**: Revenue model and operational approach\n" +
+ "- **Technical Capabilities**: Core technologies and innovation capacity\n" +
+ "- **Market Position**: Industry ranking and competitive advantages\n" +
+ "\n" +
+ "### 3. Company Scale Assessment\n" +
+ "- **Employee Size**: Total headcount and team scale\n" +
+ "- **Revenue Level**: Annual revenue and financial status\n" +
+ "- **Development Stage**: Startup, growth, mature, etc.\n" +
+ "- **Office Scale**: Office space and branch locations\n" +
+ "- **Customer Base**: Major clients and partnerships\n" +
+ "- **Market Share**: Share in specific market segments\n" +
+ "\n" +
+ "### 4. Corporate Culture & Values\n" +
+ "- **Mission Statement**: Company's purpose and objectives\n" +
+ "- **Vision**: Long-term development goals and aspirations\n" +
+ "- **Core Values**: Fundamental beliefs and principles\n" +
+ "- **Cultural Features**: Unique corporate culture elements\n" +
+ "- **Management Philosophy**: Management style and business philosophy\n" +
+ "- **Social Responsibility**: CSR activities and community contributions\n" +
+ "\n" +
+ "### 5. Work Environment & Benefits\n" +
+ "- **Office Environment**: Working conditions and atmosphere\n" +
+ "- **Compensation & Benefits**: Salary levels and benefit packages\n" +
+ "- **Work Policies**: Working hours and flexibility\n" +
+ "- **Team Dynamics**: Collaboration and interpersonal relationships\n" +
+ "- **Employee Care**: Staff activities and welfare measures\n" +
+ "- **Work-Life Balance**: Attention to employee personal life\n" +
+ "\n" +
+ "### 6. Career Development Opportunities\n" +
+ "- **Training Systems**: Employee training and learning opportunities\n" +
+ "- **Promotion Paths**: Career development routes and opportunities\n" +
+ "- **Skill Enhancement**: Professional development support\n" +
+ "- **Mentorship Programs**: New employee guidance and support\n" +
+ "- **Internal Mobility**: Cross-department development opportunities\n" +
+ "- **International Opportunities**: Overseas work and exchange programs\n" +
+ "\n" +
+ "### 7. Leadership Team Analysis\n" +
+ "- **Founder Background**: Founder's experience and philosophy\n" +
+ "- **Management Team**: Core leadership introductions\n" +
+ "- **Professional Background**: Leadership's professional experience\n" +
+ "- **Industry Reputation**: Recognition within the industry\n" +
+ "- **Leadership Style**: Management approach and characteristics\n" +
+ "- **Team Stability**: Stability of core team members\n" +
+ "\n" +
+ "### 8. Business Highlights & Achievements\n" +
+ "- **Major Awards**: Industry awards and recognition received\n" +
+ "- **Certifications**: Relevant qualifications and certifications\n" +
+ "- **Key Partnerships**: Important partnership relationships\n" +
+ "- **Success Stories**: Typical successful project cases\n" +
+ "- **Media Coverage**: Significant media attention and reports\n" +
+ "- **Industry Influence**: Impact and influence in the industry\n" +
+ "\n" +
+ "## Traditional Industry Specialization\n" +
+ "\n" +
+ "### Construction Industry\n" +
+ "- **Project Experience**: Major construction projects undertaken\n" +
+ "- **Qualification Levels**: Construction qualifications and capabilities\n" +
+ "- **Safety Records**: Safety production and quality management\n" +
+ "- **Technical Capabilities**: BIM technology, green building, etc.\n" +
+ "- **Collaboration Models**: General contracting, subcontracting relationships\n" +
+ "\n" +
+ "### Logistics Industry\n" +
+ "- **Network Coverage**: Logistics network and delivery capabilities\n" +
+ "- **Warehousing Facilities**: Warehouse scale and automation level\n" +
+ "- **Transportation Capacity**: Fleet size and transportation tools\n" +
+ "- **Information Systems**: Logistics management systems and technology\n" +
+ "- **Service Scope**: Domestic and international logistics capabilities\n" +
+ "\n" +
+ "### Manufacturing Industry\n" +
+ "- **Production Capacity**: Production scale and efficiency\n" +
+ "- **Equipment Level**: Production equipment and automation degree\n" +
+ "- **Quality Systems**: Quality management and certification systems\n" +
+ "- **R&D Capabilities**: Technical research and innovation capacity\n" +
+ "- **Supply Chain**: Supplier management and partnerships\n" +
+ "\n" +
+ "### Hospitality Industry\n" +
+ "- **Brand Positioning**: Hotel brand and market positioning\n" +
+ "- **Service Standards**: Service quality and customer satisfaction\n" +
+ "- **Facility Amenities**: Hotel facilities and supporting services\n" +
+ "- **Management Model**: Chain operations and management systems\n" +
+ "- **Customer Segments**: Primary customer types and markets\n" +
+ "\n" +
+ "### Mining Industry\n" +
+ "- **Resource Reserves**: Mineral resources and reserve status\n" +
+ "- **Extraction Technology**: Mining processes and technical capabilities\n" +
+ "- **Environmental Measures**: Environmental protection and sustainability\n" +
+ "- **Safety Management**: Safety production and risk control\n" +
+ "- **Industry Chain**: Upstream and downstream integration\n" +
+ "\n" +
+ "## Output Format Requirements\n" +
+ "\n" +
+ "Please return analysis results strictly in the following JSON format:\n" +
+ "\n" +
+ "```json\n" +
+ "{\n" +
+ " \"company_overview\": {\n" +
+ " \"company_name\": \"Full Company Name\",\n" +
+ " \"company_short_name\": \"Short Name\",\n" +
+ " \"industry\": \"Primary Industry\",\n" +
+ " \"sub_industry\": \"Sub-sector\",\n" +
+ " \"company_type\": \"Company Type\",\n" +
+ " \"founded_year\": \"Year Founded\",\n" +
+ " \"headquarters\": \"Headquarters Location\",\n" +
+ " \"website\": \"Official Website\",\n" +
+ " \"contact_info\": {\n" +
+ " \"phone\": \"Contact Phone\",\n" +
+ " \"email\": \"Official Email\",\n" +
+ " \"address\": \"Detailed Address\"\n" +
+ " }\n" +
+ " },\n" +
+ " \"business_analysis\": {\n" +
+ " \"main_business\": \"Core Business Description\",\n" +
+ " \"products_services\": [\"Product 1\", \"Product 2\", \"Service 1\"],\n" +
+ " \"target_market\": \"Target Market Description\",\n" +
+ " \"business_model\": \"Business Model\",\n" +
+ " \"core_competencies\": [\"Core Capability 1\", \"Core Capability 2\"],\n" +
+ " \"competitive_advantages\": [\"Advantage 1\", \"Advantage 2\"]\n" +
+ " },\n" +
+ " \"company_scale\": {\n" +
+ " \"employee_count\": \"Employee Count Estimate\",\n" +
+ " \"revenue_level\": \"Revenue Level\",\n" +
+ " \"development_stage\": \"Development Stage\",\n" +
+ " \"office_locations\": [\"Location 1\", \"Location 2\"],\n" +
+ " \"market_position\": \"Market Position Description\"\n" +
+ " },\n" +
+ " \"company_culture\": {\n" +
+ " \"mission\": \"Company Mission\",\n" +
+ " \"vision\": \"Company Vision\",\n" +
+ " \"core_values\": [\"Value 1\", \"Value 2\"],\n" +
+ " \"culture_highlights\": [\"Cultural Feature 1\", \"Cultural Feature 2\"],\n" +
+ " \"management_philosophy\": \"Management Philosophy\"\n" +
+ " },\n" +
+ " \"work_environment\": {\n" +
+ " \"office_environment\": \"Office Environment Description\",\n" +
+ " \"work_atmosphere\": \"Work Atmosphere\",\n" +
+ " \"benefits_welfare\": [\"Benefit 1\", \"Benefit 2\"],\n" +
+ " \"work_life_balance\": \"Work-Life Balance Status\",\n" +
+ " \"employee_activities\": [\"Activity 1\", \"Activity 2\"]\n" +
+ " },\n" +
+ " \"career_development\": {\n" +
+ " \"training_programs\": [\"Training Program 1\", \"Training Program 2\"],\n" +
+ " \"promotion_opportunities\": \"Promotion Opportunities Description\",\n" +
+ " \"skill_development\": \"Skill Development Support\",\n" +
+ " \"mentorship\": \"Mentorship Programs\",\n" +
+ " \"internal_mobility\": \"Internal Mobility Opportunities\"\n" +
+ " },\n" +
+ " \"leadership_team\": {\n" +
+ " \"founder_background\": \"Founder Background\",\n" +
+ " \"management_team\": [\"Leader 1\", \"Leader 2\"],\n" +
+ " \"leadership_style\": \"Leadership Style\",\n" +
+ " \"team_stability\": \"Team Stability\"\n" +
+ " },\n" +
+ " \"business_highlights\": {\n" +
+ " \"awards_recognition\": [\"Award 1\", \"Award 2\"],\n" +
+ " \"certifications\": [\"Certification 1\", \"Certification 2\"],\n" +
+ " \"key_partnerships\": [\"Partner 1\", \"Partner 2\"],\n" +
+ " \"success_cases\": [\"Success Case 1\", \"Success Case 2\"],\n" +
+ " \"media_coverage\": [\"Media Report 1\", \"Media Report 2\"]\n" +
+ " },\n" +
+ " \"job_seeker_insights\": {\n" +
+ " \"why_join\": [\"Reason 1\", \"Reason 2\"],\n" +
+ " \"ideal_candidates\": \"Ideal Candidate Profile\",\n" +
+ " \"growth_potential\": \"Growth Potential Analysis\",\n" +
+ " \"potential_challenges\": [\"Challenge 1\", \"Challenge 2\"],\n" +
+ " \"recommendation_score\": \"Recommendation Score (1-10)\",\n" +
+ " \"key_considerations\": [\"Consideration 1\", \"Consideration 2\"]\n" +
+ " }\n" +
+ "}\n" +
+ "```\n" +
+ "\n" +
+ "## Analysis Principles\n" +
+ "\n" +
+ "### 1. Objectivity Principle\n" +
+ "- Conduct objective analysis based on website content\n" +
+ "- Avoid subjective assumptions and over-interpretation\n" +
+ "- Distinguish factual information from speculation\n" +
+ "- Maintain neutral analytical stance\n" +
+ "\n" +
+ "### 2. Comprehensiveness Principle\n" +
+ "- Cover all important dimensions of the company\n" +
+ "- Focus on both explicit and implicit information\n" +
+ "- Balance positive information with potential risks\n" +
+ "- Provide multi-perspective analysis\n" +
+ "\n" +
+ "### 3. Practicality Principle\n" +
+ "- Analyze from HR and job seeker perspectives\n" +
+ "- Highlight information useful for recruitment decisions\n" +
+ "- Provide actionable insights and recommendations\n" +
+ "- Focus on actual work experience\n" +
+ "\n" +
+ "### 4. Accuracy Principle\n" +
+ "- Ensure accuracy of information extraction\n" +
+ "- Mark uncertain or speculative content\n" +
+ "- Avoid exaggerating or minimizing company features\n" +
+ "- Draw conclusions based on sufficient evidence\n" +
+ "\n" +
+ "## Quality Standards\n" +
+ "\n" +
+ "- Information extraction completeness ≥ 80%\n" +
+ "- Clear and logical analysis\n" +
+ "- Proper JSON format compliance\n" +
+ "- Professional and accurate language\n" +
+ "- Practical and actionable insights\n" +
+ "\n" +
+ "The generated company profile should help HR better understand company background and provide valuable reference information for recruitment decisions.";
+
+ return promptStr;
+ }
+}
diff --git a/vetti-common/src/main/java/com/vetti/common/utils/HtmlToPdfUtil.java b/vetti-common/src/main/java/com/vetti/common/utils/HtmlToPdfUtil.java
new file mode 100644
index 0000000..ba8cfdc
--- /dev/null
+++ b/vetti-common/src/main/java/com/vetti/common/utils/HtmlToPdfUtil.java
@@ -0,0 +1,20 @@
+package com.vetti.common.utils;
+
+import com.openhtmltopdf.pdfboxout.PdfRendererBuilder;
+
+import java.io.FileOutputStream;
+import java.io.OutputStream;
+
+public class HtmlToPdfUtil {
+
+ public static void htmlToPdf(String html, String outputPath) throws Exception {
+ try (OutputStream os = new FileOutputStream(outputPath)) {
+ PdfRendererBuilder builder = new PdfRendererBuilder();
+ builder.useFastMode();
+ builder.withHtmlContent(html, null);
+ builder.toStream(os);
+ builder.run();
+ }
+ }
+}
+
diff --git a/vetti-common/src/main/java/com/vetti/common/utils/MarkdownToPdfExample.java b/vetti-common/src/main/java/com/vetti/common/utils/MarkdownToPdfExample.java
new file mode 100644
index 0000000..06ad39c
--- /dev/null
+++ b/vetti-common/src/main/java/com/vetti/common/utils/MarkdownToPdfExample.java
@@ -0,0 +1,135 @@
+package com.vetti.common.utils;
+
+public class MarkdownToPdfExample {
+
+ public static void main(String[] args) throws Exception {
+ String markdown = "markdown\n" +
+ "# ACE AMIO\n" +
+ "\n" +
+ "## Personal Information\n" +
+ "- **Phone**: (+61) 475 185 310\n" +
+ "- **Email**: ecaamio@gmail.com\n" +
+ "- **Address**: Marsden Park, New South Wales 2765\n" +
+ "\n" +
+ "## Professional Summary\n" +
+ "Experienced Quantity Surveyor with over 20 years in the construction and engineering industry, skilled in cost estimation, procurement, and project management. Proven ability to liaise effectively with clients, subcontractors, and suppliers to ensure project success. Proficient in using industry-standard software tools and a strong understanding of construction processes.\n" +
+ "\n" +
+ "## Work Experience\n" +
+ "\n" +
+ "### Quantity Surveyor (Pre-Contracts Team) | Ertech Pty Ltd\n" +
+ "**Employment Period**: April 2023 – December 2024\n" +
+ "- Prepared procurement lists, Request for Quotation letters, and tender documents to streamline project initiation.\n" +
+ "- Liaised with suppliers and subcontractors for quotations using Oracle Preconstruction and OneDrive, enhancing procurement efficiency.\n" +
+ "- Accurately measured quantities using Bluebeam, ensuring precise project estimations.\n" +
+ "- Assisted the project team in Cost to Completion tasks, contributing to budget adherence.\n" +
+ "- Maintained a comprehensive directory of suppliers and subcontractors, improving sourcing efficiency.\n" +
+ "\n" +
+ "### Estimator (Cost Engineering Team) | MIEngineers (Leckring Pty Ltd)\n" +
+ "**Employment Period**: December 2017 – March 2023\n" +
+ "- Communicated with suppliers and subcontractors for materials quotations, comparing and analyzing tenders to identify the best value options.\n" +
+ "- Engaged with clients for additional information and clarification, ensuring all project requirements were met.\n" +
+ "- Measured quantities accurately using On-Screen Takeoff and Bluebeam, supporting detailed costing.\n" +
+ "- Determined pay items and prepared a Schedule of Rates, facilitating clear financial planning.\n" +
+ "- Developed first principles estimates using Benchmark Estimating Software, enhancing accuracy in financial proposals.\n" +
+ "\n" +
+ "### Senior Quantity Surveyor (Project / Site Team) | BEWG International Pte. Ltd.\n" +
+ "**Employment Period**: May 2015 – June 2016\n" +
+ "- Liaised with subcontractors for quotations, analyzed tenders, and conducted interviews, driving competitive pricing.\n" +
+ "- Prepared evaluation forms for subcontractors, ensuring compliance with project standards and management approval.\n" +
+ "- Developed subcontract documents, including bills of quantities, to clarify project expectations.\n" +
+ "- Conducted site visits to monitor work progress and ensure alignment with project schedules.\n" +
+ "- Verified the accuracy of EPC contractor and subcontractor payment applications, maintaining financial integrity.\n" +
+ "\n" +
+ "### Quantity Surveyor (Project / Site Team) | Koh Brothers Building & Civil Engineering Contractor (Pte.) Ltd\n" +
+ "**Employment Period**: June 2010 – August 2014\n" +
+ "- Coordinated with subcontractors for quotations and analyzed tenders, streamlining procurement processes.\n" +
+ "- Prepared evaluation forms for subcontractors, supporting informed decision-making.\n" +
+ "- Developed subcontract documents, including bills of quantities, to facilitate project execution.\n" +
+ "- Regularly visited sites to communicate with the site team and monitor subcontract performance.\n" +
+ "\n" +
+ "### Quantity Surveyor (Project / Site Team) | Shimizu Corporation\n" +
+ "**Employment Period**: June 2007 – June 2008\n" +
+ "- Liaised with subcontractors for quotations and analyzed tenders to ensure competitive pricing.\n" +
+ "- Collaborated with the planning department and subcontractors for necessary drawings, supporting project clarity.\n" +
+ "- Conducted daily site visits to monitor progress and maintain communication with the site team.\n" +
+ "- Prepared and submitted progress and variation claims, ensuring accurate financial reporting.\n" +
+ "\n" +
+ "### Quantity Surveyor (Building Materials Group Tender Department) | Hong Leong Asia Ltd\n" +
+ "**Employment Period**: March 2006 – June 2007\n" +
+ "- Engaged with clients to gather necessary project documents, ensuring all requirements were addressed.\n" +
+ "- Measured quantities for individual projects, providing accurate estimates for bidding.\n" +
+ "- Prepared client quotations and verified quantities for projects nearing completion, ensuring financial accuracy.\n" +
+ "\n" +
+ "### Site Engineer cum Quantity Surveyor | Floor Finish – Floor Level (FF-FL), Inc.\n" +
+ "**Employment Period**: August 2003 – December 2005\n" +
+ "- Supervised civil and structural works, ensuring adherence to project specifications.\n" +
+ "- Prepared activity reports and site diaries to document progress.\n" +
+ "- Coordinated with the main contractor to align project activities.\n" +
+ "\n" +
+ "## Education\n" +
+ "\n" +
+ "### Bachelor of Science in Civil Engineering | Mapua Institute of Technology, Philippines\n" +
+ "**Graduation Date**: March 2002\n" +
+ "\n" +
+ "## Skills & Certifications\n" +
+ "\n" +
+ "### Professional Skills\n" +
+ "- Microsoft Office: Advanced\n" +
+ "- MS Project: Advanced\n" +
+ "- Primavera 6.0: Intermediate\n" +
+ "- AutoCAD: Intermediate\n" +
+ "- Adobe Acrobat: Advanced\n" +
+ "- Bluebeam: Advanced\n" +
+ "- On-Screen Takeoff: Advanced\n" +
+ "- Benchmark Estimating Software: Advanced\n" +
+ "- COINS: Intermediate\n" +
+ "- Xero: Intermediate\n" +
+ "- 12d Model: Intermediate\n" +
+ "- OpenRoads Designer: Intermediate\n" +
+ "- Foxit: Advanced\n" +
+ "\n" +
+ "### Professional Certifications\n" +
+ "- General Safety Induction Course – White Card (TAFE Queensland, Australia) | February 2017\n" +
+ "- CostX 6.0 Introductory Training (Exactal Technologies Pty Ltd, Australia) | October 2016\n" +
+ "\n" +
+ "## Additional Information\n" +
+ "\n" +
+ "### Professional Affiliations\n" +
+ "- Australian Cost Engineering Society | 2022 – Present\n" +
+ "- Registered Professional Civil Engineer (Philippines) | 2003 – Present\n" +
+ "- Philippine Institute of Civil Engineers | 2000 – Present\n" +
+ "\n" +
+ "### References\n" +
+ "- **Sri Somanchi** \n" +
+ " Position: Business Development Manager \n" +
+ " Company: Abergeldie Complex Infrastructure \n" +
+ " Phone: (+61) 413 334 849 \n" +
+ " Address: 5 George Young Street, Regents Park NSW 2143 \n" +
+ "\n" +
+ "- **Jensen Enriquez** \n" +
+ " Position: Senior Estimator \n" +
+ " Company: Melhem Civil Pty Ltd \n" +
+ " Phone: (+61) 420 395 454 \n" +
+ " Address: 4/18-30 Pindari Road, Peakhurst Heights NSW 2210 ";
+
+ String html = MarkdownUtil.markdownToHtml(markdown);
+
+ // 可注入 CSS
+ html = """
+
+
+
+
+
+ """ + html + """
+
+
+ """;
+
+ HtmlToPdfUtil.htmlToPdf(html, "/Users/wangxiangshun/Desktop/临时文件/110/output.pdf");
+ }
+}
+
diff --git a/vetti-common/src/main/java/com/vetti/common/utils/MarkdownUtil.java b/vetti-common/src/main/java/com/vetti/common/utils/MarkdownUtil.java
new file mode 100644
index 0000000..2e0c27a
--- /dev/null
+++ b/vetti-common/src/main/java/com/vetti/common/utils/MarkdownUtil.java
@@ -0,0 +1,16 @@
+package com.vetti.common.utils;
+
+import org.commonmark.node.Node;
+import org.commonmark.parser.Parser;
+import org.commonmark.renderer.html.HtmlRenderer;
+
+public class MarkdownUtil {
+
+ public static String markdownToHtml(String markdown) {
+ Parser parser = Parser.builder().build();
+ Node document = parser.parse(markdown);
+ HtmlRenderer renderer = HtmlRenderer.builder().build();
+ return renderer.render(document);
+ }
+}
+
diff --git a/vetti-common/src/main/java/com/vetti/common/utils/MultipartFileUtil.java b/vetti-common/src/main/java/com/vetti/common/utils/MultipartFileUtil.java
new file mode 100644
index 0000000..86869dd
--- /dev/null
+++ b/vetti-common/src/main/java/com/vetti/common/utils/MultipartFileUtil.java
@@ -0,0 +1,22 @@
+package com.vetti.common.utils;
+
+import org.springframework.mock.web.MockMultipartFile;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.io.File;
+import java.io.FileInputStream;
+
+public class MultipartFileUtil {
+
+ public static MultipartFile fileToMultipartFile(File file) throws Exception {
+ try (FileInputStream inputStream = new FileInputStream(file)) {
+ return new MockMultipartFile(
+ "file", // 表单字段名
+ file.getName(), // 原始文件名
+ "application/octet-stream", // Content-Type
+ inputStream
+ );
+ }
+ }
+}
+
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
new file mode 100644
index 0000000..32058b0
--- /dev/null
+++ b/vetti-common/src/main/java/com/vetti/common/utils/html/ReadHtmlByOkHttp.java
@@ -0,0 +1,136 @@
+package com.vetti.common.utils.html;
+
+import okhttp3.OkHttpClient;
+import okhttp3.Request;
+import okhttp3.Response;
+import org.jsoup.Jsoup;
+import org.jsoup.nodes.Document;
+import org.jsoup.nodes.Element;
+import org.jsoup.nodes.Node;
+import org.jsoup.nodes.TextNode;
+
+import java.io.IOException;
+import java.util.concurrent.TimeUnit;
+import java.util.regex.Pattern;
+
+/**
+ * OkHttp第三方库读取网页HTML内容
+ */
+public class ReadHtmlByOkHttp {
+
+ // 预编译空白清理正则
+ private static final Pattern BLANK_LINE_PATTERN = Pattern.compile("\\n\\s*\\n");
+ private static final Pattern MULTIPLE_SPACE_PATTERN = Pattern.compile("\\s+");
+
+
+ // 全局OkHttpClient实例(推荐单例,避免重复创建连接池)
+ private static final OkHttpClient OK_HTTP_CLIENT = new OkHttpClient.Builder()
+ .connectTimeout(5, TimeUnit.SECONDS) // 连接超时
+ .readTimeout(5, TimeUnit.SECONDS) // 读取超时
+ .writeTimeout(5, TimeUnit.SECONDS) // 写入超时
+ .build();
+
+ public static void main(String[] args) {
+ String websiteUrl = "https://www.shearwatercn.com/";
+ try {
+ String htmlContent = getHtmlContentByOkHttp(websiteUrl);
+ String resultStr = removeHtmlTagAndAttrByJsoup(htmlContent);
+ String resultStr1 = removeBlankLineAndSpace(resultStr);
+ System.out.println("读取到的HTML内容:\n" + resultStr1);
+ } catch (IOException e) {
+ System.err.println("读取HTML失败:" + e.getMessage());
+ e.printStackTrace();
+ }
+ }
+
+ /**
+ * OkHttp获取网页HTML内容
+ * @param urlStr 网站链接
+ * @return 网页HTML字符串
+ * @throws IOException 网络IO异常
+ */
+ public static String getHtmlContentByOkHttp(String urlStr) throws IOException {
+ // 1. 构建GET请求
+ Request request = new Request.Builder()
+ .url(urlStr)
+ .header("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36")
+ .header("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8")
+ .header("Referer", urlStr)
+ .get() // 默认就是GET请求,可省略
+ .build();
+
+ // 2. 执行请求并获取响应(try-with-resources自动关闭Response)
+ try (Response response = OK_HTTP_CLIENT.newCall(request).execute()) {
+ // 3. 检查响应是否成功
+ if (!response.isSuccessful()) {
+ throw new IOException("请求失败,响应码:" + response.code());
+ }
+
+ // 4. 读取响应体内容(string()方法默认使用UTF-8编码,避免乱码)
+ return response.body() != null ? response.body().string() : "";
+ }
+ }
+
+ /**
+ * JSoup仅去除HTML标签及属性,保留原始文本(不修改转义字符、空白字符)
+ * @param htmlContent 原始HTML字符串
+ * @return 剥离标签和属性后的文本
+ */
+ public static String removeHtmlTagAndAttrByJsoup(String htmlContent) {
+ if (htmlContent == null || htmlContent.isEmpty()) {
+ return "";
+ }
+
+ // 步骤1:解析HTML为Document对象(自动修复畸形HTML标签)
+ Document document = Jsoup.parse(htmlContent);
+ // 可选:删除HTML注释(若需保留注释可注释此行)
+// Elements comments = document.select("comment()");
+// comments.remove();
+
+ // 步骤2:递归遍历所有节点,仅提取文本节点的内容
+ StringBuilder textBuilder = new StringBuilder();
+ traverseNodes(document.body(), textBuilder);
+
+ return textBuilder.toString();
+ }
+
+ /**
+ * 递归遍历节点,提取纯文本(跳过标签和属性,仅保留文本节点内容)
+ */
+ private static void traverseNodes(Node node, StringBuilder textBuilder) {
+ // 若是文本节点,直接追加内容(保留原始格式)
+ if (node instanceof TextNode) {
+ TextNode textNode = (TextNode) node;
+ textBuilder.append(textNode.getWholeText()); // getWholeText()保留原始文本,不做任何处理
+ return;
+ }
+
+ // 若是元素节点(标签),跳过标签本身和属性,递归遍历子节点
+ if (node instanceof Element) {
+ for (Node childNode : node.childNodes()) {
+ traverseNodes(childNode, textBuilder);
+ }
+ }
+ }
+
+ /**
+ * 去除空白行和多余空格,生成整洁文本
+ */
+ public static String removeBlankLineAndSpace(String text) {
+ if (text == null || text.isEmpty()) {
+ return "";
+ }
+
+ // 步骤1:清理空白行(多次替换确保所有连续空白行都被清理)
+ String noBlankLine = BLANK_LINE_PATTERN.matcher(text).replaceAll("\n");
+ while (BLANK_LINE_PATTERN.matcher(noBlankLine).find()) {
+ noBlankLine = BLANK_LINE_PATTERN.matcher(noBlankLine).replaceAll("\n");
+ }
+
+ // 步骤2:合并多余空格为单个空格
+ String noMultipleSpace = MULTIPLE_SPACE_PATTERN.matcher(noBlankLine).replaceAll(" ");
+
+ // 步骤3:去除首尾空白
+ return noMultipleSpace.trim();
+ }
+}
diff --git a/vetti-hotakes/src/main/java/com/vetti/hotake/domain/HotakeCvInfo.java b/vetti-hotakes/src/main/java/com/vetti/hotake/domain/HotakeCvInfo.java
index 2c22f9d..ede78f7 100644
--- a/vetti-hotakes/src/main/java/com/vetti/hotake/domain/HotakeCvInfo.java
+++ b/vetti-hotakes/src/main/java/com/vetti/hotake/domain/HotakeCvInfo.java
@@ -84,6 +84,9 @@ public class HotakeCvInfo extends BaseEntity
@ApiModelProperty("简历分析结果数据存储")
private String cvOptimizeJson;
+ @ApiModelProperty("分析附件结果Json")
+ private String analyzedAttachmentJson;
+
@ApiModelProperty("文本修正的数量")
private Integer textCorrectionsNums;
diff --git a/vetti-hotakes/src/main/java/com/vetti/hotake/domain/vo/HotakeWebInfoExtractVo.java b/vetti-hotakes/src/main/java/com/vetti/hotake/domain/vo/HotakeWebInfoExtractVo.java
new file mode 100644
index 0000000..440260c
--- /dev/null
+++ b/vetti-hotakes/src/main/java/com/vetti/hotake/domain/vo/HotakeWebInfoExtractVo.java
@@ -0,0 +1,21 @@
+package com.vetti.hotake.domain.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+/**
+ * 网站信息提取 请求对象
+ *
+ * @author ID
+ * @date 2025-09-06
+ */
+@Data
+@Accessors(chain = true)
+public class HotakeWebInfoExtractVo {
+
+ @ApiModelProperty("网站地址")
+ private String webUrl;
+
+
+}
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 3a4d628..254e636 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
@@ -8,6 +8,7 @@ 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 com.vetti.hotake.domain.vo.HotakeWebInfoExtractVo;
import java.util.List;
@@ -25,14 +26,11 @@ public interface IHotakeAiCommonToolsService {
**/
public HotakeJobDescriptionGeneratorDto getJobDescriptionGenerator(Long roleId);
-
-
/**
* 初筛问题生成
**/
public List getInitialScreeningQuestionsGenerator(HotakeInitialScreeningQuestionsVo questionsVo);
-
/**
* 简历岗位匹配度评分
**/
@@ -43,10 +41,57 @@ public interface IHotakeAiCommonToolsService {
**/
public HotakeCvOptimizeDto getResumeAnalysisOptimizer(String cvConnect);
-
/**
* 初步筛选问题淘汰评分
**/
public HotakeInitialQuestionEliminationScoreDto getInitialQuestionEliminationScore(HotakeInitialQuestionEliminationScoreVo questionEliminationScoreVo);
+ /**
+ * 处理分析附件结果
+ * @param connect
+ * @return
+ */
+ public String handleAnalyzedAttachment(String connect);
+
+
+ /**
+ * 处理附件分析结果合并信息
+ * @param basicInformation 基础信息
+ * @param
+ * @return
+ */
+ public String handleAttachmentResultMerging(String basicInformation,String attachmentContent);
+
+
+ /**
+ * 生成最终的Markdown格式简历
+ * @param markdown
+ * @return
+ */
+ public String handleGenerateMarkdown(String markdown);
+
+ /**
+ * 网站内容抓取
+ * @param webUrl
+ * @return
+ */
+ public String handleWebContentScraping(String webUrl);
+
+ /**
+ * 网站AI信息提取(使用提示词)
+ * @param webInfoExtractVo 网站提取对象
+ * @return
+ */
+ public String handleWebInfoExtract(HotakeWebInfoExtractVo webInfoExtractVo);
+
+ /**
+ * 网站信息增强处理
+ * @param webContent 网站内容
+ * @return
+ */
+ public String handleWebInfoEnhancedProcessing(String webContent);
+
+
+
+
}
diff --git a/vetti-hotakes/src/main/java/com/vetti/hotake/service/IHotakeCvInfoService.java b/vetti-hotakes/src/main/java/com/vetti/hotake/service/IHotakeCvInfoService.java
index 5f89ac8..649463a 100644
--- a/vetti-hotakes/src/main/java/com/vetti/hotake/service/IHotakeCvInfoService.java
+++ b/vetti-hotakes/src/main/java/com/vetti/hotake/service/IHotakeCvInfoService.java
@@ -87,4 +87,13 @@ public interface IHotakeCvInfoService
public HotakeCvInfo handleCvAnalysis(HotakeCvInfo hotakeCvInfo);
+ /**
+ * 根据其他的附件信息生成个人简历
+ *
+ * @return 结果
+ */
+ public HotakeCvInfo getGenerateResume();
+
+
+
}
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 c5f8120..ef6018d 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
@@ -3,7 +3,11 @@ package com.vetti.hotake.service.impl;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.json.JSONUtil;
import com.vetti.common.ai.gpt.ChatGPTClient;
+import com.vetti.common.constant.AiCommonPromptConstants;
+import com.vetti.common.core.domain.entity.SysUser;
import com.vetti.common.core.service.BaseServiceImpl;
+import com.vetti.common.utils.SecurityUtils;
+import com.vetti.common.utils.html.ReadHtmlByOkHttp;
import com.vetti.hotake.domain.HotakeInitScreQuestionsReplyRecordInfo;
import com.vetti.hotake.domain.HotakeInitialScreeningQuestionsInfo;
import com.vetti.hotake.domain.HotakeRolesInfo;
@@ -18,14 +22,18 @@ import com.vetti.hotake.domain.dto.roleDto.ResponsibilitiesDto;
import com.vetti.hotake.domain.vo.HotakeInitialQuestionEliminationScoreVo;
import com.vetti.hotake.domain.vo.HotakeInitialScreeningQuestionsVo;
import com.vetti.hotake.domain.vo.HotakeResumeJobMatchingScoreVo;
+import com.vetti.hotake.domain.vo.HotakeWebInfoExtractVo;
import com.vetti.hotake.mapper.HotakeInitialScreeningQuestionsInfoMapper;
import com.vetti.hotake.mapper.HotakeRolesApplyInfoMapper;
import com.vetti.hotake.mapper.HotakeRolesInfoMapper;
import com.vetti.hotake.service.IHotakeAiCommonToolsService;
+import com.vetti.system.mapper.SysUserMapper;
import lombok.extern.slf4j.Slf4j;
+import org.apache.catalina.security.SecurityUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
+import java.io.IOException;
import java.util.*;
/**
@@ -52,6 +60,9 @@ public class HotakeAiCommonToolsServiceImpl extends BaseServiceImpl implements I
@Autowired
private ChatGPTClient chatGPTClient;
+ @Autowired
+ private SysUserMapper userMapper;
+
/**
* 职位描述生成器
@@ -65,7 +76,7 @@ public class HotakeAiCommonToolsServiceImpl extends BaseServiceImpl implements I
HotakeJobDescriptionGeneratorDto generatorDto = new HotakeJobDescriptionGeneratorDto();
//根据岗位ID查询岗位基本信息
HotakeRolesInfo rolesInfo = hotakeRolesInfoMapper.selectHotakeRolesInfoById(roleId);
- String prompt = initializationJobDescriptionPrompt(rolesInfo.getRoleName(),rolesInfo.getRoleType(),
+ String prompt = AiCommonPromptConstants.initializationJobDescriptionPrompt(rolesInfo.getRoleName(),rolesInfo.getRoleType(),
rolesInfo.getRequiredSkillsJson());
List