/// <summary> /// Builder order info and calculator price /// </summary> /// <param name="buyInfoInput"></param> public Tuple <ServiceResult, MerchantCartOutput> BuyInfo(MerchantBuyInfoInput buyInfo) { //user var result = new MerchantCartOutput(); var user = Resolve <IUserService>().GetSingle(buyInfo.UserId); if (user == null || user.Status != Status.Normal) { return(Tuple.Create(ServiceResult.Failure("您的输入的账户不存在,或者状态不正常"), result)); } //get merchant store //var merchantStore = Resolve<IMerchantStoreService>().GetSingle(s => s.Id == buyInfo.MerchantStoreId.ToObjectId()); //if (merchantStore == null) //{ // return Tuple.Create(ServiceResult.Failure("当前店铺不存在"), result); //} //get cart from database var cartIds = buyInfo.ProductItems.Select(c => c.Id.ToObjectId()).ToList(); var carts = Resolve <IMerchantCartService>().GetCart(cartIds); if (carts.Count <= 0) { return(Tuple.Create(ServiceResult.Failure("购物车为空"), result)); } return(CountPrice(carts)); }
/// <summary> /// Calculator price /// </summary> /// <param name="cartProducts"></param> /// <returns></returns> public Tuple <ServiceResult, MerchantCartOutput> CountPrice(List <MerchantCartViewModel> cartProducts) { //check var output = new MerchantCartOutput(); if (cartProducts.Count <= 0) { return(Tuple.Create(ServiceResult.Failure("购物车数据异常"), output)); } //product var result = ServiceResult.Success; var productService = Resolve <IMerchantProductService>(); foreach (var cart in cartProducts) { if (cart.Count <= 0) { result = ServiceResult.Failure($"商品:{cart.ProductName},商品数据异常"); break; } var product = productService.GetSingle(p => p.Id == cart.MerchantProductId.ToObjectId()); if (product == null) { result = ServiceResult.Failure($"商品:{cart.ProductName},不存在"); break; } //stock var sku = product.Skus?.Find(s => s.SkuId == cart.SkuId); if (sku == null) { result = ServiceResult.Failure($"商品:{cart.ProductName},Sku不存在"); break; } if (cart.Count > sku.Stock) { result = ServiceResult.Failure($"商品:{cart.ProductName},Sku:{sku.Name},购买数量大于商品库存数量"); break; } cart.ThumbnailUrl = Resolve <IApiService>().ApiImageUrl(product.ThumbnailUrl); cart.ProductAmount = sku.Price * cart.Count; output.TotalCount += cart.Count; output.TotalAmount += cart.ProductAmount; output.Products.Add(cart); } return(Tuple.Create(result, output)); }