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<ProductLinePolicy> productLineBucket;
|
private Bucket<ProductPolicy> productBucket;
|
private Bucket<SKUPolicy> 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<ProductLinePolicy>();
|
productBucket = new Bucket<ProductPolicy>();
|
skuBucket = new Bucket<SKUPolicy>();
|
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;
|
}
|
|
}
|