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;