예제 #1
0
 /// <summary>
 /// Obtiene la historia de posiciones de un barco dentro de un intervalo de tiempo
 /// </summary>
 /// <param name="ship">Barco del cual se requieren las posiciones</param>
 /// <param name="startTime">Tiempo de inicio</param>
 /// <param name="endTime">Tiempo de fin</param>
 /// <returns></returns>
 public List <ShipPosition> GetShipPositionHistory(string ship, DateTime startTime, DateTime endTime)
 {
     using (var dao = new ShipPositionDataAccess())
     {
         return(dao.GetShipPositionHistory(ship, startTime, endTime));
     }
 }
예제 #2
0
 /// <summary>
 /// Agrega una posicion para un barco determinado a la base de datos
 /// </summary>
 /// <param name="shipPosition">Objecto ShipPosition</param>
 public void Insert(ShipPosition shipPosition)
 {
     using (var dao = new ShipPositionDataAccess())
     {
         dao.Insert(shipPosition);
     }
 }
예제 #3
0
 /// <summary>
 /// Verifica si un barco esta a una distancia igual o menor de un port o portfacility determinado
 /// </summary>
 /// <param name="imoNUM">Numero IMO del barco</param>
 /// <param name="place">Nombre LRIT del port o port facility</param>
 /// <param name="distance">Distancia</param>
 /// <returns>Verdadero si esta a menor o igual distancia, Falso si no</returns>
 public bool IsShipInArea(string imoNUM, string place, double distance, int ddpVersion)
 {
     using (var dao = new ShipPositionDataAccess())
     {
         return(dao.IsShipInArea(imoNUM, place, distance, ddpVersion));
     }
 }
예제 #4
0
 /// <summary>
 /// Obtiene la ultima posicion de un barco
 /// </summary>
 /// <param name="IMONum">Numero IMO del barco</param>
 /// <returns>Ultima posicion o null si no hay posiciones</returns>
 public ShipPosition GetLastShipPosition(string IMONum)
 {
     using (var dao = new ShipPositionDataAccess())
     {
         return(dao.GetLastShipPosition(IMONum));
     }
 }
예제 #5
0
        /// <summary>
        /// Obtiene las ultimas posiciones de todos nuestros barcos dentro de una area rectangular
        /// </summary>
        /// <param name="recArea">Area rectangular</param>
        /// <param name="lastPositions">Cantidad de posiciones</param>
        /// <returns></returns>
        public List <ShipPosition> GetLastPositionsInRectangularArea(string recArea, int lastPositions)
        {
            string polygon = getPolygonFromString(recArea);

            using (var dao = new ShipPositionDataAccess())
            {
                List <ShipPosition> shipsInArea = dao.GetShipsInRectangularArea(polygon);
                return(LastNPositions(lastPositions, shipsInArea));
            }
        }
예제 #6
0
        /// <summary>
        /// Obtiene las ultimas posiciones de todos nuestros barcos dentro de una area circular
        /// </summary>
        /// <param name="circularArea">Area circular</param>
        /// <param name="lastPositions">Cantidad de posiciones</param>
        /// <returns></returns>
        public List <ShipPosition> GetLastPositionsInCircularArea(string circularArea, int lastPositions)
        {
            string center       = getCenterInCircularArea(circularArea);
            double radius_in_nm = getRadiusFromCircularArea(circularArea);

            //Convert to METERS
            double radius_in_meters = radius_in_nm * 1852.0;

            using (var dao = new ShipPositionDataAccess())
            {
                List <ShipPosition> shipsInArea = dao.GetShipsInCircularArea(center, radius_in_meters);

                return(LastNPositions(lastPositions, shipsInArea));
            }
        }
예제 #7
0
        /// <summary>
        /// Verifica si la ultima posicion de cada uno de nuestros barcos esta en alguna standing order.
        /// Tinen en cuenta hay un STOP para ese requestor.
        /// Tiene en cuenta la titulacion
        /// </summary>
        public void Process()
        {
            ShipDataAccess sda = null;

            try
            {
                sda = new ShipDataAccess();

                var cgm        = new ContractingGovermentManager();
                var ddpm       = new DDPVersionManager();
                var ddpVersion = ddpm.GetCurrentDDPVersion();

                log.Info("Procesando standing orders.");
                foreach (Ship ship in sda.GetAll())
                {
                    ShipPosition pos = null;
                    using (var spda = new ShipPositionDataAccess())
                    {
                        pos = spda.GetLastShipPosition(ship.IMONum);
                    }

                    if (pos == null)
                    {
                        log.Info(string.Format("No hay ultima posicion para {0}", ship.IMONum));
                        continue;
                    }

                    List <StandingOrder> orders = new List <StandingOrder>();
                    using (var soda = new StandingOrderDataAccess())
                    {
                        orders = soda.GetOrdersForPosition(pos, ddpVersion);
                    }

                    if (orders.Count == 0)
                    {
                        log.Info(string.Format("No hay ninguna SO para {0},posid:{1},ddpVer:{2}", ship.IMONum, pos.Id, ddpVersion.Id));
                        continue;
                    }

                    var sprm = new ShipPositionReportManager();

                    foreach (StandingOrder order in orders)
                    {
                        var cg = order.Place.ContractingGoverment;

                        //Skipeo las SO de argentina (no chekeo si mis barcos estan en mis SO)
                        if (cg.LRITId == 1005)
                        {
                            continue;
                        }

                        using (var asprda = new ActiveShipPositionRequestDataAccess())
                        {
                            if (asprda.IsStopRequired(ship, cg.LRITId.ToString()) == true)
                            {
                                log.Info("Stop Activo Para el Barco: " + ship.IMONum + " Requestor: " + cg.LRITId.ToString());
                                continue;
                            }
                        }

                        log.Info(string.Format("El barco {0} esta dentro de la standing order {1}", ship.IMONum, order.PlaceId));

                        if (cgm.IsEntitled(cg, pos, ddpVersion, false) == false)
                        {
                            log.Info("no esta titulado para recibir la informacion, se envia recibo");
                            ReceiptManager.SendReceipt(cg.LRITId.ToString(), "0", DataCenterLogic.DataCenterTypesIDE.receiptCodeType.Item0,
                                                       string.Format("Not entitled to recieve"));
                        }
                        else
                        {
                            sprm.SendReport(cg.LRITId.ToString(), pos, "", DataCenterLogic.DataCenterTypesIDE.responseTypeType.Item1, DataCenterLogic.DataCenterTypesIDE.messageTypeType.Item1);
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                log.Error("Error procesando StandingOrders", ex);
            }
            finally
            {
                sda.Dispose();
            }
        }