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<RuleAction> items;
|
|
public RuleRuntimes() {
|
items = new ArrayList<RuleAction>();
|
}
|
|
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;
|
}
|
}
|