Example #1
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);
            }
        }
Example #2
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();
                }
            }
        }
Example #3
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();
            }
        }
Example #4
0
        /// <summary>
        /// Importa un archivo DDP en formato XML a la base de datos
        /// </summary>
        /// <param name="stream">Stream de memoria del archivo</param>
        public DateTime Import(XmlDocument ddpxml, DDPVersion ddpVersion)
        {
            DateTime      pubDate = DateTime.UtcNow;
            DBDataContext context = null;

            try
            {
                context = new DBDataContext(Config.ConnectionString);

                //---------------------------------------------------
                XmlNamespaceManager nsmanager = new XmlNamespaceManager(ddpxml.NameTable);
                nsmanager.AddNamespace("lr", "http://gisis.imo.org/XML/LRIT/ddp/2008");
                //---------------------------------------------------

                //Hack-o-mati: Asociation of contracting goverment
                Dictionary <ContractingGoverment, ContractingConfig> goverments = new Dictionary <ContractingGoverment, ContractingConfig>();

                //Just for return, do not use here.
                pubDate = DateTime.Parse(ddpxml.SelectSingleNode("/lr:DataDistributionPlan", nsmanager).Attributes["regularVersionImplementationAt"].Value);

                readCGS("/lr:DataDistributionPlan/lr:ContractingGovernment", ref goverments, ref ddpxml, ref nsmanager);
                readCGS("/lr:DataDistributionPlan/lr:Territory", ref goverments, ref ddpxml, ref nsmanager);

                var cgda = new ContractingGovermentDataAccess(context);
                var pda  = new PlaceDataAccess(context);
                var soda = new StandingOrderDataAccess(context);
                var ssda = new SARServiceDataAccess(context);
                //var exda = new ExclusionDataAccess(context);

                //cgda.DropAll();

                foreach (KeyValuePair <ContractingGoverment, ContractingConfig> kv in goverments)
                {
                    kv.Key.DDPVersionId = ddpVersion.Id;
                    int gId = cgda.Create(kv.Key);

                    foreach (Place p in kv.Value.places)
                    {
                        p.ContractingGovermentId = gId;
                    }

                    foreach (SARService ss in kv.Value.sarservice)
                    {
                        ss.ContractingGovermentId = gId;
                    }

                    //foreach (Exclusion excl in kv.Value.exclusions)
                    //  excl.ContractingGoverment = gId;

                    log.Debug(string.Format("{2}: Key:{0}, Value{1}", kv.Key.Name, kv.Value.places.Count, kv.Key.Id));

                    pda.Create(kv.Value.places.ToArray());
                    //exda.Create(kv.Value.exclusions.ToArray());

                    ssda.Create(kv.Value.sarservice.ToArray());

                    //Places with ids
                    List <Place> places = pda.GetAll(ddpVersion.regularVer + ":" + ddpVersion.inmediateVer);

                    //Standing orders
                    string  path          = string.Format("/lr:DataDistributionPlan/lr:CoastalStateStandingOrders/lr:StandingOrder[@contractingGovernmentID='{0}']", kv.Key.LRITId);
                    XmlNode standingOrder = ddpxml.SelectSingleNode(path, nsmanager);

                    if (standingOrder != null && !String.IsNullOrEmpty(standingOrder.InnerText))
                    {
                        foreach (string area in standingOrder.InnerText.Split(' '))
                        {
                            int id = getPlaceId(places, area);
                            if (id == -1)
                            {
                                continue;
                            }

                            StandingOrder so = new StandingOrder();
                            so.PlaceId = id;
                            kv.Value.standingOrders.Add(so);
                        }
                    }

                    //ES ACA
                    soda.Create(kv.Value.standingOrders.ToArray());
                }
            }
            catch (Exception ex)
            {
                if (context != null)
                {
                    context.Dispose();
                }

                throw new Exception("Unable to Import DDP File", ex);
            }
            finally
            {
                if (context != null)
                {
                    context.Dispose();
                }
            }

            return(pubDate);
        }