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 RebateAmtQtySameTimeCheck extends RuleAction { public static String remark = "积分池与买赠池不能同时使用限制"; public RebateAmtQtySameTimeCheck() { 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++; } //2. 计算结果 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. 计算结果 boolean success = remarks.size() <= 1; if (!success) { dataWriter.reportOneError("RebateAmtQtySameTimeCheck", "订单检查不通过:" + meta.getTitle()); for (String remark: remarks) { dataWriter.reportOneError("RebateAmtQtySameTimeCheck", " " + remark); } } if(CheckLevel.Info.equals(meta.getLevel())) { success = true; } return success; } }