Пример #1
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));
        }
        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);
                }
            }
        }
Пример #3
0
        public void GetAllNamesTest()
        {
            var supplier = TestSupplier.CreateNaked();
            var price    = supplier.Prices[0];

            priceItem = price.Costs.First().PriceItem;
            var format = price.Costs.Single().PriceItem.Format;

            format.PriceFormat   = PriceFormatType.NativeDelim;
            format.Delimiter     = ";";
            format.FName1        = "F2";
            format.FFirmCr       = "F3";
            format.FQuantity     = "F5";
            format.FRequestRatio = "F6";
            var costFormRule = price.Costs.Single().FormRule;

            costFormRule.FieldName = "F4";

            session.Save(price);
            Close();

            File.Copy(Path.GetFullPath(@"..\..\Data\222.txt"), Path.Combine(basepath, priceItem.Id + ".txt"));

            var item  = PriceProcessItem.GetProcessItem(priceItem.Id);
            var names = item.GetAllNames();

            Assert.That(names.Count(), Is.EqualTo(35));
        }
Пример #4
0
        public void Do_not_put_more_than_one_price_with_same_setting_to_formalization()
        {
            Settings.Default.MaxRetransThread = 3;
            var item = new PriceProcessItem(false, 1, 1, 1, "1.txt", null);

            item.CreateTime = item.CreateTime.AddMinutes(-10);
            File.WriteAllText("1.txt", "");
            PriceItemList.list.Add(item);

            item            = new PriceProcessItem(false, 3, 3, 3, "2.txt", null);
            item.CreateTime = item.CreateTime.AddMinutes(-10);
            File.WriteAllText("3.txt", "");
            PriceItemList.list.Add(item);

            item            = new PriceProcessItem(false, 2, 2, 2, "2.txt", 1);
            item.CreateTime = item.CreateTime.AddMinutes(-10);
            File.WriteAllText("2.txt", "");
            PriceItemList.list.Add(item);


            handler.ProcessData();
            Assert.That(handler.Threads.Count, Is.EqualTo(3));
            Assert.IsTrue(handler.FindByPriceItemId(1));
            Assert.IsTrue(handler.FindByPriceItemId(3));
            Assert.That(handler.Threads[0].ProcessItem.PriceCode, Is.EqualTo(1));
            Assert.That(handler.Threads[1].ProcessItem.PriceCode, Is.EqualTo(3));
        }
        public void Parse_price_item_id()
        {
            var id = PriceProcessItem.ParseId(".db");

            Assert.That(id, Is.EqualTo(0));
            id = PriceProcessItem.ParseId("1.db");
            Assert.That(id, Is.EqualTo(1));
            Assert.That(PriceProcessItem.ParseId("d1287_9972279.txt"), Is.EqualTo(1287));
        }
        public void IsReadyForProcessing()
        {
            var item       = new PriceProcessItem(false, 1, 1, 1, "", 1);
            var processing = new List <PriceProcessThread> {
                new PriceProcessThread(item, "")
            };

            Assert.That(item.IsReadyForProcessing(processing), Is.False);
        }
        protected virtual PriceProcessItem CreatePriceProcessItem(string normalName)
        {
            var item = new PriceProcessItem(true,
                                            Convert.ToUInt64(CurrPriceCode),
                                            CurrCostCode,
                                            CurrPriceItemId,
                                            normalName,
                                            CurrParentSynonym);

            return(item);
        }
 public PriceProcessThread(PriceProcessItem item, string prevErrorMessage, bool runThread = true)
 {
     StartDate    = DateTime.UtcNow;
     ProcessItem  = item;
     ProcessState = PriceProcessState.None;
     _log         = new PriceProcessLogger(prevErrorMessage, item);
     _thread      = new Thread(ThreadWork);
     _thread.Name = $"PPT{_thread.ManagedThreadId}";
     if (runThread)
     {
         _thread.Start();
     }
 }
Пример #9
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, "Последний добавленный прайс-лист выбран некорреткно.");
        }
Пример #11
0
        public void Respect_file_extension()
        {
            var supplier = TestSupplier.CreateNaked();
            var price    = supplier.Prices[0];

            priceItem = price.Costs.First().PriceItem;
            var format = price.Costs.Single().PriceItem.Format;

            format.PriceFormat = PriceFormatType.UniversalXml;
            session.Save(price);
            Close();

            File.Copy(Path.GetFullPath(@"..\..\Data\222.txt"), Path.Combine(basepath, priceItem.Id + ".txt"));
            File.Copy(Path.GetFullPath(@"..\..\Data\Respect_file_extension.xml"), Path.Combine(basepath, priceItem.Id + ".xml"));
            var item  = PriceProcessItem.GetProcessItem(priceItem.Id);
            var names = item.GetAllNames();

            Assert.That(names.Count(), Is.EqualTo(2));
        }
        public void Get_all_names()
        {
            var basepath = Settings.Default.BasePath;

            if (!Directory.Exists(basepath))
            {
                Directory.CreateDirectory(basepath);
            }

            var source      = Path.GetFullPath(@"..\..\Data\FarmaimpeksPrice.xml");
            var destination = Path.GetFullPath(Path.Combine(basepath, priceItem.Id.ToString() + ".xml"));

            File.Copy(source, destination);

            var item  = PriceProcessItem.GetProcessItem(priceItem.Id);
            var names = item.GetAllNames();

            Assert.That(names.Count(), Is.EqualTo(9818));
        }
Пример #13
0
        public void CatchWarningFormalizeExceptionTest()
        {
            var priceItemId        = CatchWarningFormalizeExceptionTestPrepareData();
            var priceProcessItem   = new PriceProcessItem(false, 0, null, priceItemId, @"Data\781.dbf", null);
            var priceProcessThread = new PriceProcessThread(priceProcessItem, String.Empty, false);
            var outPriceFileName   = Path.Combine(Settings.Default.BasePath, priceProcessItem.PriceItemId + Path.GetExtension(priceProcessItem.FilePath));

            Common.Tools.FileHelper.InitDir(Settings.Default.BasePath);
            FlushAndCommit();
            priceProcessThread.ThreadWork();
            Assert.False(String.IsNullOrEmpty(priceProcessThread.CurrentErrorMessage), "Отсутствует информация о произошедшем исключении");
            Assert.True(priceProcessThread.FormalizeOK, "Формализация закончилась с ошибкой");

            var logs = Inforoom.PriceProcessor.Models.FormLog.Queryable
                       .Where(l => l.PriceItemId == priceItemId &&
                              l.ResultId == (int?)FormResults.Error)
                       .ToList();

            Assert.That(logs.Implode(x => x.Addition), Does.Contain("Прайс отключен по причине : FirmStatus"),
                        "Информация о предупреждении отсутствует в БД");
            //Проверяем, что копирование файла прошло успешно
            Assert.IsTrue(File.Exists(outPriceFileName));
        }
 /// <summary>
 /// Поиск рабочей нити по элементу PriceProcessItem
 /// </summary>
 /// <param name="item">Ссылка на элемент PriceProcessItem, по которому осуществляетс поиск</param>
 /// <returns>Найденая нитка или null</returns>
 private PriceProcessThread FindByProcessItem(PriceProcessItem item)
 {
     return(pt.Find(thread => (thread.ProcessItem == item)));
 }
        public void Ignore_non_price_files()
        {
            var item = PriceProcessItem.TryToLoadPriceProcessItem("Thumbs.db");

            Assert.That(item, Is.Null);
        }
Пример #16
0
 public PriceProcessLogger(string prevErrorMessage, PriceProcessItem priceProcessItem)
 {
     _prevErrorMessage = prevErrorMessage;
     _processItem      = priceProcessItem;
     begin             = DateTime.Now;
 }