예제 #1
0
        /// <summary>
        /// This event is fired on new file arrival to the watching path.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void OnCreated(string filePath)
        {
            var canbemoved = false;

            try
            {
                if (Path.GetFileName(filePath).Contains("diag"))
                {
                    Log("Processing...", Path.GetFileName(filePath));
                    var  campaignService = IoC.Container.GetInstance <ICampaignService>();
                    long filelength      = new System.IO.FileInfo(filePath).Length;
                    if (filelength > 0)
                    {
                        using (TextReader sr = new StreamReader(File.Open(filePath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)))
                        {
                            var csv = new CsvReader(sr);
                            csv.Configuration.RegisterClassMap <MailMapping>();
                            csv.Configuration.WillThrowOnMissingField = false;

                            IEnumerable <MailStat> records = csv.GetRecords <MailStat>().Where(i => i.CampaignId > 0).ToList();


                            IEnumerable <CampaignLogDetails> filteredRecipients = records.Where(r => !string.IsNullOrEmpty(r.Recipient))
                                                                                  .GroupBy(m => new { m.Recipient, m.CampaignId }).
                                                                                  Select(g => g.Select(p => new CampaignLogDetails()
                            {
                                BounceCategory      = (int?)p.BounceCategory,
                                CampaignId          = (int?)p.CampaignId,
                                CampaignRecipientId = p.CampaignRecipientId,
                                CreatedOn           = DateTime.UtcNow,
                                DeliveryStatus      = (short?)p.DeliveryStatus,
                                OptOutStatus        = p.OptOutStatus,
                                Recipient           = p.Recipient,
                                Remarks             = Path.GetFileName(filePath) + "/" + p.BounceCategory.ToString() + "/",
                                TimeLogged          = p.TimeLogged,
                                Status   = 1,
                                FileType = 1
                            }).OrderByDescending(v => v.TimeLogged).First());

                            InsertCampaignLogDetailsResponce insertResponce = campaignService.InsertCampaignLogDetails(new InsertCampaignLogDetailsRequest()
                            {
                                CampaignLogDetails = filteredRecipients
                            });
                            canbemoved = true;
                        }
                    }
                    else
                    {
                        _inProcessFileList.Remove(filePath);
                    }
                }
                else
                {
                    canbemoved = true;
                    Log("File Not Processed...", Path.GetFileName(filePath));
                }
                if (canbemoved)
                {
                    MoveFile(filePath, LogFileType.Diag);
                }
            }
            catch (Exception ex)
            {
                _inProcessFileList.Remove(filePath);
                ExceptionHandler.Current.HandleException(ex, DefaultExceptionPolicies.LOG_ONLY_POLICY, values: filePath);
            }
        }
예제 #2
0
        /// <summary>
        /// This event is fired on new file arrival to the watching path.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        static void onFeedBackLoopFileCreated(string filePath)
        {
            var canbemoved = false;

            try
            {
                if (Path.GetFileName(filePath).Contains("feedbackloop"))
                {
                    Log("Processing...", Path.GetFileName(filePath));
                    var campaignService = IoC.Container.GetInstance <ICampaignService>();

                    long filelength = new System.IO.FileInfo(filePath).Length;
                    if (filelength > 0)
                    {
                        using (TextReader sr = new StreamReader(File.Open(filePath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)))
                        {
                            var csv = new CsvReader(sr);
                            csv.Configuration.RegisterClassMap <FeedBackLoopMailMapping>();
                            csv.Configuration.WillThrowOnMissingField = false;

                            var records = csv.GetRecords <FeedBackLoopMailStat>().Where(i => i.CampaignRecipientId > 0).ToList();

                            //take campaignid and recipient as unique combination,
                            //take latest record.
                            var filteredRecipients = records.GroupBy(m => new { m.CampaignRecipientId })
                                                     .Select(g => g.Select(p =>
                                                                           new CampaignLogDetails()
                            {
                                CampaignRecipientId = p.CampaignRecipientId,
                                CreatedOn           = DateTime.UtcNow,
                                DeliveryStatus      = (short?)p.DeliveryStatus,
                                Recipient           = p.Recipient,
                                Remarks             = Path.GetFileName(filePath) + "/" + (p.Remarks == null? "": p.Remarks.ToString()) + "/",
                                TimeLogged          = p.TimeLogged,
                                Status   = 1,
                                FileType = 2
                            }).OrderByDescending(v => v.TimeLogged).First());

                            InsertCampaignLogDetailsResponce insertResponce = campaignService.InsertCampaignLogDetails(new InsertCampaignLogDetailsRequest()
                            {
                                CampaignLogDetails = filteredRecipients
                            });
                            canbemoved = true;
                        }
                    }
                    else
                    {
                        inProcessFeedBackLoopFileList.Remove(filePath);
                    }
                }
                else
                {
                    canbemoved = true;
                    Log("File Not Processed...", Path.GetFileName(filePath));
                }
                if (canbemoved)
                {
                    MoveFile(filePath, LogFileType.FeedBack);
                }
            }
            catch (Exception ex)
            {
                inProcessFeedBackLoopFileList.Remove(filePath);
                ExceptionHandler.Current.HandleException(ex, DefaultExceptionPolicies.LOG_ONLY_POLICY, values: filePath);
            }
        }