package policy;
|
|
import java.util.Date;
|
import java.util.List;
|
|
import org.apache.logging.log4j.LogManager;
|
import org.apache.logging.log4j.Logger;
|
|
import foundation.action.ActionProvider;
|
import foundation.dao.DataPackage;
|
import foundation.dao.DataSource;
|
import foundation.data.entity.Entity;
|
import foundation.data.object.DataObject;
|
import foundation.persist.NamedSQL;
|
import foundation.token.IOnlineUser;
|
import foundation.util.Util;
|
import policy.price.OnsitesResult;
|
import policy.price.PolicyBucket;
|
import policy.price.PricesResult;
|
import policy.price.outline.DomainOnsiteResult;
|
import policy.price.outline.DomainPriceResult;
|
import policy.price.outline.OnsiteOutline;
|
import policy.price.outline.PricesOutline;
|
import policy.rule.CheckBoard;
|
import policy.rule.RuleBucket;
|
import policy.rule.RuleRuntimes;
|
|
public class PolicyCenter extends ActionProvider {
|
|
|
protected static Logger logger;
|
|
static {
|
logger = LogManager.getLogger(PolicyCenter.class);
|
}
|
|
@Override
|
protected void publishMethod() {
|
//1. 获取价格列表
|
addMethod("getPriceList");
|
|
//2. 获取即时政策
|
addMethod("getOnsiteDiscounts");
|
|
//3. 下单前获取下单上下文(是否可下单,可下单公司、BU等)
|
addMethod("getOrderContext");
|
|
//4.1 订单计算
|
addMethod("orderCalculate");
|
|
//4.2 订单检查(保存)
|
addMethod("policyCheckSave");
|
|
//4.3 订单检查(提交)
|
addMethod("policyCheckCommit");
|
|
//4.4 订单检查(生效)
|
addMethod("policyCheckOpen");
|
|
//4.5 订单检查看板
|
addMethod("policyCheckBoard");
|
|
//5. 获取价格概况
|
addMethod("getPriceOutline");
|
|
//6. 获取折扣概况
|
addMethod("getOnsiteOutline");
|
|
//7. 获取当前BU下的订单检查规则
|
addMethod("getChenckRulesByBU");
|
|
//8. 刷新价格列表
|
addMethod("refreshPriceList");
|
|
//9. 刷新即时政策
|
addMethod("refreshOnsiteList");
|
|
//10. 根据终止日期刷新状态(备案,协议,价格)
|
addMethod("refreshStateBySuspendDate");
|
}
|
|
public void getPriceList() throws Exception {
|
String customerId = dataReader.getString("customer_id");
|
List<String> skuIdList = dataReader.getStringList("sku_id");
|
boolean includeNotActive = dataReader.getBoolean("include_not_active", false);
|
|
if (Util.isEmpty(customerId) && skuIdList.isEmpty()) {
|
return;
|
}
|
|
//1. 刷新价格
|
PolicyLoader.refreshPriceList();
|
|
//2. 获取价格
|
PricesResult pricesResult = new PricesResult(skuIdList, includeNotActive);
|
|
PolicyBucket policyBucket = PolicyBucket.getInstance();
|
policyBucket.getPriceList(customerId, pricesResult);
|
|
//3. 返回价格
|
dataWriter.addValue(pricesResult);
|
}
|
|
public void getOnsiteDiscounts() throws Exception {
|
String customerId = dataReader.getString("customer_id");
|
String productLineId = dataReader.getString("bu_id");
|
boolean includeNotActive = dataReader.getBoolean("include_not_active", false);
|
|
if (Util.isEmpty(customerId) || Util.isEmpty(productLineId)) {
|
dataWriter.reportOneError("getOnsiteDiscounts", "产品线或客户为空,无法获取当前客户优惠政策...");
|
return;
|
}
|
|
//1. 刷新政策
|
PolicyLoader.refreshOnsiteList();
|
|
//2. 获取政策
|
OnsitesResult qtyResult = new OnsitesResult(includeNotActive);
|
|
PolicyBucket policyBucket = PolicyBucket.getInstance();
|
policyBucket.getOnsiteDiscounts(customerId, productLineId, qtyResult);
|
|
//3. 返回政策
|
dataWriter.addValue("onsiteDiscounts", qtyResult);
|
}
|
|
public void getOrderContext() throws Exception {
|
|
}
|
|
public void orderCalculate() throws Exception {
|
DataPackage dataPackage = dataReader.getDataPackage();
|
|
//1. 获取BU
|
String buId = getBUId(dataPackage);
|
|
if (Util.isEmpty(buId)) {
|
logger.error("无法获得订单BU");
|
dataWriter.reportOneError("policyCheckOpen", "无法获得订单BU");
|
}
|
|
//2. 获取校验规则,进行校验
|
RuleRuntimes rules = RuleBucket.getRuleRuntimes(buId);
|
rules.calculateData(dataPackage, dataWriter);
|
dataPackage.setResultData(DataSource.DB);
|
|
//3 返回结果
|
dataWriter.setDataPackage(dataPackage);
|
}
|
|
public void policyCheckSave() throws Exception {
|
DataPackage dataPackage = dataReader.getDataPackage();
|
|
//1. 获取BU
|
String buId = getBUId(dataPackage);
|
|
if (Util.isEmpty(buId)) {
|
logger.error("无法获得订单BU");
|
dataWriter.reportOneError("policyCheckOpen", "无法获得订单BU");
|
}
|
|
//2. 获取校验规则,进行校验
|
RuleRuntimes rules = RuleBucket.getRuleRuntimes(buId);
|
rules.check(dataPackage, OrderEvent.Save, dataWriter);
|
}
|
|
public void policyCheckCommit() throws Exception {
|
DataPackage dataPackage = dataReader.getDataPackage();
|
|
//1. 获取BU
|
String buId = getBUId(dataPackage);
|
if (Util.isEmpty(buId)) {
|
logger.error("无法获得订单BU");
|
dataWriter.reportOneError("policyCheckOpen", "无法获得订单BU");
|
}
|
|
//2. 获取校验规则,进行校验
|
RuleRuntimes rules = RuleBucket.getRuleRuntimes(buId);
|
boolean success = rules.check(dataPackage, OrderEvent.Commit, dataWriter);
|
|
if (!success) {
|
task.terminate();
|
}
|
}
|
|
public void policyCheckOpen() throws Exception {
|
DataPackage dataPackage = dataReader.getDataPackage();
|
|
//1. 获取BU
|
String buId = getBUId(dataPackage);
|
|
if (Util.isEmpty(buId)) {
|
logger.error("无法获得订单BU");
|
dataWriter.reportOneError("policyCheckOpen", "无法获得订单BU");
|
}
|
|
//2. 获取校验规则,进行校验
|
RuleRuntimes rules = RuleBucket.getRuleRuntimes(buId);
|
rules.check(dataPackage, OrderEvent.Open, dataWriter);
|
}
|
|
public void policyCheckBoard() throws Exception {
|
DataPackage dataPackage = dataReader.getDataPackage();
|
IOnlineUser onlineUser = IOnlineUser.getInstance();
|
|
CheckBoard result = new CheckBoard();
|
|
//1. 获取BU
|
String buId = onlineUser.getBUId();
|
if (Util.isEmpty(buId)) {
|
Entity master = dataPackage.getMasterEntity();
|
buId = master.getString("bu_id");
|
}
|
|
if (Util.isEmpty(buId)) {
|
logger.error("无法获得订单BU");
|
dataWriter.addValue(result);
|
}
|
|
//2. 获取校验规则,进行校验
|
RuleRuntimes rules = RuleBucket.getRuleRuntimes(buId);
|
rules.createCheckBoard(dataPackage, result, dataWriter);
|
|
//3 返回结果
|
dataWriter.addValue(result);
|
}
|
|
public void getPriceOutline() throws Exception {
|
String buId = dataReader.getString("bu_id");
|
String productId = dataReader.getString("product_id");
|
String skuId = dataReader.getString("sku_id");
|
|
PolicyBucket policyBucket = PolicyBucket.getInstance();
|
|
//1. 刷新价格
|
PolicyLoader.refreshPriceList();
|
|
//2. 查询某个SKU的价格概览
|
if (!Util.isEmpty(skuId)) {
|
DomainPriceResult result = policyBucket.getSKUPriceList(skuId);
|
dataWriter.addValue(result);
|
return;
|
}
|
|
//3. 查询某个产品的价格概览
|
if (!Util.isEmpty(productId)) {
|
DomainPriceResult result = policyBucket.getProductPriceList(productId);
|
dataWriter.addValue(result);
|
return;
|
}
|
|
//4. 查询某个产品线的价格概览
|
if (!Util.isEmpty(buId)) {
|
DomainPriceResult result = policyBucket.getProductLinePriceList(buId);
|
dataWriter.addValue(result);
|
return;
|
}
|
|
//5. 获取全部价格概览
|
PricesOutline pricesOutline = new PricesOutline();
|
policyBucket.getPriceOutline(pricesOutline);
|
dataWriter.addValue(pricesOutline);
|
}
|
|
public void getOnsiteOutline() throws Exception {
|
String buId = dataReader.getString("bu_id");
|
String productId = dataReader.getString("product_id");
|
String skuId = dataReader.getString("sku_id");
|
|
PolicyBucket policyBucket = PolicyBucket.getInstance();
|
|
//1. 刷新政策
|
PolicyLoader.refreshOnsiteList();
|
|
//2. 查询某个SKU的价格概览
|
if (!Util.isEmpty(skuId)) {
|
DomainOnsiteResult result = policyBucket.getSKUOnsiteList(skuId);
|
dataWriter.addValue(result);
|
return;
|
}
|
|
//3. 查询某个产品的价格概览
|
if (!Util.isEmpty(productId)) {
|
DomainOnsiteResult result = policyBucket.getProductOnsiteList(productId);
|
dataWriter.addValue(result);
|
return;
|
}
|
|
//4. 查询某个产品线的价格概览
|
if (!Util.isEmpty(buId)) {
|
DomainOnsiteResult result = policyBucket.getProductLineOnsiteList(buId);
|
dataWriter.addValue(result);
|
return;
|
}
|
|
//5. 获取政策
|
OnsiteOutline onsiteOutline = new OnsiteOutline();
|
policyBucket.getOnsiteOutline(onsiteOutline);
|
dataWriter.addValue(onsiteOutline);
|
}
|
|
public void getChenckRulesByBU() throws Exception {
|
CheckBoard result = new CheckBoard();
|
|
//1. 获取BU
|
String buId = dataReader.getString("bu_id");
|
|
if (Util.isEmpty(buId)) {
|
logger.error("无法获得订单BU");
|
dataWriter.addValue(result);
|
}
|
|
//2. 获取校验规则
|
RuleRuntimes rules = RuleBucket.getRuleRuntimes(buId);
|
|
//3 返回结果
|
dataWriter.addValue(rules);
|
}
|
|
public void refreshPriceList() throws Exception {
|
int cnt = PolicyLoader.refreshPriceList();
|
dataWriter.addValue(cnt);
|
}
|
|
public void refreshOnsiteList() throws Exception {
|
int cnt = PolicyLoader.refreshOnsiteList();
|
dataWriter.addValue(cnt);
|
}
|
|
private String getBUId(DataPackage dataPackage) throws Exception {
|
String buId = null;
|
Entity master = dataPackage.getMasterEntity(DataSource.DB, DataSource.Request);
|
|
if (master != null) {
|
buId = master.getString("bu_id");
|
}
|
|
return buId;
|
}
|
|
public void refreshStateBySuspendDate() throws Exception {
|
String dataName = null;
|
|
//1. 页面请求会执行
|
if (dataReader != null) {
|
dataName = dataReader.getDomain().getDataName();
|
}
|
|
//2. 定时任务会执行
|
if (Util.isEmpty(dataName)) {
|
dataName = context.getStepParam();
|
}
|
|
//3. 获取表名
|
if (Util.isEmpty(dataName)) {
|
logger.error("dataname is empty, skip refreshStateBySuspendDate");
|
return;
|
}
|
|
DataObject dataObject = DataObject.getInstance(dataName);
|
String tableName = dataObject.getTableName();
|
|
//3.
|
NamedSQL namedSQL = NamedSQL.getInstance("refreshStateBySuspendDate");
|
namedSQL.setParam("tableName", tableName);
|
namedSQL.setParam("currentDate", new Date(), true);
|
int exeCount = namedSQL.execute();
|
|
logger.info("失效 dataName:{}, {} 条", dataName, exeCount);
|
}
|
}
|