示例#1
0
        public ShoppingCartInfo GetShoppingCart(Member member)
        {
            ShoppingCartInfo shoppingCartInfo = new ShoppingCartInfo();

            DbCommand sqlStringCommand = this.database.GetSqlStringCommand(@"SELECT * FROM Ecshop_ShoppingCarts WHERE UserId = @UserId;SELECT * FROM Ecshop_GiftShoppingCarts gc JOIN Ecshop_Gifts g ON gc.GiftId = g.GiftId WHERE gc.UserId = @UserId;
select pp.ProductId as PromotionProductId, s.SkuId,ppp.ProductId,pro.ProductName,s.SKU,0 as ShipmentQuantity,s.CostPrice,s.SalePrice as ItemListPrice,0 as ItemAdjustedPrice,'' as SKUContent,
s.FactStock,p.ActivityId as PromotionId,p.Name as PromotionName,p.IsAscend,case when isnull(p.IsAscend,0) = 0 then p.DiscountValue when p.IsAscend = 1 then c.Quantity /p.Condition *  p.DiscountValue end  as DiscountValue,pro.ThumbnailUrl40,0 as storeId,pro.SupplierId,sp.SupplierName,sp.ShopName,sp.ShopOwner 
from Ecshop_PromotionProductsPresent   ppp 
inner join Ecshop_Promotions p  on ppp.ActivityId = p.ActivityId 
inner join Ecshop_PromotionProducts pp on ppp.ActivityId = pp.ActivityId 
left join Ecshop_SKUs s on s.ProductId = ppp.ProductId 
left join Ecshop_Skus ss on ss.ProductId = pp.ProductId 
left join Ecshop_Products pro on pro.ProductId = ppp.ProductId 
left join Ecshop_Supplier sp on pro.SupplierId = sp.SupplierId 
inner join Ecshop_ShoppingCarts  c on c.skuid = ss.skuid and userid =@UserId ");

            this.database.AddInParameter(sqlStringCommand, "UserId", DbType.Int32, member.UserId);
            using (IDataReader dataReader = this.database.ExecuteReader(sqlStringCommand))
            {
                //Member member = HiContext.Current.User as Member;
                while (dataReader.Read())
                {
                    int storeId = 0;
                    if (dataReader["storeId"] != System.DBNull.Value)
                    {
                        storeId = (int)dataReader["storeId"];
                    }
                    ShoppingCartItemInfo cartItemInfo = this.GetCartItemInfo(member, (string)dataReader["SkuId"], (int)dataReader["Quantity"], storeId);
                    if (cartItemInfo != null)
                    {
                        shoppingCartInfo.LineItems.Add(cartItemInfo);
                    }
                }
                dataReader.NextResult();
                while (dataReader.Read())
                {
                    ShoppingCartGiftInfo shoppingCartGiftInfo = DataMapper.PopulateGiftCartItem(dataReader);
                    shoppingCartGiftInfo.Quantity = (int)dataReader["Quantity"];
                    shoppingCartInfo.LineGifts.Add(shoppingCartGiftInfo);
                }
                // 促销活动(商品)中的赠送商品
                if (dataReader.NextResult())
                {
                    while (dataReader.Read())
                    {
                        ShoppingCartPresentInfo present = DataMapper.PopulatePresentCartItem(dataReader);
                        shoppingCartInfo.LinePresentPro.Add(present);
                    }
                }
            }
            return(shoppingCartInfo);
        }
示例#2
0
        public ShoppingCartItemInfo GetCartItemInfo(Member member, string skuId, int quantity, int storeId)
        {
            ShoppingCartItemInfo shoppingCartItemInfo = null;
            DbCommand            storedProcCommand    = this.database.GetStoredProcCommand("ss_ShoppingCart_GetItemInfo");

            this.database.AddInParameter(storedProcCommand, "Quantity", DbType.Int32, quantity);
            this.database.AddInParameter(storedProcCommand, "UserId", DbType.Int32, (member != null) ? member.UserId : 0);
            this.database.AddInParameter(storedProcCommand, "SkuId", DbType.String, skuId);
            this.database.AddInParameter(storedProcCommand, "GradeId", DbType.Int32, (member != null) ? member.GradeId : 0);
            using (IDataReader dataReader = this.database.ExecuteReader(storedProcCommand))
            {
                if (dataReader.Read())
                {
                    shoppingCartItemInfo                = new ShoppingCartItemInfo();
                    shoppingCartItemInfo.SkuId          = skuId;
                    shoppingCartItemInfo.ShippQuantity  = quantity;
                    shoppingCartItemInfo.Quantity       = quantity;
                    shoppingCartItemInfo.ProductId      = (int)dataReader["ProductId"];
                    shoppingCartItemInfo.BuyCardinality = 1;

                    if (dataReader["BuyCardinality"] != System.DBNull.Value)
                    {
                        shoppingCartItemInfo.BuyCardinality = (int)dataReader["BuyCardinality"];
                    }

                    shoppingCartItemInfo.Stock = 0;
                    if (DBNull.Value != dataReader["Stock"])
                    {
                        shoppingCartItemInfo.Stock = Convert.ToInt32(dataReader["Stock"]);
                    }
                    if (dataReader["SKU"] != DBNull.Value)
                    {
                        shoppingCartItemInfo.SKU = (string)dataReader["SKU"];
                    }
                    shoppingCartItemInfo.Name = (string)dataReader["ProductName"];
                    if (DBNull.Value != dataReader["Weight"])
                    {
                        shoppingCartItemInfo.Weight = (decimal)dataReader["Weight"];
                    }
                    shoppingCartItemInfo.MemberPrice = (shoppingCartItemInfo.AdjustedPrice = (decimal)dataReader["SalePrice"]);
                    if (DBNull.Value != dataReader["CountDownPrice"])
                    {
                        shoppingCartItemInfo.CountDownPrice = (decimal)dataReader["CountDownPrice"];
                    }
                    else
                    {
                        shoppingCartItemInfo.CountDownPrice = 0m;
                    }

                    if (DBNull.Value != dataReader["ThumbnailUrl40"])
                    {
                        shoppingCartItemInfo.ThumbnailUrl40 = dataReader["ThumbnailUrl40"].ToString();
                    }
                    if (DBNull.Value != dataReader["ThumbnailUrl60"])
                    {
                        shoppingCartItemInfo.ThumbnailUrl60 = dataReader["ThumbnailUrl60"].ToString();
                    }
                    if (DBNull.Value != dataReader["ThumbnailUrl100"])
                    {
                        shoppingCartItemInfo.ThumbnailUrl100 = dataReader["ThumbnailUrl100"].ToString();
                    }

                    if (DBNull.Value != dataReader["ThumbnailUrl160"])
                    {
                        shoppingCartItemInfo.ThumbnailUrl160 = dataReader["ThumbnailUrl160"].ToString();
                    }

                    if (DBNull.Value != dataReader["ThumbnailUrl180"])
                    {
                        shoppingCartItemInfo.ThumbnailUrl180 = dataReader["ThumbnailUrl180"].ToString();
                    }

                    if (DBNull.Value != dataReader["ThumbnailUrl220"])
                    {
                        shoppingCartItemInfo.ThumbnailUrl220 = dataReader["ThumbnailUrl220"].ToString();
                    }

                    if (DBNull.Value != dataReader["IsfreeShipping"])
                    {
                        shoppingCartItemInfo.IsfreeShipping = Convert.ToBoolean(dataReader["IsfreeShipping"]);
                    }
                    if (DBNull.Value != dataReader["TaxRate"])
                    {
                        shoppingCartItemInfo.TaxRate = Convert.ToDecimal(dataReader["TaxRate"]);
                    }
                    if (DBNull.Value != dataReader["MinTaxRate"])
                    {
                        shoppingCartItemInfo.MinTaxRate = Convert.ToDecimal(dataReader["MinTaxRate"]);
                    }
                    if (DBNull.Value != dataReader["MaxTaxRate"])
                    {
                        shoppingCartItemInfo.MaxTaxRate = Convert.ToDecimal(dataReader["MaxTaxRate"]);
                    }

                    if (DBNull.Value != dataReader["TaxRateId"])
                    {
                        shoppingCartItemInfo.TaxRateId = Convert.ToInt32(dataReader["TaxRateId"]);
                    }
                    if (DBNull.Value != dataReader["TemplateId"])
                    {
                        shoppingCartItemInfo.TemplateId = Convert.ToInt32(dataReader["TemplateId"]);
                    }
                    if (DBNull.Value != dataReader["SupplierId"])
                    {
                        shoppingCartItemInfo.SupplierId = Convert.ToInt32(dataReader["SupplierId"]);
                    }
                    if (DBNull.Value != dataReader["ShopName"])
                    {
                        shoppingCartItemInfo.SupplierName = dataReader["ShopName"].ToString();
                    }

                    if (DBNull.Value != dataReader["Logo"])
                    {
                        shoppingCartItemInfo.Logo = dataReader["Logo"].ToString();
                    }


                    shoppingCartItemInfo.IsCustomsClearance = false;
                    if (DBNull.Value != dataReader["IsCustomsClearance"])
                    {
                        shoppingCartItemInfo.IsCustomsClearance = Convert.ToBoolean(dataReader["IsCustomsClearance"]);
                    }
                    shoppingCartItemInfo.StoreId = storeId;//门店id

                    //品牌Id
                    if (DBNull.Value != dataReader["BrandId"])
                    {
                        shoppingCartItemInfo.BrandId = Convert.ToInt32(dataReader["BrandId"]);
                    }
                    //供应商Id
                    if (DBNull.Value != dataReader["CategoryId"])
                    {
                        shoppingCartItemInfo.CategoryId = Convert.ToInt32(dataReader["CategoryId"]);
                    }

                    // 销售类型
                    if (DBNull.Value != dataReader["SaleType"])
                    {
                        shoppingCartItemInfo.SaleType = Convert.ToInt32(dataReader["SaleType"]);
                    }

                    string text = string.Empty;
                    if (dataReader.NextResult())
                    {
                        while (dataReader.Read())
                        {
                            if (dataReader["AttributeName"] != DBNull.Value && !string.IsNullOrEmpty((string)dataReader["AttributeName"]) && dataReader["ValueStr"] != DBNull.Value && !string.IsNullOrEmpty((string)dataReader["ValueStr"]))
                            {
                                object obj = text;
                                text = string.Concat(new object[]
                                {
                                    obj,
                                    dataReader["AttributeName"],
                                    ":",
                                    dataReader["ValueStr"],
                                    "; "
                                });
                            }
                            shoppingCartItemInfo.DeductFee = decimal.Parse(dataReader["DeductFee"] == DBNull.Value ? "0" : dataReader["DeductFee"].ToString());
                        }
                    }
                    shoppingCartItemInfo.SkuContent = text;
                    PromotionInfo promotionInfo = null;
                    if (dataReader.NextResult() && dataReader.Read())
                    {
                        promotionInfo = DataMapper.PopulatePromote(dataReader);
                    }
                    if (promotionInfo != null)
                    {
                        shoppingCartItemInfo.PromoteType = promotionInfo.PromoteType;
                        switch (promotionInfo.PromoteType)
                        {
                        case PromoteType.Discount:
                            shoppingCartItemInfo.PromotionId   = promotionInfo.ActivityId;
                            shoppingCartItemInfo.PromotionName = promotionInfo.Name;
                            shoppingCartItemInfo.AdjustedPrice = shoppingCartItemInfo.MemberPrice * promotionInfo.DiscountValue;
                            break;

                        case PromoteType.Amount:
                            shoppingCartItemInfo.PromotionId   = promotionInfo.ActivityId;
                            shoppingCartItemInfo.PromotionName = promotionInfo.Name;
                            shoppingCartItemInfo.AdjustedPrice = promotionInfo.DiscountValue;
                            break;

                        case PromoteType.Reduced:
                            shoppingCartItemInfo.PromotionId   = promotionInfo.ActivityId;
                            shoppingCartItemInfo.PromotionName = promotionInfo.Name;
                            shoppingCartItemInfo.AdjustedPrice = shoppingCartItemInfo.MemberPrice - promotionInfo.DiscountValue;
                            break;

                        case PromoteType.QuantityDiscount:
                            if (shoppingCartItemInfo.Quantity >= (int)promotionInfo.Condition)
                            {
                                shoppingCartItemInfo.PromotionId   = promotionInfo.ActivityId;
                                shoppingCartItemInfo.PromotionName = promotionInfo.Name;
                                shoppingCartItemInfo.AdjustedPrice = shoppingCartItemInfo.MemberPrice * promotionInfo.DiscountValue;
                            }
                            break;

                        case PromoteType.SentGift:
                            shoppingCartItemInfo.PromotionId   = promotionInfo.ActivityId;
                            shoppingCartItemInfo.PromotionName = promotionInfo.Name;
                            shoppingCartItemInfo.IsSendGift    = true;
                            break;

                        case PromoteType.SentProduct:
                            if (shoppingCartItemInfo.Quantity / (int)promotionInfo.Condition >= 1)
                            {
                                shoppingCartItemInfo.PromotionId   = promotionInfo.ActivityId;
                                shoppingCartItemInfo.PromotionName = promotionInfo.Name;
                                shoppingCartItemInfo.ShippQuantity = shoppingCartItemInfo.Quantity + shoppingCartItemInfo.Quantity / (int)promotionInfo.Condition * (int)promotionInfo.DiscountValue;
                            }
                            break;

                        case PromoteType.PresentProduct:
                            if (shoppingCartItemInfo.Quantity / (int)promotionInfo.Condition >= 1)
                            {
                                shoppingCartItemInfo.PromotionId   = promotionInfo.ActivityId;
                                shoppingCartItemInfo.PromotionName = promotionInfo.Name;
                            }
                            break;

                        //单品满减
                        case PromoteType.ProductPromotion:
                            if (shoppingCartItemInfo.MemberPrice * shoppingCartItemInfo.Quantity >= promotionInfo.Condition)
                            {
                                shoppingCartItemInfo.PromotionId    = promotionInfo.ActivityId;
                                shoppingCartItemInfo.PromotionName  = promotionInfo.Name;
                                shoppingCartItemInfo.AdjustedPrice  = shoppingCartItemInfo.MemberPrice;
                                shoppingCartItemInfo.PromotionPrice = shoppingCartItemInfo.MemberPrice - promotionInfo.DiscountValue;
                                shoppingCartItemInfo.PromoteType    = PromoteType.ProductPromotion;
                            }
                            break;

                        //第二件减价
                        case PromoteType.SecondReducePrice:
                            if (shoppingCartItemInfo.Quantity >= 2 && shoppingCartItemInfo.MemberPrice * shoppingCartItemInfo.Quantity >= (promotionInfo.Condition))
                            {
                                shoppingCartItemInfo.PromotionId    = promotionInfo.ActivityId;
                                shoppingCartItemInfo.PromotionName  = promotionInfo.Name;
                                shoppingCartItemInfo.AdjustedPrice  = shoppingCartItemInfo.MemberPrice;
                                shoppingCartItemInfo.PromotionPrice = shoppingCartItemInfo.MemberPrice - promotionInfo.DiscountValue;
                                shoppingCartItemInfo.PromoteType    = PromoteType.SecondReducePrice;
                            }
                            break;

                        //第二件打折
                        case PromoteType.ProductDiscount:
                            if (shoppingCartItemInfo.Quantity >= 2)
                            {
                                shoppingCartItemInfo.PromotionId    = promotionInfo.ActivityId;
                                shoppingCartItemInfo.PromotionName  = promotionInfo.Name;
                                shoppingCartItemInfo.AdjustedPrice  = shoppingCartItemInfo.MemberPrice;
                                shoppingCartItemInfo.PromotionPrice = shoppingCartItemInfo.MemberPrice * promotionInfo.DiscountValue;
                                shoppingCartItemInfo.PromoteType    = PromoteType.ProductDiscount;
                            }
                            break;
                        }
                    }
                    // 促销活动(商品)中的赠送商品
                    if (dataReader.NextResult())
                    {
                        while (dataReader.Read())
                        {
                            ShoppingCartPresentInfo present = DataMapper.PopulatePresentCartItem(dataReader);
                            shoppingCartItemInfo.LinePresentPro.Add(present);
                        }
                    }

                    // 组合商品明细
                    if (dataReader.NextResult())
                    {
                        while (dataReader.Read())
                        {
                            ProductsCombination combination = DataMapper.PopulateCombinationCartItem(dataReader);
                            shoppingCartItemInfo.CombinationItemInfos.Add(combination);
                        }
                    }
                }
            }

            if (shoppingCartItemInfo != null && shoppingCartItemInfo.CombinationItemInfos != null &&
                shoppingCartItemInfo.CombinationItemInfos.Count > 1)
            {
                var SumBeforePrice = shoppingCartItemInfo.CombinationItemInfos.Take(shoppingCartItemInfo.CombinationItemInfos.Count - 1).Sum(t => t.Price * t.Quantity);

                if (shoppingCartItemInfo.CountDownPrice - SumBeforePrice > 0)
                {
                    int qty = shoppingCartItemInfo.CombinationItemInfos.LastOrDefault().Quantity;

                    decimal lastPrice = Math.Floor(((shoppingCartItemInfo.CountDownPrice - SumBeforePrice) / qty) * 100) / 100;

                    shoppingCartItemInfo.CombinationItemInfos.LastOrDefault().Price = lastPrice;
                }
            }

            return(shoppingCartItemInfo);
        }