示例#1
0
        /// <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);
        }
示例#2
0
 /// <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);
 }
示例#3
0
        /// <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);
        }
示例#4
0
        /// <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;
            }
        }
示例#5
0
        /// <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;
            }
        }
示例#6
0
        /// <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);
        }
示例#7
0
 /// <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;
     }
 }
示例#8
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;
        }
示例#9
0
 /// <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);
 }