using DigitalSystem.Servicios; using System; using System.Collections.Generic; using System.Data; using System.Linq; using System.Text; using System.Text.RegularExpressions; using System.Threading.Tasks; using System.Xml; namespace DigitalSystem.Usuarios { class gps_gmtclase { public int Llave; public int IdCliente; public int dia; public int hora; public int _IdPosicionMax; private string obtenerToken; public ServociosGmt serviciosGmt; public async Task> ListaOperadoresCerca() { var listaoperadorescerca = new List(); DataTable dt = new DataTable(); if (serviciosGmt != null) { var coords = (Entry)serviciosGmt.FindByName("Pentry_ubicacion"); if (!string.IsNullOrEmpty(coords.Text)) { var coordsub = await ObtenerCoordenadas(coords.Text); var opesCoordsgps = await getOperadoresJson(); var xmlsDoc = new XmlDocument(); xmlsDoc.LoadXml(opesCoordsgps); var lista_posicion = xmlsDoc.FirstChild.FirstChild.FirstChild.FirstChild.ChildNodes[1]; var negocios = new CapaDeNegocio.CapaDeNegocio(); negocios.commandText = "monitor_get_AvailableOps_Disp"; negocios.dataCommand = new Dictionary { { "iUi", DataAplication.GetInstance().dt.Rows[0]["usr_id"].ToString() } }; dt = negocios.ProcesarSolicitudes(); dt.Columns.Add(new DataColumn("coordenadas")); dt.Columns.Add(new DataColumn("distancia")); foreach (DataRow dtr in dt.Rows) { if (dtr["Disponible"].ToString() == "1") { foreach (var nodes in lista_posicion.ChildNodes) { var latitud = ((XmlNode)nodes).ChildNodes[3]; var longitud = ((XmlNode)nodes).ChildNodes[4]; var nombre = ((XmlNode)nodes).ChildNodes[5]; if (nombre.InnerText.ToString().Contains(" ")) { if (nombre.InnerText.ToString().Substring(0, nombre.InnerText.ToString().IndexOf(" ")) == dtr["veh_economy"].ToString()) { dtr["coordenadas"] = $"{latitud.InnerText.ToString()},{longitud.InnerText.ToString()}"; var latitud1 = coordsub[1].Value; var longitud1 = coordsub[2].Value; var latitudabs = Math.Abs(decimal.Parse(latitud.InnerText) - decimal.Parse(latitud1)); var longitudabs = Math.Abs(decimal.Parse(longitud.InnerText) - decimal.Parse(longitud1)); dtr["distancia"] = (latitudabs + longitudabs).ToString(); break; } } } } else { dtr["distancia"] = "500"; } } } } if (dt.Columns.Contains("distancia")) { foreach (DataRow dtr in dt.Rows) { if (string.IsNullOrEmpty(dtr["distancia"].ToString())) { dtr["distancia"] = "500"; } } dt.DefaultView.Sort = "distancia asc"; var dt1 = dt.DefaultView.ToTable(); foreach (DataRow dtr in dt1.Rows) { var operador = serviciosGmt.sugerenciaOperadores.FirstOrDefault(item => item.emp_showname == dtr["emp_showname"].ToString()); if (operador != null) { listaoperadorescerca.Add(new Operadores { emp_id = operador.emp_id, emp_showname = operador.emp_showname }); } } } return listaoperadorescerca; } private async Task GetToken() { IdCliente = 912242451; hora = DateTime.UtcNow.Hour; dia = DateTime.UtcNow.Day; Llave = hora * dia + IdCliente; _IdPosicionMax = 0;//30900053593; HttpClient client = new HttpClient(); var request = new HttpRequestMessage(HttpMethod.Post, "https://gateway2.spheregt.com/ws_gruas_GMT/ws_Gruas_GMT.svc"); request.Headers.Add("SOAPAction", "http://tempuri.org/Iws_Gruas_GMT/ObtenerToken"); var soapEnvelope = @" " + Llave + @" " + IdCliente + @" "; request.Content = new StringContent(soapEnvelope, Encoding.UTF8, "text/xml"); var response = await client.SendAsync(request); var result = await response.Content.ReadAsStringAsync(); var xmlRes = new XmlDocument(); xmlRes.LoadXml(result); return xmlRes.DocumentElement.FirstChild.FirstChild.FirstChild.InnerText; } private async Task getOperadoresJson() { if (string.IsNullOrEmpty(obtenerToken)) obtenerToken = await GetToken(); var client = new HttpClient(); var request = new HttpRequestMessage(HttpMethod.Post, "https://gateway2.spheregt.com/ws_gruas_GMT/ws_Gruas_GMT.svc"); request.Headers.Add("SOAPAction", "http://tempuri.org/Iws_Gruas_GMT/ObtenerPosicionActual"); var soapEnvelope = @" " + _IdPosicionMax + @" " + Llave + @" " + IdCliente + @" " + obtenerToken + @" " ; request.Content = new StringContent(soapEnvelope, Encoding.UTF8, "text/xml"); var response = await client.SendAsync(request); var gruasGps = await response.Content.ReadAsStringAsync(); return gruasGps; } private async Task ObtenerCoordenadas(string coords) { string pattern = @"(-?\d+\.\d+),\s*(-?\d+\.\d+)"; var coords1 = Regex.Match(coords.Replace(" ",""), pattern); return coords1.Groups;// [1].Value+","+ coords1.Groups[2].Value; } } }