From d334dfae15726489656d582c8f9356ef02d0686a Mon Sep 17 00:00:00 2001 From: 许鹏程 <1821349743@qq.com> Date: 星期一, 20 一月 2025 13:47:54 +0800 Subject: [PATCH] fix:修复文件检索找不到功能,无法跳转的错误 --- src/main/java/com/product/lucene/service/LuceneService.java | 111 ++++++++++++++++++++++++++++++++----------------------- 1 files changed, 65 insertions(+), 46 deletions(-) diff --git a/src/main/java/com/product/lucene/service/LuceneService.java b/src/main/java/com/product/lucene/service/LuceneService.java index 1a82ed6..49597bd 100644 --- a/src/main/java/com/product/lucene/service/LuceneService.java +++ b/src/main/java/com/product/lucene/service/LuceneService.java @@ -12,6 +12,7 @@ import com.product.lucene.util.FileUtils; import com.product.util.BaseUtil; +import com.product.util.UnifySQLSymbol; import org.apache.lucene.analysis.cn.smart.SmartChineseAnalyzer; import org.apache.lucene.document.*; import org.apache.lucene.index.IndexWriter; @@ -33,6 +34,7 @@ import java.util.ArrayList; import java.util.List; import java.util.Map; +import java.util.Set; import java.util.stream.Collectors; /** @@ -52,11 +54,11 @@ @Autowired private SearcherManager searcherManager; - + /** * 鍒涘缓绱㈠紩 - * + * * @param fse * @throws IOException */ @@ -65,7 +67,7 @@ File file = (File) fse.getObject("file"); // 鑾峰彇闄勪欢 // 鑾峰彇鍏ㄦ枃妫�绱㈤厤缃� - FieldSetEntity fseConfig = baseDao.getFieldSetEntityByFilter(CmnConst.PRODUCT_SYS_DOCUMENT_SEARCH, "function_uuid=?", new Object[] { function_uuid }, false); + FieldSetEntity fseConfig = baseDao.getFieldSetEntityByFilter(CmnConst.PRODUCT_SYS_DOCUMENT_SEARCH, "function_uuid=?", new Object[]{function_uuid}, false); if (fseConfig == null) return; String table_uuid = fseConfig.getString(CmnConst.TABLE_NAME); @@ -111,7 +113,7 @@ /** * 鏂囨。妫�绱� - * + * * @param fse * @return * @throws Exception @@ -128,13 +130,13 @@ try { // 鑾峰彇瀹夊叏鐨処ndexSearcher瀹炰緥 indexSearcher = searcherManager.acquire(); - + // 鑾峰彇鏉′欢鏌ヨ缁撴灉 Query finalQuery = searchFilterParse(fse); - + // 鑾峰彇楂樹寒鍖归厤鍣� Highlighter highlighter = highlighterParse(finalQuery); - + // 鍒嗛〉鏌ヨ鏂囨。 TopDocs topDocs = searchByPage(fse.getInteger(CoreConst.CPAGE), fse.getInteger(CoreConst.PAGESIZE), indexSearcher, finalQuery); @@ -144,11 +146,31 @@ for (int i = 0; i < hits.length; i++) { // 鑾峰彇妫�绱㈠懡涓殑鏂囨。淇℃伅 Document doc = indexSearcher.doc(hits[i].doc); - + JSONObject jsonFile = new JSONObject(); jsonFile.put(CmnConst.FILE_UUID, doc.get(CoreConst.UUID)); jsonFile.put(CoreConst.FUNCTION_UUID, doc.get(CoreConst.FUNCTION_UUID)); - + + if (!StringUtils.isEmpty(doc.get(CoreConst.FUNCTION_UUID))) { + FieldSetEntity fs = BaseUtil.getSingleInfoByCache("鎵�鏈夊姛鑳�", new String[]{jsonFile.getString(CoreConst.FUNCTION_UUID)}); + if (FieldSetEntity.isEmpty(fs)) { + //鎵句笉鍒板姛鑳介噸鏂版牴鎹〃鍚嶆煡鎵� + //娓呯┖ + jsonFile.remove(CoreConst.FUNCTION_UUID); + } + } + + if (StringUtils.isEmpty(jsonFile.get(CoreConst.FUNCTION_UUID))) { + //鏌ヨ鍔熻兘淇℃伅 + String sql = "SELECT * FROM product_sys_functions where table_uuid =(select uuid from product_sys_datamodel_table where table_name=?) limit 1"; + FieldSetEntity fseFunction = baseDao.getFieldSetBySQL(sql, new String[]{doc.get(CmnConst.TABLE_NAME)}, false); + if (fseFunction != null) { + jsonFile.put(CoreConst.FUNCTION_UUID, fseFunction.getString(CoreConst.UUID)); + //鍥炲啓鍔熻兘淇℃伅鍒版枃妗d俊鎭腑 + doc.add(new StoredField(CoreConst.FUNCTION_UUID, fseFunction.getString(CoreConst.UUID))); + indexWriter.updateDocument(new Term(CoreConst.UUID, doc.get(CoreConst.UUID)), doc); + } + } // 鏂囦欢鍚嶅鍔犻珮浜樉绀� String fileName = doc.get(CmnConst.FILE_NAME); String file_name = highlighter.getBestFragment(new SmartChineseAnalyzer(), CmnConst.FILE_NAME, @@ -163,7 +185,7 @@ if (StringUtils.isEmpty(file_content)) { file_content = fileContent; } - + jsonFile.put(CmnConst.FILE_NAME, file_name); jsonFile.put(CmnConst.FILE_CONTENT, file_content); listJsonFile.add(jsonFile); @@ -182,14 +204,14 @@ } return jsonReturn; } - + /** * 瑙f瀽鏌ヨ鏉′欢 * @param fse * @return * @throws ParseException */ - public Query searchFilterParse(FieldSetEntity fse) throws ParseException { + public Query searchFilterParse(FieldSetEntity fse) throws ParseException { // 涓婁紶浜� String uploadUser = fse.getString("upload_user"); String startDate = fse.getString("start_date"); @@ -198,7 +220,7 @@ // 鍒涘缓鏌ヨ鏉′欢 BooleanQuery.Builder boolQuery = new BooleanQuery.Builder(); - + // 涓婁紶浜鸿繃婊� if (!BaseUtil.strIsNull(uploadUser)) { Query uploaderQuery = new TermQuery(new Term("upload_user", uploadUser)); @@ -221,13 +243,13 @@ // 鍏抽敭璇嶈繃婊� if (!BaseUtil.strIsNull(searchKey)) { QueryParser queryParser = new MultiFieldQueryParser( - new String[] { CmnConst.FILE_NAME, CmnConst.FILE_CONTENT }, new SmartChineseAnalyzer()); + new String[]{CmnConst.FILE_NAME, CmnConst.FILE_CONTENT}, new SmartChineseAnalyzer()); Query query = queryParser.parse(searchKey); boolQuery.add(query, BooleanClause.Occur.MUST); } return boolQuery.build(); } - + /** * 鏌ヨ鏂囦欢楂樹寒鍖归厤鍣� * @param finalQuery @@ -236,7 +258,7 @@ public Highlighter highlighterParse(Query finalQuery) { // 楂樹寒鏍煎紡 SimpleHTMLFormatter simpleHTMLFormatter = new SimpleHTMLFormatter(CmnConst.HIGHLIGHT_BEFORE, - CmnConst.HIGHLIGHT_AFTER); + CmnConst.HIGHLIGHT_AFTER); // 楂樹寒鍖归厤鍣� Highlighter highlighter = new Highlighter(simpleHTMLFormatter, new QueryScorer(finalQuery)); Fragmenter fragmenter = new SimpleFragmenter(100); @@ -249,24 +271,21 @@ * @param listJsonFile */ public void getFileInfo(List<JSONObject> listJsonFile) { - StringBuilder sql = new StringBuilder(); - for (int i = 0; i < listJsonFile.size(); i++) { - JSONObject jsonFile = listJsonFile.get(i); - if (i > 0) { - sql.append("UNION ALL \n"); - } - sql.append("SELECT \n"); - sql.append(" A.uuid,A.attachment_data_table,A.attachment_data_field,DATE_FORMAT(A.created_utc_datetime,'%Y-%m-%d') AS upload_date, \n"); - sql.append(" B.org_fields,B.user_fields,B.title_field,B.time_field, \n"); - sql.append(" C.uuid AS function_uuid,C.function_name,D.user_name AS upload_user "); - sql.append("FROM product_sys_attachments A \n"); - sql.append("LEFT JOIN product_sys_document_search B ON B.table_name = A.attachment_data_table \n"); - sql.append("LEFT JOIN product_sys_functions C ON C.uuid = B.function_uuid \n"); - sql.append("LEFT JOIN product_sys_users D ON D.user_id = A.created_by \n"); - sql.append("WHERE A.uuid = '").append(jsonFile.get("file_uuid")).append("' \n"); - } + StringBuilder sql = new StringBuilder(); + Set<String> fileUuids = listJsonFile.stream().map(jsonFile -> jsonFile.getString(CmnConst.FILE_UUID)).collect(Collectors.toSet()); + + sql.append("SELECT \n"); + sql.append(" A.uuid,A.attachment_data_table,A.attachment_data_field,DATE_FORMAT(A.created_utc_datetime,'%Y-%m-%d') AS upload_date, \n"); + sql.append(" B.org_fields,B.user_fields,B.title_field,B.time_field, \n"); + sql.append(" C.uuid AS function_uuid,C.function_name,D.user_name AS upload_user "); + sql.append("FROM product_sys_attachments A \n"); + sql.append(" JOIN product_sys_datamodel_table as " + UnifySQLSymbol.getSymbol("table") + " on A.attachment_data_table=" + UnifySQLSymbol.getSymbol("table") + ".table_name \n"); + sql.append("LEFT JOIN product_sys_document_search B ON B.table_name = " + UnifySQLSymbol.getSymbol("table") + ".uuid \n"); + sql.append("LEFT JOIN product_sys_functions C ON C.uuid = B.function_uuid \n"); + sql.append("LEFT JOIN product_sys_users D ON D.user_id = A.created_by \n"); + sql.append("WHERE ").append(BaseUtil.buildQuestionMarkFilter("A.uuid", fileUuids.size(), true)); // 鑾峰彇鏂囨。闄勪欢銆侀厤缃俊鎭� - DataTableEntity dtConfig = baseDao.listTable(sql.toString(), new Object[] {}); + DataTableEntity dtConfig = baseDao.listTable(sql.toString(), fileUuids.toArray()); if (!BaseUtil.dataTableIsEmpty(dtConfig)) { StringBuilder sqlService = new StringBuilder(); for (int i = 0; i < dtConfig.getRows(); i++) { @@ -292,13 +311,13 @@ sqlService.append("ON B.").append(fseConfig.getString(CmnConst.ATTACHMENT_DATA_FIELD)).append(" LIKE '%").append(fseConfig.getUUID()).append("%' \n"); } // 鑾峰彇鏂囨。涓氬姟鏁版嵁淇℃伅 - DataTableEntity dtService = baseDao.listTable(sqlService.toString(), new Object[] {}); + DataTableEntity dtService = baseDao.listTable(sqlService.toString(), new Object[]{}); if (!BaseUtil.dataTableIsEmpty(dtService)) { - Map<String, FieldSetEntity> map = dtService.getData().stream() - .collect(Collectors.toMap( - fseService -> fseService.getUUID(), - fseService -> fseService - )); + Map<String, FieldSetEntity> map = dtService.getData().stream() + .collect(Collectors.toMap( + fseService -> fseService.getUUID(), + fseService -> fseService + )); for (int i = 0; i < listJsonFile.size(); i++) { JSONObject jsonFile = listJsonFile.get(i); FieldSetEntity fseService = map.get(jsonFile.get(CmnConst.FILE_UUID)); @@ -315,7 +334,7 @@ } } } - + public JSONObject permission(String uuid, String function_uuid) { JSONObject json = new JSONObject(); StringBuilder searchConfigSql = new StringBuilder(); @@ -329,7 +348,7 @@ searchConfigSql.append("WHERE A.function_uuid=?"); // 鑾峰彇鏂囨。妫�绱㈤厤缃�(鍔熻兘锛岃烦杞寜閽�) - FieldSetEntity fseConfig = baseDao.getFieldSetEntityBySQL(searchConfigSql.toString(), new Object[] { function_uuid }, false); + FieldSetEntity fseConfig = baseDao.getFieldSetEntityBySQL(searchConfigSql.toString(), new Object[]{function_uuid}, false); if (fseConfig != null) { // 鑾峰彇璺宠浆鎸夐挳 骞� 鍒ゆ柇璺宠浆鏉冮檺 @@ -373,12 +392,12 @@ // 鑾峰彇鍘熸暟鎹� FieldSetEntity fseService = baseDao.getFieldSetEntityByFilter( fseAttachment.getString(CmnConst.ATTACHMENT_DATA_TABLE), filter.toString(), - new Object[] { uuid }, false); + new Object[]{uuid}, false); if (fseService == null) { // 鑾峰彇鏃犳潈闄愯繃婊ょ殑鍘熸暟鎹� FieldSetEntity fseService2 = baseDao.getFieldSetEntityByFilter( fseAttachment.getString(CmnConst.ATTACHMENT_DATA_TABLE), - fseAttachment.getString(CmnConst.ATTACHMENT_DATA_FIELD) + "=?", new Object[] { uuid }, + fseAttachment.getString(CmnConst.ATTACHMENT_DATA_FIELD) + "=?", new Object[]{uuid}, false); if (fseService2 == null) { json.put("permission_msg", "鏁版嵁寮傚父-涓氬姟鏁版嵁涓嶅瓨鍦�"); @@ -401,7 +420,7 @@ // 鑾峰彇鍗曚綅鏂囨。鎵�灞炵洰褰曟潈闄� FieldSetEntity fseDirectRight = baseDao.getFieldSetByFilter( CmnConst.PRODUCT_OA_DIRECTORY_RIGHTS, "directory_uuid=?", - new Object[] { fseService.getString(CmnConst.DIRECTORY_UUID) }, false); + new Object[]{fseService.getString(CmnConst.DIRECTORY_UUID)}, false); if (fseDirectRight == null) { json.put("permission_msg", "鏂囨。鏉冮檺绛栫暐-姝ゆ枃妗f偍娌℃湁鏌ョ湅鏉冮檺"); json.put(CmnConst.IS_PERSSION, 4); @@ -422,7 +441,7 @@ /** * 鏂囦欢妫�绱㈡煡璇㈠垎椤� - * + * * @param cpage 褰撳墠椤� * @param pagesize 姣忛〉澶у皬 * @param searcher 鏌ヨ鍣� @@ -450,7 +469,7 @@ /** * 鏍规嵁闄勪欢uuid鍒犻櫎绱㈠紩 - * + * * @param uuid * @throws IOException */ -- Gitblit v1.9.2