git_bsmd/AIS/bsmd.AISService/DB/AISPosReport.cs

78 lines
3.2 KiB
C#

// Copyright (c) 2008-2018 schick Informatik
// Description:
//
using System;
using System.Diagnostics;
using System.Collections.Generic;
using System.Text;
using bsmd.AISService.AIS;
namespace bsmd.AISService.DB
{
internal class AISPosReport : AISBaseEntity
{
/// <summary>
/// Saves a (class A or B) position report
/// </summary>
/// <param name="target">target to save</param>
/// <returns>id of insert operation (to update hotposition table)</returns>
public static Guid? Save(AIS_Target target, DBConnector con, AISStation aisStation)
{
if (target.LastPosReport == null) return null;
if (target.LastPosReport is AIS_PosReport)
{
// Trace.WriteLine("saving class A pos report");
AIS_PosReport pr = target.LastPosReport as AIS_PosReport;
if (aisStation != null)
{
aisStation.UpdateWithPositionReport(pr.MMSI, pr.Latitude, pr.Longitude, pr.Timestamp);
aisStation.LastPosTimestamp = pr.Timestamp;
aisStation.OnAir = true;
}
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);
return pr.Id;
}
if (target.LastPosReport is AIS_ClassB)
{
// Trace.WriteLine("saving class B pos report");
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 (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, pr.Reserved, pr.Spare, pr.Raim, pr.CommState, (aisStation != null) ? aisStation.Id : Guid.Empty);
con.ExecuteNonQuery(query);
return pr.Id;
}
if (target.LastPosReport is AIS_ClassBExt)
{
Trace.WriteLine("AIS class B ext not supported (yet)");
// TODO: Import ClassB Extended report!
}
Trace.WriteLine(string.Format("save pos report: we should not be here.. class type: {0}", target));
return null;
}
}
}