예제 #1
0
        public ActionResult Delete(int id)
        {
            var sda = new ShipDataAccess(context);

            sda.Delete(sda.getById(id));
            return(RedirectToAction("List"));
        }
예제 #2
0
 public static void ChangeShipStatus(ShipStatus status, Ship ship)
 {
     using (var sda = new ShipDataAccess())
     {
         sda.ChangeShipStatus(status, ship);
     }
 }
예제 #3
0
        public DataSet GetPositionsOnStandingOrder()
        {
            using (var sqlconn = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["mio"].ConnectionString))
            {
                sqlconn.Open();
                var dsout = new DataSet();
                var dt    = new DataTable();
                var pos   = new SqlGeography();

                ShipDataAccess          sda  = null;
                StandingOrderDataAccess soda = null;

                using (var da = new SqlDataAdapter("SELECT * FROM AIS", sqlconn))
                {
                    da.Fill(dt);
                }
                dt.Columns.Add("LATITUD", typeof(Decimal));
                dt.Columns.Add("LONGITUD", typeof(Decimal));

                foreach (DataRow row in dt.Rows)
                {
                    try
                    {
                        sda  = new ShipDataAccess();
                        soda = new StandingOrderDataAccess();

                        var spman               = new ShipPositionManager();
                        var ddpman              = new DDPVersionManager();
                        var ddpver              = ddpman.GetCurrentDDPVersion();
                        var lastpos             = spman.GetLastShipPosition(sda.getById((int)row["ID_BARCO"]).IMONum);
                        List <StandingOrder> so = new List <StandingOrder>();
                        if (lastpos != null)
                        {
                            so = soda.GetOrdersForPosition(lastpos, ddpver);
                        }
                        if (so.Count == 0)
                        {
                            dt.Rows.Remove(row);
                            continue;
                        }
                    }
                    catch (Exception ex)
                    {
                        System.Diagnostics.Debug.WriteLine(ex);
                    }
                    finally
                    {
                        sda.Dispose();
                        soda.Dispose();
                    }

                    pos             = SqlGeography.STGeomFromWKB(new SqlBytes((byte[])row["Position"]), 4326);
                    row["LATITUD"]  = decimal.Parse(pos.Lat.ToString());
                    row["LONGITUD"] = decimal.Parse(pos.Long.ToString());
                }
                dt.Columns.Remove("Position");
                dsout.Tables.Add(dt);
                return(dsout);
            }
        }
예제 #4
0
        //
        // GET: /Ship/
        public ActionResult List()
        {
            var sda = new ShipDataAccess(context);

            ViewData["barcos"] = sda.GetAll();
            return(View());
        }
예제 #5
0
 /// <summary>
 /// Obtiene un barco en base a un numero IMO.
 /// </summary>
 /// <param name="IMONum">numero IMO del barco a buscar</param>
 /// <returns>Referencia al barco</returns>
 static public Ship getByIMONum(string IMONum)
 {
     using (var sda = new ShipDataAccess())
     {
         return(sda.getByIMONum(IMONum));
     }
 }
예제 #6
0
        public ActionResult Edit(int id)
        {
            var sda = new ShipDataAccess(context);

            ViewData["shipid"] = id;
            return(View("New", sda.getById(id)));
        }
예제 #7
0
 static public Ship getByMobileNum(string mobile)
 {
     using (var sda = new ShipDataAccess())
     {
         return(sda.getByMobileNum(mobile));
     }
 }
예제 #8
0
 static public Ship getByMemberNum(int member)
 {
     using (var sda = new ShipDataAccess())
     {
         return(sda.getByMemberNum(member));
     }
 }
예제 #9
0
 internal static Ship getByISN(string p)
 {
     using (var sda = new ShipDataAccess())
     {
         return(sda.getByISN(p));
     }
 }
예제 #10
0
 public static string GetShipStatus(Ship ship)
 {
     using (var sda = new ShipDataAccess())
     {
         return(sda.GetShipStatus(ship));
     }
 }
예제 #11
0
        public string GetShipState(Ship ship)
        {
            ShipDataAccess          sda  = null;
            StandingOrderDataAccess soda = null;

            try
            {
                sda  = new ShipDataAccess();
                soda = new StandingOrderDataAccess();

                var spman               = new ShipPositionManager();
                var ddpman              = new DDPVersionManager();
                var ddpver              = ddpman.GetCurrentDDPVersion();
                var lastpos             = spman.GetLastShipPosition(ship.IMONum);
                List <StandingOrder> so = new List <StandingOrder>();


                if (lastpos != null)
                {
                    so = soda.GetOrdersForPosition(lastpos, ddpver);
                }

                if (so.Count != 0)
                {
                    return("blue");
                }

                if (sda.HasActiveRequest(ship) != 0)
                {
                    return("green");
                }

                if (lastpos != null)
                {
                    if (DateTime.UtcNow - lastpos.TimeStamp > TimeSpan.FromDays(1))
                    {
                        return("red");
                    }
                }

                return("normal");
            }
            catch (Exception ex)
            {
                System.Diagnostics.Debug.WriteLine(ex);
                return("normal");
            }
            finally
            {
                if (sda != null)
                {
                    sda.Dispose();
                }
                if (soda != null)
                {
                    soda.Dispose();
                }
            }
        }
예제 #12
0
        /// <summary>
        /// Procesa un mensaje de tipo SARSurpicRequest.
        /// </summary>
        /// <param name="msg">Mensaje SARSURPICRequest</param>
        public void ProcessSARSURPICRequest(SARSURPICType SARSURPICRequest)
        {
            var configMgr           = new ConfigurationManager();
            var shipPositionManager = new ShipPositionManager();

            List <ShipPosition> shipPositions;

            if (SARSURPICRequest.ItemElementName == DataCenterLogic.DataCenterTypes.ItemChoiceType1.SARCircularArea)
            {
                shipPositions = shipPositionManager.GetLastPositionsInCircularArea(SARSURPICRequest.Item, int.Parse(SARSURPICRequest.NumberOfPositions));
            }
            else
            {
                shipPositions = shipPositionManager.GetLastPositionsInRectangularArea(SARSURPICRequest.Item, int.Parse(SARSURPICRequest.NumberOfPositions));
            }

            if (shipPositions.Count == 0)
            {
                DataCenterTypesIDE.ReceiptType receipt = new DataCenterLogic.DataCenterTypesIDE.ReceiptType();
                receipt.DDPVersionNum = DDPVersionManager.currentDDP();
                receipt.Destination   = SARSURPICRequest.DataUserRequestor;
                receipt.Message       = "No positions";
                receipt.MessageId     = MessageIdManager.Generate();
                receipt.MessageType   = DataCenterLogic.DataCenterTypesIDE.messageTypeType3.Item7;
                receipt.Originator    = "1005";
                receipt.ReceiptCode   = DataCenterLogic.DataCenterTypesIDE.receiptCodeType.Item7;
                receipt.ReferenceId   = SARSURPICRequest.MessageId;
                receipt.schemaVersion = decimal.Parse(configMgr.Configuration.SchemaVersion);
                receipt.test          = DataCenterLogic.DataCenterTypesIDE.testType.Item1;
                receipt.TimeStamp     = DateTime.UtcNow;

                //Receipt sent
                Message msgout = new Message(receipt);
                msgout.Label = "receipt";
                QueueManager.Instance().EnqueueOut(msgout);
            }
            else
            {
                using (var shipdao = new ShipDataAccess())
                {
                    var sprm = new ShipPositionReportManager();
                    foreach (ShipPosition shipPos in shipPositions)
                    {
                        sprm.SendReport(SARSURPICRequest.DataUserRequestor, shipPos, SARSURPICRequest.MessageId, DataCenterLogic.DataCenterTypesIDE.responseTypeType.Item4, DataCenterLogic.DataCenterTypesIDE.messageTypeType.Item3);
                    }
                }
            }

            using (var dao = new SARSURPICRequestDataAccess())
            {
                dao.Create(TypeHelper.Map2DB(SARSURPICRequest), 0);
            }
            log.Info("SARSURPICRequest successfully processed");
        }
예제 #13
0
        public void CheckShipStatus()
        {
            var sda = new ShipDataAccess();

            List <Ship> ships = sda.GetAllBle();

            foreach (var ship in ships)
            {
                log.Debug("Hay barcos con respuesta demorada");
                ReprogramShip(ship);
            }
        }
예제 #14
0
        public void SendReport(string requestor, ShipPosition position, string referenceId, DataCenterTypesIDE.responseTypeType responseType, DataCenterLogic.DataCenterTypesIDE.messageTypeType messageType)
        {
            //Configuracion del datacenter
            var configMgr = new ConfigurationManager();

            //DataCenterTypesIDE.responseTypeType responseType = getResponseTypeFromRequest(spr);
            //DataCenterLogic.DataCenterTypesIDE.messageTypeType messageType = getMessageTypeFromRequest(spr);

            //Obtengo el ship al que pertenece la posicion
            using (var shipdao = new ShipDataAccess())
            {
                Ship ship = shipdao.getById(position.ShipId);

                var shipPosReport = new DataCenterTypesIDE.ShipPositionReportType();

                var point = SqlGeography.STPointFromWKB(new System.Data.SqlTypes.SqlBytes(position.Position.ToArray()), 4326);

                shipPosReport.ASPId = configMgr.Configuration.ASPId;

                shipPosReport.DataUserProvider = "1005";
                //if( responseType == DataCenterLogic.DataCenterTypesIDE.responseTypeType.Item4 )
                //  shipPosReport.DataUserProvider = "3005";

                shipPosReport.DataUserRequestor = requestor;
                shipPosReport.DCId                 = configMgr.Configuration.DataCenterID;
                shipPosReport.DDPVersionNum        = DDPVersionManager.currentDDP();
                shipPosReport.IMONum               = ship.IMONum;
                shipPosReport.Latitude             = WGS84LatFormat(point.Lat.Value);
                shipPosReport.Longitude            = WGS84LongFormat(point.Long.Value);
                shipPosReport.MessageId            = MessageIdManager.Generate();
                shipPosReport.MessageType          = messageType;
                shipPosReport.MMSINum              = ship.MMSINum;
                shipPosReport.ReferenceId          = referenceId;
                shipPosReport.ResponseType         = responseType;
                shipPosReport.schemaVersion        = decimal.Parse(configMgr.Configuration.SchemaVersion);
                shipPosReport.ShipborneEquipmentId = ship.EquipID;
                shipPosReport.ShipName             = ship.Name;
                shipPosReport.test                 = DataCenterLogic.DataCenterTypesIDE.testType.Item1;
                shipPosReport.TimeStamp1           = position.TimeStamp;
                shipPosReport.TimeStamp2           = position.TimeStampInASP;
                shipPosReport.TimeStamp3           = position.TimeStampOutASP;
                shipPosReport.TimeStamp4           = position.TimeStampInDC;
                shipPosReport.TimeStamp5           = DateTime.UtcNow;

                log.Debug("Enqueing Report for ship: " + shipPosReport.IMONum + " Pos. Long. Lat.:" + shipPosReport.Longitude + " " + shipPosReport.Latitude + " Requestor: " + shipPosReport.DataUserRequestor);
                QueueManager.Instance().EnqueueOut(shipPosReport, "shipPositionReport");
            }
        }
예제 #15
0
        public bool HasActiveRequest(Ship ship)
        {
            ShipDataAccess sda = null;
            ShipPositionRequestDataAccess sprda = null;

            try
            {
                sda   = new ShipDataAccess();
                sprda = new ShipPositionRequestDataAccess();

                var sprs = sda.GetAllRequestsForShip(ship);

                foreach (var spr in sprs)
                {
                    if (sprda.GetActiveShipPositionRequest(spr) != null)
                    {
                        return(true);
                    }
                }
                return(false);
            }
            catch (Exception ex)
            {
                System.Diagnostics.Debug.WriteLine(ex);
                return(false);
            }
            finally
            {
                if (sda != null)
                {
                    sda.Dispose();
                }

                if (sprda != null)
                {
                    sprda.Dispose();
                }
            }
        }
예제 #16
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());
        }
        /// <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
            }
        }
예제 #18
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();
            }
        }
예제 #19
0
        /// <summary>
        /// Procesa un mensaje de tipo ShipPositionRequest
        /// </summary>
        /// <param name="msg">Mensaje de la cola con ShipPositionRequest en el body</param>
        public void ProcessShipPositionRequest(ShipPositionRequestType shipPositionRequest)
        {
            log.Info("Procesando ShipPositionRequest");
            try
            {
                if (ValidateShipPositionRequest(shipPositionRequest) != true)
                {
                    return;
                }
            }
            catch (Exception ex)
            {
                log.Debug(ex);
            }

            Ship ship = null;

            using (var sdao = new ShipDataAccess())
            {
                log.Debug("Verifica si existe el barco en la base de datos");
                ship = sdao.getByIMONum(shipPositionRequest.IMONum);

                if (ship == null)
                {
                    //The ship is not in our system, send receipt CODE 7
                    log.Debug("el barco no esta en nuestro sistema, se envia recibo codigo 7");
                    ReceiptManager.SendReceipt(shipPositionRequest.DataUserRequestor, shipPositionRequest.MessageId, DataCenterLogic.DataCenterTypesIDE.receiptCodeType.Item7,
                                               string.Format("The ship {0} is not registered", shipPositionRequest.IMONum));
                    return;
                }
            }

            //Save ship position request to obtain id
            log.Debug("Guardando SPR en base de datos para obtener id");
            var shipPositionRequestDB = TypeHelper.Map2DB(shipPositionRequest);

            try
            {
                using (var spreq = new ShipPositionRequestDataAccess())
                {
                    spreq.Create(shipPositionRequestDB, 0);
                }
            }
            catch (Exception ex)
            {
                log.Error("Hubo un problema al guardar el mensaje");
                log.Debug(ex);
                return;
            }



            //log.Debug("Verificando si ya hay un request activo para el barco");

            //using (var asprDa = new ActiveShipPositionRequestDataAccess())
            //{
            //  List<ActiveShipPositionRequest> asprlist = asprDa.GetAll();
            //  foreach (ActiveShipPositionRequest aspr in asprlist)
            //  {
            //    if (shipPositionRequest.IMONum == aspr.ShipPositionRequest.IMONum &&
            //        Convert.ToInt32(shipPositionRequest.AccessType) == aspr.ShipPositionRequest.AccessType &&
            //        shipPositionRequest.DataUserRequestor == aspr.ShipPositionRequest.DataUserRequestor
            //       )
            //    {
            //      log.Debug("Se reemplaza request del barco:" + shipPositionRequest.IMONum);
            //      asprDa.Remove(aspr);
            //    }
            //  }
            //}

            #region Historics position report
            log.Debug("Verificando si es un request para datos archivados");
            if (ShipPositionRequestHelper.IsHistoricRequest(shipPositionRequest.RequestType))
            {
                ProcessHistoricShipPositionRequest(shipPositionRequest, ship);
                return;
            }
            #endregion
            #region Periodic position report
            log.Debug("Verificando si es un request periodico");
            if (ShipPositionRequestHelper.IsPeriodicRequest(shipPositionRequest.RequestType))
            {
                ActiveShipPositionRequestManager asprManager = new ActiveShipPositionRequestManager();
                asprManager.AddOrReplace(shipPositionRequestDB);
                log.Debug("ASPR REPLACED: Barco:" + shipPositionRequest.IMONum);
                log.Debug("Requestor: " + shipPositionRequest.DataUserRequestor);
                log.Debug("Access-Request Type: " + shipPositionRequest.AccessType + "-" + shipPositionRequest.RequestType);


                //Es periodico, y nos saca de la frecuencia estandard 6hs (RequestType==6), y no es SAR (msgtype==5)?
                //Debemos cobrarle la presunta reprogramacion PRICING
                if (shipPositionRequest.RequestType != requestTypeType.Item6 &&
                    shipPositionRequest.MessageType == messageTypeType1.Item5)
                {
                    /************************************************/
                    var     pmgr  = new PricingManager();
                    decimal?price = pmgr.AddASPReprogrMessage(0, shipPositionRequest.DataUserRequestor, shipPositionRequest.DataUserProvider);
                    log.Info(string.Format("ProcessShipPositionRequest: Reprogramacion presunta par {0} => precio={1}", shipPositionRequest.MessageId, price));
                    /************************************************/
                }

                return;
            }
            #endregion
            #region One Time poll
            log.Debug("Verificando si es un request para unica vez");
            if (ShipPositionRequestHelper.IsOneTimePoll(shipPositionRequest.RequestType))
            {
                ActiveShipPositionRequestManager asprManager = new ActiveShipPositionRequestManager();
                //Crea Active
                asprManager.AddNew(shipPositionRequestDB.Id);
                log.Debug("ASPR ADDED: Barco:" + shipPositionRequest.IMONum);
                log.Debug("Requestor: " + shipPositionRequest.DataUserRequestor);
                log.Debug("Access-Request Type: " + shipPositionRequest.AccessType + "-" + shipPositionRequest.RequestType);
            }
            #endregion
            #region Reset Request
            log.Debug("Verificando si es un request reset");
            if (ShipPositionRequestHelper.IsResetRequest(shipPositionRequest.RequestType))
            {
                var asprManager = new ActiveShipPositionRequestManager();
                asprManager.RemoveAllForRequestor(shipPositionRequestDB);
            }
            #endregion
            #region Stop Request
            log.Debug("Verificando si es un request Stop");
            if (ShipPositionRequestHelper.IsStopRequest(shipPositionRequest.RequestType))
            {
                ActiveShipPositionRequestManager asprManager = new ActiveShipPositionRequestManager();
                asprManager.AddOrReplace(shipPositionRequestDB);
                log.Debug("ASPR REPLACED: Barco:" + shipPositionRequest.IMONum);
                log.Debug("Requestor: " + shipPositionRequest.DataUserRequestor);
                log.Debug("Access-Request Type: " + shipPositionRequest.AccessType + "-" + shipPositionRequest.RequestType);
            }
            #endregion

            return;
        }
예제 #20
0
        public ActionResult Create([Bind(Exclude = "Id, Manga, Eslora, Calado")] Ship ship, int?shipid, string Manga, string Eslora, string Calado)
        {
            ship.ASPId = 1;
            var sda = new ShipDataAccess(context);



            if (ModelState.IsValid == false)
            {
                foreach (var val in ModelState.Values.ToList())
                {
                    val.Errors.Clear();
                }

                //ModelState.AddModelError("", "Decimales deben ir separados por " + Thread.CurrentThread.CurrentCulture.NumberFormat.NumberDecimalSeparator);
            }

            if (ship.Name.Trim().Length == 0)
            {
                ModelState.AddModelError("Name", "Nombre requerido");
            }

            if (ship.IMONum.Trim().Length == 0)
            {
                ModelState.AddModelError("IMONum", "IMOnum requerido");
            }

            if (ship.EquipID.Trim().Length == 0)
            {
                ModelState.AddModelError("EquipID", "ID del equipo requerido");
            }

            if (ship.MMSINum.Trim().Length == 0)
            {
                ModelState.AddModelError("MMSINum", "Numero MMSI requerido");
            }

            if (ship.DNID.Trim().Length == 0)
            {
                ModelState.AddModelError("DNID", "Numero DNID requerido");
            }

            if (ship.Member == 0)
            {
                ModelState.AddModelError("Member", "Numero Miembro requerido");
            }

            //if (sda.getByMemberNum(ship.Member) != null)
            //  ModelState.AddModelError("Member", "Ya hay otro barco con el mismo Member Number");

            if (ship.Mobile.Trim().Length == 0)
            {
                ModelState.AddModelError("Mobile", "Numero Mobile requerido");
            }

            //if (sda.getByMobileNum(ship.Mobile) != null)
            //  ModelState.AddModelError("Member", "Ya hay otro barco con el mismo Mobile Number");


            if (!ModelState.IsValid)
            {
                return(View("New", ship));
            }

            try
            {
                if (shipid != null)
                {
                    sda.Update(ship, (int)shipid, Manga, Eslora, Calado);
                    return(RedirectToAction("List"));
                }

                Eslora = Eslora.Replace(',', '.');
                if (Eslora != "")
                {
                    ship.Eslora = Math.Round(float.Parse(Eslora), 2);
                }

                Manga = Manga.Replace(',', '.');
                if (Manga != "")
                {
                    ship.Manga = Math.Round(float.Parse(Manga), 2);
                }

                Calado = Calado.ToString().Replace(',', '.');
                if (Calado != "")
                {
                    ship.Calado = Math.Round(decimal.Parse(Calado), 2);
                }


                sda.Insert(ship);
                return(RedirectToAction("List"));
            }
            catch (Exception ex)
            {
                ModelState.AddModelError("", ex.Message);
                return(View("New", ship));
            }
        }
        public bool TryReprog(ShipPositionRequest spr)
        {
            bool reprogOk = true;

            /**************************************************************************************************/

            if (ShipPositionRequestHelper.IsOneTimePoll(spr.RequestType) == true)
            {
                var ship = ShipManager.getByIMONum(spr.IMONum);

                try
                {
                    var aspman = new AspManager();
                    // El 8 asegura un start frame posterior a la hora actual
                    aspman.CreatePollMessage(DateTime.UtcNow.AddMinutes(8), 0, ship, PollAction.Report);
                    log.Debug("Solitud Enviada (OneTimePoll) a IMO:" + ship.IMONum);
                }
                catch (Exception ex)
                {
                    log.Error("Error al enviar la solicitud" + Environment.NewLine + Environment.NewLine + ex + Environment.NewLine + Environment.NewLine);
                    reprogOk = false;
                }

                return(reprogOk);
            }

            /**************************************************************************************************/

            int requestPeriod = ShipPositionRequestHelper.GetMinutes(spr.RequestType);

            log.Debug("Request de " + requestPeriod + " minutos");

            //Get faster active request in minutes
            int minPeriod = GetMinPeriodForShip(spr.IMONum, spr.Id);

            log.Debug("Request activo mas frecuente del barco de " + minPeriod + " minutos");


            //See if we need to reprogram the equipment on ship
            log.Debug("Verificando si es necesario reprogramar el equipo");
            if (requestPeriod < minPeriod || minPeriod == -1)
            {
                using (var sdao = new ShipDataAccess())
                {
                    var ship = sdao.getByIMONum(spr.IMONum);
                    //Reprogram ASP
                    log.Debug("Se envia PollMessage");
                    try
                    {
                        var aspman = new AspManager();
                        // El 8 asegura un start frame posterior a la hora actual
                        aspman.CreatePollMessage(DateTime.UtcNow.AddMinutes(8), requestPeriod, ship, PollAction.Reprogram);
                    }
                    catch (Exception ex)
                    {
                        log.Error("Hubo un problema al enviar la solicitud" + ex);
                        reprogOk = false;
                    }
                    finally
                    {
                    }
                }
            }

            return(reprogOk);
        }