package policy.price; import foundation.data.entity.Entity; import foundation.util.MapList; import foundation.util.Util; import policy.price.outline.DomainOnsiteResult; import policy.price.outline.DomainPriceResult; public class ProductPolicy { private String id; private String name; private ProductLinePolicy productLine; private DomainPolicyBucket domainBucket; private MapList skus; public ProductPolicy(ProductLinePolicy productLine) { this.productLine = productLine; this.domainBucket = new DomainPolicyBucket(); this.skus = new MapList(); } public void load(Entity entity) { id = entity.getString("product_id"); name = entity.getString("product_name"); } public PriceLine loadOneStandardPriceLine(Entity entity) { PriceLine priceLine = new PriceLine(PriceLine.Type_Standard); priceLine.load(entity); domainBucket.loadOnePriceListLine(priceLine.getCustomerId(), priceLine); return priceLine; } public PriceLine loadOnePriceListLine(Entity entity) { PriceLine priceLine = new PriceLine(PriceLine.Type_Customer_Product); priceLine.load(entity); domainBucket.loadOnePriceListLine(priceLine.getCustomerId(), priceLine); return priceLine; } public OnsiteLine loadOneQtyOnsiteDiscount(Entity entity) { OnsiteLine onsiteLine = null; String skuId = entity.getString("sku_id"); //1. SKU 数量 if (!Util.isEmpty(skuId)) { SKUPolicy sku = skus.get(skuId); if (sku == null) { sku = new SKUPolicy(this); skus.add(skuId, sku); } onsiteLine = sku.loadOneQtyOnsiteDiscount(entity); } //2. 产品数量 else { onsiteLine = new OnsiteLine(OnsiteLine.Type_Product_Qty); onsiteLine.load(entity); domainBucket.loadOneQtyOnsiteDiscount(onsiteLine.getCustomerId(), onsiteLine); } return onsiteLine; } public OnsiteLine loadOnePriceOnsiteDiscount(Entity entity) { OnsiteLine onsiteLine = null; String spec = entity.getString("sku_id"); //1. SKU 数量 if (!Util.isEmpty(spec)) { SKUPolicy sku = skus.get(spec); if (sku == null) { sku = new SKUPolicy(this); skus.add(spec, sku); } onsiteLine = sku.loadOnePriceOnsiteDiscount(entity); } //2. 产品数量 else { onsiteLine = new OnsiteLine(OnsiteLine.Type_Product_Price); onsiteLine.load(entity); domainBucket.loadOnePriceOnsiteDiscount(onsiteLine.getCustomerId(), onsiteLine); } return onsiteLine; } public void removeOnePriceListLine(Entity entity) { String customerId = entity.getString("account_id"); String policyId = entity.getId(); domainBucket.removeOnePriceListLine(customerId, policyId); } public void removeOneOnsiteDiscount(Entity entity) { String customerId = entity.getString("account_id"); String policyId = entity.getId(); domainBucket.removeOneOnsiteDiscount(customerId, policyId); } public void getOnePrice(String customerId, PriceSelector selector) { //1. 获取 Product 客户价格 DomainPolicy domainPolicy = domainBucket.get(customerId); if (domainPolicy != null) { domainPolicy.getOnePrice(selector); } //2. 获取 ProductLine客户价格 productLine.getOnePrice(customerId, selector); } public void getPrice(String customerId, PriceResult result) { //1. 添加 Product 客户价格 DomainPolicy domainPolicy = domainBucket.get(customerId); if (domainPolicy != null) { result.addPriceList(domainPolicy.getPriceList()); } //2. 添加ProductLine客户价格 productLine.getPrice(customerId, result); } public void getOnsiteDiscounts(String customerId, OnsitesResult result) { //1. 添加 Product 客户数量 DomainPolicy domainPolicy = domainBucket.get(customerId); if (domainPolicy != null) { result.addOnsiteDiscounts(domainPolicy.getOnsiteList()); } //2. 添加 SKU 客户数量 for (SKUPolicy sku: skus) { sku.getOnsiteDiscounts(customerId, result); } } public String getId() { return id; } public String getName() { return name; } public void getPriceList(DomainPriceResult result) { domainBucket.getPriceList(result); } public void getOnsiteList(DomainOnsiteResult result) { domainBucket.getOnsiteList(result); } }