package policy.price; import java.math.BigDecimal; import java.util.Date; import foundation.dao.preload.Bucket; import foundation.data.entity.Entity; import foundation.util.Util; import policy.price.outline.DomainOnsiteResult; import policy.price.outline.DomainPriceResult; import policy.price.outline.OnsiteOutline; import policy.price.outline.OnsiteUpdateList; import policy.price.outline.OnsiteUpdateRecord; import policy.price.outline.PriceUpdateList; import policy.price.outline.PriceUpdateRecord; import policy.price.outline.PricesOutline; public class PolicyBucket { private static PolicyBucket instance; public static Date Now; public static Date PriceTime; public static Date OnsiteTime; private boolean starting; private Bucket productLineBucket; private Bucket productBucket; private Bucket skuBucket; private PriceUpdateList priceUpdateList; private OnsiteUpdateList onsiteUpdateList; static { instance = new PolicyBucket(); Now = new Date(); PriceTime = new Date(); OnsiteTime = new Date(); } private PolicyBucket() { productLineBucket = new Bucket(); productBucket = new Bucket(); skuBucket = new Bucket(); priceUpdateList = new PriceUpdateList(); starting = false; } public static PolicyBucket getInstance() { return instance; } public void loadOnePolicy(Entity entity) { //1. 产品线/BU String productLineId = entity.getString("bu_id"); ProductLinePolicy productLine = productLineBucket.get(productLineId); if (productLine == null) { productLine = new ProductLinePolicy(); productLine.load(entity); productLineBucket.loadOne(productLineId, productLine); } //2. 产品 String productId = entity.getString("product_id"); ProductPolicy product = productBucket.get(productId); if (product == null) { product = new ProductPolicy(productLine); product.load(entity); productBucket.loadOne(productId, product); } //3. SKU SKUPolicy sku = new SKUPolicy(product); sku.load(entity); skuBucket.loadOne(sku.getId(), sku); } public PriceLine loadOneStandardPriceLine(Entity entity) { PriceLine priceLine = null; String productLineId = entity.getString("bu_id"); String productId = entity.getString("product_id"); String skuId = entity.getString("sku_id"); //1. if (!Util.isEmpty(skuId)) { SKUPolicy sku = skuBucket.get(skuId); if (sku == null) { return null; } priceLine = sku.loadOneStandardPriceLine(entity); } else if (!Util.isEmpty(productId)) { ProductPolicy product = productBucket.get(productId); if (product == null) { return null; } priceLine = product.loadOneStandardPriceLine(entity); } else if (!Util.isEmpty(productLineId)) { ProductLinePolicy productLine = productLineBucket.get(productLineId); if (productLine == null) { return null; } priceLine = productLine.loadOneStandardPriceLine(entity); } //2. if (!starting && priceLine != null) { PriceUpdateRecord record = priceUpdateList.loadOne(priceLine); record.setBUId(productLineId); record.setProductId(productId); record.setSkuId(skuId); } return priceLine; } public PriceLine loadOnePriceListLine(Entity entity) { PriceLine priceLine = null; String productLineId = entity.getString("bu_id"); String productId = entity.getString("product_id"); String skuId = entity.getString("sku_id"); String stateCode = entity.getString("state_code"); //1. SKU 价格 if (!Util.isEmpty(skuId)) { SKUPolicy sku = skuBucket.get(skuId); if (sku == null) { return null; } if (!"open".equalsIgnoreCase(stateCode)) { sku.removeOnePriceListLine(entity); }else { priceLine = sku.loadOnePriceListLine(entity); } if (!starting && priceLine != null) { PriceUpdateRecord record = priceUpdateList.loadOne(priceLine); record.setBUId(productLineId); record.setProductId(productId); record.setSkuId(skuId); } } //2. 产品价格 else if (!Util.isEmpty(productId)) { ProductPolicy product = productBucket.get(productId); if (product == null) { return null; } if (!"open".equalsIgnoreCase(stateCode)) { product.removeOnePriceListLine(entity); }else { priceLine = product.loadOnePriceListLine(entity); } if (!starting && priceLine != null) { PriceUpdateRecord record = priceUpdateList.loadOne(priceLine); record.setBUId(productLineId); record.setProductId(productId); } } //3. 产品线价格 else if (!Util.isEmpty(productLineId)) { ProductLinePolicy productLine = productLineBucket.get(productLineId); if (productLine == null) { return null; } if (!"open".equalsIgnoreCase(stateCode)) { productLine.removeOnePriceListLine(entity); }else { priceLine = productLine.loadPrice(entity); } if (!starting && priceLine != null) { PriceUpdateRecord record = priceUpdateList.loadOne(priceLine); record.setBUId(productLineId); } } return priceLine; } public BigDecimal getOnePrice(String customerId, String skuId) { SKUPolicy sku = skuBucket.get(skuId); if (sku == null) { return BigDecimal.ZERO; } return sku.getOnePrice(customerId, skuId); } public void getPriceList(String customerId, String skuId, PriceResult result) { SKUPolicy sku = skuBucket.get(skuId); if (sku == null) { return; } sku.getPriceList(customerId, result); } public void getPriceList(String customerId, PricesResult pricesResult) { for (String skuId: pricesResult) { PriceResult priceResult = pricesResult.append(skuId); getPriceList(customerId, skuId, priceResult); } } public void loadOneQtyOnsiteDiscount(Entity entity) { String productLineId = entity.getString("bu_id"); String productId = entity.getString("product_id"); String skuId = entity.getString("sku_id"); if (Util.isEmpty(productLineId)) { return; } ProductLinePolicy productLine = productLineBucket.get(productLineId); if (productLine == null) { return; } OnsiteLine onsiteLine = productLine.loadOneQtyOnsiteDiscount(entity); if( onsiteUpdateList == null) { onsiteUpdateList = new OnsiteUpdateList(); } //2. if (!starting && onsiteLine != null ) { OnsiteUpdateRecord record = onsiteUpdateList.loadOne(onsiteLine); record.setBUId(productLineId); record.setProductId(productId); record.setSkuId(skuId); } } public void loadOnePriceOnsiteDiscount(Entity entity) { String productLineId = entity.getString("bu_id"); String productId = entity.getString("product_id"); String skuId = entity.getString("sku_id"); if (Util.isEmpty(productLineId)) { return; } ProductLinePolicy productLine = productLineBucket.get(productLineId); if (productLine == null) { return; } OnsiteLine onsiteLine = productLine.loadOnePriceOnsiteDiscount(entity); //2. if (!starting && onsiteLine != null) { OnsiteUpdateRecord record = onsiteUpdateList.loadOne(onsiteLine); record.setBUId(productLineId); record.setProductId(productId); record.setSkuId(skuId); } } public void getOnsiteDiscounts(String customerId, String productLineId, OnsitesResult result) { ProductLinePolicy productLine = productLineBucket.get(productLineId); if (productLine == null) { return; } productLine.getOnsiteDiscounts(customerId, result); } public void getPriceOutline(PricesOutline pricesOutline) { pricesOutline.setCnt_forProductLine(productLineBucket.size()); pricesOutline.setCnt_forProduct(productBucket.size()); pricesOutline.setCnt_forSKU(skuBucket.size()); pricesOutline.setUpdateList(priceUpdateList); } public void getOnsiteOutline(OnsiteOutline onsiteOutline) { //1. onsiteOutline.setCnt_forProductLine(productLineBucket.size()); onsiteOutline.setCnt_forProduct(productBucket.size()); onsiteOutline.setCnt_forSKU(skuBucket.size()); //2. onsiteOutline.setUpdateList(onsiteUpdateList); } public void setStarting(boolean value) { starting = value; } public ProductLinePolicy getProductLinePolicy(String productLineId) { return productLineBucket.get(productLineId); } public ProductPolicy getProductPolicy(String productId) { return productBucket.get(productId); } public DomainPriceResult getProductLinePriceList(String buId) { DomainPriceResult result = new DomainPriceResult(); ProductLinePolicy policy = productLineBucket.get(buId); if (policy == null) { return result; } policy.getPriceList(result); return result; } public DomainPriceResult getProductPriceList(String productId) { DomainPriceResult result = new DomainPriceResult(); ProductPolicy policy = productBucket.get(productId); if (policy == null) { return result; } policy.getPriceList(result); return result; } public DomainPriceResult getSKUPriceList(String skuId) { DomainPriceResult result = new DomainPriceResult(); SKUPolicy policy = skuBucket.get(skuId); if (policy == null) { return result; } policy.getPriceList(result); return result; } public DomainOnsiteResult getProductLineOnsiteList(String buId) { DomainOnsiteResult result = new DomainOnsiteResult(); ProductLinePolicy policy = productLineBucket.get(buId); if (policy == null) { return result; } policy.getOnsiteList(result); return result; } public DomainOnsiteResult getProductOnsiteList(String productId) { DomainOnsiteResult result = new DomainOnsiteResult(); ProductPolicy policy = productBucket.get(productId); if (policy == null) { return result; } policy.getOnsiteList(result); return result; } public DomainOnsiteResult getSKUOnsiteList(String skuId) { DomainOnsiteResult result = new DomainOnsiteResult(); SKUPolicy policy = skuBucket.get(skuId); if (policy == null) { return result; } policy.getOnsiteList(result); return result; } }