/// <summary> /// Método que contiene el algortmo de búsqueda por la mitad, divide a la mitad la búsqueda si esta arrojó más de 100 resultadoos /// </summary> /// <param name="request">Objeto request que contiene la información del cliente y fechas de búsqueda</param> /// <returns>Objeto response con la información del número de facturas y el número de peticiones</returns> public InvoiceCountResponse GetCustomerInvoicesCount(InvoiceCountRequest request) { var invoicesCount = 0; var resuelveData = new ResuelveData(); var result = new InvoiceCountResponse(); var currentRequest = new InvoiceCountRequest(request.CustomerId, request.StartDate, request.EndDate); var r = resuelveData.GetCustomerInvoicesCount(currentRequest); if (int.TryParse(r, out invoicesCount)) { result.AddInvoicesAndCalls(Convert.ToInt32(r), 1); return(result); } else { // Se obtiene la cantidad de días y se divide a la mitad var halfOfDays = (int)((request.EndDate - request.StartDate).TotalDays / 2); var requestLeft = new InvoiceCountRequest(request.CustomerId, request.StartDate, request.StartDate.AddDays(halfOfDays)); var requestRight = new InvoiceCountRequest(request.CustomerId, request.StartDate.AddDays(halfOfDays + 1), request.EndDate); var resultLeft = GetCustomerInvoicesCount(requestLeft); var resultRigth = GetCustomerInvoicesCount(requestRight); result.AddInvoicesAndCalls(resultLeft.CustomerInvoices, resultLeft.Calls + 1); result.AddInvoicesAndCalls(resultRigth.CustomerInvoices, resultRigth.Calls); return(result); } }
/// <summary> /// Método que contiene el algortmo de búsqueda por la mitad, divide de forma random la búsqueda si esta arrojó más de 100 resultadoos /// </summary> /// <param name="request">Objeto request que contiene la información del cliente y fechas de búsqueda</param> /// <returns>Objeto response con la información del número de facturas y el número de peticiones</returns> public InvoiceCountResponse GetCustomerInvoicesCount(InvoiceCountRequest request) { var invoicesCount = 0; var resuelveData = new ResuelveData(); var result = new InvoiceCountResponse(); var currentRequest = new InvoiceCountRequest(request.CustomerId, request.StartDate, request.EndDate); var r = resuelveData.GetCustomerInvoicesCount(currentRequest); if (int.TryParse(r, out invoicesCount)) { result.AddInvoicesAndCalls(Convert.ToInt32(r), 1); return(result); } else { // Se obtiene la cantidad de días y se obtiene un resultado random de días para dividir Random rnd = new Random(); var numberOfDays = (int)((request.EndDate - request.StartDate).TotalDays); var randomDays = rnd.Next(numberOfDays); var requestLeft = new InvoiceCountRequest(request.CustomerId, request.StartDate, request.StartDate.AddDays(randomDays)); var requestRight = new InvoiceCountRequest(request.CustomerId, request.StartDate.AddDays(randomDays + 1), request.EndDate); var resultLeft = GetCustomerInvoicesCount(requestLeft); var resultRigth = GetCustomerInvoicesCount(requestRight); result.AddInvoicesAndCalls(resultLeft.CustomerInvoices, resultLeft.Calls + 1); result.AddInvoicesAndCalls(resultRigth.CustomerInvoices, resultRigth.Calls); return(result); } }
/// <summary> /// Método que contiene el algoritmo de búsqueda por día, divide por días el rango de fechas especificado y busca por cada día /// </summary> /// <param name="request">Objeto request que contiene la información del cliente y fechas de búsqueda</param> /// <returns>Objeto response con la información del número de facturas y el número de peticiones</returns> public InvoiceCountResponse GetCustomerInvoicesCount(InvoiceCountRequest request) { var resuelveData = new ResuelveData(); var result = new InvoiceCountResponse(); for (var currentDate = request.StartDate; currentDate <= request.EndDate; currentDate = currentDate.AddDays(1)) { var currentRequest = new InvoiceCountRequest(request.CustomerId, currentDate, currentDate); var r = resuelveData.GetCustomerInvoicesCount(currentRequest); result.AddInvoicesAndCalls(Convert.ToInt32(r), 1); } return(result); }