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