public JsonResult SendMessage(List <SendData> data) { var alert_message = ""; using (DataContext _db = new DataContext()) { _db.Database.CommandTimeout = 6000; try { DateTime dateFrom, dateTo; if (data.Select(s => s.selected).FirstOrDefault() == true) { var smsid = data[0].smsId; var smstype = data[0].smsType; var dtfrom = data[0].dateFrom; var dtto = data[0].dateTo; data.Clear(); var sendData = _db.Towers.ToList(); for (int j = 0; j < sendData.Count(); j++) { SendData send = new SendData(); send.Id = sendData[j].Id; send.smsId = smsid; send.manual = true; send.selected = true; send.smsType = smstype; send.dateFrom = dtfrom; send.dateTo = dtto; data.Add(send); } } int user_id = ((User)Session["CurrentUser"]).Id; if (data != null) { var groupedCardList = data .GroupBy(u => u.smsId) .Select(grp => grp.ToList()) .ToList(); foreach (var dataitem in groupedCardList) { var send_text = ""; var smstyp = dataitem.Select(s => s.smsType).FirstOrDefault(); if (dataitem.Select(s => s.manual).FirstOrDefault() == true) { send_text = dataitem.Select(s => s.smsId).FirstOrDefault(); } else { var id = Convert.ToInt32(dataitem.Select(s => s.smsId).FirstOrDefault()); send_text = _db.MessageTemplates.Where(a => a.Id == id).Select(s => s.Desc).FirstOrDefault(); } var messge_indicator = 0; Message message = new Message(); message.UserId = user_id; message.Date = DateTime.Now; message.MessageType = smstyp.ToString(); message.MessageText = send_text; foreach (var item in dataitem) { dateFrom = Convert.ToDateTime(item.dateFrom); dateTo = Convert.ToDateTime(item.dateTo); var cards = _db.Cards.Where(c => c.TowerId == item.Id && c.CardStatus != CardStatus.Canceled).Select(s => s).ToList(); List <Customer> custumer = _db.Customers.ToList(); List <int> abonent_id = new List <int>(); //List<int> cardID = new List<int>(); /*abonent.Select(s => s.CustomerId).Distinct().ToList();*/ List <MessageAbonent> messageabonent = new List <MessageAbonent>(); if (messge_indicator == 0 && cards.Count() != 0) { messge_indicator = 1; _db.Messages.Add(message); _db.SaveChanges(); } foreach (var i in cards) { if (abonent_id.Contains(i.CustomerId)) { } else { abonent_id.Add(i.CustomerId); //cardID.Add(i.Id); messageabonent.Add(new MessageAbonent { MessageId = _db.Messages.OrderByDescending(o => o.Id).Select(s => s.Id).FirstOrDefault(), CardId = i.Id, }); } } if (cards.Count != 0) { _db.MessageAbonents.AddRange(messageabonent); _db.SaveChanges(); } string[] typess = message.MessageType.Split(','); if (typess.Contains("2")) //sms { for (int i = 0; i < abonent_id.Count(); i++) { string onRegMsg = ""; if (send_text != null) { onRegMsg = String.Format(send_text, item.dateFrom, item.dateTo); alert_message = "შეტყობინების გაგზავნა წარმატებით შესრულდა!"; var phone = custumer.Where(c => c.Id == abonent_id[i]).Select(s => s.Phone1).FirstOrDefault(); Task.Run(async() => { await Utils.Utils.sendMessage(phone, onRegMsg); }).Wait(); } } } string[] types = message.MessageType.Split(','); if (types.Contains("0") || types.Contains("1")) { int[] ids = cards.Select(s => s.Id).Distinct().ToArray(); List <Card> _cards = _db.Cards.Include(c => c.Customer).Include(c => c.Tower).Include(c => c.Receiver) .Where(c => c.CardStatus != CardStatus.Canceled) .Where(c => ids.Contains(c.Id)) .Select(c => c).ToList(); List <Param> Params = _db.Params.ToList(); int osd_duration = int.Parse(Params.First(c => c.Name == "OSDDuration").Value); string[] address = Params.Where(c => c.Name == "CASAddress").Select(c => c.Value).First().Split(':'); string username = Params.First(p => p.Name == "SMSPassword").Value; string password = Params.First(p => p.Name == "SMSUsername").Value; CASSocket _socket = new CASSocket() { IP = address[0], Port = int.Parse(address[1]) }; _socket.Connect(); foreach (Card card in _cards) { message.MessageText = Utils.Utils.ReplaceMessageTags(message.MessageText, card, _db); foreach (string type in types) { switch (type) { case "0": //osd { if (!_socket.SendOSDRequest(int.Parse(card.CardNum), message.MessageText, DateTime.SpecifyKind(DateTime.Now, DateTimeKind.Utc), osd_duration)) { _db.MessageNotSendLogs.Add(new MessageNotSendLog { CardId = card.Id, MessageId = message.Id, MessageType = MessageType.OSD, }); } } break; case "1": { if (!_socket.SendEmailRequest(int.Parse(card.CardNum), message.MessageText, DateTime.SpecifyKind(DateTime.Now, DateTimeKind.Utc))) { _db.MessageNotSendLogs.Add(new MessageNotSendLog { CardId = card.Id, MessageId = message.Id, MessageType = MessageType.Email, }); } } break; } } } _db.SaveChanges(); _socket.Disconnect(); } } } } } catch (Exception ex) { var error = ex; return(Json(alert_message)); } return(Json(alert_message)); } }
public void Execute(IJobExecutionContext context) { DateTime today = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, DateTime.Now.Hour, DateTime.Now.Minute, 0); using (DataContext _db = new DataContext()) { string sql = @"SELECT cr.id FROM book.Cards AS cr INNER JOIN book.Customers AS c ON c.id=cr.customer_id WHERE cr.status!=4"; List <Param> Params = _db.Params.ToList(); string[] address = Params.Where(c => c.Name == "CASAddress").Select(c => c.Value).First().Split(':'); string username = Params.First(p => p.Name == "SMSPassword").Value; string password = Params.First(p => p.Name == "SMSUsername").Value; int osd_duration = int.Parse(Params.First(c => c.Name == "OSDDuration").Value); List <Card> cards; List <AutoMessageTemplate> queries = _db.AutoMessageTemplates.ToList(); _db.Database.CommandTimeout = 6000; using (DbContextTransaction tran = _db.Database.BeginTransaction(System.Data.IsolationLevel.Serializable)) { try { foreach (var _query in queries) { int[] ids = _db.Database.SqlQuery <int>(sql + _query.Query).ToArray(); Message _mess = new Message { UserId = 1, IsActive = true, Date = DateTime.Now, MessageText = _query.MessageText, MessageType = Convert.ToString((int)_query.MessageType), MessageAbonents = ids.Select(a => new MessageAbonent { CardId = a }).ToList() }; _db.Messages.Add(_mess); if (_query.IsDisposable) { _db.AutoMessageTemplates.Remove(_query); _db.Entry(_query).State = EntityState.Deleted; } this.AddLoging(_db, LogType.Message, LogMode.Add, 1, _mess.Id, "ავტომატური მესიჯი", new List <LoggingData>() ); cards = _db.Cards.Include("Customer")//.Include("Receiver").Include("Tower") .Where(c => c.CardStatus != CardStatus.Canceled) .Where(c => ids.Contains(c.Id)) .Select(c => c).ToList(); if (_query.MessageType == MessageType.Email || _query.MessageType == MessageType.OSD) { CASSocket _socket = new CASSocket() { IP = address[0], Port = int.Parse(address[1]) }; _socket.Connect(); foreach (Card card in cards) { _query.MessageText = Utils.Utils.ReplaceMessageTags(_query.MessageText, card, _db); switch (_query.MessageType) { case MessageType.OSD: //osd { if (!_socket.SendOSDRequest(int.Parse(card.CardNum), _query.MessageText, DateTime.SpecifyKind(DateTime.Now, DateTimeKind.Utc), osd_duration)) { _db.MessageNotSendLogs.Add(new MessageNotSendLog { CardId = card.Id, MessageId = _mess.Id, MessageType = MessageType.OSD, }); } } break; case MessageType.Email: { if (!_socket.SendEmailRequest(int.Parse(card.CardNum), _query.MessageText, DateTime.SpecifyKind(DateTime.Now, DateTimeKind.Utc))) { _db.MessageNotSendLogs.Add(new MessageNotSendLog { CardId = card.Id, MessageId = _mess.Id, MessageType = MessageType.Email, }); } } break; } } _socket.Disconnect(); } _db.SaveChanges(); if (_query.MessageType == MessageType.SMS) //sms { Utils.Utils.OnSendSMS(cards, _query.MessageText, username, password, _db, _mess.Id); } } tran.Commit(); } catch { tran.Rollback(); } } } }
//[ValidateAntiForgeryToken] public JsonResult NewMessage(Message message) { if (ModelState.IsValid) { using (DataContext _db = new DataContext()) { _db.Database.CommandTimeout = 6000; using (DbContextTransaction tran = _db.Database.BeginTransaction(IsolationLevel.Snapshot)) { try { int user_id = ((User)Session["CurrentUser"]).Id; message.UserId = user_id; message.Date = DateTime.Now; message.MessageAbonents = message.AbonentIds.Select(a => new MessageAbonent { CardId = a }).ToList(); _db.Messages.Add(message); _db.SaveChanges(); List <string> abonents = _db.Customers.Where(c => message.AbonentIds.Contains(c.Id)).Select(c => c.Name + " " + c.LastName).ToList(); this.AddLoging(_db, LogType.Message, LogMode.Add, user_id, message.Id, string.IsNullOrEmpty(message.TemplateType) ? "ერთჯერადი" : message.TemplateType, Newtonsoft.Json.JsonConvert.DeserializeObject <List <LoggingData> >(message.Logging).Where(c => c.field != null || c.field != "").ToList() ); _db.SaveChanges(); int[] ids = message.AbonentIds.Distinct().ToArray(); List <Card> cards = _db.Cards.Include(c => c.Customer).Include(c => c.Tower).Include(c => c.Receiver) .Where(c => c.CardStatus != CardStatus.Canceled) .Where(c => ids.Contains(c.Id)) .Select(c => c).ToList(); List <Param> Params = _db.Params.ToList(); int osd_duration = int.Parse(Params.First(c => c.Name == "OSDDuration").Value); string[] address = Params.Where(c => c.Name == "CASAddress").Select(c => c.Value).First().Split(':'); string username = Params.First(p => p.Name == "SMSPassword").Value; string password = Params.First(p => p.Name == "SMSUsername").Value; string[] types = message.MessageType.Split(','); if (types.Contains("0") || types.Contains("1")) { CASSocket _socket = new CASSocket() { IP = address[0], Port = int.Parse(address[1]) }; _socket.Connect(); foreach (Card card in cards) { message.MessageText = Utils.Utils.ReplaceMessageTags(message.MessageText, card, _db); foreach (string type in types) { switch (type) { case "0": //osd { if (!_socket.SendOSDRequest(int.Parse(card.CardNum), message.MessageText, DateTime.SpecifyKind(DateTime.Now, DateTimeKind.Utc), osd_duration)) { _db.MessageNotSendLogs.Add(new MessageNotSendLog { CardId = card.Id, MessageId = message.Id, MessageType = MessageType.OSD, }); } } break; case "1": { if (!_socket.SendEmailRequest(int.Parse(card.CardNum), message.MessageText, DateTime.SpecifyKind(DateTime.Now, DateTimeKind.Utc))) { _db.MessageNotSendLogs.Add(new MessageNotSendLog { CardId = card.Id, MessageId = message.Id, MessageType = MessageType.Email, }); } } break; } } } _db.SaveChanges(); _socket.Disconnect(); } if (types.Contains("2")) //sms { Utils.Utils.OnSendSMS(cards, message.MessageText, username, password, _db, message.Id); } tran.Commit(); return(Json("1")); } catch { tran.Rollback(); } } } } return(Json("0")); }