From e27c43f254793a834f4713637494b088bdb34680 Mon Sep 17 00:00:00 2001 From: 杜洪波 <1074825718@qq.com> Date: 星期五, 30 八月 2024 18:31:50 +0800 Subject: [PATCH] 文档检索代码优化 --- src/main/java/com/product/lucene/config/CmnConst.java | 7 + src/main/java/com/product/lucene/controller/LuceneController.java | 26 ++++++++ src/main/java/com/product/lucene/service/LuceneService.java | 130 +++++++++++++++++++++++++------------------ 3 files changed, 104 insertions(+), 59 deletions(-) diff --git a/src/main/java/com/product/lucene/config/CmnConst.java b/src/main/java/com/product/lucene/config/CmnConst.java index 051287a..cc1e77c 100644 --- a/src/main/java/com/product/lucene/config/CmnConst.java +++ b/src/main/java/com/product/lucene/config/CmnConst.java @@ -12,6 +12,7 @@ public static final String ATTACHMENT_UUID="attachment_uuid"; public static final String UPLOAD_USER="upload_user"; public static final String UPLOAD_DATE="upload_date"; + public static final String FILE_UUID = "file_uuid"; public static final String FILE_NAME="file_name"; public static final String FILE_CONTENT="file_content"; public static final String ORG_FIELDS="org_fileds"; @@ -30,9 +31,11 @@ public static final String SEARCH_CONTENT="search_content"; public static final String CONTENT_TYPE="content_type"; - public static final String TITLE="title"; - public static final String IS_PERSSION="is_perssion"; //0:鏁版嵁鏉冮檺涓嶅 1锛氬師鏁版嵁涓嶅瓨鍦� 2锛氳烦杞寜閽湭閰嶇疆 + public static final String SERVICE_UUID="service_uuid"; + public static final String SERVICE_TITLE = "service_title"; + public static final String SERVICE_TIME = "service_time"; + public static final String IS_PERSSION="is_perssion"; //0:鏁版嵁鏉冮檺涓嶅 1锛氬師鏁版嵁涓嶅瓨鍦� 2锛氳烦杞寜閽湭閰嶇疆 public static final String DATE_TIME="date_time"; public static final String TOTALCOUNT="totalCount"; public static final String DATA="data"; diff --git a/src/main/java/com/product/lucene/controller/LuceneController.java b/src/main/java/com/product/lucene/controller/LuceneController.java index e84a70d..7239dc2 100644 --- a/src/main/java/com/product/lucene/controller/LuceneController.java +++ b/src/main/java/com/product/lucene/controller/LuceneController.java @@ -2,6 +2,7 @@ import com.alibaba.fastjson.JSONObject; import com.product.common.lang.StringUtils; +import com.product.core.config.CoreConst; import com.product.core.controller.support.AbstractBaseController; import com.product.core.entity.FieldSetEntity; import com.product.core.exception.BaseException; @@ -30,7 +31,7 @@ * 鍒涘缓绱㈠紩 * @param request */ - @RequestMapping("created/{version}") + @RequestMapping("/created/{version}") @ApiVersion(1) public void create(HttpServletRequest request) { try { @@ -48,7 +49,7 @@ * @param request * @return */ - @RequestMapping("search/{version}") + @RequestMapping("/search/{version}") @ApiVersion(1) public String search(HttpServletRequest request) { try { @@ -68,4 +69,25 @@ return error("", ""); } } + + /** + * 妫�绱㈡枃浠惰烦杞潈闄� + * @param request + * @return + */ + @RequestMapping("/permission/{version}") + @ApiVersion(1) + public String permission(HttpServletRequest request) { + try { + FieldSetEntity fse = BaseUtil.getFieldSetEntity(request); + JSONObject object = luceneService.permission(fse.getUUID(), fse.getString(CoreConst.FUNCTION_UUID)); + return ResultInfo.success(object); + } catch (BaseException e) { + e.printStackTrace(); + return error(e); + } catch (Exception e) { + e.printStackTrace(); + return error("", ""); + } + } } diff --git a/src/main/java/com/product/lucene/service/LuceneService.java b/src/main/java/com/product/lucene/service/LuceneService.java index f041b92..1a82ed6 100644 --- a/src/main/java/com/product/lucene/service/LuceneService.java +++ b/src/main/java/com/product/lucene/service/LuceneService.java @@ -32,6 +32,8 @@ import java.io.IOException; import java.util.ArrayList; import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; /** * 鏂囦欢妫�绱� @@ -118,13 +120,13 @@ public JSONObject searchProduct(FieldSetEntity fse) throws Exception { // 鍒锋柊IndexSearcher瀹炰緥 searcherManager.maybeRefresh(); - // 鑾峰彇瀹夊叏鐨処ndexSearcher瀹炰緥 + // 鍒涘缓IndexSearcher瀹炰緥 IndexSearcher indexSearcher = null; // 鏂囨。淇℃伅姹囨�� - List<JSONObject> jsonTotal = new ArrayList<>(); + List<JSONObject> listJsonFile = new ArrayList<>(); Long totalCount = 0L; try { - + // 鑾峰彇瀹夊叏鐨処ndexSearcher瀹炰緥 indexSearcher = searcherManager.acquire(); // 鑾峰彇鏉′欢鏌ヨ缁撴灉 @@ -132,7 +134,6 @@ // 鑾峰彇楂樹寒鍖归厤鍣� Highlighter highlighter = highlighterParse(finalQuery); - // 鍒嗛〉鏌ヨ鏂囨。 TopDocs topDocs = searchByPage(fse.getInteger(CoreConst.CPAGE), fse.getInteger(CoreConst.PAGESIZE), @@ -143,42 +144,42 @@ for (int i = 0; i < hits.length; i++) { // 鑾峰彇妫�绱㈠懡涓殑鏂囨。淇℃伅 Document doc = indexSearcher.doc(hits[i].doc); - String fileUUID = doc.get(CoreConst.UUID); - String functionUUID = doc.get(CoreConst.FUNCTION_UUID); - String fileName = doc.get(CmnConst.FILE_NAME); - String fileContent = doc.get(CmnConst.FILE_CONTENT); - JSONObject json = new JSONObject(); - if (!StringUtils.isEmpty(functionUUID)) { - getConfig(json, functionUUID, fileUUID); - } - json.put(CoreConst.FUNCTION_UUID, doc.get(CoreConst.FUNCTION_UUID)); + + JSONObject jsonFile = new JSONObject(); + jsonFile.put(CmnConst.FILE_UUID, doc.get(CoreConst.UUID)); + jsonFile.put(CoreConst.FUNCTION_UUID, doc.get(CoreConst.FUNCTION_UUID)); // 鏂囦欢鍚嶅鍔犻珮浜樉绀� + String fileName = doc.get(CmnConst.FILE_NAME); String file_name = highlighter.getBestFragment(new SmartChineseAnalyzer(), CmnConst.FILE_NAME, - CmnConst.FILE_NAME); + fileName); if (StringUtils.isEmpty(file_name)) { file_name = fileName; } // 鏂囦欢鍐呭澧炲姞楂樹寒鏄剧ず + String fileContent = doc.get(CmnConst.FILE_CONTENT); String file_content = highlighter.getBestFragment(new SmartChineseAnalyzer(), CmnConst.FILE_CONTENT, fileContent); if (StringUtils.isEmpty(file_content)) { file_content = fileContent; } - json.put("file_uuid", fileUUID); - json.put("function_uuid", functionUUID); - json.put(CmnConst.FILE_NAME, file_name); - json.put(CmnConst.FILE_CONTENT, file_content); - jsonTotal.add(json); + + jsonFile.put(CmnConst.FILE_NAME, file_name); + jsonFile.put(CmnConst.FILE_CONTENT, file_content); + listJsonFile.add(jsonFile); } } finally { // 鍏抽棴瀹炰緥璧勬簮 searcherManager.release(indexSearcher); } + // 鍒涘缓杩斿洖淇℃伅瀵硅薄 JSONObject jsonReturn = new JSONObject(); - getFileInfo(jsonTotal); jsonReturn.put(CmnConst.TOTALCOUNT, totalCount); - jsonReturn.put(CmnConst.DATA, jsonTotal); + if (listJsonFile.size() > 0) { + // 鑾峰彇鏂囨。灞曠ず淇℃伅 + getFileInfo(listJsonFile); + jsonReturn.put(CmnConst.DATA, listJsonFile); + } return jsonReturn; } @@ -243,23 +244,28 @@ return highlighter; } - + /** + * 鑾峰彇鏂囨。灞曠ず淇℃伅 + * @param listJsonFile + */ public void getFileInfo(List<JSONObject> listJsonFile) { - StringBuilder sql = new StringBuilder(); + 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,D.user_name AS upload_user,A.created_utc_datetime AS upload_date, \n"); - sql.append(" B.org_fields,B.user_fields,B.title_field,B.time_field \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"); } + // 鑾峰彇鏂囨。闄勪欢銆侀厤缃俊鎭� DataTableEntity dtConfig = baseDao.listTable(sql.toString(), new Object[] {}); if (!BaseUtil.dataTableIsEmpty(dtConfig)) { StringBuilder sqlService = new StringBuilder(); @@ -271,31 +277,47 @@ sqlService.append("SELECT \n"); sqlService.append(" A.uuid, \n"); sqlService.append(" B.uuid AS service_uuid, \n"); - sqlService.append(" A.upload_user, A.upload_date, \n"); + sqlService.append(" A.upload_user, A.upload_date, A.function_uuid, A.function_name, \n"); sqlService.append(" ").append(fseConfig.getString(CmnConst.TITLE_FIELD)).append(" AS service_title, \n"); sqlService.append(" ").append(fseConfig.getString(CmnConst.TIME_FIELD)).append(" AS service_time \n"); sqlService.append("FROM ( \n"); sqlService.append(" SELECT \n"); sqlService.append(" '").append(fseConfig.getString(CoreConst.UUID)).append("' AS uuid, \n"); sqlService.append(" '").append(fseConfig.getString(CmnConst.UPLOAD_USER)).append("' AS upload_user, \n"); - sqlService.append(" '").append(fseConfig.getString(CmnConst.UPLOAD_DATE)).append("' AS upload_date \n"); + sqlService.append(" '").append(fseConfig.getString(CmnConst.UPLOAD_DATE)).append("' AS upload_date, \n"); + sqlService.append(" '").append(fseConfig.getString(CoreConst.FUNCTION_UUID)).append("' AS function_uuid, \n"); + sqlService.append(" '").append(fseConfig.getString(CoreConst.FUNCTION_NAME)).append("' AS function_name \n"); sqlService.append(") A \n"); - sqlService.append("LEFT JOIN ").append(fseConfig.getString("attachment_data_table")).append(" B \n"); + sqlService.append("LEFT JOIN ").append(fseConfig.getString(CmnConst.ATTACHMENT_DATA_TABLE)).append(" B \n"); 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[] {}); + if (!BaseUtil.dataTableIsEmpty(dtService)) { + 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)); + if (fseService != null) { + jsonFile.put(CoreConst.FUNCTION_NAME, fseService.getString(CoreConst.FUNCTION_NAME)); + jsonFile.put(CoreConst.FUNCTION_UUID, fseService.getString(CoreConst.FUNCTION_UUID)); + jsonFile.put(CmnConst.UPLOAD_USER, fseService.getString(CmnConst.UPLOAD_USER)); + jsonFile.put(CmnConst.UPLOAD_DATE, fseService.getString(CmnConst.UPLOAD_DATE)); + jsonFile.put(CmnConst.SERVICE_UUID, fseService.getString(CmnConst.SERVICE_UUID)); + jsonFile.put(CmnConst.SERVICE_TITLE, fseService.getString(CmnConst.SERVICE_TITLE)); + jsonFile.put(CmnConst.SERVICE_TIME, fseService.getString(CmnConst.SERVICE_TIME)); + } + } + } } } - /** - * 鑾峰彇鏂囨。妫�绱㈤厤缃俊鎭紙鏉冮檺锛屽姛鑳藉悕绉帮紝璺宠浆鎸夐挳锛� - * - * @param json 妫�绱㈡枃浠跺搴斾俊鎭� - * @param function_uuid 鎵�灞炲姛鑳経UID - * @param service_uuid 闄勪欢UUID - */ - public void getConfig(JSONObject json, String function_uuid, String uuid) { - + public JSONObject permission(String uuid, String function_uuid) { + JSONObject json = new JSONObject(); StringBuilder searchConfigSql = new StringBuilder(); searchConfigSql.append("SELECT \n"); searchConfigSql.append(" A.uuid,A.function_uuid,A.function_button_uuid,A.table_name, \n"); @@ -307,15 +329,17 @@ 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) { // 鑾峰彇璺宠浆鎸夐挳 骞� 鍒ゆ柇璺宠浆鏉冮檺 String buttonName = fseConfig.getString(CoreConst.BUTTON_NAME); if (BaseUtil.strIsNull(buttonName)) { - json.put(CmnConst.IS_PERSSION, 2); + json.put(CmnConst.IS_PERSSION, 1); + json.put("permission_msg", "鏁版嵁閰嶇疆-璇ユ枃妗i厤缃笉鏀寔璺宠浆"); + return json; } else { + json.put(CmnConst.IS_PERSSION, 0); json.put(CmnConst.SKIPBUTTON, fseConfig.getString(CoreConst.BUTTON_NAME)); } @@ -325,7 +349,6 @@ // 鑾峰彇闄勪欢淇℃伅锛岀粨鍚堟暟鎹潈闄愬瓧娈碉紝鐢熸垚鍘熸暟鎹殑杩囨护SQL FieldSetEntity fseAttachment = baseDao.getFieldSetEntity(CmnConst.PRODUCT_SYS_ATTACHMENTS, uuid, false); - baseDao.loadPromptData(fseAttachment); if (fseAttachment != null) { StringBuilder filter = new StringBuilder(); filter.append(fseAttachment.getString(CmnConst.ATTACHMENT_DATA_FIELD)); @@ -358,13 +381,11 @@ fseAttachment.getString(CmnConst.ATTACHMENT_DATA_FIELD) + "=?", new Object[] { uuid }, false); if (fseService2 == null) { - json.put(CmnConst.TITLE, "涓氬姟鏁版嵁涓嶅瓨鍦�"); - json.put(CmnConst.IS_PERSSION, 1); + json.put("permission_msg", "鏁版嵁寮傚父-涓氬姟鏁版嵁涓嶅瓨鍦�"); + json.put(CmnConst.IS_PERSSION, 2); } else { - json.put(CmnConst.SERVICE_UUID, fseService2.getString(CoreConst.UUID)); - json.put(CmnConst.DATE_TIME, fseService2.getString(fseConfig.getString(CmnConst.TIME_FIELD))); - json.put(CmnConst.TITLE, fseService2.getString(fseConfig.getString(CmnConst.TITLE_FIELD))); - json.put(CmnConst.IS_PERSSION, 0); + json.put("permission_msg", "鏁版嵁绛栫暐-姝ゆ枃妗f偍娌℃湁鏌ョ湅鏉冮檺"); + json.put(CmnConst.IS_PERSSION, 3); } } else { @@ -373,7 +394,8 @@ if ("e4fa2c88-88a4-4ef4-9020-ebbe0440b4cf".equals(function_uuid)) { if (!SpringMVCContextHolder.getCurrentUserId() .equals(fseService.getString(CoreConst.CREATED_BY))) { - json.put(CmnConst.IS_PERSSION, 0); + json.put("permission_msg", "鏂囨。鏉冮檺绛栫暐-姝ゆ枃妗f偍娌℃湁鏌ョ湅鏉冮檺"); + json.put(CmnConst.IS_PERSSION, 4); } } else if ("01513ff6-c758-4384-b861-e58dfe146fdd".equals(function_uuid)) { // 鑾峰彇鍗曚綅鏂囨。鎵�灞炵洰褰曟潈闄� @@ -381,23 +403,21 @@ CmnConst.PRODUCT_OA_DIRECTORY_RIGHTS, "directory_uuid=?", new Object[] { fseService.getString(CmnConst.DIRECTORY_UUID) }, false); if (fseDirectRight == null) { - json.put(CmnConst.IS_PERSSION, 0); + json.put("permission_msg", "鏂囨。鏉冮檺绛栫暐-姝ゆ枃妗f偍娌℃湁鏌ョ湅鏉冮檺"); + json.put(CmnConst.IS_PERSSION, 4); } else { boolean succ = BaseUtil.multipleTypeConcat(fseDirectRight.getString(CmnConst.STORAGE_UUID), SpringMVCContextHolder.getCurrentUserId()); if (!succ) { - json.put(CmnConst.IS_PERSSION, 0); + json.put("permission_msg", "鏂囨。鏉冮檺绛栫暐-姝ゆ枃妗f偍娌℃湁鏌ョ湅鏉冮檺"); + json.put(CmnConst.IS_PERSSION, 4); } } } - json.put(CmnConst.SERVICE_UUID, fseService.getString(CoreConst.UUID)); - json.put(CmnConst.DATE_TIME, fseService.getString(fseConfig.getString(CmnConst.TIME_FIELD))); - json.put(CmnConst.TITLE, fseService.getString(fseConfig.getString(CmnConst.TITLE_FIELD))); } - json.put(CoreConst.FUNCTION_NAME, fseConfig.getString(CoreConst.FUNCTION_NAME)); - json.put(CoreConst.CREATED_BY, fseAttachment.getString(CoreConst.CREATED_BY)); } } + return json; } /** -- Gitblit v1.9.2