Beispiel #1
0
        /// <summary>
        /// 计算促销活动
        /// </summary>
        /// <param name="Products">商品信息</param>
        /// <param name="CurrentUser">购买者</param>
        /// <param name="shop">供应商,为空表示自营商品</param>
        /// <param name="basketshop"></param>
        public static BasketShop SetMoneyAndPoint(Lebi_User CurrentUser, Lebi_UserLevel CurrentUserLevel, BasketShop basketshop)
        {
            string  pids = "0";
            decimal Money_Product_begin = 0;
            int     Count  = 0;
            decimal Weight = 0; //订单总重量
            decimal Volume = 0; //订单总体积

            int     Money_Transport_One = 0;
            bool    IsTransportPriceOne = false;
            decimal Money_Market        = 0;
            decimal Money_Cut           = 0;
            decimal Money_Give          = 0;
            decimal Point_Free          = 0; //赠送积分
            decimal Point_Product       = 0; //商品获得的积分
            decimal Point          = 0;      //获得的积分总数
            decimal Point_Buy      = 0;      //积分换购所需积分
            decimal Money_Product  = 0;
            decimal Money_Property = 0;
            List <Lebi_User_Product>   FreeProducts   = new List <Lebi_User_Product>();
            List <Lebi_Promotion_Type> PromotionTypes = new List <Lebi_Promotion_Type>();

            if (CurrentUserLevel == null)
            {
                CurrentUserLevel = B_Lebi_UserLevel.GetModel(CurrentUser.UserLevel_id);
            }
            List <Lebi_User_Product> Products = basketshop.Products;
            Lebi_Supplier            shop     = basketshop.Shop;

            foreach (Lebi_User_Product pro in Products)
            {
                Lebi_Product product = B_Lebi_Product.GetModel(pro.Product_id);
                if (product == null)
                {
                    continue;
                }
                pro.Discount   = 100;
                pro.Pointagain = 1;
                //pro.Product_Price = EX_Product.ProductPrice(product, CurrentUserLevel,pro.count);//单价
                if (CurrentUserLevel.MoneyToPoint > 0)
                {
                    pro.Product_Point = pro.Product_Price * CurrentUserLevel.MoneyToPoint + pro.Product_Point;//单个产品可得的积分
                }
                pids += "," + pro.Product_id;
                Money_Product_begin = Math.Round(Money_Product_begin + pro.Product_Price * pro.count, 2);
                Count          = Count + pro.count;
                Money_Market   = Money_Market + EX_Product.ProductMarketPrice(product) * pro.count; //兼容分销  2018.3.8 by lebi.kingdge
                Money_Property = Money_Property + pro.ProPerty_Price * pro.count;
                Money_Product  = Money_Product + pro.Product_Price * pro.count;
                Weight         = Weight + product.Weight * pro.count;
                Volume         = Volume + product.VolumeH * product.VolumeL * product.VolumeW * pro.count;
                Point_Product  = Point_Product + Math.Round(pro.Product_Point * pro.count, 2);
                Point          = Point_Product + Point_Free;
                //320一般商品321限时抢购322团购323积分换购
                if (product.Type_id_ProductType == 323 && product.Time_Expired > System.DateTime.Now)
                {
                    Point_Buy = Point_Buy + product.Price_Sale * pro.count;
                }
            }

            List <Lebi_Promotion_Type> cps = Promotion.CurrentPromotionType();

            if (shop == null)
            {
                shop = new Lebi_Supplier();
            }
            foreach (Lebi_Promotion_Type cp in cps)
            {
                //检查是否商铺单独促销
                if (cp.Type_id_PromotionType == 421)
                {
                    if (shop.id > 0)
                    {
                        continue;
                    }
                }
                if (cp.Type_id_PromotionType == 422)
                {
                    if (shop.id != cp.Supplier_id)
                    {
                        continue;
                    }
                }
                //检查会员组别
                if (!("," + cp.UserLevel_ids + ",").Contains("," + CurrentUserLevel.id + ","))
                {
                    continue;
                }

                bool flag = true;
                string where = "1=1";
                List <Lebi_User_Product> sps = null;
                foreach (Lebi_Promotion p in Promotion.GetPromotion(cp.id))//只匹配一个条件
                {
                    flag = true;
                    if (p.Case804 == "")
                    {
                        p.Case804 = "0";
                    }
                    if (p.Case805 == "")
                    {
                        p.Case805 = "0";
                    }
                    //验证订单金额:801
                    if (p.IsCase801 == 1)
                    {
                        if (Money_Product_begin < p.Case801)
                        {
                            flag = false;
                            continue;
                        }
                    }
                    //验证订单商品数量:802

                    if (p.IsCase802 == 1)
                    {
                        if (Count < p.Case802)
                        {
                            flag = false;
                            continue;
                        }
                    }
                    //验证商品分类:804
                    if (p.IsCase804 == 1)
                    {
                        where += " and Pro_Type_id in (" + p.Case804 + ")";
                        if (B_Lebi_Product.Counts("id in (" + pids + ") and Pro_Type_id in (" + p.Case804 + ")") == 0)
                        {
                            flag = false;
                            continue;
                        }
                    }
                    //验证限制商品:805
                    if (p.IsCase805 == 1)
                    {
                        where += "and id in (" + p.Case805 + ")";
                        if (B_Lebi_Product.Counts("id in (" + pids + ") and id in (" + p.Case805 + ")") == 0)
                        {
                            flag = false;
                            continue;
                        }
                    }
                    //验证单品数量:803
                    if (p.IsCase803 == 1)
                    {
                        string tids = "0";
                        //取出购物车中,数量大于水平线的商品
                        foreach (Lebi_User_Product up in Products)
                        {
                            if (up.count >= p.Case803)
                            {
                                tids += "," + up.Product_id;
                            }
                        }
                        if (tids == "0")
                        {
                            flag = false;
                            continue;
                        }
                        where += " and id in (" + tids + ")";
                        if (B_Lebi_Product.Counts(where) == 0)
                        {
                            flag = false;
                            continue;
                        }
                    }
                    //验证订单内指定商品数量:806
                    if (p.IsCase806 == 1)
                    {
                        if (p.Case804 == "" && p.Case805 == "")//未设置限制条件的话,直接失败
                        {
                            flag = false;
                            continue;
                        }
                        int count = 0;
                        //计算购物车中包含商品的总数
                        foreach (Lebi_User_Product up in Products)
                        {
                            if (("," + p.Case804 + ",").Contains("," + up.Pro_Type_id + ",") || ("," + p.Case805 + ",").Contains("," + up.Product_id + ","))
                            {
                                count = count + up.count;
                            }
                        }
                        if (count < p.Case806)
                        {
                            flag = false;
                            continue;
                        }
                    }
                    //条件检查结束
                    if (flag)
                    {
                        //取出验证成功的指定商品
                        sps = B_Lebi_User_Product.GetList("User_id=" + CurrentUser.id + " and type_id_UserProductType=142 and Product_id in (select id from [Lebi_Product] where " + where + ")", "");

                        //计算定额运费901
                        if (p.IsRule901 == 1)
                        {
                            Money_Transport_One = p.Rule901;
                            IsTransportPriceOne = true;
                        }
                        //计算折扣902
                        if (p.IsRule902 == 1)
                        {
                            foreach (Lebi_User_Product pro in Products)
                            {
                                pro.Discount = pro.Discount * p.Rule902 / 100;
                            }
                        }
                        //计算指定商品折扣903
                        if (p.IsRule903 == 1)
                        {
                            if (sps != null)
                            {
                                foreach (Lebi_User_Product pro in Products)
                                {
                                    foreach (Lebi_User_Product sp in sps)
                                    {
                                        if (pro.id == sp.id)
                                        {
                                            pro.Discount = pro.Discount * p.Rule903 / 100;
                                        }
                                    }
                                }
                            }
                        }
                        //计算减免金额904
                        if (p.IsRule904 == 1)
                        {
                            Money_Cut = p.Rule904;
                        }
                        //计算返还金额905
                        if (p.IsRule905 == 1)
                        {
                            Money_Give = p.Rule905;
                        }
                        //计算赠送积分906
                        if (p.IsRule906 == 1)
                        {
                            Point_Free = p.Rule906;
                        }
                        //计算翻倍积分907
                        if (p.IsRule907 == 1)
                        {
                            foreach (Lebi_User_Product pro in Products)
                            {
                                pro.Pointagain = pro.Pointagain + p.Rule907;
                            }
                        }
                        //计算指定商品折扣翻倍积分908
                        if (p.IsRule908 == 1)
                        {
                            if (sps != null)
                            {
                                foreach (Lebi_User_Product pro in Products)
                                {
                                    foreach (Lebi_User_Product sp in sps)
                                    {
                                        if (pro.id == sp.id)
                                        {
                                            pro.Pointagain = pro.Pointagain + p.Rule908;
                                        }
                                    }
                                }
                            }
                        }
                        //赠送商品909
                        if (p.IsRule909 == 1)
                        {
                            //暂时不做
                        }
                        //赠送指定商品910
                        if (p.IsRule910 == 1)
                        {
                            if (sps != null)
                            {
                                foreach (Lebi_User_Product sp in sps)
                                {
                                    sp.count         = p.Rule910;
                                    sp.Product_Price = 0;
                                    sp.Product_Point = 0;
                                    sp.Pointagain    = 0;
                                    sp.Discount      = 0;
                                    FreeProducts.Add(sp);
                                }
                            }
                        }
                        //第N个指定商品打折
                        if (p.IsRule912 == 1 && p.IsCase803 == 1 && p.Case803 > 0)
                        {
                            foreach (Lebi_User_Product pro in Products)
                            {
                                foreach (Lebi_User_Product sp in sps)
                                {
                                    if (pro.id == sp.id)
                                    {
                                        if (pro.count > p.Case803)
                                        {
                                            int n = sp.count / p.Case803;
                                            Money_Cut = Money_Cut + pro.Product_Price * (100 - p.Rule912) / 100 * n;
                                        }
                                    }
                                }
                            }
                        }
                        //重新计算价格积分,

                        Money_Product = 0;
                        Point_Product = 0;
                        Point         = 0;
                        foreach (Lebi_User_Product pro in Products)
                        {
                            Money_Product += Math.Round(pro.Product_Price * pro.count * pro.Discount / 100, 2);
                            Point_Product += Math.Round(pro.Product_Point * pro.count * pro.Pointagain);
                            Point          = Point_Product + Point_Free;
                        }

                        break;//验证成功不再验证
                    }
                }
                if (flag)
                {
                    PromotionTypes.Add(cp);
                }
            }
            basketshop = new BasketShop();
            basketshop.FreeProducts        = FreeProducts;
            basketshop.Money_Cut           = Money_Cut;
            basketshop.Money_Give          = Money_Give;
            basketshop.Money_Market        = Money_Market;
            basketshop.Money_Product       = Money_Product;
            basketshop.Money_Product_begin = Money_Product_begin;
            basketshop.Money_Transport     = 0;
            basketshop.Point               = Point;
            basketshop.Point_Free          = Point_Free;
            basketshop.Point_Buy           = Point_Buy;
            basketshop.Point_Product       = Point_Product;
            basketshop.Products            = Products;
            basketshop.PromotionTypes      = PromotionTypes;
            basketshop.Shop                = shop;
            basketshop.Volume              = Volume;
            basketshop.Weight              = Weight;
            basketshop.IsTransportPriceOne = IsTransportPriceOne;
            basketshop.Money_Transport_One = Money_Transport_One;
            basketshop.Count               = Count;
            basketshop.Money_Property      = Money_Property;
            return(basketshop);
        }