package policy.rule.action; import java.math.BigDecimal; import java.util.ArrayList; import java.util.List; import foundation.dao.DataWriter; import policy.OrderEvent; import policy.rule.CheckLevel; import policy.rule.CheckResult; import policy.rule.OrderCalculator; import policy.rule.RuleAction; public class AmtQtyDiscountSameTimeCheck extends RuleAction { public static String remark = "金额折扣和数量折扣不能同时使用 "; public AmtQtyDiscountSameTimeCheck() { super(); } @Override public void createBoard(OrderCalculator calculator, CheckResult result) { int cnt = 0; //1. 折扣池 BigDecimal rebateAmt = calculator.getRebateAmt(); if (rebateAmt.compareTo(BigDecimal.ZERO) > 0) { result.writeOneRemark("折扣池金额:" + formatMoney(rebateAmt)); cnt++; } //2. 买赠池 BigDecimal rebateQty = calculator.getRebateQty(); if (rebateQty.compareTo(BigDecimal.ZERO) > 0) { result.writeOneRemark("买赠池数量:" + rebateQty.toString()); cnt++; } //3. 即时价格折扣 BigDecimal onsiteAmt = calculator.getOnsitePriceAmt(); if (onsiteAmt.compareTo(BigDecimal.ZERO) > 0) { result.writeOneRemark("即时价格折扣:" + formatMoney(onsiteAmt)); cnt++; } //4. 即时买赠 BigDecimal onsiteQty = calculator.getOnsiteQtyAmt(); if (onsiteQty.compareTo(BigDecimal.ZERO) > 0) { result.writeOneRemark("即时买赠数量:" + onsiteQty.toString()); cnt++; } //5. 计算结果 boolean success = cnt <= 1; result.setSuccess(success); if (success) { result.clearRemarks(); } } @Override public boolean check(OrderCalculator calculator, OrderEvent event, DataWriter dataWriter) { List remarks = new ArrayList(); //1. 折扣池 BigDecimal rebateAmt = calculator.getRebateAmt(); if (rebateAmt.compareTo(BigDecimal.ZERO) > 0) { remarks.add("折扣池金额:" + formatMoney(rebateAmt)); } //2. 买赠池 BigDecimal rebateQty = calculator.getRebateQty(); if (rebateQty.compareTo(BigDecimal.ZERO) > 0) { remarks.add("买赠池数量:" + rebateQty.toString()); } //3. 即时价格折扣 BigDecimal onsiteAmt = calculator.getOnsitePriceAmt(); if (onsiteAmt.compareTo(BigDecimal.ZERO) > 0) { remarks.add("即时价格折扣:" + formatMoney(onsiteAmt)); } //4. 即时买赠 BigDecimal onsiteQty = calculator.getOnsiteQtyAmt(); if (onsiteQty.compareTo(BigDecimal.ZERO) > 0) { remarks.add("即时买赠数量:" + onsiteQty.toString()); } //5. 计算结果 boolean success = remarks.size() <= 1; if (!success) { dataWriter.reportOneError("AmtQtyDiscountSameTimeCheck", "订单检查不通过:" + meta.getTitle()); for (String remark: remarks) { dataWriter.reportOneError("AmtQtyDiscountSameTimeCheck", " " + remark); } } if(CheckLevel.Info.equals(meta.getLevel())) { success = true; } return success; } }