Ejemplo n.º 1
0
        private bool CheckDiff(VkTask task, VkGoodsItem oldItem)
        {
            var result = task.IsDeleted != oldItem.IsDeleted ||
                         !task.Description.Equals(oldItem.Description) ||
                         !task.Header.Equals(oldItem.Name) ||
                         task.Price != oldItem.Price;

            return(result);
        }
Ejemplo n.º 2
0
        private VkGoodsItem PostItemToVk(FullCatalogRoot fullCatalog, AllStockSneaker artikul, VkGoodsRoot oldVkGoodsRoot)
        {
            try
            {
                var task = new VkTask();

                var fcSneaker = fullCatalog.records.Find(x => x.sku == artikul.sku);
                if (fcSneaker.images == null)
                {
                    return(null);
                }
                if (fcSneaker.images.Count == 0)
                {
                    return(null);
                }
                if (string.IsNullOrWhiteSpace(artikul.category))
                {
                    return(null);
                }
                if (artikul.sizes == null)
                {
                    return(null);
                }
                if (artikul.sizes.Count == 0)
                {
                    return(null);
                }

                task.Header = artikul.title.ToUpper() + " " + fcSneaker.sku;

                var sizeBlock = "";

                foreach (var size in artikul.sizes)
                {
                    var scSize       = SizeChart.GetSizeStatic(new Size(artikul.brand, artikul.category, size.us, null, null, null, null));
                    var priceSize    = size.offers[0].price_usd_with_delivery_to_usa_and_minus_vat;
                    var priceSizeRub = (int)CurrencyRate.ConvertCurrency("USD", "RUB", priceSize) + Margin;
                    if (scSize != null)
                    {
                        sizeBlock += scSize.GetAllSizeString() + ". Цена:" + priceSizeRub + Environment.NewLine;
                    }
                }

                var start = fcSneaker.type.ToLower() + " " + artikul.title.ToUpper() + Environment.NewLine;
                task.Description  = start.Substring(0, 1).ToUpper() + start.Remove(0, 1);
                task.Description += "Артикул: " + artikul.sku + Environment.NewLine;
                task.Description += "В оригинальной упаковке Nike." + Environment.NewLine;
                task.Description += "БЕСПЛАТНАЯ доставка по Москве" + Environment.NewLine;
                task.Description += "Доставка по России 3-5 дней компанией СДЭК." + Environment.NewLine;
                task.Description += "Стоимость доставки по РФ - 300 рублей." + Environment.NewLine;
                task.Description += "Доставка в регионы только по 100% предоплате, наложенным платежом не отправляем" + Environment.NewLine;
                task.Description += "Работаем с 2012 года, более 4000 моделей в ассортименте. Можете перейти в группу Вконтакте, чтобы убедиться в том, что мы продаем только оригинальную обувь. Никаких подделок и реплик!" + Environment.NewLine;
                task.Description += "В нашей группе Вконтакте более 70 реальных отзывов от клиентов!" + Environment.NewLine;
                task.Description += "Размеры в наличии:" + Environment.NewLine;
                task.Description += sizeBlock;
                task.Description += "Уточняйте наличие размеров." + Environment.NewLine;
                task.Description += "Если размера нет в наличии, можем его привезти под заказ. Срок поставки товара под заказ: 7-10 дней." + Environment.NewLine;
                task.Description += "Sneaker Icon - это большой выбор оригинальной брендовой обуви Nike и Jordan. Кроссовки, кеды, бутсы, футзалки, шиповки, сланцы, ботинки и другие типы обуви" + Environment.NewLine;


                var priceUsd = artikul.GetMinPrice();
                var priceRub = (int)CurrencyRate.ConvertCurrency("USD", "RUB", priceUsd) + Margin;
                task.Price     = priceRub;
                task.ImageList = fcSneaker.images;

                task.CollectionList = GetCollectionsName(fcSneaker.sku);
                //todo пока так. Нормально удаление сделаю, как попросят.
                task.IsDeleted = false;
                task.SKU       = fcSneaker.sku;

                var oldItem = oldVkGoodsRoot.Records.Where(x => x.SKU != null).FirstOrDefault(x => x.SKU.Equals(fcSneaker.sku));

                var result = Posting.AddOrEditVkGoods(task, oldItem);
                if (result != null)
                {
                    //todo подумать над информативностью. Тут не только именно отправленные данные.
                    _logger.Debug($"В товары ВК отправлен SKU {fcSneaker.sku} ID {result.VkId}");
                }

                return(result);
            }
            catch (Exception e)
            {
                _logger.Error(e, "Ошибка при добавлении товара в ВК");
                _logger.Error(e.StackTrace);
                return(null);
            }
        }
Ejemplo n.º 3
0
        public VkGoodsItem AddOrEditVkGoods(VkTask task, VkGoodsItem oldItem)
        {
            const int category = 4;

            using (var imageWorker = new VkImageWorker())
            {
                if (oldItem == null || oldItem.VkId == 0)
                {
                    if (_countAdd > MaxAdd)
                    {
                        _logger.Warn("Добавлено больше дневного лимита товаров");
                        return(null);
                    }

                    long idMainPhoto = 0;

                    var dict = new Dictionary <long, string>();

                    var textAnswer = "";

                    foreach (var image in task.ImageList)
                    {
                        try
                        {
                            var wc = new WebClient();
                            wc.DownloadFile(new Uri(image), imageWorker.Filename);

                            var serverInfo = _vk.Photo.GetMarketUploadServer(Config.GetConfig().IdGroup, idMainPhoto == 0);

                            var nvc = new NameValueCollection();

                            textAnswer = Common.HttpUploadFile(serverInfo.UploadUrl, imageWorker.Filename,
                                                               "file", "image/jpeg", nvc);

                            if (_vk.UserId != null)
                            {
                                var loadPhoto = _vk.Photo.SaveMarketPhoto(Config.GetConfig().IdGroup, textAnswer);
                                var id        = loadPhoto[0].Id;

                                if (id != null)
                                {
                                    if (idMainPhoto == 0)
                                    {
                                        idMainPhoto = id.Value;
                                    }
                                    else
                                    {
                                        dict.Add(id.Value, image);
                                    }
                                }
                                else
                                {
                                    throw new NullReferenceException("Пришел нулл в ответе от сервера ВК при загрузке фото");
                                }
                            }
                            else
                            {
                                throw new NullReferenceException("_vk.UserId = null");
                            }
                        }
                        catch (Exception e)
                        {
                            _logger.Error(e, "Ошибка при загрузке файла " + image + " на стену в ВК");
                            _logger.Error(textAnswer);

                            if (textAnswer.Contains("ERR_UPLOAD_BAD_IMAGE_SIZE: market photo min size 400x400"))
                            {
                                _logger.Warn($"Изображение {image} слишком маленькое");
                            }
                            else
                            {
                                throw;
                            }
                        }
                    }

                    if (idMainPhoto != 0)
                    {
                        var id = _vk.Markets.Add(new MarketProductParams()
                        {
                            CategoryId  = category,
                            Deleted     = task.IsDeleted,
                            Description = task.Description,
                            MainPhotoId = idMainPhoto,
                            Name        = task.Header,
                            OwnerId     = Config.GetConfig().IdGroup * -1,
                            Price       = task.Price,
                            PhotoIds    = dict.Keys
                        });

                        _countAdd++;

                        var result = new VkGoodsItem()
                        {
                            Name        = task.Header,
                            Description = task.Description,
                            Price       = task.Price,
                            IsDeleted   = task.IsDeleted,
                            IdImageList = dict.Keys.ToList(),
                            MainImageId = idMainPhoto,
                            SKU         = task.SKU,
                            VkId        = id
                        };

                        return(result);
                    }

                    const string text = "Ошибка при загрузке товара. Идентификатор основного фото равен 0";

                    _logger.Error(text);
                    throw new Exception(text);
                }

                if (!CheckDiff(task, oldItem))
                {
                    return(oldItem);
                }


                _vk.Markets.Edit(new MarketProductParams()
                {
                    Name        = task.Header,
                    Description = task.Description,
                    Price       = task.Price,
                    Deleted     = task.IsDeleted,
                    ItemId      = oldItem.VkId,
                    PhotoIds    = oldItem.IdImageList,
                    MainPhotoId = oldItem.MainImageId,
                    OwnerId     = Config.GetConfig().IdGroup * -1,
                    CategoryId  = category
                });

                oldItem.Description = task.Description;
                oldItem.Name        = task.Header;
                oldItem.IsDeleted   = task.IsDeleted;
                oldItem.Price       = task.Price;

                return(oldItem);
            }
        }