From 46b5a459f89898a109c427bcba4bba11e3af88d9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=A2=81=E7=90=A6=E6=B6=9B?= Date: Wed, 24 Jul 2024 17:42:16 +0800 Subject: [PATCH] fix:87339 --- .../impl/LawsHomeSearchServiceImpl.java | 36 +++++++++++++++++-- 1 file changed, 34 insertions(+), 2 deletions(-) diff --git a/laws-modules/src/main/java/com/jero/modules/laws/home/service/impl/LawsHomeSearchServiceImpl.java b/laws-modules/src/main/java/com/jero/modules/laws/home/service/impl/LawsHomeSearchServiceImpl.java index 29144030..908a0caf 100644 --- a/laws-modules/src/main/java/com/jero/modules/laws/home/service/impl/LawsHomeSearchServiceImpl.java +++ b/laws-modules/src/main/java/com/jero/modules/laws/home/service/impl/LawsHomeSearchServiceImpl.java @@ -218,14 +218,24 @@ public class LawsHomeSearchServiceImpl implements ILawsHomeSearchService { @NotNull private QueryWrapper getQueryWrapperNormal(LawsHomeNormalSearchDTO lawsHomeNormalSearchDTO) { String[] searchContent = lawsHomeNormalSearchDTO.getSearchContent().split(BLANK_SPACE); + searchContent = Arrays.stream(searchContent).distinct().toArray(String[]::new); StringBuilder regexp = new StringBuilder(); StringBuilder select = new StringBuilder(); select.append("( "); for (int i = 0; i < searchContent.length; i++) { regexp.append(searchContent[i]); + StringBuilder ss = new StringBuilder(); + if(isNumericAndAlphabetic(searchContent[i])){ + // 英文 数字 + replaceLength(searchContent, i, ss, " "); + }else{ + // 中文 + replaceLength(searchContent, i, ss, " "); + ss.append(" "); + } + String str = ss.toString(); select.append(" LENGTH(standard_name) - LENGTH(REPLACE(standard_name, '").append(searchContent[i]) - .append("',").append(" '").append(searchContent[i].length() > 1 ? - searchContent[i].substring(0, searchContent[i].length() - 1) : "").append("')) "); + .append("',").append(" '").append(str).append("')) "); if(i != searchContent.length - 1){ regexp.append("|"); select.append("+"); @@ -260,6 +270,28 @@ public class LawsHomeSearchServiceImpl implements ILawsHomeSearchService { return queryWrapper; } + private void replaceLength(String[] searchContent, int i, StringBuilder ss, String s2) { + String str = searchContent[i].length() > 1 ? + searchContent[i].substring(0, searchContent[i].length() - 1) : ""; + if (!StringUtils.isEmpty(str)) { + int arr = str.length(); + for (int i1 = 0; i1 < arr; i1++) { + ss.append(s2); + } + } + } + + /** + * 判断字符串是否全部由数字和英文字符组成 + * @param str 输入的字符串 + * @return 如果字符串只包含数字和英文字符,则返回true,否则返回false + */ + public static boolean isNumericAndAlphabetic(String str) { + // 正则表达式,匹配数字和英文字母 + String pattern = "^[A-Za-z0-9]+$"; + return str.matches(pattern); + } + private void addContent(String searchContent, IPage pageList) { if(CollectionUtils.isEmpty(pageList.getRecords())) { return;