Browse Source

器件、批次搜索接口 params 类型支持 json

sunyj 8 years ago
parent
commit
6eafcc98f3

+ 122 - 61
src/main/java/com/uas/search/controller/SearchController.java

@@ -46,7 +46,7 @@ import com.uas.search.util.SearchUtils;
 
 /**
  * 搜索请求
- * 
+ *
  * @author suntg
  * @since 2016年8月1日上午9:18:05
  */
@@ -62,35 +62,35 @@ public class SearchController {
 	@RequestMapping("/kindIds/{keyword}")
 	@ResponseBody
 	public SPage<Long> seachKindIds(@PathVariable String keyword, Integer page, Integer size,
-			HttpServletRequest request) {
+									HttpServletRequest request) {
 		return searchService.getKindIds(keyword, page, size);
 	}
 
 	@RequestMapping("/kinds/{keyword}")
 	@ResponseBody
 	public SPage<Map<String, Object>> seachKinds(@PathVariable String keyword, Integer page, Integer size,
-			HttpServletRequest request) {
+												 HttpServletRequest request) {
 		return searchService.getKinds(keyword, page, size);
 	}
 
 	@RequestMapping("/brandIds/{keyword}")
 	@ResponseBody
 	public SPage<Long> searchBrandIds(@PathVariable String keyword, Integer page, Integer size,
-			HttpServletRequest request) {
+									  HttpServletRequest request) {
 		return searchService.getBrandIds(keyword, page, size);
 	}
 
 	@RequestMapping("/brands/{keyword}")
 	@ResponseBody
 	public SPage<Map<String, Object>> searchBrand(@PathVariable String keyword, Integer page, Integer size,
-			HttpServletRequest request) {
+												  HttpServletRequest request) {
 		return searchService.getBrands(keyword, page, size);
 	}
 
-	@RequestMapping("/componentIds")
+	@RequestMapping("/componentIds/old")
 	@ResponseBody
-	public Map<String, Object> searchComponentIds(String keyword, Integer page, Integer size, JSONObject filters,
-			HttpServletRequest request) {
+	public Map<String, Object> searchComponentIds(String keyword, Integer page, Integer size, String filters,
+												  HttpServletRequest request) {
 		PageParams pageParams = new PageParams();
 		if (page != null) {
 			pageParams.setPage(page);
@@ -99,8 +99,9 @@ public class SearchController {
 			pageParams.setSize(size);
 		}
 		Map<FilterField, Object> filtersMap = new HashMap<>();
-		if (filters != null) {
-			Set<Entry<String, Object>> entrySet = filters.entrySet();
+		if (!StringUtils.isEmpty(filters)) {
+			JSONObject json = JSONObject.parseObject(filters);
+			Set<Entry<String, Object>> entrySet = json.entrySet();
 			for (Entry<String, Object> entry : entrySet) {
 				FilterField field = FilterField.valueOf(entry.getKey().toUpperCase());
 				filtersMap.put(field, entry.getValue());
@@ -110,27 +111,46 @@ public class SearchController {
 		return searchService.getComponentIds(keyword, pageParams);
 	}
 
+    @RequestMapping("/componentIds")
+    @ResponseBody
+    public Map<String, Object> searchComponentIds(String keyword, String params, HttpServletRequest request) {
+        PageParams pageParams = params==null?null:JSONObject.parseObject(params, PageParams.class);
+        return searchService.getComponentIds(keyword, pageParams);
+    }
+
 	@Autowired
 	private ComponentDao componentDao;
 
-	@RequestMapping("/components")
+	@RequestMapping("/components/old")
 	@ResponseBody
-	public List<Component> searchComponents(String keyword, Integer page, Integer size, JSONObject filters,
-			HttpServletRequest request) {
+	public List<Component> searchComponents(String keyword, Integer page, Integer size, String filters,
+											HttpServletRequest request) {
 		@SuppressWarnings("unchecked")
 		List<Long> ids = (List<Long>) searchComponentIds(keyword, page, size, filters, request).get("componentIds");
-		if (CollectionUtils.isEmpty(ids)) {
-			return new ArrayList<Component>();
-		}
-
-		Long[] idsLong = new Long[ids.size()];
-		int i = 0;
-		for (Long id : ids) {
-			idsLong[i++] = id;
-		}
-		return componentDao.findAll(ids);
+        return findComponents(ids);
 	}
 
+    @RequestMapping("/components")
+    @ResponseBody
+    public List<Component> searchComponents(String keyword, String params, HttpServletRequest request) {
+        @SuppressWarnings("unchecked")
+        List<Long> ids = (List<Long>) searchComponentIds(keyword, params, request).get("componentIds");
+        return findComponents(ids);
+    }
+
+    private List<Component> findComponents(List<Long> ids){
+        if (CollectionUtils.isEmpty(ids)) {
+            return new ArrayList<Component>();
+        }
+
+        Long[] idsLong = new Long[ids.size()];
+        int i = 0;
+        for (Long id : ids) {
+            idsLong[i++] = id;
+        }
+        return componentDao.findAll(ids);
+    }
+
 	@RequestMapping("/kindIdsByComponent")
 	@ResponseBody
 	public Set<Long> searchKindIdsBySearchComponent(String keyword, String brandId, HttpServletRequest request) {
@@ -140,7 +160,7 @@ public class SearchController {
 	@RequestMapping("/kindsByComponent")
 	@ResponseBody
 	public List<Map<String, Object>> searchKindsBySearchComponent(String keyword, String brandId,
-			HttpServletRequest request) {
+																  HttpServletRequest request) {
 		return searchService.getKindsBySearchComponent(keyword, brandId);
 	}
 
@@ -153,7 +173,7 @@ public class SearchController {
 	@RequestMapping("/brandsByComponent")
 	@ResponseBody
 	public List<Map<String, Object>> searchBrandsBySearchComponent(String keyword, String kindId,
-			HttpServletRequest request) {
+																   HttpServletRequest request) {
 		return searchService.getBrandsBySearchComponent(keyword, kindId);
 	}
 
@@ -166,7 +186,7 @@ public class SearchController {
 	@RequestMapping("/similarComponents/{componentCode}")
 	@ResponseBody
 	public List<Map<String, Object>> getSimilarComponents(@PathVariable String componentCode,
-			HttpServletRequest request) {
+														  HttpServletRequest request) {
 		return searchService.getSimilarComponents(componentCode);
 	}
 
@@ -197,14 +217,14 @@ public class SearchController {
 	@RequestMapping("/similarPropertyValues")
 	@ResponseBody
 	public List<Map<String, String>> getSimilarPropertyValues(Long kindId, Long propertyId, String keyword, Long topNum,
-			HttpServletRequest request) {
+															  HttpServletRequest request) {
 		return searchService.getSimilarPropertyValues(kindId, propertyId, keyword, topNum);
 	}
 
-	@RequestMapping("/goodsIds")
+	@RequestMapping("/goodsIds/old")
 	@ResponseBody
-	public Map<String, Object> getGoodsIds(String keyword, Integer page, Integer size, JSONObject filters, String sort,
-			HttpServletRequest request) {
+	public Map<String, Object> getGoodsIds(String keyword, Integer page, Integer size, String filters, String sort,
+										   HttpServletRequest request) {
 		PageParams pageParams = new PageParams();
 		if (page != null) {
 			pageParams.setPage(page);
@@ -212,7 +232,10 @@ public class SearchController {
 		if (size != null) {
 			pageParams.setSize(size);
 		}
-		Map<FilterField, Object> filtersMap = parseFilters(filters);
+        Map<FilterField, Object> filtersMap = new HashMap<>();
+        if (!StringUtils.isEmpty(filters)) {
+            filtersMap=parseFilters(JSONObject.parseObject(filters));
+        }
 		pageParams.setFilters(filtersMap);
 		if (!StringUtils.isEmpty(sort)) {
 			JSONArray jsonArray = JSONObject.parseArray(sort);
@@ -229,43 +252,81 @@ public class SearchController {
 			}
 			pageParams.setSort(sorts);
 		}
+		System.out.println(JSONObject.toJSONString(pageParams));
+		System.out.println(pageParams);
+		String json="{\"filters\":{\"GOODS_MINPRICEUSD\":\"0\",\"GOODS_KINDID\":[\"401\",\"23\"],\"GOODS_MAXPRICERMB\":\"10\",\"GOODS_BRANDID\":[\"45\"],\"GOODS_MAXPRICEUSD\":\"10\",\"GOODS_STORE_TYPE\":[\"DISTRIBUTION\"],\"GOODS_MINPRICERMB\":\"0\",\"GOODS_CRNAME\":[\"RMB-USD\"]},\"page\":1,\"size\":8,\"sort\":[{\"field\":\"GO_RESERVE\",\"reverse\":true},{\"field\":\"GO_MINPRICERMB\",\"reverse\":true},{\"field\":\"GO_MINPRICEUSD\",\"reverse\":true},{\"field\":\"GO_SEARCH\",\"reverse\":false}]}";
+		PageParams params = JSONObject.parseObject(json, PageParams.class);
+		System.out.println(params);
 		return searchService.getGoodsIds(keyword, pageParams);
 	}
 
-	@RequestMapping("/collectBySearchGoods")
+    public Map<FilterField, Object> parseFilters(JSONObject json){
+        Map<FilterField, Object> filters = new HashMap<>();
+        if(json!=null){
+            Set<Entry<String, Object>> entrySet = json.entrySet();
+            for (Entry<String, Object> entry : entrySet) {
+                FilterField field = FilterField.valueOf(entry.getKey());
+                String value = entry.getValue().toString();
+                switch (field) {
+                    case GOODS_KINDID:
+                    case GOODS_BRANDID:
+                    case GOODS_STORE_TYPE:
+                    case GOODS_CRNAME:
+                        String[] strs = value.split(",");
+                        List<Object> values = new ArrayList<>();
+                        for (String str : strs) {
+                            values.add(str);
+                        }
+                        filters.put(field, values);
+                        break;
+                    default:
+                        filters.put(field, value);
+                }
+            }
+        }
+        return filters;
+    }
+
+	@RequestMapping("/goodsIds")
+	@ResponseBody
+	public Map<String, Object> getGoodsIds(String keyword, String params, HttpServletRequest request) {
+		PageParams pageParams = params==null?null:JSONObject.parseObject(params, PageParams.class);
+		return searchService.getGoodsIds(keyword, pageParams);
+	}
+
+	@RequestMapping("/collectBySearchGoods/old")
 	@ResponseBody
-	public List<Map<String, Object>> collectBySearchGoods(String keyword, String collectedField, JSONObject filters,
-			HttpServletRequest request) {
-		Map<FilterField, Object> filtersMap = parseFilters(filters);
+	public List<Map<String, Object>> collectBySearchGoodsOld(String keyword, String collectedField, String filters,
+														  HttpServletRequest request) {
+        Map<FilterField, Object> filtersMap = new HashMap<>();
+        if (!StringUtils.isEmpty(filters)) {
+            filtersMap=parseFilters(JSONObject.parseObject(filters));
+        }
 		return searchService.collectBySearchGoods(keyword, CollectField.valueOf(collectedField.toUpperCase()),
 				filtersMap);
 	}
 
-	public Map<FilterField, Object> parseFilters(JSONObject json){
-		Map<FilterField, Object> filters = new HashMap<>();
-		if(json != null){
-			Set<Entry<String, Object>> entrySet = json.entrySet();
-			for (Entry<String, Object> entry : entrySet) {
-				FilterField field = FilterField.valueOf(entry.getKey());
-				String value = entry.getValue().toString();
-				switch (field) {
-					case GOODS_KINDID:
-					case GOODS_BRANDID:
-					case GOODS_STORE_TYPE:
-					case GOODS_CRNAME:
-						String[] strs = value.split(",");
-						List<Object> values = new ArrayList<>();
-						for (String str : strs) {
-							values.add(str);
-						}
-						filters.put(field, values);
-						break;
-					default:
-						filters.put(field, value);
-				}
-			}
-		}
-		return filters;
+	@RequestMapping("/collectBySearchGoods")
+	@ResponseBody
+	public List<Map<String, Object>> collectBySearchGoods(String keyword, String collectedField, String filters, HttpServletRequest request) {
+        Map<FilterField, Object> filtersMap = new HashMap<>();
+        if(!StringUtils.isEmpty(filters)){
+            JSONObject json = JSONObject.parseObject(filters);
+            Set<Entry<String, Object>> entrySet = json.entrySet();
+            for (Entry<String, Object> entry : entrySet) {
+                FilterField field = FilterField.valueOf(entry.getKey());
+                switch (field) {
+                    case GOODS_KINDID:
+                    case GOODS_BRANDID:
+                    case GOODS_STORE_TYPE:
+                    case GOODS_CRNAME:
+                        filtersMap.put(field, entry.getValue());
+                        break;
+                }
+            }
+        }
+		return searchService.collectBySearchGoods(keyword, CollectField.valueOf(collectedField.toUpperCase()),
+                filtersMap);
 	}
 
 	@RequestMapping("/kind/{id}")
@@ -295,7 +356,7 @@ public class SearchController {
 	@RequestMapping("/objects")
 	@ResponseBody
 	public SPage<Object> getObjects(@RequestParam(required = true) String tableName, String keyword, String field,
-			Boolean tokenized, Integer page, Integer size, HttpServletRequest request) {
+									Boolean tokenized, Integer page, Integer size, HttpServletRequest request) {
 		return searchService.getObjects(tableName.toLowerCase(), keyword, field, tokenized, page == null ? 0 : page,
 				size == null ? 0 : size);
 	}

+ 6 - 3
src/main/java/com/uas/search/service/impl/SearchServiceImpl.java

@@ -1157,10 +1157,13 @@ public class SearchServiceImpl implements SearchService {
 	 */
 	@SuppressWarnings("unchecked")
 	private void filter(Object list, String field, BooleanQuery booleanQuery) {
-		if (!(list instanceof List)) {
-			throw new SearchException("并非" + List.class + "类型:" + list);
+		List<Object> values;
+		if (list instanceof List) {
+			values = (List<Object>) list;
+		}else{
+			values = new ArrayList<>();
+			values.add(list);
 		}
-		List<Object> values = (List<Object>) list;
 		BooleanQuery booleanQuery2 = new BooleanQuery();
 		for (Object value : values) {
 			TermQuery query = new TermQuery(new Term(field, value.toString().toLowerCase()));

+ 6 - 3
src/main/webapp/WEB-INF/views/console.html

@@ -16,10 +16,12 @@
 					<li><a target="_blank">search/kinds/电阻?page=1&size=10</a></li>
 					<li><a target="_blank">search/brandIds/Panasonic?page=1&size=10</a></li>
 					<li><a target="_blank">search/brands/Panasonic?page=1&size=10</a></li>
-					<li>search/componentIds?keyword=a&page=1&size=5&filters={"COMPONENT_KINDID":401,"COMPONENT_BRANDID":45,"COMPONENT_HAS_RESERVE":true,"COMPONENT_HAS_SAMPLE":true,"COMPONENT_HAS_ORIGINAL":true,"COMPONENT_HAS_INACTION_STOCK":true,"COMPONENT_PROPERTIES":{"275":"92%20dB","781":"Tube"}}</li>
+					<li>search/componentIds/old?keyword=a&page=1&size=5&filters={"COMPONENT_KINDID":401,"COMPONENT_BRANDID":45,"COMPONENT_HAS_RESERVE":true,"COMPONENT_HAS_SAMPLE":true,"COMPONENT_HAS_ORIGINAL":true,"COMPONENT_HAS_INACTION_STOCK":true,"COMPONENT_PROPERTIES":{"275":"92%20dB","781":"Tube"}}</li>
+					<li>search/componentIds?keyword=a&amp;params={"filters":{"COMPONENT_KINDID":401,"COMPONENT_BRANDID":45,"COMPONENT_HAS_RESERVE":true,"COMPONENT_HAS_SAMPLE":true,"COMPONENT_HAS_ORIGINAL":true,"COMPONENT_HAS_INACTION_STOCK":true,"COMPONENT_PROPERTIES":{"275":"92%20dB","781":"Tube"}},"page":1,"size":8}</li>
 					<li><a target="_blank">search/componentIds?keyword=aaa</a></li>
 					<li><a target="_blank">search/components?keyword=aaa</a></li>
-					<li>search/goodsIds?keyword=aaa&page=1&size=8&filters={"GOODS_KINDID":"401,23","GOODS_BRANDID":45,"GOODS_STORE_TYPE":"DISTRIBUTION","GOODS_CRNAME":"RMB-USD","GOODS_MINPRICERMB":0,"GOODS_MAXPRICERMB":10,"GOODS_MINPRICEUSD":0,"GOODS_MAXPRICEUSD":10}&sort=[{"field":"GO_RESERVE","reverse":true},{"field":"GO_MINPRICERMB","reverse":true},{"field":"GO_MINPRICEUSD","reverse":true},{"field":"GO_SEARCH"}]</li>
+					<li>search/goodsIds/old?keyword=aaa&page=1&size=8&filters={"GOODS_KINDID":"401,23","GOODS_BRANDID":45,"GOODS_STORE_TYPE":"DISTRIBUTION","GOODS_CRNAME":"RMB-USD","GOODS_MINPRICERMB":0,"GOODS_MAXPRICERMB":10,"GOODS_MINPRICEUSD":0,"GOODS_MAXPRICEUSD":10}&sort=[{"field":"GO_RESERVE","reverse":true},{"field":"GO_MINPRICERMB","reverse":true},{"field":"GO_MINPRICEUSD","reverse":true},{"field":"GO_SEARCH"}]</li>
+					<li>search/goodsIds?keyword=aaa&amp;params={"filters":{"GOODS_MINPRICEUSD":"0","GOODS_KINDID":["401","23"],"GOODS_MAXPRICERMB":"10","GOODS_BRANDID":["45"],"GOODS_MAXPRICEUSD":"10","GOODS_STORE_TYPE":["DISTRIBUTION"],"GOODS_MINPRICERMB":"0","GOODS_CRNAME":["RMB-USD"]},"page":1,"size":8,"sort":[{"field":"GO_RESERVE","reverse":true},{"field":"GO_MINPRICERMB","reverse":true},{"field":"GO_MINPRICEUSD","reverse":true},{"field":"GO_SEARCH","reverse":false}]}</li>
 					<li><a target="_blank">search/goodsIds?keyword=aaa</a></li>
 				</ol>
 
@@ -30,7 +32,8 @@
 					<li><a target="_blank">search/brandsByComponent?keyword=aaa&kindId=304</a></li>
 					<li><a target="_blank">search/kindIdsByComponent?keyword=aaa&brandId=56</a></li>
 					<li><a target="_blank">search/brandIdsByComponent?keyword=aaa&kindId=304</a></li>
-					<li><a target="_blank">search/collectBySearchGoods?keyword=23&collectedField=GOODS_KIND&filters={"GOODS_KINDID":"401,23","GOODS_BRANDID":45,"GOODS_STORE_TYPE":"DISTRIBUTION","GOODS_CRNAME":"RMB-USD"}</a></li>
+					<li><a target="_blank">search/collectBySearchGoods/old?keyword=23&collectedField=GOODS_KIND&filters={"GOODS_KINDID":"401,23","GOODS_BRANDID":45,"GOODS_STORE_TYPE":"DISTRIBUTION","GOODS_CRNAME":"RMB-USD"}</a></li>
+					<li><a target="_blank">search/collectBySearchGoods?keyword=23&collectedField=GOODS_KIND&filters={"GOODS_KINDID":[401,23],"GOODS_BRANDID":45,"GOODS_STORE_TYPE":"DISTRIBUTION","GOODS_CRNAME":"RMB-USD"}</a></li>
 				</ol>
 
 				<strong><li class="title">联想词</li></strong>