📄 priceservices.java
字号:
} else if ("PRICE_FOL".equals(productPriceAction.getString("productPriceActionTypeId"))) {
if (productPriceAction.get("amount") != null) {
modifyAmount = productPriceAction.getDouble("amount").doubleValue();
}
} else if ("PRICE_FLAT".equals(productPriceAction.getString("productPriceActionTypeId"))) {
// this one is a bit different, break out of the loop because we now have our final price
foundFlatOverride = true;
if (productPriceAction.get("amount") != null) {
price = productPriceAction.getDouble("amount").doubleValue();
} else {
Debug.logError("ERROR: ProductPriceAction had null amount, using default price: " + defaultPrice + " for product with id " + productId, module);
price = defaultPrice;
}
} else if ("PRICE_PFLAT".equals(productPriceAction.getString("productPriceActionTypeId"))) {
// this one is a bit different too, break out of the loop because we now have our final price
foundFlatOverride = true;
price = promoPrice;
if (productPriceAction.get("amount") != null) {
price += productPriceAction.getDouble("amount").doubleValue();
}
if (price == 0.00) {
Debug.logError("ERROR: PromoPrice and ProductPriceAction had null amount, using default price: " + defaultPrice + " for product with id " + productId, module);
price = defaultPrice;
}
}
// add a orderItemPriceInfo element too, without orderId or orderItemId
StringBuffer priceInfoDescription = new StringBuffer();
priceInfoDescription.append(condsDescription.toString());
priceInfoDescription.append("[type:");
priceInfoDescription.append(productPriceAction.getString("productPriceActionTypeId"));
priceInfoDescription.append("]");
GenericValue orderItemPriceInfo = delegator.makeValue("OrderItemPriceInfo", null);
orderItemPriceInfo.set("productPriceRuleId", productPriceAction.get("productPriceRuleId"));
orderItemPriceInfo.set("productPriceActionSeqId", productPriceAction.get("productPriceActionSeqId"));
orderItemPriceInfo.set("modifyAmount", new Double(modifyAmount));
// make sure description is <= than 250 chars
String priceInfoDescriptionString = priceInfoDescription.toString();
if (priceInfoDescriptionString.length() > 250) {
priceInfoDescriptionString = priceInfoDescriptionString.substring(0, 250);
}
orderItemPriceInfo.set("description", priceInfoDescriptionString);
orderItemPriceInfos.add(orderItemPriceInfo);
if (foundFlatOverride) {
break;
} else {
price += modifyAmount;
}
}
}
totalRules++;
if (foundFlatOverride) {
break;
}
}
if (Debug.verboseOn()) {
Debug.logVerbose("Unchecked Calculated price: " + price, module);
Debug.logVerbose("PriceInfo:", module);
Iterator orderItemPriceInfosIter = orderItemPriceInfos.iterator();
while (orderItemPriceInfosIter.hasNext()) {
GenericValue orderItemPriceInfo = (GenericValue) orderItemPriceInfosIter.next();
Debug.logVerbose(" --- " + orderItemPriceInfo.toString(), module);
}
}
// if no actions were run on the list price, then use the default price
if (totalActions == 0) {
price = defaultPrice;
}
// ========= ensure calculated price is not below minSalePrice or above maxSalePrice =========
Double maxSellPrice = maximumPriceValue != null ? maximumPriceValue.getDouble("price") : null;
if (maxSellPrice != null && price > maxSellPrice.doubleValue()) {
price = maxSellPrice.doubleValue();
}
// min price second to override max price, safety net
Double minSellPrice = minimumPriceValue != null ? minimumPriceValue.getDouble("price") : null;
if (minSellPrice != null && price < minSellPrice.doubleValue()) {
price = minSellPrice.doubleValue();
}
if (Debug.verboseOn()) Debug.logVerbose("Final Calculated price: " + price + ", rules: " + totalRules + ", conds: " + totalConds + ", actions: " + totalActions, module);
result.put("price", new Double(price));
result.put("listPrice", new Double(listPrice));
result.put("defaultPrice", new Double(defaultPrice));
result.put("averageCost", new Double(averageCost));
} catch (GenericEntityException e) {
Debug.logError(e, "Error getting rules from the database while calculating price", module);
return ServiceUtil.returnError("Error getting rules from the database while calculating price: " + e.toString());
}
}
result.put("orderItemPriceInfos", orderItemPriceInfos);
result.put("isSale", new Boolean(isSale));
result.put("currencyUsed", currencyUomId);
// utilTimer.timerString("Finished price calc [productId=" + productId + "]", module);
return result;
}
public static boolean checkPriceCondition(GenericValue productPriceCond, String productId, String prodCatalogId, String webSiteId,
String partyId, double quantity, double listPrice, String currencyUomId, GenericDelegator delegator) throws GenericEntityException {
if (Debug.verboseOn()) Debug.logVerbose("Checking price condition: " + productPriceCond, module);
int compare = 0;
if ("PRIP_PRODUCT_ID".equals(productPriceCond.getString("inputParamEnumId"))) {
compare = productId.compareTo(productPriceCond.getString("condValue"));
} else if ("PRIP_PROD_CAT_ID".equals(productPriceCond.getString("inputParamEnumId"))) {
// if a ProductCategoryMember exists for this productId and the specified productCategoryId
List productCategoryMembers = delegator.findByAndCache("ProductCategoryMember",
UtilMisc.toMap("productId", productId, "productCategoryId", productPriceCond.getString("condValue")));
// and from/thru date within range
productCategoryMembers = EntityUtil.filterByDate(productCategoryMembers, true);
// then 0 (equals), otherwise 1 (not equals)
if (productCategoryMembers != null && productCategoryMembers.size() > 0) {
compare = 0;
} else {
compare = 1;
}
} else if ("PRIP_PROD_CLG_ID".equals(productPriceCond.getString("inputParamEnumId"))) {
if (prodCatalogId != null) {
compare = prodCatalogId.compareTo(productPriceCond.getString("condValue"));
} else {
// this shouldn't happen because if prodCatalogId is null no PRIP_PROD_CLG_ID prices will be in the list
compare = 1;
}
} else if ("PRIP_WEBSITE_ID".equals(productPriceCond.getString("inputParamEnumId"))) {
compare = webSiteId.compareTo(productPriceCond.getString("condValue"));
} else if ("PRIP_QUANTITY".equals(productPriceCond.getString("inputParamEnumId"))) {
Double quantityValue = new Double(quantity);
compare = quantityValue.compareTo(Double.valueOf(productPriceCond.getString("condValue")));
} else if ("PRIP_PARTY_ID".equals(productPriceCond.getString("inputParamEnumId"))) {
if (partyId != null) {
compare = partyId.compareTo(productPriceCond.getString("condValue"));
} else {
compare = 1;
}
/* These aren't supported yet, ie TODO
} else if ("PRIP_PARTY_GRP_MEM".equals(productPriceCond.getString("inputParamEnumId"))) {
} else if ("PRIP_PARTY_CLASS".equals(productPriceCond.getString("inputParamEnumId"))) {
*/
} else if ("PRIP_ROLE_TYPE".equals(productPriceCond.getString("inputParamEnumId"))) {
if (partyId != null) {
// if a PartyRole exists for this partyId and the specified roleTypeId
GenericValue partyRole = delegator.findByPrimaryKeyCache("PartyRole",
UtilMisc.toMap("partyId", partyId, "roleTypeId", productPriceCond.getString("condValue")));
// then 0 (equals), otherwise 1 (not equals)
if (partyRole != null) {
compare = 0;
} else {
compare = 1;
}
} else {
compare = 1;
}
} else if ("PRIP_LIST_PRICE".equals(productPriceCond.getString("inputParamEnumId"))) {
Double listPriceValue = new Double(listPrice);
compare = listPriceValue.compareTo(Double.valueOf(productPriceCond.getString("condValue")));
} else if ("PRIP_CURRENCY_UOMID".equals(productPriceCond.getString("inputParamEnumId"))) {
compare = currencyUomId.compareTo(productPriceCond.getString("condValue"));
} else {
Debug.logWarning("An un-supported productPriceCond input parameter (lhs) was used: " + productPriceCond.getString("inputParamEnumId") + ", returning false, ie check failed", module);
return false;
}
if (Debug.verboseOn()) Debug.logVerbose("Price Condition compare done, compare=" + compare, module);
if ("PRC_EQ".equals(productPriceCond.getString("operatorEnumId"))) {
if (compare == 0) return true;
} else if ("PRC_NEQ".equals(productPriceCond.getString("operatorEnumId"))) {
if (compare != 0) return true;
} else if ("PRC_LT".equals(productPriceCond.getString("operatorEnumId"))) {
if (compare < 0) return true;
} else if ("PRC_LTE".equals(productPriceCond.getString("operatorEnumId"))) {
if (compare <= 0) return true;
} else if ("PRC_GT".equals(productPriceCond.getString("operatorEnumId"))) {
if (compare > 0) return true;
} else if ("PRC_GTE".equals(productPriceCond.getString("operatorEnumId"))) {
if (compare >= 0) return true;
} else {
Debug.logWarning("An un-supported productPriceCond condition was used: " + productPriceCond.getString("operatorEnumId") + ", returning false, ie check failed", module);
return false;
}
return false;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -