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 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); } }