示例#1
0
        private void GetAllSaleGift(ref OrderInfo order)
        {
            if (order.GiftItemList == null)
            {
                order.GiftItemList = new List <OrderGiftItem>();
            }
            //1.基于性能考虑,合并订单中的所有主商品
            List <SOItemInfo>   soItemList   = InternalHelper.ConvertToSOItemList(order, false);
            List <SaleGiftInfo> saleGiftList = new List <SaleGiftInfo>();

            //2.得到订单中所有可能可以使用赠品活动,并进行活动排重(单品,厂商--可以直接用,同时购买和满赠--可能可以用,需要在后面处理)。
            foreach (SOItemInfo soItem in soItemList)
            {
                List <SaleGiftInfo> productSaleGiftList = PromotionDA.GetSaleGiftListByProductSysNo(soItem.ProductSysNo);
                if (productSaleGiftList != null && productSaleGiftList.Count > 0)
                {
                    foreach (SaleGiftInfo saleGift in productSaleGiftList)
                    {
                        if (!saleGiftList.Exists(f => f.SysNo == saleGift.SysNo))
                        {
                            saleGiftList.Add(saleGift);
                        }
                    }
                }
            }

            //3.遍历所有可能可以使用的赠品活动,再进一步根据order中的每一组商品,结合赠品活动类型进行处理
            if (saleGiftList.Count > 0)
            {
                foreach (SaleGiftInfo saleGift in saleGiftList)
                {
                    switch (saleGift.SaleGiftType)
                    {
                    case ECommerce.Enums.SaleGiftType.Single:
                        #region 单品处理
                        ProcessSingleGift(ref order, saleGift);
                        #endregion
                        break;

                    case ECommerce.Enums.SaleGiftType.Vendor:
                        #region 厂商赠品处理
                        ProcessSingleGift(ref order, saleGift);
                        #endregion
                        break;
                    }
                }
                //同时购买处理
                ProcessMultiGift(ref order, saleGiftList);

                //满赠处理
                ProcessFullGift(ref order, saleGiftList);
            }
        }