修复线上招聘会标题搜索通配符问题

This commit is contained in:
2026-07-24 10:10:11 +08:00
parent 6e3fb28d79
commit 1758dd9cfa
2 changed files with 29 additions and 0 deletions

View File

@@ -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<PublicJobFair> list = publicJobFairMapper.selectPublicJobFairList(query);
fillJobFairStatus(list);
@@ -180,12 +181,28 @@ public class PublicJobFairServiceImpl implements IPublicJobFairService {
@Override
public List<PublicJobFair> selectList(PublicJobFairQuery query) {
query.setJobFairTitle(normalizeJobFairTitle(query.getJobFairTitle()));
List<PublicJobFair> list = publicJobFairMapper.selectPublicJobFairList(query);
fillJobFairStatus(list);
fillCompanyApplyState(list);
return list;
}
/**
* 将标题查询条件转换为 LIKE 的字面量片段。
*
* <p>标题搜索是普通的包含匹配,用户输入的通配符不应改变 SQL 的匹配范围。</p>
*/
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);

View File

@@ -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);