阶梯优惠政策For C#

因为客户需要,特定场景下,需要给客户回报补贴。但是补贴是根据系统设置的阶梯条件进行,最后给出补贴总金额以及每个等级的明细,以便保存到数据库。

using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace 阶梯价格优惠政策一
{
    public class QuantityTierDiscountCalculator
    {
        public double CalculateTotalDiscount(double totalQuantity, List<DiscountTier> tiers, out List<PreferentialDetail> detail)
        {
            double totalDiscount = 0;
            detail = new List<PreferentialDetail>();
            //优惠政策由小到大
            for (int i = 0; i < tiers.Count; i++)
            {
                var tier = tiers[i];
                // 1)首先确定是否达标最低标准
                if (totalQuantity < tier.MinimumQuantity)  break;
                // 2)达标时,进行第一等级优惠计算,然后计算下一等级
                double quantityThisTier = 0;
                if (totalQuantity >= tier.MaximumQuantity)
                {
                    quantityThisTier = tier.MaximumQuantity - tier.MinimumQuantity;
                    totalDiscount += quantityThisTier * tier.PreferentialAmount;
                    PreferentialDetail preferential = new PreferentialDetail();
                    preferential.PreferentialName = tier.PreferentialName;
                    preferential.PreferentialId = tier.PreferentialId;
                    preferential.PreferentialQuantity = quantityThisTier;
                    preferential.PreferentialMoney = tier.PreferentialAmount;
                    preferential.PreferentialAmount = quantityThisTier * tier.PreferentialAmount;
                    detail.Add(preferential);
                    Debug.Print(string.Format("本次符合吨位:{0}t,优惠:{1}元", quantityThisTier, (quantityThisTier * tier.PreferentialAmount)));
                }
                else
                {
                    quantityThisTier = (totalQuantity - tier.MinimumQuantity); 
                    totalDiscount += quantityThisTier * tier.PreferentialAmount;
                    PreferentialDetail preferential = new PreferentialDetail();
                    preferential.PreferentialName = tier.PreferentialName;
                    preferential.PreferentialId = tier.PreferentialId;
                    preferential.PreferentialQuantity = quantityThisTier;
                    preferential.PreferentialMoney = tier.PreferentialAmount;
                    preferential.PreferentialAmount = quantityThisTier * tier.PreferentialAmount;
                    detail.Add(preferential);
                    Debug.Print(string.Format("本次符合吨位:{0}t,优惠:{1}元", quantityThisTier, (quantityThisTier * tier.PreferentialAmount)));
                    break;
                }                
            }
            return totalDiscount;
        }
    }

    public class DiscountTier
    {
        public double MinimumQuantity { get; set; }

        public double MaximumQuantity { get; set; }

        public double PreferentialAmount { get; set; }

        public string PreferentialName { get; set; }

        public string PreferentialId { get; set; }
    }

    public class PreferentialDetail
    {
        public string PreferentialName { get; set; }

        public string PreferentialId { get; set; }

        public double PreferentialQuantity { get; set; }

        public double PreferentialMoney { get; set; }

        public double PreferentialAmount { get; set; }

    }
    class Program
    {
        static void Main(string[] args)
        {
            // 使用示例
            var calculator = new QuantityTierDiscountCalculator();
            double totalQuantity = 76595.39; // 总数量
            var tiers = new List<DiscountTier>
            {
                new DiscountTier { MinimumQuantity = 20000, MaximumQuantity = 30000, PreferentialAmount = 1 , PreferentialId = "A", PreferentialName = "满足2-3万" },
                new DiscountTier { MinimumQuantity = 30000, MaximumQuantity = 40000, PreferentialAmount = 2 , PreferentialId = "B", PreferentialName = "满足3-4万"  },
                new DiscountTier { MinimumQuantity = 40000, MaximumQuantity = 50000, PreferentialAmount = 3  , PreferentialId = "C", PreferentialName = "满足4-5万" },
                new DiscountTier { MinimumQuantity = 50000, MaximumQuantity = 60000, PreferentialAmount = 4  , PreferentialId = "D", PreferentialName = "满足5-6万" },
                new DiscountTier { MinimumQuantity = 60000, MaximumQuantity = 999999999, PreferentialAmount = 5 , PreferentialId = "E", PreferentialName = "满足6万以上"  },
            };
			//输出优惠政策明细
            List<PreferentialDetail> detail;
            double totalDiscount = calculator.CalculateTotalDiscount(totalQuantity, tiers, out detail);

            Debug.Print($"总优惠金额为: {totalDiscount}");
        }
    }
}

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值