private void ParseRapsUploaded(IEnumerable <DataRow> rows, List <RapsUploadLog> failedRapsList, long rapsUploadId, out long successCount)
        {
            var rapsUploadLogs = rows.Select(row => _rapsUploadHelper.GetUploadLog(row, rapsUploadId));

            successCount = 0;
            if (rapsUploadLogs.IsNullOrEmpty())
            {
                _logger.Info("No Record Found For Parsing in file");
                return;
            }

            foreach (var rapsUploadLog in rapsUploadLogs)
            {
                try
                {
                    if (!rapsUploadLog.IsSuccessFull)
                    {
                        _rapsUploadLogRepository.SaveRapsUploadLog(rapsUploadLog);
                        failedRapsList.Add(rapsUploadLog);
                        continue;
                    }
                    var customerIds = new List <long>();
                    if (!string.IsNullOrEmpty(rapsUploadLog.CmsHicn))
                    {
                        customerIds =
                            _customerRepository.GetCustomerIdForRaps(rapsUploadLog.CmsHicn, rapsUploadLog.FirstName,
                                                                     rapsUploadLog.SecondName, rapsUploadLog.MemberDob).ToList();
                    }
                    if (!customerIds.Any())
                    {
                        rapsUploadLog.IsSuccessFull = false;
                        rapsUploadLog.ErrorMessage  = "Customer Not found for this HICN,First Name,Last Name and Date combination";
                        _rapsUploadLogRepository.SaveRapsUploadLog(rapsUploadLog);
                        failedRapsList.Add(rapsUploadLog);
                        continue;
                        //if (!string.IsNullOrEmpty(rapsUploadLog.MemberId))
                        //{
                        //    customerIds = _customerRepository.GetCustomerIdByInsuranceId(rapsUploadLog.MemberId).ToList();

                        //    if (!customerIds.Any())
                        //    {
                        //        rapsUploadLog.IsSuccessFull = false;
                        //        rapsUploadLog.ErrorMessage = "Customer Not found for this CMSHICN Or MemberId";
                        //        _rapsUploadLogRepository.SaveRapsUploadLog(rapsUploadLog);
                        //        failedRapsList.Add(rapsUploadLog);
                        //        continue;
                        //    }
                        //}
                    }
                    foreach (var customerId in customerIds)
                    {
                        var savedRaps  = _rapsRepository.GetByCustomerId(customerId).ToArray();
                        var isExisting = savedRaps.FirstOrDefault(x => x.IcdCode == rapsUploadLog.IcdCode &&
                                                                  x.ServiceDate == rapsUploadLog.ServiceDate
                                                                  ) != null;
                        if (!isExisting)
                        {
                            var rapDomain = new Raps
                            {
                                CmsHicn      = rapsUploadLog.CmsHicn,
                                CustomerId   = customerId,
                                ServiceDate  = rapsUploadLog.ServiceDate,
                                IcdCode      = rapsUploadLog.IcdCode,
                                MemberDob    = rapsUploadLog.MemberDob,
                                RapsUploadId = rapsUploadId,
                                MemberId     = rapsUploadLog.MemberId,
                                IcdVersion   = rapsUploadLog.IcdVersion,
                                FirstName    = rapsUploadLog.FirstName,
                                SecondName   = rapsUploadLog.SecondName,
                            };
                            _rapsRepository.SaveRaps(rapDomain);
                        }
                    }
                    successCount++;
                }
                catch (Exception exception)
                {
                    _logger.Error(string.Format("Error on Message: {0} \n Stack Trace: {1}", exception.Message, exception.StackTrace));
                }
            }
        }
Пример #2
0
        /// <summary>
        /// This can be rerun any time. The service updates the last run time and will continue
        /// </summary>
        public void Sync()
        {
            if (!_setting.SyncWithHra)
            {
                _logger.Info("Syncing with HRA is off ");
                return;
            }

            _logger.Info(string.Format("SyncRapsPollingAgent Started"));
            var skipCount = 0;
            var loopCount = 0;
            var timer     = new Stopwatch();

            try
            {
                if (_isDevEnvironment || !(DateTime.Now.TimeOfDay > new TimeSpan(6, 0, 0) && DateTime.Now.TimeOfDay < new TimeSpan(20, 0, 0)))
                {
                    var raps = _rapsRepository.GetRapsForSync(skipCount).ToArray();
                    do
                    {
                        if (raps.Any())
                        {
                            var recordsPulled = raps.Count();
                            _logger.Info(string.Format("Loop Count: {0} Skip Count: {1} #Records pulled for Sync: {2}", ++loopCount, skipCount, recordsPulled));
                            var orgName = _setting.OrganizationNameForHraQuestioner;
                            try
                            {
                                var listModel = new MedicareRapsListModel()
                                {
                                    Raps             = Mapper.Map <IEnumerable <Raps>, IEnumerable <MedicareRapsViewModel> >(raps).ToArray(),
                                    OrganizationName = orgName,
                                    TimeToken        = DateTime.UtcNow.ToLongTimeString().Encrypt()
                                };

                                _logger.Info("Syncing Raps to HRA.");
                                timer.Start();

                                var success = _medicareApiService.PostAnonymous <List <long> >(_setting.MedicareApiUrl + MedicareApiUrl.SyncRaps, listModel);
                                timer.Stop();
                                _logger.Info("Sync to Hra complete, time taken: " + timer.ElapsedMilliseconds);
                                timer.Reset();

                                if (success.Any())
                                {
                                    foreach (var medicareRapsViewModel in raps.Where(x => success.Contains(x.CustomerId)))
                                    {
                                        medicareRapsViewModel.IsSynced = true;
                                        _rapsRepository.SaveRaps(medicareRapsViewModel);
                                    }
                                    skipCount += recordsPulled - raps.Count(x => success.Contains(x.CustomerId));
                                }
                                else
                                {
                                    skipCount += recordsPulled;
                                }
                            }
                            catch (Exception exception)
                            {
                                skipCount += recordsPulled;
                                _logger.Error("Error Message: " + exception.Message + "\n\tStack Trace: " + exception.StackTrace);
                            }
                            raps = _rapsRepository.GetRapsForSync(skipCount).ToArray();
                        }
                    } while (raps.Any());
                }
                else
                {
                    _logger.Info(string.Format("SyncRapsPollingAgent can not be called as time of day is {0}", DateTime.Now.TimeOfDay));
                }
            }
            catch (Exception exception)
            {
                _logger.Error("Error occured in SyncRapsPollingAgent , Message: " + exception.Message + "\n\tStack Trace: " + exception.StackTrace);
            }
            _logger.Info("Sync Raps complete, Exiting...");
        }