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<String, SKUPolicy> skus;
|
|
|
public ProductPolicy(ProductLinePolicy productLine) {
|
this.productLine = productLine;
|
this.domainBucket = new DomainPolicyBucket();
|
this.skus = new MapList<String, SKUPolicy>();
|
}
|
|
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);
|
}
|
}
|