Beispiel #1
0
        private static void SincronizarAbiertas(Query q)
        {
            s = q.ComandoSql;
            if (q.Parametrizar)
            {
                s += Ambiente.OracleDate(q.UltSincronizacion);
            }
            else
            {
                var mins = (DateTime.Now - q.UltSincronizacion).TotalMinutes;
                if (mins <= Ambiente.MinAbiertas)
                {
                    return;
                }
            }

            abiertas = abiertaController.SelectAll();

            DataTable atencionesAbiertas = Ambiente.Oracledb.Select(s);

            if (atencionesAbiertas.Rows.Count > 0)
            {
                i = 0;
                foreach (DataRow a in atencionesAbiertas.Rows)
                {
                    var abiertalocal = abiertas.FirstOrDefault(x => x.NrAtendimento.Equals(a["NR_ATENDIMENTO"].ToString()));

                    if (abiertalocal != null)
                    {
                        continue;
                    }


                    var abierta = new Abierta();
                    abierta.NrAtendimento      = a["NR_ATENDIMENTO"].ToString();
                    abierta.CdPaciente         = a["CD_PACIENTE"].ToString();
                    abierta.CdMedico           = a["CD_MEDICO"].ToString();
                    abierta.CdEstabelecimento  = a["CD_ESTABELECIMENTO"].ToString();
                    abierta.DtEntrada          = DateTime.Parse(a["DT_ENTRADA"].ToString());
                    abierta.CdUnidadeBasica    = a["CD_UNIDADE_BASICA"].ToString();
                    abierta.CdSetorAtendimento = a["CD_SETOR_ATENDIMENTO"].ToString();
                    abierta.DtAlta             = null;
                    abierta.DtActualizacion    = null;
                    abierta.CreatedAt          = DateTime.Now;
                    if (abiertaController.InsertOne(abierta))
                    {
                        WriteStatus("ATENCIONES ABIERTAS", i, atencionesAbiertas.Rows.Count - 1);
                        i++;
                    }
                }
                q.UltSincronizacion = DateTime.Now;
                queryController.Update(q);
            }
            else
            {
                WriteStatus("TODO ESTÁ SINCRONIZADO " + DateTime.Now.ToString("HH:mm:ss"));
            }
        }
Beispiel #2
0
        /// <summary>
        /// Pasa el nodo a la lista abierta
        /// </summary>
        /// <param name="actual">Punto donde está el algoritmo</param>
        /// <param name="i">Incremento de la coordenada X</param>
        /// <param name="j">Incremento de la coordenada Y</param>
        /// <param name="coste">Coste del paso</param>
        private void NodoAAbierta(Baldosa actual, int i, int j, double coste)
        {
            Mapa[actual.Posicion.X + i, actual.Posicion.Y + j].Abierto = true;
            Mapa[actual.Posicion.X + i, actual.Posicion.Y + j].G       = Mapa[actual.Posicion.X, actual.Posicion.Y].G + coste;
            Mapa[actual.Posicion.X + i, actual.Posicion.Y + j].H       =
                Calculo.Distancia(Mapa[actual.Posicion.X + i, actual.Posicion.Y + j], Meta);
            Mapa[actual.Posicion.X + i, actual.Posicion.Y + j].Padre = Mapa[actual.Posicion.X, actual.Posicion.Y];

            Abierta.Enqueue(Mapa[actual.Posicion.X + i, actual.Posicion.Y + j],
                            Mapa[actual.Posicion.X + i, actual.Posicion.Y + j].F);
        }
Beispiel #3
0
 /// <summary>
 /// Reorienta el enlace del nodo
 /// </summary>
 /// <param name="actual">Punto donde está el algoritmo</param>
 /// <param name="i">Incremento de la coordenada X</param>
 /// <param name="j">Incremento de la coordenada Y</param>
 /// <param name="coste">Coste del paso</param>
 private void ReorientacionEnlaces(Baldosa actual, int i, int j, double coste)
 {
     if (Mapa[actual.Posicion.X + i, actual.Posicion.Y + j].G >
         Mapa[actual.Posicion.X, actual.Posicion.Y].G + coste) // Si el coste es menor
     {
         Mapa[actual.Posicion.X + i, actual.Posicion.Y + j].G =
             Mapa[actual.Posicion.X, actual.Posicion.Y].G + coste;
         Mapa[actual.Posicion.X + i, actual.Posicion.Y + j].Padre = Mapa[actual.Posicion.X, actual.Posicion.Y];
         Abierta.UpdatePriority(Mapa[actual.Posicion.X + i, actual.Posicion.Y + j],
                                Mapa[actual.Posicion.X + i, actual.Posicion.Y + j].F);
     }
 }
Beispiel #4
0
 /// <summary>
 /// Operaciones de limpieza del algoritmo
 /// </summary>
 protected internal void LimpiarListas(List <Baldosa> camino)
 {
     Abierta.Clear();
     foreach (var item in Mapa)
     {
         Abierta.ResetNode(item);
         if (!camino.Contains(item))
         //if (item.Abierto == true)
         {
             item.Abierto = null;
         }
     }
 }
Beispiel #5
0
        /// <summary>
        /// Ejecución del algoritmo
        /// </summary>
        /// <returns>Punto del mapa al que se llega</returns>
        private Baldosa CalculoAlgoritmo()
        {
            Baldosa resultado = null;
            var     salir     = false;

            while (!salir)
            {
                if (Abierta.Count == 0)
                {
                    salir = true;
                }
                else
                {
                    var actual = Abierta.Dequeue();

                    //Cerramos el nodo
                    actual.Abierto = false;
                    MainThread.BeginInvokeOnMainThread(() => { actual.Celda.BackgroundColor = Color.Teal; });

                    if (actual.Posicion.Equals(Meta.Posicion))
                    {
                        resultado = Mapa[Meta.Posicion.X, Meta.Posicion.Y];
                        salir     = true;
                    }
                    else
                    {
                        // Expansion del punto actual
                        if (MovimientoDiagonal && MovimientoOrtogonal)
                        {
                            ExpansionConDiagonales(actual);
                        }
                        else
                        {
                            if (MovimientoOrtogonal)
                            {
                                ExpansionOrtogonal(actual);
                            }
                            if (MovimientoDiagonal)
                            {
                                ExpansionDiagonal(actual);
                            }
                        }
                    }
                }
            }

            return(resultado);
        }
 public bool InsertOne(Abierta o)
 {
     try
     {
         using (var db = new SyncContext())
         {
             db.Add(o);
             db.SaveChanges();
             return(true);
         }
     }
     catch (Exception ex)
     {
         Ambiente.Message("Algo salío mal con: " + MethodBase.GetCurrentMethod().Name + " @" + GetType().Name + "\n" + ex.Message);
     }
     return(false);
 }
 public bool Update(Abierta o)
 {
     try
     {
         using (var db = new SyncContext())
         {
             db.Entry(o).State = EntityState.Modified;
             db.SaveChanges();
             return(true);
         }
     }
     catch (Exception ex)
     {
         Ambiente.Message("Algo salío mal con: " + MethodBase.GetCurrentMethod().Name + " @" + GetType().Name + "\n" + ex.Message);
     }
     return(false);
 }
Beispiel #8
0
        /// <summary>
        /// Llamada al algoritmo
        /// </summary>
        /// <returns>Objeto con el camino y el coste asociado</returns>
        public override AEstrellaResultado Algoritmo()
        {
            AEstrellaResultado resultado;

            // Calculamos la heurística entre el inicio y el final
            Mapa[Inicio.Posicion.X, Inicio.Posicion.Y].H = Calculo.Distancia(Inicio, Meta);

            // Agregamos el nodo inicio a la lista abierta
            Mapa[Inicio.Posicion.X, Inicio.Posicion.Y].Abierto = true;
            Abierta.Enqueue(Mapa[Inicio.Posicion.X, Inicio.Posicion.Y], Mapa[Inicio.Posicion.X, Inicio.Posicion.Y].F);

            // Ejecutamos el algoritmo
            var punto = CalculoAlgoritmo();

            // Procesamos el resultado
            resultado = ProcesarResultado(punto);
            return(resultado);
        }