/// <summary> /// 加够商品转换为主商品 /// </summary> /// <param name="productSysNo">商品编号</param> /// <param name="customerSysNo">用户编号</param> /// <returns></returns> private OrderItemGroup PlusPriceConvertToProduct(OrderGiftItem plusPrice, int customerSysNo) { OrderItemGroup result = new OrderItemGroup(); OrderProductItem productItem = new OrderProductItem(); productItem.ProductSysNo = plusPrice.ProductSysNo; //商品基础信息 ProductBasicInfo basicInfo = PipelineDA.GetProductBasicInfoBySysNo(productItem.ProductSysNo); //商品备案信息 ProductEntryInfo entryInfo = PipelineDA.GetProductEntryInfoBySysNo(productItem.ProductSysNo); basicInfo.ProductEntryInfo = entryInfo; productItem["ProductStoreType"] = (int)entryInfo.ProductStoreType; //商品备货时间 productItem["LeadTimeDays"] = basicInfo.ProductEntryInfo.LeadTimeDays; //商品销售信息 ProductSalesInfo salesInfo = PipelineDA.GetProductSalesInfoBySysNo(productItem.ProductSysNo); productItem.ProductID = basicInfo.Code; productItem.ProductName = basicInfo.ProductName; productItem.Weight = basicInfo.Weight; productItem["ProductTitle"] = basicInfo.ProductTitle; productItem.DefaultImage = basicInfo.DefaultImage; productItem.UnitMarketPrice = salesInfo.MarketPrice; productItem.UnitCostPrice = salesInfo.UnitCostPrice; productItem.UnitSalePrice = plusPrice.UnitSalePrice; productItem.UnitRewardedPoint = 0; //productItem["TariffRate"] = basicInfo.ProductEntryInfo.TariffRate; productItem.TotalInventory = salesInfo.OnlineQty; productItem.MerchantSysNo = basicInfo.VendorSysno; productItem.MerchantName = basicInfo.VendorInfo.VendorName; result.MerchantSysNo = basicInfo.VendorSysno; result.MerchantName = basicInfo.VendorInfo.VendorName; productItem["ProductStatus"] = (int)basicInfo.ProductStatus; productItem["Warranty"] = basicInfo.Warranty; productItem.WarehouseNumber = plusPrice.WarehouseNumber; productItem.WarehouseName = plusPrice.WarehouseName; productItem.WarehouseCountryCode = plusPrice.WarehouseCountryCode; salesInfo.MinCountPerOrder = salesInfo.OnlineQty < productItem.UnitQuantity ? salesInfo.OnlineQty : productItem.UnitQuantity; salesInfo.MaxCountPerOrder = salesInfo.OnlineQty < productItem.UnitQuantity ? salesInfo.OnlineQty : productItem.UnitQuantity; productItem["MinCountPerOrder"] = productItem.UnitQuantity; productItem["MaxCountPerOrder"] = productItem.UnitQuantity; result.MinCountPerSO = productItem.UnitQuantity; result.MaxCountPerSO = productItem.UnitQuantity; result.MerchantSysNo = productItem.MerchantSysNo; result.MerchantName = productItem.MerchantName; result.PackageNo = 0; result.PackageType = 0; result.Quantity = 1; //商品分组属性 List <ProductSplitGroupProperty> splitGroupProperty = PipelineDA.GetProductSplitGroupPropertyList(productItem.ProductSysNo); if (splitGroupProperty != null && splitGroupProperty.Count > 0) { productItem.SplitGroupPropertyDescList = new List <KeyValuePair <string, string> >(); foreach (ProductSplitGroupProperty property in splitGroupProperty) { productItem.SplitGroupPropertyDescList.Add(new KeyValuePair <string, string>(property.PropertyDescription, property.ValueDescription)); } } result.ProductItemList = new List <OrderProductItem>(); result.ProductItemList.Add(productItem); return(result); }
public bool Validate(OrderInfo order, out string errorMsg) { errorMsg = string.Empty; List <string> errorMsgList = new List <string>(); #region [ 商品库存检查 ] if (!ValidateQuantity(order, out errorMsgList)) { foreach (var item in errorMsgList) { errorMsg += item + "<br />"; } return(false); } #endregion foreach (OrderItemGroup itemGroup in order.OrderItemGroupList) { if (itemGroup.PackageChecked) { if (itemGroup.PackageType == 1) { foreach (OrderProductItem item in itemGroup.ProductItemList) { #region 1.商品状态检查 if (!item["ProductStatus"].ToString().Equals(((int)ECommerce.Enums.ProductStatus.Show).ToString())) { errorMsg = LanguageHelper.GetText("商品【{0}】未上架!", order.LanguageCode); errorMsg = string.Format(errorMsg, item["ProductTitle"]); return(false); } #endregion #region 2.商品库存检查 //if (itemGroup.Quantity * item.UnitQuantity > item.TotalInventory) //{ // errorMsg = LanguageHelper.GetText("商品【{0}】库存不足!", order.LanguageCode); // errorMsg = string.Format(errorMsg, item["ProductTitle"]); // return false; //} #endregion #region 3.每单限购最小数量检查 int minCountPerOrder = 0; int.TryParse(item["MinCountPerOrder"].ToString(), out minCountPerOrder); if (itemGroup.Quantity * item.UnitQuantity < minCountPerOrder) { errorMsg = LanguageHelper.GetText("商品【{0}】每单限购数量{1}-{2}!", order.LanguageCode); errorMsg = string.Format(errorMsg, item["ProductTitle"], item["MinCountPerOrder"], item["MaxCountPerOrder"]); return(false); } #endregion #region 4.每单限购最大数量检查 int maxCountPerOrder = 0; int.TryParse(item["MaxCountPerOrder"].ToString(), out maxCountPerOrder); if (itemGroup.Quantity * item.UnitQuantity > maxCountPerOrder) { errorMsg = LanguageHelper.GetText("商品【{0}】每单限购数量{1}-{2}!", order.LanguageCode); errorMsg = string.Format(errorMsg, item["ProductTitle"], item["MinCountPerOrder"], item["MaxCountPerOrder"]); return(false); } #endregion List <OrderGiftItem> giftList = null; if (order.GiftItemList != null && order.GiftItemList.Count > 0) { giftList = order.GiftItemList.FindAll(m => m.ParentPackageNo == itemGroup.PackageNo && m.MerchantSysNo == item.MerchantSysNo && m.ParentProductSysNo == item.ProductSysNo); } if (giftList == null) { giftList = new List <OrderGiftItem>(); } //非赠品池赠品 var normalGiftList = giftList.FindAll(m => !m.IsGiftPool); foreach (var gift in normalGiftList) { ProductSalesInfo giftSalesInfo = PipelineDA.GetProductSalesInfoBySysNo(gift.ProductSysNo); gift.TotalInventory = giftSalesInfo.OnlineQty; if (gift.UnitQuantity * gift.ParentCount > gift.TotalInventory) { errorMsg = LanguageHelper.GetText("赠品【{0}】库存不足!", order.LanguageCode); errorMsg = string.Format(errorMsg, gift.ProductName); return(false); } } //订单级别用户选择的赠品(包含非赠品池删除后保留的赠品和赠品池选择的赠品) List <OrderGiftItem> orderGiftList = new List <OrderGiftItem>(); if (order.GiftItemList != null) { orderGiftList = order.GiftItemList.FindAll(m => m.ParentPackageNo.Equals(0) && m.ParentProductSysNo.Equals(0) && ((m.IsGiftPool && m.IsSelect) || !m.IsGiftPool)); } var productList = order.OrderItemGroupList.FindAll(m => m.MerchantSysNo == item.MerchantSysNo); var merchantOrderGiftList = orderGiftList.FindAll(m => m.MerchantSysNo == item.MerchantSysNo); if (merchantOrderGiftList != null && merchantOrderGiftList.Count > 0) { for (int index = 0; index < merchantOrderGiftList.Count; index++) { var Gift = merchantOrderGiftList[index]; var itemGroupList = productList.FindAll(m => m.MerchantSysNo == merchantOrderGiftList[index].MerchantSysNo && m.PackageChecked); if (itemGroupList.Count > 0 && itemGroupList != null) { ProductSalesInfo giftSalesInfo = PipelineDA.GetProductSalesInfoBySysNo(merchantOrderGiftList[index].ProductSysNo); merchantOrderGiftList[index].TotalInventory = giftSalesInfo.OnlineQty; if (merchantOrderGiftList[index].UnitQuantity * merchantOrderGiftList[index].ParentCount > merchantOrderGiftList[index].TotalInventory) { errorMsg = LanguageHelper.GetText("赠品【{0}】库存不足!", order.LanguageCode); errorMsg = string.Format(errorMsg, merchantOrderGiftList[index].ProductName); return(false); } } } } } } else if (itemGroup.PackageType == 0) { foreach (OrderProductItem item in itemGroup.ProductItemList) { if (item.ProductChecked) { #region 1.商品状态检查 if (!item["ProductStatus"].ToString().Equals(((int)ECommerce.Enums.ProductStatus.Show).ToString())) { errorMsg = LanguageHelper.GetText("商品【{0}】未上架!", order.LanguageCode); errorMsg = string.Format(errorMsg, item["ProductTitle"]); return(false); } #endregion #region 2.商品库存检查 //if (itemGroup.Quantity * item.UnitQuantity > item.TotalInventory) //{ // errorMsg = LanguageHelper.GetText("商品【{0}】库存不足!", order.LanguageCode); // errorMsg = string.Format(errorMsg, item["ProductTitle"]); // return false; //} #endregion #region 3.每单限购最小数量检查 int minCountPerOrder = 0; int.TryParse(item["MinCountPerOrder"].ToString(), out minCountPerOrder); if (itemGroup.Quantity * item.UnitQuantity < minCountPerOrder) { errorMsg = LanguageHelper.GetText("商品【{0}】每单限购数量{1}-{2}!", order.LanguageCode); errorMsg = string.Format(errorMsg, item["ProductTitle"], item["MinCountPerOrder"], item["MaxCountPerOrder"]); return(false); } #endregion #region 4.每单限购最大数量检查 int maxCountPerOrder = 0; int.TryParse(item["MaxCountPerOrder"].ToString(), out maxCountPerOrder); if (itemGroup.Quantity * item.UnitQuantity > maxCountPerOrder) { errorMsg = LanguageHelper.GetText("商品【{0}】每单限购数量{1}-{2}!", order.LanguageCode); errorMsg = string.Format(errorMsg, item["ProductTitle"], item["MinCountPerOrder"], item["MaxCountPerOrder"]); return(false); } #endregion //赠品 List <OrderGiftItem> giftList = null; if (order.GiftItemList != null && order.GiftItemList.Count > 0) { giftList = order.GiftItemList.FindAll(m => m.ParentPackageNo == itemGroup.PackageNo && m.MerchantSysNo == item.MerchantSysNo && m.ParentProductSysNo == item.ProductSysNo); } if (giftList == null) { giftList = new List <OrderGiftItem>(); } //非赠品池赠品 var normalGiftList = giftList.FindAll(m => !m.IsGiftPool); foreach (var gift in normalGiftList) { ProductSalesInfo giftSalesInfo = PipelineDA.GetProductSalesInfoBySysNo(gift.ProductSysNo); gift.TotalInventory = giftSalesInfo.OnlineQty; if (gift.UnitQuantity * gift.ParentCount > gift.TotalInventory) { errorMsg = LanguageHelper.GetText("赠品【{0}】库存不足!", order.LanguageCode); errorMsg = string.Format(errorMsg, gift.ProductName); return(false); } } //订单级别用户选择的赠品(包含非赠品池删除后保留的赠品和赠品池选择的赠品) List <OrderGiftItem> orderGiftList = new List <OrderGiftItem>(); if (order.GiftItemList != null) { orderGiftList = order.GiftItemList.FindAll(m => m.ParentPackageNo.Equals(0) && m.ParentProductSysNo.Equals(0) && ((m.IsGiftPool && m.IsSelect) || !m.IsGiftPool)); } var productList = order.OrderItemGroupList.FindAll(m => m.MerchantSysNo == item.MerchantSysNo); var merchantOrderGiftList = orderGiftList.FindAll(m => m.MerchantSysNo == item.MerchantSysNo); if (merchantOrderGiftList != null && merchantOrderGiftList.Count > 0) { for (int index = 0; index < merchantOrderGiftList.Count; index++) { var Gift = merchantOrderGiftList[index]; var itemGroupList = productList.FindAll(m => m.MerchantSysNo == merchantOrderGiftList[index].MerchantSysNo && m.PackageChecked); if (itemGroupList.Count > 0 && itemGroupList != null) { ProductSalesInfo giftSalesInfo = PipelineDA.GetProductSalesInfoBySysNo(merchantOrderGiftList[index].ProductSysNo); merchantOrderGiftList[index].TotalInventory = giftSalesInfo.OnlineQty; if (merchantOrderGiftList[index].UnitQuantity * merchantOrderGiftList[index].ParentCount > merchantOrderGiftList[index].TotalInventory) { errorMsg = LanguageHelper.GetText("赠品【{0}】库存不足!", order.LanguageCode); errorMsg = string.Format(errorMsg, merchantOrderGiftList[index].ProductName); return(false); } } } } } } } } } #region 优惠促销库存检查 if (order.AttachmentItemList != null) { foreach (OrderAttachment attachment in order.AttachmentItemList) { ProductSalesInfo attachmentSalesInfo = PipelineDA.GetProductSalesInfoBySysNo(attachment.ProductSysNo); attachment.TotalInventory = attachmentSalesInfo.OnlineQty; if (attachment.UnitQuantity * attachment.ParentCount > attachment.TotalInventory) { errorMsg = LanguageHelper.GetText("附件【{0}】库存不足!", order.LanguageCode); errorMsg = string.Format(errorMsg, attachment.ProductName); return(false); } } } if (order.GiftItemList != null) { foreach (OrderGiftItem gift in order.GiftItemList) { if (gift.IsSelect) { ProductSalesInfo giftSalesInfo = PipelineDA.GetProductSalesInfoBySysNo(gift.ProductSysNo); gift.TotalInventory = giftSalesInfo.OnlineQty; if (gift.UnitQuantity * gift.ParentCount > gift.TotalInventory) { errorMsg = LanguageHelper.GetText("赠品【{0}】库存不足!", order.LanguageCode); errorMsg = string.Format(errorMsg, gift.ProductName); return(false); } } } } if (order.PlusPriceItemList != null) { foreach (OrderGiftItem gift in order.PlusPriceItemList) { if (gift.IsSelect) { ProductSalesInfo giftSalesInfo = PipelineDA.GetProductSalesInfoBySysNo(gift.ProductSysNo); gift.TotalInventory = giftSalesInfo.OnlineQty; if (gift.UnitQuantity > gift.TotalInventory) { errorMsg = LanguageHelper.GetText("加购商品【{0}】库存不足!", order.LanguageCode); errorMsg = string.Format(errorMsg, gift.ProductName); return(false); } } } } #endregion errorMsg = null; return(true); }
public void Initialize(ref OrderInfo order) { int currencySysno; int.TryParse(ConstValue.CurrencySysNo, out currencySysno); decimal exchangeRate = PipelineDA.GetCurrencyExchangeRate(currencySysno); order["CurrencySysNo"] = currencySysno; order["ExchangeRate"] = exchangeRate; foreach (OrderItemGroup itemGroup in order.OrderItemGroupList) { int minCountPerOrder = 0; int maxCountPerOrder = 0; foreach (OrderProductItem item in itemGroup.ProductItemList) { //商品基础信息 ProductBasicInfo basicInfo = PipelineDA.GetProductBasicInfoBySysNo(item.ProductSysNo); //商品备案信息 //ProductEntryInfo entryInfo = PipelineDA.GetProductEntryInfoBySysNo(item.ProductSysNo); //basicInfo.ProductEntryInfo = entryInfo; //item["ProductStoreType"] = (int)entryInfo.ProductStoreType; //商品备货时间 //item["LeadTimeDays"] = basicInfo.ProductEntryInfo.LeadTimeDays; //会员价格信息 ProductCustomerRankPrice rankPrice = null; if (order.Customer != null && order.Customer.SysNo > 0) { rankPrice = ECommerce.DataAccess.Product.ProductDA.GetProductCustomerRankPrice(order.Customer.SysNo, item.ProductSysNo); } //商品销售信息 ProductSalesInfo salesInfo = PipelineDA.GetProductSalesInfoBySysNo(item.ProductSysNo); item.ProductID = basicInfo.Code; item.ProductName = basicInfo.ProductName; item.Weight = basicInfo.Weight; item["ProductTitle"] = basicInfo.ProductTitle; item.DefaultImage = basicInfo.DefaultImage; item.UnitMarketPrice = salesInfo.MarketPrice; item.UnitCostPrice = salesInfo.UnitCostPrice; //套餐不享受会员价格 if (itemGroup.PackageNo > 0 && itemGroup.PackageType == 1) { item.UnitSalePrice = salesInfo.CurrentPrice; } else { item.UnitSalePrice = rankPrice != null && rankPrice.RankPrice < salesInfo.CurrentPrice ? rankPrice.RankPrice : salesInfo.CurrentPrice; } item.UnitRewardedPoint = salesInfo.Point; //由calculators计算 //item.UnitTaxFee = salesInfo.EntryTax.HasValue ? salesInfo.EntryTax.Value : 0m; //item["TariffRate"] = basicInfo.ProductEntryInfo.TariffRate; item.TotalInventory = salesInfo.OnlineQty; item.MerchantSysNo = basicInfo.VendorSysno; item.MerchantName = basicInfo.VendorInfo.VendorName; itemGroup.MerchantSysNo = basicInfo.VendorSysno; itemGroup.MerchantName = basicInfo.VendorInfo.VendorName; item["ProductStatus"] = (int)basicInfo.ProductStatus; item["Warranty"] = basicInfo.Warranty; salesInfo.MinCountPerOrder = salesInfo.OnlineQty < salesInfo.MinCountPerOrder ? salesInfo.OnlineQty : salesInfo.MinCountPerOrder; salesInfo.MaxCountPerOrder = salesInfo.OnlineQty < salesInfo.MaxCountPerOrder ? salesInfo.OnlineQty : salesInfo.MaxCountPerOrder; item["MinCountPerOrder"] = salesInfo.MinCountPerOrder; item["MaxCountPerOrder"] = salesInfo.MaxCountPerOrder; //每单限购计算,套餐则以套餐内商品最小限购数量为准 if (minCountPerOrder < salesInfo.MinCountPerOrder / item.UnitQuantity) { minCountPerOrder = salesInfo.MinCountPerOrder / item.UnitQuantity; } if (maxCountPerOrder.Equals(0) || maxCountPerOrder > salesInfo.MaxCountPerOrder / item.UnitQuantity) { maxCountPerOrder = salesInfo.MaxCountPerOrder / item.UnitQuantity; } decimal price = GetProductStepPrice(item.UnitSalePrice, item.ProductSysNo, itemGroup.Quantity); item.UnitSalePrice = price; //商品分组属性 List <ProductSplitGroupProperty> splitGroupProperty = PipelineDA.GetProductSplitGroupPropertyList(item.ProductSysNo); if (splitGroupProperty != null && splitGroupProperty.Count > 0) { item.SplitGroupPropertyDescList = new List <KeyValuePair <string, string> >(); foreach (ProductSplitGroupProperty property in splitGroupProperty) { item.SplitGroupPropertyDescList.Add(new KeyValuePair <string, string>(property.PropertyDescription, property.ValueDescription)); } } } itemGroup.MinCountPerSO = minCountPerOrder; itemGroup.MaxCountPerSO = maxCountPerOrder; //套餐名称 if (itemGroup.PackageType.Equals(1)) { var combo = PromotionDA.GetComboByComboSysNo(itemGroup.PackageNo); if (combo != null) { itemGroup["PackageName"] = combo.SaleRuleName; } } } }