P15GEN2\59518
2024-05-29 d4210c7c4b04abde20037ea8aa0f54ef8a2649aa
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
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);
    }
}