/// <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());
        }
Beispiel #2
0
        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));
        }
Beispiel #3
0
        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);
        }
Beispiel #5
0
        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);
        }
Beispiel #8
0
        public void Getelement_ElementHasContent_ContentOfElement()
        {
            WebParserResult result = WebParser.GetElementById("http://laboru.co/hello.tx");

            Assert.AreEqual(true, result.Status == WebParserResultStatus.Success);
        }