private static Contract_DivideType[] getdividetypelist() { if (typelist.Length == 0) { typelist = Contract_DivideType.GetContract_DivideTypes().ToArray(); } return(typelist); }
public static decimal calculate_cost(int ID, decimal SellCost, string DivideType) { if (totalcostdic.ContainsKey(ID)) { return(totalcostdic[ID]); } if (SellCost <= 0) { return(0); } Contract_DivideType[] mytypelist = new Contract_DivideType[] { }; if (typedic.ContainsKey(ID)) { mytypelist = typedic[ID]; } else { mytypelist = getdividetypelist().Where(p => p.Contract_DivideID == ID).ToArray(); typedic.Add(ID, mytypelist); } if (mytypelist.Length == 0) { return(0); } decimal cost = 0; if (DivideType.Equals(Utility.EnumModel.ContractDivideTypeDefine.fixedpercent.ToString())) { var mytype = mytypelist.FirstOrDefault(p => p.DivideType.Equals(DivideType)); if (mytype == null) { return(0); } if (mytype.Divide_Percent <= 0) { return(0); } cost = SellCost * mytype.Divide_Percent / 100; } else if (DivideType.Equals(Utility.EnumModel.ContractDivideTypeDefine.jietipercent.ToString())) { var mytypes = mytypelist.Where(p => p.DivideType.Equals(DivideType)).OrderBy(p => p.DivideStartCost).ToArray(); foreach (var item in mytypes) { if (item.DivideEndCost < item.DivideStartCost) { continue; } if (item.DivideEndCost <= SellCost) { cost += (item.DivideEndCost - item.DivideStartCost) * item.Divide_Percent / 100; } } } totalcostdic.Add(ID, cost); return(cost); }