/// <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 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 para obtener la cantidad de facturas de un cliente en un rango de fechas /// </summary> /// <param name="request">Objeto request con los parámetros necesarios</param> /// <returns>Respuesta de la llamada en formato string</returns> public string GetCustomerInvoicesCount(InvoiceCountRequest request) { var result = string.Empty; var prms = new Dictionary <string, string>(); prms.Add("id", request.CustomerId); prms.Add("start", request.StartDate.ToString("yyyy-MM-dd")); prms.Add("finish", request.EndDate.ToString("yyyy-MM-dd")); var response = new WebUtils(url, prms).GetHttpRequest(); return(response); }
/// <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); }
/// <summary> /// Método de búsqueda por divición rándom /// </summary> /// <param name="customerId">Id del usuario</param> /// <param name="startDate">Fecha de inicio</param> /// <param name="endDate">Fecha de fin</param> /// <returns>Objeto del tipo Json</returns> public JsonResult randomSearch(string customerId, string startDate, string endDate) { var sDate = DateTime.MinValue; var eDate = DateTime.MinValue; if (DateTime.TryParse(startDate, out sDate) && DateTime.TryParse(endDate, out eDate)) { var request = new InvoiceCountRequest(customerId, sDate, eDate); var result = new RandomLogic().GetCustomerInvoicesCount(request); return(Json(result, JsonRequestBehavior.AllowGet)); } else { Response.StatusCode = (int)HttpStatusCode.InternalServerError; return(Json(new { message = "Error" }, JsonRequestBehavior.AllowGet)); } }