package policy.price;
|
|
import java.math.BigDecimal;
|
|
import foundation.data.entity.Entity;
|
import policy.price.outline.DomainOnsiteResult;
|
import policy.price.outline.DomainPriceResult;
|
|
public class SKUPolicy {
|
|
private String id;
|
private String spec;
|
private ProductPolicy product;
|
private DomainPolicyBucket domainBucket;
|
private PriceLine basePrice;
|
|
|
public SKUPolicy(ProductPolicy product) {
|
this.product = product;
|
this.domainBucket = new DomainPolicyBucket();
|
}
|
|
public void load(Entity entity) {
|
id = entity.getString("id");
|
spec = entity.getString("spec");
|
}
|
|
public PriceLine loadOneStandardPriceLine(Entity entity) {
|
PriceLine priceLine = new PriceLine(PriceLine.Type_Standard);
|
priceLine.load(entity);
|
|
domainBucket.loadOnePriceListLine(priceLine.getCustomerId(), priceLine);
|
basePrice = priceLine;
|
return priceLine;
|
}
|
|
public PriceLine loadOnePriceListLine(Entity entity) {
|
PriceLine priceLine = new PriceLine(PriceLine.Type_Customer_SKU);
|
priceLine.load(entity);
|
|
domainBucket.loadOnePriceListLine(priceLine.getCustomerId(), priceLine);
|
return priceLine;
|
}
|
|
public OnsiteLine loadOneQtyOnsiteDiscount(Entity entity) {
|
OnsiteLine onsiteLine = new OnsiteLine(OnsiteLine.Type_SKU_Qty);
|
onsiteLine.load(entity);
|
|
domainBucket.loadOneQtyOnsiteDiscount(onsiteLine.getCustomerId(), onsiteLine);
|
return onsiteLine;
|
}
|
|
public OnsiteLine loadOnePriceOnsiteDiscount(Entity entity) {
|
OnsiteLine onsiteLine = new OnsiteLine(OnsiteLine.Type_SKU_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 BigDecimal getOnePrice(String customerId, String skuId) {
|
BigDecimal result = null;
|
PriceSelector selector = new PriceSelector();
|
|
//1. SKU客户价格
|
DomainPolicy domainPolicy = domainBucket.get(customerId);
|
|
if (domainPolicy != null) {
|
domainPolicy.getOnePrice(selector);
|
}
|
|
//3. 添加Product、ProductLine客户价格
|
product.getOnePrice(customerId, selector);
|
|
//3. 标准价格
|
selector.loadOne(basePrice);
|
|
//return
|
result = selector.getLowerPrice();
|
|
if (result == null) {
|
result = BigDecimal.ONE;
|
}
|
else {
|
result = new BigDecimal(result.toString());
|
}
|
|
return result;
|
}
|
|
public void getPriceList(String customerId, PriceResult result) {
|
//1. 添加基础价格
|
result.setBasePrice(basePrice);
|
|
//2. 添加SKU客户价格
|
DomainPolicy domainPolicy = domainBucket.get(customerId);
|
|
if (domainPolicy != null) {
|
result.addPriceList(domainPolicy.getPriceList());
|
}
|
|
//3. 添加Product、ProductLine客户价格
|
product.getPrice(customerId, result);
|
}
|
|
public void getOnsiteDiscounts(String customerId, OnsitesResult result) {
|
DomainPolicy domainPolicy = domainBucket.get(customerId);
|
|
if (domainPolicy != null) {
|
result.addOnsiteDiscounts(domainPolicy.getOnsiteList());
|
}
|
}
|
|
public String getId() {
|
return id;
|
}
|
|
public String getSpec() {
|
return spec;
|
}
|
|
public void getPriceList(DomainPriceResult result) {
|
domainBucket.getPriceList(result);
|
}
|
|
public void getOnsiteList(DomainOnsiteResult result) {
|
domainBucket.getOnsiteList(result);
|
}
|
|
}
|