/// <summary>
        /// Generates Save Search Results Job tasks
        /// </summary>
        /// <param name="jobParameters">Job BEO</param>
        /// <param name="previouslyCommittedTaskCount">The previously committed task count.</param>
        /// <returns>
        /// List of Job Tasks (BEOs)
        /// </returns>
        protected override Tasks <SaveSearchResultsJobTaskBEO> GenerateTasks(SaveSearchResultsJobBEO jobParameters,
                                                                             out int previouslyCommittedTaskCount)
        {
            var tasks = new Tasks <SaveSearchResultsJobTaskBEO>();

            previouslyCommittedTaskCount = 0;
            LogMessage(Constants.TaskGenerationStartedMessage, false, LogCategory.Job, null);
            LogMessage(Constants.TaskGenerationStartedMessage, GetType(), Constants.GenerateTaskMethodFullName,
                       EventLogEntryType.Information, jobParameters.JobId, jobParameters.JobRunId);

            jobParameters.DocumentQuery.IgnoreDocumentSnippet = true;
            jobParameters.DocumentQuery.OutputFields.Clear();
            jobParameters.DocumentQuery.OutputFields.Add(new Field {
                FieldName = EVSystemFields.DcnField
            });
            jobParameters.DocumentQuery.QueryObject.TransactionName = "SaveSearchResultsJob - GenerateTasks (GetCount)";
            var totalResultCount = JobSearchHandler.GetSearchResultsCount(jobParameters.DocumentQuery.QueryObject);

            // getting total no. of documents present in current search List


            for (var pageno = 1;; pageno++)
            {
                var task = new SaveSearchResultsJobTaskBEO
                {
                    PageNo      = pageno - 1,
                    PageSize    = _taskBatchSize,
                    TaskNumber  = pageno,
                    TaskPercent =
                        100 /
                        Math.Ceiling((float)totalResultCount /
                                     _taskBatchSize)
                };
                tasks.Add(task);
                //pageno * _taskBatchSize exhaust
                if (pageno * _taskBatchSize >= totalResultCount)
                {
                    break;
                }
            }

            if (tasks.Count == 0)
            {
                LogMessage(Constants.NoTaskToExecuteError, GetType(), Constants.GenerateTaskMethodFullName,
                           EventLogEntryType.Information, jobParameters.JobId, jobParameters.JobRunId);
            }
            LogMessage(string.Format(Constants.TaskGenerationCompletedMessage, tasks.Count), false, LogCategory.Job,
                       null);
            LogMessage(string.Format(Constants.TaskGenerationCompletedMessage, tasks.Count), GetType(),
                       Constants.GenerateTaskMethodFullName, EventLogEntryType.Information, jobParameters.JobId,
                       jobParameters.JobRunId);
            return(tasks);
        }
예제 #2
0
 /// <summary>
 /// Method to execute the query and get the search results
 /// </summary>
 /// <param name="searchBizEntityObj">Document Query Entity</param>
 /// <param name="query">query to execute</param>
 /// <returns></returns>
 private long GetAlertResultCount(DocumentQueryEntity searchBizEntityObj, string query)
 {
     if (searchBizEntityObj != null)
     {
         searchBizEntityObj.QueryObject.QueryList.Clear();
         searchBizEntityObj.QueryObject.QueryList.AddRange(new List <Query>
         {
             new Query
             {
                 SearchQuery = HttpUtility.HtmlDecode(query),
                 Precedence  = 1
             }
         });
         searchBizEntityObj.TransactionName = "AlertsJob - GetAlertResultCount";
         // Do the search to get all results
         return(JobSearchHandler.GetSearchResultsCount(searchBizEntityObj.QueryObject));
     }
     return(0);
 }
        /// <summary>
        /// Atomic work 1)Get old search result 2)New Search 3) Compare 4) generate report to database.
        /// </summary>
        /// <param name="task"></param>
        /// <param name="jobParameters"></param>
        /// <returns></returns>
        protected override bool DoAtomicWork(CompareSavedSearchResultsJobTaskEntity task,
                                             CompareSavedSearchResultsJobBEO jobParameters)
        {
            task.ShouldNotBe(null);
            jobParameters.ShouldNotBe(null);
            var queryContext = _searchResultsProperty.DocumentQuery;

            queryContext.DocumentStartIndex    = 0;
            queryContext.DocumentCount         = 1;
            queryContext.IgnoreDocumentSnippet = true;
            queryContext.OutputFields.Clear();
            queryContext.OutputFields.Add(new Field {
                FieldName = EVSystemFields.DcnField
            });
            try
            {
                LogMessage(string.Format(Constants.DoAtomicWorkStartMessage, task.TaskNumber), GetType(),
                           Constants.DoAtomicMethodFullName, EventLogEntryType.Information, jobParameters.JobId,
                           jobParameters.JobRunId);
                switch (task.TaskType)
                {
                case TypeOfTask.FetchRecordFromDb:
                {
                    var searchResultuuid = string.Format(SaveSearchResultIdentifierBEO.UniqueIdentifierFormat,
                                                         _searchResultsProperty.DocumentQuery.QueryObject.MatterId,
                                                         _searchResultsProperty.DocumentQuery.QueryObject.DatasetId,
                                                         _searchResultsProperty.SearchResultId);
                    _oldSearchResult = SearchResultsService.GetSavedSearchResultsWithDocument(searchResultuuid);
                }
                break;

                case TypeOfTask.FetchRecordFromSearchSubSystem:
                {
                    LogMessage(string.Format("New Search start at : {0}",
                                             DateTime.UtcNow.ConvertToUserTime()), GetType(), Constants.DoAtomicMethodFullName,
                               EventLogEntryType.Information, jobParameters.JobId, jobParameters.JobRunId);

                    //SearchContextObject searchContextObject = ConvertToSearchContextObject(queryContext);
                    ReviewerSearchResults rvwSearchBeo;
                    queryContext.QueryObject.TransactionName =
                        "CompareSavedSearchResultsJob - DoAtomicWork (GetCount)";
                    var totalResultCount = JobSearchHandler.GetSearchResultsCount(queryContext.QueryObject);
                    //searchContextObject.ItemsPerPage = totalResultCount;
                    queryContext.DocumentCount   = (int)totalResultCount;
                    queryContext.TransactionName = "CompareSavedSearchResultsJob - DoAtomicWork (GetAll)";
                    rvwSearchBeo = JobSearchHandler.GetAllDocuments(queryContext, false);
                    // Getting search result list by page index
                    LogMessage(string.Format("New Search End at : {0}", DateTime.UtcNow.ConvertToUserTime()),
                               GetType(), Constants.DoAtomicMethodFullName, EventLogEntryType.Information,
                               jobParameters.JobId, jobParameters.JobRunId);
                    //Constructing New search Result Beo
                    _newSearchResult = new SearchResultsDataContract
                    {
                        Information = new SearchResultsInformationDataContract
                        {
                            Properties =
                                new SearchResultsPropertiesDataContract
                            {
                                SearchResultId           = _searchResultsProperty.SearchResultId,
                                SearchResultsName        = _searchResultsProperty.SearchResultsName,
                                SearchResultsDescription = _searchResultsProperty.SearchResultsDescription,
                                DocumentQuery            = _searchResultsProperty.DocumentQuery
                            },
                            CreatedBy   = _userEntityOfJobOwner.UserId,
                            CreatedDate = DateTime.UtcNow.ConvertToUserTime()
                        }
                    };
                    if (rvwSearchBeo != null)
                    {
                        if (rvwSearchBeo.ResultDocuments != null && rvwSearchBeo.ResultDocuments.Any())
                        {
                            //int totalHitCount = 0;
                            foreach (var document in rvwSearchBeo.ResultDocuments)
                            {
                                var documentDeatail = new SearchResultDocumentDetailsDataContract();
                                documentDeatail.DocumentId            = document.DocumentID;
                                documentDeatail.DocumentControlNumber = document.DocumentControlNumber;
                                documentDeatail.NativeFilePath        = GetNativeFilePath(document);
                                _newSearchResult.Details.Add(documentDeatail);
                            }
                            _newSearchResult.Information.NumberOfDocuments = rvwSearchBeo.ResultDocuments.Count;
                        }
                    }
                    LogMessage(string.Format("New Search Results Construction done at : {0}",
                                             DateTime.UtcNow.ConvertToUserTime()), GetType(), Constants.DoAtomicMethodFullName,
                               EventLogEntryType.Information, jobParameters.JobId, jobParameters.JobRunId);
                }
                break;

                case TypeOfTask.CompareRecords:
                {
                    var comparisonStart = DateTime.Now;
                    _savedSearchCompareReport = new SavedSearchCompareReportBEO();
                    LogMessage(string.Format("Comparison Start at: {0}", DateTime.UtcNow.ConvertToUserTime()),
                               GetType(), Constants.DoAtomicMethodFullName, EventLogEntryType.Information,
                               jobParameters.JobId, jobParameters.JobRunId);
                    var oldResultSet = new List <SearchResultsDetailBEO>();
                    var newResultSet = new List <SearchResultsDetailBEO>();
                    _oldSearchResult.Details.SafeForEach(x => oldResultSet.Add(x.ToBusinessEntity()));
                    _newSearchResult.Details.SafeForEach(x => newResultSet.Add(x.ToBusinessEntity()));

                    // Extracting Common document details
                    (newResultSet.Intersect(oldResultSet).ToList()).SafeForEach(x =>
                                                                                _savedSearchCompareReport.CommonDocumentSet.Add(x));
                    //Extracting Unique document details from new Search result
                    (newResultSet.Except(_savedSearchCompareReport.CommonDocumentSet).ToList()).
                    SafeForEach(x => _savedSearchCompareReport.DocumentsOnlyInNewResultSet.Add(x));
                    //Extracting Unique document details from old(Saved) Search result
                    (oldResultSet.Except(_savedSearchCompareReport.CommonDocumentSet).ToList()).
                    SafeForEach(x => _savedSearchCompareReport.DocumentOnlyInOldResultSet.Add(x));
                    var comparisonStop = DateTime.Now;
                    LogMessage(string.Format("Total Time taken for comparison: {0}",
                                             (comparisonStop - comparisonStart).Milliseconds), GetType(),
                               Constants.DoAtomicMethodFullName, EventLogEntryType.Information, jobParameters.JobId,
                               jobParameters.JobRunId);
                }
                break;

                case TypeOfTask.ConstructFileContent:
                {
                    LogMessage(
                        string.Format("File Construction start at: {0}", DateTime.UtcNow.ConvertToUserTime()),
                        GetType(), Constants.DoAtomicMethodFullName, EventLogEntryType.Information,
                        jobParameters.JobId, jobParameters.JobRunId);

                    //Saving Old search results information
                    _savedSearchCompareReport.OldResultDetails = new SearchResultsInformationBEO
                    {
                        CreatedBy          = _oldSearchResult.Information.CreatedBy,
                        CreatedDate        = _oldSearchResult.Information.CreatedDate,
                        NumberOfDocuments  = _oldSearchResult.Information.NumberOfDocuments,
                        NumberOfSearchHits = _oldSearchResult.Information.NumberOfSearchHits
                    };
                    //Saving Old search results information
                    _savedSearchCompareReport.NewResultDetails = new SearchResultsInformationBEO
                    {
                        CreatedBy          = _newSearchResult.Information.CreatedBy,
                        CreatedDate        = _newSearchResult.Information.CreatedDate,
                        NumberOfDocuments  = _newSearchResult.Information.NumberOfDocuments,
                        NumberOfSearchHits = _newSearchResult.Information.NumberOfSearchHits
                    };
                    _savedSearchCompareReport.CreatedBy       = _userEntityOfJobOwner.UserId;
                    _savedSearchCompareReport.SearchQueryTerm = queryContext.QueryObject.DisplayQuery;
                    _savedSearchCompareReport.CreatedDate     = DateTime.UtcNow.ConvertToUserTime();
                    //File Creation Logic
                    CreateReportFile(out _reportString);
                    LogMessage(string.Format("File Construction End at: {0}", DateTime.UtcNow.ConvertToUserTime()),
                               GetType(), Constants.DoAtomicMethodFullName, EventLogEntryType.Information,
                               jobParameters.JobId, jobParameters.JobRunId);
                    //Clean up all class level variable
                    _oldSearchResult = null;
                    _newSearchResult = null;
                }
                break;
                }
            }
            catch (EVException ex)
            {
                _isJobFailed = true;
                WriteToEventViewer(ex, GetType(), MethodBase.GetCurrentMethod().Name, jobParameters.JobId,
                                   jobParameters.JobRunId);
                HandleTaskException(null, string.Format(Constants.TaskKeyStringFormat, task.TaskType),
                                    ErrorCodes.ProblemInDoAtomicWork);
            }
            catch (Exception ex)
            {
                _isJobFailed = true;
                // Handle exception in DoAutomic
                LogMessage(ex, GetType(), MethodBase.GetCurrentMethod().Name, EventLogEntryType.Error,
                           jobParameters.JobId, jobParameters.JobRunId);
                HandleTaskException(ex, string.Format(Constants.TaskKeyStringFormat, task.TaskType),
                                    ErrorCodes.ProblemInDoAtomicWork);
            }
            return(true);
        }
예제 #4
0
        /// <summary>
        ///     This is the overridden GenerateTasks() method.
        /// </summary>
        /// <param name="jobParameters">GlobalReplaceJobBEO</param>
        /// <param name="previouslyCommittedTaskCount">int</param>
        /// <returns>list of GlobalReplaceTaskBEO object</returns>
        protected override Tasks <GlobalReplaceTaskBEO> GenerateTasks(GlobalReplaceJobBEO jobParameters,
                                                                      out int previouslyCommittedTaskCount)
        {
            var tasks = new Tasks <GlobalReplaceTaskBEO>();

            previouslyCommittedTaskCount = 0;
            try
            {
                LogMessage(Constants.TaskGenerationStartedMessage, false, LogCategory.Job, null);
                LogMessage(Constants.TaskGenerationStartedMessage, GetType(),
                           "LexisNexis.Evolution.BatchJobs.FindandReplaceJob.GenerateTasks", EventLogEntryType.Information,
                           jobParameters.JobId, jobParameters.JobRunId);

                var searchQueryEntity = new SearchQueryEntity
                {
                    MatterId               = jobParameters.SearchContext.MatterId,
                    ReviewsetId            = jobParameters.SearchContext.ReviewSetId,
                    DatasetId              = jobParameters.SearchContext.DataSetId,
                    IsConceptSearchEnabled = jobParameters.SearchContext.IsConceptSearchEnabled
                };
                searchQueryEntity.TransactionName = "FindandReplaceJob - GenerateTasks (GetCount)";
                searchQueryEntity.QueryList.Add(new Query(jobParameters.SearchContext.Query));
                long totalResultCount = JobSearchHandler.GetSearchResultsCount(searchQueryEntity);

                if (totalResultCount > 0)
                {
                    //estimated enqueue time for a document is 30 seconds
                    _mEstimatedTimeToIndexInMinutes = (totalResultCount * 30) / 60;
                    for (int pageno = 1;; pageno++)
                    {
                        var task = new GlobalReplaceTaskBEO
                        {
                            PageNumber        = pageno - 1,
                            PageSize          = _mTaskBatchSize,
                            TaskNumber        = pageno,
                            SearchQueryObject = searchQueryEntity,
                            TaskPercent       = 100 / Math.Ceiling((float)totalResultCount / _mTaskBatchSize),
                            TaskComplete      = false,
                            ActualString      = jobParameters.ActualString,
                            ReplaceString     = jobParameters.ReplaceString
                        };
                        tasks.Add(task);
                        //pageno * _taskBatchSize exhaust
                        if (pageno * _mTaskBatchSize >= totalResultCount)
                        {
                            break;
                        }
                    }
                }
                else
                {
                    CustomNotificationMessage = string.Format(Constants.SearchTextNotFound,
                                                              jobParameters.ActualString);
                }
                if (tasks.Count == 0)
                {
                    LogMessage(Constants.NoTaskToExecuteError, GetType(),
                               "LexisNexis.Evolution.BatchJobs.FindandReplaceJob.GenerateTasks", EventLogEntryType.Information,
                               jobParameters.JobId, jobParameters.JobRunId);
                }
                LogMessage(string.Format(Constants.TaskGenerationCompletedMessage, tasks.Count), false,
                           LogCategory.Job, null);
                LogMessage(string.Format(Constants.TaskGenerationCompletedMessage, tasks.Count), GetType(),
                           "LexisNexis.Evolution.BatchJobs.FindandReplaceJob.GenerateTasks", EventLogEntryType.Information,
                           jobParameters.JobId, jobParameters.JobRunId);
            }
            catch (EVException ex)
            {
                EvLog.WriteEntry(Constants.JOB_NAME + " : " + jobParameters.JobId + Constants.TaskGenerationFails,
                                 ex.ToUserString(), EventLogEntryType.Error);
                LogException(jobParameters.JobId, ex, string.Empty, LogCategory.Job, string.Empty,
                             ErrorCodes.ProblemInGenerateTasks);
            }
            catch (Exception exp)
            {
                EvLog.WriteEntry(Constants.JOB_NAME + " : " + jobParameters.JobId + Constants.TaskGenerationFails,
                                 exp.Message, EventLogEntryType.Error);
                LogException(jobParameters.JobId, exp, string.Empty, LogCategory.Job, string.Empty,
                             ErrorCodes.ProblemInGenerateTasks);
            }
            return(tasks);
        }