Пример #1
0
        public CallWalmartProcessing(ILogService log,
                                     ITime time,
                                     ICacheService cacheService,
                                     IDbFactory dbFactory,
                                     IEmailService emailService,
                                     IItemHistoryService itemHistoryService,
                                     WalmartApi walmartApi,
                                     CompanyDTO company)
        {
            _log                = log;
            _time               = time;
            _dbFactory          = dbFactory;
            _cacheService       = cacheService;
            _walmartApi         = walmartApi;
            _company            = company;
            _emailService       = emailService;
            _itemHistoryService = itemHistoryService;

            _actionService  = new SystemActionService(_log, _time);
            _htmlScraper    = new HtmlScraperService(log, time, dbFactory);
            _barcodeService = new BarcodeService(log, time, dbFactory);

            _openApi = new WalmartOpenApi(_log, "trn9fdghvb8p9gjj9j6bvjwx");
            _autoCreateListingService = new AutoCreateWalmartListingService(log,
                                                                            time,
                                                                            dbFactory,
                                                                            _cacheService,
                                                                            _barcodeService,
                                                                            _emailService,
                                                                            _openApi,
                                                                            itemHistoryService,
                                                                            AppSettings.IsDebug);
        }
        public void SearchByBarcode(string barcode)
        {
            var openApi  = new WalmartOpenApi(_log, "trn9fdghvb8p9gjj9j6bvjwx");
            var products = openApi.SearchProductsByBarcode(barcode, WalmartUtils.ApparelCategoryId);

            _log.Info(products.ToString());
        }
Пример #3
0
        public virtual ActionResult GetBarcode(string barcode)
        {
            LogI("GetBarcode, barcode=" + barcode);

            ItemBarcodeViewModel model = new ItemBarcodeViewModel();
            string message             = null;
            bool   isSuccess           = false;

            if (string.IsNullOrEmpty(barcode))
            {
                return(JsonGet(new ValueResult <ItemBarcodeViewModel>(isSuccess, "barcode is empty", model)));
            }
            if (barcode.Length != 12 && barcode.Length != 13)
            {
                return(JsonGet(new ValueResult <ItemBarcodeViewModel>(isSuccess, "incorect barcode format", model)));
            }

            try
            {
                var marketplaceManager = new MarketplaceKeeper(DbFactory, false);
                marketplaceManager.Init();

                IMarketApi api = new MarketFactory(marketplaceManager.GetAll(), Time, LogService, DbFactory, null)
                                 .GetApi((AccessManager.Company ?? AccessManager.DefaultCompany).Id, MarketType.Amazon, MarketplaceKeeper.AmazonComMarketplaceId);

                model.Items.AddRange(ItemBarcodeViewModel.GetUrlItemsByBarcodeFromAmazonApi(api, barcode)
                                     .Select(x => new ItemBarcodeListingViewModel()
                {
                    Marketplace = "Amazon", Url = x
                }));

                var openApi = new WalmartOpenApi(LogService, "trn9fdghvb8p9gjj9j6bvjwx");
                model.Items.AddRange(ItemBarcodeViewModel.GetUrlItemsByBarcodeFromWalmartApi(openApi, new ItemBarcodeSearchFilter
                {
                    Keywords   = barcode,
                    CategoryId = "",
                    MinPrice   = null,
                    MaxPrice   = null,
                    StartIndex = 1,
                    LimitCount = 10,
                }).Select(x => new ItemBarcodeListingViewModel()
                {
                    Marketplace = "Walmart", Url = x
                }));

                isSuccess = true;
            }
            catch (Exception ex)
            {
                LogE("GetRank", ex);
                message   = ex.Message;
                isSuccess = false;
            }

            return(JsonGet(new ValueResult <ItemBarcodeViewModel>(isSuccess, message, model)));
        }
        public static List <string> GetUrlItemsByBarcodeFromWalmartApi(WalmartOpenApi api, ItemBarcodeSearchFilter filter)
        {
            var searchResult = api.SearchProducts(filter.Keywords,
                                                  filter.CategoryId,
                                                  filter.MinPrice,
                                                  filter.MaxPrice,
                                                  filter.StartIndex,
                                                  filter.LimitCount);

            if (searchResult != null && searchResult.IsSuccess && searchResult.Data.Count > 0)
            {
                return(searchResult.Data.Select(x => "https://www.walmart.com/ip/item/" + x.ItemId).ToList());
            }
            return(new List <string>()
            {
                "---"
            });
        }
        public static IList <MarketBarcodeViewModel> SearchBarcodes(ILogService log,
                                                                    string productUrl)
        {
            var itemId = (productUrl ?? "").Split("/".ToCharArray()).LastOrDefault();
            var items  = new List <MarketBarcodeViewModel>();

            if (!String.IsNullOrEmpty(itemId))
            {
                var walmartService = new WalmartOpenApi(log, "trn9fdghvb8p9gjj9j6bvjwx");
                var productResult  = walmartService.LookupProductWithVariations(itemId);
                if (productResult.IsSuccess)
                {
                    items = productResult.Data.Select(p => new MarketBarcodeViewModel()
                    {
                        ItemId  = p.SourceMarketId,
                        Barcode = p.Barcode,
                        Size    = p.Size,
                        Color   = p.Color,
                    }).ToList();
                }
            }

            return(items);
        }
        public BargainSearchResult Search(BargainSearchFilter filter,
                                          AmazonApi api)
        {
            //"id": "5438",
            //"name": "Apparel",

            var openApi      = new WalmartOpenApi(_log, "trn9fdghvb8p9gjj9j6bvjwx");
            var searchResult = openApi.SearchProducts(filter.Keywords,
                                                      filter.CategoryId,
                                                      filter.MinPrice,
                                                      filter.MaxPrice,
                                                      filter.StartIndex,
                                                      filter.LimitCount);

            var results = new List <BargainItem>();

            if (searchResult.IsSuccess)
            {
                var walmartItems = searchResult.Data.Where(i => //i.AvailableOnline &&
                                                           !String.IsNullOrEmpty(i.UPC)).ToList();
                var index = 0;
                var step  = 5;
                while (index < walmartItems.Count)
                {
                    var stepWalmartItems = walmartItems.Skip(index).Take(step).ToList();
                    var amazonItems      = api.GetProductForBarcode(stepWalmartItems.Select(i => i.UPC).ToList());

                    var newItems = new List <BargainItem>();
                    foreach (var walmartItem in stepWalmartItems)
                    {
                        var amazonItem = amazonItems.FirstOrDefault(i => i.Barcode == walmartItem.UPC);
                        newItems.Add(new BargainItem()
                        {
                            Barcode = walmartItem.UPC,

                            Name         = walmartItem.Name,
                            WalmartImage = walmartItem.ThumbnailImage,

                            AmazonItem        = amazonItem,
                            AmazonPrice       = amazonItem != null ? amazonItem.CurrentPrice : (decimal?)null,
                            AvailableOnAmazon = amazonItem != null ? amazonItem.AmazonRealQuantity > 0 : false,

                            WalmartPrice       = walmartItem.SalePrice,
                            AvailableOnWalmart = walmartItem.AvailableOnline,

                            WalmartItem = new ItemDTO()
                            {
                                SourceMarketId     = walmartItem.ItemId,
                                CurrentPrice       = walmartItem.SalePrice ?? 0,
                                AmazonRealQuantity = walmartItem.Stock == "Available" ? 1 : 0,
                                Size    = walmartItem.Size,
                                Color   = walmartItem.Color,
                                Name    = walmartItem.Name,
                                Barcode = walmartItem.UPC,
                            }
                        });
                    }

                    var asinList = newItems.Where(i => i.AmazonItem != null &&
                                                  !String.IsNullOrEmpty(i.AmazonItem.ASIN))
                                   .Select(i => i.AmazonItem.ASIN)
                                   .ToList();

                    if (asinList.Any())
                    {
                        var amazonPrices = api.GetLowestOfferListingsForASIN(asinList).ToList();

                        foreach (var amazonPrice in amazonPrices)
                        {
                            var item = newItems.FirstOrDefault(
                                i => i.AmazonItem != null && i.AmazonItem.ASIN == amazonPrice.ASIN);
                            if (item != null)
                            {
                                item.AmazonPrice = amazonPrice.LowestPrice;
                                item.AmazonItem.AmazonRealQuantity = 1; //NOTE: has offer => Available
                            }
                        }
                    }

                    results.AddRange(newItems);

                    index += step;
                }
            }

            return(new BargainSearchResult()
            {
                Bargains = results,
                StartIndex = filter.StartIndex,
                Total = searchResult.Total,
            });
        }
        public void FindListingsPositionInSearch()
        {
            var results = new List <StylePositionOnWM>();

            using (var db = _dbFactory.GetRWDb())
            {
                var openApi = new WalmartOpenApi(_log, "trn9fdghvb8p9gjj9j6bvjwx");

                var wmItems = db.Items.GetAll().Where(i => i.ItemPublishedStatus == (int)PublishedStatuses.Published &&
                                                      i.Market == (int)MarketType.Walmart).ToList();

                var styleIdList = wmItems.Where(i => i.StyleId.HasValue).Select(i => i.StyleId.Value).ToList();
                //var styleList = db.Styles.GetAll().Where(st => styleIdList.Contains(st.Id)).ToList();

                var groupByStyle = from siCache in db.StyleItemCaches.GetAll()
                                   group siCache by siCache.StyleId
                                   into byStyle
                                   select new
                {
                    StyleId         = byStyle.Key,
                    OneHasStrongQty = byStyle.Any(s => s.RemainingQuantity > 20),                    //NOTE: >20
                    Qty             = byStyle.Sum(s => s.RemainingQuantity)
                };

                var styleList = (from s in db.Styles.GetAll()
                                 join sCache in db.StyleCaches.GetAll() on s.Id equals sCache.Id
                                 join qty in groupByStyle on s.Id equals qty.StyleId
                                 where styleIdList.Contains(s.Id)
                                 orderby qty.Qty descending
                                 select s)
                                .Take(100)
                                .ToList();

                var mainLicenseFeatures = db.StyleFeatureValues.GetFeatureValueByStyleIdByFeatureId(styleIdList, new[] { StyleFeatureHelper.MAIN_LICENSE }).ToList();
                var subLicenseFeatures  = db.StyleFeatureValues.GetFeatureValueByStyleIdByFeatureId(styleIdList, new[] { StyleFeatureHelper.SUB_LICENSE1 }).ToList();
                var itemStyleFeatures   = db.StyleFeatureValues.GetFeatureValueByStyleIdByFeatureId(styleIdList, new[] { StyleFeatureHelper.ITEMSTYLE }).ToList();

                var resultsCache = new Dictionary <string, IList <OpenItem> >();

                foreach (var style in styleList)
                {
                    var mainLicenseFeature = mainLicenseFeatures.FirstOrDefault(f => f.StyleId == style.Id);
                    var subLicenseFeature  = subLicenseFeatures.FirstOrDefault(f => f.StyleId == style.Id);
                    var itemStyleFeature   = itemStyleFeatures.FirstOrDefault(f => f.StyleId == style.Id);

                    var brandName   = ItemExportHelper.GetBrandName(mainLicenseFeature?.Value, subLicenseFeature?.Value);
                    var manufacture = brandName;
                    if (String.IsNullOrEmpty(manufacture))
                    {
                        manufacture = style.Manufacturer;
                    }

                    var itemStyle = itemStyleFeature?.Value ?? "Pajamas";
                    itemStyle = itemStyle.Replace("– 2pc", "").Replace("– 3pc", "").Replace("– 4pc", "").Trim();

                    var keywords = StringHelper.JoinTwo(" ", manufacture, itemStyle);

                    _log.Info("Searching: " + keywords);
                    IList <OpenItem> foundItems = new List <OpenItem>();
                    if (resultsCache.ContainsKey(keywords))
                    {
                        foundItems = resultsCache[keywords];
                    }
                    else
                    {
                        var searchResult = openApi.SearchProducts(keywords,
                                                                  WalmartUtils.ApparelCategoryId,
                                                                  null,
                                                                  null,
                                                                  1,
                                                                  100);
                        if (searchResult.IsSuccess)
                        {
                            foundItems = searchResult.Data;
                            resultsCache.Add(keywords, searchResult.Data);
                        }
                    }

                    int?   position       = null;
                    string positionItemId = null;
                    string buyBoxWinner   = null;
                    var    itemsByStyle   = wmItems.Where(i => i.StyleId == style.Id).ToList();
                    var    itemIds        = itemsByStyle.Where(i => !String.IsNullOrEmpty(i.SourceMarketId)).Select(i => i.SourceMarketId).ToList();
                    for (int i = 0; i < foundItems.Count; i++)
                    {
                        if (itemIds.Contains(foundItems[i].ItemId) &&
                            position == null)
                        {
                            position       = i + 1;
                            positionItemId = foundItems[i].ItemId;
                            buyBoxWinner   = foundItems[i].SellerInfo;
                        }
                    }

                    _log.Info(style.StyleID + ", position: " + position + ", " + keywords + ", " + buyBoxWinner + ", " + positionItemId);

                    results.Add(new StylePositionOnWM()
                    {
                        StyleId                = style.Id,
                        StyleString            = style.StyleID,
                        SearchKeywords         = keywords,
                        RequestedSearchResults = foundItems.Count,
                        BestPosition           = position,
                        BuyBoxWinner           = buyBoxWinner,
                        BestPositionUrl        = !String.IsNullOrEmpty(positionItemId) ? String.Format("https://www.walmart.com/ip/item/{0}", positionItemId) : ""
                    });
                }
            }

            var filename = "WMListingPositions_" + DateTime.Now.ToString("MM_dd_yyyy_hh_mm_ss") + ".xls";
            var filepath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, filename);

            var b       = new ExportColumnBuilder <StylePositionOnWM>();
            var columns = new List <ExcelColumnInfo>()
            {
                b.Build(p => p.StyleString, "Style Id", 25),
                b.Build(p => p.SearchKeywords, "Search Keywords", 25),
                b.Build(p => p.RequestedSearchResults, "Requested search results", 35),
                b.Build(p => p.BestPosition, "Best Position", 15),
                b.Build(p => p.BuyBoxWinner, "Buy Box Winner", 20),
                b.Build(p => p.BestPositionUrl, "Best Position Url", 45)
            };

            using (var stream = ExcelHelper.Export(results, columns))
            {
                stream.Seek(0, SeekOrigin.Begin);
                using (var fileStream = File.Create(filepath))
                {
                    stream.CopyTo(fileStream);
                }
            }
        }