本文整理汇总了Java中org.ofbiz.order.shoppingcart.CartItemModifyException类的典型用法代码示例。如果您正苦于以下问题:Java CartItemModifyException类的具体用法?Java CartItemModifyException怎么用?Java CartItemModifyException使用的例子?那么, 这里精选的类代码示例或许可以为您提供帮助。
CartItemModifyException类属于org.ofbiz.order.shoppingcart包,在下文中一共展示了CartItemModifyException类的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Java代码示例。
示例1: runProductPromoRules
import org.ofbiz.order.shoppingcart.CartItemModifyException; //导入依赖的package包/类
protected static boolean runProductPromoRules(ShoppingCart cart, Long useLimit, boolean requireCode, String productPromoCodeId, Long codeUseLimit, long maxUseLimit,
GenericValue productPromo, List<GenericValue> productPromoRules, LocalDispatcher dispatcher, Delegator delegator, Timestamp nowTimestamp) throws GenericEntityException, UseLimitException {
boolean cartChanged = false;
Map<ShoppingCartItem,BigDecimal> usageInfoMap = prepareProductUsageInfoMap(cart);
String productPromoId = productPromo.getString("productPromoId");
while ((useLimit == null || useLimit.longValue() > cart.getProductPromoUseCount(productPromoId)) &&
(!requireCode || UtilValidate.isNotEmpty(productPromoCodeId)) &&
(codeUseLimit == null || codeUseLimit.longValue() > cart.getProductPromoCodeUse(productPromoCodeId))) {
boolean promoUsed = false;
BigDecimal totalDiscountAmount = BigDecimal.ZERO;
BigDecimal quantityLeftInActions = BigDecimal.ZERO;
Iterator<GenericValue> promoRulesIter = productPromoRules.iterator();
while (promoRulesIter != null && promoRulesIter.hasNext()) {
GenericValue productPromoRule = promoRulesIter.next();
// if apply then performActions when no conditions are false, so default to true
boolean performActions = true;
// loop through conditions for rule, if any false, set allConditionsTrue to false
List<GenericValue> productPromoConds = EntityQuery.use(delegator).from("ProductPromoCond").where("productPromoId", productPromo.get("productPromoId")).orderBy("productPromoCondSeqId").cache(true).queryList();
productPromoConds = EntityUtil.filterByAnd(productPromoConds, UtilMisc.toMap("productPromoRuleId", productPromoRule.get("productPromoRuleId")));
// using the other method to consolidate cache entries because the same cache is used elsewhere: List productPromoConds = productPromoRule.getRelated("ProductPromoCond", null, UtilMisc.toList("productPromoCondSeqId"), true);
if (Debug.verboseOn()) Debug.logVerbose("Checking " + productPromoConds.size() + " conditions for rule " + productPromoRule, module);
Iterator<GenericValue> productPromoCondIter = UtilMisc.toIterator(productPromoConds);
while (productPromoCondIter != null && productPromoCondIter.hasNext()) {
GenericValue productPromoCond = productPromoCondIter.next();
boolean conditionSatisfied = checkCondition(productPromoCond, cart, delegator, dispatcher, nowTimestamp);
// any false condition will cause it to NOT perform the action
if (!conditionSatisfied) {
performActions = false;
break;
}
}
if (performActions) {
// perform all actions, either apply or unapply
List<GenericValue> productPromoActions = productPromoRule.getRelated("ProductPromoAction", null, UtilMisc.toList("productPromoActionSeqId"), true);
Iterator<GenericValue> productPromoActionIter = UtilMisc.toIterator(productPromoActions);
while (productPromoActionIter != null && productPromoActionIter.hasNext()) {
GenericValue productPromoAction = productPromoActionIter.next();
try {
ActionResultInfo actionResultInfo = performAction(productPromoAction, cart, delegator, dispatcher, nowTimestamp);
totalDiscountAmount = totalDiscountAmount.add(actionResultInfo.totalDiscountAmount);
quantityLeftInActions = quantityLeftInActions.add(actionResultInfo.quantityLeftInAction);
// only set if true, don't set back to false: implements OR logic (ie if ANY actions change content, redo loop)
boolean actionChangedCart = actionResultInfo.ranAction;
if (actionChangedCart) {
promoUsed = true;
cartChanged = true;
}
} catch (CartItemModifyException e) {
Debug.logError(e, "Error modifying the cart while performing promotion action [" + productPromoAction.getPrimaryKey() + "]", module);
}
}
}
}
if (promoUsed) {
// Get product use information from the cart
Map<ShoppingCartItem,BigDecimal> newUsageInfoMap = prepareProductUsageInfoMap(cart);
Map<ShoppingCartItem,BigDecimal> deltaUsageInfoMap = prepareDeltaProductUsageInfoMap(usageInfoMap, newUsageInfoMap);
usageInfoMap = newUsageInfoMap;
cart.addProductPromoUse(productPromo.getString("productPromoId"), productPromoCodeId, totalDiscountAmount, quantityLeftInActions, deltaUsageInfoMap);
} else {
// the promotion was not used, don't try again until we finish a full pass and come back to see the promo conditions are now satisfied based on changes to the cart
break;
}
if (cart.getProductPromoUseCount(productPromoId) > maxUseLimit) {
throw new UseLimitException("ERROR: While calculating promotions the promotion [" + productPromoId + "] action was applied more than " + maxUseLimit + " times, so the calculation has been ended. This should generally never happen unless you have bad rule definitions.");
}
}
return cartChanged;
}
示例2: performAction
import org.ofbiz.order.shoppingcart.CartItemModifyException; //导入依赖的package包/类
/** returns true if the cart was changed and rules need to be re-evaluted */
protected static ActionResultInfo performAction(GenericValue productPromoAction, ShoppingCart cart, Delegator delegator, LocalDispatcher dispatcher, Timestamp nowTimestamp) throws GenericEntityException, CartItemModifyException {
ActionResultInfo actionResultInfo = new ActionResultInfo();
performAction(actionResultInfo, productPromoAction, cart, delegator, dispatcher, nowTimestamp);
return actionResultInfo;
}
示例3: runProductPromoRules
import org.ofbiz.order.shoppingcart.CartItemModifyException; //导入依赖的package包/类
protected static boolean runProductPromoRules(ShoppingCart cart, Long useLimit, boolean requireCode, String productPromoCodeId, Long codeUseLimit, long maxUseLimit,
GenericValue productPromo, List<GenericValue> productPromoRules, LocalDispatcher dispatcher, Delegator delegator, Timestamp nowTimestamp) throws GenericEntityException, UseLimitException {
boolean cartChanged = false;
Map<ShoppingCartItem,BigDecimal> usageInfoMap = prepareProductUsageInfoMap(cart);
String productPromoId = productPromo.getString("productPromoId");
while ((useLimit == null || useLimit.longValue() > cart.getProductPromoUseCount(productPromoId)) &&
(!requireCode || UtilValidate.isNotEmpty(productPromoCodeId)) &&
(codeUseLimit == null || codeUseLimit.longValue() > cart.getProductPromoCodeUse(productPromoCodeId))) {
boolean promoUsed = false;
BigDecimal totalDiscountAmount = BigDecimal.ZERO;
BigDecimal quantityLeftInActions = BigDecimal.ZERO;
Iterator<GenericValue> promoRulesIter = productPromoRules.iterator();
while (promoRulesIter != null && promoRulesIter.hasNext()) {
GenericValue productPromoRule = promoRulesIter.next();
// if apply then performActions when no conditions are false, so default to true
boolean performActions = true;
// loop through conditions for rule, if any false, set allConditionsTrue to false
List<GenericValue> productPromoConds = delegator.findByAnd("ProductPromoCond", UtilMisc.toMap("productPromoId", productPromo.get("productPromoId")), UtilMisc.toList("productPromoCondSeqId"), true);
productPromoConds = EntityUtil.filterByAnd(productPromoConds, UtilMisc.toMap("productPromoRuleId", productPromoRule.get("productPromoRuleId")));
// using the other method to consolidate cache entries because the same cache is used elsewhere: List productPromoConds = productPromoRule.getRelated("ProductPromoCond", null, UtilMisc.toList("productPromoCondSeqId"), true);
if (Debug.verboseOn()) Debug.logVerbose("Checking " + productPromoConds.size() + " conditions for rule " + productPromoRule, module);
Iterator<GenericValue> productPromoCondIter = UtilMisc.toIterator(productPromoConds);
while (productPromoCondIter != null && productPromoCondIter.hasNext()) {
GenericValue productPromoCond = productPromoCondIter.next();
boolean conditionSatisfied = checkCondition(productPromoCond, cart, delegator, dispatcher, nowTimestamp);
// any false condition will cause it to NOT perform the action
if (!conditionSatisfied) {
performActions = false;
break;
}
}
if (performActions) {
// perform all actions, either apply or unapply
List<GenericValue> productPromoActions = productPromoRule.getRelated("ProductPromoAction", null, UtilMisc.toList("productPromoActionSeqId"), true);
Iterator<GenericValue> productPromoActionIter = UtilMisc.toIterator(productPromoActions);
while (productPromoActionIter != null && productPromoActionIter.hasNext()) {
GenericValue productPromoAction = productPromoActionIter.next();
try {
ActionResultInfo actionResultInfo = performAction(productPromoAction, cart, delegator, dispatcher, nowTimestamp);
totalDiscountAmount = totalDiscountAmount.add(actionResultInfo.totalDiscountAmount);
quantityLeftInActions = quantityLeftInActions.add(actionResultInfo.quantityLeftInAction);
// only set if true, don't set back to false: implements OR logic (ie if ANY actions change content, redo loop)
boolean actionChangedCart = actionResultInfo.ranAction;
if (actionChangedCart) {
promoUsed = true;
cartChanged = true;
}
} catch (CartItemModifyException e) {
Debug.logError(e, "Error modifying the cart while performing promotion action [" + productPromoAction.getPrimaryKey() + "]", module);
}
}
}
}
if (promoUsed) {
// Get product use information from the cart
Map<ShoppingCartItem,BigDecimal> newUsageInfoMap = prepareProductUsageInfoMap(cart);
Map<ShoppingCartItem,BigDecimal> deltaUsageInfoMap = prepareDeltaProductUsageInfoMap(usageInfoMap, newUsageInfoMap);
usageInfoMap = newUsageInfoMap;
cart.addProductPromoUse(productPromo.getString("productPromoId"), productPromoCodeId, totalDiscountAmount, quantityLeftInActions, deltaUsageInfoMap);
} else {
// the promotion was not used, don't try again until we finish a full pass and come back to see the promo conditions are now satisfied based on changes to the cart
break;
}
if (cart.getProductPromoUseCount(productPromoId) > maxUseLimit) {
throw new UseLimitException("ERROR: While calculating promotions the promotion [" + productPromoId + "] action was applied more than " + maxUseLimit + " times, so the calculation has been ended. This should generally never happen unless you have bad rule definitions.");
}
}
return cartChanged;
}