Advertisement
Guest User

Untitled

a guest
Feb 8th, 2019
124
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 44.25 KB | None | 0 0
  1. using System;  using System.Collections.Generic;  using System.Data;  using System.Globalization;  using System.IO;  using System.Linq;  using System.Net;  using System.Net.Mail;  using System.Text;  using System.Text.RegularExpressions;  using System.Threading;  using System.Web;  using EleWise.ELMA.ConfigurationModel;  using EleWise.ELMA.CRM.Enums;  using EleWise.ELMA.CRM.Models;  using EleWise.ELMA.Logging;  using EleWise.ELMA.Messaging.Email;  using EleWise.ELMA.Model.Common;  using EleWise.ELMA.Model.Managers;  using EleWise.ELMA.Runtime.Managers;  using EleWise.ELMA.Runtime.NH;  using EleWise.ELMA.Security;  using EleWise.ELMA.Security.Managers;  using EleWise.ELMA.Security.Models;  using EleWise.ELMA.Security.Services;  using EleWise.ELMA.Services;  using EleWise.ELMA.Threading;  using EleWise.ELMA.Extensions;  using Raven.Database.Linq.PrivateExtensions;  using Context = EleWise.ELMA.Model.Entities.ProcessContext.P_SkachivaniePotencialjnyhKlientov;    namespace EleWise.ELMA.Model.Scripts  {        /// <summary>      /// Модуль сценариев процесса "Скачивание потеныиальных клиентов"      /// </summary>      public class P_SkachivaniePotencialjnyhKlientov_Scripts : EleWise.ELMA.Workflow.Scripts.ProcessScriptBase<Context>      {            public static Guid KeyGuid = new Guid("ad5178d4-9a60-4743-bd0e-a5048eb1db95");          const string KeyString = "keystring";          const string Login = "elma";          const string Password = "ton39FLUtY?";    public static Uri UrlLead = new Uri("https://www.elma-bpm.ru:8080/bitrix/admin/form_result_list.php?mode=excel&lang=ru&WEB_FORM_ID=51");    public static int timeout = 6000;            public class FileException : Exception          {              public string File { get; set; }              public FileException(string message, string file)                  : base(message)              {                  File = file;              }          }            /// <summary>          /// Метод для запуска скачивания потенциальных клиентов          /// </summary>          /// <param name="context"></param>          public static void LeadsDownload(Context context)          {              System.Console.WriteLine("LeadsDownload");              new Thread(LeadsDownloadStatic).Start(AuthenticationService.GetCurrentUser().GetId());             //Sender.SendMessage(new[] { new MailAddress("vihareva@elewise.com") }, "test", "LeadsDownload", false, true, null, null, true);          }            public static void LeadsDownloadStatic(object userId) //s          {              System.Console.WriteLine("LeadsDownloadStatic");                         // lock ("CommonDatabase.CRM.CreateLeadsFromFileTread")              //{               //Sender.SendMessage(new[] { new MailAddress("vihareva@elewise.com") }, "test", "LeadsDownloadStatic 2", false, true, null, null, true);               new BackgroundTask(() => Locator.GetService<ISecurityService>().RunByUser(UserManager.Instance.Load((long)userId), () => LeadsDownloadStart()), typeof(P_SkachivaniePotencialjnyhKlientov_Scripts), "Скачивание потенциальных клиентов", "Скачивание потенциальных клиентов").Execute();              //}          }            public static void LeadsDownloadStart() //s          {              System.Console.WriteLine("LeadsDownloadStart");            //  Sender.SendMessage(new[] { new MailAddress("vihareva@elewise.com") }, "test", "LeadsDownloadStart", false, true, null, null, true);            int countData = 0;              try              {                  var data = EntityManager<LeadsDounloads, long>.Instance.FindAll().ToList();                    var exceptions = new Dictionary<LeadsDounloads, Exception>();                  var leads = new Dictionary<LeadsDounloads, IList<long>>();                    for (int i = 0; i < data.Count; i++)                  {                      var dataItem = data[i];                      if (i > 0)                          Thread.Sleep(TimeSpan.FromSeconds(2));                        try                      {                          leads[dataItem] = CreateLeadsFromFileDownload(2, dataItem);                      }                      catch (Exception ex)                      {                          exceptions[dataItem] = ex;                      }                  }                                    Thread.Sleep(TimeSpan.FromSeconds(2));                                    Exception exception = null;            try      {       //Sender.SendMessage(new[] { new MailAddress("vihareva@elewise.com") }, "test", "CreateLeadsFromFileDownloadNew у", false, true, null, null, true);                     CreateLeadsFromFileDownloadNew(2);      }      catch (Exception ex)      {       exception = ex;       //Sender.SendMessage(new[] { new MailAddress("vihareva@elewise.com") }, "test", "CreateLeadsFromFileDownloadNew к", false, true, null, null, true);                     //error = true;                     // CreateLeadsFromFileSendMail2("[Lead] Ошибки при получении или создании возможностей", ex.Message, null);      }            //++kosov скачивание с иностранных сайтов      try      {       var ppp = new P_SkachivaniePotencialjnyhKlientov_Scripts();       ppp.ImportFromOuterSite();      }      catch (Exception ex)      {       exception = ex;      }      //--kosov                    if (exceptions.Count == 0 && exception== null)                      CreateLeadsFromFileSendMail2("[Lead] Скачивание возможностей завершено", "Время обработки: " + DateTime.Now, null);                  else                  {                      var files = new List<MailMessageFile>();                              var message = string.Format("Время обработки: {0}\n\n{1}", DateTime.Now, string.Join("\n\n\n", exceptions.Select(ex => new { ex.Key.SubjectPostfix, Exception = ex.Value})                           .If(exception != null, l => l.Concat(new []{ new {SubjectPostfix = "FORM_ID=102 ", Exception = exception} }))        .Select(ex =>                          {                              var fileException = ex.Exception as FileException;                              if (fileException != null)                              {                                  files.Add(new MailMessageFile                                      {                                          FileName = TrimFileNameSpecialChars(ex.SubjectPostfix) + "",                                          FileBody = Encoding.GetEncoding(1251).GetBytes(fileException.File),                                          MediaType = "application/octet-stream"                                      });                                  return string.Format("{0}\nОшибка: {1}", ex.SubjectPostfix, ex.Exception.Message);                              }                              return string.Format("{0}\nОшибка: {1}\n{2}", ex.SubjectPostfix, ex.Exception.Message, ex.Exception.StackTrace);                          })));                      CreateLeadsFromFileSendMail2("[Lead] Ошибки при получении или создании возможностей", message, files);                  }                    data                      .SelectMany(i => i.Email.Split(",;".ToCharArray()).Select(e => new { Email = e.Trim(), DataItem = i }).Where(e => !string.IsNullOrWhiteSpace(e.Email)))                      .GroupBy(i => i.Email, i => i.DataItem)                      .Select(i => new { Email = i.Key, DataItems = i.ToList() })                      .ToList()                      .ForEach(e =>                               {                                   var errors = e.DataItems.Where(d => exceptions.ContainsKey(d)).ToList();                                   var newLeads = e.DataItems.SelectMany(d => leads.ContainsKey(d) ? leads[d] : new long[0]).ToList();                                   var message = string.Format("Время обработки: {0}\n\n{1}",                                       DateTime.Now,                                       string.Join("\n\n", new[]{                                      errors.Count > 0 ? string.Format("Ошибки при получении данных:\n{0}", string.Join("\n", errors.Select(er => string.Format("{0} ({1})", er.SubjectPostfix, er.Url.ToString().Replace("mode=excel&", "").Replace("&mode=excel", ""))))) : null,                                      newLeads.Count > 0 ? string.Format("Созданные возможности:\n{0}", string.Join("\n", newLeads.Select(nl => string.Format("https://elma.elewise.com/CRM/Lead/Details/{0}", nl)))) : null                                  }.Where(s => s != null)));                                   CreateLeadsFromFileSendMail("[Lead] Скачивание возможностей завершено", message, e.Email);                               });                }              catch (Exception ex)              {                  var user = AuthenticationService.GetCurrentUser<EleWise.ELMA.Security.Models.IUser>();                  CreateLeadsFromFileSendMail2("[Lead] Ошибки скачивания возможностей", string.Format("Ошибка: {0}: {1}\n{2}\n\nПользователь: {3}", ex.GetType(), ex.Message, ex.StackTrace, user.UserName), null);              }          }            private static string TrimFileNameSpecialChars(string fileName) //s          {           //Sender.SendMessage(new[] { new MailAddress("vihareva@elewise.com") }, "test", "TrimFileNameSpecialChars", false, true, null, null, true);           System.Console.WriteLine("TrimFileNameSpecialChars");              var regexSearch = new string(Path.GetInvalidFileNameChars()) + new string(Path.GetInvalidPathChars());              var r = new Regex(string.Format("[{0}]", Regex.Escape(regexSearch)));              fileName = r.Replace(fileName, "");              return fileName;          }            protected static IList<long> CreateLeadsFromFileDownload(int Remain, LeadsDounloads dataItem) //s          {              System.Console.WriteLine("CreateLeadsFromFileDownload");              // Sender.SendMessage(new[] { new MailAddress("vihareva@elewise.com") }, "test", "CreateLeadsFromFileDownload", false, true, null, null, true);                if (Remain == 0)                  return new long[0];                var lastReceived = dataItem.LastReceived ?? new DateTime(2011, 4, 7);              var culture = new CultureInfo("ru-Ru");              string file = null;                              while (Remain > 0)              {                  try                  {                      var content = "AUTH_FORM=Y&TYPE=AUTH&USER_LOGIN=" + dataItem.Login + "&USER_PASSWORD=" + dataItem.Password;                      var host = "https://www.elma-bpm.ru/bitrix/admin/form_result_list.php";                        var cookieContainer = new CookieContainer();                      var request = (HttpWebRequest)WebRequest.Create(host);                      request.Method = "get";                      request.CookieContainer = cookieContainer;       request.Timeout = timeout;                      using (request.GetResponse())                      {                      }                        request = (HttpWebRequest)WebRequest.Create(host + "?login=yes");                      request.ContentType = "application/x-www-form-urlencoded";                      request.Method = "post";                      request.CookieContainer = cookieContainer;                      request.ContentLength = content.Length;                      request.Timeout = timeout;                        using (var writer = new StreamWriter(request.GetRequestStream()))                      {                          writer.Write(content);                      }                        using (request.GetResponse())                      {                       //Sender.SendMessage(new[] { new MailAddress("vihareva@elewise.com") }, "test", "GetResponse", false, true, null, null, true);                       }                        request = (HttpWebRequest)WebRequest.Create(dataItem.Url + "&login=yes&set_filter=Y&find_date_create_1=" + lastReceived.Date.ToString("d", culture));                      request.Method = "get";                      request.CookieContainer = cookieContainer;                      request.Timeout = timeout;                        using (WebResponse response = request.GetResponse())                      {                          using (StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.GetEncoding(1251)))                          {                              file = reader.ReadToEnd();                          }                      }                                           // Sender.SendMessage(new[] { new MailAddress("vihareva@elewise.com") }, "test", file.ToString(), false, true, null, null, true);                                            break;                  }                  catch (Exception e)                  {                   //Sender.SendMessage(new[] { new MailAddress("vihareva@elewise.com") }, "test", "error - " + e.ToString(), false, true, null, null, true);                   if (--Remain == 0) throw;                      Thread.Sleep(TimeSpan.FromSeconds(5));                  }              }                var nowAdd = DateTime.Now.AddMinutes(10);                var table = new DataTable();                try              {               /*Sender.SendMessage(new[] { new MailAddress("vihareva@elewise.com") },                                         "test", "error2", false, true, null, null, true);*/                                                        var trMatches = Regex.Matches(Regex.Matches(file, "<table(.|\\n)+?</table>")[0].Value, "<tr>(.|\\n)+?</tr>");                    foreach (Match match in Regex.Matches(trMatches[0].Value, "<td>(.|\\n)+?</td>"))                  {                      table.Columns.Add(HttpUtility.HtmlDecode(match.Value.Substring(4, match.Value.Length - 9)), typeof(String));                  }                    for (var i = 1; i < trMatches.Count; i++)                  {                      var row = table.NewRow();                      var columnIndex = 0;                      foreach (Match match in Regex.Matches(trMatches[i].Value, "<td>(.|\\n)+?</td>"))                          row[columnIndex++] = Regex.Replace(HttpUtility.HtmlDecode(match.Value.Substring(4, match.Value.Length - 9))                                                             .Replace("<br>", "\n").Replace("<br />", "\n"), "<a.+?>", "").Replace("</a>", "");                      table.Rows.Add(row);                  }              }              catch (Exception ex)              {                  throw new FileException(ex.Message, file);              }                using (var unitOfWork = UnitOfWorkManager.Create(string.Empty, true))              {               //Sender.SendMessage(new[] { new MailAddress("vihareva@elewise.com") }, "test", "error3", false, true, null, null, true);               try                  {                        //var ColumnCreateDate = "Изменено";                      var ColumnCreateDate = "Дата создания";                      var ColumnFIO = "Ваше имя";                      var ColumnPost = "Должность";                      var ColumnCompanyName = "Название компании";                      var ColumnCity = "Город";                      var ColumnCountry = "Страна";                      var ColumnEmail = "E-mail";                      var ColumnPhone = "Телефон";                      var ColumnHow = "Как вы узнали о нас?";                      var ColumnReferer = "Referer";                      var ColumnQuestionText = "Текст вопроса";                      var ColumnCountEmploes = "Численность компании";                      var ColumnDateAndTheme = "Дата и тема";                      var ColumnContactPerson = "Контактное лицо";                      var ColumnResponsibleName = "ФИО ответственного менеджера";       //var ColumnResponsibleEmail = "email ответственного менеджера";       //var ColumnComment = "Комментарии";       //++kosov если мы получаем данные с формы 109 (ид справочника "Скачивание возможностей" 353 - не проверяем обязательность колонки телефон       if (dataItem.Id == 353)       {        var noColumns109 = new[] { ColumnCreateDate, ColumnFIO, ColumnCompanyName, ColumnEmail }                          .Where(c => !table.Columns.Contains(c))                          .ToArray();        if (noColumns109.Length > 0)         throw new FileException(string.Format("Неверный формат скаченного файла (не найдены требуемые поля: {0})", string.Join(", ", noColumns109)), file);          }       else       {       //--kosov        var noColumns = new[] { ColumnCreateDate, ColumnFIO, ColumnCompanyName, ColumnEmail, ColumnPhone }                          .Where(c => !table.Columns.Contains(c))                          .ToArray();        if (noColumns.Length > 0)         throw new FileException(string.Format("Неверный формат скаченного файла (не найдены требуемые поля: {0})", string.Join(", ", noColumns)), file);       //++kosov       }       //--kosov                        var newLastReceived = lastReceived;                      var kategoriiDlyaVozmozhnostey = EntityManager<IKategoriiDlyaVozmozhnostey>.Instance.FindAll();                      var leads = new List<Lead>();                      string mess = "";                      foreach (DataColumn  colum in table.Columns)                       {        mess += colum.ColumnName + "/r/n";                      }                        foreach (DataRow dataRow in table.Rows)                      {                       //Sender.SendMessage(new[] { new MailAddress("vihareva@elewise.com") }, "test", "errr 5 " + table.ToString(), false, true, null, null, true);                       try                          {                                                      var CreateDate = DateTime.Parse(dataRow[ColumnCreateDate].ToString(), culture);                              if (CreateDate > lastReceived)                              {                                  newLastReceived = newLastReceived > CreateDate ? newLastReceived : CreateDate;                                  string[] fio = dataRow[ColumnFIO].ToString().Replace("<br>", "").Replace("<br />", "").Split(" ".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);                                  string FirstName = fio.Length > 0 ? fio.Length > 3 ? string.Join(" ", fio, 0, fio.Length - 2).Replace("\n", "").Replace("\r", "") : fio[0].Replace("\n", "").Replace("\r", "") : "";                                  string LastName = fio.Length > 1 ? fio.Length > 3 ? fio[fio.Length - 2].Replace("\n", "").Replace("\r", "") : fio[1].Replace("\n", "").Replace("\r", "") : "";                                  string PatronymicName = fio.Length > 2 ? fio.Length > 3 ? fio[fio.Length - 1].Replace("\n", "").Replace("\r", "") : fio[2].Replace("\n", "").Replace("\r", "") : "";                                  string Post = table.Columns.Contains(ColumnPost) ? dataRow[ColumnPost].ToString() : "";                                  string CompanyName = dataRow[ColumnCompanyName].ToString().Replace("\n", "").Replace("\r", "");                                  // string ResponsibleName = dataRow[ColumnResponsibleName].ToString();                                  string City = table.Columns.Contains(ColumnCity) ? dataRow[ColumnCity].ToString() : "";                                  string Country = table.Columns.Contains(ColumnCountry) ? dataRow[ColumnCountry].ToString() : "";                                  string Email = dataRow[ColumnEmail].ToString().Replace("\n", "").Replace("\r", "");                                  Email = Email.ToLower().Trim();                                                                    //++kosov здесь тоже необходимо пропустить телефон, если это настройка для 109 формы                                  string Phone = "";                                  if (dataItem.Id ==353)                                  {                                   Phone = "";                                  }                                  else                                  {                                   //--kosov                                   Phone = dataRow[ColumnPhone].ToString().Replace("\n", "").Replace("\r", "");                                   //++kosov                                  }                                  //--kosov                                  string How = table.Columns.Contains(ColumnHow) ? dataRow[ColumnHow].ToString() : "";                                  string Referer = table.Columns.Contains(ColumnReferer) ? dataRow[ColumnReferer].ToString() : "";                                  string QuestionText = table.Columns.Contains(ColumnQuestionText) ? dataRow[ColumnQuestionText].ToString() : "";                                  string ContactPerson = table.Columns.Contains(ColumnContactPerson) ? dataRow[ColumnContactPerson].ToString().Replace("\n", "").Replace("\r", "") : "";                                  string ResponsibleName = table.Columns.Contains(ColumnResponsibleName) ? dataRow[ColumnResponsibleName].ToString().Replace("\n", "").Replace("\r", "") : "";                                  string CountEmploes = table.Columns.Contains(ColumnCountEmploes) ? dataRow[ColumnCountEmploes].ToString() : "";                                  string DateAndTheme = table.Columns.Contains(ColumnDateAndTheme) ? dataRow[ColumnDateAndTheme].ToString() : "";                                  string ResponsibleEmail = !string.IsNullOrWhiteSpace(dataItem.ResponsibleEmail) && table.Columns.Contains(dataItem.ResponsibleEmail) ? dataRow[dataItem.ResponsibleEmail].ToString().Replace("<br>", "").Replace("<br />", "") : "";            string utm_source = table.Columns.Contains("utm_source") ? dataRow["utm_source"].ToString() : "";                                  string utm_medium = table.Columns.Contains("utm_medium") ? dataRow["utm_medium"].ToString() : "";                                  string utm_term = table.Columns.Contains("utm_term") ? dataRow["utm_term"].ToString() : "";                                  string utm_content = table.Columns.Contains("utm_content") ? dataRow["utm_content"].ToString() : "";                                  string utm_campaign = table.Columns.Contains("utm_campaign") ? dataRow["utm_campaign"].ToString() : "";                                    Dictionary<string, string> DescriptionFields = new Dictionary<string, string>();                                  if (!string.IsNullOrWhiteSpace(dataItem.DescriptionField))                                  {                                      var descriptionFields = dataItem.DescriptionField.Split(",".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);                                      foreach (var descriptionField in descriptionFields)                                      {                                          string DescriptionField = table.Columns.Contains(descriptionField) ? dataRow[descriptionField].ToString() : null;                                          if (!string.IsNullOrWhiteSpace(DescriptionField))                                              DescriptionFields[descriptionField] = DescriptionField;                                      }                                  }                                    var lead = new Lead();                                    lead.Uid = Guid.NewGuid();                                  lead.CreationAuthor = null;//(User)UserManager.Instance.LoadByLogin("budin");                                  lead.CreationDate = CreateDate;                                  lead.ChangeDate = DateTime.Now;                                  lead.Email.Add(new Email { Uid = Guid.NewGuid(), EmailString = Email });                                  //++kosov здесь тоже необходимо пропустить телефон, если это настройка для 109 формы                                  if (dataItem.Id != 353)                                  {           //--kosov            //для пустого телефона не создаем номер           if (Phone != "")           {            lead.Phone.Add(new Phone {             Uid = Guid.NewGuid(), PhoneString = Phone            });           }                                   //++kosov                                  }                                  //--kosov                                                                   lead.Name = CompanyName; // ToDo                                  lead.Description = dataItem.SubjectPostfix;                                                                   //Sender.SendMessage(new[] { new MailAddress("vihareva@elewise.com") }, "test", "errr 6 ", false, true, null, null, true);                                  if (!string.IsNullOrWhiteSpace(ResponsibleEmail))                                  {                                      if (ResponsibleEmail.StartsWith("<a "))                                      {                                          ResponsibleEmail = ResponsibleEmail.Substring(ResponsibleEmail.IndexOf(">") + 1).Replace("</a>", "");                                      }                                      if (!string.IsNullOrWhiteSpace(ResponsibleEmail))                                      {                                          lead.Responsible = UserManager.Instance.Find(new Filter { Query = string.Format("EMail like '{0}'", ResponsibleEmail.Trim().Replace("'", "''")) }, null).FirstOrDefault() as User;                                      }                                  }                                    if (!string.IsNullOrWhiteSpace(utm_source))                                  {                                      lead.UtmSource = utm_source.Trim();                                  }                                  if (!string.IsNullOrWhiteSpace(utm_medium))                                  {                                      lead.UtmMedium = utm_medium.Trim();                                  }                                  if (!string.IsNullOrWhiteSpace(utm_term))                                  {                                      lead.UtmTerm = utm_term.Trim();                                  }                                  if (!string.IsNullOrWhiteSpace(utm_content))                                  {                                      lead.UtmContent = utm_content.Trim();                                  }                                  if (!string.IsNullOrWhiteSpace(utm_campaign))                                  {                                      lead.UtmCampaign = utm_campaign.Trim();                                  }                                      if (!string.IsNullOrEmpty(QuestionText))                                  {                                      if (!string.IsNullOrEmpty(lead.Description))                                          lead.Description += "\n";                                      lead.Description += "Текст вопроса: " + QuestionText;                                  }                                  if (!string.IsNullOrEmpty(How))                                  {                                      if (!string.IsNullOrEmpty(lead.Description))                                          lead.Description += "\n";                                      lead.Description += "Как узнали: " + How;                                  }                                  if (!string.IsNullOrEmpty(Referer))                                  {                                      if (!string.IsNullOrEmpty(lead.Description))                                          lead.Description += "\n";                                      lead.Description += "Откуда пришли: " + Referer;                                  }                                  string countEmploes;                                    //                          if (!string.IsNullOrEmpty(CountEmploes) && long.TryParse(CountEmploes, out countEmploes))                                  //                          {                                  //                           lead.CountEmploes = countEmploes;                                  //                          }                                    if (!string.IsNullOrEmpty(DateAndTheme))                                  {                                      if (!string.IsNullOrEmpty(lead.Description))                                          lead.Description += "\n";                                      lead.Description += "Дата и тема: " + DateAndTheme;                                  }                                  if (DescriptionFields != null && DescriptionFields.Count > 0)                                  {                                      foreach (var pair in DescriptionFields)                                      {                                          if (!string.IsNullOrEmpty(lead.Description))                                              lead.Description += "\n";                                          lead.Description += pair.Key + ": " + pair.Value;                                      }                                  }                                    if (!string.IsNullOrEmpty(CountEmploes) && !string.IsNullOrWhiteSpace(CountEmploes) && CountEmploes.Contains("До 20"))                                  {                                      lead.SegmentRynka = new DropDownItem("до 20");                                  }                                    if (!string.IsNullOrEmpty(CountEmploes) && !string.IsNullOrWhiteSpace(CountEmploes) && CountEmploes.Contains("20-100"))                                  {                                      lead.SegmentRynka = new DropDownItem("SOHO");                                  }                                    if (!string.IsNullOrEmpty(CountEmploes) && !string.IsNullOrWhiteSpace(CountEmploes) && CountEmploes.Contains("101-500"))                                  {                                      lead.SegmentRynka = new DropDownItem("Средний бизнес");                                  }                                    if (!string.IsNullOrEmpty(CountEmploes) && !string.IsNullOrWhiteSpace(CountEmploes) && CountEmploes.Contains("501-2000"))                                  {                                      lead.SegmentRynka = new DropDownItem("Бизоны");                                  }                                    if (!string.IsNullOrEmpty(CountEmploes) && !string.IsNullOrWhiteSpace(CountEmploes) && CountEmploes.Contains("Более 2000"))                                  {                                      lead.SegmentRynka = new DropDownItem("Enterprise");                                  }                                        if (fio.Length > 0 || !string.IsNullOrEmpty(Post) || (!string.IsNullOrEmpty(ContactPerson) && !string.IsNullOrWhiteSpace(ContactPerson)))                                  {                                   var contact = new LeadContact();                                        contact.Uid = Guid.NewGuid();                                      contact.Firstname = FirstName;                                      contact.Surname = LastName;                                      contact.Middlename = PatronymicName;                                                                            if(fio.Length > 0)                                       contact.Name = string.Format("{0} {1} {2}", contact.Firstname, contact.Middlename, contact.Surname).Trim();                                                                            if(!string.IsNullOrEmpty(ContactPerson) && !string.IsNullOrWhiteSpace(ContactPerson))                                       contact.Name = ContactPerson;                                                                            contact.Position = Post;                                      contact.Phone.Add(new Phone { Uid = Guid.NewGuid(), PhoneString = Phone });                                      contact.Email.Add(new Email { Uid = Guid.NewGuid(), EmailString = Email });                                      lead.Contacts.Add(contact);                                  }                                      if (!string.IsNullOrEmpty(ResponsibleName))                                  {                                      if (!string.IsNullOrEmpty(lead.Description))                                          lead.Description += "\n ФИО ответственного менеджера: " + ResponsibleName;                                  }                                  CRM.Models.Country datecountry = string.IsNullOrWhiteSpace(Country) ? null : EntityManager<CRM.Models.Country>.Instance.Find(v => v.Name.Equals(Country)).FirstOrDefault();                                    lead.Address = new Address                                  {                                      Uid = Guid.NewGuid(),                                     Country = datecountry,                                      City = City                                  };                                    if (!string.IsNullOrWhiteSpace(City))                                  {                                      var category = kategoriiDlyaVozmozhnostey                                          .Where(k => k.City.ToLower().Replace(" ", "").Replace("\n", "").Replace("\r", "").Replace("\t", "") == City.ToLower().Replace(" ", "").Replace("\n", "").Replace("\r", "").Replace("\t", ""))                                          .Select(k => k.Kategoriya)                                          .Cast<Category>()                                          .FirstOrDefault();                                      if (category != null)                                          lead.Categories.Add(category);                                  }                                    lead.Status = LeadStatus.New;                                  lead.TipVozmozhnochti = TipVozmozhnosti.VhodyaschayaVozmozhnostj;                                  lead.Source = EntityManager<LeadSource, long>.Instance.Load(4);                                  lead.Types.AddAll(dataItem.LeadTypes);                                    lead.Save();                                  leads.Add(lead);                                  //Sender.SendMessage(new[] { new MailAddress("vihareva@elewise.com") }, "test", "save ", false, true, null, null, true);                              }                          }                          catch { }                      }                        if (newLastReceived > dataItem.LastReceived)                      {                          if (newLastReceived > nowAdd)                          {                              CreateLeadsFromFileSendMail2("[Lead] Ошибки во времени создания при скачивании возможностей", string.Format("В \"{0}\" кривое время создания {1}", dataItem.SubjectPostfix, newLastReceived), null);                          }                          dataItem.LastReceived = newLastReceived;                          dataItem.Save();                      }                        unitOfWork.Commit();                        return leads.Select(l => l.Id).ToList();                  }                  catch                  {                      unitOfWork.Rollback();                      throw;                  }              }          }            protected static IList<long> CreateLeadsFromFileDownloadNew(int Remain)          {              System.Console.WriteLine("CreateLeadsFromFileDownloadNew");                            //Sender.SendMessage(new[] { new MailAddress("vihareva@elewise.com") }, "test", "CreateLeadsFromFileDownloadNew  - 1", false, true, null, null, true);                            if (Remain == 0)                  return new long[0];                var lastReceived = DataAccessManager.BLOBManager.GetBLOB<Nullable<DateTime>>((System.Guid)KeyGuid, (string)KeyString) ?? new DateTime(2016, 4, 1);                var culture = new CultureInfo("ru-Ru");              string file = null;                while (Remain > 0)              {                  try                  {                      var content = "AUTH_FORM=Y&TYPE=AUTH&USER_LOGIN=" + Login + "&USER_PASSWORD=" + Password;                      var host = "https://www.elma-bpm.ru/bitrix/admin/form_result_list.php";                        var cookieContainer = new CookieContainer();                      var request = (HttpWebRequest)WebRequest.Create(host);                      request.Method = "get";                      request.CookieContainer = cookieContainer;                      request.Timeout = timeout;                      using (request.GetResponse())                      {                      }                        request = (HttpWebRequest)WebRequest.Create(host + "?login=yes");                      request.ContentType = "application/x-www-form-urlencoded";                      request.Method = "post";                      request.CookieContainer = cookieContainer;                      request.ContentLength = content.Length;                      request.Timeout = timeout;                        using (var writer = new StreamWriter(request.GetRequestStream()))                      {                          writer.Write(content);                      }                        using (request.GetResponse())                      {                       //Sender.SendMessage(new[] { new MailAddress("vihareva@elewise.com") }, "test", "err 3  - 1", false, true, null, null, true);                      }                        request = (HttpWebRequest)WebRequest.Create(UrlLead.ToString() + "&login=yes&set_filter=Y&find_date_create_1=" + lastReceived.Date.ToString("d", culture));                      request.Method = "get";                      request.CookieContainer = cookieContainer;                      request.Timeout = timeout;       //Sender.SendMessage(new[] { new MailAddress("vihareva@elewise.com") }, "test", "err 2 ", false, true, null, null, true);                      using (WebResponse response = request.GetResponse())                      {                          using (StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.GetEncoding(1251)))                          {                              file = reader.ReadToEnd();                          }                      }                                           // Sender.SendMessage(new[] { new MailAddress("vihareva@elewise.com") }, "test", file.ToString() + " - 1", false, true, null, null, true);                      break;                  }                  catch(Exception ex)                  {                   //Sender.SendMessage(new[] { new MailAddress("vihareva@elewise.com") }, "test", "err - " + ex.ToString(), false, true, null, null, true);                   if (--Remain == 0) throw;                      Thread.Sleep(TimeSpan.FromSeconds(5));                  }              }                var nowAdd = DateTime.Now.AddMinutes(10);                var table = new DataTable();                try              {               //Sender.SendMessage(new[] { new MailAddress("vihareva@elewise.com") }, "test", "err 4  - 1", false, true, null, null, true);               var trMatches = Regex.Matches(Regex.Matches(file, "<table(.|\\n)+?</table>")[0].Value, "<tr>(.|\\n)+?</tr>");                    foreach (Match match in Regex.Matches(trMatches[0].Value, "<td>(.|\\n)+?</td>"))                  {                      table.Columns.Add(HttpUtility.HtmlDecode(match.Value.Substring(4, match.Value.Length - 9)), typeof(String));                  }                    for (var i = 1; i < trMatches.Count; i++)                  {                      var row = table.NewRow();                      var columnIndex = 0;                      foreach (Match match in Regex.Matches(trMatches[i].Value, "<td>(.|\\n)+?</td>"))                          row[columnIndex++] = Regex.Replace(HttpUtility.HtmlDecode(match.Value.Substring(4, match.Value.Length - 9))                                                             .Replace("<br>", "\n").Replace("<br />", "\n"), "<a.+?>", "").Replace("</a>", "");                      table.Rows.Add(row);                  }              }              catch (Exception ex)              {                  throw new FileException(ex.Message, file);              }                    using (var unitOfWork = UnitOfWorkManager.Create(string.Empty, true))              {                  try                  {                   //Sender.SendMessage(new[] { new MailAddress("vihareva@elewise.com") }, "test", "err 5  - 1", false, true, null, null, true);                   //var ColumnCreateDate = "Изменено";                      var ColumnCreateDate = "Дата создания";                      var ColumnFIO = "Ваши имя и фамилия";                      var ColumnPost = "Должность";                      var ColumnCompanyName = "Название компании";                      var ColumnCity = "Город";                      var ColumnCountry = "Страна";                      var ColumnEmail = "E-mail";                      var ColumnPhone = "Телефон";                      var ColumnHow = "Как вы узнали о нас?";                      var ColumnReferer = "Referer";                      var ColumnQuestionText = "Задать вопрос";                      var ColumnCountEmploes = "Численность компании";                      var ColumnDateAndTheme = "Дата и тема";                      var ColumnIndustry = "Выбрать отрасль";                      var ColumnAction = "action";                      var ColumnComment = "comment";                      var ColumnUniversityName = "Название ВУЗа";                      var ColumnFaculty = "Название Факультета";                      var ColumnDiscipline = "Название дисциплины, в рамках которого используется система ELMA";                      var ColumnGrade = "На каком Вы курсе";                      var ColumnProduct = "Выберите продукт ELMA";                      var ColumnSite = "Сайт компании";       //++kosov колонка связаться со мной       var ColumnContWithMe = "Связаться со мной";                      //--kosov                          var noColumns = new[] { ColumnCreateDate, ColumnFIO, ColumnCompanyName, ColumnEmail, ColumnPhone }                         .Where(c => !table.Columns.Contains(c))                         .ToArray();                      if (noColumns.Length > 0)                          throw new FileException(string.Format("Неверный формат скаченного файла (не найдены требуемые поля: {0})", string.Join(", ", noColumns)), file);                        var newLastReceived = lastReceived;                      var kategoriiDlyaVozmozhnostey = EntityManager<IKategoriiDlyaVozmozhnostey>.Instance.FindAll();                      var leads = new List<Lead>();                      //++kosov список email                      var emails = new List<Email>();                                            //++kosov                      //формируем список необходимых типов возможностей, по которым будут искаться дубли       List<LeadType> leadTypeList = new List<LeadType>();       leadTypeList.Add(EntityManager<LeadType, long>.Instance.Load(552));       leadTypeList.Add(EntityManager<LeadType, long>.Instance.Load(249));       leadTypeList.Add(EntityManager<LeadType, long>.Instance.Load(451));       leadTypeList.Add(EntityManager<LeadType, long>.Instance.Load(350));                      //--kosov                      foreach (DataRow dataRow in table.Rows)                      {                       //Sender.SendMessage(new[] { new MailAddress("vihareva@elewise.com") }, "test", "err 6 - 1", false, true, null, null, true);                       try                          {                              var CreateDate = DateTime.Parse(dataRow[ColumnCreateDa
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement