/// <summary> /// Составитель тела письма (формат Pain Text) /// </summary> /// <param name="docNumber"></param> /// <param name="parserResult"></param> /// <returns>Строка для письма</returns> private static string ComposeMailTextBodyOld(string docNumber, WebParserResult parserResult) { StringBuilder sbMessageText = new StringBuilder($"Информация по документу № {docNumber}.\r\n"); sbMessageText.AppendLine("----------------------------\r\n"); if (parserResult.ParserStatus == "Not found") { sbMessageText.AppendLine("Документ не найден. Попробуйте указать другой номер документа."); } else if (parserResult.ParserStatus == "Error") { sbMessageText.AppendLine("Ошибка получения информации.\r\n"); sbMessageText.AppendLine(parserResult.ParserError); } else if (parserResult.ParserStatus == "Ok") { sbMessageText.AppendLine("Информация найдена."); sbMessageText.AppendLine($"Последняя информация по делу от {parserResult.LastDealDate}."); sbMessageText.AppendLine($"Ссылка на дело в картотеке: {parserResult.CardUrl}."); sbMessageText.AppendLine($"Ссылка на документ: {parserResult.DocumentPdfUrl}."); } else { sbMessageText.AppendLine($"Ошибка: неизвестный статус обработки: {parserResult.ParserStatus}"); } return(sbMessageText.ToString()); }
private string GetDocumentFullPath(WebParserConfig parserConfig, WebParserResult parserResult, string addinFullPath) { string downloadsFolderName = "Downloads"; string addinConfigName = parserConfig.AddinConfigName; string parserDir = Path.GetDirectoryName(addinFullPath); string dealName = parserResult.DocumentPdfFolderName; string pdfDocumentName = Path.GetFileName(parserResult.DocumentPdfUrl); return(Path.Combine(parserDir, downloadsFolderName, addinConfigName, dealName, pdfDocumentName)); }
public WebParserResult ParserCheck(WebParserConfig parserConfig) { string fileNameParser = this.GetParserPath(); WebParserResult result = new WebParserResult() { ParserStatus = "Ok", ParserError = "" }; Excel.Application xlApp = null; try { Console.WriteLine("Parser test starting. Please wait..."); // Application xlApp = new Excel.Application(); // открываем Excel файл Excel.Workbook xlWb1 = xlApp.Workbooks.Open(fileNameParser); xlApp.Run(@"ParserAddinTest"); //xlWb1.Close(false); // закрываем книгу без сохранения xlApp.DisposeChildInstances(); } catch (Exception exc) { result.ParserStatus = "Error"; result.ParserError = exc.Message; } finally { if (xlApp != null) { xlApp.Quit(); //закрываем Excel xlApp.Dispose(); } } return(result); }
/// <summary> /// Составитель тела письма (формат Pain Text) /// </summary> /// <param name="docNumber"></param> /// <param name="parserResult"></param> /// <returns>Строка для письма</returns> private static string ComposeMailTextBody(string docNumber, WebParserResult parserResult) { string textTemplateRelativePath = "MailTemplate\\TextTemplate.html"; string startupPath = Path.GetDirectoryName(Process.GetCurrentProcess().MainModule.FileName); string textTemplateFullPath = Path.Combine(startupPath, textTemplateRelativePath); string parseMessage = ""; switch (parserResult.ParserStatus) { case "Not found": parseMessage = "Документ не найден. Попробуйте указать другой номер дела."; break; case "Error": parseMessage = "Ошибка получения информации.<br>" + parserResult.ParserError; break; case "Ok": parseMessage = "Результат:"; break; default: parseMessage = "Ошибка составления результата."; break; } string template = File.ReadAllText(textTemplateFullPath); string result = Engine.Razor.RunCompile(template, "textTemplateKey", null, new { DocNumber = docNumber, Result = parseMessage, LastDealDate = parserResult.LastDealDate.ToShortDateString(), CardUrl = parserResult.CardUrl, DocumentPdfUrl = parserResult.DocumentPdfUrl, ParserStatus = parserResult.ParserStatus }); return(result); }
public WebParserResult ParseWebSite(WebParserConfig parserConfig, WebParserParams parserParam) { string fileNameAddin = this.GetParserPath(); string parserConfigName = parserConfig.AddinConfigName; WebParserResult parserResult = new WebParserResult() { ParserStatus = "Ok", ParserError = "" }; Excel.Application xlApp = null; Excel.Workbook xlWb1 = null; Excel.Workbook xlWb2 = null; Excel.Worksheet xlSht = null; try { // Запустить Application xlApp = new Excel.Application(); // Открыть надстройку xlWb1 = xlApp.Workbooks.Open(fileNameAddin); // Создать лист для ввода данных // Excel.Workbook xlWb2 = xlApp.Workbooks.Open(fileNameExcelWorkbook); xlWb2 = xlApp.Workbooks.Add(); //Excel.Worksheet xlSht = xlWb2.Sheets["Лист1"]; //имя листа в файле xlSht = xlWb2.Sheets[1] as Excel.Worksheet; //имя листа в файле //xlApp.Visible = true; //xlApp.DisplayAlerts = false; int startRowNumber = parserConfig.StartRowNumber; // Вывод заголовка if (startRowNumber > 1) { xlSht.Cells[1, parserConfig.DealNumberColumn].Value = "Номер документа"; xlSht.Cells[1, parserConfig.IsTrackColumn].Value = "Обрабатывать"; } // Заполнение исходных данных на листе xlSht.Cells[startRowNumber, parserConfig.DealNumberColumn].Value = parserParam.DocumentNumber; xlSht.Cells[startRowNumber, parserConfig.IsTrackColumn].Value = "Да"; // Запуск парсера var res = xlApp.Run(@"StartParser", parserConfigName); if (!String.IsNullOrEmpty((string)res)) { throw new Exception((string)res); } object row1 = xlSht.Cells[startRowNumber, parserConfig.ResultNumberColumn].Value; if (row1 == null) { parserResult.ParserStatus = "Not found"; } else { string col2HyperlinkAddress = xlSht.Cells[startRowNumber, parserConfig.DealNumberHyperlinkColumn].Hyperlinks[1].Address; string col3 = xlSht.Cells[startRowNumber, parserConfig.DocumentPdfFolderNameColumn].Value.ToString(); string col4 = xlSht.Cells[startRowNumber, parserConfig.DocumentPdfUrlColumn].Value.ToString(); DateTime col5 = (DateTime)xlSht.Cells[startRowNumber, parserConfig.LastDealDateColumn].Value; parserResult.CardUrl = col2HyperlinkAddress; parserResult.LastDealDate = col5; parserResult.DocumentPdfUrl = col4; parserResult.DocumentPdfFolderName = col3; parserResult.HasAttachment = string.IsNullOrEmpty(col4) ? false : true; parserResult.DocumentPfdPath = GetDocumentFullPath(parserConfig, parserResult, fileNameAddin); } } catch (Exception exc) { parserResult.ParserStatus = "Error"; parserResult.ParserError = exc.Message; } finally { if (xlWb2 != null) { xlWb2.Saved = true; } xlApp.DisposeChildInstances(); if (xlApp != null) { xlApp.Quit(); //закрываем Excel xlApp.Dispose(); } } return(parserResult); }
/// <summary> /// Составление и отправка Email. /// Что нужно подготовить: /// 0. Настройка для отправки письма: /// - параметры почтового сервера (host, port, ssl) /// - данные отправителя (username, password) /// - email отправителя (может быть равен username по умолчанию) /// 1. Имена файлов для вложения в письмо /// 2. Адрес получателя /// 3. Тема письма /// 4. Данные для тела письма (Номер документа, дата дела...) /// </summary> static void sendEmailByNewInterface(EmailSenderConfig senderConfig, string attachFileName, string AddressTo, string DocNumber, DateTime RequestDate, WebParserResult parserResult) { // Тема письма string mailSubject = $"--==Документ {DocNumber} от {RequestDate} ==--"; // Тело письма string mailBodyText = ComposeMailTextBody(DocNumber, parserResult); string mailBodyHtml = ComposeMailHtmlBody(DocNumber, parserResult); EmailParameters emailParameters = new EmailParameters() { message = new EmailMessageParameters() { AddressFrom = senderConfig.username, AddressFromAlias = senderConfig.usernameAlias, AddressTo = AddressTo, Subject = mailSubject, BodyText = mailBodyText, BodyHtml = mailBodyHtml } }; if (!string.IsNullOrEmpty(attachFileName)) { emailParameters.attachments = new List <EmailAttachmentParameters>() { new EmailAttachmentParameters() { FilePath = attachFileName, FileName = Path.GetFileName(attachFileName), MediaType = MediaTypeNames.Application.Pdf } }; } IEmailSender emailSender = new OnlineEmailSender(senderConfig); IEmailComposer emailComposer = new OnlineEmailComposer(emailParameters, emailSender); emailComposer.ComposeAndSendEmail(); }
/// <summary> /// Обработка элемента очереди ParserQueue /// </summary> /// <returns>Кол-во обработанных элементов очереди</returns> public static int processQueue(ParserWebQueueParameters parserWebQueueParameters, EmailSenderConfig emailSenderConfig, WebParserConfig webParserConfig) { // Создание обработчика очереди IParserWebQueue parserWebQueue = new OnlineParserWebQueue(parserWebQueueParameters); ParserQueueElement elt = null; try { // Получение элемента очереди elt = parserWebQueue.GetNewElement(); if (elt == null) { Console.WriteLine("No new elements to process."); return(0); } // Пометка статусом "Взят в обработку" parserWebQueue.SetQueueElementStatus(elt.ParserQueueId, 2); // Запустить web-parser Console.WriteLine("Start parsing website for Document Number: {0}", elt.ClientDocNum); WebParserResult parserResult = ParseDocument(webParserConfig, elt.ClientDocNum); Console.WriteLine("parser result: {0}. Last date: {1}, pdf link: {2}", parserResult.ParserStatus, parserResult.LastDealDate, parserResult.CardUrl); if (parserResult.ParserStatus != "Ok") { Console.WriteLine("Error: {0}", parserResult.ParserError); } // Отправка Email string fileName = parserResult.DocumentPfdPath; string emailTo = elt.ClientEmail; string docNumber = elt.ClientDocNum; DateTime requestDate = elt.CreatedTimeUtc; sendEmailByNewInterface(emailSenderConfig, fileName, emailTo, docNumber, requestDate, parserResult); printParserQueueElement(elt); // Пометка элемента очереди как успешно обработанный parserWebQueue.SetQueueElementStatus(elt.ParserQueueId, 3); return(1); } catch (Exception exc) { Console.WriteLine("Error: {0}", exc.Message); // Установить статус "Ошибка обработки" if (elt != null) { parserWebQueue.SetQueueElementStatus(elt.ParserQueueId, 4, exc.Message); } } return(0); }
public void Getelement_ElementHasContent_ContentOfElement() { WebParserResult result = WebParser.GetElementById("http://laboru.co/hello.tx"); Assert.AreEqual(true, result.Status == WebParserResultStatus.Success); }