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