From 87a7036ceb1964fb817e4cc6b8bb14ee577eadaf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=86=AF=E8=BE=89?= Date: Sat, 27 Jun 2026 23:03:37 +0800 Subject: [PATCH] =?UTF-8?q?es=E7=AD=9B=E9=80=89bug=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cms/service/impl/ESJobSearchImpl.java | 43 ++++++++++++++----- 1 file changed, 33 insertions(+), 10 deletions(-) diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/ESJobSearchImpl.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/ESJobSearchImpl.java index e745d14..3620ec5 100644 --- a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/ESJobSearchImpl.java +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/ESJobSearchImpl.java @@ -535,17 +535,17 @@ public class ESJobSearchImpl implements IESJobSearchService Long userMinSalary = Objects.nonNull(esJobSearch.getSalaryMin()) ? esJobSearch.getSalaryMin() : esJobSearch.getMinSalary(); Long userMaxSalary = Objects.nonNull(esJobSearch.getSalaryMax()) ? esJobSearch.getSalaryMax() : esJobSearch.getMaxSalary(); - // 岗位薪资范围与用户期望薪资范围有交集 - // 条件:岗位最小薪资 <= 用户最大薪资 AND 岗位最大薪资 >= 用户最小薪资 + // 岗位最高薪资必须在用户筛选范围内 + // 条件:岗位最大薪资 <= 用户最大薪资 AND 岗位最大薪资 >= 用户最小薪资 if(Objects.nonNull(userMinSalary) && Objects.nonNull(userMaxSalary)){ - wrapper.and(x->x.le(ESJobDocument::getMinSalary,userMaxSalary) + wrapper.and(x->x.le(ESJobDocument::getMaxSalary,userMaxSalary) .ge(ESJobDocument::getMaxSalary,userMinSalary)); } else if(Objects.nonNull(userMinSalary)){ // 只有最小薪资:岗位最大薪资 >= 用户最小薪资 wrapper.and(x->x.ge(ESJobDocument::getMaxSalary,userMinSalary)); } else if(Objects.nonNull(userMaxSalary)){ - // 只有最大薪资:岗位最小薪资 <= 用户最大薪资 - wrapper.and(x->x.le(ESJobDocument::getMinSalary,userMaxSalary)); + // 只有最大薪资:岗位最大薪资 <= 用户最大薪资 + wrapper.and(x->x.le(ESJobDocument::getMaxSalary,userMaxSalary)); } if(!StringUtil.isEmptyOrNull(esJobSearch.getExperience())){ Integer maxValue = StringUtil.findMaxValue(esJobSearch.getExperience()); @@ -644,20 +644,37 @@ public class ESJobSearchImpl implements IESJobSearchService .match(ESJobDocument::getDescription,jobQuery.getJobTitle().trim(),1.0f)); } if(hasText(jobQuery.getEducation())){ - wrapper.and(a->a.eq(ESJobDocument::getEducation,jobQuery.getEducation().trim())); + // 支持逗号分隔的多值筛选(如 "3,4") + String eduStr = jobQuery.getEducation().trim(); + if (eduStr.contains(",")) { + List eduList = StringUtil.convertStringToStringList(eduStr); + wrapper.and(a->a.in(ESJobDocument::getEducation,eduList)); + } else { + wrapper.and(a->a.eq(ESJobDocument::getEducation,eduStr)); + } } if(hasText(jobQuery.getArea())){ List integers = StringUtil.convertStringToIntegerList(jobQuery.getArea().trim()); wrapper.and(x->x.in(ESJobDocument::getJobLocationAreaCode,integers)); } if(hasText(jobQuery.getExperience())){ - wrapper.and(a->a.le(ESJobDocument::getExperience,jobQuery.getExperience().trim())); + // 支持逗号分隔的多值筛选,取最大值(最宽松的经验要求) + String expStr = jobQuery.getExperience().trim(); + if (expStr.contains(",")) { + Integer maxExp = StringUtil.findMaxValue(expStr); + if (maxExp != null) { + wrapper.and(a->a.le(ESJobDocument::getExperience,maxExp.toString())); + } + } else { + wrapper.and(a->a.le(ESJobDocument::getExperience,expStr)); + } } + // 薪资范围:岗位最高薪资必须在用户筛选范围内 if(Objects.nonNull(jobQuery.getMaxSalary())){ wrapper.and(x->x.le(ESJobDocument::getMaxSalary,jobQuery.getMaxSalary())); } if(Objects.nonNull(jobQuery.getMinSalary())){ - wrapper.and(x->x.ge(ESJobDocument::getMinSalary,jobQuery.getMinSalary())); + wrapper.and(x->x.ge(ESJobDocument::getMaxSalary,jobQuery.getMinSalary())); } if(hasText(jobQuery.getScaleDictCode())){ wrapper.and(a->a.eq(ESJobDocument::getScaleDictCode,jobQuery.getScaleDictCode().trim())); @@ -684,7 +701,12 @@ public class ESJobSearchImpl implements IESJobSearchService wrapper.and(a->a.eq(ESJobDocument::getType,jobQuery.getType().trim())); } if(Objects.nonNull(jobQuery.getOrder())){ - wrapper.sort(SortBuilders.fieldSort("postingDate").order(SortOrder.DESC).missing("_last")); + if (jobQuery.getOrder()==3){ + // 最大薪资排序 + wrapper.sort(SortBuilders.fieldSort("maxSalary").order(SortOrder.DESC).missing("_last")); + } else { + wrapper.sort(SortBuilders.fieldSort("postingDate").order(SortOrder.DESC).missing("_last")); + } if (jobQuery.getOrder()==1){ wrapper.orderByDesc(ESJobDocument::getIsHot); wrapper.orderByDesc(ESJobDocument::getApplyNum); @@ -741,11 +763,12 @@ public class ESJobSearchImpl implements IESJobSearchService if(hasText(jobQuery.getExperience())){ wrapper.and(a->a.le(ESJobDocument::getExperience,jobQuery.getExperience().trim())); } + // 薪资范围:岗位最高薪资必须在用户筛选范围内 if(Objects.nonNull(jobQuery.getMaxSalary())){ wrapper.and(x->x.le(ESJobDocument::getMaxSalary,jobQuery.getMaxSalary())); } if(Objects.nonNull(jobQuery.getMinSalary())){ - wrapper.and(x->x.ge(ESJobDocument::getMinSalary,jobQuery.getMinSalary())); + wrapper.and(x->x.ge(ESJobDocument::getMaxSalary,jobQuery.getMinSalary())); } if(hasText(jobQuery.getScaleDictCode())){ wrapper.and(a->a.eq(ESJobDocument::getScaleDictCode,jobQuery.getScaleDictCode().trim()));