/// <summary> /// 用户收藏的商品 /// </summary> /// <param name="pageNo"></param> /// <param name="pageSize"></param> /// <returns></returns> public object GetUserCollectionProduct(int pageNo = 1, int pageSize = 16) { CheckUserLogin(); if (CurrentUser != null) { var model = ServiceProvider.Instance <IProductService> .Create.GetUserConcernProducts(CurrentUser.Id, pageNo, pageSize); var result = model.Models.ToArray().Select(item => { var pro = ProductManagerApplication.GetProduct(item.ProductId); return(new { Id = item.ProductId, Image = HimallIO.GetRomoteProductSizeImage(pro.RelativePath, 1, (int)Himall.CommonModel.ImageSize.Size_220), ProductName = pro.ProductName, SalePrice = pro.MinSalePrice.ToString("F2"), Evaluation = CommentApplication.GetCommentCountByProduct(pro.Id), Status = ProductManagerApplication.GetProductShowStatus(pro) }); }); return(new { success = true, data = result, total = model.Total }); } else { return(new Result { success = false, msg = "未登录" }); } }
private List <CartProductModel> PackageCartProducts(Mall.Entities.ShoppingCartInfo cart, decimal prodPrice, decimal discount, IProductService productService, IShopService shopService, IShopBranchService shopBranchService, IVShopService vshopService, ITypeService typeservice, bool isBranch = false) { List <CartProductModel> products = new List <CartProductModel>(); var limitProducts = LimitTimeApplication.GetPriceByProducrIds(cart.Items.Select(e => e.ProductId).ToList());//限时购价格 var groupCart = cart.Items.Where(item => item.ShopBranchId == 0).Select(c => { var cItem = new Mall.Entities.ShoppingCartItem(); var skuInfo = productService.GetSku(c.SkuId); if (skuInfo != null) { cItem = c; } return(cItem); }).GroupBy(i => i.ProductId).ToList(); foreach (var item in cart.Items) { var product = ProductManagerApplication.GetProduct(item.ProductId); var shop = shopService.GetShop(product.ShopId); DTO.ShopBranch shopbranch = null; Entities.ShopBranchSkuInfo shopbranchsku = null; if (item.ShopBranchId > 0) { shopbranch = ShopBranchApplication.GetShopBranchById(item.ShopBranchId); shopbranchsku = shopBranchService.GetSkusByIds(item.ShopBranchId, new List <string> { item.SkuId }).FirstOrDefault(); } if (null != shop) { var vshop = vshopService.GetVShopByShopId(shop.Id); var sku = ProductManagerApplication.GetSKU(item.SkuId); if (sku == null) { continue; } //处理限时购、会员折扣价格 var prod = limitProducts.FirstOrDefault(e => e.ProductId == item.ProductId); prodPrice = sku.SalePrice; if (prod != null && !isBranch) { prodPrice = prod.MinPrice; } else { if (shop.IsSelf) {//官方自营店才计算会员折扣 prodPrice = sku.SalePrice * discount; } } #region 阶梯价--张宇枫 //阶梯价 if (product.IsOpenLadder) { var quantity = groupCart.Where(i => i.Key == item.ProductId).ToList().Sum(cartitem => cartitem.Sum(i => i.Quantity)); prodPrice = ProductManagerApplication.GetProductLadderPrice(item.ProductId, quantity); if (shop.IsSelf) { prodPrice = prodPrice * discount; } } #endregion Entities.TypeInfo typeInfo = typeservice.GetType(product.TypeId); string colorAlias = (typeInfo == null || string.IsNullOrEmpty(typeInfo.ColorAlias)) ? SpecificationType.Color.ToDescription() : typeInfo.ColorAlias; string sizeAlias = (typeInfo == null || string.IsNullOrEmpty(typeInfo.SizeAlias)) ? SpecificationType.Size.ToDescription() : typeInfo.SizeAlias; string versionAlias = (typeInfo == null || string.IsNullOrEmpty(typeInfo.VersionAlias)) ? SpecificationType.Version.ToDescription() : typeInfo.VersionAlias; if (product != null) { colorAlias = !string.IsNullOrWhiteSpace(product.ColorAlias) ? product.ColorAlias : colorAlias; sizeAlias = !string.IsNullOrWhiteSpace(product.SizeAlias) ? product.SizeAlias : sizeAlias; versionAlias = !string.IsNullOrWhiteSpace(product.VersionAlias) ? product.VersionAlias : versionAlias; } if (sku != null) { #region 正在参加限时抢购商品在购物车失效 TDO:ZYF var isLimit = false; //门店商品,在参加限时购,也可以正常购买 var limit = LimitTimeApplication.GetLimitTimeMarketItemByProductId(item.ProductId); if (limit != null && !isBranch) { isLimit = limit.Status == Entities.FlashSaleInfo.FlashSaleStatus.Ongoing; } #endregion var _tmp = new CartProductModel { CartItemId = item.Id.ToString(), SkuId = item.SkuId, Id = product.Id.ToString(), ImgUrl = Core.MallIO.GetRomoteProductSizeImage(product.RelativePath, 1, (int)Mall.CommonModel.ImageSize.Size_150), Name = product.ProductName, Price = prodPrice.ToString("F2"), Count = item.Quantity.ToString(), ShopId = shop.Id.ToString(), Size = sku.Size, Color = sku.Color, Version = sku.Version, VShopId = vshop == null ? "0" : vshop.Id.ToString(), ShopName = shop.ShopName, ShopLogo = vshop == null ? "" : Core.MallIO.GetRomoteImagePath(vshop.StrLogo), Url = Core.MallIO.GetRomoteImagePath("/m-IOS/product/detail/") + item.ProductId, ProductStatus = isLimit ? 0 : (sku.Stock <= 0 ? ProductInfo.ProductSaleStatus.InStock.GetHashCode() : product.SaleStatus.GetHashCode()), Status = isLimit ? 1 : ProductManagerApplication.GetProductShowStatus(product, sku, shopbranch == null ? 1 : item.Quantity, shopbranch, shopbranchsku),// 0:正常;1:已失效;2:库存不足;3:已下架; ColorAlias = colorAlias, SizeAlias = sizeAlias, VersionAlias = versionAlias, AddTime = item.AddTime, ShopBranchId = item.ShopBranchId, ShopBranchName = null == shopbranch ? "" : shopbranch.ShopBranchName, ShopBranchLogo = null == shopbranch ? "" : Core.MallIO.GetRomoteImagePath(shopbranch.ShopImages) }; products.Add(_tmp); } } } return(products); }
public JsonResult GetCartProducts() { var memberId = CurrentUser?.Id ?? 0; var cartItems = CartApplication.GetCartItems(memberId); var vshops = VshopApplication.GetVShopsByShopIds(cartItems.Select(p => p.Shop.Id)); var products = cartItems.Select(item => { var sku = item.Sku; var product = item.Product; var shop = item.Shop; var vshop = vshops.FirstOrDefault(p => p.ShopId == shop.Id); var skuDetails = string.Empty; if (!string.IsNullOrWhiteSpace(sku.Size)) { skuDetails += sku.SizeAlias + ":" + sku.Size + " "; } if (!string.IsNullOrWhiteSpace(sku.Color)) { skuDetails += sku.ColorAlias + ":" + sku.Color + " "; } if (!string.IsNullOrWhiteSpace(sku.Version)) { skuDetails += sku.VersionAlias + ":" + sku.Version + " "; } return(new { cartItemId = item.ItemId, skuId = sku.Id, id = product.Id, imgUrl = Himall.Core.HimallIO.GetProductSizeImage(product.RelativePath, 1, (int)ImageSize.Size_150), name = product.ProductName, price = sku.SalePrice, count = item.Quantity, shopId = shop.Id, vshopId = vshop == null ? 0 : vshop.Id, shopName = shop.ShopName, shopLogo = vshop == null ? "" : vshop.Logo, productstatus = item.IsLimit ? 0 : (sku.Stock <= 0 ? ProductInfo.ProductSaleStatus.InStock.GetHashCode() : product.SaleStatus.GetHashCode()), status = item.IsLimit ? 1 : ProductManagerApplication.GetProductShowStatus(product, sku.Map <DTO.SKU>(), 1), // 0:正常;1:已失效;2:库存不足;3:已下架; Size = sku.Size, Color = sku.Color, Version = sku.Version, ColorAlias = sku.ColorAlias, SizeAlias = sku.SizeAlias, VersionAlias = sku.VersionAlias, skuDetails = skuDetails, AddTime = item.AddTime, minMath = ProductManagerApplication.GetProductLadderMinMath(product.Id) }); }).OrderBy(p => p.status).ThenByDescending(o => o.AddTime).ToList(); #region 门店购物车 var discount = CurrentUser?.MemberDiscount ?? 1; var branchCartHelper = new BranchCartHelper(); long userId = 0; if (CurrentUser != null) { userId = CurrentUser.Id; } var Branchcart = branchCartHelper.GetCartNoCache(userId, 0); var shopBranchList = Branchcart.Items.Where(x => x.ShopBranchId > 0).Select(x => x.ShopBranchId).ToList(); shopBranchList = shopBranchList.GroupBy(x => x).Select(x => x.First()).ToList(); Dictionary <long, long> buyedCounts = null; if (userId > 0) { buyedCounts = new Dictionary <long, long>(); buyedCounts = OrderApplication.GetProductBuyCount(userId, Branchcart.Items.Select(x => x.ProductId)); } var branchProducts = PackageCartProducts(Branchcart, discount, true); var sbProducts = branchProducts.OrderBy(p => p.status).ThenByDescending(item => item.AddTime); var shopBranchCart = sbProducts.GroupBy(item => item.shopBranchId); #endregion var cartModel = new { products = products, amount = products.Sum(item => item.price * item.count), totalCount = products.Sum(item => item.count), shopBranchCart = shopBranchCart }; return(SuccessResult <dynamic>(data: cartModel)); }
public JsonResult GetBranchCartProducts(long shopBranchId) { var branchCartHelper = new BranchCartHelper(); long userId = 0; //会员折扣 decimal discount = 1.0M;//默认折扣为1(没有折扣) if (CurrentUser != null) { userId = CurrentUser.Id; discount = CurrentUser.MemberDiscount; } var cart = branchCartHelper.GetCart(userId, shopBranchId); //var shopBranch = _iShopBranchService.GetShopBranchById(shopBranchId); var shopBranch = ShopBranchApplication.GetShopBranchById(shopBranchId); Dictionary <long, long> buyedCounts = null; if (userId > 0) { buyedCounts = new Dictionary <long, long>(); buyedCounts = OrderApplication.GetProductBuyCount(userId, cart.Items.Select(x => x.ProductId)); } decimal prodPrice = 0.0M;//优惠价格 var shopBranchSkuList = _iShopBranchService.GetSkusByIds(shopBranchId, cart.Items.Select(x => x.SkuId).ToList()); var products = cart.Items.Select(item => { var product = _iProductService.GetProduct(item.ProductId); var shopbranchsku = shopBranchSkuList.FirstOrDefault(x => x.SkuId == item.SkuId); long stock = shopbranchsku == null ? 0 : shopbranchsku.Stock; if (stock > product.MaxBuyCount && product.MaxBuyCount != 0) { stock = product.MaxBuyCount; } if (product.MaxBuyCount > 0 && buyedCounts != null && buyedCounts.ContainsKey(item.ProductId)) { long buynum = buyedCounts[item.ProductId]; stock = stock - buynum; } var shop = _iShopService.GetShop(product.ShopId); //Entities.SKUInfo sku = null; string skuDetails = ""; if (null != shop) { var vshop = _iVShopService.GetVShopByShopId(shop.Id); //sku = _iProductService.GetSku(item.SkuId); DTO.SKU sku = ProductManagerApplication.GetSKU(item.SkuId); if (sku == null) { return(null); } prodPrice = sku.SalePrice; if (shop.IsSelf) {//官方自营店才计算会员折扣 prodPrice = sku.SalePrice * discount; } var typeInfo = TypeApplication.GetProductType(product.TypeId); skuDetails = ""; if (!string.IsNullOrWhiteSpace(sku.Size)) { skuDetails += sku.Size + " "; } if (!string.IsNullOrWhiteSpace(sku.Color)) { skuDetails += sku.Color + " "; } if (!string.IsNullOrWhiteSpace(sku.Version)) { skuDetails += sku.Version + " "; } return(new { bId = shopBranchId, cartItemId = item.Id, skuId = item.SkuId, id = product.Id, name = product.ProductName, price = prodPrice, count = item.Quantity, stock = shopbranchsku == null ? 0 : stock, //阶梯价商品在门店购物车自动下架 //status = product.IsOpenLadder ? 1 : (shopbranchsku == null ? 1 : (shopbranchsku.Status == ShopBranchSkuStatus.Normal) ? (item.Quantity > stock ? 2 : 0) : 1),//0:正常;1:冻结;2:库存不足 status = ProductManagerApplication.GetProductShowStatus(product, sku, 1, shopBranch, shopbranchsku),//0:正常;1:冻结;2:库存不足;3:已下架; skuDetails = skuDetails, AddTime = item.AddTime }); } else { return(null); } }).Where(d => d != null).OrderBy(s => s.status).ThenByDescending(o => o.AddTime); var cartModel = new { products = products, amount = products.Where(x => x.status == 0).Sum(item => item.price * item.count), totalCount = products.Where(x => x.status == 0).Sum(item => item.count), DeliveFee = shopBranch.DeliveFee, DeliveTotalFee = shopBranch.DeliveTotalFee, FreeMailFee = shopBranch.FreeMailFee, IsFreeMail = shopBranch.IsFreeMail, shopBranchStatus = (int)shopBranch.Status }; return(SuccessResult <dynamic>(data: cartModel)); }
public object GetBranchCartProducts(long shopBranchId) { long userId = 0; //会员折扣 decimal discount = 1.0M;//默认折扣为1(没有折扣) if (CurrentUser != null) { userId = CurrentUser.Id; discount = CurrentUser.MemberDiscount; } var cart = GetCart(userId, shopBranchId); //var shopBranch = _iShopBranchService.GetShopBranchById(shopBranchId); var shopBranch = ShopBranchApplication.GetShopBranchById(shopBranchId); var productService = _iProductService; var shopService = _iShopService; var vshopService = _iVShopService; List <long> pids = new List <long>(); decimal prodPrice = 0.0M;//优惠价格 var products = cart.Items.Select(item => { var product = productService.GetProduct(item.ProductId); var shopbranchsku = _iShopBranchService.GetSkusByIds(shopBranchId, new List <string> { item.SkuId }).FirstOrDefault(); var shop = shopService.GetShop(product.ShopId); //Entities.SKUInfo sku = null; string skuDetails = ""; if (null != shop) { var vshop = vshopService.GetVShopByShopId(shop.Id); //sku = productService.GetSku(item.SkuId); DTO.SKU sku = ProductManagerApplication.GetSKU(item.SkuId); if (sku == null) { return(null); } prodPrice = sku.SalePrice; if (shop.IsSelf) {//官方自营店才计算会员折扣 prodPrice = sku.SalePrice * discount; } var typeInfo = TypeApplication.GetProductType(product.TypeId); skuDetails = ""; if (!string.IsNullOrWhiteSpace(sku.Size)) { skuDetails += sku.Size + " "; } if (!string.IsNullOrWhiteSpace(sku.Color)) { skuDetails += sku.Color + " "; } if (!string.IsNullOrWhiteSpace(sku.Version)) { skuDetails += sku.Version + " "; } return(new { bId = shopBranchId, cartItemId = item.Id, skuId = item.SkuId, id = product.Id, name = product.ProductName, price = prodPrice, count = item.Quantity, stock = shopbranchsku == null ? 0 : shopbranchsku.Stock, //阶梯价商品在门店购物车自动下架 //status = product.IsOpenLadder ? 1 : (shopbranchsku == null ? 1 : (shopbranchsku.Status == ShopBranchSkuStatus.Normal) ? (item.Quantity > shopbranchsku.Stock ? 2 : 0) : 1),//0:正常;1:冻结;2:库存不足 status = ProductManagerApplication.GetProductShowStatus(product, sku, 1, shopBranch, shopbranchsku),//0:正常;1:冻结;2:库存不足;3:已下架; skuDetails = skuDetails, AddTime = item.AddTime }); } else { return(null); } }).Where(d => d != null).OrderBy(s => s.status).ThenByDescending(o => o.AddTime); var cartModel = new { success = true, products = products, amount = products.Where(x => x.status == 0).Sum(item => item.price * item.count), totalCount = products.Where(x => x.status == 0).Sum(item => item.count), DeliveFee = shopBranch.DeliveFee, DeliveTotalFee = shopBranch.DeliveTotalFee, FreeMailFee = shopBranch.FreeMailFee, shopBranchStatus = (int)shopBranch.Status }; return(cartModel); }
public static List <CartItem> GetCartItems(long memberId) { var cart = GetShoppingCart(memberId); //会员折扣 var discount = MemberApplication.GetMemberDiscount(memberId); var skuIds = cart.Items.Select(p => p.SkuId).ToList(); var skus = GetService <IProductService>().GetSKUs(skuIds); var products = GetService <IProductService>().GetProducts(skus.Select(p => p.ProductId).ToList()); var shops = GetService <IShopService>().GetShops(products.Select(p => p.ShopId).ToList()); var types = TypeApplication.GetTypes(); //限时购活动 var limitProducts = LimitTimeApplication.GetPriceByProducrIds(products.Select(p => p.Id).ToList()); //阶梯价商品 var allLadders = GetService <IProductLadderPriceService>().GetLadderPricesByProductIds(products.Where(p => p.IsOpenLadder).Select(p => p.Id).ToList()); var result = new List <CartItem>(); foreach (var item in cart.Items) { var sku = skus.FirstOrDefault(p => p.Id == item.SkuId); var product = products.FirstOrDefault(p => p.Id == item.ProductId); if (product == null) { continue; //忽略异常数据 } var shop = shops.FirstOrDefault(p => p.Id == product.ShopId); var type = types.FirstOrDefault(p => p.Id == product.TypeId); if (sku == null || shop == null) { continue; //忽略异常数据 } #region 价格覆盖 var minMach = 0; //阶梯价格 if (product.IsOpenLadder) { var ladders = allLadders.Where(p => p.ProductId == item.ProductId).ToList(); var quantity = cart.Items.Where(c => c.ProductId == item.ProductId && c.ShopBranchId == 0).ToList().Sum(c => c.Quantity); sku.SalePrice = ProductManagerApplication.GetProductLadderPrice(ladders, quantity); minMach = ladders.Min(p => p.MinBath); } var price = -1M;//其他价格 //限时购价格 var limit = limitProducts.FirstOrDefault(p => p.ProductId == item.ProductId); if (limit != null) { price = limit.MinPrice; } //会员折扣 if (price < 0 && shop.IsSelf) { price = sku.SalePrice * discount; } if (price >= 0) { sku.SalePrice = price; } #endregion //填充SKU别名 ProductManagerApplication.FillSkuAlias(sku, product, type); //是否限时购 var isLimit = limit != null; result.Add(new CartItem { ItemId = item.Id, Quantity = item.Quantity, AddTime = item.AddTime, Product = product, Shop = shop, Sku = sku, ShowStatus = isLimit ? 1 : ProductManagerApplication.GetProductShowStatus(product, sku.Map <DTO.SKU>(), 1), LimitId = isLimit?limit.Id:0, //参与限时购活动ID IsLimit = isLimit, //是否参加限时购 MinMach = minMach, }); } return(result); }
public object GetCart(long shopBranchId) { //CheckUserLogin(); long userId = 0; //会员折扣 decimal discount = 1.0M;//默认折扣为1(没有折扣) if (CurrentUser != null) { userId = CurrentUser.Id; discount = CurrentUser.MemberDiscount; } var cart = GetCart(userId, shopBranchId); var shopBranch = ShopBranchApplication.GetShopBranchById(shopBranchId); if (shopBranch == null) { throw new MallException("门店库存不足"); } var stores = cart.Items.Where(d => d.ShopBranchId > 0).OrderByDescending(d => d.AddTime).Select(d => d.ShopBranchId).GroupBy(d => d); decimal prodPrice = 0.0M;//优惠价格 //var rets = new List<CartStoreModel>(); var _store = new CartStoreModel(); _store.ShopBranchId = shopBranch.Id; _store.ShopId = shopBranch.ShopId; _store.ShopBranchName = shopBranch.ShopBranchName; _store.Status = shopBranch.Status.GetHashCode(); _store.DeliveFee = shopBranch.DeliveFee; _store.DeliveTotalFee = shopBranch.DeliveTotalFee; _store.FreeMailFee = shopBranch.FreeMailFee; var product = cart.Items.Where(d => d.ShopBranchId == shopBranch.Id).OrderBy(s => s.Status).ThenByDescending(o => o.AddTime).ToList(); _store.Products = new List <CartStoreProduct>(); foreach (var pitem in product) { var pro = ProductManagerApplication.GetProduct(pitem.ProductId); var shopbranchsku = ShopBranchApplication.GetSkusByIds(_store.ShopBranchId, new List <string> { pitem.SkuId }).FirstOrDefault(); var shop = ShopApplication.GetShop(pro.ShopId); var vshop = VshopApplication.GetVShopByShopId(pro.ShopId); DTO.SKU sku = ProductManagerApplication.GetSKU(pitem.SkuId); string skuDetails = ""; if (null != shop && sku != null) { prodPrice = sku.SalePrice; if (shop.IsSelf) { //官方自营店才计算会员折扣 prodPrice = sku.SalePrice * discount; } prodPrice = decimal.Round(prodPrice, 2, MidpointRounding.AwayFromZero); var typeInfo = TypeApplication.GetProductType(pro.TypeId); skuDetails = ""; if (!string.IsNullOrWhiteSpace(sku.Size)) { if (!string.IsNullOrWhiteSpace(skuDetails)) { skuDetails += "、"; } skuDetails += sku.Size; } if (!string.IsNullOrWhiteSpace(sku.Color)) { if (!string.IsNullOrWhiteSpace(skuDetails)) { skuDetails += "、"; } skuDetails += sku.Color; } if (!string.IsNullOrWhiteSpace(sku.Version)) { if (!string.IsNullOrWhiteSpace(skuDetails)) { skuDetails += "、"; } skuDetails += sku.Version; } string colorAlias = (typeInfo == null || string.IsNullOrEmpty(typeInfo.ColorAlias)) ? SpecificationType.Color.ToDescription() : typeInfo.ColorAlias; string sizeAlias = (typeInfo == null || string.IsNullOrEmpty(typeInfo.SizeAlias)) ? SpecificationType.Size.ToDescription() : typeInfo.SizeAlias; string versionAlias = (typeInfo == null || string.IsNullOrEmpty(typeInfo.VersionAlias)) ? SpecificationType.Version.ToDescription() : typeInfo.VersionAlias; if (pro != null) { colorAlias = !string.IsNullOrWhiteSpace(pro.ColorAlias) ? pro.ColorAlias : colorAlias; sizeAlias = !string.IsNullOrWhiteSpace(pro.SizeAlias) ? pro.SizeAlias : sizeAlias; versionAlias = !string.IsNullOrWhiteSpace(pro.VersionAlias) ? pro.VersionAlias : versionAlias; } var _product = new CartStoreProduct { ShopBranchId = shopBranchId, CartItemId = pitem.Id, SkuId = pitem.SkuId, Id = pro.Id, ProductName = pro.ProductName, Price = prodPrice, Count = pitem.Quantity, Stock = shopbranchsku == null ? 0 : shopbranchsku.Stock, //阶梯价商品在门店购物车自动下架 Status = ProductManagerApplication.GetProductShowStatus(pro, sku, 1, shopBranch, shopbranchsku),//0:正常;1:冻结;2:库存不足 SkuDetails = skuDetails, ColorAlias = colorAlias, SizeAlias = sizeAlias, VersionAlias = versionAlias, Size = sku.Size, Color = sku.Color, Version = sku.Version, AddTime = pitem.AddTime, DefaultImage = MallIO.GetRomoteProductSizeImage(pro.ImagePath, 1, 500) }; _store.Products.Add(_product); } } _store.Amount = (_store.Products != null && _store.Products.Count > 0) ? _store.Products.Where(x => x.Status == 0).Sum(s => s.Price * s.Count) : 0; _store.TotalCount = (_store.Products != null && _store.Products.Count > 0) ? _store.Products.Where(x => x.Status == 0).Sum(s => s.Count) : 0; if (_store.Products.Count > 0) {//有商品数据,才返回门店信息 _store.Products = _store.Products.OrderBy(p => p.Status).ThenByDescending(p => p.AddTime).ToList(); //rets.Add(_store); } return(Json(_store)); }