From 3f7d3d7243e0591de904c17a7fb25a413bc5d910 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E9=A1=BA=E4=B8=9C?= <577732344@qq.com> Date: Sun, 11 Jan 2026 21:37:16 +0800 Subject: [PATCH] =?UTF-8?q?=E9=9B=B7=E8=BE=BE=E5=9B=BE=E5=85=9C=E5=BA=95?= =?UTF-8?q?=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/JobCollectionServiceImpl.java | 41 +++++++++++-------- 1 file changed, 24 insertions(+), 17 deletions(-) diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/JobCollectionServiceImpl.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/JobCollectionServiceImpl.java index 65b04cf..b727b13 100644 --- a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/JobCollectionServiceImpl.java +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/JobCollectionServiceImpl.java @@ -253,11 +253,13 @@ public class JobCollectionServiceImpl extends ServiceImpl= job.getMinSalary()) { - matchScore += 1; - } else if (userMinSalary >= job.getMinSalary() * 0.8) { - matchScore += 0.5; + if (userMinSalary != null && job.getMaxSalary() != null && job.getMinSalary() != null) { + if (userMinSalary <= job.getMaxSalary()) { + if (userMinSalary >= job.getMinSalary()) { + matchScore += 1; + } else if (userMinSalary >= job.getMinSalary() * 0.8) { + matchScore += 0.5; + } } } @@ -278,14 +280,18 @@ public class JobCollectionServiceImpl extends ServiceImpl title.contains(job.getJobTitle()) || job.getJobTitle().contains(title)); + String jobTitleStr = job.getJobTitle(); + List userJobTitles = user.getJobTitle(); + boolean jobMatch = jobTitleStr != null && userJobTitles != null && !userJobTitles.isEmpty() && + userJobTitles.stream().anyMatch(title -> title != null && + (title.contains(jobTitleStr) || jobTitleStr.contains(title))); if (jobMatch) { matchScore += 1; } - // 匹配度:0-6 → 映射为 0-100 分 + // 匹配度:0-6 → 映射为 0-100 分,兜底最低10分 int finalScore = (int) Math.round((matchScore / (double) totalFactors) * 100); + finalScore = Math.max(finalScore, 10); // 兜底最低10分 userScores.add(new UserCompetitiveness(user, finalScore)); } @@ -295,12 +301,12 @@ public class JobCollectionServiceImpl extends ServiceImpl getAgeScore(DateUtils.stringToDateWithYmd(u.getUser().getBirthDate(),DateUtils.YYYY_MM_DD))).average().orElse(0); - double avgExperienceScore = userScores.stream().mapToInt(u -> getExperienceScore(u.getUser().getExperience(), job.getExperience(), experienceRank)).average().orElse(0); - double avgEducationScore = userScores.stream().mapToInt(u -> getEducationScore(u.getUser().getEducation(), job.getEducation(), educationRank)).average().orElse(0); - double avgSkillScore = userScores.stream().mapToInt(u -> getSkillScore(u.getUser(), job)).average().orElse(0); - double avgSalaryScore = userScores.stream().mapToInt(u -> getSalaryScore(u.getUser(), job)).average().orElse(0); - double avgLocationScore = userScores.stream().mapToInt(u -> getLocationScore(u.getUser(), job)).average().orElse(0); + double avgAgeScore = userScores.stream().mapToInt(u -> getAgeScore(DateUtils.stringToDateWithYmd(u.getUser().getBirthDate(),DateUtils.YYYY_MM_DD))).average().orElse(60); + double avgExperienceScore = userScores.stream().mapToInt(u -> getExperienceScore(u.getUser().getExperience(), job.getExperience(), experienceRank)).average().orElse(60); + double avgEducationScore = userScores.stream().mapToInt(u -> getEducationScore(u.getUser().getEducation(), job.getEducation(), educationRank)).average().orElse(60); + double avgSkillScore = userScores.stream().mapToInt(u -> getSkillScore(u.getUser(), job)).average().orElse(60); + double avgSalaryScore = userScores.stream().mapToInt(u -> getSalaryScore(u.getUser(), job)).average().orElse(60); + double avgLocationScore = userScores.stream().mapToInt(u -> getLocationScore(u.getUser(), job)).average().orElse(60); radarChart.setAge((int) avgAgeScore); radarChart.setExperience((int) avgExperienceScore); @@ -313,8 +319,8 @@ public class JobCollectionServiceImpl extends ServiceImpl