Просмотр исходного кода

新增店铺模糊搜索接口(型号、品牌、类目、名称)

wangyc 7 лет назад
Родитель
Сommit
49413f153e

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

@@ -163,4 +163,15 @@ public class StoreInController {
 	public List<StoreIn> findFiveStoreByType(@RequestParam("types") String types, @RequestParam("num") Integer num){
 		return storeService.findFiveStores(types, num);
 	}
+
+	/**
+	 * 通过型号、品牌、类目、店铺名称模糊搜索店铺信息(分页)
+	 * @param keyword 关键词
+	 * @param params 分页参数
+	 * @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);
+	}
 }

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

@@ -9,6 +9,7 @@ import com.uas.platform.b2c.prod.store.model.StoreStatus;
 import com.uas.platform.b2c.prod.store.model.StoreType;
 import com.uas.platform.b2c.trade.support.ResultMap;
 import com.uas.platform.core.model.PageInfo;
+import com.uas.platform.core.model.PageParams;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
@@ -139,7 +140,6 @@ public interface StoreInService {
 	 */
 	List<StoreIn> findFiveStores(String types, Integer num);
 
-
 	/**
 	 * 获取企业的店铺信息
 	 * @return
@@ -200,5 +200,12 @@ public interface StoreInService {
 	 */
 	Set<Qualification> getQualificationsSort();
 
-
+	/**
+	 * 通过型号、品牌、类目、店铺名称模糊搜索店铺信息(分页)
+	 * @param params 分页参数
+	 * @param keyword 关键字
+	 * @param request requset
+	 * @return
+	 */
+	Page<StoreIn> findBySimilarName(PageParams params, String keyword, HttpServletRequest request);
 }

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

@@ -10,6 +10,7 @@ import com.uas.platform.b2c.common.account.model.User;
 import com.uas.platform.b2c.common.account.service.EnterpriseService;
 import com.uas.platform.b2c.common.search.dao.SearchHistoryDao;
 import com.uas.platform.b2c.common.search.model.SearchHistory;
+import com.uas.platform.b2c.common.search.service.SearcherService;
 import com.uas.platform.b2c.core.config.SysConf;
 import com.uas.platform.b2c.core.constant.Type;
 import com.uas.platform.b2c.core.support.SystemSession;
@@ -18,6 +19,7 @@ import com.uas.platform.b2c.core.utils.UuidUtils;
 import com.uas.platform.b2c.prod.commodity.dao.GoodsDao;
 import com.uas.platform.b2c.prod.product.component.dao.ComponentDao;
 import com.uas.platform.b2c.prod.product.component.modal.Component;
+import com.uas.platform.b2c.prod.product.component.modal.ComponentGoods;
 import com.uas.platform.b2c.prod.store.dao.QualificationDao;
 import com.uas.platform.b2c.prod.store.dao.StoreApplyDao;
 import com.uas.platform.b2c.prod.store.dao.StoreBrandInfoDao;
@@ -36,6 +38,8 @@ import com.uas.platform.b2c.trade.support.ResultMap;
 import com.uas.platform.core.exception.IllegalOperatorException;
 import com.uas.platform.core.exception.IllegalStatusException;
 import com.uas.platform.core.model.PageInfo;
+import com.uas.platform.core.model.PageParams;
+import com.uas.platform.core.persistence.criteria.LogicalExpression;
 import com.uas.platform.core.persistence.criteria.PredicateUtils;
 import com.uas.platform.core.persistence.criteria.SimpleExpression;
 import java.util.ArrayList;
@@ -66,6 +70,7 @@ import org.springframework.mobile.device.DeviceResolver;
 import org.springframework.mobile.device.LiteDeviceResolver;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
+import org.springframework.ui.ModelMap;
 import org.springframework.util.StringUtils;
 
 /**
@@ -102,8 +107,10 @@ public class StoreInServiceImpl implements StoreInService {
 
 	private final DeviceResolver deviceResolver = new LiteDeviceResolver();
 
+	private final SearcherService searcherService;
+
 	@Autowired
-	public StoreInServiceImpl(StoreInDao storeDao, QualificationDao qualificationDao, GoodsDao goodsDao, ComponentDao componentDao, PurchaseDao purchaseDao, StoreBrandInfoDao brandInfoDao, StoreAdsService adsService, SysConf sysConf, EnterpriseService enterpriseService, SearchHistoryDao searchHistoryDao) {
+	public StoreInServiceImpl(StoreInDao storeDao, QualificationDao qualificationDao, GoodsDao goodsDao, ComponentDao componentDao, PurchaseDao purchaseDao, StoreBrandInfoDao brandInfoDao, StoreAdsService adsService, SysConf sysConf, EnterpriseService enterpriseService, SearchHistoryDao searchHistoryDao, SearcherService searcherService) {
 		this.storeDao = storeDao;
 		this.qualificationDao = qualificationDao;
 		this.goodsDao = goodsDao;
@@ -114,6 +121,7 @@ public class StoreInServiceImpl implements StoreInService {
 		this.sysConf = sysConf;
 		this.enterpriseService = enterpriseService;
 		this.searchHistoryDao = searchHistoryDao;
+		this.searcherService = searcherService;
 	}
 
 	@Override
@@ -695,4 +703,43 @@ public class StoreInServiceImpl implements StoreInService {
 		}
 		return map;
 	}
+
+	@Override
+	public Page<StoreIn> findBySimilarName(PageParams params, String keyword, HttpServletRequest request) {
+		Page<StoreIn> storeInPage = null;
+		if (!StringUtils.isEmpty(keyword)) {
+			final PageInfo pageInfo = new PageInfo(params);
+			PageParams pageParams = new PageParams();
+			pageParams.setCount(20);
+			pageParams.setPage(1);
+
+			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);
+			}
+
+			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;
+				}
+			}, pageInfo);
+		}
+		return storeInPage;
+	}
 }