public override void GetFilesFromSource(CertificateTask task, IList <CertificateFile> files) { var supplierId = task.DocumentLine.Document.FirmCode; var config = WaybillProtekHandler.Configs.FirstOrDefault(c => c.SupplierId == supplierId); if (config == null) { throw new Exception(String.Format("Не найдена конфигурация для получения сертификатов от поставщика № {0}", supplierId)); } new WaybillProtekHandler().WithService(config.Url, s => { foreach (var id in task.DocumentLine.ProtekDocIds) { var response = s.getSertImages(new getSertImages(config.ClientId, config.InstanceId, id.DocId)); var index = 1; foreach (var sertImage in [email protected]) { var tempFile = Path.GetTempFileName(); File.WriteAllBytes(tempFile, sertImage.image); files.Add(new CertificateFile(tempFile, id.DocId + "-" + index++) { Extension = ".tif" }); } } }); if (files.Count == 0) { task.DocumentLine.CertificateError = "Поставщик не предоставил ни одного сертификата"; } }
public override void GetFilesFromSource(CertificateTask task, IList <CertificateFile> files) { var client = new WebClient(); var uri = new Uri(task.CertificateSource.LookupUrl); client.Credentials = Util.GetCredentials(uri); var data = client.UploadValues(uri, new NameValueCollection { { "Code", task.DocumentLine.Code }, { "SerialNumber", task.DocumentLine.SerialNumber }, }); var doc = XDocument.Load(new MemoryStream(data)); foreach (var cert in doc.XPathSelectElements("/ArrayOfCert/Cert")) { var fileUri = (string)cert.XPathSelectElement("Uri"); var name = (string)cert.XPathSelectElement("Name"); var localFile = Path.GetTempFileName(); Log.DebugFormat("Будет производиться закачка файла {0} в локальный файл {1}", fileUri, localFile); client.DownloadFile(fileUri, localFile); files.Add(new CertificateFile(localFile, fileUri, Path.GetFileName(fileUri)) { Note = name }); } if (files.Count == 0) { task.DocumentLine.CertificateError = "Поставщик не предоставил ни одного сертификата"; } }
private void CheckErrors(CertificateTask task, MemoryAppender memoryAppender, TestCertificateSourceHandler handler, uint errorCount, bool idEquals = false) { var firstEvents = memoryAppender.GetEvents(); var firstErrors = firstEvents.Where(item => item.Level >= Level.Warn); Assert.That(firstErrors.Count(), Is.EqualTo(errorCount), firstErrors.Implode(e => e.MessageObject)); //кол-во ошибок должно быть равно 1 Assert.That(handler.Errors.Count, Is.EqualTo(1)); var info = handler.Errors[task.GetErrorId()]; Assert.That(info.ErrorCount, Is.EqualTo(errorCount)); Assert.That(info.Exception.Message, Is.StringStarting("Возникла ошибка при обработке задачи: ")); if (idEquals) { Assert.That(info.Task.Id, Is.EqualTo(task.Id)); } Assert.That(info.Task.CertificateSource.Id, Is.EqualTo(task.CertificateSource.Id)); Assert.That(info.Task.CatalogProduct.Id, Is.EqualTo(task.CatalogProduct.Id)); Assert.That(info.Task.SerialNumber, Is.EqualTo(task.SerialNumber)); //Задача должна быть удалена из базы данных var deletedTask = CertificateTask.Queryable.FirstOrDefault(t => t.Id == task.Id); Assert.That(deletedTask, Is.Null); }
private void AddFiles(CertificateTask task, string certificatesPath, string certificateFilenameMask, IList <CertificateFile> list) { if (String.IsNullOrEmpty(certificateFilenameMask)) { return; } if (certificateFilenameMask.Length < 5) { Log.WarnFormat("Для строки документа {0} загрузка сертификатов производиться не будет тк длинна маски '{1}' меньше 5", task.DocumentLine.Id, certificateFilenameMask); return; } var files = Directory.GetFiles(certificatesPath, certificateFilenameMask + "*"); foreach (var file in files) { var tempFile = Path.GetTempFileName(); File.Copy(file, tempFile, true); list.Add(new CertificateFile(tempFile, Path.GetFileName(file), file) { Extension = ".tif" }); } }
public override void GetFilesFromSource(CertificateTask task, IList <CertificateFile> files) { var maps = Session.Query <CertificateSourceCatalog>() .Where(c => c.SerialNumber == task.SerialNumber && c.SupplierCode == task.DocumentLine.Code && c.CertificateSource == task.CertificateSource) .ToArray(); if (maps.Length == 0) { task.DocumentLine.CertificateError = "Нет записи в таблице перекодировки"; return; } foreach (var map in maps.Where(m => !String.IsNullOrWhiteSpace(m.OriginFilePath))) { var path = map.OriginFilePath; if (path[0] == Path.DirectorySeparatorChar) { path = path.Slice(1, -1); } var file = Path.Combine(new Uri(task.CertificateSource.LookupUrl).LocalPath, path); if (File.Exists(file)) { var tmp = Cleaner.TmpFile(); File.Copy(file, tmp, true); files.Add(new CertificateFile(tmp, map.OriginFilePath, map.OriginFilePath, task.CertificateSource) { Note = map.Note }); } else { task.DocumentLine.CertificateError = String.Format("Файл сертификата '{0}' не найден на ftp АналитФармация", file); } } }
public void Download_source() { var testProduct = new TestProduct("Тестовый продукт"); session.Save(testProduct); var product = Product.Find(testProduct.Id); var source = new KatrenSource(); var certificateSource = new CertificateSource(); certificateSource.SourceClassName = source.GetType().Name; session.Save(certificateSource); var line = new DocumentLine { ProductEntity = product, SerialNumber = "012011", }; var sourceCatalog = new CertificateSourceCatalog { CertificateSource = certificateSource, SerialNumber = line.SerialNumber, CatalogProduct = product.CatalogProduct, SupplierCode = "34266440", SupplierProducerCode = "13483667", OriginFilePath = KatrenSource.ToOriginFileName(0x1B9EFC8), }; session.Save(sourceCatalog); var task = new CertificateTask(certificateSource, line); var files = source.GetCertificateFiles(task, null); Assert.That(files.Count, Is.EqualTo(4)); }
public void AccessToDeletedTask() { Clean(); var certificateSource = CreateRealSourceForSupplier(supplier); var serialNumber = Path.GetRandomFileName(); var catalog = TestCatalogProduct.Queryable.First(); var product = TestProduct.Queryable.First(p => p.CatalogProduct == catalog); var documentLine = CreateBodyLine(serialNumber, product); var realDocumentLine = Document.Find(documentLine.Waybill.Id).Lines[0]; var task = new CertificateTask(certificateSource, realDocumentLine); task.Save(); Assert.That(task.Id, Is.GreaterThan(0)); task.Delete(); Assert.That(task.Id, Is.GreaterThan(0)); Assert.That(task.CertificateSource, Is.Not.Null); Assert.That(task.CatalogProduct, Is.Not.Null); Assert.That(task.SerialNumber, Is.Not.Null.Or.Empty); var deletedTask = CertificateTask.Queryable.FirstOrDefault(t => t.Id == task.Id); Assert.That(deletedTask, Is.Null); Assert.That(task.SerialNumber, Is.Not.Null.Or.Empty); }
public override void GetFilesFromSource(CertificateTask task, IList <CertificateFile> files) { var certificatesPath = task.GetLocalPath(); if (!Directory.Exists(certificatesPath)) { Log.WarnFormat("Директория {0} для задачи сертификата {1} не существует", certificatesPath, task); return; } var foundFiles = task.DocumentLine.CertificateFilename .Split(new[] { ';' }, StringSplitOptions.RemoveEmptyEntries) .Select(n => Path.Combine(certificatesPath, n)) .Where(f => File.Exists(f)) .Select(f => new CertificateFile(CopyToTemp(f), Path.GetFileName(f), Path.GetFileName(f))) .ToList(); foundFiles.Each(files.Add); if (files.Count == 0) { task.DocumentLine.CertificateError = "Файл сертификата не найден на ftp АналитФармация"; } }
private void ClearError(CertificateTask certificateTask) { if (Errors.ContainsKey(certificateTask.GetErrorId())) { Errors.Remove(certificateTask.GetErrorId()); } }
public IList <CertificateFile> GetCertificateFiles(CertificateTask task, ISession session) { var result = new List <CertificateFile>(); Session = session; try { GetFilesFromSource(task, result); } catch { Cleaner.Dispose(); //Удаляем временные закаченные файлы result.ForEach(f => { try { if (File.Exists(f.LocalFile)) { File.Delete(f.LocalFile); } } catch (Exception exception) { Log.WarnFormat("Ошибка при удалении временного файла {0} по задаче {1}: {2}", f.LocalFile, task, exception); } }); throw; } finally { Session = null; } return(result); }
public override void GetFilesFromSource(CertificateTask task, IList <CertificateFile> files) { var catalogId = task.DocumentLine.ProductEntity.CatalogProduct.Id; var catalogs = GetSourceCatalog(catalogId, task.SerialNumber); if (catalogs.Count == 0) { task.DocumentLine.CertificateError = "Нет записи в таблице перекодировки"; return; } foreach (var certificateSourceCatalog in catalogs) { var filename = certificateSourceCatalog.OriginFilePath; var mask = String.Format("{0}*{1}", Path.GetFileNameWithoutExtension(filename), Path.GetExtension(filename)); var uri = new Uri(task.CertificateSource.LookupUrl); var dir = Path.Combine(Path.GetDirectoryName(uri.AbsolutePath) ?? "", Path.GetDirectoryName(certificateSourceCatalog.OriginFilePath) ?? ""); using (var ftpClient = new FTP_Client()) { ftpClient.PassiveMode = true; ftpClient.Connect(uri.Host, uri.Port); var credentials = Util.GetCredentials(uri); if (credentials != null) { ftpClient.Authenticate(credentials.UserName, credentials.Password); } else { ftpClient.Authenticate("anonymous", ""); } if (!String.IsNullOrEmpty(dir)) { ftpClient.SetCurrentDir(dir); } var ftpFiles = ftpClient.GetList(); var filesToDownload = ftpFiles.Tables["DirInfo"] .AsEnumerable() .Where(r => !Convert.ToBoolean(r["IsDirectory"])) .Select(r => r["Name"].ToString()) .Where(n => FileHelper.CheckMask(n, mask)) .ToList(); foreach (var file in filesToDownload) { var tempFileName = Path.GetTempFileName(); ftpClient.ReceiveFile(file, tempFileName); files.Add(new CertificateFile( tempFileName, certificateSourceCatalog.OriginFilePath, file, task.CertificateSource)); } } } if (files.Count == 0) { task.DocumentLine.CertificateError = "Файл сертификата не найден на ftp поставщика"; } }
private CertificateTask SuccessProcessCertificate(out string supplierCertificatesDir, out string certificateFile) { var certificateSource = CreateRealSourceForSupplier(supplier); var serialNumber = Path.GetRandomFileName(); var catalog = TestCatalogProduct.Queryable.First(); var product = TestProduct.Queryable.First(p => p.CatalogProduct == catalog); supplierCertificatesDir = Path.Combine(Settings.Default.FTPOptBoxPath, supplier.Id.ToString().PadLeft(3, '0'), "Certificats"); if (Directory.Exists(supplierCertificatesDir)) { Directory.Delete(supplierCertificatesDir, true); } Directory.CreateDirectory(supplierCertificatesDir); certificateFile = Path.GetRandomFileName(); File.WriteAllText(Path.Combine(supplierCertificatesDir, certificateFile), "Это тестовый сертификат", Encoding.GetEncoding(1251)); var documentLine = CreateBodyLine(serialNumber, product); var realDocumentLine = Document.Find(documentLine.Waybill.Id).Lines[0]; var task = new CertificateTask(certificateSource, realDocumentLine); task.Save(); documentLine.CertificateFilename = Path.GetFileNameWithoutExtension(certificateFile); documentLine.Save(); Assert.That(task.Id, Is.GreaterThan(0)); ProcessTestHandler(); return(task); }
protected override CertificateSource DetectSource(CertificateTask certificateTask) { if (OnSource != null) { return(OnSource(certificateTask)); } return(base.DetectSource(certificateTask)); }
public IList <CertificateFile> GetCertificateFiles(CertificateTask task, ISession session) { var list = new List <CertificateFile>(); var tempFile = Path.GetTempFileName(); list.Add(new CertificateFile(tempFile, Path.GetFileNameWithoutExtension(tempFile), Path.GetFileName(tempFile), task.CertificateSource)); return(list); }
public void Setup() { source = new NormanSource(); var line = new DocumentLine { CertificateFilename = "109127-1570912-r-1.jpg", ProductEntity = new Product() }; task = new CertificateTask(new CertificateSource(), line); files = new List <CertificateFile>(); }
private void SaveAndProcess(CertificateTask task, TestCertificateSourceHandler handler) { if (!session.Transaction.IsActive) { session.BeginTransaction(); } task.Save(); session.Transaction.Commit(); session.Flush(); handler.ProcessData(); }
public void DeleteLocalFilesOnError() { var source = new TestCertifcateSource(); var task = new CertificateTask(); try { source.GetCertificateFiles(task, session); Assert.Fail("Не возникло исключение NotImplementedException"); } catch (NotImplementedException) { } Assert.That(source.LocalFiles.TrueForAll(f => !File.Exists(f)), "Не должно существовать локальных файлов"); }
public void Ignore_duplicate_task() { Clean(); string dir; string file; var task = SuccessProcessCertificate(out dir, out file); var duplicateTask = new CertificateTask(task.CertificateSource, task.DocumentLine); session.Save(duplicateTask); ProcessTestHandler(); session.Refresh(task.DocumentLine); Assert.That(task.DocumentLine.Certificate.CertificateFiles.Count, Is.EqualTo(1)); }
private CertificateTaskErrorInfo FindError(CertificateTask task, Exception exception) { CertificateTaskErrorInfo result; if (Errors.ContainsKey(task.GetErrorId())) { result = Errors[task.GetErrorId()]; result.UpdateError(exception); } else { result = new CertificateTaskErrorInfo(task, exception); Errors[task.GetErrorId()] = result; } return(result); }
public void DeleteTempFolderTest() { var rostaSource = new RostaCertificateSource(); var product = session.Query <Product>().First(p => p.CatalogProduct != null); var documentLog = new TestDocumentLog { Supplier = _testSupplier, Client = _testUser.Client, DocumentType = DocumentType.Waybill, LogTime = DateTime.Now, FileName = Path.GetRandomFileName() + ".txt" }; var document = new TestWaybill(documentLog); session.Save(document); var realDocument = session.Load <Document>(document.Id); var task = new CertificateTask { SerialNumber = "123", CatalogProduct = product.CatalogProduct, }; task.CertificateSource = _source; task.DocumentLine = new DocumentLine { Code = "000002", SerialNumber = "C392764", Document = realDocument, ProductEntity = product }; Save(task.DocumentLine); Save(task); var certificsteCatalog = new CertificateSourceCatalog { CertificateSource = _source, SerialNumber = task.DocumentLine.SerialNumber, SupplierCode = task.DocumentLine.Code, OriginFilePath = "005/0052602p-0.gif", CatalogProduct = product.CatalogProduct }; Save(certificsteCatalog); Reopen(); rostaSource.GetCertificateFiles(task, session); // Проверяем, что временная папка удалена Assert.That(Directory.Exists(rostaSource.TMPDownloadDir), Is.False); }
private CertificateTask CreateTask() { TestCertifcateSource.GetFilesFromSourceAction = null; TestCertifcateSource.CertificateExistsAction = null; CertificateSource.Assembly = typeof(TestCertifcateSource).Assembly; var source = CreateSourceForSupplier(supplier, "TestCertifcateSource"); var line = CreateBodyLine(); var task = new CertificateTask(); task.CertificateSource = source; task.CatalogProduct = session.Load <Catalog>(line.CatalogProduct.CatalogProduct.Id); task.SerialNumber = DocumentLine.EmptySerialNumber; task.DocumentLine = session.Load <DocumentLine>(line.Id); task.Save(); return(task); }
private void OnTaskError(CertificateTask task, Exception exception) { var errorInfo = FindError(task, exception); if (errorInfo.NeedSendError()) { _logger.ErrorFormat("Ошибка при обработки задачи для сертификата {0} : {1}", task, exception); } else { _logger.WarnFormat("Ошибка при обработки задачи для сертификата {0} : {1}", task, exception); } using (new TransactionScope()) { task.DocumentLine.CertificateError = exception.ToString(); ActiveRecordMediator.Save(task.DocumentLine); task.Delete(); } }
public void SimpleCreateTask() { var certificateSource = CreateSourceForSupplier(); var documentLine = CreateBodyLine(); var catalog = TestCatalogProduct.Queryable.First(); var serialNumber = Path.GetRandomFileName(); var realDocumentLine = Document.Find(documentLine.Waybill.Id).Lines[0]; var task = new CertificateTask(); using (new TransactionScope()) { task.CertificateSource = certificateSource; task.CatalogProduct = Catalog.Find(catalog.Id); task.SerialNumber = serialNumber; task.DocumentLine = realDocumentLine; task.Save(); } Assert.That(task.Id, Is.GreaterThan(0)); }
public override void GetFilesFromSource(CertificateTask task, IList <CertificateFile> files) { if (GetFilesFromSourceAction != null) { GetFilesFromSourceAction(task, files); return; } files.Add(new CertificateFile(Path.GetTempFileName(), "1")); files.Add(new CertificateFile(Path.GetTempFileName(), "1")); files.Each(f => { LocalFiles.Add(f.LocalFile); if (!File.Exists(f.LocalFile)) { File.WriteAllText(f.LocalFile, "this is test text"); } }); throw new NotImplementedException(); }
public override void GetFilesFromSource(CertificateTask task, IList <CertificateFile> files) { var certificatesPath = task.GetLocalPath(); if (!Directory.Exists(certificatesPath)) { Log.WarnFormat("Директория {0} для задачи сертификата {1} не существует", certificatesPath, task); return; } AddFiles(task, certificatesPath, task.DocumentLine.CertificateFilename, files); AddFiles(task, certificatesPath, task.DocumentLine.ProtocolFilemame, files); AddFiles(task, certificatesPath, task.DocumentLine.PassportFilename, files); if (files.Count == 0) { task.DocumentLine.CertificateError = "Файл сертификата не найден на ftp поставщика"; } }
public void Check_protek_source() { var source = new ProtekSource(); var task = new CertificateTask(); task.DocumentLine = new DocumentLine { ProtekDocIds = new List <ProtekDoc> { new ProtekDoc { DocId = 4938262 } } }; var files = source.GetCertificateFiles(task, null); Assert.That(files.Count, Is.GreaterThan(0)); var file = files[0]; Assert.That(file.ExternalFileId, Is.Not.Null); Assert.That(file.LocalFile, Is.Not.Null); Assert.That(file.Extension, Is.EqualTo(".tif")); }
public void Load_certificates() { var source = new NadezhdaFarmCertificateSource(); var line = new DocumentLine { ProductEntity = new Product(), CertificateFilename = "1473052_1_1.tif;1072321_1_0.tif;" }; var sourceConfig = new CertificateSource { FtpSupplier = new Supplier { Id = 1 } }; var task = new CertificateTask(sourceConfig, line); TestHelper.InitFiles(task.GetLocalPath(), new[] { "1473052_1_1.tif" }); Assert.IsTrue(source.CertificateExists(line)); var files = new List <CertificateFile>(); source.GetFilesFromSource(task, files); Assert.AreEqual(1, files.Count, task.DocumentLine.CertificateError); }
public override void GetFilesFromSource(CertificateTask task, IList <CertificateFile> files) { var certificatesPath = task.GetLocalPath(); if (!Directory.Exists(certificatesPath)) { Log.WarnFormat("Директория {0} для задачи сертификата {1} не существует", certificatesPath, task); return; } if (!String.IsNullOrEmpty(task.DocumentLine.CertificateFilename)) { AddFile(certificatesPath, task.DocumentLine.CertificateFilename, files); } if (files.Count == 0) { task.DocumentLine.CertificateError = "Файл сертификата не найден на ftp АналитФармация"; } }
public void TestGetFiles() { var rostaSource = new RostaCertificateSource(); var task = new CertificateTask(); task.CertificateSource = _source; task.DocumentLine = new DocumentLine { Code = "000002", SerialNumber = "C392764" }; var catalog = new CertificateSourceCatalog { CertificateSource = _source, SerialNumber = task.DocumentLine.SerialNumber, SupplierCode = task.DocumentLine.Code, OriginFilePath = "005/0052602p-0.gif" }; catalog.Save(); catalog = new CertificateSourceCatalog { CertificateSource = _source, SerialNumber = task.DocumentLine.SerialNumber, SupplierCode = task.DocumentLine.Code, OriginFilePath = "005/0052602pd-0.gif" }; catalog.Save(); var files = rostaSource.GetCertificateFiles(task, session); Assert.That(files.Count, Is.EqualTo(2)); var file = files[0]; Assert.That(File.Exists(file.LocalFile), Is.True, "файл не существует {0}", file.LocalFile); Assert.That(file.ExternalFileId, Is.EqualTo(@"005/0052602p-0.gif")); Assert.That(file.OriginFilename, Is.EqualTo(@"0052602p-0.gif")); Assert.That(file.Extension, Is.EqualTo(".GIF").IgnoreCase); }
public void Check_sia_source() { var source = new SiaSource(); var task = new CertificateTask { CertificateSource = new CertificateSource { LookupUrl = "http://*****:*****@online.penza.siaint.ru/Home/GetCert" } }; task.DocumentLine = new DocumentLine { Code = "84029", SerialNumber = "0020214" }; var files = source.GetCertificateFiles(task, null); Assert.That(files.Count, Is.GreaterThan(0)); var file = files[0]; Assert.That(File.Exists(file.LocalFile), Is.True, "файл не существует {0}", file.LocalFile); Assert.That(file.ExternalFileId, Is.EqualTo(@"http://online.penza.siaint.ru/Home/GetFile?NaimFile=DOCS\2014\4\5\707504403_1.GIF")); Assert.That(file.OriginFilename, Is.EqualTo(@"707504403_1.GIF")); Assert.That(file.Extension, Is.EqualTo(".GIF")); }