📄 productsearch.java
字号:
ListPriceRangeConstraint that = (ListPriceRangeConstraint) psc;
if (this.lowPrice == null) {
if (that.lowPrice != null) {
return false;
}
} else {
if (!this.lowPrice.equals(that.lowPrice)) {
return false;
}
}
if (this.highPrice == null) {
if (that.highPrice != null) {
return false;
}
} else {
if (!this.highPrice.equals(that.highPrice)) {
return false;
}
}
return true;
} else {
return false;
}
}
}
// ======================================================================
// Result Sort Classes
// ======================================================================
public static abstract class ResultSortOrder {
public ResultSortOrder() {
}
public abstract void setSortOrder(ProductSearchContext productSearchContext);
public abstract String getOrderName();
public abstract String prettyPrintSortOrder(boolean detailed);
public abstract boolean isAscending();
}
public static class SortKeywordRelevancy extends ResultSortOrder {
public SortKeywordRelevancy() {
}
public void setSortOrder(ProductSearchContext productSearchContext) {
if (productSearchContext.includedKeywordSearch) {
// we have to check this in order to be sure that there is a totalRelevancy to sort by...
productSearchContext.orderByList.add("-totalRelevancy");
productSearchContext.fieldsToSelect.add("totalRelevancy");
}
}
public String getOrderName() {
return "KeywordRelevancy";
}
public String prettyPrintSortOrder(boolean detailed) {
return "Keyword Relevancy";
}
public boolean isAscending() {
return false;
}
}
public static class SortProductField extends ResultSortOrder {
protected String fieldName;
protected boolean ascending;
/** Some good field names to try might include:
* [productName]
* [totalQuantityOrdered] for most popular or most purchased
* [lastModifiedDate]
*
* You can also include any other field on the Product entity.
*/
public SortProductField(String fieldName, boolean ascending) {
this.fieldName = fieldName;
this.ascending = ascending;
}
public void setSortOrder(ProductSearchContext productSearchContext) {
productSearchContext.dynamicViewEntity.addAlias("PROD", fieldName);
if (ascending) {
productSearchContext.orderByList.add("+" + fieldName);
} else {
productSearchContext.orderByList.add("-" + fieldName);
}
productSearchContext.fieldsToSelect.add(fieldName);
}
public String getOrderName() {
return "ProductField:" + this.fieldName;
}
public String prettyPrintSortOrder(boolean detailed) {
return this.fieldName;
}
public boolean isAscending() {
return this.ascending;
}
}
public static class SortListPrice extends ResultSortOrder {
protected boolean ascending;
public SortListPrice(boolean ascending) {
this.ascending = ascending;
}
public void setSortOrder(ProductSearchContext productSearchContext) {
// TODO: implement SortListPrice, this will be a bit more complex, need to add a ProductPrice member entity
}
public String getOrderName() {
return "ListPrice";
}
public String prettyPrintSortOrder(boolean detailed) {
return "List Price (" + (this.ascending ? "Low to High)" : "High to Low)");
}
public boolean isAscending() {
return this.ascending;
}
}
/** A rather large and verbose method that doesn't use the cool constraint and sort order objects */
/*
public static ArrayList parametricKeywordSearchStandAlone(Set featureIdSet, String keywordsString, GenericDelegator delegator, String productCategoryId, boolean includeSubCategories, String visitId, boolean anyPrefix, boolean anySuffix, boolean isAnd) {
// TODO: implement this for the new features
boolean removeStems = UtilProperties.propertyValueEquals("prodsearch", "remove.stems", "true");
Timestamp nowTimestamp = UtilDateTime.nowTimestamp();
// make view-entity & EntityCondition
int index = 1;
List entityConditionList = new LinkedList();
List orderByList = new LinkedList();
List fieldsToSelect = UtilMisc.toList("productId");
DynamicViewEntity dynamicViewEntity = new DynamicViewEntity();
dynamicViewEntity.addMemberEntity("PROD", "Product");
dynamicViewEntity.addAlias("PROD", "productName");
boolean productIdGroupBy = false;
// Category
if (productCategoryId != null && productCategoryId.length() > 0) {
List productCategoryIdList = null;
if (includeSubCategories) {
// find all sub-categories recursively, make a Set of productCategoryId
Set productCategoryIdSet = new HashSet();
getAllSubCategoryIds(productCategoryId, productCategoryIdSet, delegator, nowTimestamp);
productCategoryIdList = new ArrayList(productCategoryIdSet);
} else {
productCategoryIdList = UtilMisc.toList(productCategoryId);
}
// make index based values and increment
String entityAlias = "PCM" + index;
String prefix = "pcm" + index;
index++;
dynamicViewEntity.addMemberEntity(entityAlias, "ProductCategoryMember");
dynamicViewEntity.addAlias(entityAlias, prefix + "ProductCategoryId", "productCategoryId", null, null, null, null);
dynamicViewEntity.addAlias(entityAlias, prefix + "FromDate", "fromDate", null, null, null, null);
dynamicViewEntity.addAlias(entityAlias, prefix + "ThruDate", "thruDate", null, null, null, null);
dynamicViewEntity.addViewLink("PROD", entityAlias, Boolean.FALSE, ModelKeyMap.makeKeyMapList("productId"));
entityConditionList.add(new EntityExpr(prefix + "ProductCategoryId", EntityOperator.IN, productCategoryIdList));
entityConditionList.add(new EntityExpr(new EntityExpr(prefix + "ThruDate", EntityOperator.EQUALS, null), EntityOperator.OR, new EntityExpr(prefix + "ThruDate", EntityOperator.GREATER_THAN, nowTimestamp)));
entityConditionList.add(new EntityExpr(prefix + "FromDate", EntityOperator.LESS_THAN, nowTimestamp));
}
// Keyword
List keywordFirstPass = KeywordSearch.makeKeywordList(keywordsString);
List keywordList = KeywordSearch.fixKeywords(keywordFirstPass, anyPrefix, anySuffix, removeStems, isAnd);
if (keywordList.size() > 0) {
if (isAnd) {
// add up the relevancyWeight fields from all keyword member entities for a total to sort by
ComplexAlias complexAlias = new ComplexAlias("+");
Iterator keywordIter = keywordList.iterator();
while (keywordIter.hasNext()) {
String keyword = (String) keywordIter.next();
// make index based values and increment
String entityAlias = "PK" + index;
String prefix = "pk" + index;
index++;
dynamicViewEntity.addMemberEntity(entityAlias, "ProductKeyword");
dynamicViewEntity.addAlias(entityAlias, prefix + "Keyword", "keyword", null, null, null, null);
dynamicViewEntity.addViewLink("PROD", entityAlias, Boolean.FALSE, ModelKeyMap.makeKeyMapList("productId"));
entityConditionList.add(new EntityExpr(prefix + "Keyword", EntityOperator.LIKE, keyword));
//don't add an alias for this, will be part of a complex alias: dynamicViewEntity.addAlias(entityAlias, prefix + "RelevancyWeight", "relevancyWeight", null, null, null, null);
complexAlias.addComplexAliasMember(new ComplexAliasField(entityAlias, "relevancyWeight"));
}
dynamicViewEntity.addAlias(null, "totalRelevancy", null, null, null, null, null, complexAlias);
orderByList.add("-totalRelevancy");
fieldsToSelect.add("totalRelevancy");
} else {
// make index based values and increment
String entityAlias = "PK" + index;
String prefix = "pk" + index;
index++;
dynamicViewEntity.addMemberEntity(entityAlias, "ProductKeyword");
dynamicViewEntity.addAlias(entityAlias, "totalRelevancy", "relevancyWeight", null, null, null, "sum");
dynamicViewEntity.addAlias(entityAlias, prefix + "Keyword", "keyword", null, null, null, null);
dynamicViewEntity.addViewLink("PROD", entityAlias, Boolean.FALSE, ModelKeyMap.makeKeyMapList("productId"));
orderByList.add("-totalRelevancy");
fieldsToSelect.add("totalRelevancy");
List keywordOrList = new LinkedList();
Iterator keywordIter = keywordList.iterator();
while (keywordIter.hasNext()) {
String keyword = (String) keywordIter.next();
keywordOrList.add(new EntityExpr(prefix + "Keyword", EntityOperator.LIKE, keyword));
}
entityConditionList.add(new EntityConditionList(keywordOrList, EntityOperator.OR));
productIdGroupBy = true;
}
}
// Features
if (featureIdSet != null && featureIdSet.size() > 0) {
Iterator featureIdIter = featureIdSet.iterator();
while (featureIdIter.hasNext()) {
String productFeatureId = (String) featureIdIter.next();
// make index based values and increment
String entityAlias = "PFA" + index;
String prefix = "pfa" + index;
index++;
dynamicViewEntity.addMemberEntity(entityAlias, "ProductFeatureAppl");
dynamicViewEntity.addAlias(entityAlias, prefix + "ProductFeatureId", "productFeatureId", null, null, null, null);
dynamicViewEntity.addAlias(entityAlias, prefix + "FromDate", "fromDate", null, null, null, null);
dynamicViewEntity.addAlias(entityAlias, prefix + "ThruDate", "thruDate", null, null, null, null);
dynamicViewEntity.addViewLink("PROD", entityAlias, Boolean.FALSE, ModelKeyMap.makeKeyMapList("productId"));
entityConditionList.add(new EntityExpr(prefix + "ProductFeatureId", EntityOperator.EQUALS, productFeatureId));
entityConditionList.add(new EntityExpr(new EntityExpr(prefix + "ThruDate", EntityOperator.EQUALS, null), EntityOperator.OR, new EntityExpr(prefix + "ThruDate", EntityOperator.GREATER_THAN, nowTimestamp)));
entityConditionList.add(new EntityExpr(prefix + "FromDate", EntityOperator.LESS_THAN, nowTimestamp));
}
}
dynamicViewEntity.addAlias("PROD", "productId", null, null, null, new Boolean(productIdGroupBy), null);
EntityCondition whereCondition = new EntityConditionList(entityConditionList, EntityOperator.AND);
EntityFindOptions efo = new EntityFindOptions();
efo.setDistinct(true);
EntityListIterator eli = null;
try {
eli = delegator.findListIteratorByCondition(dynamicViewEntity, whereCondition, null, fieldsToSelect, orderByList, efo);
} catch (GenericEntityException e) {
Debug.logError(e, "Error in product search", module);
return null;
}
ArrayList productIds = new ArrayList(100);
Set productIdSet = new HashSet();
GenericValue searchResult = null;
while ((searchResult = (GenericValue) eli.next()) != null) {
String productId = searchResult.getString("productId");
if (!productIdSet.contains(productId)) {
productIds.add(productId);
productIdSet.add(productId);
}
}
return productIds;
}
*/
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -