/// <summary> /// Adjudicates the claims data task. /// </summary> /// <param name="taskId">The task identifier.</param> /// <param name="noOfRecords">The no of records.</param> /// <param name="claimsCount">The claims count for thread.</param> /// <param name="contracts">The contracts.</param> /// <param name="startRow">The start row.</param> /// <param name="endRow">The end row.</param> /// <param name="connectionString">The connection string.</param> /// <returns></returns> private void AdjudicateClaimsDataTask(long taskId, int noOfRecords, long claimsCount, List <Contract> contracts, long startRow, long endRow, string connectionString) { IAdjudicationEngine adjudicationEngine = Factory.CreateInstance <IAdjudicationEngine>(connectionString, true); try { while (claimsCount > 0) { // Adjudication Starts AdjudicatedClaimsResult paymentResultDictionary = adjudicationEngine.AdjudicateClaimsDataThread(taskId, noOfRecords, contracts, startRow, endRow); lock (_paymentResultQueue) { // Adding payment result and claim information into Queue. If Job is paused, then have to stop adjudication by setting 'claimsCountForThread=0' if (!paymentResultDictionary.IsPaused) { _paymentResultQueue.Enqueue(paymentResultDictionary); } else { claimsCount = 0; } } claimsCount = claimsCount - noOfRecords; } } catch (Exception ex) { Log.LogError(Constants.AdjudicationExceptionLog + taskId, Constants.BackgroundServiceUser, ex); } }
/// <summary> /// Adjudicates the claims data thread. /// </summary> /// <param name="taskId">The task identifier.</param> /// <param name="noOfRecords">The no of records.</param> /// <param name="contracts">The contracts.</param> /// <param name="startRow">The start row.</param> /// <param name="endRow">The end row.</param> /// <returns></returns> public AdjudicatedClaimsResult AdjudicateClaimsDataThread(long taskId, int noOfRecords, List <Contract> contracts, long startRow, long endRow) { AdjudicatedClaimsResult adjudicatedClaimsResult = new AdjudicatedClaimsResult(); List <EvaluateableClaim> adjudicateClaims = new List <EvaluateableClaim>(); List <EvaluateableClaim> earlyExitClaims = new List <EvaluateableClaim>(); _contractLogic.AdjudicateClaims = new List <EvaluateableClaim>(); _contractLogic.EarlyExitClaims = new List <EvaluateableClaim>(); //Retrieves claims from database based on taskId List <EvaluateableClaim> evaluateableClaims = _evaluateableClaimRepository.GetEvaluateableClaims(taskId, noOfRecords, startRow, endRow); Dictionary <long, List <PaymentResult> > paymentResultDictionary = new Dictionary <long, List <PaymentResult> >(); try { if (evaluateableClaims != null && evaluateableClaims.Count > 0) { //Get Payment Result Dictionary from claim and contract list paymentResultDictionary = AdjudicateClaim(evaluateableClaims, contracts, taskId); adjudicateClaims.AddRange(_contractLogic.AdjudicateClaims); earlyExitClaims.AddRange(_contractLogic.EarlyExitClaims); } else { adjudicatedClaimsResult.IsPaused = true; } adjudicatedClaimsResult.AdjudicateClaims = adjudicateClaims; adjudicatedClaimsResult.EarlyExitClaims = earlyExitClaims; adjudicatedClaimsResult.PaymentResult = paymentResultDictionary; } catch (Exception ex) { Log.LogError("AdjudicateClaimsDataThread - AdjudicateClaim " + taskId + "No of Records = " + noOfRecords + " " + ex.StackTrace, "AdjudicateClaim"); } return(adjudicatedClaimsResult); }
/// <summary> /// Updates the payment result task. /// </summary> /// <param name="taskId">The task identifier.</param> /// <param name="noOfRecords">The no of records.</param> /// <param name="contracts">The contracts.</param> /// <param name="adjudicatedClaimsResult">The payment result.</param> /// <returns></returns> private bool UpdatePaymentResultTask(long taskId, int noOfRecords, List <Contract> contracts, AdjudicatedClaimsResult adjudicatedClaimsResult) { return(_adjudicationEngine.UpdatePaymentResultsThread(taskId, noOfRecords, contracts, adjudicatedClaimsResult.PaymentResult, adjudicatedClaimsResult.AdjudicateClaims, adjudicatedClaimsResult.EarlyExitClaims)); }