private void AddPriceFileToList(string priceFile, bool ignoreDownloaded) { //Если файл имеет префикс "d", то значит он был закачан, поэтому он уже в очереди на обработку if (ignoreDownloaded && PriceProcessItem.IsDownloadedPrice(priceFile)) { return; } var item = PriceProcessItem.TryToLoadPriceProcessItem(priceFile); if (item != null) { if (!PriceItemList.AddItem(item)) { //todo: здесь не понятно, что надо делать, т.к. прайс-лист не добавили по причине скаченного нового. Сейчас удаляю try { global::Common.Tools.FileHelper.FileDelete(priceFile); } catch (Exception ex) { _logger.ErrorFormat("Не получилось удалить файл для формализации {0}\r\n{1}", priceFile, ex); } } } else { _logger.WarnFormat(Settings.Default.UnknownPriceError, Path.GetFileName(priceFile)); try { global::Common.Tools.FileHelper.FileDelete(priceFile); } catch (Exception ex) { _logger.ErrorFormat("Не получилось удалить неизвестный файл {0}\r\n{1}", priceFile, ex); } } }
public void Top_In_Inbound_List_Test() { var dtn = DateTime.Now; var checkedItem = new PriceProcessItem(false, 5, null, 1, "jjj.AAA", null) { CreateTime = dtn.AddMinutes(50) }; PriceItemList.AddItem(new PriceProcessItem(false, 1, null, 1, "jjj.123", null) { CreateTime = dtn.AddMinutes(10) }); PriceItemList.AddItem(checkedItem); PriceItemList.AddItem(new PriceProcessItem(true, 2, null, 1, "jjj.345", null) { CreateTime = dtn.AddMinutes(100) }); PriceItemList.AddItem(new PriceProcessItem(true, 3, null, 1, "jjj.789", null) { CreateTime = dtn.AddMinutes(100) }); Assert.AreEqual(checkedItem.CreateTime, dtn.AddMinutes(50)); var wcf = new WCFPriceProcessorService(); wcf.TopInInboundList(checkedItem.GetHashCode()); Assert.AreEqual(checkedItem.CreateTime, dtn.AddMinutes(10).AddSeconds(-5)); }
/// <summary> /// добавляем новые нитки на формализацию /// </summary> protected void AddPriceProcessThread() { lock (pt) { if (DateTime.Now.Subtract(lastStatisticReport).TotalSeconds > statisticPeriodPerSecs) { _logger.InfoFormat("PriceItemList.Count = {0}", PriceItemList.list.Count); } ProcessItemList(PriceItemList.GetPrioritizedList()); } }
public void Delete_ItemIn_Inbound_List_Test() { var checkedItem = new PriceProcessItem(false, 5, null, 1, "jjj.AAA", null); PriceItemList.AddItem(new PriceProcessItem(false, 1, null, 1, "jjj.123", null)); PriceItemList.AddItem(checkedItem); PriceItemList.AddItem(new PriceProcessItem(true, 2, null, 1, "jjj.345", null)); PriceItemList.AddItem(new PriceProcessItem(true, 3, null, 1, "jjj.789", null)); Assert.IsTrue(PriceItemList.list.Any(l => l.FilePath == "jjj.AAA")); var wcf = new WCFPriceProcessorService(); wcf.DeleteItemInInboundList(checkedItem.GetHashCode()); Assert.IsFalse(PriceItemList.list.Any(l => l.FilePath == "jjj.AAA")); }
public void SortListTest() { var a = new PriceProcessItem(true, 1, 1, 1, "test.txt", null); a.FileTime = DateTime.Now.AddHours(-1); PriceItemList.AddItem(a); var b = new PriceProcessItem(true, 1, 1, 1, "test.txt", null); b.FileTime = DateTime.Now; PriceItemList.AddItem(b); PriceProcessItem c = PriceItemList.GetLastestDownloaded(1); Assert.AreEqual(c, b, "Последний добавленный прайс-лист выбран некорреткно."); }
public void Priritize_by_downloaded() { PriceItemList.list.Add(new PriceProcessItem(false, 1, 1, 1, "", null)); PriceItemList.list.Add(new PriceProcessItem(true, 1, 1, 1, "", null) { CreateTime = new DateTime(2012, 12, 3, 9, 10, 0) }); PriceItemList.list.Add(new PriceProcessItem(true, 1, 1, 1, "", null) { CreateTime = new DateTime(2012, 12, 3, 9, 00, 0) }); var priceProcessItems = PriceItemList.GetPrioritizedList(); Assert.That(priceProcessItems[0].Downloaded, Is.True); Assert.That(priceProcessItems[0].CreateTime, Is.EqualTo(new DateTime(2012, 12, 3, 9, 0, 0))); }
/// <summary> /// Удаляем дублирующиеся прайс-лист: переподложенные и два раза скаченные /// </summary> protected void DeleteDoubleItems() { int i = PriceItemList.list.Count - 1; while (i > -1) { var item = PriceItemList.list[i]; var downloadedItem = PriceItemList.GetLastestDownloaded(item.PriceItemId); if (downloadedItem == null || item == downloadedItem) { //если нет скаченных прайс-листов, то элемент оставляем i--; } else { //ищем элемент в рабочих нитках var thread = FindByProcessItem(item); if (thread != null) { //если элемент найден, то останавливаем нитку, файл будет удалять нитка при останове _logger.InfoFormat("Останавливаем нитку из-за дублирующего прайс-листа {0}", thread.TID); thread.AbortThread(); _logger.InfoFormat("Останов нитки успешно вызван {0}", thread.TID); } else { //если нет нитки на формализацию, то просто удаляем файл из папки try { global::Common.Tools.FileHelper.FileDelete(item.FilePath); } catch (Exception ex) { _logger.ErrorFormat("Не получилось удалить дублирующий файл {0}\r\n{1}", item.FilePath, ex); } } ///Из очереди на обработку файл элемент удаляется сразу, а если была рабочая нитка, ///то она удаляется в ProcessThreads, когда остановиться или ее останов принудительно прервут по таймауту PriceItemList.list.Remove(item); i--; } } }
public void NotRetransIfExistsItem() { var path = Path.Combine(Settings.Default.BasePath, priceItem.Id + ".dbf"); PriceItemList.AddItem(new PriceProcessItem(false, supplier.Prices[0].Id, supplier.Prices[0].Costs[0].Id, priceItem.Id, path, null)); File.WriteAllBytes(path, new byte[0]); var ex = Assert.Throws <FaultException>(() => priceProcessor.RetransPrice(new WcfCallParameter { LogInformation = new LogInformation { ComputerName = "test", UserName = "******" }, Value = priceItem.Id })); Assert.That(ex.Message, Is.EqualTo("Данный прайс-лист находится в очереди на формализацию")); }