SafeDispatch/SafeMobileLIB_DLL/DBmanagers/DBalarmManager.cs
2024-02-22 18:43:59 +02:00

2264 lines
92 KiB
C#

using System;
using System.Collections.Generic;
using System.Text;
using Npgsql;
using System.Collections;
using System.Data;
namespace SafeMobileLib
{
public class DBalarmManager:DBmanager
{
public DBalarmManager(string p_server, string p_dbname, string p_user, string p_password, string p_port)
: base(p_server, p_dbname, p_user, p_password, p_port)
{
}
public Alarm getAllAlarms(string radioID)
{
Alarm alarmRet= null;
NpgsqlCommand cmd;
int sc_id = 0;
try
{
using (NpgsqlConnection connection = new NpgsqlConnection())
{
connection.ConnectionString = getConnectionString();
connection.Open();
//get sc_id from imei/radioID
string command = "SELECT sc_id from subscriber where imei='" + radioID.ToString() + "'";
using (cmd = new NpgsqlCommand(command, connection))
{
using (NpgsqlDataReader dr = cmd.ExecuteReader())
{
while (dr.Read())
{
sc_id = dr.GetInt32(0);
}
dr.Close();
}
}
command = " SELECT id, emergency, landmark, \"zone\" ,loneworker,speed,email,empopup,emsound,geopopup,geosound,speedpopup,speedsound,telempopup,telemsound FROM subscriber_alarm " +
" WHERE sc_id = " + sc_id.ToString();
using (cmd = new NpgsqlCommand(command, connection))
{
using (NpgsqlDataReader Reader = cmd.ExecuteReader())
{
while (Reader.Read())
{
alarmRet = new Alarm(Reader.GetInt32(0), sc_id, Reader.GetString(1), Reader.GetString(2), Reader.GetString(3), Reader.GetString(4), Reader.GetString(5), Reader.GetString(6), Reader.GetBoolean(7), Reader.GetBoolean(8), Reader.GetBoolean(9), Reader.GetBoolean(10), Reader.GetBoolean(11), Reader.GetBoolean(12), Reader.GetBoolean(13), Reader.GetBoolean(14));
}
Reader.Close();
}
}
}
}
catch (Exception ee)
{
Console.WriteLine(ee.ToString());
}
return alarmRet;
}
public Hashtable getImeiLastStatus()
{
Hashtable ret = new Hashtable();
try
{
using (NpgsqlConnection connection = new NpgsqlConnection())
{
connection.ConnectionString = getConnectionString();
connection.Open();
string command = "SELECT imei,status FROM lastpos";
using (NpgsqlCommand cmd = new NpgsqlCommand(command, connection))
{
using (NpgsqlDataReader reader = cmd.ExecuteReader())
{
while (reader.Read())
{
try
{
ret.Add(reader.GetString(0), reader.GetInt32(1));
}
catch (Exception ex)
{
Console.WriteLine("Error on add to hash SystemPosition:" + ex.ToString());
}
}
reader.Close();
}
}
}
}
catch (Exception ee)
{
Console.WriteLine(ee.ToString());
}
return ret;
}
public Alarm getAllAlarms_Sc_id(Int32 sc_ID)
{
int sc_id = sc_ID;
Alarm alarmRet = null;
string command = $"SELECT id, emergency, landmark, \"zone\" ,loneworker,speed,email,empopup,emsound,geopopup,geosound,speedpopup,speedsound,telempopup,telemsound FROM subscriber_alarm WHERE sc_id = {sc_id} ";
try
{
using (NpgsqlConnection connection = new NpgsqlConnection())
{
connection.ConnectionString = getConnectionString();
connection.Open();
using (NpgsqlCommand cmd = new NpgsqlCommand(command, connection))
{
using (NpgsqlDataReader Reader = cmd.ExecuteReader())
{
while (Reader.Read())
{
alarmRet = new Alarm(Reader.GetInt32(0), sc_id, Reader.GetString(1), Reader.GetString(2), Reader.GetString(3), Reader.GetString(4), Reader.GetString(5), Reader.GetString(6), Reader.GetBoolean(7), Reader.GetBoolean(8), Reader.GetBoolean(9), Reader.GetBoolean(10), Reader.GetBoolean(11), Reader.GetBoolean(12), Reader.GetBoolean(13), Reader.GetBoolean(14));
}
Reader.Close();
}
}
}
}
catch (Exception ee)
{
SM.Debug(command);
Console.WriteLine(ee.ToString());
}
return alarmRet;
}
public Dictionary<String, Alarm> getAllAlarms()
{
Dictionary<String, Alarm> allAlarms = new Dictionary<string, Alarm>();
string command = "SELECT id, emergency, landmark, \"zone\" ,loneworker,speed,email,empopup,emsound,geopopup,geosound,speedpopup,speedsound,telempopup,telemsound, sc_id FROM subscriber_alarm ";
try
{
using (NpgsqlConnection connection = new NpgsqlConnection())
{
connection.ConnectionString = getConnectionString();
connection.Open();
using (NpgsqlCommand cmd = new NpgsqlCommand(command, connection))
{
using (NpgsqlDataReader Reader = cmd.ExecuteReader())
{
while (Reader.Read())
{
Alarm alarmRet = new Alarm(Reader.GetInt32(0), Reader.GetInt32(15) + "", Reader.GetString(1), Reader.GetString(2), Reader.GetString(3),
Reader.GetString(4), Reader.GetString(5), Reader.GetString(6), Reader.GetBoolean(7), Reader.GetBoolean(8), Reader.GetBoolean(9),
Reader.GetBoolean(10), Reader.GetBoolean(11), Reader.GetBoolean(12), Reader.GetBoolean(13), Reader.GetBoolean(14));
if (!allAlarms.ContainsKey(Reader.GetInt32(15) + ""))
allAlarms.Add(Reader.GetInt32(15) + "", alarmRet);
}
}
}
}
}
catch (Exception ex)
{
Utils.WriteLine("getAllAlarms " + ex.ToString(), ConsoleColor.Red);
}
return allAlarms;
}
public sqlResponse addAlarm(Alarm alm, string radioID)
{
sqlResponse resp;
int sc_id = 0;
try
{
using (NpgsqlConnection connection = new NpgsqlConnection())
{
connection.ConnectionString = getConnectionString();
connection.Open();
string command = $"SELECT sc_id from subscriber where imei='{radioID}'";
using (NpgsqlCommand cmd = new NpgsqlCommand(command, connection))
{
using (NpgsqlDataReader reader = cmd.ExecuteReader())
{
while (reader.Read())
{
sc_id = reader.GetInt32(0);
}
reader.Close();
}
}
command = "insert into \"subscriber_alarm\" " +
"(sc_id , emergency ,landmark ,\"zone\",loneworker ,speed ,email,emsound,empopup,geosound,geopopup,speedsound,speedpopup,telemsound,telempopup)" +
$" VALUES( {sc_id},'{alm.Emergency}','{alm.Landmark}','{alm.Zone}','{alm.Loneworker}','{alm.Speed}','{alm.Email}',{alm.Emsound},{alm.Empopup},{alm.Geosound},{alm.Geopopup},{alm.Speedsound},{alm.Speedpopup},{alm.Telemsound},{alm.Telempopup})";
using (NpgsqlCommand cmd = new NpgsqlCommand(command, connection))
{
cmd.ExecuteNonQuery();
}
resp = sqlResponse.done;
}
}
catch (Exception ee)
{
Console.WriteLine(ee.Message + " " + ee.StackTrace + " " + ee.Source);
resp = sqlResponse.SQLerror;
}
return resp;
}
public sqlResponse Insert_speed_alarm_sim(UInt32 time_start, string radioID, ArrayList speed_step)
{
sqlResponse resp;
int sc_id = 0;
try
{
using (NpgsqlConnection connection = new NpgsqlConnection())
{
connection.ConnectionString = getConnectionString();
connection.Open();
string command = $"SELECT sc_id from subscriber where imei='{radioID}'";
using (NpgsqlCommand cmd = new NpgsqlCommand(command, connection))
{
using (NpgsqlDataReader reader = cmd.ExecuteReader())
{
while (reader.Read())
{
sc_id = reader.GetInt32(0);
}
reader.Close();
}
}
int i = 0;
while (i < speed_step.Count)
{
command = "INSERT INTO speedalarm (sc_id, timegmt ,speed ,preview ,address) " +
$" VALUES({sc_id},{(time_start + ((Int32)speed_step[i]) * 60)}, {(Int32)speed_step[i + 1]}, 0, 'no address')";
using (NpgsqlCommand cmd = new NpgsqlCommand(command, connection))
{
cmd.ExecuteNonQuery();
}
i += 2;
}
resp = sqlResponse.done;
}
}
catch (Exception ee)
{
Console.WriteLine(ee.Message + " " + ee.StackTrace + " " + ee.Source);
resp = sqlResponse.SQLerror;
}
return resp;
}
public sqlResponse Insert_landmark_alarm_sim(UInt32 time_start, string radioID, ArrayList land_step)
{
sqlResponse resp;
int sc_id = 0;
Int32 idxL1=0, idxL2=0, idxGeo = 0;
try
{
using (NpgsqlConnection connection = new NpgsqlConnection())
{
connection.ConnectionString = getConnectionString();
connection.Open();
string command = $"SELECT sc_id from subscriber where imei='{radioID}'";
using (NpgsqlCommand cmd = new NpgsqlCommand(command, connection))
{
using (NpgsqlDataReader reader = cmd.ExecuteReader())
{
while (reader.Read())
{
sc_id = reader.GetInt32(0);
}
reader.Close();
}
}
command = "SELECT idx from place where name='Landmark1'";
using (NpgsqlCommand cmd = new NpgsqlCommand(command, connection))
{
using (NpgsqlDataReader reader = cmd.ExecuteReader())
{
while (reader.Read())
{
idxL1 = reader.GetInt32(0);
}
reader.Close();
}
}
command = "SELECT idx from place where name='Landmark2'";
using (NpgsqlCommand cmd = new NpgsqlCommand(command, connection))
{
using (NpgsqlDataReader reader = cmd.ExecuteReader())
{
while (reader.Read())
{
idxL2 = reader.GetInt32(0);
}
reader.Close();
}
}
command = "SELECT idx from zonename where name='testZone1'";
using (NpgsqlCommand cmd = new NpgsqlCommand(command, connection))
{
using (NpgsqlDataReader reader = cmd.ExecuteReader())
{
while (reader.Read())
{
idxGeo = reader.GetInt32(0);
}
reader.Close();
}
}
// get ID for landmark1,2 and zone1
int i = 0;
while (i < land_step.Count)
{
Int32 zoneId = idxL2;
if (((Int32)land_step[i + 1]) == 2) zoneId = idxL1;
else if (((Int32)land_step[i + 1]) == 3) zoneId = idxGeo;
command = "INSERT INTO geozoneinout (sc_id, timegmt, zone_id, action, preview, type) " +
$" VALUES({sc_id},{(time_start + ((Int32)land_step[i]) * 60)}, {zoneId}, {(Int32)land_step[i + 2]}, 0, { (Int32)land_step[i + 3]} )";
using (NpgsqlCommand cmd = new NpgsqlCommand(command, connection))
{
cmd.ExecuteNonQuery();
}
i += 4;
}
resp = sqlResponse.done;
}
}
catch (Exception ee)
{
Console.WriteLine(ee.Message + " " + ee.StackTrace + " " + ee.Source);
resp = sqlResponse.SQLerror;
}
return resp;
}
public sqlResponse insertAlarm4ScIds(Alarm alarm, List<int> scIds, List<AdminAlerts> toUpdateAlerts)
{
sqlResponse resp;
NpgsqlTransaction tr = null;
StringBuilder sb = new StringBuilder(1024);
bool has_emergency = alarm.Emergency == "" ? false : true;
try
{
using (NpgsqlConnection connection = new NpgsqlConnection())
{
connection.ConnectionString = getConnectionString();
connection.Open();
string scIdIN = "(";
for (int i = 0; i < scIds.Count; i++)
scIdIN += "'" + scIds[i] + "'" + (i == scIds.Count - 1 ? ");" : ",");
if (toUpdateAlerts.Contains(AdminAlerts.EMERGENCY))
{
string cmdLINX = $"update subscriber_mobile set has_emergency = {has_emergency} where sc_id in ";
cmdLINX += scIdIN;
using (NpgsqlCommand cmd = new NpgsqlCommand(cmdLINX, connection))
{
cmd.ExecuteNonQuery();
}
}
sb.Clear();
tr = connection.BeginTransaction();
foreach (int scId in scIds)
{
sb.Append("UPDATE \"subscriber_alarm\" SET "
+ (toUpdateAlerts.Contains(AdminAlerts.EMERGENCY) ? " emergency = '" + alarm.Emergency + "', " : "")
+ (toUpdateAlerts.Contains(AdminAlerts.LANDMARK) ? " landmark = '" + alarm.Landmark + "', " : "")
+ (toUpdateAlerts.Contains(AdminAlerts.GEOFENCE) ? " \"zone\" = '" + alarm.Zone + "', " : "")
+ (toUpdateAlerts.Contains(AdminAlerts.LONE_WORKER) ? " loneworker = '" + alarm.Loneworker + "', " : "")
+ (toUpdateAlerts.Contains(AdminAlerts.SPEED) ? " speed = '" + alarm.Speed + "', " : "")
+ (toUpdateAlerts.Contains(AdminAlerts.ALARM_ON_EMAIL) ? " email = '" + alarm.Email + "', " : "")
+ (toUpdateAlerts.Contains(AdminAlerts.EMERGENCY_SOUND) ? " emsound = " + alarm.Emsound + ", " : "")
+ (toUpdateAlerts.Contains(AdminAlerts.EMERGENCY_POPUP) ? " empopup = " + alarm.Empopup + ", " : "")
+ (toUpdateAlerts.Contains(AdminAlerts.GEOFENCE_SOUND) ? " geosound = " + alarm.Geosound + ", " : "")
+ (toUpdateAlerts.Contains(AdminAlerts.GEOFENCE_POPUP) ? " geopopup = " + alarm.Geopopup + ", " : "")
+ (toUpdateAlerts.Contains(AdminAlerts.SPEED_SOUND) ? " speedsound = " + alarm.Speedsound + ", " : "")
+ (toUpdateAlerts.Contains(AdminAlerts.SPEED_POPUP) ? " speedpopup = " + alarm.Speedpopup + ", " : "")
+ (toUpdateAlerts.Contains(AdminAlerts.TELEMETRY_SOUND) ? " telemsound = " + alarm.Telemsound + ", " : "")
+ (toUpdateAlerts.Contains(AdminAlerts.TELEMETRY_POPUP) ? " telempopup = " + alarm.Telempopup + ", " : "")
+ " sc_id = " + scId
+ " WHERE sc_id=" + scId + ";"
+ "INSERT INTO \"subscriber_alarm\" "
+ "(sc_id" + ", emergency"
+ ", landmark"
+ ", \"zone\""
+ ", loneworker"
+ ", speed"
+ ", email"
+ ", emsound"
+ ", empopup"
+ ", geosound"
+ ", geopopup"
+ ", speedsound"
+ ", speedpopup"
+ ", telemsound"
+ ", telempopup"
+ ") "
+ " SELECT " + scId
+ ",'" + (alarm.Emergency.Length > 0 ? alarm.Emergency : String.Empty) + "'"
+ ",'" + alarm.Landmark + "'"
+ ",'" + alarm.Zone + "'"
+ ",'" + alarm.Loneworker + "'"
+ ",'" + (alarm.Speed.Length > 0 ? alarm.Speed : String.Empty) + "'"
+ ",'" + alarm.Email + "'"
+ "," + alarm.Emsound
+ "," + alarm.Empopup
+ "," + alarm.Geosound
+ "," + alarm.Geopopup
+ "," + alarm.Speedsound
+ "," + alarm.Speedpopup
+ "," + alarm.Telemsound
+ "," + alarm.Telempopup
+ " WHERE NOT EXISTS (SELECT 1 FROM \"subscriber_alarm\" WHERE sc_id = " + scId + ");"
);
if (sb.Length > 5000)
{
using (NpgsqlCommand cmd = new NpgsqlCommand(sb.ToString(), connection, tr))
{
cmd.ExecuteNonQuery();
}
sb.Clear();
}
}
if (sb.Length > 0)
{
using (NpgsqlCommand cmd = new NpgsqlCommand(sb.ToString(), connection, tr))
{
cmd.ExecuteNonQuery();
}
}
tr.Commit();
resp = sqlResponse.done;
}
}
catch (Exception ee)
{
tr?.Rollback();
Utils.WriteLine("insertAlarm4ScIds: " + ee.ToString(), ConsoleColor.Red);
resp = sqlResponse.SQLerror;
}
return resp;
}
public sqlResponse deleteAlarm(string radioID)
{
sqlResponse resp;
int sc_id = 0;
try
{
using (NpgsqlConnection connection = new NpgsqlConnection())
{
connection.ConnectionString = getConnectionString();
connection.Open();
string command = $"SELECT sc_id FROM subscriber WHERE imei='{radioID}'";
using (NpgsqlCommand cmd = new NpgsqlCommand(command, connection))
{
using (NpgsqlDataReader reader = cmd.ExecuteReader())
{
while (reader.Read())
{
sc_id = reader.GetInt32(0);
}
reader.Close();
}
}
command = $"DELETE FROM \"subscriber_alarm\" WHERE sc_id = {sc_id} ";
using (NpgsqlCommand cmd = new NpgsqlCommand(command, connection))
{
cmd.ExecuteNonQuery();
}
resp = sqlResponse.done;
}
}
catch (Exception ee)
{
Console.WriteLine(ee.Message + " " + ee.StackTrace + " " + ee.Source);
resp = sqlResponse.SQLerror;
}
return resp;
}
public sqlResponse Insert_Emerg_Alarm(string scID, int emergencyType, int speed, double lat, double lng)
{
sqlResponse resp;
try
{
using (NpgsqlConnection connection = new NpgsqlConnection())
{
connection.ConnectionString = getConnectionString();
connection.Open();
//get sc_id from imei/radioID
string emergTime = DateTime.Now.ToUniversalTime().DateTo70Format() + "";
string emtypedesc = (emergencyType > -1) ? emergencyType.ToString() : "null";
string query = $"INSERT INTO emergalarm (sc_id,timeGMT,preview, emergency_type, lat, lng) VALUES({scID},{emergTime},0,{emergencyType},{lat},{lng})";
using (NpgsqlCommand cmd = new NpgsqlCommand(query, connection))
{
cmd.ExecuteNonQuery();
}
query = String.Format("UPDATE alarm set sc_id={0},timeGMT={1} where type=5", scID, DateTime.Now.ToUniversalTime().DateTo70Format());
using (NpgsqlCommand cmd = new NpgsqlCommand(query, connection))
{
cmd.ExecuteNonQuery();
}
resp = sqlResponse.done;
}
}
catch (Exception o)
{
Utils.WriteLine("Insert_Emerg_Alarm5 " + o.ToString(), ConsoleColor.Red);
resp = sqlResponse.SQLerror;
throw new ArgumentException(o.Message.ToString());
}
return resp;
}
public sqlResponse Insert_Emerg_Alarm(string radioID, int? emergencyType)
{
sqlResponse resp;
int p_sc_id =0;
try
{
using (NpgsqlConnection connection = new NpgsqlConnection())
{
connection.ConnectionString = getConnectionString();
connection.Open();
//get sc_id from imei/radioID
string command = $"SELECT sc_id FROM subscriber WHERE imei='{radioID}'";
using (NpgsqlCommand cmd = new NpgsqlCommand(command, connection))
{
using (NpgsqlDataReader reader = cmd.ExecuteReader())
{
while (reader.Read())
{
p_sc_id = reader.GetInt32(0);
}
reader.Close();
}
}
string emergTime = DateTime.Now.ToUniversalTime().DateTo70Format() + "";
string emtypedesc = (emergencyType.HasValue) ? emergencyType.ToString() : "null";
command = "INSERT INTO emergalarm (sc_id,timeGMT,preview, emergency_type) VALUES(" + p_sc_id + "," + emergTime + ",0," + emtypedesc + ")";
using (NpgsqlCommand cmd = new NpgsqlCommand(command, connection))
{
cmd.ExecuteNonQuery();
}
command = String.Format("UPDATE alarm set sc_id={0},timeGMT={1} where type=5", p_sc_id, DateTime.Now.ToUniversalTime().DateTo70Format());
using (NpgsqlCommand cmd = new NpgsqlCommand(command, connection))
{
cmd.ExecuteNonQuery();
}
resp = sqlResponse.done;
}
}
catch (Exception o)
{
Console.WriteLine("File: SMdb_access.cs Meth: Insert_Zone_Alarm " + o.Message.ToString());
resp = sqlResponse.SQLerror;
throw new ArgumentException(o.Message.ToString());
}
return resp;
}
public sqlResponse Insert_Speed_Alarm(string radioID, UInt32 p_timeGMT, Int32 p_speed, String lat, String lng)
{
sqlResponse resp = sqlResponse.SQLerror;
try
{
using (NpgsqlConnection conn = new NpgsqlConnection(getConnectionString()))
{
conn.Open();
int p_sc_id = 0;
try
{
//get sc_id from imei/radioID
string command = $"SELECT sc_id FROM subscriber WHERE imei='{radioID}'";
using (NpgsqlCommand cmd = new NpgsqlCommand(command, conn))
{
using (NpgsqlDataReader dr = cmd.ExecuteReader())
{
while (dr.Read())
{
p_sc_id = dr.GetInt32(0);
}
dr.Close();
}
}
command = "INSERT INTO speedalarm (sc_id,timeGMT,speed,preview,address,lat,lng) " +
$" VALUES({p_sc_id}, {p_timeGMT}, {p_speed}, 0, 'no address', {lat}, {lng})";
using (NpgsqlCommand cmd = new NpgsqlCommand(command, conn))
{
cmd.ExecuteNonQuery();
}
command = $"UPDATE alarm SET sc_id={p_sc_id}, timeGMT={p_speed} WHERE type=4";
using (NpgsqlCommand cmd = new NpgsqlCommand(command, conn))
{
cmd.ExecuteNonQuery();
}
resp = sqlResponse.done;
}
catch (Exception o)
{
Utils.WriteLine(o.ToString(), ConsoleColor.Red);
}
conn.Close();
}
}
catch (Exception ex)
{
Utils.WriteLine("Insert_Speed_Alarm " + ex.ToString(), ConsoleColor.Red);
}
return resp;
}
public sqlResponse Insert_Zone_Alarm(int radioID, UInt32 p_timeGMT, Int32 p_zone_id, Int32 p_action, Boolean Zone)
{
sqlResponse resp = sqlResponse.SQLerror;
try
{
using (NpgsqlConnection conn = new NpgsqlConnection(getConnectionString()))
{
conn.Open();
int p_sc_id = radioID;
string query = "";
if (Zone) query = "INSERT INTO geozoneinout (sc_id,timeGMT,zone_id,action,type) VALUES(" + p_sc_id + "," + p_timeGMT + "," + p_zone_id + "," + p_action + ",1)";
else query = "INSERT INTO geozoneinout (sc_id,timeGMT,zone_id,action,type) VALUES(" + p_sc_id + "," + p_timeGMT + "," + p_zone_id + "," + p_action + ",2)";
using (NpgsqlCommand cmd = new NpgsqlCommand(query, conn))
{
cmd.ExecuteNonQuery();
}
if (Zone) query = String.Format("UPDATE alarm set sc_id={0},timeGMT={1},mess='{2}' where type=2", p_sc_id, p_zone_id, p_action);
else query = String.Format("UPDATE alarm set sc_id={0},timeGMT={1},mess='{2}' where type=3", p_sc_id, p_zone_id, p_action);
using (NpgsqlCommand cmd = new NpgsqlCommand(query, conn))
{
cmd.ExecuteNonQuery();
}
resp = sqlResponse.done;
conn.Close();
}
}
catch (Exception ex)
{
Utils.WriteLine("Insert_Zone_Alarm " + ex.ToString(), ConsoleColor.Red);
}
return resp;
}
public sqlResponse Insert_Zone_Simulator(String name, Int32 color, ArrayList List_of_points)
{
sqlResponse resp = sqlResponse.SQLerror;
string query = "";
try
{
using (NpgsqlConnection connection = new NpgsqlConnection())
{
connection.ConnectionString = getConnectionString();
connection.Open();
query = $"INSERT INTO zonename (name,color) VALUES('{name}',{color})";
using (NpgsqlCommand cmd = new NpgsqlCommand(query, connection))
{
cmd.ExecuteNonQuery();
}
String idx = string.Empty;
query = "SELECT max(idx) from zonename";
using (NpgsqlCommand cmd = new NpgsqlCommand(query, connection))
{
idx = ((Int32)cmd.ExecuteScalar()).ToString();
}
query = $"INSERT INTO zonepoints (lat,lng,zone_id) VALUES(@lat1,@lng1,{idx})";
foreach (PointonZone obj in List_of_points)
{
using (NpgsqlCommand cmd = new NpgsqlCommand(query, connection))
{
cmd.Parameters.Add("@lat1", NpgsqlTypes.NpgsqlDbType.Double).Value = obj.lat;
cmd.Parameters.Add("@lng1", NpgsqlTypes.NpgsqlDbType.Double).Value = obj.lng;
cmd.Prepare();
cmd.ExecuteNonQuery();
}
}
resp = sqlResponse.done;
}
}
catch (Exception o)
{
Console.WriteLine("Insert_Zone_Alarm : " + o.Message.ToString(),ConsoleColor.Red);
throw new ArgumentException(o.Message.ToString());
}
return resp;
}
public sqlResponse Insert_History_Simulator(String imei, ArrayList List_of_points)
{
Double sc_ev = 0;
Int32 sc_id = 0;
sqlResponse resp = sqlResponse.SQLerror;
try
{
using (NpgsqlConnection connection = new NpgsqlConnection())
{
connection.ConnectionString = getConnectionString();
connection.Open();
string command = $"select sc_id from subscriber where imei='{imei}'";
using (NpgsqlCommand cmd = new NpgsqlCommand(command, connection))
{
using (NpgsqlDataReader dr = cmd.ExecuteReader())
{
while (dr.Read())
{
sc_id = dr.GetInt32(0);
}
dr.Close();
}
}
command = $"INSERT INTO messages (sc_id,lat,lng,speed,di,dox,timeGMT,scevtime) " +
$" VALUES ({sc_id}, @lat1, @lng1, @speed,0,0, @timegmt @timegmt,@sc_ev)";
foreach (imei_and_message obj in List_of_points)
{
sc_ev = sc_id * 10000000000 + Convert.ToInt64(obj.TimeGMT);
using (NpgsqlCommand cmd = new NpgsqlCommand(command, connection))
{
cmd.Parameters.Add("@sc_ev", NpgsqlTypes.NpgsqlDbType.Double).Value = sc_ev;
cmd.Parameters.Add("@speed", NpgsqlTypes.NpgsqlDbType.Integer).Value = obj.Speed;
cmd.Parameters.Add("@timegmt", NpgsqlTypes.NpgsqlDbType.Integer).Value = obj.TimeGMT;
cmd.Parameters.Add("@lng1", NpgsqlTypes.NpgsqlDbType.Double).Value = obj.lng;
cmd.Parameters.Add("@lat1", NpgsqlTypes.NpgsqlDbType.Double).Value = obj.lat;
cmd.Prepare();
cmd.ExecuteNonQuery();
}
}
resp = sqlResponse.done;
}
}
catch (Exception o)
{
Console.WriteLine("File: SMdb_access.cs Meth: Insert_Zone_Alarm " + o.Message.ToString());
throw new ArgumentException(o.Message.ToString());
}
return resp;
}
public sqlResponse Insert_Landmark_Simulator(String name, String descris, Double lat, Double lng, Int32 typeID)
{
sqlResponse resp = sqlResponse.SQLerror;
NpgsqlCommand cmd;
try
{
using (NpgsqlConnection connection = new NpgsqlConnection())
{
connection.ConnectionString = getConnectionString();
connection.Open();
cmd = new NpgsqlCommand();
cmd.Connection = connection;
cmd.CommandText = $"INSERT INTO place (name,note,lat,lng,type_id,address) VALUES('{name}','{descris}',@lat,@lng, {typeID},'{""}')";
cmd.Parameters.Add("@lat", NpgsqlTypes.NpgsqlDbType.Double).Value = lat;
cmd.Parameters.Add("@lng", NpgsqlTypes.NpgsqlDbType.Double).Value = lng;
cmd.Prepare();
cmd.ExecuteNonQuery();
resp = sqlResponse.done;
}
}
catch (Exception o)
{
Console.WriteLine($"Insert_Landmark_Simulator : {o.Message}", ConsoleColor.Red);
throw new ArgumentException(o.Message.ToString());
}
return resp;
}
//get all zones
public ArrayList get_all_zone()
{
ArrayList GroupList = new ArrayList();
ArrayList arr = new ArrayList();
int OldGrpId = 0;
Boolean first = true;
ZoneClass oldZone = null;
string command = "SELECT zn.idx,zn.name,znpnt.lat,znpnt.lng,znpnt.idx,zn.color,zn.useridx,zn.alarmtype,zn.sentmsg,zn.msgbody,zn.unitids,zn.sentemail,zn.email,zn.subj,zn.body,zn.imeilist,zn.sentmsg2,zn.msgbody2,zn.speed, zn.callout, zn.callout_severity"
+ " FROM zonename as zn"
+ " LEFT JOIN zonepoints as znpnt ON (zn.idx = znpnt.zone_id) "
+ " ORDER by zn.name, znpnt.idx";
try
{
using (NpgsqlConnection connection = new NpgsqlConnection())
{
connection.ConnectionString = getConnectionString();
connection.Open();
using (NpgsqlCommand cmd = new NpgsqlCommand(command, connection))
{
using (NpgsqlDataReader dr = cmd.ExecuteReader())
{
while (dr.Read())
{
if (OldGrpId != dr.GetInt32(0))
{
if (first) first = false;
else
{
ZoneClass g = new ZoneClass(oldZone, OldGrpId, arr);
GroupList.Add(g);
}
OldGrpId = dr.GetInt32(0);
oldZone = new ZoneClass(dr.GetString(1),
dr.GetInt32(5), /* name */
dr.GetInt32(6), /* color */
dr.GetInt32(7), /* useridx*/
dr.GetBoolean(8), /* alarmType */
dr.GetString(9),
dr.GetString(10),
dr.GetBoolean(11),
dr.GetString(12),
dr.GetString(13),
dr.GetString(14),
dr.GetString(15),
dr.GetBoolean(16),
dr.GetString(17),
dr.GetInt32(18),
dr.GetBoolean(19),
dr.GetInt16(20));
arr = new ArrayList();
}
if (!dr.IsDBNull(2))
arr.Add(new PointonZone(dr.GetDouble(2), dr.GetDouble(3), dr.GetInt32(4)));
}
dr.Close();
}
}
if (OldGrpId != 0)
{
ZoneClass g1 = new ZoneClass(oldZone, OldGrpId, arr);
GroupList.Add(g1);
}
}
}
catch (Exception ex)
{
Console.WriteLine($"get_all_zone : {ex.Message}", ConsoleColor.Red);
}
return GroupList;
}
//get all landmarks
public ArrayList get_all_landmarks()
{
ArrayList ret = new ArrayList();
try
{
using (NpgsqlConnection connection = new NpgsqlConnection())
{
connection.ConnectionString = getConnectionString();
connection.Open();
string command = "SELECT name,lat,lng,idx, useridx, callout, callout_severity from PLACE ORDER BY name";
using (NpgsqlCommand cmd = new NpgsqlCommand(command, connection))
{
using (NpgsqlDataReader dr = cmd.ExecuteReader())
{
while (dr.Read())
{
LandMark tmp = new LandMark(dr.GetString(0), dr.GetDouble(1), dr.GetDouble(2),
dr.GetInt32(3), dr.GetInt32(4), dr.GetBoolean(5), dr.GetInt16(6));
ret.Add(tmp);
}
dr.Close();
}
}
}
}
catch (Exception o)
{
Console.WriteLine("get_all_landmarks: " + o.Message, ConsoleColor.Red);
throw new ArgumentException(o.Message);
}
return ret;
}
//check if a unit is in alarm state
public bool hasEmergencyActivated(int sc_id)
{
string result = "";
try
{
using (NpgsqlConnection connection = new NpgsqlConnection())
{
connection.ConnectionString = getConnectionString();
connection.Open();
string command = $"SELECT count(sc_id) FROM emergalarm WHERE preview = 0 and sc_id = {sc_id} ";
using (NpgsqlCommand cmd = new NpgsqlCommand(command, connection))
{
result = (cmd.ExecuteScalar()).ToString();
}
}
}
catch (Exception o)
{
Console.WriteLine("File: SMdb_access.cs Meth: hasEmergencyActivated " + o.Message.ToString());
throw new ArgumentException(o.Message.ToString());
}
return (result != "0");
}
//for zones
public Hashtable get_Vehicle_and_zone()
{
Hashtable ret = new Hashtable();
string command = "SELECT l.imei, l.lat, l.lng, s.sc_id,v.name,a.id, a.emergency, a.landmark, " +
"a.\"zone\" ,a.loneworker,a.speed,a.email, si.sip_id, v.type as type, active" +
" FROM lastpos l " +
"INNER JOIN subscriber as s ON (l.imei = s.imei) " +
"INNER JOIN subscriber_history as h ON (h.sc_id = s.sc_id) " +
"INNER JOIN vehicle as v on (v.id = h.veh_id) " +
"LEFT JOIN subscriber_alarm as a on (s.sc_id = a.sc_id) " +
"INNER JOIN sip_manager as si on (si.id = s.sc_id AND si.type = 2) ORDER BY l.imei";
try
{
using (NpgsqlConnection connection = new NpgsqlConnection())
{
connection.ConnectionString = getConnectionString();
connection.Open();
using (NpgsqlCommand cmd = new NpgsqlCommand(command, connection))
{
using (NpgsqlDataReader dr = cmd.ExecuteReader())
{
while (dr.Read())
{
Alarm alm = new Alarm()
{
Id = dr["id"] != DBNull.Value ? int.Parse(dr["id"].ToString()) : 0,
Sc_id = dr["sc_id"] != DBNull.Value ? int.Parse(dr["sc_id"].ToString()) : 0,
Emergency = dr["emergency"] != DBNull.Value ? dr["emergency"].ToString() : "",
Landmark = dr["landmark"] != DBNull.Value ? dr["landmark"].ToString() : "",
Zone = dr["zone"] != DBNull.Value ? dr["zone"].ToString() : "",
Loneworker = dr["loneworker"] != DBNull.Value ? dr["loneworker"].ToString() : "",
Speed = dr["speed"] != DBNull.Value ? dr["speed"].ToString() : "",
Email = dr["email"] != DBNull.Value ? dr["email"].ToString() : "",
Empopup = true,
Emsound = true,
Geopopup = true,
Geosound = true,
Speedpopup = true,
Speedsound = true,
Telempopup = true,
Telemsound = true
};
int sip_id = dr["sip_id"] != DBNull.Value ? int.Parse(dr["sip_id"].ToString()) : 0;
string imei = dr["imei"] != DBNull.Value ? dr["imei"].ToString() : "";
double latitude = dr["lat"] != DBNull.Value ? double.Parse(dr["lat"].ToString()) : 0.0;
double longitude = dr["lng"] != DBNull.Value ? double.Parse(dr["lng"].ToString()) : 0.0;
string name = dr["name"] != DBNull.Value ? dr["name"].ToString() : "";
Vehicle_Data obj = new Vehicle_Data( alm.Sc_id, sip_id, imei, latitude, longitude, name, alm)
{
active = (!dr.IsDBNull(dr.GetOrdinal("active")) ? dr.GetBoolean(dr.GetOrdinal("active")) : false)
};
obj.type = dr.GetInt16(dr.GetOrdinal("type"));
if (!ret.ContainsKey(obj.imei))
ret.Add(obj.imei, obj);
}
dr.Close();
}
}
}
}
catch (Exception o)
{
Console.WriteLine(o.Message, ConsoleColor.Red);
throw new ArgumentException(o.Message.ToString());
}
return ret;
}
//alarms ACK
public sqlResponse ACKalarms(int id, AlarmTypes type, int? user_id, uint? timegmt_ack)
{
string query = string.Empty;
sqlResponse resp = sqlResponse.SQLerror;
try
{
using (NpgsqlConnection connection = new NpgsqlConnection())
{
connection.ConnectionString = getConnectionString();
connection.Open();
switch (type)
{
case AlarmTypes.emergency:
query = $"UPDATE emergalarm SET preview=1, user_id={user_id}, timegmt_ack={timegmt_ack} WHERE idx={id}";
using (NpgsqlCommand cmd = new NpgsqlCommand(query, connection))
{
cmd.ExecuteNonQuery();
}
resp = sqlResponse.done;
break;
case AlarmTypes.landmark:
case AlarmTypes.zone:
query = $"UPDATE geozoneinout set preview=1, user_id={user_id}, timegmt_ack={timegmt_ack} where idx={id}";
using (NpgsqlCommand cmd = new NpgsqlCommand(query, connection))
{
cmd.ExecuteNonQuery();
}
resp = sqlResponse.done;
break;
case AlarmTypes.speed:
query = $"UPDATE speedalarm set preview=1, user_id={user_id}, timegmt_ack={timegmt_ack} where idx={id}";
using (NpgsqlCommand cmd = new NpgsqlCommand(query, connection))
{
cmd.ExecuteNonQuery();
}
resp = sqlResponse.done;
break;
case AlarmTypes.telemetry:
query = $"UPDATE telemetry_history set ack=1, user_id={user_id}, timegmt_ack={timegmt_ack} where idx={id}";
using (NpgsqlCommand cmd = new NpgsqlCommand(query, connection))
{
cmd.ExecuteNonQuery();
}
resp = sqlResponse.done;
break;
}
}
}
catch (Exception o)
{
Console.WriteLine("File: SMdb_access.cs Meth: Insert_Zone_Alarm " + o.Message.ToString());
resp = sqlResponse.SQLerror;
throw new ArgumentException(o.Message.ToString());
}
return resp;
}
public Dictionary<string, string> InitAlertCommandDictionary()
{
Dictionary<string, string> alertCommand = new Dictionary<string, string>();
alertCommand.Add(AlarmTypes.emergency.ToString(), "UPDATE emergalarm set preview=1, user_id={1} , timegmt_ack={2} where idx={0};");
alertCommand.Add(AlarmTypes.zone.ToString(), "UPDATE geozoneinout set preview=1, user_id={1} , timegmt_ack={2} where idx={0};");
alertCommand.Add(AlarmTypes.landmark.ToString(), "UPDATE geozoneinout set preview=1, user_id={1} , timegmt_ack={2} where idx={0};");
alertCommand.Add(AlarmTypes.speed.ToString(), "UPDATE speedalarm set preview=1, user_id={1} , timegmt_ack={2} where idx={0};");
alertCommand.Add(AlarmTypes.telemetry.ToString(), "UPDATE telemetry_history set ack=1, user_id={1} , timegmt_ack={2} where id={0};");
return alertCommand;
}
public sqlResponse ACKalarms(string command)
{
sqlResponse resp = sqlResponse.SQLerror;
try
{
using (NpgsqlConnection connection = new NpgsqlConnection())
{
connection.ConnectionString = getConnectionString();
connection.Open();
using (NpgsqlCommand cmd = new NpgsqlCommand(command, connection))
{
cmd.ExecuteNonQuery();
}
resp = sqlResponse.done;
}
}
catch (Exception o)
{
Console.WriteLine("File: SMdb_access.cs Meth: ACKalarms bulk ack by dispatcher " + o.Message.ToString());
resp = sqlResponse.SQLerror;
throw new ArgumentException(o.Message.ToString());
}
return resp;
}
//alarms ACK
public sqlResponse ACKALLalarms()
{
sqlResponse resp = sqlResponse.SQLerror;
try
{
//get sc_id from imei/radioID
using (NpgsqlConnection connection = new NpgsqlConnection())
{
connection.ConnectionString = getConnectionString();
connection.Open();
String query = String.Format("UPDATE emergalarm set preview=1 WHERE preview = 0;"
+ " UPDATE telemetry_history set ack=1 WHERE ack = 0; "
+ " UPDATE geozoneinout set preview=1 WHERE preview = 0; "
+ " UPDATE speedalarm set preview=1 WHERE preview = 0; "
+ " UPDATE telemetry_history set ack=1 WHERE ack = 0; ");
using (NpgsqlCommand cmd = new NpgsqlCommand(query, connection))
{
cmd.CommandTimeout = Int16.MaxValue;
cmd.ExecuteNonQuery();
}
resp = sqlResponse.done;
}
}
catch (Exception o)
{
Console.WriteLine($"ACKALLalarms : {o.Message} ",ConsoleColor.Red);
resp = sqlResponse.SQLerror;
throw new ArgumentException(o.Message.ToString());
}
return resp;
}
//alarms ACK
public sqlResponse ACKALLalarms(int sc_id, int user_id)
{
sqlResponse resp = sqlResponse.SQLerror;
try
{
using (NpgsqlConnection connection = new NpgsqlConnection())
{
connection.ConnectionString = getConnectionString();
connection.Open();
String query = String.Format("UPDATE emergalarm set preview=1, user_id={1}, timegmt_ack={2} WHERE sc_id ={0}", sc_id, user_id, DateTime.Now.ToUniversalTime().DateTo70Format());
using (NpgsqlCommand cmd = new NpgsqlCommand(query, connection))
{
cmd.ExecuteNonQuery();
}
System.Threading.Thread.Sleep(50);
query = String.Format("UPDATE geozoneinout set preview=1, user_id={1}, timegmt_ack={2} WHERE sc_id ={0}", sc_id, user_id, DateTime.Now.ToUniversalTime().DateTo70Format());
using (NpgsqlCommand cmd = new NpgsqlCommand(query, connection))
{
cmd.ExecuteNonQuery();
}
System.Threading.Thread.Sleep(50);
query = String.Format("UPDATE speedalarm set preview=1, user_id={1}, timegmt_ack={2} WHERE sc_id ={0}", sc_id, user_id, DateTime.Now.ToUniversalTime().DateTo70Format());
using (NpgsqlCommand cmd = new NpgsqlCommand(query, connection))
{
cmd.ExecuteNonQuery();
}
System.Threading.Thread.Sleep(50);
query = String.Format("UPDATE telemetry_history set ack=1, user_id={1}, timegmt_ack={2} WHERE sc_id ={0}", sc_id, user_id, DateTime.Now.ToUniversalTime().DateTo70Format());
using (NpgsqlCommand cmd = new NpgsqlCommand(query, connection))
{
cmd.ExecuteNonQuery();
}
resp = sqlResponse.done;
}
}
catch (Exception o)
{
Console.WriteLine($"ACKALLalarms : {o.Message}", ConsoleColor.Red);
resp = sqlResponse.SQLerror;
}
return resp;
}
public static readonly object locker = new object();
public Int32 countAlarm = 0;
//get all non ack alarms
public List<AlarmHisItem> Get_nonACK_alarms1()
{
return Get_nonACK_alarms1(99999999);
}
public List<AlarmHisItem> Get_nonACK_alarms1(int limit)
{
Utils.WriteLine("START Get_nonACK_alarms", ConsoleColor.Yellow);
List<AlarmHisItem> list = new List<AlarmHisItem>();
using (NpgsqlConnection conn = new NpgsqlConnection(getConnectionString()))
{
//get all energ alarm
try
{
conn.Open();
string command = "SELECT a.idx, a.sc_id,a.timegmt,v.\"name\", a.emergency_type, lat, lng " +
" FROM emergalarm as a" +
" INNER JOIN subscriber_history as sh on (a.sc_id = sh.sc_id) " +
" INNER JOIN vehicle as v on (v.id = sh.veh_id)" +
" WHERE preview = 0 " +
" ORDER BY a.timegmt DESC" +
$" limit {limit}";
using (NpgsqlCommand cmd = new NpgsqlCommand(command, conn))
{
using (NpgsqlDataReader Reader = cmd.ExecuteReader())
{
while (Reader.Read())
{
string description = (Reader.IsDBNull(4) ? "" : ((EmergencyTypes)Reader.GetInt32(4)).ToString());
AlarmHisItem item = new AlarmHisItem(Reader.GetInt32(0), Reader.GetInt32(1), Reader.GetString(3),
AlarmTypes.emergency, description, GetDTLocalFromSeconds(Reader.GetInt32(2)), Reader.GetInt32(2), 0);
item.Latitude = Reader.GetDouble(5);
item.Longitude = Reader.GetDouble(6);
list.Add(item);
}
}
}
}
catch (Exception ee)
{
Utils.WriteLine("DB Get Emerg Alerts: " + ee.ToString(), ConsoleColor.Red);
}
//get all zone alarm
try
{
string command = "SELECT g.idx, g.sc_id, v.\"name\", zn.\"name\", g.\"action\",g.timeGMT " +
" FROM geozoneinout as g" +
" INNER JOIN subscriber_history as sh on (g.sc_id = sh.sc_id) " +
" INNER JOIN vehicle as v on (v.id = sh.veh_id)" +
" INNER JOIN zonename as zn on(g.zone_id = zn.idx)" +
" WHERE preview =0 and g.\"type\" = 1" +
" ORDER BY g.timegmt desc " +
$" limit {limit}";
using (NpgsqlCommand cmd = new NpgsqlCommand(command, conn))
{
using (NpgsqlDataReader Reader = cmd.ExecuteReader())
{
while (Reader.Read())
{
string text = ((uint)Reader.GetInt32(4) == 1) ? "OUT " + Reader.GetString(3) : "IN " + Reader.GetString(3);
AlarmHisItem item = new AlarmHisItem(Reader.GetInt32(0), Reader.GetInt32(1), Reader.GetString(2),
AlarmTypes.zone, text, GetDTLocalFromSeconds(Reader.GetInt32(5)),
Reader.GetInt32(5), 0);
list.Add(item);
}
}
}
}
catch (Exception ee)
{
Utils.WriteLine("DB Get Zone Alerts: " + ee.ToString(), ConsoleColor.Red);
}
//get all land alarm
try
{
string command = " SELECT g.idx, g.sc_id, v.\"name\", zn.\"name\", g.\"action\",g.timeGMT " +
" FROM geozoneinout as g" +
" INNER JOIN subscriber_history as sh on (g.sc_id = sh.sc_id) " +
" INNER JOIN vehicle as v on (v.id = sh.veh_id)" +
" INNER JOIN place as zn on(g.zone_id = zn.idx)" +
" WHERE preview = 0 and g.\"type\" = 2" +
" ORDER BY g.timegmt DESC" +
$" limit {limit}";
using (NpgsqlCommand cmd = new NpgsqlCommand(command, conn))
{
using (NpgsqlDataReader Reader = cmd.ExecuteReader())
{
while (Reader.Read())
{
string text = ((uint)Reader.GetInt32(4) == 1) ? "OUT " + Reader.GetString(3) : "IN " + Reader.GetString(3);
AlarmHisItem item = new AlarmHisItem(Reader.GetInt32(0), Reader.GetInt32(1), Reader.GetString(2), AlarmTypes.landmark,
text, GetDTLocalFromSeconds(Reader.GetInt32(5)), Reader.GetInt32(5), 0);
list.Add(item);
}
}
}
}
catch (Exception ee)
{
Utils.WriteLine("DB Get Landmark Alerts: " + ee.ToString(), ConsoleColor.Red);
}
//get all speed alarm
try
{
string command = " SELECT a.idx, a.sc_id, v.\"name\", a.timegmt, a.speed " +
" FROM speedalarm as a" +
" INNER JOIN subscriber_history as sh on (a.sc_id = sh.sc_id) " +
" INNER JOIN vehicle as v on (v.id = sh.veh_id)" +
" WHERE preview = 0 " +
" ORDER BY a.timegmt desc" +
$" limit {limit}";
using (NpgsqlCommand cmd = new NpgsqlCommand(command, conn))
{
using (NpgsqlDataReader Reader = cmd.ExecuteReader())
{
while (Reader.Read())
{
AlarmHisItem item = new AlarmHisItem(Reader.GetInt32(0), Reader.GetInt32(1), Reader.GetString(2),
AlarmTypes.speed, Reader.GetInt32(4).ToString(), GetDTLocalFromSeconds(Reader.GetInt32(3)),
Reader.GetInt32(3), 0);
list.Add(item);
}
}
}
}
catch (Exception ee)
{
Utils.WriteLine("DB Get Speed Alerts: " + ee.ToString(), ConsoleColor.Red);
}
//get all telem alarm
try
{
string command = " SELECT a.id, a.sc_id, v.\"name\", a.timegmt, tel.\"name\"" +
" FROM telemetry_history as a" +
" INNER JOIN subscriber_history as sh on (a.sc_id = sh.sc_id) " +
" INNER JOIN vehicle as v on (v.id = sh.veh_id)" +
" INNER JOIN telemetry as tel on (a.telemetry_id = tel.id)" +
" WHERE ack = 0 and a.alarm = 1 " +
" ORDER BY a.timegmt desc" +
$" limit {limit}";
using (NpgsqlCommand cmd = new NpgsqlCommand(command, conn))
{
using (NpgsqlDataReader Reader = cmd.ExecuteReader())
{
while (Reader.Read())
{
AlarmHisItem item = new AlarmHisItem(Reader.GetInt32(0), Reader.GetInt32(1), Reader.GetString(2), AlarmTypes.telemetry, Reader.GetString(4), GetDTLocalFromSeconds(Reader.GetInt32(3)), Reader.GetInt32(3), 0);
list.Add(item);
}
}
}
}
catch (Exception ee)
{
Utils.WriteLine("DB Get Telem Alerts: " + ee.ToString(), ConsoleColor.Red);
}
countAlarm = list.Count;
Utils.WriteLine("FINISH Get_nonACK_alarms", ConsoleColor.Yellow);
conn.Close();
}
return list;
}
public int Get_nonACK_alarms_count(int userID)
{
Utils.WriteLine($"START Get_nonACK_alarms_count for user {userID}", ConsoleColor.Yellow);
try
{
using (NpgsqlConnection connection = new NpgsqlConnection())
{
connection.ConnectionString = getConnectionString();
connection.Open();
string query =
$" select sum(x) from " +
$" (" +
$" select count(*) as x from emergalarm e" +
$" where e.preview = 0 and e.sc_id IN ( SELECT VU.veh_id FROM vehicle_user as VU WHERE VU.user_id = {userID})" +
$" UNION " +
$" select count(*) as x from geozoneinout g" +
$" where preview = 0 and g.sc_id IN ( SELECT VU.veh_id FROM vehicle_user as VU WHERE VU.user_id = {userID})" +
$" UNION " +
$" select count(*) as x from speedalarm s" +
$" where preview = 0 and s.sc_id IN ( SELECT VU.veh_id FROM vehicle_user as VU WHERE VU.user_id = {userID})" +
$" UNION " +
$" select count(*) as x from telemetry_history t" +
$" where ack = 0 and t.sc_id IN(SELECT VU.veh_id FROM vehicle_user as VU WHERE VU.user_id = {userID})" +
$" ) as foo";
string result = string.Empty;
using (NpgsqlCommand cmd = new NpgsqlCommand(query, connection))
{
result = cmd.ExecuteScalar().ToString();
}
Utils.WriteLine("FINISH Get_nonACK_alarms for user", ConsoleColor.Yellow);
int x = 0;
int.TryParse(result, out x);
return x;
}
}
catch (Exception ee)
{
Console.WriteLine(ee.ToString());
}
return 0;
}
//get all non ack alarms for unit
public ArrayList Get_nonACK_alarms(int sc_id)
{
ArrayList list = new ArrayList();
using (NpgsqlConnection conn = new NpgsqlConnection(getConnectionString()))
{
conn.Open();
//get all energ alarm
try
{
string command = " SELECT a.idx, a.sc_id,a.timegmt,v.\"name\", a.emergency_type " +
" FROM emergalarm as a" +
" INNER JOIN subscriber_history as sh on (a.sc_id = sh.sc_id) " +
" INNER JOIN vehicle as v on (v.id = sh.veh_id)" +
$" WHERE preview = 0 AND a.sc_id = {sc_id}";
using (NpgsqlCommand cmd = new NpgsqlCommand(command, conn))
{
using (NpgsqlDataReader Reader = cmd.ExecuteReader())
{
while (Reader.Read())
{
Alarms item = new Alarms(rep_type.EMERG, DateTime.Now, Reader.GetString(3), "");
list.Add(item);
}
}
}
}
catch (Exception ee)
{
Utils.WriteLine(ee.ToString(), ConsoleColor.Red);
}
//get all zone alarm
try
{
string command = " SELECT g.idx, g.sc_id, v.\"name\", zn.\"name\", g.\"action\",g.timeGMT " +
" FROM geozoneinout as g" +
" INNER JOIN subscriber_history as sh on (g.sc_id = sh.sc_id) " +
" INNER JOIN vehicle as v on (v.id = sh.veh_id)" +
" INNER JOIN zonename as zn on(g.zone_id = zn.idx)" +
$" WHERE preview = 0 AND g.sc_id = {sc_id}";
using (NpgsqlCommand cmd = new NpgsqlCommand(command, conn))
{
using (NpgsqlDataReader Reader = cmd.ExecuteReader())
{
while (Reader.Read())
{
Alarms item = new Alarms(rep_type.GEOFENC, DateTime.Now, Reader.GetString(2), "");
list.Add(item);
}
}
}
}
catch (Exception ee)
{
Utils.WriteLine(ee.ToString(), ConsoleColor.Red);
}
//get all land alarm
try
{
string command = "SELECT g.idx, g.sc_id, v.\"name\", zn.\"name\", g.\"action\",g.timeGMT " +
"FROM geozoneinout as g" +
" INNER JOIN subscriber_history as sh on (g.sc_id = sh.sc_id) " +
" INNER JOIN vehicle as v on (v.id = sh.veh_id)" +
" INNER JOIN place as zn on(g.zone_id = zn.idx)" +
$" WHERE preview = 0 AND g.sc_id = {sc_id}";
using (NpgsqlCommand cmd = new NpgsqlCommand(command, conn))
{
using (NpgsqlDataReader Reader = cmd.ExecuteReader())
{
while (Reader.Read())
{
Alarms item = new Alarms(rep_type.GEOFENC, DateTime.Now, Reader.GetString(2), "");
list.Add(item);
}
}
}
}
catch (Exception ee)
{
Utils.WriteLine(ee.ToString(), ConsoleColor.Red);
}
//get all speed alarm
try
{
string command = "SELECT a.idx, a.sc_id, v.\"name\", a.timegmt, a.speed " +
"FROM speedalarm as a" +
" INNER JOIN subscriber_history as sh on (a.sc_id = sh.sc_id) " +
" INNER JOIN vehicle as v on (v.id = sh.veh_id)" +
$" WHERE preview = 0 AND a.sc_id = {sc_id}";
using (NpgsqlCommand cmd = new NpgsqlCommand(command, conn))
{
using (NpgsqlDataReader Reader = cmd.ExecuteReader())
{
while (Reader.Read())
{
Alarms item = new Alarms(rep_type.SPEED, DateTime.Now, Reader.GetString(2), "");
list.Add(item);
}
}
}
}
catch (Exception ee)
{
Utils.WriteLine(ee.ToString(), ConsoleColor.Red);
}
//get all telem alarm
try
{
string command = "SELECT a.id, a.sc_id, v.\"name\", a.timegmt, tel.\"name\" " +
"FROM telemetry_history as a" +
" INNER JOIN subscriber_history as sh on (a.sc_id = sh.sc_id) " +
" INNER JOIN vehicle as v on (v.id = sh.veh_id)" +
" INNER JOIN telemetry as tel on (a.telemetry_id = tel.id)" +
$" WHERE ack = 0 and a.alarm = 1 AND a.sc_id = {sc_id}";
using (NpgsqlCommand cmd = new NpgsqlCommand(command, conn))
{
using (NpgsqlDataReader Reader = cmd.ExecuteReader())
{
while (Reader.Read())
{
Alarms item = new Alarms(rep_type.TELEMETRY_ALARM, DateTime.Now, Reader.GetString(2), "");
list.Add(item);
}
}
}
}
catch (Exception ee)
{
Utils.WriteLine(ee.ToString(), ConsoleColor.Red);
}
conn.Close();
}
countAlarm = list.Count;
return list;
}
public Int64 GetNumberOfNonAckAllarmsForRadioId(Int64 scId)
{
Int64 numberOfNonAck = 0;
try
{
string cmdEmergAlarm = "SELECT count(*) FROM emergalarm as a" +
$" WHERE preview =0 AND a.sc_id = {scId}";
string cmdZoneLandAlarm = "SELECT count(*) FROM geozoneinout as g" +
$" WHERE preview =0 AND g.sc_id = {scId}";
string cmdSpeedAlarm = "SELECT count(*) FROM speedalarm as a" +
$" WHERE preview =0 AND a.sc_id = {scId} ";
string cmdTelemAlarm = "SELECT count(*) FROM telemetry_history as a" +
$" WHERE ack =0 and a.alarm=1 AND a.sc_id = {scId} ";
using (NpgsqlConnection connection = new NpgsqlConnection())
{
connection.ConnectionString = getConnectionString();
connection.Open();
using (NpgsqlCommand cmd = new NpgsqlCommand($"{cmdEmergAlarm} UNION {cmdZoneLandAlarm} UNION {cmdSpeedAlarm} UNION {cmdTelemAlarm}", connection))
{
using (NpgsqlDataReader Reader = cmd.ExecuteReader())
{
while (Reader.Read())
{
Int64 count = Reader.GetInt64(0);
numberOfNonAck += count;
}
}
}
}
}
catch (Exception ee)
{
Console.WriteLine($"GetNumberOfNonAckAllarmsForRadioId: {ee.Message} ", ConsoleColor.Red);
}
Utils.WriteLine($"Received {numberOfNonAck} non ack alarms for sc_id {scId}", ConsoleColor.Cyan);
return numberOfNonAck;
}
public List<AlarmHisItem> Get_nonACK_alarms_user_id(Int32 userID)
{
List<AlarmHisItem> list = new List<AlarmHisItem>();
using (NpgsqlConnection conn = new NpgsqlConnection(getConnectionString()))
{
conn.Open();
//get all energ alarm
try
{
string command = "SELECT a.idx, a.sc_id,a.timegmt,v.\"name\" " +
" FROM emergalarm as a" +
" INNER JOIN subscriber_history as sh on (a.sc_id = sh.sc_id) " +
" INNER JOIN vehicle as v on (v.id = sh.veh_id) " +
" INNER JOIN vehicle_user as u on (u.veh_id = v.id) " +
$" WHERE u.user_id={userID} AND preview =0 ";
using (NpgsqlCommand cmd = new NpgsqlCommand(command, conn))
{
using (NpgsqlDataReader Reader = cmd.ExecuteReader())
{
while (Reader.Read())
{
AlarmHisItem item = new AlarmHisItem(Reader.GetInt32(0), Reader.GetInt32(1), Reader.GetString(3),
AlarmTypes.emergency, "", GetDTLocalFromSeconds(Reader.GetInt32(2)),
Reader.GetInt32(2), 0);
list.Add(item);
}
}
}
}
catch (Exception ee)
{
Console.WriteLine(ee.Message, ConsoleColor.Red);
}
//get all zone alarm
try
{
string command = "SELECT g.idx, g.sc_id, v.\"name\", zn.\"name\", g.\"action\",g.timeGMT " +
"FROM geozoneinout as g" +
" INNER JOIN subscriber_history as sh on (g.sc_id = sh.sc_id) " +
" INNER JOIN vehicle as v on (v.id = sh.veh_id)" +
" INNER JOIN zonename as zn on(g.zone_id = zn.idx)" +
" INNER JOIN vehicle_user as u on (u.veh_id = v.id) " +
$" WHERE u.user_id= {userID} and preview =0 ";
using (NpgsqlCommand cmd = new NpgsqlCommand(command, conn))
{
using (NpgsqlDataReader Reader = cmd.ExecuteReader())
{
while (Reader.Read())
{
string text = ((uint)Reader.GetInt32(4) == 1) ? "OUT " : "IN " + Reader.GetString(3);
AlarmHisItem item = new AlarmHisItem(Reader.GetInt32(0), Reader.GetInt32(1), Reader.GetString(2),
AlarmTypes.zone, text, GetDTLocalFromSeconds(Reader.GetInt32(5)),
Reader.GetInt32(5), 0);
list.Add(item);
}
}
}
}
catch (Exception ee)
{
Console.WriteLine(ee.Message, ConsoleColor.Red);
}
//get all land alarm
try
{
string command = "SELECT g.idx, g.sc_id, v.\"name\", zn.\"name\", g.\"action\",g.timeGMT " +
" FROM geozoneinout as g" +
" INNER JOIN subscriber_history as sh on (g.sc_id = sh.sc_id) " +
" INNER JOIN vehicle as v on (v.id = sh.veh_id)" +
" INNER JOIN place as zn on(g.zone_id = zn.idx)" +
" INNER JOIN vehicle_user as u on (u.veh_id = v.id) " +
$" WHERE u.user_id= {userID} and preview =0 ";
using (NpgsqlCommand cmd = new NpgsqlCommand(command, conn))
{
using (NpgsqlDataReader Reader = cmd.ExecuteReader())
{
while (Reader.Read())
{
string text = ((uint)Reader.GetInt32(4) == 1) ? "OUT " : "IN " + Reader.GetString(3);
AlarmHisItem item = new AlarmHisItem(Reader.GetInt32(0), Reader.GetInt32(1), Reader.GetString(2),
AlarmTypes.landmark, text, GetDTLocalFromSeconds(Reader.GetInt32(5)),
Reader.GetInt32(5), 0);
list.Add(item);
}
}
}
}
catch (Exception ee)
{
Console.WriteLine(ee.Message, ConsoleColor.Red);
}
//get all speed alarm
try
{
string command = "SELECT a.idx, a.sc_id, v.\"name\", a.timegmt, a.speed " +
" FROM speedalarm as a" +
" INNER JOIN subscriber_history as sh on (a.sc_id = sh.sc_id) " +
" INNER JOIN vehicle as v on (v.id = sh.veh_id)" +
" INNER JOIN vehicle_user as u on (u.veh_id = v.id) " +
$" WHERE u.user_id={userID} and preview =0 ";
using (NpgsqlCommand cmd = new NpgsqlCommand(command, conn))
{
using (NpgsqlDataReader Reader = cmd.ExecuteReader())
{
while (Reader.Read())
{
AlarmHisItem item = new AlarmHisItem(Reader.GetInt32(0), Reader.GetInt32(1), Reader.GetString(2), AlarmTypes.speed, Reader.GetInt32(4).ToString(), GetDTLocalFromSeconds(Reader.GetInt32(3)), Reader.GetInt32(3), 0);
list.Add(item);
}
}
}
}
catch (Exception ee)
{
Console.WriteLine(ee.Message, ConsoleColor.Red );
}
//get all telem alarm
try
{
string command = " SELECT a.id, a.sc_id, v.\"name\", a.timegmt, tel.\"name\" " +
" FROM telemetry_history as a" +
" INNER JOIN subscriber_history as sh on (a.sc_id = sh.sc_id) " +
" INNER JOIN vehicle as v on (v.id = sh.veh_id)" +
" INNER JOIN telemetry as tel on (a.telemetry_id = tel.id)" +
" INNER JOIN vehicle_user as u on (u.veh_id = v.id) " +
$" WHERE u.user_id= {userID} and ack =0 and a.alarm=1 ";
using (NpgsqlCommand cmd = new NpgsqlCommand(command, conn))
{
using (NpgsqlDataReader Reader = cmd.ExecuteReader())
{
while (Reader.Read())
{
AlarmHisItem item = new AlarmHisItem(Reader.GetInt32(0), Reader.GetInt32(1), Reader.GetString(2),
AlarmTypes.telemetry, Reader.GetString(4), GetDTLocalFromSeconds(Reader.GetInt32(3)),
Reader.GetInt32(3), 0);
list.Add(item);
}
}
}
}
catch (Exception ee)
{
Console.WriteLine(ee.Message, ConsoleColor.Red);
}
countAlarm = list.Count;
conn.Close();
}// conn
return list;
}
public System.DateTime GetDTLocalFromSeconds(Int32 param)
{
DateTime dateTime = new DateTime(1970, 1, 1, 0, 0, 0, 0);
dateTime = dateTime.AddSeconds((double)param);
dateTime = dateTime.ToLocalTime();
return dateTime;
}
}
public class Alarm
{
private int id;
public int Id
{
get { return id; }
set { id = value; }
}
private int sc_id;
public int Sc_id
{
get { return sc_id; }
set { sc_id = value; }
}
private string emergency;
public string Emergency
{
get { return emergency; }
set { emergency = value; }
}
private string landmark;
public string Landmark
{
get { return landmark; }
set { landmark = value; }
}
private string zone;
public string Zone
{
get { return zone; }
set { zone = value; }
}
private string loneworker;
public string Loneworker
{
get { return loneworker; }
set { loneworker = value; }
}
private string speed;
public string Speed
{
get { return speed; }
set { speed = value; }
}
private string email;
public string Email
{
get { return email; }
set { email = value; }
}
private string imei;
public string Imei
{
get { return imei; }
set { imei = value; }
}
private Boolean emsound;
public Boolean Emsound
{
get { return emsound; }
set { emsound = value; }
}
private Boolean empopup;
public Boolean Empopup
{
get { return empopup; }
set { empopup = value; }
}
private Boolean geosound;
public Boolean Geosound
{
get { return geosound; }
set { geosound = value; }
}
private Boolean geopopup;
public Boolean Geopopup
{
get { return geopopup; }
set { geopopup = value; }
}
private Boolean speedsound;
public Boolean Speedsound
{
get { return speedsound; }
set { speedsound = value; }
}
private Boolean speedpopup;
public Boolean Speedpopup
{
get { return speedpopup; }
set { speedpopup = value; }
}
private Boolean telemsound;
public Boolean Telemsound
{
get { return telemsound; }
set { telemsound = value; }
}
private Boolean telempopup;
public Boolean Telempopup
{
get { return telempopup; }
set { telempopup = value; }
}
public Alarm()
{
}
public Alarm(int id, int sc_id, string emergency, string landmark, string zone, string loneworker, string speed, string email, Boolean empopup, Boolean emsound, Boolean geopopup, Boolean geosound, Boolean speedpopup, Boolean speedsound, Boolean telempopup, Boolean telemsound)
{
this.id = id;
this.sc_id = sc_id;
this.emergency = emergency;
this.landmark = landmark;
this.zone = zone;
this.loneworker = loneworker;
this.speed = speed;
this.email = email;
this.imei = "";
this.empopup = empopup;
this.emsound = emsound;
this.geopopup = geopopup;
this.geosound = geosound;
this.speedpopup = speedpopup;
this.speedsound = speedsound;
this.telempopup = telempopup;
this.telemsound = telemsound;
}
public Alarm(int id, string imei, string emergency,string landmark,string zone, string loneworker, string speed, string email,Boolean empopup,Boolean emsound,Boolean geopopup,Boolean geosound,Boolean speedpopup,Boolean speedsound,Boolean telempopup,Boolean telemsound)
{
this.id = id;
this.imei = imei;
this.emergency = emergency;
this.landmark = landmark;
this.zone = zone;
this.loneworker = loneworker;
this.speed = speed;
this.email = email;
this.sc_id = 0;
this.empopup = empopup;
this.emsound = emsound;
this.geopopup = geopopup;
this.geosound = geosound;
this.speedpopup = speedpopup;
this.speedsound = speedsound;
this.telempopup = telempopup;
this.telemsound = telemsound;
}
}
public class AlarmHisItem
{
private int id;
public int Id
{
get { return id; }
set { id = value; }
}
private int sc_id;
public int Sc_id
{
get { return sc_id; }
set { sc_id = value; }
}
private string unitName;
public string UnitName
{
get { return unitName; }
set { unitName = value; }
}
private AlarmTypes type;
public AlarmTypes Type
{
get { return type; }
set { type = value; }
}
private string text;
public string Text
{
get { return text; }
set { text = value; }
}
private DateTime timegmt;
public DateTime Timegmt
{
get { return timegmt; }
set { timegmt = value; }
}
private Int32 timegmtUnix;
public Int32 TimegmtUnix
{
get { return timegmtUnix; }
set { timegmtUnix = value; }
}
private int ack;
public int ACK
{
get { return ack; }
set { ack = value; }
}
public double Latitude { get; set; }
public double Longitude { get; set; }
public AlarmHisItem(int id, int sc_id, string unitName, AlarmTypes type, string text, DateTime timegmt, Int32 timegmtUnix, int ack)
{
this.id = id;
this.sc_id = sc_id;
this.unitName = unitName;
this.type = type;
this.text = text;
this.timegmt = timegmt;
this.timegmtUnix = timegmtUnix;
this.ack = ack;
Latitude = 0;
Longitude = 0;
}
}
public class AlarmHisItemComparer : IComparer
{
public AlarmHisItemComparer() : base() { }
int IComparer.Compare(object x, object y)
{
AlarmHisItem X = x as AlarmHisItem;
AlarmHisItem Y = y as AlarmHisItem;
if (X.TimegmtUnix < Y.TimegmtUnix) return 1;
else if (X.TimegmtUnix == Y.TimegmtUnix) return 0;
else return -1;
}
}
public enum AlarmTypes{all = -1, emergency = 0,landmark = 1, zone = 2, speed = 3,telemetry = 4, unknown = 11}
public enum EmergencyTypes { NORMAL = 0, MANDOWN = 1, LONEWORKER = 2, MOTIONLESS = 3, PHONE_DROPPED = 5 };
}