diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/rc/impl/PublicJobFairServiceImpl.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/rc/impl/PublicJobFairServiceImpl.java index ab93927..745b1b2 100644 --- a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/rc/impl/PublicJobFairServiceImpl.java +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/rc/impl/PublicJobFairServiceImpl.java @@ -59,6 +59,7 @@ public class PublicJobFairServiceImpl implements IPublicJobFairService { @Override public PublicJobFairResponse getJobFairPage(PublicJobFairQuery query) { + query.setJobFairTitle(normalizeJobFairTitle(query.getJobFairTitle())); PageHelper.startPage(query.getPageNum(), query.getPageSize()); List list = publicJobFairMapper.selectPublicJobFairList(query); fillJobFairStatus(list); @@ -180,12 +181,28 @@ public class PublicJobFairServiceImpl implements IPublicJobFairService { @Override public List selectList(PublicJobFairQuery query) { + query.setJobFairTitle(normalizeJobFairTitle(query.getJobFairTitle())); List list = publicJobFairMapper.selectPublicJobFairList(query); fillJobFairStatus(list); fillCompanyApplyState(list); return list; } + /** + * 将标题查询条件转换为 LIKE 的字面量片段。 + * + *

标题搜索是普通的包含匹配,用户输入的通配符不应改变 SQL 的匹配范围。

+ */ + static String normalizeJobFairTitle(String title) { + if (StringUtils.isBlank(title)) { + return null; + } + return title.trim() + .replace("\\", "\\\\") + .replace("%", "\\%") + .replace("_", "\\_"); + } + @Override public PublicJobFair selectById(String jobFairId) { PublicJobFair jobFair = publicJobFairMapper.selectPublicJobFairById(jobFairId); diff --git a/ruoyi-bussiness/src/test/java/com/ruoyi/cms/service/rc/impl/PublicJobFairServiceImplTest.java b/ruoyi-bussiness/src/test/java/com/ruoyi/cms/service/rc/impl/PublicJobFairServiceImplTest.java index 22de463..e3e5cac 100644 --- a/ruoyi-bussiness/src/test/java/com/ruoyi/cms/service/rc/impl/PublicJobFairServiceImplTest.java +++ b/ruoyi-bussiness/src/test/java/com/ruoyi/cms/service/rc/impl/PublicJobFairServiceImplTest.java @@ -39,6 +39,18 @@ class PublicJobFairServiceImplTest assertNull(PublicJobFairServiceImpl.resolveJobFairStatus(START_TIME, null, END_TIME)); } + @Test + void titleSearchEscapesLikeWildcardsAndTrimsWhitespace() + { + assertEquals("100\\%\\_\\\\", PublicJobFairServiceImpl.normalizeJobFairTitle(" 100%_\\ ")); + } + + @Test + void blankTitleSearchIsIgnored() + { + assertNull(PublicJobFairServiceImpl.normalizeJobFairTitle(" \t")); + } + private String resolveStatus(Date now) { return PublicJobFairServiceImpl.resolveJobFairStatus(START_TIME, END_TIME, now);