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)); } } }
/// <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..."); }