Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 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