/// <summary> /// 得到价格 /// </summary> /// <param name="calculator"></param> /// <returns></returns> public virtual decimal GetMarryPrice(FreightCalculatorEntity calculator) { var carry = Carries.FirstOrDefault(it => it.RegionArray != null && (it.RegionArray.Contains(calculator.Province) || it.RegionArray.Contains(calculator.City) || it.RegionArray.Contains(calculator.County))); if (carry == null) { carry = Carries.FirstOrDefault(it => string.IsNullOrWhiteSpace(it.Region)); } if (carry == null) { return(0); } var defaultPrice = carry.DefaultPrice; if (calculator.Count > carry.DefaultCount) { var overCount = calculator.Count - carry.DefaultCount; var priceCount = (int)Math.Ceiling((double)overCount / (carry.ContinueCount == 0 ? 1 : carry.ContinueCount)); return(defaultPrice + priceCount * carry.ContinuePrice); } return(defaultPrice); }
/// <summary> /// 设置配送 /// </summary> /// <param name="calculator"></param> /// <param name="price"></param> /// <param name="defaultCount"></param> protected virtual decimal GetDistribution(FreightCalculatorEntity calculator, decimal price, int defaultCount) { if (calculator.Count > defaultCount) { var overCount = calculator.Count - defaultCount; var priceCount = (int)Math.Ceiling((double)overCount / (ContinueCount == 0 ? 1 : ContinueCount)); price = price + priceCount * ContinuePrice; } return(price); }
/// <summary> /// 得到价格 /// </summary> /// <param name="calculator"></param> /// <param name="region"></param> /// <param name="defaultPrice"></param> /// <param name="defaultCount"></param> /// <returns></returns> protected virtual decimal GetRegionPrice(FreightCalculatorEntity calculator, FreightRegionEntity region, decimal defaultPrice, int defaultCount) { var continuePrice = region == null ? ContinuePrice : region.ContinuePrice; var continueCount = region == null ? ContinueCount : region.ContinueCount; if (calculator.Count > defaultCount) { var overCount = calculator.Count - defaultCount; var priceCount = (int)Math.Ceiling((double)overCount / (continueCount == 0 ? 1 : continueCount)); return(defaultPrice + priceCount * continuePrice); } return(defaultPrice); }
/// <summary> /// 确认是否包邮 /// </summary> /// <returns></returns> public virtual void Set(FreightCalculatorEntity calculator) { Calculator = calculator; switch (Type) { case FreightType.Distribution: SetDistribution(calculator); break; case FreightType.Express: SetRegionPrice(calculator); break; } }
/// <summary> /// 设置配送 /// </summary> /// <param name="calculate"></param> protected virtual void SetDelivery(FreightCalculatorEntity calculate) { if (calculate.Area == null || string.IsNullOrEmpty(calculate.Area.Value)) { return; } var vals = calculate.Area.Value.Split('-'); Price = vals[0].Convert <decimal>() * calculate.Count; if (vals.Length > 1) { Cost = vals[1].Convert <decimal>() * calculate.Count; } }
/// <summary> /// 得到价格 /// </summary> /// <param name="calculator"></param> /// <returns></returns> public virtual void SetRegionPrice(FreightCalculatorEntity calculator) { var region = Regions?.FirstOrDefault(it => it.GetRegionArray() != null && (it.GetRegionArray().Contains(calculator.Province) || it.GetRegionArray().Contains(calculator.City) || it.GetRegionArray().Contains(calculator.County))); var defaultPrice = region == null ? DefaultPrice : region.DefaultPrice; var defaultCount = region == null ? DefaultCount : region.DefaultCount; if (FullFreePrice > 0 && FullFreePrice <= calculator.PayAmount) { Price = 0; Cost = GetRegionPrice(calculator, region, defaultPrice, defaultCount); } Price = Cost = GetRegionPrice(calculator, region, defaultPrice, defaultCount); }
/// <summary> /// 设置配送 /// </summary> /// <param name="calculator"></param> protected virtual void SetDistribution(FreightCalculatorEntity calculator) { if (calculator.Area == null || string.IsNullOrEmpty(calculator.Area.Value)) { return; } Price = calculator.Area.Value.Convert <decimal>(); if (calculator.Count > DefaultCount) { var overCount = calculator.Count - DefaultCount; var priceCount = (int)Math.Ceiling((double)overCount / (ContinueCount == 0 ? 1 : ContinueCount)); Price = Price + priceCount * ContinuePrice; } Cost = Price; if (FullFreePrice > 0 && FullFreePrice <= calculator.PayAmount) { Price = 0; } }
/// <summary> /// 确认是否包邮 /// </summary> /// <returns></returns> public virtual void Set(FreightCalculatorEntity calculator) { if (IsDelivery) { SetDelivery(calculator); return; } if (calculator.Calculate(FreeRegionArray)) { return; } var price = GetMarryPrice(calculator); if (calculator.GetProfit(price) >= FreeProfit) { return; } Price = Cost = price; }
/// <summary> /// 得到续重价格 /// </summary> /// <returns></returns> public virtual decimal GetContinuePrice(FreightCalculatorEntity calculator) { if (Type == FreightType.Take) { return(0); } if (Type == FreightType.Distribution) { return(GetDistribution(calculator, 0, 0)); } if (Type == FreightType.Express) { var region = Regions?.FirstOrDefault(it => it.GetRegionArray() != null && (it.GetRegionArray().Contains(calculator.Province) || it.GetRegionArray().Contains(calculator.City) || it.GetRegionArray().Contains(calculator.County))); return(GetRegionPrice(calculator, region, 0, 0)); } return(0); }