Speicherung etc. fortlaufend
This commit is contained in:
parent
bc19b63d95
commit
02d347b592
@ -8,7 +8,6 @@ using System.Threading;
|
||||
using System.Data.SQLite;
|
||||
using log4net;
|
||||
using System.Collections.Concurrent;
|
||||
using System.Runtime.Remoting.Messaging;
|
||||
|
||||
namespace bsmd.AIS2Service
|
||||
{
|
||||
@ -43,6 +42,8 @@ namespace bsmd.AIS2Service
|
||||
|
||||
#region public methods
|
||||
|
||||
#region MonitorZone
|
||||
|
||||
/// <summary>
|
||||
/// monitor zone loader func for the zone alarm watchdog (doesn't need groups or such)
|
||||
/// </summary>
|
||||
@ -53,7 +54,7 @@ namespace bsmd.AIS2Service
|
||||
if ((_connection == null) || (_connection.State != ConnectionState.Open)) return monitorZones; // can't load but return nothing in a friendly way
|
||||
|
||||
// load zones
|
||||
string loadZoneString = "SELECT id, name, active FROM monitor_zone";
|
||||
string loadZoneString = "SELECT id, name, active, monitor_group_id, sequence FROM monitor_zone";
|
||||
SQLiteCommand lzCmd = new SQLiteCommand(loadZoneString, _connection);
|
||||
SQLiteDataReader reader = lzCmd.ExecuteReader();
|
||||
if(reader.HasRows)
|
||||
@ -64,6 +65,8 @@ namespace bsmd.AIS2Service
|
||||
string name = reader.GetString(1);
|
||||
MonitorZone mz = new MonitorZone(id, name);
|
||||
mz.Active = reader.GetInt32(2) == 1;
|
||||
mz.MonitorGroupId = reader.GetInt32(3);
|
||||
mz.Sequence = reader.GetInt32(4);
|
||||
monitorZones.Add(mz);
|
||||
}
|
||||
}
|
||||
@ -119,6 +122,42 @@ namespace bsmd.AIS2Service
|
||||
return monitorZones;
|
||||
}
|
||||
|
||||
bool Save(MonitorZone mZone)
|
||||
{
|
||||
if (mZone == null) return false;
|
||||
|
||||
if(mZone.Id <= 0)
|
||||
{
|
||||
// insert
|
||||
string insertZoneString = $"INSERT INTO monitor_zone (name, active, monitor_group_id, sequence) VALUES ('{mZone.Name}', {mZone.Active}, {mZone.MonitorGroupId}, {mZone.Sequence}";
|
||||
SQLiteCommand cmd = new SQLiteCommand(insertZoneString, _connection);
|
||||
int insertedRows = cmd.ExecuteNonQuery();
|
||||
cmd.Dispose();
|
||||
mZone.Id = GetLastInsertId();
|
||||
return insertedRows == 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
// update
|
||||
string updateZoneString = $"UPDATE monitor_zone SET name = '{mZone.Name}', active = '{mZone.Active}', sequence = '{mZone.Sequence}' WHERE id = {mZone.Id}'";
|
||||
SQLiteCommand cmd = new SQLiteCommand(updateZoneString, _connection);
|
||||
int updatedRows = cmd.ExecuteNonQuery();
|
||||
cmd.Dispose();
|
||||
return updatedRows == 1;
|
||||
}
|
||||
}
|
||||
|
||||
bool Delete(MonitorZone mZone)
|
||||
{
|
||||
if (mZone == null) return false;
|
||||
string deleteAlarmString = $"DELETE FROM monitor_zone WHERE id = {mZone.Id}";
|
||||
SQLiteCommand cmd = new SQLiteCommand(deleteAlarmString, _connection);
|
||||
int affectedRows = cmd.ExecuteNonQuery();
|
||||
return (affectedRows == 1);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Alarm
|
||||
|
||||
public List<Alarm> LoadAlarms(MonitorAssignment assignment)
|
||||
@ -161,22 +200,99 @@ namespace bsmd.AIS2Service
|
||||
if (alarm.Id <= 0)
|
||||
{
|
||||
// insert
|
||||
string saveAlarmString = $"INSERT INTO alarm (zone_assignment_id, timestamp, type, acknowledged) VALUES ({alarm.Assignment.Id}, {alarm.Timestamp}, {alarm.ZoneMonitorType}, {alarm.Acknowledged})";
|
||||
string saveAlarmString = $"INSERT INTO alarm (zone_assignment_id, timestamp, type, acknowledged) VALUES ({alarm.Assignment.Id}, '{alarm.Timestamp}', {alarm.ZoneMonitorType}, {alarm.Acknowledged})";
|
||||
SQLiteCommand cmd = new SQLiteCommand(saveAlarmString, _connection);
|
||||
int insertedRows = cmd.ExecuteNonQuery();
|
||||
cmd.Dispose();
|
||||
alarm.Id = GetLastInsertId();
|
||||
return (insertedRows == 1);
|
||||
}
|
||||
else
|
||||
{
|
||||
// update
|
||||
// TODO
|
||||
|
||||
return false;
|
||||
string updateAlarmString = $"UPDATE alarm SET acknowledged = {alarm.Acknowledged} WHERE id = {alarm.Id}";
|
||||
SQLiteCommand cmd = new SQLiteCommand(updateAlarmString, _connection);
|
||||
int updatedRows = cmd.ExecuteNonQuery();
|
||||
cmd.Dispose();
|
||||
return (updatedRows == 1);
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region MonitorGroup
|
||||
|
||||
public List<MonitorGroup> LoadGroups()
|
||||
{
|
||||
List<MonitorGroup> groups = new List<MonitorGroup>();
|
||||
string loadGroupsString = "SELECT id, name from monitor_group ORDER BY name";
|
||||
SQLiteCommand laCmd = new SQLiteCommand(loadGroupsString, _connection);
|
||||
SQLiteDataReader reader = laCmd.ExecuteReader();
|
||||
if (reader.HasRows)
|
||||
{
|
||||
while (reader.Read())
|
||||
{
|
||||
int id = reader.GetInt32(0);
|
||||
string name = "";
|
||||
if(!reader.IsDBNull(1))
|
||||
name = reader.GetString(1);
|
||||
MonitorGroup mGroup = new MonitorGroup(id, name);
|
||||
groups.Add(mGroup);
|
||||
}
|
||||
}
|
||||
return groups;
|
||||
}
|
||||
|
||||
public bool Delete(MonitorGroup mGroup)
|
||||
{
|
||||
if (mGroup == null) return false;
|
||||
string deleteGroupString = $"DELETE FROM monitor_group WHERE id = {mGroup.Id}";
|
||||
SQLiteCommand cmd = new SQLiteCommand(deleteGroupString, _connection);
|
||||
int deletedGroups = cmd.ExecuteNonQuery();
|
||||
cmd.Dispose();
|
||||
return deletedGroups == 1;
|
||||
}
|
||||
|
||||
public bool Save(MonitorGroup mGroup)
|
||||
{
|
||||
if(mGroup == null) return false;
|
||||
if(mGroup.Id <= 0)
|
||||
{
|
||||
// insert
|
||||
string saveGroupString = $"INSERT INTO monitor_group (name) VALUES ('{mGroup.Name}')";
|
||||
SQLiteCommand cmd = new SQLiteCommand(saveGroupString, _connection);
|
||||
int insertedRows = cmd.ExecuteNonQuery();
|
||||
cmd.Dispose();
|
||||
mGroup.Id = GetLastInsertId();
|
||||
return (insertedRows == 1);
|
||||
}
|
||||
else
|
||||
{
|
||||
// update
|
||||
string saveGroupString = $"UPDATE monitor_group SET name = '{mGroup.Name}' WHERE id = {mGroup.Id}";
|
||||
SQLiteCommand cmd = new SQLiteCommand(saveGroupString, _connection);
|
||||
int updatedRows = cmd.ExecuteNonQuery();
|
||||
cmd.Dispose();
|
||||
return (updatedRows == 1);
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region ZoneVertex
|
||||
|
||||
public bool Save(GeoPoint geoPoint)
|
||||
{
|
||||
if (geoPoint == null) return false;
|
||||
string saveGeoPointString = $"INSERT INTO zone_vertex (monitor_zone_id, latitude, longitude) VALUES ({geoPoint.MonitorZoneId}, {geoPoint.Lat}, {geoPoint.Lon})";
|
||||
SQLiteCommand cmd = new SQLiteCommand(saveGeoPointString, _connection);
|
||||
int insertedRows = cmd.ExecuteNonQuery();
|
||||
cmd.Dispose();
|
||||
return insertedRows == 1;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#endregion
|
||||
|
||||
#region private methods
|
||||
@ -388,6 +504,14 @@ namespace bsmd.AIS2Service
|
||||
}
|
||||
}
|
||||
|
||||
public int GetLastInsertId()
|
||||
{
|
||||
string sql = "SELECT last_insert_rowid()";
|
||||
SQLiteCommand cmd = new SQLiteCommand(sql, _connection);
|
||||
int lastID = (Int32)cmd.ExecuteScalar();
|
||||
return lastID;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region IAISThread implementation
|
||||
|
||||
@ -13,13 +13,29 @@ using System.Threading.Tasks;
|
||||
namespace bsmd.AIS2Service
|
||||
{
|
||||
|
||||
#region DBEntity
|
||||
|
||||
public class DBEntity
|
||||
{
|
||||
protected int _id; // PK from database
|
||||
|
||||
public DBEntity(int id)
|
||||
{
|
||||
_id = id;
|
||||
}
|
||||
|
||||
public int Id { get { return _id; } set { _id = value; } }
|
||||
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region class MonitorGroup
|
||||
|
||||
public class MonitorGroup
|
||||
public class MonitorGroup : DBEntity
|
||||
{
|
||||
#region fields
|
||||
|
||||
private readonly int _id; // PK from database
|
||||
|
||||
private readonly string _name;
|
||||
private readonly List<MonitorZone> _zones = new List<MonitorZone>();
|
||||
|
||||
@ -27,18 +43,16 @@ namespace bsmd.AIS2Service
|
||||
|
||||
#region Construction
|
||||
|
||||
public MonitorGroup(int id, string name)
|
||||
public MonitorGroup(int id, string name) : base( id )
|
||||
{
|
||||
_id = id; _name = name;
|
||||
_name = name;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Properties
|
||||
|
||||
public List<MonitorZone> Zones { get { return _zones; } }
|
||||
|
||||
public int Id { get { return _id; } }
|
||||
public List<MonitorZone> Zones { get { return _zones; } }
|
||||
|
||||
public string Name { get { return _name; } }
|
||||
|
||||
@ -49,12 +63,11 @@ namespace bsmd.AIS2Service
|
||||
|
||||
#region class MonitorZone
|
||||
|
||||
public class MonitorZone
|
||||
public class MonitorZone : DBEntity
|
||||
{
|
||||
|
||||
#region fields
|
||||
|
||||
private readonly int _id; // PK from database
|
||||
|
||||
private readonly List<GeoPoint> _vertices = new List<GeoPoint>();
|
||||
private readonly List<MonitorAssignment> _assignments = new List<MonitorAssignment>();
|
||||
private readonly string _name;
|
||||
@ -63,16 +76,14 @@ namespace bsmd.AIS2Service
|
||||
|
||||
#region Construction
|
||||
|
||||
public MonitorZone(int id, string name)
|
||||
public MonitorZone(int id, string name) : base (id)
|
||||
{
|
||||
_id = id; _name = name;
|
||||
_name = name;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Properties
|
||||
|
||||
public int Id { get { return _id; } }
|
||||
#region Properties
|
||||
|
||||
public string Name { get { return _name; } }
|
||||
|
||||
@ -84,6 +95,8 @@ namespace bsmd.AIS2Service
|
||||
|
||||
public int Sequence { get; set; }
|
||||
|
||||
public int MonitorGroupId { get; set; }
|
||||
|
||||
#endregion
|
||||
|
||||
#region public methods
|
||||
@ -114,35 +127,27 @@ namespace bsmd.AIS2Service
|
||||
|
||||
#region class GeoPoint
|
||||
|
||||
public class GeoPoint
|
||||
{
|
||||
public class GeoPoint : DBEntity
|
||||
{
|
||||
|
||||
private readonly int _id;
|
||||
|
||||
public GeoPoint(int id)
|
||||
{
|
||||
_id = id;
|
||||
}
|
||||
|
||||
public int Id { get { return _id; } }
|
||||
public GeoPoint(int id) : base (id)
|
||||
{}
|
||||
|
||||
public double Lat { get; set; }
|
||||
public double Lon { get; set; }
|
||||
|
||||
public int MonitorZoneId { get; set; }
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region class MonitorAssignment
|
||||
|
||||
public class MonitorAssignment
|
||||
{
|
||||
public class MonitorAssignment : DBEntity
|
||||
{
|
||||
|
||||
private readonly int _id;
|
||||
|
||||
public MonitorAssignment(int id)
|
||||
{
|
||||
_id = id;
|
||||
}
|
||||
public MonitorAssignment(int id) : base(id)
|
||||
{}
|
||||
|
||||
[Flags]
|
||||
public enum ZoneMonitorType
|
||||
@ -166,14 +171,11 @@ namespace bsmd.AIS2Service
|
||||
|
||||
#region class Alarm
|
||||
|
||||
public class Alarm
|
||||
{
|
||||
private readonly int _id;
|
||||
public class Alarm : DBEntity
|
||||
{
|
||||
private readonly MonitorAssignment _assignment;
|
||||
|
||||
public Alarm(int id, MonitorAssignment assignment) { _id = id; _assignment = assignment; }
|
||||
|
||||
public int Id { get { return _id; } }
|
||||
public Alarm(int id, MonitorAssignment assignment) : base(id) { _assignment = assignment; }
|
||||
|
||||
public MonitorAssignment Assignment { get { return _assignment; } }
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user