Kaynağa Gözat

搜索项目仪器

chao 4 yıl önce
ebeveyn
işleme
5c3abb3327

+ 19 - 4
src/main/java/com/caimei365/commodity/components/SearchOpenService.java

@@ -69,13 +69,15 @@ public class SearchOpenService {
     }
     }
 
 
     /**
     /**
-     * 查询操作
+     * 获取查询结果
      *
      *
-     * @param searchParams 搜索参数
+     * @param queryStr      查询类型及参数串
+     * @param searchParams  搜索参数obj
+     * @return JSONObject
      * @throws OpenSearchClientException exp
      * @throws OpenSearchClientException exp
      * @throws OpenSearchException       exp
      * @throws OpenSearchException       exp
      */
      */
-    public String pushQueryDocument(SearchParams searchParams) throws OpenSearchClientException, OpenSearchException {
+    public JSONObject getResultJsonObject(String queryStr, SearchParams searchParams) throws OpenSearchClientException, OpenSearchException {
         // 创建并构造OpenSearch对象
         // 创建并构造OpenSearch对象
         OpenSearch openSearch = new OpenSearch(accesskey, secret, host);
         OpenSearch openSearch = new OpenSearch(accesskey, secret, host);
         // 创建OpenSearchClient对象,并以OpenSearch对象作为构造参数
         // 创建OpenSearchClient对象,并以OpenSearch对象作为构造参数
@@ -84,13 +86,26 @@ public class SearchOpenService {
         SearcherClient searcherClient = new SearcherClient(serviceClient);
         SearcherClient searcherClient = new SearcherClient(serviceClient);
         // 执行返回查询结果。用户需按code和message,进行异常情况判断。code对应的错误信息查看——错误码文档。
         // 执行返回查询结果。用户需按code和message,进行异常情况判断。code对应的错误信息查看——错误码文档。
         SearchResult searchResult = searcherClient.execute(searchParams);
         SearchResult searchResult = searcherClient.execute(searchParams);
-        String result = searchResult.getResult();
         if (appName.contains("test")) {
         if (appName.contains("test")) {
             // debug请求地址信息
             // debug请求地址信息
             SearchResultDebug searched = searcherClient.executeDebug(searchParams);
             SearchResultDebug searched = searcherClient.executeDebug(searchParams);
             // 输出查询请求串信息
             // 输出查询请求串信息
             log.info(">>>>>>queryUrl: " + searched.getRequestUrl());
             log.info(">>>>>>queryUrl: " + searched.getRequestUrl());
         }
         }
+        String jsonStr = searchResult.getResult();
+        // 处理查询结果
+        JSONObject jsonObj = new JSONObject(jsonStr);
+        String status = jsonObj.getString("status");
+        String requestId = jsonObj.getString("request_id");
+        String tracer = jsonObj.getString("tracer");
+        JSONObject result = jsonObj.getJSONObject("result");
+        JSONArray errors = jsonObj.getJSONArray("errors");
+        log.info(">>>>>>query("+queryStr+"): " + status + ",request_id=" +requestId+ ",errors=" + errors.toString() + ",tracer="+tracer);
+        if ("OK".equals(status)) {
+            result.put("status", 1);
+        } else {
+            result.put("status", 0);
+        }
         return result;
         return result;
     }
     }
 
 

+ 20 - 0
src/main/java/com/caimei365/commodity/controller/SearchQueryApi.java

@@ -110,4 +110,24 @@ public class SearchQueryApi {
                                                        @RequestParam(value = "pageSize", defaultValue = "10") int pageSize) {
                                                        @RequestParam(value = "pageSize", defaultValue = "10") int pageSize) {
         return searchQueryService.querySupplierByKeyword(keyword, identity, pageNum, pageSize);
         return searchQueryService.querySupplierByKeyword(keyword, identity, pageNum, pageSize);
     }
     }
+
+    /**
+     * 根据关键词搜索项目仪器
+     *
+     * spi旧接口:/search/query/equipment
+     *
+     * @param keyword 搜索关键字
+     */
+    @ApiOperation("根据关键词搜索项目仪器")
+    @ApiImplicitParams({
+        @ApiImplicitParam(required = false, name = "keyword", value = "搜索关键字"),
+        @ApiImplicitParam(required = false, name = "pageNum", value = "页码"),
+        @ApiImplicitParam(required = false, name = "pageSize", value = "每页数量")
+    })
+    @GetMapping("equipment")
+    public ResponseJson<String> queryEquipmentByKeyword(String keyword,
+                                             @RequestParam(value = "pageNum", defaultValue = "1") int pageNum,
+                                             @RequestParam(value = "pageSize", defaultValue = "20") int pageSize) {
+        return searchQueryService.queryEquipmentByKeyword(keyword, pageNum, pageSize);
+    }
 }
 }

+ 10 - 0
src/main/java/com/caimei365/commodity/service/SearchQueryService.java

@@ -53,4 +53,14 @@ public interface SearchQueryService {
      * @return JsonStr(list)
      * @return JsonStr(list)
      */
      */
     ResponseJson<String> querySupplierByKeyword(String keyword, Integer identity, int pageNum, int pageSize);
     ResponseJson<String> querySupplierByKeyword(String keyword, Integer identity, int pageNum, int pageSize);
+
+    /**
+     * 根据关键词搜索项目仪器
+     *
+     * @param keyword  搜索关键字
+     * @param pageNum   页码
+     * @param pageSize  每页数量
+     * @return JsonStr(list)
+     */
+    ResponseJson<String> queryEquipmentByKeyword(String keyword, int pageNum, int pageSize);
 }
 }

+ 9 - 30
src/main/java/com/caimei365/commodity/service/impl/SearchProductServiceImpl.java

@@ -245,16 +245,9 @@ public class SearchProductServiceImpl implements SearchProductService {
         }
         }
         // 查询推送
         // 查询推送
         try {
         try {
-            String jsonStr = searchOpenService.pushQueryDocument(searchParams);
-            // 处理查询结果
-            JSONObject jsonObj = new JSONObject(jsonStr);
-            String status = jsonObj.getString("status");
-            String requestId = jsonObj.getString("request_id");
-            String tracer = jsonObj.getString("tracer");
-            JSONObject result = jsonObj.getJSONObject("result");
-            JSONArray errors = jsonObj.getJSONArray("errors");
-            log.info(">>>>>>query("+queryStr+"): " + status + ",request_id=" +requestId+ ",errors=" + errors.toString() + ",tracer="+tracer);
-            if ("OK".equals(status)) {
+// 查询推送
+            JSONObject result = searchOpenService.getResultJsonObject(queryStr, searchParams);
+            if (1 == result.getInt("status")) {
                 int total = result.getInt("total");
                 int total = result.getInt("total");
                 int totalPage = (int) Math.ceil( (double)total/size);
                 int totalPage = (int) Math.ceil( (double)total/size);
                 JSONArray resultArr = result.getJSONArray("items");
                 JSONArray resultArr = result.getJSONArray("items");
@@ -315,16 +308,9 @@ public class SearchProductServiceImpl implements SearchProductService {
         searchParams.setDeepPaging(deep);
         searchParams.setDeepPaging(deep);
         // 查询推送
         // 查询推送
         try {
         try {
-            String jsonStr = searchOpenService.pushQueryDocument(searchParams);
-            // 处理查询结果
-            JSONObject jsonObj = new JSONObject(jsonStr);
-            String status = jsonObj.getString("status");
-            String requestId = jsonObj.getString("request_id");
-            String tracer = jsonObj.getString("tracer");
-            JSONObject result = jsonObj.getJSONObject("result");
-            JSONArray errors = jsonObj.getJSONArray("errors");
-            log.info(">>>>>>query("+queryStr+"): " + status + ",request_id=" +requestId+ ",errors=" + errors.toString() + ",tracer="+tracer);
-            if ("OK".equals(status)) {
+            // 查询推送
+            JSONObject result = searchOpenService.getResultJsonObject(queryStr, searchParams);
+            if (1 == result.getInt("status")) {
                 int total = result.getInt("total");
                 int total = result.getInt("total");
                 int totalPage = (int) Math.ceil( (double)total/pageSize);
                 int totalPage = (int) Math.ceil( (double)total/pageSize);
                 JSONArray pageData = new JSONArray();
                 JSONArray pageData = new JSONArray();
@@ -334,16 +320,9 @@ public class SearchProductServiceImpl implements SearchProductService {
                     deep.setScrollId(result.getString("scroll_id"));
                     deep.setScrollId(result.getString("scroll_id"));
                     //不设置默认为1m表示1分钟,如不想使用默认值,每次重新调用前必须要重新设置下
                     //不设置默认为1m表示1分钟,如不想使用默认值,每次重新调用前必须要重新设置下
                     deep.setScrollExpire("3m");
                     deep.setScrollExpire("3m");
-                    jsonStr = searchOpenService.pushQueryDocument(searchParams);
-                    // 处理查询结果
-                    jsonObj = new JSONObject(jsonStr);
-                    status = jsonObj.getString("status");
-                    requestId = jsonObj.getString("request_id");
-                    tracer = jsonObj.getString("tracer");
-                    result = jsonObj.getJSONObject("result");
-                    errors = jsonObj.getJSONArray("errors");
-                    log.info(">>>>>>query("+queryStr+"): " + status + ",request_id=" +requestId+ ",errors=" + errors.toString() + ",tracer="+tracer);
-                    if ("OK".equals(status)) {
+                    // 查询推送
+                    result = searchOpenService.getResultJsonObject(queryStr, searchParams);
+                    if (1 == result.getInt("status")) {
                         JSONArray resultArr = result.getJSONArray("items");
                         JSONArray resultArr = result.getJSONArray("items");
                         if (resultArr.length()>0){
                         if (resultArr.length()>0){
                             if (requestSize > SEARCH_MAX_NUM){
                             if (requestSize > SEARCH_MAX_NUM){

+ 96 - 64
src/main/java/com/caimei365/commodity/service/impl/SearchQueryServiceImpl.java

@@ -24,6 +24,7 @@ import org.springframework.stereotype.Service;
 
 
 import javax.annotation.Resource;
 import javax.annotation.Resource;
 import java.util.ArrayList;
 import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
 import java.util.List;
 import java.util.Map;
 import java.util.Map;
 
 
@@ -89,17 +90,9 @@ public class SearchQueryServiceImpl implements SearchQueryService {
             searchParams.setSort(sorter);
             searchParams.setSort(sorter);
         }
         }
         try {
         try {
-            // 推送查询操作
-            String jsonStr = searchOpenService.pushQueryDocument(searchParams);
-            // 处理查询结果
-            JSONObject jsonObj = new JSONObject(jsonStr);
-            String status = jsonObj.getString("status");
-            String requestId = jsonObj.getString("request_id");
-            String tracer = jsonObj.getString("tracer");
-            JSONObject result = jsonObj.getJSONObject("result");
-            JSONArray errors = jsonObj.getJSONArray("errors");
-            log.info(">>>>>>query id("+docType+"): " + status + ",request_id=" +requestId+ ",errors=" + errors.toString() + ",tracer="+tracer);
-            if ("OK".equals(status) && result.getJSONArray("items").length()>0) {
+            // 查询推送
+            JSONObject result = searchOpenService.getResultJsonObject("id:"+docType, searchParams);
+            if (1 == result.getInt("status") && result.getJSONArray("items").length()>0) {
                 return result.getJSONArray("items").getJSONObject(0).getInt("id");
                 return result.getJSONArray("items").getJSONObject(0).getInt("id");
             } else {
             } else {
                 return -1;
                 return -1;
@@ -150,17 +143,9 @@ public class SearchQueryServiceImpl implements SearchQueryService {
         SearchParams searchParams = new SearchParams(config);
         SearchParams searchParams = new SearchParams(config);
         searchParams.setQuery(queryStr);
         searchParams.setQuery(queryStr);
         try {
         try {
-            // 推送查询操作
-            String jsonStr = searchOpenService.pushQueryDocument(searchParams);
-            // 处理查询结果
-            JSONObject jsonObj = new JSONObject(jsonStr);
-            String status = jsonObj.getString("status");
-            String requestId = jsonObj.getString("request_id");
-            String tracer = jsonObj.getString("tracer");
-            JSONObject result = jsonObj.getJSONObject("result");
-            JSONArray errors = jsonObj.getJSONArray("errors");
-            log.info(">>>>>>query idMap("+idName+"): " + status + ",request_id=" +requestId+ ",errors=" + errors.toString() + ",tracer="+tracer);
-            if ("OK".equals(status)) {
+            // 查询推送
+            JSONObject result = searchOpenService.getResultJsonObject("idMap:"+idName, searchParams);
+            if (1 == result.getInt("status")) {
                 JSONArray jsonArray = result.getJSONArray("items");
                 JSONArray jsonArray = result.getJSONArray("items");
                 for (int i = 0; i < jsonArray.length(); i++) {
                 for (int i = 0; i < jsonArray.length(); i++) {
                     idMap.put(jsonArray.getJSONObject(i).getInt(idName), jsonArray.getJSONObject(i).getInt("id"));
                     idMap.put(jsonArray.getJSONObject(i).getInt(idName), jsonArray.getJSONObject(i).getInt("id"));
@@ -210,17 +195,9 @@ public class SearchQueryServiceImpl implements SearchQueryService {
         //添加Aggregate对象参数
         //添加Aggregate对象参数
         searchParams.addToAggregates(agg);
         searchParams.addToAggregates(agg);
         try {
         try {
-            // 推送查询操作
-            String jsonStr = searchOpenService.pushQueryDocument(searchParams);
-            // 处理查询结果
-            JSONObject jsonObj = new JSONObject(jsonStr);
-            String status = jsonObj.getString("status");
-            String requestId = jsonObj.getString("request_id");
-            String tracer = jsonObj.getString("tracer");
-            JSONObject result = jsonObj.getJSONObject("result");
-            JSONArray errors = jsonObj.getJSONArray("errors");
-            log.info(">>>>>>query  count("+docType+"): " + status + ",request_id=" +requestId+ ",errors=" + errors.toString() + ",tracer="+tracer);
-            if ("OK".equals(status)) {
+            // 查询推送
+            JSONObject result = searchOpenService.getResultJsonObject("count:"+docType, searchParams);
+            if (1 == result.getInt("status")) {
                 return result.getJSONArray("facet").getJSONObject(0)
                 return result.getJSONArray("facet").getJSONObject(0)
                              .getJSONArray("items").getJSONObject(0).getInt("count");
                              .getJSONArray("items").getJSONObject(0).getInt("count");
             } else {
             } else {
@@ -274,17 +251,9 @@ public class SearchQueryServiceImpl implements SearchQueryService {
             searchParams.setSort(sorter);
             searchParams.setSort(sorter);
         }
         }
         try {
         try {
-            // 推送查询操作
-            String jsonStr = searchOpenService.pushQueryDocument(searchParams);
-            // 处理查询结果
-            JSONObject jsonObj = new JSONObject(jsonStr);
-            String status = jsonObj.getString("status");
-            String requestId = jsonObj.getString("request_id");
-            String tracer = jsonObj.getString("tracer");
-            JSONObject result = jsonObj.getJSONObject("result");
-            JSONArray errors = jsonObj.getJSONArray("errors");
-            log.info(">>>>>>query count("+docType+"): " + status + ",request_id=" +requestId+ ",errors=" + errors.toString() + ",tracer="+tracer);
-            if ("OK".equals(status) && result.getJSONArray("items").length()>=0) {
+            // 查询推送
+            JSONObject result = searchOpenService.getResultJsonObject("count:"+docType, searchParams);
+            if (1 == result.getInt("status") && result.getJSONArray("items").length()>=0) {
                 return result.getJSONArray("items").length();
                 return result.getJSONArray("items").length();
             } else {
             } else {
                 return -1;
                 return -1;
@@ -320,6 +289,83 @@ public class SearchQueryServiceImpl implements SearchQueryService {
         }
         }
     }
     }
 
 
+    /**
+     * 根据关键词搜索项目仪器
+     *
+     * @param keyword  搜索关键字
+     * @param pageNum  页码
+     * @param pageSize 每页数量
+     * @return JsonStr(list)
+     */
+    @Override
+    public ResponseJson<String> queryEquipmentByKeyword(String keyword, int pageNum, int pageSize) {
+        String queryStr = "equipment:'" + keyword + "'";
+        if (StringUtils.isEmpty(keyword)) {
+            queryStr = "e_all:'1'";
+        }
+        return queryEquipment(queryStr, pageNum, pageSize);
+    }
+
+    private ResponseJson<String> queryEquipment(String queryStr, int pageNum, int pageSize) {
+        ArrayList<String> fetchFields = Lists.newArrayList("id", "e_id", "e_name", "e_image");
+        List<Map<String, String>> summaryList = new ArrayList<>(1);
+        Map<String, String> summaryField = new HashMap<>(2);
+        summaryField.put("length", "100");
+        summaryField.put("field", "e_name");
+        summaryList.add(summaryField);
+        // 由于阿里云搜索机制问题(分页数据重复),搜索500条以内数据手动分页。
+        SearchParams searchParams;
+        int requestSize = pageNum*pageSize;
+        if (requestSize > SEARCH_MAX_NUM){
+            searchParams = searchOpenService.getSearchParams(queryStr, fetchFields, summaryList, "equipment", pageNum, pageSize, null, null);
+        } else {
+            searchParams = searchOpenService.getSearchParams(queryStr, fetchFields, summaryList, "equipment", 1, requestSize, null, null);
+        }
+        // 查询推送
+        try {
+            // 查询推送
+            JSONObject result = searchOpenService.getResultJsonObject(queryStr, searchParams);
+            if (1 == result.getInt("status")) {
+                JSONArray resultArr = result.getJSONArray("items");
+                JSONArray pageData = new JSONArray();
+                int total = result.getInt("total");
+                int totalPage = (int) Math.ceil( (double)total/pageSize);
+                if (requestSize > SEARCH_MAX_NUM) {
+                    pageData = resultArr;
+                } else {
+                    if (resultArr.length()>0){
+                        int baseNum = (pageNum-1)*pageSize;
+                        for (int i=0; i<pageSize; i++) {
+                            int index = baseNum + i;
+                            int currentTotal = requestSize;
+                            if (totalPage == pageNum){
+                                currentTotal = total;
+                            }
+                            if (index<currentTotal){
+                                JSONObject item = resultArr.getJSONObject(index);
+                                pageData.put(i, item);
+                            } else {
+                                break;
+                            }
+                        }
+                    }
+                }
+                JSONObject pageObj = new JSONObject();
+                pageObj.put("total", total);
+                pageObj.put("items", pageData);
+                log.info(">>>>>>pageResult("+queryStr+"): pageSize(" + pageSize +"),pageNum("+pageNum+"),total("+total+")");
+                return ResponseJson.success(pageObj.toString());
+            } else {
+                return ResponseJson.error("未查询到文档记录", null);
+            }
+        } catch (OpenSearchClientException | OpenSearchException | JSONException e) {
+            log.error("查询文档异常:" + e.getMessage());
+            return ResponseJson.error("查询文档异常:" + e.getMessage(), null);
+        }
+    }
+
+
+
     /**
     /**
      * 获取供应商(数据库)
      * 获取供应商(数据库)
      *
      *
@@ -369,16 +415,9 @@ public class SearchQueryServiceImpl implements SearchQueryService {
         }
         }
         // 查询推送
         // 查询推送
         try {
         try {
-            String jsonStr = searchOpenService.pushQueryDocument(searchParams);
-            // 处理查询结果
-            JSONObject jsonObj = new JSONObject(jsonStr);
-            String status = jsonObj.getString("status");
-            String requestId = jsonObj.getString("request_id");
-            String tracer = jsonObj.getString("tracer");
-            JSONObject result = jsonObj.getJSONObject("result");
-            JSONArray errors = jsonObj.getJSONArray("errors");
-            log.info(">>>>>>query("+queryStr+"): " + status + ",request_id=" +requestId+ ",errors=" + errors.toString() + ",tracer="+tracer);
-            if ("OK".equals(status)) {
+            // 查询推送
+            JSONObject result = searchOpenService.getResultJsonObject(queryStr, searchParams);
+            if (1 == result.getInt("status")) {
                 int total = result.getInt("total");
                 int total = result.getInt("total");
                 int totalPage = (int) Math.ceil( (double)total/pageSize);
                 int totalPage = (int) Math.ceil( (double)total/pageSize);
                 JSONArray resultArr = result.getJSONArray("items");
                 JSONArray resultArr = result.getJSONArray("items");
@@ -408,16 +447,9 @@ public class SearchQueryServiceImpl implements SearchQueryService {
                     int supplierId = supplier.getInt("s_id");
                     int supplierId = supplier.getInt("s_id");
                     String productQuery = "p_supplier:'" + supplierId + "'";
                     String productQuery = "p_supplier:'" + supplierId + "'";
                     SearchParams productSearchParams = searchOpenService.getProductParams(productQuery, "", identity, 1, 3, "", null);
                     SearchParams productSearchParams = searchOpenService.getProductParams(productQuery, "", identity, 1, 3, "", null);
-                    String productStr = searchOpenService.pushQueryDocument(productSearchParams);
-                    // 处理查询结果
-                    JSONObject productObj = new JSONObject(productStr);
-                    String pStatus = productObj.getString("status");
-                    String pRequestId = productObj.getString("request_id");
-                    String pTracer = productObj.getString("tracer");
-                    JSONObject pResult = productObj.getJSONObject("result");
-                    JSONArray pErrors = productObj.getJSONArray("errors");
-                    log.info(">>>>>>query("+productQuery+"): " + pStatus + ",request_id=" +pRequestId+ ",errors=" + pErrors.toString() + ",tracer="+pTracer);
-                    if ("OK".equals(pStatus)) {
+                    // 查询商品
+                    JSONObject pResult = searchOpenService.getResultJsonObject(productQuery, productSearchParams);
+                    if (1 == pResult.getInt("status")) {
                         JSONArray productArr = pResult.getJSONArray("items");
                         JSONArray productArr = pResult.getJSONArray("items");
                         supplier.put("products", productArr);
                         supplier.put("products", productArr);
                     }
                     }