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); } }