📄 productservices.java
字号:
List order = UtilMisc.toList("sequenceNum", "productFeatureTypeId");
if (distinct != null) fields.put("productFeatureType", distinct);
if (type != null) fields.put("productFeatureApplTypeId", type);
features = delegator.findByAndCache("ProductFeatureAndAppl", fields, order);
result.put("productFeatures", features);
result.put(ModelService.RESPONSE_MESSAGE, ModelService.RESPOND_SUCCESS);
} catch (GenericEntityException e) {
Map messageMap = UtilMisc.toMap("errMessage", e.toString());
errMsg = UtilProperties.getMessage(resource,"productservices.problem_reading_product_feature_entity", messageMap, locale);
result.put(ModelService.RESPONSE_MESSAGE, ModelService.RESPOND_ERROR);
result.put(ModelService.ERROR_MESSAGE, errMsg);
}
return result;
}
/**
* Finds a product by product ID.
*/
public static Map prodFindProduct(DispatchContext dctx, Map context) {
// * String productId -- Product ID to find
GenericDelegator delegator = dctx.getDelegator();
Map result = new HashMap();
String productId = (String) context.get("productId");
Locale locale = (Locale) context.get("locale");
String errMsg=null;
if (productId == null || productId.length() == 0) {
errMsg = UtilProperties.getMessage(resource,"productservices.invalid_productId_passed", locale);
result.put(ModelService.RESPONSE_MESSAGE, ModelService.RESPOND_ERROR);
result.put(ModelService.ERROR_MESSAGE, errMsg);
return result;
}
try {
GenericValue product = delegator.findByPrimaryKeyCache("Product", UtilMisc.toMap("productId", productId));
GenericValue mainProduct = product;
if (product.get("isVariant") != null && product.getString("isVariant").equalsIgnoreCase("Y")) {
List c = product.getRelatedByAndCache("AssocProductAssoc",
UtilMisc.toMap("productAssocTypeId", "PRODUCT_VARIANT"));
if (c != null) {
//if (Debug.infoOn()) Debug.logInfo("Found related: " + c, module);
c = EntityUtil.filterByDate(c, true);
//if (Debug.infoOn()) Debug.logInfo("Found Filtered related: " + c, module);
if (c.size() > 0) {
GenericValue asV = (GenericValue) c.iterator().next();
//if (Debug.infoOn()) Debug.logInfo("ASV: " + asV, module);
mainProduct = asV.getRelatedOneCache("MainProduct");
//if (Debug.infoOn()) Debug.logInfo("Main product = " + mainProduct, module);
}
}
}
result.put("product", mainProduct);
result.put(ModelService.RESPONSE_MESSAGE, ModelService.RESPOND_SUCCESS);
} catch (GenericEntityException e) {
e.printStackTrace();
Map messageMap = UtilMisc.toMap("errMessage", e.getMessage());
errMsg = UtilProperties.getMessage(resource,"productservices.problems_reading_product_entity", messageMap, locale);
result.put(ModelService.RESPONSE_MESSAGE, ModelService.RESPOND_ERROR);
result.put(ModelService.ERROR_MESSAGE, errMsg);
}
return result;
}
/**
* Finds associated products by product ID and association ID.
*/
public static Map prodFindAssociatedByType(DispatchContext dctx, Map context) {
// * String productId -- Current Product ID
// * String type -- Type of association (ie PRODUCT_UPGRADE, PRODUCT_COMPLEMENT, PRODUCT_VARIANT)
GenericDelegator delegator = dctx.getDelegator();
Map result = new HashMap();
String productId = (String) context.get("productId");
String productIdTo = (String) context.get("productIdTo");
String type = (String) context.get("type");
Locale locale = (Locale) context.get("locale");
String errMsg = null;
Boolean cvaBool = (Boolean) context.get("checkViewAllow");
boolean checkViewAllow = (cvaBool == null ? false : cvaBool.booleanValue());
String prodCatalogId = (String) context.get("prodCatalogId");
if (productId == null && productIdTo == null) {
errMsg = UtilProperties.getMessage(resource,"productservices.both_productId_and_productIdTo_cannot_be_null", locale);
result.put(ModelService.RESPONSE_MESSAGE, ModelService.RESPOND_ERROR);
result.put(ModelService.ERROR_MESSAGE, errMsg);
return result;
}
if (productId != null && productIdTo != null) {
errMsg = UtilProperties.getMessage(resource,"productservices.both_productId_and_productIdTo_cannot_be_defined", locale);
result.put(ModelService.RESPONSE_MESSAGE, ModelService.RESPOND_ERROR);
result.put(ModelService.ERROR_MESSAGE, errMsg);
return result;
}
productId = productId == null ? productIdTo : productId;
GenericValue product = null;
try {
product = delegator.findByPrimaryKeyCache("Product", UtilMisc.toMap("productId", productId));
} catch (GenericEntityException e) {
Map messageMap = UtilMisc.toMap("errMessage", e.getMessage());
errMsg = UtilProperties.getMessage(resource,"productservices.productservices.problems_reading_product_entity", messageMap, locale);
result.put(ModelService.RESPONSE_MESSAGE, ModelService.RESPOND_ERROR);
result.put(ModelService.ERROR_MESSAGE, errMsg);
return result;
}
if (product == null) {
errMsg = UtilProperties.getMessage(resource,"productservices.problems_getting_product_entity", locale);
result.put(ModelService.RESPONSE_MESSAGE, ModelService.RESPOND_ERROR);
result.put(ModelService.ERROR_MESSAGE, errMsg);
return result;
}
try {
List productAssocs = null;
if (productIdTo == null) {
productAssocs = product.getRelatedCache("MainProductAssoc", UtilMisc.toMap("productAssocTypeId", type), UtilMisc.toList("sequenceNum"));
} else {
productAssocs = product.getRelatedCache("AssocProductAssoc", UtilMisc.toMap("productAssocTypeId", type), UtilMisc.toList("sequenceNum"));
}
// filter the list by date
productAssocs = EntityUtil.filterByDate(productAssocs, true);
// first check to see if there is a view allow category and if these producta are in it...
if (checkViewAllow && prodCatalogId != null && productAssocs != null && productAssocs.size() > 0) {
String viewProductCategoryId = CatalogWorker.getCatalogViewAllowCategoryId(delegator, prodCatalogId);
if (viewProductCategoryId != null) {
if (productIdTo == null) {
productAssocs = CategoryWorker.filterProductsInCategory(delegator, productAssocs, viewProductCategoryId, "productIdTo");
} else {
productAssocs = CategoryWorker.filterProductsInCategory(delegator, productAssocs, viewProductCategoryId, "productId");
}
}
}
result.put("assocProducts", productAssocs);
result.put(ModelService.RESPONSE_MESSAGE, ModelService.RESPOND_SUCCESS);
} catch (GenericEntityException e) {
Map messageMap = UtilMisc.toMap("errMessage", e.getMessage());
errMsg = UtilProperties.getMessage(resource,"productservices.problems_product_association_relation_error", messageMap, locale);
result.put(ModelService.RESPONSE_MESSAGE, ModelService.RESPOND_ERROR);
result.put(ModelService.ERROR_MESSAGE, errMsg);
return result;
}
return result;
}
// Builds a product feature tree
private static Map makeGroup(GenericDelegator delegator, Map featureList, List items, List order, int index)
throws IllegalArgumentException, IllegalStateException {
//List featureKey = new ArrayList();
Map tempGroup = new HashMap();
Map group = new OrderedMap();
String orderKey = (String) order.get(index);
if (featureList == null) {
throw new IllegalArgumentException("Cannot build feature tree: featureList is null");
}
if (index < 0) {
throw new IllegalArgumentException("Invalid index '" + index + "' min index '0'");
}
if (index + 1 > order.size()) {
throw new IllegalArgumentException("Invalid index '" + index + "' max index '" + (order.size() - 1) + "'");
}
// loop through items and make the lists
Iterator itemIterator = items.iterator();
while (itemIterator.hasNext()) {
// -------------------------------
// Gather the necessary data
// -------------------------------
String thisItem = (String) itemIterator.next();
if (Debug.verboseOn()) Debug.logVerbose("ThisItem: " + thisItem, module);
List features = null;
try {
Map fields = UtilMisc.toMap("productId", thisItem, "productFeatureTypeId", orderKey,
"productFeatureApplTypeId", "STANDARD_FEATURE");
List sort = UtilMisc.toList("sequenceNum");
// get the features and filter out expired dates
features = delegator.findByAndCache("ProductFeatureAndAppl", fields, sort);
features = EntityUtil.filterByDate(features, true);
} catch (GenericEntityException e) {
throw new IllegalStateException("Problem reading relation: " + e.getMessage());
}
if (Debug.verboseOn()) Debug.logVerbose("Features: " + features, module);
// -------------------------------
Iterator featuresIterator = features.iterator();
while (featuresIterator.hasNext()) {
GenericValue item = (GenericValue) featuresIterator.next();
Object itemKey = item.get("description");
if (tempGroup.containsKey(itemKey)) {
List itemList = (List) tempGroup.get(itemKey);
if (!itemList.contains(thisItem))
itemList.add(thisItem);
} else {
List itemList = UtilMisc.toList(thisItem);
tempGroup.put(itemKey, itemList);
}
}
}
if (Debug.verboseOn()) Debug.logVerbose("TempGroup: " + tempGroup, module);
// Loop through the feature list and order the keys in the tempGroup
List orderFeatureList = (List) featureList.get(orderKey);
if (orderFeatureList == null) {
throw new IllegalArgumentException("Cannot build feature tree: orderFeatureList is null for orderKey=" + orderKey);
}
Iterator featureListIt = orderFeatureList.iterator();
while (featureListIt.hasNext()) {
String featureStr = (String) featureListIt.next();
if (tempGroup.containsKey(featureStr))
group.put(featureStr, tempGroup.get(featureStr));
}
if (Debug.verboseOn()) Debug.logVerbose("Group: " + group, module);
// no groups; no tree
if (group.size() == 0) {
return group;
//throw new IllegalStateException("Cannot create tree from group list; error on '" + orderKey + "'");
}
if (index + 1 == order.size()) {
return group;
}
// loop through the keysets and get the sub-groups
Iterator groupIterator = group.keySet().iterator();
while (groupIterator.hasNext()) {
Object key = groupIterator.next();
List itemList = (List) group.get(key);
if (itemList != null && itemList.size() > 0) {
Map subGroup = makeGroup(delegator, featureList, itemList, order, index + 1);
group.put(key, subGroup);
} else {
// do nothing, ie put nothing in the Map
//throw new IllegalStateException("Cannot create tree from an empty list; error on '" + key + "'");
}
}
return group;
}
// builds a variant sample (a single sku for a featureType)
private static Map makeVariantSample(GenericDelegator delegator, Map featureList, List items, String feature) {
Map tempSample = new HashMap();
Map sample = new OrderedMap();
Iterator itemIt = items.iterator();
while (itemIt.hasNext()) {
String productId = (String) itemIt.next();
List features = null;
try {
Map fields = UtilMisc.toMap("productId", productId, "productFeatureTypeId", feature,
"productFeatureApplTypeId", "STANDARD_FEATURE");
List sort = UtilMisc.toList("sequenceNum", "description");
// get the features and filter out expired dates
features = delegator.findByAndCache("ProductFeatureAndAppl", fields, sort);
features = EntityUtil.filterByDate(features, true);
} catch (GenericEntityException e) {
throw new IllegalStateException("Problem reading relation: " + e.getMessage());
}
Iterator featureIt = features.iterator();
while (featureIt.hasNext()) {
GenericValue featureAppl = (GenericValue) featureIt.next();
try {
GenericValue product = delegator.findByPrimaryKeyCache("Product",
UtilMisc.toMap("productId", productId));
tempSample.put(featureAppl.getString("description"), product);
} catch (GenericEntityException e) {
throw new RuntimeException("Cannot get product entity: " + e.getMessage());
}
}
}
// Sort the sample based on the feature list.
List features = (LinkedList) featureList.get(feature);
Iterator fi = features.iterator();
while (fi.hasNext()) {
String f = (String) fi.next();
if (tempSample.containsKey(f))
sample.put(f, tempSample.get(f));
}
return sample;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -