Пример #1
0
        /// <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);
        }
Пример #2
0
        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);
        }
Пример #3
0
        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;
                    }
                }
            }
        }