Browse Source

调整店铺模糊搜索接口

wangyc 7 years ago
parent
commit
2c3b17ce4c

+ 2 - 2
src/main/java/com/uas/platform/b2c/prod/store/api/StoreInController.java

@@ -171,7 +171,7 @@ public class StoreInController {
 	 * @return
 	 */
 	@RequestMapping(value = "/stores", method = RequestMethod.GET, params = "op=similar")
-	public Page<StoreIn> findBySimilarName(@RequestParam("keyword") String keyword, PageParams params, HttpServletRequest request) {
-		return storeService.findBySimilarName(params, keyword, request);
+	public Page<StoreIn> findBySimilarName(@RequestParam(value = "keyword", required = false) String keyword, PageParams params, @RequestParam(value = "type", required = false) String type, HttpServletRequest request) {
+		return storeService.findBySimilarName(params, keyword, type, request);
 	}
 }

+ 1 - 1
src/main/java/com/uas/platform/b2c/prod/store/service/StoreInService.java

@@ -207,5 +207,5 @@ public interface StoreInService {
 	 * @param request requset
 	 * @return
 	 */
-	Page<StoreIn> findBySimilarName(PageParams params, String keyword, HttpServletRequest request);
+	Page<StoreIn> findBySimilarName(PageParams params, String keyword, String type, HttpServletRequest request);
 }

+ 43 - 17
src/main/java/com/uas/platform/b2c/prod/store/service/impl/StoreInServiceImpl.java

@@ -705,10 +705,20 @@ public class StoreInServiceImpl implements StoreInService {
 	}
 
 	@Override
-	public Page<StoreIn> findBySimilarName(PageParams params, String keyword, HttpServletRequest request) {
-		Page<StoreIn> storeInPage = null;
+	public Page<StoreIn> findBySimilarName(PageParams params, String keyword, String type, HttpServletRequest request) {
+		LogicalExpression typeLogicalEx = null;
+		LogicalExpression keywordLogicalEx = null;
+		SimpleExpression nameSimpleEx = null;
+		final PageInfo pageInfo = new PageInfo(params);
+		// 搜索店铺类型
+		if (!StringUtils.isEmpty(type)) {
+			Set<StoreType> typeSet = getTypesFromString(type);
+			typeLogicalEx = PredicateUtils.in("type", typeSet.toArray(new StoreType[]{}), true);
+		}
+		// 搜索店铺名称
 		if (!StringUtils.isEmpty(keyword)) {
-			final PageInfo pageInfo = new PageInfo(params);
+			nameSimpleEx = PredicateUtils.like("storeName", keyword, true);
+			// 搜索器件、品牌、类目
 			PageParams pageParams = new PageParams();
 			pageParams.setCount(20);
 			pageParams.setPage(1);
@@ -716,30 +726,46 @@ public class StoreInServiceImpl implements StoreInService {
 			ModelMap map = searcherService.searchComponentGoods(keyword, pageParams, request);
 			List<ComponentGoods> components = (List<ComponentGoods>) map.get("components");
 			Set<String> storeIds = new HashSet<>();
-
 			for (ComponentGoods componentGood : components) {
 				if (componentGood.getStoreId() != null) {
 					storeIds.add(componentGood.getStoreId());
 				}
 			}
 
-			SimpleExpression keywordSimpleExpression = PredicateUtils.like("storeName", keyword, true);
-
 			if (CollectionUtils.isNotEmpty(storeIds)) {
-				LogicalExpression storIdList = PredicateUtils.in("id", storeIds, true);
-				pageInfo.expression(PredicateUtils.or(keywordSimpleExpression, storIdList));
-			} else {
-				pageInfo.expression(keywordSimpleExpression);
+				keywordLogicalEx = PredicateUtils.in("uuid", storeIds, true);
 			}
+		}
 
-			storeInPage = storeDao.findAll(new Specification<StoreIn>() {
-				@Override
-				public Predicate toPredicate(Root<StoreIn> root, CriteriaQuery<?> criteriaQuery, CriteriaBuilder criteriaBuilder) {
-					criteriaQuery.where(pageInfo.getPredicates(root, criteriaQuery, criteriaBuilder));
-					return null;
+		if (nameSimpleEx != null) {
+			if (keywordLogicalEx != null) {
+				keywordLogicalEx = PredicateUtils.or(nameSimpleEx, keywordLogicalEx);
+				if (typeLogicalEx != null) {
+					pageInfo.expression(PredicateUtils.and(keywordLogicalEx, typeLogicalEx));
+				} else {
+					pageInfo.expression(keywordLogicalEx);
 				}
-			}, pageInfo);
+			} else if (typeLogicalEx != null) {
+				pageInfo.expression(PredicateUtils.and(nameSimpleEx, typeLogicalEx));
+			} else {
+				pageInfo.expression(nameSimpleEx);
+			}
+		} else if (keywordLogicalEx != null) {
+			if (typeLogicalEx != null) {
+				pageInfo.expression(PredicateUtils.and(keywordLogicalEx, typeLogicalEx));
+			} else {
+				pageInfo.expression(keywordLogicalEx);
+			}
+		} else if (typeLogicalEx != null) {
+			pageInfo.expression(typeLogicalEx);
 		}
-		return storeInPage;
+
+		return storeDao.findAll(new Specification<StoreIn>() {
+			@Override
+			public Predicate toPredicate(Root<StoreIn> root, CriteriaQuery<?> criteriaQuery, CriteriaBuilder criteriaBuilder) {
+				criteriaQuery.where(pageInfo.getPredicates(root, criteriaQuery, criteriaBuilder));
+				return null;
+			}
+		}, pageInfo);
 	}
 }