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));
            }
        }
Beispiel #2
0
        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"));
        }