package policy.rule.action; import java.math.BigDecimal; 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 DiscountQtyTotalQtyCheck extends RuleAction { public static String remark = "ä¹°èµ æ•°é‡åœ¨è®¢å•总数é‡ä¸çš„å æ¯”ä¸èƒ½é«˜äºŽ 50%"; public DiscountQtyTotalQtyCheck() { super(); } @Override public void createBoard(OrderCalculator calculator, CheckResult result) { //1. ä¹°èµ æ•°é‡ BigDecimal discountQty = calculator.getDiscountQty(); //2. è®¢å•æ€»æ•°é‡ BigDecimal totalQty = calculator.getTotalQty(); //3. 计算结果 BigDecimal rate = OrderCalculator.divide(discountQty, totalQty); boolean success = rate.compareTo(meta.getRateValue()) <= 0; result.setSuccess(success); if (!success) { result.writeOneRemark("ä¹°èµ æ•°é‡åœ¨è®¢å•总数é‡ä¸çš„å æ¯”:" + formatRate(rate)); } } @Override public boolean check(OrderCalculator calculator, OrderEvent event, DataWriter dataWriter) { //1. ä¹°èµ æ•°é‡ BigDecimal discountQty = calculator.getDiscountQty(); //2. è®¢å•æ€»æ•°é‡ BigDecimal totalQty = calculator.getTotalQty(); //3. 计算结果 BigDecimal rate = OrderCalculator.divide(discountQty, totalQty); boolean success = rate.compareTo(meta.getRateValue()) <= 0; BigDecimal value = meta.getValue(); if(value == null ) { value = BigDecimal.ZERO; } value = value.setScale(2, BigDecimal.ROUND_HALF_UP); if (!success) { dataWriter.reportOneError("DiscountQtyTotalQtyCheck", "è®¢å•æ£€æŸ¥ä¸é€šè¿‡ï¼š" + meta.getTitle() + value + meta.getUnit()); dataWriter.reportOneError("DiscountQtyTotalQtyCheck", " " + "ä¹°èµ æ•°é‡åœ¨è®¢å•总数é‡ä¸çš„å æ¯”:" + formatRate(rate)); } if(CheckLevel.Info.equals(meta.getLevel())) { success = true; } return success; } }