package policy.rule; import java.util.ArrayList; import java.util.List; import foundation.dao.DataPackage; import foundation.dao.DataSource; import foundation.dao.DataWriter; import foundation.data.entity.Entity; import foundation.json.IJSONProvider; import foundation.json.IJSONWriter; import order.OrderSetting; import order.OrderSettingBucket; import policy.OrderEvent; public class RuleRuntimes implements IJSONProvider{ private List items; public RuleRuntimes() { items = new ArrayList(); } public void calculateData(DataPackage dataPackage, DataWriter dataWriter) throws Exception { //1. 进行计算 dataPackage.loadOneDataFromDB(); OrderCalculator calculator = new OrderCalculator(dataWriter); boolean success = calculator.setDataPackage(dataPackage, DataSource.DB); if (!success) { return; } calculator.exec(); } public boolean check(DataPackage dataPackage, OrderEvent event, DataWriter dataWriter) throws Exception { //1. 进行计算 dataPackage.loadOneDataFromDB(); OrderCalculator calculator = new OrderCalculator(dataWriter); boolean success = calculator.setDataPackage(dataPackage, DataSource.DB); if (!success) { return false; } calculator.exec(); success = calculator.saveToDB(dataWriter); if (!success) { return false; } //2. 检查订单是否开启校验 OrderSettingBucket orderSettingBucket = OrderSettingBucket.getInstance(); String orderType = getOrderType(dataPackage); OrderSetting orderSetting = orderSettingBucket.get(orderType); if (orderSetting == null || !orderSetting.isCheckRule()) { return true; } //3. 进行检查 for (RuleAction action: items) { boolean checkSuccess = action.check(calculator, event, dataWriter); if (!checkSuccess) { success = false; } } return success; } public void createCheckBoard(DataPackage dataPackage, CheckBoard resultList, DataWriter dataWriter) throws Exception { //1. 进行计算 dataPackage.loadOneDataFromDB(); OrderCalculator calculator = new OrderCalculator(dataWriter); boolean success = calculator.setDataPackage(dataPackage, DataSource.DB, DataSource.Request); if (!success) { return; } calculator.exec(); success = calculator.saveToDB(dataWriter); //2. 检查订单是否开启校验 OrderSettingBucket orderSettingBucket = OrderSettingBucket.getInstance(); String orderType = getOrderType(dataPackage); OrderSetting orderSetting = orderSettingBucket.get(orderType); if (orderSetting == null || !orderSetting.isCheckRule()) { return ; } //3. 创建看板 for (RuleAction action: items) { CheckResult result = new CheckResult(action.getMeta(), resultList); resultList.append(result); action.createBoard(calculator, result); } } public void loadOneChecker(RuleAction checker) { items.add(checker); } @Override public void writeJSON(IJSONWriter writer) { writer.beginArray(); for (RuleAction action : items) { action.writeJSON(writer); } writer.endArray(); } private String getOrderType(DataPackage dataPackage) throws Exception { String orderType = null; Entity master = dataPackage.getMasterEntity(DataSource.DB, DataSource.Request); if (master != null) { orderType = master.getString("type_code"); } return orderType; } }