diff --git a/.kiro/steering/项目结构说明.md b/.kiro/steering/项目结构说明.md index e66b257..835beaa 100644 --- a/.kiro/steering/项目结构说明.md +++ b/.kiro/steering/项目结构说明.md @@ -267,7 +267,8 @@ offerpie/back-end #### 技能维度(Sskill) - 岗位无要求 → 100分 - 用户无技能 → 0分 -- 匹配公式:`(匹配数量 / 岗位要求数量) × 100` +- 匹配0个 → 0分 +- 匹配≥1个 → 30分保底 + 70分按比例:`30 + (匹配数量 / 岗位要求数量) × 70` ### 核心服务 - **JobService**(client-api):岗位列表查询主流程编排 diff --git a/manager/src/main/java/org/jiayunet/service/JobMatchService.java b/manager/src/main/java/org/jiayunet/service/JobMatchService.java index 55f37ba..43bb3e6 100644 --- a/manager/src/main/java/org/jiayunet/service/JobMatchService.java +++ b/manager/src/main/java/org/jiayunet/service/JobMatchService.java @@ -287,7 +287,7 @@ public class JobMatchService { /** * 计算技能匹配得分(百分制) - *

岗位无要求→100分,用户无技能→0分,匹配公式:(匹配数量 / 岗位要求数量) * 100

+ *

岗位无要求→100分,用户无技能→0分,匹配≥1个→30分保底+70分按比例

*/ private int calculateSkillScore(List jobSkillTagIds, Set userSkillTagSet) { if (jobSkillTagIds == null || jobSkillTagIds.isEmpty()) { @@ -297,6 +297,11 @@ public class JobMatchService { return 0; } long matchedCount = jobSkillTagIds.stream().filter(userSkillTagSet::contains).count(); - return (int) Math.round((double) matchedCount / jobSkillTagIds.size() * 100); + if (matchedCount == 0) { + return 0; + } + // 匹配≥1个:30分保底 + 70分按比例 + double ratio = (double) matchedCount / jobSkillTagIds.size(); + return 30 + (int) Math.round(ratio * 70); } }