Exemplo n.º 1
0
        public HttpResponseMessage Post(object data)
        {
            var SaveDb         = ConfigurationManager.AppSettings["FB_RealTimeSaveDB"];
            var isPushToEngine = ConfigurationManager.AppSettings["PushCustomerToEngine"];
            var dataString     = data.ToString();

            jsonString = dataString;
            string sMessage = string.Empty;
            var    db       = new DatabaseConnect(connectionString);
            var    response = new HttpResponseMessage(HttpStatusCode.OK);

            try
            {
                var jsonObject = JsonConvert.DeserializeObject <MessageReceiveModel>(dataString);
                // customers lưu tất cả các id khách hàng để gửi về lại cho engine
                string customers       = string.Empty;
                var    listImageDetail = new List <ImageDetailModel>();
                foreach (var dataObjects in jsonObject.entry)
                {
                    long     time     = Convert.ToInt64(dataObjects.time / 1000);
                    DateTime dateTime = new DateTime(1970, 1, 1, 7, 0, 0, 0);
                    dateTime = dateTime.AddSeconds(time);
                    var message = dataObjects.messaging[0].message.text;
                    if (message != string.Empty && message != null)
                    {
                        var item = new FB_MessengerRealtime()
                        {
                            SenderId    = Convert.ToInt64(dataObjects.messaging[0].sender.id),
                            RecipientId = Convert.ToInt64(dataObjects.messaging[0].recipient.id),
                            TimeSend    = dateTime,
                            Message     = message
                        };
                        customers += item.SenderId.ToString() + ',';
                        sMessage   = ShareDataHelper.CheckIsTransfer_Msg(message);
                        if (SaveDb == "1")
                        {
                            db.Add_FB_MessengerRealtime(item);
                            db.SaveChanges();
                        }
                    }
                    if (dataObjects.messaging[0].message.Attachments != null && dataObjects.messaging[0].message.Attachments.Count > 0)
                    {
                        var attachements = dataObjects.messaging[0].message.Attachments.ToArray();
                        var listItem     = new List <FB_MessengerRealtime>();
                        if (attachements != null && attachements.Length > 0)
                        {
                            foreach (var sItem in attachements)
                            {
                                if (sItem.type == "image" && sItem.payload.sticker_id == null)
                                {
                                    var item = new FB_MessengerRealtime()
                                    {
                                        SenderId    = Convert.ToInt64(dataObjects.messaging[0].sender.id),
                                        RecipientId = Convert.ToInt64(dataObjects.messaging[0].recipient.id),
                                        TimeSend    = dateTime,
                                        ImageUrl    = sItem.payload.url
                                    };
                                    listItem.Add(item);
                                    listImageDetail.Add(new ImageDetailModel()
                                    {
                                        Url = item.ImageUrl,
                                        TimeReceiveFromSource = item.TimeSend,
                                        SenderId = item.SenderId.ToString()
                                    });
                                }
                            }
                            if (listItem != null && listItem.Count > 0)
                            {
                                customers += listItem[0].SenderId.ToString() + ',';
                                if (SaveDb == "1")
                                {
                                    db.AddRange_FB_MessengerRealtime(listItem);
                                    db.SaveChanges();
                                }
                            }
                        }
                    }
                }
                //Vì dịch ảnh sang text nên sẽ lâu, gây ra hiện tượng timeout cho một request của facebook
                //=> Facebook không nhận được tín hiệu 200 nên sẽ gửi tín hiệu liên tục
                //=> Dùng task để chạy ngầm, đảm bảo không bị timeout khi fb request
                Task.Run(() =>
                {
                    List <FBConversationDetail_Image> listImageText = new List <FBConversationDetail_Image>();
                    var dbAjuma = new AjumaDataConnect(ajumaConnectionString);
                    // Nếu là KH mới thì sẽ phải lấy tin nhắn về, dẫn tới trường hợp không tìm được KH và mất luôn thông tin lần gửi này
                    if (listNewCus != null && listNewCus.Count > 0)
                    {
                        listImageDetail.AddRange(listNewCus);
                        listNewCus = new List <ImageDetailModel>();
                    }
                    foreach (var sItem in listImageDetail)
                    {
                        string imageText = string.Empty;
                        bool flag        = ShareDataHelper.CheckIsTransfer_Img(sItem.Url, out imageText, out sMessage);
                        if (string.IsNullOrEmpty(sMessage))
                        {
                            var senderId = Convert.ToInt64(sItem.SenderId);
                            var customer = db.sp_Fb_GetCusBySenderId_Run(senderId);
                            if (customer != null)
                            {
                                var _item = new FBConversationDetail_Image()
                                {
                                    ConversationId        = customer.ConversationId,
                                    CustomerFbName        = customer.CustomerName,
                                    LinkToChat            = customer.LinkToChat,
                                    ImageText             = imageText,
                                    IsBankTransfer        = flag,
                                    Log_CreatedDate       = DateTime.Now,
                                    TimeReceiveFromSource = sItem.TimeReceiveFromSource
                                };
                                var fbImage = db.Add_FBConversationDetail_Image(_item);
                                db.SaveChanges();
                                var supplier = dbAjuma.GetSupplier(_item.LinkToChat);
                                if (supplier != null && supplier.Length > 0)
                                {
                                    _item.CusMoneyNotTransferBefore = dbAjuma.GetCusMoneyNotTransferBefore(supplier, _item.TimeReceiveFromSource, fbImage.Id);
                                    if (_item.CusMoneyNotTransferBefore > 0)
                                    {
                                        if (!flag)
                                        {
                                            _item.IsLikeBankTransfer = true;
                                        }
                                    }
                                    db.SaveChanges();
                                }
                                //listImageText.Add(_item);
                            }
                            else
                            {
                                listNewCus.Add(sItem);
                            }
                        }
                        else
                        {
                            db.AddLog(new FB_Log()
                            {
                                Method          = "POST - CheckIsTransfer_Img",
                                Message         = sMessage + "\n" + sItem.Url + imageText,
                                Log_CreatedDate = DateTime.Now
                            });
                        }
                        //if (listImageText != null && listImageText.Count > 0)
                        //{
                        //    db.AddRange_FBConversationDetail_Image(listImageText);
                        //    db.SaveChanges();
                        //}
                    }
                });
                if (isPushToEngine == "1")
                {
                    if (customers != string.Empty)
                    {
                        fbEngine.PushCustomer(customers);
                    }
                }
            }
            catch (Exception ex)
            {
                sMessage = ex.Message;
                while (ex.InnerException != null)
                {
                    sMessage += " \n " + ex.InnerException.Message;
                    ex        = ex.InnerException;
                }
                db.AddLog(new FB_Log()
                {
                    Method          = "POST - FBSendData",
                    Message         = sMessage,
                    Log_CreatedDate = DateTime.Now
                });
            }
            return(response);
        }