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);
                }
            }
        }
Beispiel #2
0
        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());
            }
        }
Beispiel #4
0
        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("Данный прайс-лист находится в очереди на формализацию"));
        }