public FakeWaybillLANSourceHandler(string readerClassName, uint supplierId) { FillSourcesTable(); drLanSource = dtSources.Rows.Cast <DataRow>().FirstOrDefault(r => Convert.ToUInt32(r["FirmCode"]) == supplierId); reader = ReflectionHelper.GetDocumentReader <BaseDocumentReader>(readerClassName, Assembly.GetExecutingAssembly()); _currentDocumentType = new WaybillType(); }
protected string[] GetFileFromSource(uint supplierId, BaseDocumentReader documentReader) { var pricePath = String.Empty; try { // Путь к папке, из которой нужно забирать накладную // \FTPOptBox\<Код постащика>\Waybills\ (или \Rejects\) pricePath = Path.Combine(Settings.Default.FTPOptBoxPath, supplierId.ToString().PadLeft(3, '0'), _currentDocumentType.FolderName); // Получаем все файлы из этой папки var ff = Directory.GetFiles(pricePath); // Отсекаем файлы с некорректным расширением var newFiles = new List <string>(); //задержка что бы избежать канликтов в dfs Thread.Sleep(500); foreach (var newFileName in ff) { if (Array.Exists(documentReader.ExcludeExtentions, s => s.Equals(Path.GetExtension(newFileName), StringComparison.OrdinalIgnoreCase))) { // Если есть файл с некорректным разрешением, удаляем его if (File.Exists(newFileName)) { File.Delete(newFileName); } } else if (DateTime.Now.Subtract(File.GetLastWriteTime(newFileName)).TotalMinutes > Settings.Default.FileDownloadInterval) { newFiles.Add(newFileName); } } return(documentReader.UnionFiles(newFiles.ToArray())); } catch (Exception e) { Log(e, String.Format("Не удалось получить список файлов для папки {0}", pricePath)); return(new string[] { }); } }
protected bool ProcessWaybillFile(string inFile, DataRow drCurrent, BaseDocumentReader documentReader) { //Массив файлов var files = new[] { inFile }; var dir = inFile + ExtrDirSuffix; if (ArchiveHelper.IsArchive(inFile)) { // Получаем файлы, распакованные из архива files = Directory.GetFiles(dir, "*.*", SearchOption.AllDirectories); } if (!Directory.Exists(dir)) { Directory.CreateDirectory(dir); } try { files = documentReader.DivideFiles(dir, files); } catch (Exception exDivide) { var supplierId = Convert.ToUInt32(drCurrent[WaybillSourcesTable.colFirmCode]); DocumentReceiveLog.Log(supplierId, null, Path.GetFileName(CurrFileName), _currentDocumentType.DocType, String.Format("Не удалось разделить файлы: {0}", exDivide)); return(false); } var processed = false; foreach (var file in files) { if (MoveWaybill(inFile, file, drCurrent, documentReader)) { processed = true; } } return(processed); }
protected bool MoveWaybill(string archFileName, string fileName, DataRow drCurrent, BaseDocumentReader documentReader) { using (var cleaner = new FileCleaner()) { var supplierId = Convert.ToUInt32(drCurrent[WaybillSourcesTable.colFirmCode]); try { var addresses = With.Connection(c => documentReader.ParseAddressIds(c, supplierId, archFileName, fileName)); var formatFile = documentReader.FormatOutputFile(fileName, drCurrent); cleaner.Watch(fileName); cleaner.Watch(formatFile); foreach (var addressId in addresses) { var log = DocumentReceiveLog.LogNoCommit(supplierId, (uint)addressId, formatFile, _currentDocumentType.DocType, "Получен с нашего FTP"); _logger.InfoFormat("WaybillLanSourceHandler: обработка файла {0}", fileName); documentReader.ImportDocument(log, fileName); new WaybillService().Process(new[] { log }.ToList()); } } catch (Exception e) { var message = "Не удалось отформатировать документ.\nОшибка: " + e; _logger.ErrorFormat("WaybillLanSourceHandler: {0}, archfilename {1}, fileName {2}, error {3}", message, archFileName, fileName, e); DocumentReceiveLog.Log(supplierId, null, fileName, _currentDocumentType.DocType, message); return(false); } } return(true); }