/// <summary>
        /// 集合促销(即 满元、组合)
        /// </summary>
        /// <param name="collections"></param>
        /// <returns></returns>
        private List <KeyValuePair <MarketingTimelinessLimit, ActiveMarketingRule> > GetCollectionPromotionForMarketing(List <KeyValuePair <MarketingTimelinessLimit, ActiveMarketingRule> > collections)
        {
            var today         = DateTime.Now.Date;
            var discountQuery = (from a in PromotionBlendService.CurrentRepository.Entities
                                 from b in CommodityPromotionService.CurrentRepository.Entities
                                 where
                                 a.CommodityId == b.Id &&
                                 b.State != 2 &&
                                 b.EndDate >= today &&
                                 (b.PromotionType == 3 || b.PromotionType == 5)
                                 select new { a, b }).ToList();

            foreach (var item in discountQuery)
            {
                try
                {
                    var marketingTimelinessLimit = GetMarketingTimelinessLimit(item.b);
                    var marketingRules           = GetMarketingRule(item.b);
                    marketingRules.IsRepeatMarketing = Convert.ToBoolean(item.a.AllowedAccumulate);
                    marketingRules.Type = item.a.RuleType == 1 ? MarketingType.Zuhe : MarketingType.Manyuan;
                    var promotionBlendList  = PromotionBlendListService.CurrentRepository.Entities.Where(o => o.CommodityId == item.a.CommodityId).ToList();
                    var barcodeRanges       = new List <string>();
                    var giftRanges          = new List <KeyValuePair <string, decimal> >();
                    var ignoreBarcodeRanges = new List <string>();
                    foreach (var child in promotionBlendList)
                    {
                        switch (child.BlendType)
                        {
                        case 1:
                            barcodeRanges.Add(child.BarcodeOrCategorySN);
                            break;

                        case 2:
                            if (child.BrandSN != 0)
                            {
                                var productList = GetProductRanges(Convert.ToInt32(child.BarcodeOrCategorySN), child.CategoryGrade ?? 3, child.BrandSN);
                                barcodeRanges.AddRange(productList);
                            }
                            else
                            {
                                var productList = GetProductRanges(Convert.ToInt32(child.BarcodeOrCategorySN), child.CategoryGrade ?? 3);
                                barcodeRanges.AddRange(productList);
                            }
                            break;

                        case 3:
                            giftRanges.Add(new KeyValuePair <string, decimal>(child.BarcodeOrCategorySN, 1));
                            break;

                        case 4:
                            if (child.BrandSN != 0)
                            {
                                var productList = GetProductRanges(Convert.ToInt32(child.BarcodeOrCategorySN), child.CategoryGrade ?? 3, child.BrandSN);
                                giftRanges.AddRange(productList.Select(o => new KeyValuePair <string, decimal>(o, 1)).ToList());
                            }
                            else
                            {
                                var productList = GetProductRanges(Convert.ToInt32(child.BarcodeOrCategorySN), child.CategoryGrade ?? 3);
                                giftRanges.AddRange(productList.Select(o => new KeyValuePair <string, decimal>(o, 1)).ToList());
                            }
                            break;

                        case 5:
                            ignoreBarcodeRanges.Add(child.BarcodeOrCategorySN);
                            break;

                        case 6:
                            if (child.BrandSN != 0)
                            {
                                var productList = GetProductRanges(Convert.ToInt32(child.BarcodeOrCategorySN), child.CategoryGrade ?? 3, child.BrandSN);
                                ignoreBarcodeRanges.AddRange(productList);
                            }
                            else
                            {
                                var productList = GetProductRanges(Convert.ToInt32(child.BarcodeOrCategorySN), child.CategoryGrade ?? 3);
                                ignoreBarcodeRanges.AddRange(productList);
                            }
                            break;
                        }
                    }
                    marketingRules.BarcodeRange       = barcodeRanges;
                    marketingRules.IgnoreBarcodeRange = ignoreBarcodeRanges;
                    marketingRules.RuleNumber         = item.a.FullNumber;
                    marketingRules.MarketingAction    = new MarketingAction()
                    {
                        AddMoney              = 0m,
                        Discount              = 0m,
                        MarketingActionMode   = MarketingActionMode.Gift,
                        DiscountAmount        = 0m,
                        MarketingActionNumber = 0m,
                        Repeatable            = Convert.ToBoolean(item.a.AllowedAccumulate)
                    };
                    switch (item.a.PromotionType)
                    {
                    case 1:
                        marketingRules.MarketingAction.MarketingActionMode = MarketingActionMode.NowCash;
                        marketingRules.MarketingAction.Amount = item.a.DiscountOrPrice;

                        break;

                    case 2:
                        marketingRules.MarketingAction.MarketingActionMode = MarketingActionMode.CashCoupon;
                        marketingRules.MarketingAction.Amount = item.a.DiscountOrPrice;
                        break;

                    case 3:
                        marketingRules.MarketingAction.MarketingActionMode = MarketingActionMode.Discount;
                        marketingRules.MarketingAction.Discount            = item.a.DiscountOrPrice;
                        break;

                    case 4:
                        marketingRules.MarketingAction.MarketingActionMode = MarketingActionMode.AddMoneyToGive;
                        break;

                    case 5:
                        marketingRules.MarketingAction.MarketingActionMode = MarketingActionMode.AddMoneyToGive;
                        var products = ProductRecordService.CheckedPrice(StoreId, CompanyId, null, item.a.PriceRange, 0);
                        var ranges   = products.Select(o => o.Barcode).Distinct().Select(o => new KeyValuePair <string, decimal>(o, 1)).ToList();
                        marketingRules.MarketingAction.Gifts = ranges;
                        break;
                    }



                    switch (item.a.RuleType)
                    {
                    case 1:
                        marketingRules.MeteringMode = MeteringMode.QiGouLiang;
                        break;

                    case 2:
                        marketingRules.MeteringMode = MeteringMode.ManYuan;
                        break;
                    }


                    collections.Add(new KeyValuePair <MarketingTimelinessLimit, ActiveMarketingRule>(marketingTimelinessLimit, marketingRules));
                }
                catch (Exception ex)
                {
                    goto Continue;
                }
Continue:
                continue;
            }
            return(collections);
        }
Beispiel #2
0
 public ProductInfo GetProductInfoByBarcode(string barcode, bool isFindWeigh = false)
 {
     return(ProductRecordService.GetProductRecod(StoreId, barcode, CompanyId, isFindWeigh));
 }
 public ValueObject.PageResult <InventoryResult> CheckedInventory(IEnumerable <int> categorySns, string keyword, decimal price, int pageSize, int pageIndex)
 {
     //改为从产品档案来
     return(ProductRecordService.CheckedInventory(StoreId, CompanyId, categorySns, keyword, price, pageSize, pageIndex));
 }