package policy.price; import foundation.dao.preload.Bucket; import foundation.json.IJSONWriter; import foundation.util.MapList; import foundation.util.Util; import policy.price.outline.DomainOnsiteResult; import policy.price.outline.DomainPriceResult; public class DomainPolicyBucket { private DomainPolicy normalPolicy; private MapList customerPolicys; public DomainPolicyBucket() { normalPolicy = new DomainPolicy(); customerPolicys = new MapList(); } public void loadOnePriceListLine(String customerId, PriceLine priceLine) { DomainPolicy domainPolicy = null; if (Util.isEmpty(customerId)) { domainPolicy = normalPolicy; } else { domainPolicy = customerPolicys.get(customerId); if (domainPolicy == null) { domainPolicy = new DomainPolicy(customerId); customerPolicys.add(customerId, domainPolicy); } } domainPolicy.loadOnePriceListLine(priceLine); } public void loadOneQtyOnsiteDiscount(String customerId, OnsiteLine qtyLine) { DomainPolicy domainPolicy = null; if (Util.isEmpty(customerId)) { domainPolicy = normalPolicy; } else { domainPolicy = customerPolicys.get(customerId); if (domainPolicy == null) { domainPolicy = new DomainPolicy(); customerPolicys.add(customerId, domainPolicy); } } domainPolicy.loadOneOnsiteDiscount(qtyLine); } public void loadOnePriceOnsiteDiscount(String customerId, OnsiteLine onsiteLine) { DomainPolicy domainPolicy = null; if (Util.isEmpty(customerId)) { domainPolicy = normalPolicy; } else { domainPolicy = customerPolicys.get(customerId); if (domainPolicy == null) { domainPolicy = new DomainPolicy(); customerPolicys.add(customerId, domainPolicy); } } domainPolicy.loadOneOnsiteDiscount(onsiteLine); } public void removeOnePriceListLine(String customerId, String policyId) { DomainPolicy domainPolicy = customerPolicys.get(customerId); if (domainPolicy == null) { return ; } domainPolicy.removeOnePriceListLine(policyId); } public void removeOneOnsiteDiscount(String customerId, String policyId) { DomainPolicy domainPolicy = customerPolicys.get(customerId); if (domainPolicy == null) { return ; } domainPolicy.removeOneOnsiteDiscount(policyId); } public DomainPolicy get(String customerId) { DomainPolicy result = customerPolicys.get(customerId); if (result == null) { result = normalPolicy; } return result; } public void getPriceList(DomainPriceResult result) { //1. 添加 national 价格列表 Bucket nationalBucket = normalPolicy.getPriceBucket(); result.setNationalPriceList(nationalBucket); //2. 添加客户价格列表 for (DomainPolicy customerPolicy: customerPolicys) { String customerId = customerPolicy.getCustomerId(); Bucket bucket = customerPolicy.getPriceBucket(); result.addCustomerPriceList(customerId, bucket); } } public void getOnsiteList(DomainOnsiteResult result) { //1. 添加 national 政策 列表 Bucket nationalBucket = normalPolicy.getOnsiteBucket(); result.setNationalOnsiteList(nationalBucket); //2. 添加客户价格列表 for (DomainPolicy customerPolicy: customerPolicys) { String customerId = customerPolicy.getCustomerId(); Bucket bucket = customerPolicy.getOnsiteBucket(); if(Util.isEmpty(bucket) || bucket.size() == 0) { continue; } result.addCustomerOnsiteList(customerId, bucket); } } public void writeJSONOnsiteBody(IJSONWriter writer) { //1. 通过价格/政策 writer.beginArray("national"); normalPolicy.writeJSONOnsiteBody(writer); writer.endArray(); //2. 客户价格/政策 writer.beginArray("customer"); for (DomainPolicy policy: customerPolicys) { policy.writeJSONOnsiteBody(writer); } writer.endArray(); } }