/// <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)); } }
/// <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); } }
/// <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)); } }
/// <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)); } }
/// <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)); } }
/// <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)); } }
/// <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(); } }