/// <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); }