From 836ce716aa87630497ea195ed2729ee32fa0d3eb Mon Sep 17 00:00:00 2001 From: Daniel Schick Date: Fri, 9 Feb 2018 05:57:04 +0000 Subject: [PATCH] =?UTF-8?q?=C3=84nderungen=20im=20neuen=20AIS=20Projekt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- AIS/SQL/CreateTables.sql | 110 +++++++++++++++ AIS/bsmd.AISService/AIS/AIS_ClassB.cs | 23 ++++ AIS/bsmd.AISService/AIS/AIS_PosReport.cs | 14 +- AIS/bsmd.AISService/DB/AISBaseEntity.cs | 30 ++++ AIS/bsmd.AISService/DB/AISPosReport.cs | 34 +++-- AIS/bsmd.AISService/DB/AISStaticData.cs | 2 +- AIS/bsmd.AISService/DB/AISStation.cs | 5 +- AIS/bsmd.AISService/DB/DBConnector.cs | 2 +- AIS/bsmd.AISService/DB/Hotposition.cs | 24 ++-- .../ProjectInstaller.Designer.cs | 58 ++++++++ AIS/bsmd.AISService/ProjectInstaller.cs | 19 +++ AIS/bsmd.AISService/ProjectInstaller.resx | 129 ++++++++++++++++++ AIS/bsmd.AISService/bsmd.AISService.csproj | 1 + Stundensheet.xlsx | Bin 36168 -> 36244 bytes nsw/Source/bsmd.database/NOA_NOD.cs | 2 + 15 files changed, 416 insertions(+), 37 deletions(-) create mode 100644 AIS/SQL/CreateTables.sql create mode 100644 AIS/bsmd.AISService/DB/AISBaseEntity.cs create mode 100644 AIS/bsmd.AISService/ProjectInstaller.Designer.cs create mode 100644 AIS/bsmd.AISService/ProjectInstaller.cs create mode 100644 AIS/bsmd.AISService/ProjectInstaller.resx diff --git a/AIS/SQL/CreateTables.sql b/AIS/SQL/CreateTables.sql new file mode 100644 index 00000000..6ba8d1d5 --- /dev/null +++ b/AIS/SQL/CreateTables.sql @@ -0,0 +1,110 @@ +PRINT N'Creating [dbo].[aisposreport]...'; + +GO +CREATE TABLE [dbo].[aisposreport] ( + [Id] UNIQUEIDENTIFIER NOT NULL, + [MMSI] INT NOT NULL, + [NavStatus] INT NULL, + [ROT] INT NULL, + [COG] INT NULL, + [SOG] INT NULL, + [Accuracy] INT NULL, + [Longitude] INT NULL, + [Latitude] INT NULL, + [Heading] INT NULL, + [Timestamp] DATETIME NULL, + [Reserved] INT NULL, + [Spare] INT NULL, + [Raim] INT NULL, + [CommState] INT NULL, + [AISStationId] UNIQUEIDENTIFIER NOT NULL, + PRIMARY KEY CLUSTERED ([Id] ASC) +); + +GO + +ALTER TABLE [dbo].[aisposreport] + ADD DEFAULT newid() FOR [Id]; + +GO + +PRINT N'Creating [dbo].[aisstation]...'; + +GO +CREATE TABLE [dbo].[aisstation] ( + [Id] UNIQUEIDENTIFIER NOT NULL, + [lat] INT NULL, + [lon] INT NULL, + [telnetHost] NVARCHAR (255) NULL, + [telnetPort] INT NULL, + [comPort] NVARCHAR (10) NULL, + [name] NVARCHAR (255) NULL, + [baudrate] INT NULL, + PRIMARY KEY CLUSTERED ([Id] ASC) +); + +GO + +PRINT N'Creating unnamed constraint on [dbo].[aisstation]...'; + +GO +ALTER TABLE [dbo].[aisstation] + ADD DEFAULT newid() FOR [Id]; + +PRINT N'Creating [dbo].[aisstaticdata]...'; + + +GO +CREATE TABLE [dbo].[aisstaticdata] ( + [Id] UNIQUEIDENTIFIER NOT NULL, + [aisversion] INT NULL, + [imoNumber] INT NULL, + [callsign] NVARCHAR (10) NULL, + [name] NVARCHAR (100) NULL, + [shiptype] INT NULL, + [dimension] INT NULL, + [a] INT NULL, + [b] INT NULL, + [c] INT NULL, + [d] INT NULL, + [typeofdevice] INT NULL, + [etamonth] INT NULL, + [etaday] INT NULL, + [etahour] INT NULL, + [etaminute] INT NULL, + [maxpresetstaticdraught] INT NULL, + [destination] NVARCHAR (255) NULL, + [dte] INT NULL, + [spare] INT NULL, + PRIMARY KEY CLUSTERED ([Id] ASC) +); + +GO +PRINT N'Creating unnamed constraint on [dbo].[aisstaticdata]...'; + +GO +ALTER TABLE [dbo].[aisstaticdata] + ADD DEFAULT newid() FOR [Id]; + +GO + +PRINT N'Creating [dbo].[hotposition]...'; + +GO +CREATE TABLE [dbo].[hotposition] ( + [Id] UNIQUEIDENTIFIER NOT NULL, + [mmsi] INT NULL, + [pid] UNIQUEIDENTIFIER NOT NULL, + PRIMARY KEY CLUSTERED ([Id] ASC) +); + + +GO + +PRINT N'Creating unnamed constraint on [dbo].[aisstaticdata]...'; + +GO +ALTER TABLE [dbo].[aisstaticdata] + ADD DEFAULT newid() FOR [Id]; + +GO \ No newline at end of file diff --git a/AIS/bsmd.AISService/AIS/AIS_ClassB.cs b/AIS/bsmd.AISService/AIS/AIS_ClassB.cs index afe47a95..d77d2077 100644 --- a/AIS/bsmd.AISService/AIS/AIS_ClassB.cs +++ b/AIS/bsmd.AISService/AIS/AIS_ClassB.cs @@ -9,6 +9,7 @@ namespace bsmd.AISService.AIS { #region private members + private Guid? id; private int repeatIndicator; private int reserved; private int sog; @@ -30,6 +31,8 @@ namespace bsmd.AISService.AIS #region Properties + public Guid Id { get { if (!this.id.HasValue) this.id = Guid.NewGuid(); return this.id.Value; } } + public int CogVal { get { return this.cog; } } public int SogVal { get { return this.sog; } } public int LatitudeVal { get { return this.latitude; } } @@ -81,6 +84,26 @@ namespace bsmd.AISService.AIS } } + public int Reserved + { + get { return reserved; } + } + + public int Spare + { + get { return this.spare; } + } + + public int Raim + { + get { return this.raimFlag; } + } + + public int CommState + { + get { return this.commState; } + } + #endregion protected override AIS.Status Decode() diff --git a/AIS/bsmd.AISService/AIS/AIS_PosReport.cs b/AIS/bsmd.AISService/AIS/AIS_PosReport.cs index 949e5203..26a2b4fd 100644 --- a/AIS/bsmd.AISService/AIS/AIS_PosReport.cs +++ b/AIS/bsmd.AISService/AIS/AIS_PosReport.cs @@ -6,7 +6,8 @@ using System.Text; namespace bsmd.AISService.AIS { public class AIS_PosReport : AIS - { + { + private Guid? id; private int navstatus; private int rot; private int sog; @@ -24,6 +25,8 @@ namespace bsmd.AISService.AIS #region Properties + public Guid Id { get { if (!this.id.HasValue) this.id = Guid.NewGuid(); return this.id.Value; } } + public int NavStatusVal { get { return this.navstatus; } } public int ROTVal { get { return this.rot; } } public int SOGVal { get { return this.sog; } } @@ -101,6 +104,15 @@ namespace bsmd.AISService.AIS } } + public int Reserved { get { return this.reserved; } } + + public int Spare { get { return this.spare; } } + + public int Raim { get { return this.raim; } } + + public int CommState { get { return this.commstate; } } + + #endregion #region static methods diff --git a/AIS/bsmd.AISService/DB/AISBaseEntity.cs b/AIS/bsmd.AISService/DB/AISBaseEntity.cs new file mode 100644 index 00000000..8ce4075c --- /dev/null +++ b/AIS/bsmd.AISService/DB/AISBaseEntity.cs @@ -0,0 +1,30 @@ +// Copyright (c) 2008-2018 schick Informatik +// Description: Basisklasse der Entitäten +// + +using System; + +namespace bsmd.AISService.DB +{ + public abstract class AISBaseEntity + { + protected Guid? id; + + private bool isNew = true; + + public AISBaseEntity() { } + + public Guid? Id + { + get { return this.id; } + set { this.id = value; } + } + + public bool IsNew + { + get { return this.isNew; } + set { this.isNew = value; } + } + + } +} diff --git a/AIS/bsmd.AISService/DB/AISPosReport.cs b/AIS/bsmd.AISService/DB/AISPosReport.cs index ab6e6bc7..aee2b125 100644 --- a/AIS/bsmd.AISService/DB/AISPosReport.cs +++ b/AIS/bsmd.AISService/DB/AISPosReport.cs @@ -1,4 +1,8 @@ -using System; +// Copyright (c) 2008-2018 schick Informatik +// Description: +// + +using System; using System.Diagnostics; using System.Collections.Generic; using System.Text; @@ -8,14 +12,14 @@ using bsmd.AISService.AIS; namespace bsmd.AISService.DB { - internal class AISPosReport + internal class AISPosReport : AISBaseEntity { /// /// Saves a (class A or B) position report /// /// target to save /// id of insert operation (to update hotposition table) - public static int? Save(AIS_Target target, DBConnector con, AISStation aisStation) + public static Guid? Save(AIS_Target target, DBConnector con, AISStation aisStation) { if (target.LastPosReport == null) return null; @@ -31,17 +35,14 @@ namespace bsmd.AISService.DB aisStation.OnAir = true; } - string query = string.Format("INSERT INTO aisposreport (mmsi, navstatus, rot, cog, sog, accur, longitude, latitude, heading, timestamp, stationid) VALUES ({0}, {1}, {2}, {3}, {4}, {5}, {6}, {7}, {8}, '{9}', {10})", - pr.MMSI, pr.NavStatusVal, pr.ROTVal, pr.COGVal, pr.SOGVal, pr.Accuracy, - pr.LongitudeVal, pr.LatitudeVal, pr.TrueHeading ?? 511, pr.DBTimestamp, - (aisStation != null) ? aisStation.Id : 0); + string query = string.Format("INSERT INTO aisposreport (Id, MMSI, NavStatus, ROT, COG, SOG, Accuracy, Longitude, Latitude, Heading, Timestamp, Reserved, Spare, Raim, CommState, AISStationId) VALUES ('{0}', {1}, {2}, {3}, {4}, {5}, {6}, {7}, {8}, {9}, '{10}', {11},{12},{13},{14},'{15}')", + pr.Id, pr.MMSI, pr.NavStatusVal, pr.ROTVal, pr.COGVal, pr.SOGVal, pr.Accuracy, + pr.LongitudeVal, pr.LatitudeVal, pr.TrueHeading ?? 511, pr.DBTimestamp, pr.Reserved, pr.Spare, pr.Raim, pr.CommState, + (aisStation != null) ? aisStation.Id : Guid.Empty); con.ExecuteNonQuery(query); - object result = con.ExecuteScalar("SELECT LAST_INSERT_ID()"); - if (result == null) return null; - int pid = Convert.ToInt32(result); - return pid; + return pr.Id; } if (target.LastPosReport is AIS_ClassB) @@ -50,16 +51,13 @@ namespace bsmd.AISService.DB AIS_ClassB pr = target.LastPosReport as AIS_ClassB; aisStation.UpdateWithPositionReport(pr.MMSI, pr.Latitude, pr.Longitude, pr.Timestamp); - string query = string.Format("INSERT INTO aisposreport (mmsi, navstatus, rot, cog, sog, accur, longitude, latitude, heading, timestamp, stationid) VALUES ({0}, {1}, {2}, {3}, {4}, {5}, {6}, {7}, {8}, '{9}', {10})", + string query = string.Format("INSERT INTO aisposreport (Id, MMSI, NavStatus, ROT, COG, SOG, Accuracy, Longitude, Latitude, Heading, Timestamp, Reserved, Spare, Raim, CommState, Stationid) VALUES ('{0}', {1}, {2}, {3}, {4}, {5}, {6}, {7}, {8}, {9}, '{10}', {11},{12},{13},{14},'{15}')", pr.MMSI, 0, 0, pr.CogVal, pr.SogVal, 0, pr.LongitudeVal, pr.LatitudeVal, - pr.TrueHeading ?? 511, pr.DBTimestamp, (aisStation != null) ? aisStation.Id : 0); + pr.TrueHeading ?? 511, pr.DBTimestamp, pr.Reserved, pr.Spare, pr.Raim, pr.CommState, (aisStation != null) ? aisStation.Id : Guid.Empty); con.ExecuteNonQuery(query); - - object result = con.ExecuteScalar("SELECT LAST_INSERT_ID()"); - if (result == null) return null; - int pid = Convert.ToInt32(result); - return pid; + + return pr.Id; } if (target.LastPosReport is AIS_ClassBExt) diff --git a/AIS/bsmd.AISService/DB/AISStaticData.cs b/AIS/bsmd.AISService/DB/AISStaticData.cs index 7bcc3cce..051dfcd8 100644 --- a/AIS/bsmd.AISService/DB/AISStaticData.cs +++ b/AIS/bsmd.AISService/DB/AISStaticData.cs @@ -10,7 +10,7 @@ using bsmd.AISService.AIS; namespace bsmd.AISService.DB { - public class AISStaticData + public class AISStaticData : AISBaseEntity { public enum DisplayStringType diff --git a/AIS/bsmd.AISService/DB/AISStation.cs b/AIS/bsmd.AISService/DB/AISStation.cs index b3d159ea..bb264494 100644 --- a/AIS/bsmd.AISService/DB/AISStation.cs +++ b/AIS/bsmd.AISService/DB/AISStation.cs @@ -9,7 +9,7 @@ using bsmd.AISService.AIS; namespace bsmd.AISService.DB { - public class AISStation + public class AISStation : AISBaseEntity { #region private members @@ -35,8 +35,7 @@ namespace bsmd.AISService.DB #region Properties - public string Name { get { return this.name; } set { this.name = value; } } - public int Id { get { return this.station_Id; } } + public string Name { get { return this.name; } set { this.name = value; } } public bool Active { get { return this.active; } set { this.active = value; } } public string COMPort { get { return this.comport; } set { this.comport = value; } } public int Baudrate { get { return this.baudrate; } set { this.baudrate = value; } } diff --git a/AIS/bsmd.AISService/DB/DBConnector.cs b/AIS/bsmd.AISService/DB/DBConnector.cs index d0faf89e..88252259 100644 --- a/AIS/bsmd.AISService/DB/DBConnector.cs +++ b/AIS/bsmd.AISService/DB/DBConnector.cs @@ -131,7 +131,7 @@ namespace bsmd.AISService.DB if (target.LastPosReport != null) { Hotposition hotposition = Hotposition.LoadForMMSI(target.MMSI, this); - int? pid = AISPosReport.Save(target, this, updateStations.ContainsKey(target.Station) ? updateStations[target.Station] : null); + Guid? pid = AISPosReport.Save(target, this, updateStations.ContainsKey(target.Station) ? updateStations[target.Station] : null); if (pid.HasValue) { hotposition.PosReportId = pid.Value; diff --git a/AIS/bsmd.AISService/DB/Hotposition.cs b/AIS/bsmd.AISService/DB/Hotposition.cs index 25d85d7c..9aa37256 100644 --- a/AIS/bsmd.AISService/DB/Hotposition.cs +++ b/AIS/bsmd.AISService/DB/Hotposition.cs @@ -7,18 +7,17 @@ using bsmd.AISService.AIS; namespace bsmd.AISService.DB { - internal class Hotposition - { - private int id; + internal class Hotposition : AISBaseEntity + { private int mmsi; - private int pid; + private Guid pid; public int MMSI { get { return this.mmsi; } } - public int PosReportId + public Guid PosReportId { get { return this.pid; } set { this.pid = value; } @@ -26,7 +25,7 @@ namespace bsmd.AISService.DB public void Save(DBConnector con) { - string query = string.Format("UPDATE hotposition SET mmsi={0}, pid={1} WHERE id={2}", + string query = string.Format("UPDATE hotposition SET mmsi={0}, pid='{1}' WHERE id='{2}'", this.mmsi, this.pid, this.id); con.ExecuteNonQuery(query); } @@ -41,10 +40,10 @@ namespace bsmd.AISService.DB while (reader.Read()) { Hotposition hp = new Hotposition(); - hp.id = reader.GetInt32(0); + hp.id = reader.GetGuid(0); hp.mmsi = mmsi; if (!reader.IsDBNull(1)) - hp.pid = reader.GetInt32(1); + hp.pid = reader.GetGuid(1); results.Add(hp); } reader.Close(); @@ -54,12 +53,11 @@ namespace bsmd.AISService.DB { // neuen Eintrag erzeugen Hotposition hp = new Hotposition(); - string insertQuery = string.Format("INSERT INTO hotposition SET mmsi={0}", mmsi); - con.ExecuteNonQuery(insertQuery); - - object ob = con.ExecuteScalar("SELECT LAST_INSERT_ID()"); - hp.id = Convert.ToInt32(ob); + hp.Id = Guid.NewGuid(); hp.mmsi = mmsi; + hp.IsNew = false; + string insertQuery = string.Format("INSERT INTO hotposition (id, mmsi) VALUES ('{0}', {1})", hp.Id, mmsi); + con.ExecuteNonQuery(insertQuery); return hp; } else if (results.Count == 1) diff --git a/AIS/bsmd.AISService/ProjectInstaller.Designer.cs b/AIS/bsmd.AISService/ProjectInstaller.Designer.cs new file mode 100644 index 00000000..88477230 --- /dev/null +++ b/AIS/bsmd.AISService/ProjectInstaller.Designer.cs @@ -0,0 +1,58 @@ +namespace bsmd.AISService +{ + partial class ProjectInstaller + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Component Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.serviceProcessInstallerAIS = new System.ServiceProcess.ServiceProcessInstaller(); + this.serviceInstallerAIS = new System.ServiceProcess.ServiceInstaller(); + // + // serviceProcessInstallerAIS + // + this.serviceProcessInstallerAIS.Password = null; + this.serviceProcessInstallerAIS.Username = null; + // + // serviceInstallerAIS + // + this.serviceInstallerAIS.Description = "Service to read AIS data into a database"; + this.serviceInstallerAIS.DisplayName = "BSMD AIS Service"; + this.serviceInstallerAIS.ServiceName = "AISService"; + // + // ProjectInstaller + // + this.Installers.AddRange(new System.Configuration.Install.Installer[] { + this.serviceProcessInstallerAIS, + this.serviceInstallerAIS}); + + } + + #endregion + + private System.ServiceProcess.ServiceProcessInstaller serviceProcessInstallerAIS; + private System.ServiceProcess.ServiceInstaller serviceInstallerAIS; + } +} \ No newline at end of file diff --git a/AIS/bsmd.AISService/ProjectInstaller.cs b/AIS/bsmd.AISService/ProjectInstaller.cs new file mode 100644 index 00000000..fb9abb9e --- /dev/null +++ b/AIS/bsmd.AISService/ProjectInstaller.cs @@ -0,0 +1,19 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.ComponentModel; +using System.Configuration.Install; +using System.Linq; +using System.Threading.Tasks; + +namespace bsmd.AISService +{ + [RunInstaller(true)] + public partial class ProjectInstaller : System.Configuration.Install.Installer + { + public ProjectInstaller() + { + InitializeComponent(); + } + } +} diff --git a/AIS/bsmd.AISService/ProjectInstaller.resx b/AIS/bsmd.AISService/ProjectInstaller.resx new file mode 100644 index 00000000..7fb3a7a1 --- /dev/null +++ b/AIS/bsmd.AISService/ProjectInstaller.resx @@ -0,0 +1,129 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + + 196, 17 + + + False + + \ No newline at end of file diff --git a/AIS/bsmd.AISService/bsmd.AISService.csproj b/AIS/bsmd.AISService/bsmd.AISService.csproj index 158fffcc..a42a1192 100644 --- a/AIS/bsmd.AISService/bsmd.AISService.csproj +++ b/AIS/bsmd.AISService/bsmd.AISService.csproj @@ -80,6 +80,7 @@ + diff --git a/Stundensheet.xlsx b/Stundensheet.xlsx index fc3530a89fa4d62da48343574d80b1bf5af7be7c..fc2b598ee1e695c5cae85b12a11e530cfdd777c8 100644 GIT binary patch delta 24221 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 z z%C(?N^XCVT+%QXFPs+`7wtK71SqpaTqY)jkuIs4oc^l4ufD! zrGO%EmIT{n_&1@+PQyVondhlzbfxp{*VNhp9=O3tyQT~B-g}uYXDDy73*%9kCd+t8 z`YB1%&t}-W|IH%WMtOGluVOL`<1~z)mdS|pW6~SkC|(5oZVM_mdv`%O$Z)mrJMLP3 zqWj~_0)GILVPzDvUVn881sY^Xg>#eGiBbXYlPiiq0dA9QickS?lf8;X0wEcbI~f|2 z9*YngO+=edUqb)@@u&d+7ytkO0000000000003N*NsC1R@sp2>ARF_QY1axD002oy z000yK000000000000000qLa#tCmRGqqGg8x008L%000pH000000000000000-jfWB lJ^`GQON>+jt&^aPKms*{lj4j#0vCsqAdMmhO^E;i0010A@N578 delta 24210 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 AEdT%j diff --git a/nsw/Source/bsmd.database/NOA_NOD.cs b/nsw/Source/bsmd.database/NOA_NOD.cs index 90445592..e79ef313 100644 --- a/nsw/Source/bsmd.database/NOA_NOD.cs +++ b/nsw/Source/bsmd.database/NOA_NOD.cs @@ -232,6 +232,8 @@ namespace bsmd.database { if (cp.CallPurposeCode == 0) errors.Add(RuleEngine.CreateError(ValidationCode.INT_GT_ZERO, "CallPurposeCode", "0", this.Title, cp.Identifier, this.Tablename)); + if(!cp.CallPurposeDescription.IsNullOrEmpty() && (cp.CallPurposeDescription.Length > 94)) + violations.Add(RuleEngine.CreateViolation(ValidationCode.TRUNCATE, "CallPurposeDescription", cp.CallPurposeDescription, this.Title, cp.Identifier, this.Tablename)); } } }