package biz.policy.price;
|
|
import java.math.BigDecimal;
|
import java.util.Date;
|
|
import foundation.data.entity.Entity;
|
import foundation.util.MapList;
|
|
public class PackagePolicy {
|
private String id;
|
private String code;
|
private String name;
|
private String stateCode;
|
private String stateName;
|
private Date dateFrom;
|
private Date dateTo;
|
private String remark;
|
private int packageQty;
|
private int maxQty;
|
private BigDecimal discountRate;
|
private MapList<String, PackageLine> lines;
|
|
public void load(Entity entity) {
|
// 政策加载
|
id = entity.getString("id");
|
code = entity.getString("record_no");
|
name = entity.getString("record_name");
|
packageQty = entity.getInteger("emption_qty", 0);
|
discountRate = entity.getBigDecimal("discount_rate", BigDecimal.ONE);
|
stateCode = entity.getString("state_code");
|
stateName = entity.getString("state_name");
|
dateFrom = entity.getDate("date_from", null);
|
dateTo = entity.getDate("date_to", null);
|
remark = entity.getString("remark");
|
}
|
|
public void loadOnePackageLine(Entity entity) {
|
PackageLine packageLine = new PackageLine(this);
|
packageLine.load(entity);
|
|
lines.add(packageLine.getId(), packageLine);
|
}
|
|
public PackagePolicy(String id) {
|
this.id = id;
|
this.lines = new MapList<String, PackageLine>();
|
}
|
|
public PackageLine loadOnePackageLine(String lineId, int qty) {
|
PackageLine packageLine = lines.get(lineId);
|
|
if (packageLine == null) {
|
packageLine = new PackageLine(lineId, this);
|
}
|
|
packageLine.addQty(qty);
|
lines.add(packageLine.getId(), packageLine);
|
return packageLine;
|
}
|
|
public void calculateQty() {
|
PolicyBucket policyBucket = PolicyBucket.getInstance();
|
PackagePolicy policy = policyBucket.getPackagePolicy(id);
|
|
if (policy == null) {
|
stateCode = "Closed";
|
stateName = "失效";
|
return ;
|
}
|
|
MapList<String, PackageLine> policyLines = policy.getLines();
|
PackageLine line;
|
|
if (policyLines != null) {
|
packageQty = 999999;
|
}
|
|
for (PackageLine policyLine : policyLines){
|
line = lines.get(policyLine.getId());
|
|
if (line == null) {
|
packageQty = 0;
|
continue;
|
}
|
|
int actuallyQty = line.getQty();
|
packageQty = Math.min(actuallyQty/policyLine.getQty(), packageQty);
|
maxQty = Math.max(actuallyQty/policyLine.getQty(), maxQty);
|
}
|
}
|
|
public String getId() {
|
return id;
|
}
|
|
public String getCode() {
|
return code;
|
}
|
|
public String getName() {
|
return name;
|
}
|
|
public int getPackageQty() {
|
return packageQty;
|
}
|
|
public BigDecimal getDiscountRate() {
|
return discountRate;
|
}
|
|
public BigDecimal getOnePrice(BigDecimal price) {
|
return price.multiply(discountRate);
|
}
|
|
public MapList<String, PackageLine> getLines() {
|
return lines;
|
}
|
|
public String getStateCode() {
|
return stateCode;
|
}
|
|
public String getStateName() {
|
return stateName;
|
}
|
|
public Date getDateFrom() {
|
return dateFrom;
|
}
|
|
public Date getDateTo() {
|
return dateTo;
|
}
|
|
public String getRemark() {
|
return remark;
|
}
|
|
public int getMaxQty() {
|
return maxQty;
|
}
|
}
|