public void AddOrReplace(ShipPositionRequest shipPositionRequest)
 {
     using (var da = new ActiveShipPositionRequestDataAccess())
     {
         da.AddOrReplace(shipPositionRequest);
     }
 }
 /// <summary>
 /// Borra todos los requerimientos activos para un requestor en particular
 /// </summary>
 /// <param name="spr">ShipPositionRequest</param>
 public void RemoveAllForRequestor(ShipPositionRequest spr)
 {
     using (var asprda = new ActiveShipPositionRequestDataAccess())
     {
         asprda.RemoveAllForRequestor(spr);
     }
 }
 /// <summary>
 /// Retorna el periodo minimo de poleo para un barco determinado en minutos
 /// </summary>
 /// <param name="IMONum">ship IMO number</param>
 /// <param name="sprId">Id del Ship Position Request, que debe ser omitido para hacer la verificacion</param>
 /// <returns>Periodo minimo para el barco, o menor que cero si no hay nada configurado</returns>
 public int GetMinPeriodForShip(string IMONum, int sprId)
 {
     log.Debug("Obteniendo el periodo minimo del barco");
     using (ActiveShipPositionRequestDataAccess da = new ActiveShipPositionRequestDataAccess())
     {
         int minReqType = da.GetMinPeriodicRequestTypeForShip(IMONum, sprId);
         return(ShipPositionRequestHelper.GetMinutes(minReqType));
     }
 }
        /// <summary>
        /// Crea un nuevo request activo
        /// </summary>
        /// <param name="requestId">ID del ShipPositionRequest al que hace referencia</param>
        public void AddNew(int requestId)
        {
            //Prepare new active request
            ActiveShipPositionRequest newActiveRequest = new ActiveShipPositionRequest();

            newActiveRequest.LastMessage = "Added";
            newActiveRequest.RequestId   = requestId;
            newActiveRequest.Status      = 0;
            newActiveRequest.LastTime    = DateTime.UtcNow;

            using (var da = new ActiveShipPositionRequestDataAccess())
            {
                da.Create(newActiveRequest);
            }
        }
Esempio n. 5
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();
            }
        }
        /// <summary>
        /// Esta es la funcion principal del manejador de pedidos activos.
        /// Itera y procesa todos los pedidos activo.
        /// Es encargada de enviar (cuando se cumplan las condiciones) los mensajes a la cola de salida.
        /// </summary>
        public void Process(int hour, int mins) //hora: 0-23, minutes={0, 15, 30, 45}
        {
            //log.Info("Procesando Active Ship Position Request");
            using (var asprda = new ActiveShipPositionRequestDataAccess())
            {
                List <ActiveShipPositionRequest> asprlist = asprda.GetAll();
                foreach (ActiveShipPositionRequest aspr in asprlist)
                {
                    try
                    {
                        //Verifica si el tiempo de inicio ya paso
                        var      spm    = new ShipPositionManager();
                        var      spr    = aspr.ShipPositionRequest;
                        DateTime UtcNow = DateTime.UtcNow;
                        //log.Debug("Verificando estado del ASPR");
                        if (aspr.Status == 0)
                        {
                            //Condicion para activar el envio
                            if (RequestReadyToActive(aspr, UtcNow) == true)
                            {
                                if (TryReprog(spr) == true)
                                {
                                    asprda.Update(aspr.Id, 1, UtcNow);
                                    log.Debug("Reprogramado OK ==> estado ACTIVO");
                                }
                                else
                                {
                                    log.Error("Reprogramado ERROR");
                                }
                            }
                        }
                        else
                        {
                            //Status = 1
                            if (spr.StopTime != null && UtcNow >= spr.StopTime)
                            {
                                var IMONum         = aspr.ShipPositionRequest.IMONum;
                                var currentReqType = ShipPositionRequestHelper.GetMinutes(aspr.ShipPositionRequest.RequestType);
                                var minReqType     = GetMinPeriodForShip(IMONum, 0);

                                log.Debug("Se cumplio Stop Time del request eliminando request activo");

                                asprda.Remove(aspr);

                                //Verifica si el request tiene frecuencia distinta a la actual y reprograma si es necesario
                                //si el request caduco reprograma para que reporte cada 6 horas
                                log.Debug("Verificando si hay que reprogramar el equipo");
                                if (minReqType == currentReqType)
                                {
                                    using (var sda = new ShipDataAccess())
                                    {
                                        int newMinPeriod = GetMinPeriodForShip(IMONum, 0);

                                        if (newMinPeriod == -1)
                                        {
                                            newMinPeriod = 360;
                                        }

                                        //Reprogram ASP
                                        try
                                        {
                                            var aspman = new AspManager();
                                            aspman.CreatePollMessage(DateTime.UtcNow.AddMinutes(8), newMinPeriod, sda.getByIMONum(spr.IMONum), PollAction.Reprogram);
                                        }
                                        catch (Exception ex)
                                        {
                                            ShipManager.ChangeShipStatus(ShipStatus.Error, sda.getByIMONum(spr.IMONum));
                                            log.Error("Hubo un error en la reprogramacion del barco" + Environment.NewLine + Environment.NewLine + ex + Environment.NewLine + Environment.NewLine);
                                        }
                                    }
                                }
                                //log.Debug("ASPR " + aspr.Id + " REMOVED: Status: " + aspr.Status + " Barco:" + spr.IMONum);
                                //log.Debug("Requestor: " + spr.DataUserRequestor);
                                //log.Debug("Access-Request Type: " + spr.AccessType + "-" + spr.RequestType);
                                continue;
                            }

                            //log.Debug("Verificando si es request de unica vez");
                            //ONE TIME POLL
                            if (ShipPositionRequestHelper.IsOneTimePoll(spr.RequestType) == true)
                            {
                                //log.Debug("verificando si hay nueva posicion registrada");
                                ShipPosition spos = spm.GetLastShipPosition(spr.IMONum);
                                if (spos != null && spos.TimeStamp > aspr.LastTime)
                                {
                                    log.Debug("Nueva posicion con fecha > LastTime ... verificando titulacion");
                                    CheckEntitlementAndSendReportOrReceipt(spr, spos);
                                    asprda.Remove(aspr);
                                    ShipManager.ChangeShipStatus(ShipStatus.Ok, ShipManager.getByIMONum(spr.IMONum));
                                    log.Debug("ASPR " + aspr.Id + " REMOVED: Status: " + aspr.Status + " Barco:" + spr.IMONum);
                                    log.Debug("Requestor: " + spr.DataUserRequestor);
                                    log.Debug("Access-Request Type: " + spr.AccessType + "-" + spr.RequestType);
                                    continue;
                                }
                            }
                            //PERIODIC REPORT
                            else if (ShipPositionRequestHelper.IsPeriodicRequest(spr.RequestType) == true)
                            {
                                if (spr.RequestType == 2 && new int[] { 0, 15, 30, 45 }.Contains(mins) == false) //15 minute periodic rate
                                {
                                    continue;
                                }
                                if (spr.RequestType == 3 && new int[] { 0, 30 }.Contains(mins) == false) //30 minute periodic rate
                                {
                                    continue;
                                }
                                if (spr.RequestType == 4 && mins != 0) //1 hour periodic rate
                                {
                                    continue;
                                }
                                if (spr.RequestType == 5 && (new int[] { 0, 3, 6, 9, 12, 15, 18, 21 }.Contains(hour) == false || mins != 0)) //3 hour periodic rate
                                {
                                    continue;
                                }
                                if (spr.RequestType == 6 && (new int[] { 0, 6, 12, 18 }.Contains(hour) == false || mins != 0)) //6 hour periodic rate
                                {
                                    continue;
                                }
                                if (spr.RequestType == 10 && (new int[] { 0, 12 }.Contains(hour) == false || mins != 0)) //12 hour periodic rate
                                {
                                    continue;
                                }
                                if (spr.RequestType == 11 && (hour != 0 || mins != 0)) //24 hour periodic rate
                                {
                                    continue;
                                }

                                int minutes = ShipPositionRequestHelper.GetMinutes(spr.RequestType);
                                log.Debug("Procesando requerimiento periodico de " + minutes + " minutos");

                                //TimeSpan delta = TimeSpan.FromMinutes(minutes);
                                //if (DCDebug == "true")
                                //  delta = TimeSpan.FromSeconds(minutes);
                                //if (UtcNow >= aspr.LastTime.AddSeconds(delta.TotalSeconds))
                                //{

                                //log.Debug("se cumplio el periodo");
                                ShipPosition spos = spm.GetLastShipPosition(spr.IMONum);
                                if (spos != null)
                                {
                                    //La ultima posicion para el barco es mas nueva que la ultima que mande?
                                    if (spos.TimeStamp > aspr.LastTime)
                                    {
                                        CheckEntitlementAndSendReportOrReceipt(spr, spos);
                                        ShipManager.ChangeShipStatus(ShipStatus.Ok, ShipManager.getByIMONum(spr.IMONum));
                                    }
                                    else
                                    if (spos.TimeStamp < aspr.LastTime)
                                    {
                                        //Feature-add: +30' estados del Active Ship Position Report
                                        log.Info("No new position since last report");
                                        ReceiptManager.SendReceipt(spr.DataUserRequestor, spr.MessageId, DataCenterLogic.DataCenterTypesIDE.receiptCodeType.Item7,
                                                                   string.Format("No new position since last report"));
                                        return;
                                    }
                                    asprda.Update(aspr.Id, 1, spos.TimeStamp);
                                    log.Debug("ASPR " + aspr.Id + " UPDATED: Status: " + aspr.Status + " Barco:" + spr.IMONum);
                                    log.Debug("Requestor: " + spr.DataUserRequestor);
                                    log.Debug("Access-Request Type: " + spr.AccessType + "-" + spr.RequestType);
                                }
                                else
                                {
                                    log.Error("Hubo un problema al verificar la titulacion y enviar la respuesta");
                                }
                            }
                        }
                    }
                    catch (Exception ex)
                    {
                        log.Error("Error procesando ASPR", ex);
                    }
                } //foreach
            }
        }
Esempio n. 7
0
        public ActionResult Index()
        {
            if (User.IsInRole("ExternoVerificarFacturas"))
            {
                return(RedirectToAction("List", "ExternalInvoice"));
            }

            if (User.IsInRole("Facturador"))
            {
                return(RedirectToAction("List", "Contract"));
            }

            // Barcos
            var         sda    = new ShipDataAccess(context);
            var         sman   = new ShipManager();
            var         spman  = new ShipPositionManager();
            var         asprda = new ActiveShipPositionRequestDataAccess(context);
            List <Ship> barcos = sda.GetAll();

            string[] latlong = { "N/A", "N/A" };

            int i = 0;

            foreach (Ship barco in barcos)
            {
                ViewData[string.Format("State{0}", i)] = "normal"; //sman.GetShipState(barco);

                DataCenterDataAccess.ShipPosition LastPos = spman.GetLastShipPosition(barco.IMONum);
                if (LastPos == null)
                {
                    latlong[0] = "N/A";
                    latlong[1] = "N/A";
                }
                else
                {
                    latlong = spman.GetLatLongOfPoint(LastPos);
                }

                ViewData[string.Format("Nombre{0}", i)] = barco.Name.ToString();
                ViewData[string.Format("OMIId{0}", i)]  = barco.IMONum.ToString();
                if (LastPos != null)
                {
                    string temp  = latlong[0].Length > 6 ? latlong[0].Remove(6) : latlong[0];
                    string temp2 = latlong[1].Length > 6 ? latlong[1].Remove(6) : latlong[1];
                    ViewData[string.Format("UltimaPosicion{0}", i)] = "Lat: " + temp + " Long: " + temp2;
                    ViewData[string.Format("Fecha{0}", i)]          = LastPos.TimeStamp.ToString();
                }
                else
                {
                    ViewData[string.Format("UltimaPosicion{0}", i)] = "Lat: N/A Long: N/A";
                    ViewData[string.Format("Fecha{0}", i)]          = "N/A";
                }
                i++;
            }
            ViewData["total_barcos"] = i;
            //ViewData["total_barcos"] = 0;


            //Status

            int      status, aspStatus;
            TimeSpan since, aspSince;
            var      ssman = new SystemStatusManager();

            /*
             * ssman.getLastStatus(out status, out since);
             * ssman.GetLastAspStatus(out aspStatus, out aspSince);
             *
             * ViewData["IDEStatus"] = status;
             * ViewData["IDESince"] = since;
             * ViewData["DDPStatus"] = status;
             * ViewData["DDPSince"] = since;
             * ViewData["ASPStatus"] = aspStatus;
             * ViewData["ASPSince"] = aspSince;
             *
             * ViewData["AsprCount"] = asprda.Count();
             *
             * // Tráfico
             *
             * var tman = new TrafficManager();
             * var ts = tman.GetTrafficStats();
             *
             * ViewData["InMonth"] = ts.InMonth;
             * ViewData["InWeek"] = ts.InWeek;
             * ViewData["InDay"] = ts.InDay;
             * ViewData["OutMonth"] = ts.OutMonth;
             * ViewData["OutWeek"] = ts.OutWeek;
             * ViewData["OutDay"] = ts.OutDay;
             */


            return(View());
        }