3265 lines
139 KiB
C#
3265 lines
139 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Text;
|
|
using Npgsql;
|
|
using System.Collections;
|
|
using System.Data;
|
|
using System.IO;
|
|
|
|
namespace SafeMobileLib
|
|
{
|
|
public class DBvehiclesManager : DBmanager
|
|
{
|
|
public DBvehiclesManager(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)
|
|
{
|
|
|
|
}
|
|
|
|
|
|
#region ADD VEHICLE
|
|
public vehResponse addVehicleSierraToDb(string _imei, string _user, string _name, string _serialNumber, int DI, bool motoTRBO,
|
|
int gpsInterval, int imgID, int gpsPOOR, int gpsOFF, int gpsMADEOFF, int arsInterval, string email, string phone, int gw_id,
|
|
int radio_gw_id, bool active, int unitType, MobileVehicles mv)
|
|
{
|
|
return AddVehicleIntoDB_Common(_imei, _user, _name, _serialNumber, DI, motoTRBO,
|
|
gpsInterval, imgID, gpsPOOR, gpsOFF, gpsMADEOFF, 0, email, phone, true, gw_id, radio_gw_id, active, unitType, mv);
|
|
}
|
|
|
|
|
|
public vehResponse addVehicleToDb(string _imei, string _user, string _name, string _serialNumber, int DI, bool motoTRBO,
|
|
int gpsInterval, int imgID, int gpsPOOR, int gpsOFF, int gpsMADEOFF,int arsInterval, int gw_id,
|
|
int radio_gw_id, bool active, int unitType, MobileVehicles mv)
|
|
{
|
|
return AddVehicleIntoDB_Common(_imei, _user, _name, _serialNumber, DI, motoTRBO,
|
|
gpsInterval, imgID, gpsPOOR, gpsOFF, gpsMADEOFF, 0, "", "", false, gw_id, radio_gw_id, active, unitType, mv);
|
|
}
|
|
|
|
|
|
|
|
private vehResponse AddVehicleIntoDB_Common(string _imei, string _user, string _name, string _serialNumber, int DI, bool motoTRBO,
|
|
int gpsInterval, int imgID, int gpsPOOR, int gpsOFF, int gpsMADEOFF,int arsInterval, string email, string phone, bool isSierra, int gw_id,
|
|
int radio_gw_id, bool active, int type, MobileVehicles mv)
|
|
{
|
|
|
|
string SerialNr = "";
|
|
if (!motoTRBO) SerialNr = _serialNumber;
|
|
NpgsqlCommand cmd = null;
|
|
|
|
NpgsqlTransaction transaction = null;
|
|
|
|
|
|
vehResponse resp;
|
|
try
|
|
{
|
|
using (NpgsqlConnection connection = new NpgsqlConnection())
|
|
{
|
|
|
|
connection.ConnectionString = getConnectionString();
|
|
connection.Open();
|
|
// open a transaction
|
|
transaction = connection.BeginTransaction();
|
|
|
|
_imei = _imei.Trim();
|
|
_name = _name.TrimEnd();
|
|
cmd = new NpgsqlCommand($"SELECT count(imei) FROM subscriber WHERE imei='{_imei}'", connection);
|
|
object temp = cmd.ExecuteScalar();
|
|
|
|
if (temp.ToString() == "0")
|
|
{
|
|
|
|
string id_subscriber = "", id_vehicle = "", id_user = "";
|
|
|
|
cmd = new NpgsqlCommand("INSERT INTO vehicle (lp,name,driver_id,time_route,\"GPS_reporting_interval\",ars_interval,gps_poor,gps_off,made_off,active,type) "
|
|
+ $" VALUES('{SerialNr}','{_name}',{imgID}, 0, {gpsInterval},{arsInterval},{gpsPOOR},{gpsOFF},{gpsMADEOFF},{active},{type})", connection, transaction);
|
|
cmd.ExecuteNonQuery();
|
|
|
|
if (isSierra)
|
|
cmd = new NpgsqlCommand($"INSERT INTO subscriber (imei, phone, email) VALUES('{_imei}','{phone}','{email}')", connection, transaction);
|
|
else
|
|
cmd = new NpgsqlCommand($"INSERT INTO subscriber (imei) VALUES('{_imei}')", connection, transaction);
|
|
cmd.ExecuteNonQuery();
|
|
|
|
//get vehicle id
|
|
cmd = new NpgsqlCommand("SELECT max(id) FROM vehicle ", connection);
|
|
id_vehicle = cmd.ExecuteScalar().ToString();
|
|
|
|
//get subscriber id
|
|
cmd = new NpgsqlCommand("SELECT max(sc_id) FROM subscriber ", connection);
|
|
id_subscriber = cmd.ExecuteScalar().ToString();
|
|
|
|
//get user id
|
|
cmd = new NpgsqlCommand($"SELECT userId FROM users WHERE login ='{_user}'", connection);
|
|
id_user = cmd.ExecuteScalar().ToString();
|
|
|
|
if (id_vehicle.Length > 0 && id_subscriber.Length > 0 && id_user.Length > 0)
|
|
{
|
|
cmd = new NpgsqlCommand($"INSERT INTO vehicle_user(veh_id, user_id, assigned) VALUES({id_vehicle},{id_user},'2007-01-01')", connection, transaction);
|
|
cmd.ExecuteNonQuery();
|
|
|
|
cmd = new NpgsqlCommand($"INSERT INTO subscriber_history(sc_id, veh_id, assigned) VALUES({id_subscriber},{id_vehicle},'2007-01-01')", connection, transaction);
|
|
cmd.ExecuteNonQuery();
|
|
|
|
cmd = new NpgsqlCommand($"DELETE FROM lastpos where imei='{_imei}'", connection, transaction);
|
|
cmd.ExecuteNonQuery();
|
|
|
|
NpgsqlCommand cmd2 = new NpgsqlCommand();
|
|
cmd2.Connection = connection;
|
|
cmd2.Transaction = transaction;
|
|
cmd2.CommandText = "INSERT INTO lastpos (imei,lat,lng,speed,heading,di,dox,timeGMT) VALUES(@imei,@lat1,@lng1,0,0,0,0,0)";//42.06054,-88.02397
|
|
cmd2.Parameters.Add("@imei", NpgsqlTypes.NpgsqlDbType.Varchar).Value = _imei;//42.06054;
|
|
cmd2.Parameters.Add("@lat1", NpgsqlTypes.NpgsqlDbType.Double).Value = 0.1;//42.06054;
|
|
cmd2.Parameters.Add("@lng1", NpgsqlTypes.NpgsqlDbType.Double).Value = 0.1;//-88.02397;
|
|
cmd2.Prepare();
|
|
cmd2.ExecuteNonQuery();
|
|
|
|
if (!motoTRBO)
|
|
{
|
|
cmd = new NpgsqlCommand($"INSERT INTO emergdi (sc_id,DI) VALUES({id_subscriber},{DI})", connection, transaction);
|
|
cmd.ExecuteNonQuery();
|
|
}
|
|
|
|
|
|
cmd = new NpgsqlCommand("SELECT max(id) FROM subs_gateway ", connection);
|
|
string str_id_subs_gateway = cmd.ExecuteScalar().ToString();
|
|
int id_subs_gateway = 0;
|
|
int.TryParse(str_id_subs_gateway, out id_subs_gateway);
|
|
|
|
cmd = new NpgsqlCommand($"INSERT INTO subs_gateway (id, sc_id, gateway_id,radio_gw_id) VALUES( {id_subs_gateway + 1}, {id_subscriber},{(gw_id < 0 ? "null" : gw_id.ToString())},{(radio_gw_id < 0 ? "null" : radio_gw_id.ToString()) })", connection, transaction);
|
|
cmd.ExecuteNonQuery();
|
|
if (type == (int)DeviceType.SMARTPHONE)
|
|
{
|
|
string emergency = "";
|
|
if (mv.HasEmergency)
|
|
emergency = "1";
|
|
string updateSubscriberAlarm =
|
|
$"INSERT INTO \"subscriber_alarm\" (sc_id , emergency ,landmark ,\"zone\",loneworker ,speed ,email,emsound,empopup,geosound,geopopup,speedsound,speedpopup,telemsound,telempopup) VALUES ({id_subscriber},'{emergency}','','','','','',True,True,True,True,True,True,True,True);";
|
|
|
|
NpgsqlCommand cmd3 = new NpgsqlCommand();
|
|
cmd3.Connection = connection;
|
|
cmd3.Transaction = transaction;
|
|
cmd3.CommandText = "INSERT INTO subscriber_mobile (sc_id, phone_imei, first_name, last_name, company, os, phone_type, sip_pswd, has_gps, has_voice, has_text, has_ticketing, email, login, has_lone_worker, lone_worker_interval, has_man_down, has_emergency)"
|
|
+ " VALUES (@sc_id, @phone_imei, @first_name, @last_name, @company, @os, @phone_type, @sip_pswd, @has_gps, @has_voice, @has_text, @has_ticketing, @email, @login, @has_lone_worker, @lone_worker_interval, @has_man_down, @has_emergency);" + updateSubscriberAlarm;
|
|
cmd3.Parameters.Add("@sc_id", NpgsqlTypes.NpgsqlDbType.Integer).Value = Convert.ToInt32(id_subscriber);
|
|
cmd3.Parameters.Add("@phone_imei", NpgsqlTypes.NpgsqlDbType.Varchar).Value = mv.IMEI;
|
|
cmd3.Parameters.Add("@first_name", NpgsqlTypes.NpgsqlDbType.Varchar).Value = mv.FirstName;
|
|
cmd3.Parameters.Add("@last_name", NpgsqlTypes.NpgsqlDbType.Varchar).Value = mv.LastName;
|
|
cmd3.Parameters.Add("@company", NpgsqlTypes.NpgsqlDbType.Varchar).Value = mv.Company;
|
|
cmd3.Parameters.Add("@os", NpgsqlTypes.NpgsqlDbType.Varchar).Value = mv.OS;
|
|
cmd3.Parameters.Add("@phone_type", NpgsqlTypes.NpgsqlDbType.Varchar).Value = mv.PhoneType;
|
|
cmd3.Parameters.Add("@sip_pswd", NpgsqlTypes.NpgsqlDbType.Varchar).Value = mv.SipPswd;
|
|
cmd3.Parameters.Add("@has_gps", NpgsqlTypes.NpgsqlDbType.Boolean).Value = mv.HasGPS;
|
|
cmd3.Parameters.Add("@has_voice", NpgsqlTypes.NpgsqlDbType.Boolean).Value = mv.HasVoice;
|
|
cmd3.Parameters.Add("@has_text", NpgsqlTypes.NpgsqlDbType.Boolean).Value = mv.HasText;
|
|
cmd3.Parameters.Add("@has_ticketing", NpgsqlTypes.NpgsqlDbType.Boolean).Value = mv.HasTicketing;
|
|
cmd3.Parameters.Add("@email", NpgsqlTypes.NpgsqlDbType.Varchar).Value = mv.Email;
|
|
cmd3.Parameters.Add("@login", NpgsqlTypes.NpgsqlDbType.Varchar).Value = mv.SipLogin;
|
|
cmd3.Parameters.Add("@has_lone_worker", NpgsqlTypes.NpgsqlDbType.Boolean).Value = mv.IsLoneWorker;
|
|
cmd3.Parameters.Add("@lone_worker_interval", NpgsqlTypes.NpgsqlDbType.Integer).Value = mv.LoneWorkerInterval;
|
|
cmd3.Parameters.Add("@has_man_down", NpgsqlTypes.NpgsqlDbType.Boolean).Value = mv.HasManDown;
|
|
cmd3.Parameters.Add("@has_emergency", NpgsqlTypes.NpgsqlDbType.Boolean).Value = mv.HasEmergency;
|
|
cmd3.Prepare();
|
|
cmd3.ExecuteNonQuery();
|
|
}
|
|
|
|
cmd = new NpgsqlCommand($"INSERT INTO sip_manager (sip_id,id,type) VALUES((SELECT max(sip_id)+1 FROM sip_manager),{id_subscriber},{(int)ContactType.UNIT})", connection, transaction);
|
|
cmd.ExecuteNonQuery();
|
|
}
|
|
|
|
// commit all operations above
|
|
transaction.Commit();
|
|
resp = vehResponse.done;
|
|
}
|
|
else
|
|
{
|
|
resp = vehResponse.alreadyInDB;
|
|
}
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
// rollback the trasaction
|
|
transaction?.Rollback();
|
|
Utils.WriteLine(ex.ToString(), ConsoleColor.Red);
|
|
|
|
resp = vehResponse.SQLerror;
|
|
|
|
}
|
|
|
|
return resp;
|
|
|
|
}
|
|
#endregion
|
|
|
|
#region ADD RANGE VEHICLES
|
|
public vehResponse addRangeVehicleSierraToDb(Hashtable hashlist, string _user, string _serialNumber, int DI, bool motoTRBO, int gpsInterval,
|
|
int imgID, int gpsPOOR, int gpsOFF, int gpsMADEOFF, int arsInterval, string email, int gw_id, int rg_id, bool active, int type)
|
|
{
|
|
return addRangeVehicleToDb_Common(hashlist, _user, _serialNumber, DI, motoTRBO, gpsInterval,
|
|
imgID, gpsPOOR, gpsOFF, gpsMADEOFF, arsInterval, email, true,gw_id, rg_id, active, type);
|
|
}
|
|
|
|
public vehResponse addRangeVehicleToDb(Hashtable hashlist , string _user, string _serialNumber, int DI, bool motoTRBO, int gpsInterval,
|
|
int imgID, int gpsPOOR, int gpsOFF, int gpsMADEOFF, int arsInterval, int gw_id, int radio_gw_id, bool active, int type)
|
|
{
|
|
return addRangeVehicleToDb_Common(hashlist, _user, _serialNumber, DI, motoTRBO, gpsInterval,
|
|
imgID, gpsPOOR, gpsOFF, gpsMADEOFF, arsInterval, "", false,gw_id,radio_gw_id, active, type);
|
|
}
|
|
|
|
public vehResponse addRangeVehicleToDb_Common(Hashtable hashlist , string _user, string _serialNumber, int DI, bool motoTRBO, int gpsInterval,
|
|
int imgID, int gpsPOOR, int gpsOFF, int gpsMADEOFF, int arsInterval, string email, bool isSierra, int gw_id, int radio_gw_id, bool active, int type)
|
|
{
|
|
|
|
string SerialNr = "";
|
|
if (!motoTRBO) SerialNr = _serialNumber;
|
|
NpgsqlCommand cmd = null;
|
|
NpgsqlTransaction transaction = null;
|
|
|
|
vehResponse resp;
|
|
try
|
|
{
|
|
using (NpgsqlConnection connection = new NpgsqlConnection())
|
|
{
|
|
|
|
connection.ConnectionString = getConnectionString();
|
|
connection.Open();
|
|
|
|
// open a transaction
|
|
transaction = connection.BeginTransaction();
|
|
|
|
foreach (Int32 imei in hashlist.Keys)
|
|
{
|
|
String _imei = imei.ToString();
|
|
String _name = (String)hashlist[imei];
|
|
string id_subscriber = "", id_vehicle = "", id_user = "";
|
|
cmd = new NpgsqlCommand("INSERT INTO vehicle"
|
|
+ " (lp,name,driver_id,time_route,\"GPS_reporting_interval\",ars_interval,gps_poor,gps_off,made_off,active,type) VALUES('"
|
|
+ SerialNr + "' ,'" + _name + "'," + imgID + ",0," + gpsInterval.ToString() + "," + arsInterval.ToString() + "," + gpsPOOR.ToString() + "," + gpsOFF.ToString() + "," + gpsMADEOFF.ToString() + "," + active.ToString() + "," + type + ")", connection, transaction);
|
|
cmd.ExecuteNonQuery();
|
|
|
|
|
|
|
|
if (isSierra)
|
|
cmd = new NpgsqlCommand("INSERT INTO subscriber (imei, phone, email) VALUES('" + _imei + "','','" + _name + "@" + email + "')", connection, transaction);
|
|
else
|
|
cmd = new NpgsqlCommand("INSERT INTO subscriber (imei) VALUES('" + _imei + "')", connection, transaction);
|
|
cmd.ExecuteNonQuery();
|
|
|
|
//get vehicle id
|
|
cmd = new NpgsqlCommand("SELECT max(id) FROM vehicle ", connection);
|
|
id_vehicle = cmd.ExecuteScalar().ToString();
|
|
|
|
//get subscriber id
|
|
cmd = new NpgsqlCommand("SELECT max(sc_id) FROM subscriber ", connection);
|
|
id_subscriber = cmd.ExecuteScalar().ToString();
|
|
|
|
//get user id
|
|
cmd = new NpgsqlCommand("SELECT userId FROM users Where login ='" + _user + "'", connection);
|
|
id_user = cmd.ExecuteScalar().ToString();
|
|
|
|
if (id_vehicle.Length > 0 && id_subscriber.Length > 0 && id_user.Length > 0)
|
|
{
|
|
cmd = new NpgsqlCommand("INSERT INTO vehicle_user (veh_id, user_id, assigned) VALUES(" + id_vehicle + "," + id_user + ",'2007-01-01')", connection, transaction);
|
|
cmd.ExecuteNonQuery();
|
|
|
|
cmd = new NpgsqlCommand("INSERT INTO subscriber_history (sc_id, veh_id, assigned) VALUES(" + id_subscriber + "," + id_vehicle + ",'2007-01-01')", connection, transaction);
|
|
cmd.ExecuteNonQuery();
|
|
|
|
cmd = new NpgsqlCommand("DELETE FROM lastpos where imei='" + _imei + "'", connection, transaction);
|
|
cmd.ExecuteNonQuery();
|
|
|
|
NpgsqlCommand cmd2 = new NpgsqlCommand();
|
|
cmd2.Connection = connection;
|
|
cmd2.Transaction = transaction;
|
|
cmd2.CommandText = "INSERT INTO lastpos (imei,lat,lng,speed,heading,di,dox,timeGMT) VALUES('" + _imei + "',@lat1,@lng1,0,0,0,0,0)";//42.06054,-88.02397
|
|
cmd2.Parameters.Add("@lat1", NpgsqlTypes.NpgsqlDbType.Double).Value = 0.1;//42.06054;
|
|
cmd2.Parameters.Add("@lng1", NpgsqlTypes.NpgsqlDbType.Double).Value = 0.1;//-88.02397;
|
|
cmd2.Prepare();
|
|
cmd2.ExecuteNonQuery();
|
|
|
|
if (!motoTRBO)
|
|
{
|
|
cmd = new NpgsqlCommand("INSERT INTO emergdi (sc_id, DI) VALUES(" + id_subscriber + "," + DI.ToString() + ")", connection, transaction);
|
|
cmd.ExecuteNonQuery();
|
|
}
|
|
|
|
|
|
cmd = new NpgsqlCommand("SELECT max(id) FROM subs_gateway ", connection);
|
|
string str_id_subs_gateway = cmd.ExecuteScalar().ToString();
|
|
int id_subs_gateway = 0;
|
|
int.TryParse(str_id_subs_gateway, out id_subs_gateway);
|
|
|
|
|
|
cmd = new NpgsqlCommand($"INSERT INTO subs_gateway (id, sc_id, gateway_id,radio_gw_id) VALUES( {id_subs_gateway + 1}, {id_subscriber},{(gw_id < 0 ? "null" : gw_id.ToString())},{(radio_gw_id < 0 ? "null" : radio_gw_id.ToString()) })", connection, transaction);
|
|
cmd.ExecuteNonQuery();
|
|
|
|
if (type == (int)DeviceType.SMARTPHONE)
|
|
{
|
|
NpgsqlCommand cmd3 = new NpgsqlCommand();
|
|
cmd3.Connection = connection;
|
|
cmd3.Transaction = transaction;
|
|
|
|
cmd3.CommandText = "INSERT INTO subscriber_mobile (sc_id, phone_imei, first_name, last_name, company, os, phone_type, sip_pswd, has_gps, has_voice, has_text, has_ticketing, email, login, has_lone_worker, lone_worker_interval, has_man_down, has_emergency)"
|
|
+ " VALUES (@sc_id, @phone_imei, @first_name, @last_name, @company, @os, @phone_type, @sip_pswd, @has_gps, @has_voice, @has_text, @has_ticketing, @email, @login, @has_lone_worker, @lone_worker_interval, @has_man_down, @has_emergency)";
|
|
cmd3.Parameters.Add("@sc_id", NpgsqlTypes.NpgsqlDbType.Integer).Value = Convert.ToInt32(id_subscriber);
|
|
cmd3.Parameters.Add("@phone_imei", NpgsqlTypes.NpgsqlDbType.Varchar).Value = "";
|
|
cmd3.Parameters.Add("@first_name", NpgsqlTypes.NpgsqlDbType.Varchar).Value = "";
|
|
cmd3.Parameters.Add("@last_name", NpgsqlTypes.NpgsqlDbType.Varchar).Value = "";
|
|
cmd3.Parameters.Add("@company", NpgsqlTypes.NpgsqlDbType.Varchar).Value = "";
|
|
cmd3.Parameters.Add("@os", NpgsqlTypes.NpgsqlDbType.Varchar).Value = "";
|
|
cmd3.Parameters.Add("@phone_type", NpgsqlTypes.NpgsqlDbType.Varchar).Value = "";
|
|
cmd3.Parameters.Add("@sip_pswd", NpgsqlTypes.NpgsqlDbType.Varchar).Value = "Password" + imei;
|
|
cmd3.Parameters.Add("@has_gps", NpgsqlTypes.NpgsqlDbType.Boolean).Value = false;
|
|
cmd3.Parameters.Add("@has_voice", NpgsqlTypes.NpgsqlDbType.Boolean).Value = false;
|
|
cmd3.Parameters.Add("@has_text", NpgsqlTypes.NpgsqlDbType.Boolean).Value = false;
|
|
cmd3.Parameters.Add("@has_ticketing", NpgsqlTypes.NpgsqlDbType.Boolean).Value = false;
|
|
cmd3.Parameters.Add("@email", NpgsqlTypes.NpgsqlDbType.Varchar).Value = "";
|
|
cmd3.Parameters.Add("@login", NpgsqlTypes.NpgsqlDbType.Varchar).Value = "Login" + imei;
|
|
cmd3.Parameters.Add("@has_lone_worker", NpgsqlTypes.NpgsqlDbType.Boolean).Value = false;
|
|
cmd3.Parameters.Add("@lone_worker_interval", NpgsqlTypes.NpgsqlDbType.Integer).Value = 1;
|
|
cmd3.Parameters.Add("@has_man_down", NpgsqlTypes.NpgsqlDbType.Boolean).Value = false;
|
|
cmd3.Parameters.Add("@has_emergency", NpgsqlTypes.NpgsqlDbType.Boolean).Value = false;
|
|
cmd3.Prepare();
|
|
cmd3.ExecuteNonQuery();
|
|
}
|
|
cmd = new NpgsqlCommand($"INSERT INTO sip_manager (sip_id,id,type) VALUES((SELECT max(sip_id)+1 FROM sip_manager),{id_subscriber},{(int)ContactType.UNIT})", connection, transaction);
|
|
cmd.ExecuteNonQuery();
|
|
}
|
|
}
|
|
|
|
transaction.Commit();
|
|
resp = vehResponse.done;
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
transaction.Rollback();
|
|
|
|
Utils.WriteLine(ex.ToString(), ConsoleColor.Red);
|
|
resp = vehResponse.SQLerror;
|
|
|
|
}
|
|
|
|
return resp;
|
|
|
|
}
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
public vehResponse deleteVehicle(string _imei)
|
|
{
|
|
|
|
vehResponse resp;
|
|
|
|
|
|
|
|
string scid = "0";
|
|
string vehid = "0";
|
|
string vehname = "0";
|
|
|
|
NpgsqlTransaction transaction = null;
|
|
|
|
try
|
|
{
|
|
//====== get subscriber id ========
|
|
scid = GetInt32Result($"SELECT sc_id FROM subscriber where imei='{_imei}'").ToString();
|
|
//====== get vehicule id ========
|
|
vehid = GetInt32Result($"SELECT veh_id FROM subscriber_history where sc_id={scid}").ToString();
|
|
//====== get vehicule name ========
|
|
vehname = GetStringResult($"SELECT name FROM vehicle WHERE id={vehid}");
|
|
|
|
|
|
using (NpgsqlConnection connection = new NpgsqlConnection())
|
|
{
|
|
|
|
connection.ConnectionString = getConnectionString();
|
|
connection.Open();
|
|
|
|
// open a transaction
|
|
transaction = connection.BeginTransaction();
|
|
|
|
object result = null;
|
|
using (NpgsqlCommand cmd = new NpgsqlCommand($"SELECT count(imei) FROM subscriber where imei='{_imei}'", connection))
|
|
{
|
|
result = cmd.ExecuteScalar();
|
|
}
|
|
|
|
if (result != null && result.ToString() != "0")
|
|
{
|
|
#region old DELETE UNIT
|
|
|
|
|
|
//using (NpgsqlCommand cmd = new NpgsqlCommand($"DELETE FROM lastpos where imei='{_imei}'", connection))
|
|
//{
|
|
// cmd.ExecuteNonQuery();
|
|
//}
|
|
|
|
//using (NpgsqlCommand cmd = new NpgsqlCommand($"DELETE FROM vehicle WHERE id={vehid}", connection, transaction))
|
|
//{
|
|
// cmd.ExecuteNonQuery();
|
|
//}
|
|
|
|
//using (NpgsqlCommand cmd = new NpgsqlCommand($"DELETE FROM subscriber_stun WHERE sc_id={scid}", connection, transaction))
|
|
//{
|
|
// cmd.ExecuteNonQuery();
|
|
//}
|
|
|
|
//using (NpgsqlCommand cmd = new NpgsqlCommand($"DELETE FROM subscriber_alarm WHERE sc_id={scid}", connection, transaction))
|
|
//{
|
|
// cmd.ExecuteNonQuery();
|
|
//}
|
|
|
|
//using (NpgsqlCommand cmd = new NpgsqlCommand($"DELETE FROM vehicle_user WHERE veh_id={vehid}", connection, transaction))
|
|
//{
|
|
// cmd.ExecuteNonQuery();
|
|
//}
|
|
|
|
//using (NpgsqlCommand cmd = new NpgsqlCommand($"DELETE FROM subscriber_history where veh_id={vehid}", connection, transaction))
|
|
//{
|
|
// cmd.ExecuteNonQuery();
|
|
//}
|
|
|
|
|
|
//using (NpgsqlCommand cmd = new NpgsqlCommand($"DELETE FROM telemetry_history WHERE sc_id={scid}", connection, transaction))
|
|
//{
|
|
// cmd.ExecuteNonQuery();
|
|
//}
|
|
|
|
//using (NpgsqlCommand cmd = new NpgsqlCommand($"DELETE FROM telemetry WHERE sc_id={scid}", connection, transaction))
|
|
//{
|
|
// cmd.ExecuteNonQuery();
|
|
//}
|
|
|
|
|
|
//using (NpgsqlCommand cmd = new NpgsqlCommand($"DELETE FROM subscriber WHERE sc_id={scid}", connection, transaction))
|
|
//{
|
|
// cmd.ExecuteNonQuery();
|
|
//}
|
|
|
|
//using (NpgsqlCommand cmd = new NpgsqlCommand($"DELETE FROM emergdi WHERE sc_id={scid}", connection, transaction))
|
|
//{
|
|
// cmd.ExecuteNonQuery();
|
|
//}
|
|
|
|
//using (NpgsqlCommand cmd = new NpgsqlCommand($"DELETE FROM messages WHERE sc_id={scid}", connection transaction))
|
|
//{
|
|
// cmd.ExecuteNonQuery();
|
|
//}
|
|
|
|
//// =============================
|
|
////delete alarm and SMS
|
|
//// =============================
|
|
//using (NpgsqlCommand cmd = new NpgsqlCommand($"DELETE FROM speedalarm WHERE sc_id={scid}", connection, transaction))
|
|
//{
|
|
// cmd.ExecuteNonQuery();
|
|
//}
|
|
|
|
//using (NpgsqlCommand cmd = new NpgsqlCommand($"DELETE FROM emergalarm WHERE sc_id={scid}", connection, transaction))
|
|
//{
|
|
// cmd.ExecuteNonQuery();
|
|
//}
|
|
|
|
//using (NpgsqlCommand cmd = new NpgsqlCommand($"DELETE FROM geozoneinout WHERE sc_id={scid}", connection, transaction))
|
|
//{
|
|
// cmd.ExecuteNonQuery();
|
|
//}
|
|
|
|
//using (NpgsqlCommand cmd = new NpgsqlCommand($"DELETE FROM mototurbo WHERE imei='{_imei}'", connection, transaction))
|
|
//{
|
|
// cmd.ExecuteNonQuery();
|
|
//}
|
|
|
|
//using (NpgsqlCommand cmd = new NpgsqlCommand($"DELETE FROM sms WHERE sc_id_sour={scid}", connection, transaction))
|
|
//{
|
|
// cmd.ExecuteNonQuery();
|
|
//}
|
|
|
|
//using (NpgsqlCommand cmd = new NpgsqlCommand($"DELETE FROM sms WHERE sc_id_dest={scid}", connection, transaction))
|
|
//{
|
|
// cmd.ExecuteNonQuery();
|
|
//}
|
|
|
|
//using (NpgsqlCommand cmd = new NpgsqlCommand($"DELETE FROM vehicle_group WHERE sc_id={scid}", connection, transaction))
|
|
//{
|
|
// cmd.ExecuteNonQuery();
|
|
//}
|
|
|
|
//using (NpgsqlCommand cmd = new NpgsqlCommand($"DELETE FROM subs_gateway WHERE sc_id = {scid}", connection, transaction))
|
|
//{
|
|
// cmd.ExecuteNonQuery();
|
|
//}
|
|
|
|
//using (NpgsqlCommand cmd = new NpgsqlCommand($"DELETE FROM lastpos_ars WHERE imei='{_imei}'", connection, transaction))
|
|
//{
|
|
// cmd.ExecuteNonQuery();
|
|
//}
|
|
|
|
//using (NpgsqlCommand cmd = new NpgsqlCommand($"DELETE FROM subscriber_mobile WHERE sc_id={scid}", connection, transaction))
|
|
//{
|
|
// cmd.ExecuteNonQuery();
|
|
//}
|
|
|
|
//using (NpgsqlCommand cmd = new NpgsqlCommand($"DELETE FROM sip_manager WHERE id={scid} and type ={(int)ContactType.UNIT}", connection, transaction))
|
|
//{
|
|
// cmd.ExecuteNonQuery();
|
|
//}
|
|
#endregion
|
|
// commit transaction
|
|
|
|
using (NpgsqlCommand cmd = new NpgsqlCommand($"UPDATE vehicle SET is_deleted = TRUE , active = FALSE where id= {scid}", connection))
|
|
{
|
|
cmd.ExecuteNonQuery();
|
|
}
|
|
|
|
transaction.Commit();
|
|
resp = vehResponse.done;
|
|
}
|
|
else
|
|
{
|
|
resp = vehResponse.vehNontInDB;
|
|
}
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
// rollback trasaction
|
|
transaction?.Rollback();
|
|
|
|
Utils.WriteLine(ex.ToString(), ConsoleColor.Red);
|
|
resp = vehResponse.SQLerror;
|
|
|
|
}
|
|
|
|
return resp;
|
|
}
|
|
|
|
public vehResponse deleteVehicleList(string _imeiList, string _IdList)
|
|
{
|
|
|
|
vehResponse resp;
|
|
|
|
NpgsqlTransaction transaction = null;
|
|
|
|
try
|
|
{
|
|
using (NpgsqlConnection connection = new NpgsqlConnection())
|
|
{
|
|
|
|
connection.ConnectionString = getConnectionString();
|
|
connection.Open();
|
|
|
|
// open a transaction
|
|
transaction = connection.BeginTransaction();
|
|
|
|
|
|
object result = null;
|
|
using (NpgsqlCommand cmd = new NpgsqlCommand("SELECT count(imei) FROM subscriber where imei in " + _imeiList, connection))
|
|
{
|
|
result = cmd.ExecuteScalar();
|
|
}
|
|
|
|
if (result != null && result.ToString() != "0")
|
|
{
|
|
|
|
#region old DELETE Multipe Units
|
|
//using (NpgsqlCommand cmd = new NpgsqlCommand("DELETE FROM lastpos where imei in " + _imeiList, connection, transaction))
|
|
//{
|
|
// cmd.ExecuteNonQuery();
|
|
//}
|
|
|
|
//using (NpgsqlCommand cmd = new NpgsqlCommand("DELETE FROM vehicle where id in " + _IdList, connection, transaction))
|
|
//{
|
|
// cmd.ExecuteNonQuery();
|
|
//}
|
|
|
|
//using (NpgsqlCommand cmd = new NpgsqlCommand("DELETE FROM subscriber_stun where sc_id in " + _IdList, connection, transaction))
|
|
//{
|
|
// cmd.ExecuteNonQuery();
|
|
//}
|
|
|
|
//using (NpgsqlCommand cmd = new NpgsqlCommand("DELETE FROM subscriber_alarm where sc_id in " + _IdList, connection, transaction))
|
|
//{
|
|
// cmd.ExecuteNonQuery();
|
|
//}
|
|
|
|
//using (NpgsqlCommand cmd = new NpgsqlCommand("DELETE FROM vehicle_user where veh_id in " + _IdList, connection, transaction))
|
|
//{
|
|
// cmd.ExecuteNonQuery();
|
|
//}
|
|
|
|
//using (NpgsqlCommand cmd = new NpgsqlCommand("DELETE FROM subscriber_history where veh_id in " + _IdList, connection, transaction))
|
|
//{
|
|
// cmd.ExecuteNonQuery();
|
|
//}
|
|
|
|
////=============================
|
|
//// telemetry
|
|
////=============================
|
|
//using (NpgsqlCommand cmd = new NpgsqlCommand("DELETE FROM telemetry_history where sc_id in " + _IdList, connection, transaction))
|
|
//{
|
|
// cmd.ExecuteNonQuery();
|
|
//}
|
|
|
|
//using (NpgsqlCommand cmd = new NpgsqlCommand("DELETE FROM telemetry where sc_id in " + _IdList, connection, transaction))
|
|
//{
|
|
// cmd.ExecuteNonQuery();
|
|
//}
|
|
|
|
//using (NpgsqlCommand cmd = new NpgsqlCommand("DELETE FROM subscriber where sc_id in " + _IdList, connection, transaction))
|
|
//{
|
|
// cmd.ExecuteNonQuery();
|
|
//}
|
|
|
|
//using (NpgsqlCommand cmd = new NpgsqlCommand("DELETE FROM emergdi where sc_id in " + _IdList, connection, transaction))
|
|
//{
|
|
// cmd.ExecuteNonQuery();
|
|
//}
|
|
|
|
//using (NpgsqlCommand cmd = new NpgsqlCommand("DELETE FROM messages where sc_id in " + _IdList, connection, transaction))
|
|
//{
|
|
// cmd.ExecuteNonQuery();
|
|
//}
|
|
|
|
////=============================
|
|
////delete alarm and SMS
|
|
////=============================
|
|
|
|
//using (NpgsqlCommand cmd = new NpgsqlCommand("DELETE FROM speedalarm where sc_id in " + _IdList, connection, transaction))
|
|
//{
|
|
// cmd.ExecuteNonQuery();
|
|
//}
|
|
|
|
//using (NpgsqlCommand cmd = new NpgsqlCommand("DELETE FROM emergalarm where sc_id in " + _IdList, connection transaction))
|
|
//{
|
|
// cmd.ExecuteNonQuery();
|
|
//}
|
|
|
|
//using (NpgsqlCommand cmd = new NpgsqlCommand("DELETE FROM geozoneinout where sc_id in " + _IdList, connection, transaction))
|
|
//{
|
|
// cmd.ExecuteNonQuery();
|
|
//}
|
|
|
|
//using (NpgsqlCommand cmd = new NpgsqlCommand("DELETE FROM mototurbo where imei in " + _imeiList, connection, transaction))
|
|
//{
|
|
// cmd.ExecuteNonQuery();
|
|
//}
|
|
|
|
//using (NpgsqlCommand cmd = new NpgsqlCommand("DELETE FROM sms where sc_id_sour in " + _IdList, connection, transaction))
|
|
//{
|
|
// cmd.ExecuteNonQuery();
|
|
//}
|
|
|
|
//using (NpgsqlCommand cmd = new NpgsqlCommand("DELETE FROM sms where sc_id_dest in " + _IdList, connection transaction))
|
|
//{
|
|
// cmd.ExecuteNonQuery();
|
|
//}
|
|
|
|
|
|
//using (NpgsqlCommand cmd = new NpgsqlCommand("DELETE FROM vehicle_group where sc_id in " + _IdList, connection, transaction))
|
|
//{
|
|
// cmd.ExecuteNonQuery();
|
|
//}
|
|
|
|
//using (NpgsqlCommand cmd = new NpgsqlCommand("DELETE FROM subs_gateway where sc_id in " + _IdList, connection, transaction))
|
|
//{
|
|
// cmd.ExecuteNonQuery();
|
|
//}
|
|
|
|
//using (NpgsqlCommand cmd = new NpgsqlCommand("DELETE FROM lastpos_ars where imei in " + _imeiList, connection, transaction))
|
|
//{
|
|
// cmd.ExecuteNonQuery();
|
|
//}
|
|
|
|
//using (NpgsqlCommand cmd = new NpgsqlCommand("DELETE FROM subscriber_mobile where sc_id in" + _IdList + "", connection, transaction))
|
|
//{
|
|
// cmd.ExecuteNonQuery();
|
|
//}
|
|
|
|
//using (NpgsqlCommand cmd = new NpgsqlCommand($"DELETE FROM sip_manager where id in {_IdList} and type ={(int)ContactType.UNIT}", connection, transaction))
|
|
//{
|
|
// cmd.ExecuteNonQuery();
|
|
//}
|
|
#endregion
|
|
|
|
using (NpgsqlCommand cmd = new NpgsqlCommand("UPDATE vehicle SET is_deleted = TRUE, active = FALSE where id in " + _IdList, connection, transaction))
|
|
{
|
|
cmd.ExecuteNonQuery();
|
|
}
|
|
|
|
//=============================
|
|
// commit the transaction
|
|
//=============================
|
|
transaction.Commit();
|
|
|
|
resp = vehResponse.done;
|
|
}
|
|
else
|
|
{
|
|
resp = vehResponse.vehNontInDB;
|
|
}
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
//=============================
|
|
// rolback the trasaction
|
|
//=============================
|
|
transaction?.Rollback();
|
|
|
|
Utils.WriteLine(ex.ToString(), ConsoleColor.Red);
|
|
resp = vehResponse.SQLerror;
|
|
}
|
|
|
|
return resp;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Clean up DB of olds imeis that are hung up!!!!
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
public List<SUID_AND_IMEI> getOrphanImeis()
|
|
{
|
|
List<SUID_AND_IMEI> suidList = new List<SUID_AND_IMEI>();
|
|
|
|
|
|
try
|
|
{
|
|
using (NpgsqlConnection connection = new NpgsqlConnection())
|
|
{
|
|
|
|
connection.ConnectionString = getConnectionString();
|
|
connection.Open();
|
|
|
|
string command = "SELECT sc_id ,imei FROM subscriber where sc_id NOT IN (select sc_id from subscriber_history)";
|
|
using (NpgsqlCommand cmd = new NpgsqlCommand(command, connection))
|
|
{
|
|
using (NpgsqlDataReader reader = cmd.ExecuteReader())
|
|
{
|
|
while (reader.Read())
|
|
{
|
|
SUID_AND_IMEI suidAndImei = new SUID_AND_IMEI(reader.GetInt32(0), reader.GetString(1));
|
|
suidList.Add(suidAndImei);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Console.WriteLine(ex.ToString());
|
|
}
|
|
|
|
return suidList;
|
|
}
|
|
|
|
public vehResponse CleanupSC_ID(int scid)
|
|
{
|
|
|
|
vehResponse resp = vehResponse.SQLerror;
|
|
NpgsqlTransaction transaction = null;
|
|
|
|
using (NpgsqlConnection connection = new NpgsqlConnection())
|
|
{
|
|
|
|
try
|
|
{
|
|
|
|
|
|
connection.ConnectionString = getConnectionString();
|
|
connection.Open();
|
|
// open a transaction
|
|
transaction = connection.BeginTransaction();
|
|
|
|
using (NpgsqlCommand cmd = new NpgsqlCommand("DELETE FROM subscriber_stun where sc_id=" + scid, connection, transaction))
|
|
{
|
|
cmd.ExecuteNonQuery();
|
|
}
|
|
|
|
using (NpgsqlCommand cmd = new NpgsqlCommand("DELETE FROM subscriber_alarm where sc_id=" + scid, connection, transaction))
|
|
{
|
|
cmd.ExecuteNonQuery();
|
|
}
|
|
|
|
using (NpgsqlCommand cmd = new NpgsqlCommand("DELETE FROM emergdi where sc_id=" + scid, connection, transaction))
|
|
{
|
|
cmd.ExecuteNonQuery();
|
|
}
|
|
|
|
using (NpgsqlCommand cmd = new NpgsqlCommand("DELETE FROM vehicle_group where sc_id=" + scid, connection, transaction))
|
|
{
|
|
cmd.ExecuteNonQuery();
|
|
}
|
|
|
|
using (NpgsqlCommand cmd = new NpgsqlCommand("DELETE FROM geozoneinout where sc_id=" + scid, connection, transaction))
|
|
{
|
|
cmd.ExecuteNonQuery();
|
|
}
|
|
|
|
|
|
using (NpgsqlCommand cmd = new NpgsqlCommand("DELETE FROM subs_gateway where sc_id=" + scid, connection, transaction))
|
|
{
|
|
cmd.ExecuteNonQuery();
|
|
}
|
|
|
|
using (NpgsqlCommand cmd = new NpgsqlCommand("DELETE FROM subscriber where sc_id=" + scid, connection, transaction))
|
|
{
|
|
cmd.ExecuteNonQuery();
|
|
}
|
|
|
|
transaction.Commit();
|
|
resp = vehResponse.done;
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
try
|
|
{
|
|
transaction?.Rollback();
|
|
}
|
|
catch (Exception ex2)
|
|
{
|
|
Utils.WriteLine("COuld not roll back because: " + ex2.ToString());
|
|
}
|
|
|
|
Utils.WriteLine(ex.ToString(), ConsoleColor.Red);
|
|
resp = vehResponse.SQLerror;
|
|
}
|
|
}
|
|
|
|
|
|
return resp;
|
|
}
|
|
|
|
#region EDIT VEHICLE
|
|
|
|
public vehResponse editVehicleSierra(string _id, string _name, int _DI, string _lp, int gpsInterval, int imgID,
|
|
int gpsPOOR, int gpsOFF, int madeOFF, int arsInterval, string email, string phone, int gateway_id, int radio_gw_id, bool active, int type, MobileVehicles mv)
|
|
{
|
|
return editVehicle_Common(_id, _name, _DI, _lp, gpsInterval, imgID, gpsPOOR, gpsOFF, madeOFF, arsInterval, email, phone, true, gateway_id, radio_gw_id, active, type, mv);
|
|
}
|
|
|
|
public vehResponse editVehicle(string _id, string _name, int _DI, string _lp, int gpsInterval, int imgID,
|
|
int gpsPOOR, int gpsOFF, int madeOFF, int gateway_id, int radio_gw_id, bool active, int type, MobileVehicles mv,int arsInterval = 0)
|
|
{
|
|
return editVehicle_Common(_id, _name, _DI, _lp, gpsInterval, imgID, gpsPOOR, gpsOFF, madeOFF, arsInterval, "", "", false, gateway_id, radio_gw_id, active, type, mv);
|
|
}
|
|
|
|
public vehResponse editVehicle_Common(string _id, string _name, int _DI, string _lp, int gpsInterval, int imgID,
|
|
int gpsPOOR, int gpsOFF, int madeOFF, int arsInterval, string email, string phone, bool isSierra, int gateway_id, int radio_gw_id, bool active, int type, MobileVehicles mv)
|
|
{
|
|
|
|
vehResponse resp;
|
|
NpgsqlCommand cmd;
|
|
object updateResponse = null;
|
|
bool isDeleted = isUnitDeleted(_id);
|
|
|
|
NpgsqlTransaction transaction = null;
|
|
|
|
try
|
|
{
|
|
|
|
using (NpgsqlConnection connection = new NpgsqlConnection())
|
|
{
|
|
|
|
connection.ConnectionString = getConnectionString();
|
|
connection.Open();
|
|
//open trasaction
|
|
transaction = connection.BeginTransaction();
|
|
|
|
|
|
cmd = new NpgsqlCommand("select count(id) from vehicle where id=\'" + _id + "\'", connection);
|
|
object temp = cmd.ExecuteScalar();
|
|
|
|
cmd = new NpgsqlCommand("select sc_id from subscriber_history where veh_id=\'" + _id + "\'", connection);
|
|
object tmp_sc_id = cmd.ExecuteScalar();
|
|
|
|
if (Convert.ToInt32(temp) > 0)
|
|
{
|
|
if (isSierra)
|
|
{
|
|
cmd = new NpgsqlCommand($"UPDATE subscriber SET phone='{phone}', email='{email}' WHERE sc_id = {_id} ", connection, transaction);
|
|
cmd.ExecuteNonQuery();
|
|
}
|
|
|
|
if (isDeleted && active)
|
|
{
|
|
cmd = new NpgsqlCommand("UPDATE vehicle SET name='" + _name + "',lp='" + _lp +
|
|
"',\"GPS_reporting_interval\"=" + gpsInterval.ToString() +
|
|
",driver_id=" + imgID + ",ars_interval=" + arsInterval + ",gps_poor=" + gpsPOOR + ",gps_off=" + gpsOFF + ",made_off=" + madeOFF + ",active=" + active.ToString() + ",is_deleted= FALSE" + " where id=" + _id, connection, transaction);
|
|
cmd.ExecuteNonQuery();
|
|
}
|
|
else
|
|
{
|
|
cmd = new NpgsqlCommand("UPDATE vehicle SET name='" + _name + "',lp='" + _lp +
|
|
"',\"GPS_reporting_interval\"=" + gpsInterval.ToString() +
|
|
",driver_id=" + imgID + ",ars_interval=" + arsInterval + ",gps_poor=" + gpsPOOR + ",gps_off=" + gpsOFF + ",made_off=" + madeOFF + ",active=" + active.ToString() + " where id=" + _id, connection, transaction);
|
|
cmd.ExecuteNonQuery();
|
|
}
|
|
|
|
cmd = new NpgsqlCommand("update emergdi SET DI=" + _DI.ToString() + " where sc_id=" + Convert.ToInt32(tmp_sc_id), connection, transaction);
|
|
if (cmd.ExecuteNonQuery() == 0)
|
|
{
|
|
cmd = new NpgsqlCommand("insert into emergdi (sc_id,DI) VALUES(" + Convert.ToInt32(tmp_sc_id) + "," + _DI.ToString() + ")", connection, transaction);
|
|
cmd.ExecuteNonQuery();
|
|
|
|
}
|
|
cmd = new NpgsqlCommand($"UPDATE subs_gateway SET gateway_id = {(gateway_id < 0 ? "null" : gateway_id.ToString())}, radio_gw_id= {(radio_gw_id < 0 ? "null" : radio_gw_id.ToString()) } where sc_id =" + _id, connection, transaction);
|
|
if (cmd.ExecuteNonQuery() == 0)
|
|
{
|
|
cmd = new NpgsqlCommand("SELECT max(id) FROM subs_gateway ", connection);
|
|
string str_id_subs_gateway = cmd.ExecuteScalar().ToString();
|
|
int id_subs_gateway = 0;
|
|
int.TryParse(str_id_subs_gateway, out id_subs_gateway);
|
|
|
|
cmd = new NpgsqlCommand($"INSERT INTO subs_gateway (id, sc_id, gateway_id, radio_gw_id) VALUES( {id_subs_gateway + 1}, {tmp_sc_id}, {(gateway_id < 0 ? "null" : gateway_id.ToString())}, {(radio_gw_id < 0 ? "null" : radio_gw_id.ToString()) })", connection, transaction);
|
|
cmd.ExecuteNonQuery();
|
|
|
|
}
|
|
if (type == (int)DeviceType.SMARTPHONE)
|
|
{
|
|
if (mv.CanUpdate == true)
|
|
{
|
|
string emergency = "";
|
|
if (mv.HasEmergency)
|
|
emergency = "1";
|
|
string updateSubscriberAlarm = $"update subscriber_alarm set emergency = '{emergency}' where sc_id = {_id}";
|
|
NpgsqlCommand cmd3 = new NpgsqlCommand();
|
|
cmd3.Transaction = transaction;
|
|
cmd3.Connection = connection;
|
|
cmd3.CommandText = "UPDATE subscriber_mobile SET phone_imei=@phone_imei, first_name=@first_name, last_name=@last_name, company=@company, os=@os,"
|
|
+ " phone_type=@phone_type, sip_pswd=@sip_pswd, has_gps=@has_gps,has_voice =@has_voice, has_text=@has_text, has_ticketing=@has_ticketing,"
|
|
+ " email = @email, login = @login, has_lone_worker = @has_lone_worker, lone_worker_interval = @lone_worker_interval, has_man_down = @has_man_down, has_emergency = @has_emergency "
|
|
+ " WHERE sc_id=@sc_id "
|
|
+ " RETURNING sc_id; " + updateSubscriberAlarm;
|
|
cmd3.Parameters.Add("@sc_id", NpgsqlTypes.NpgsqlDbType.Integer).Value = Convert.ToInt32(_id);
|
|
cmd3.Parameters.Add("@phone_imei", NpgsqlTypes.NpgsqlDbType.Varchar).Value = mv.IMEI;
|
|
cmd3.Parameters.Add("@first_name", NpgsqlTypes.NpgsqlDbType.Varchar).Value = mv.FirstName;
|
|
cmd3.Parameters.Add("@last_name", NpgsqlTypes.NpgsqlDbType.Varchar).Value = mv.LastName;
|
|
cmd3.Parameters.Add("@company", NpgsqlTypes.NpgsqlDbType.Varchar).Value = mv.Company;
|
|
cmd3.Parameters.Add("@os", NpgsqlTypes.NpgsqlDbType.Varchar).Value = mv.OS;
|
|
cmd3.Parameters.Add("@phone_type", NpgsqlTypes.NpgsqlDbType.Varchar).Value = mv.PhoneType;
|
|
cmd3.Parameters.Add("@sip_pswd", NpgsqlTypes.NpgsqlDbType.Varchar).Value = mv.SipPswd;
|
|
cmd3.Parameters.Add("@has_gps", NpgsqlTypes.NpgsqlDbType.Boolean).Value = mv.HasGPS;
|
|
cmd3.Parameters.Add("@has_voice", NpgsqlTypes.NpgsqlDbType.Boolean).Value = mv.HasVoice;
|
|
cmd3.Parameters.Add("@has_text", NpgsqlTypes.NpgsqlDbType.Boolean).Value = mv.HasText;
|
|
cmd3.Parameters.Add("@has_ticketing", NpgsqlTypes.NpgsqlDbType.Boolean).Value = mv.HasTicketing;
|
|
cmd3.Parameters.Add("@email", NpgsqlTypes.NpgsqlDbType.Varchar).Value = mv.Email;
|
|
cmd3.Parameters.Add("@login", NpgsqlTypes.NpgsqlDbType.Varchar).Value = mv.SipLogin;
|
|
cmd3.Parameters.Add("@has_lone_worker", NpgsqlTypes.NpgsqlDbType.Boolean).Value = mv.IsLoneWorker;
|
|
cmd3.Parameters.Add("@lone_worker_interval", NpgsqlTypes.NpgsqlDbType.Integer).Value = mv.LoneWorkerInterval;
|
|
cmd3.Parameters.Add("@has_man_down", NpgsqlTypes.NpgsqlDbType.Boolean).Value = mv.HasManDown;
|
|
cmd3.Parameters.Add("@has_emergency", NpgsqlTypes.NpgsqlDbType.Boolean).Value = mv.HasEmergency;
|
|
cmd3.Prepare();
|
|
updateResponse = cmd3.ExecuteScalar();
|
|
|
|
if (updateResponse == null)
|
|
{
|
|
if (mv.HasEmergency)
|
|
emergency = "1";
|
|
updateSubscriberAlarm =
|
|
$"INSERT INTO \"subscriber_alarm\" (sc_id , emergency ,landmark ,\"zone\",loneworker ,speed ,email,emsound,empopup,geosound,geopopup,speedsound,speedpopup,telemsound,telempopup) VALUES ({_id},'{emergency}','','','','','',True,True,True,True,True,True,True,True);";
|
|
cmd3 = new NpgsqlCommand();
|
|
cmd3.Connection = connection;
|
|
cmd3.Transaction = transaction;
|
|
cmd3.CommandText = "INSERT INTO subscriber_mobile (sc_id, phone_imei, first_name, last_name, company, os, phone_type, sip_pswd, has_gps, has_voice, has_text, has_ticketing, email, login, has_lone_worker, lone_worker_interval, has_man_down, has_emergency)"
|
|
+ " VALUES (@sc_id, @phone_imei, @first_name, @last_name, @company, @os, @phone_type, @sip_pswd, @has_gps, @has_voice, @has_text, @has_ticketing, @email, @login, @has_lone_worker, @lone_worker_interval, @has_man_down, has_emergency); " + updateSubscriberAlarm;
|
|
cmd3.Parameters.Add("@sc_id", NpgsqlTypes.NpgsqlDbType.Integer).Value = Convert.ToInt32(_id);
|
|
cmd3.Parameters.Add("@phone_imei", NpgsqlTypes.NpgsqlDbType.Varchar).Value = mv.IMEI;
|
|
cmd3.Parameters.Add("@first_name", NpgsqlTypes.NpgsqlDbType.Varchar).Value = mv.FirstName;
|
|
cmd3.Parameters.Add("@last_name", NpgsqlTypes.NpgsqlDbType.Varchar).Value = mv.LastName;
|
|
cmd3.Parameters.Add("@company", NpgsqlTypes.NpgsqlDbType.Varchar).Value = mv.Company;
|
|
cmd3.Parameters.Add("@os", NpgsqlTypes.NpgsqlDbType.Varchar).Value = mv.OS;
|
|
cmd3.Parameters.Add("@phone_type", NpgsqlTypes.NpgsqlDbType.Varchar).Value = mv.PhoneType;
|
|
cmd3.Parameters.Add("@sip_pswd", NpgsqlTypes.NpgsqlDbType.Varchar).Value = mv.SipPswd;
|
|
cmd3.Parameters.Add("@has_gps", NpgsqlTypes.NpgsqlDbType.Boolean).Value = mv.HasGPS;
|
|
cmd3.Parameters.Add("@has_voice", NpgsqlTypes.NpgsqlDbType.Boolean).Value = mv.HasVoice;
|
|
cmd3.Parameters.Add("@has_text", NpgsqlTypes.NpgsqlDbType.Boolean).Value = mv.HasText;
|
|
cmd3.Parameters.Add("@has_ticketing", NpgsqlTypes.NpgsqlDbType.Boolean).Value = mv.HasTicketing;
|
|
cmd3.Parameters.Add("@email", NpgsqlTypes.NpgsqlDbType.Varchar).Value = mv.Email;
|
|
cmd3.Parameters.Add("@login", NpgsqlTypes.NpgsqlDbType.Varchar).Value = mv.SipLogin;
|
|
cmd3.Parameters.Add("@has_lone_worker", NpgsqlTypes.NpgsqlDbType.Boolean).Value = mv.IsLoneWorker;
|
|
cmd3.Parameters.Add("@lone_worker_interval", NpgsqlTypes.NpgsqlDbType.Integer).Value = mv.LoneWorkerInterval;
|
|
cmd3.Parameters.Add("@has_man_down", NpgsqlTypes.NpgsqlDbType.Boolean).Value = mv.HasManDown;
|
|
cmd3.Parameters.Add("@has_emergency", NpgsqlTypes.NpgsqlDbType.Boolean).Value = mv.HasEmergency;
|
|
cmd3.Prepare();
|
|
cmd3.ExecuteNonQuery();
|
|
//}
|
|
}
|
|
}
|
|
}
|
|
|
|
transaction.Commit();
|
|
resp = vehResponse.done;
|
|
}
|
|
else
|
|
{
|
|
resp = vehResponse.vehNontInDB;
|
|
}
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
transaction?.Rollback();
|
|
|
|
Utils.WriteLine(ex.ToString(), ConsoleColor.Red);
|
|
resp = vehResponse.SQLerror;
|
|
}
|
|
|
|
return resp;
|
|
}
|
|
|
|
#endregion
|
|
|
|
public vehResponse editGroupVehicle(string idlist, int _DI, string _lp, bool editGpsInterval, int gpsInterval, bool editImage, int imgID,
|
|
bool editgpsPOOR, int gpsPOOR, bool editgpsOFF, int gpsOFF, bool editmadeOFF, int madeOFF, bool editGW, RadioGateway rg, bool editActive, bool active, MobileVehicles mob, int arsInterval = 0)
|
|
{
|
|
|
|
vehResponse resp;
|
|
NpgsqlCommand cmd;
|
|
bool isDeleted;
|
|
string[] idListArray = idlist.Replace("(", "").Replace(")", "").Split(',');
|
|
isDeleted = isUnitDeleted(idListArray[0]);
|
|
|
|
NpgsqlTransaction transaction = null;
|
|
|
|
try
|
|
{
|
|
using (NpgsqlConnection connection = new NpgsqlConnection())
|
|
{
|
|
|
|
connection.ConnectionString = getConnectionString();
|
|
connection.Open();
|
|
|
|
// open a transaction
|
|
transaction = connection.BeginTransaction();
|
|
|
|
string commandText = "UPDATE vehicle SET lp='" + _lp + "'";
|
|
if (editGpsInterval) commandText += ",\"GPS_reporting_interval\"=" + gpsInterval.ToString();
|
|
if (editgpsPOOR) commandText += ",gps_poor=" + gpsPOOR;
|
|
if (editgpsOFF) commandText += ",gps_off=" + gpsOFF;
|
|
if (editmadeOFF) commandText += ",made_off=" + madeOFF;
|
|
if (editImage) commandText += ",driver_id=" + imgID.ToString();
|
|
if (isDeleted && active)
|
|
{
|
|
if (editActive) commandText += ",active=" + active.ToString() + ",is_deleted=FALSE";
|
|
}
|
|
else
|
|
{
|
|
if (editActive) commandText += ",active=" + active.ToString();
|
|
}
|
|
|
|
commandText += ",ars_interval=" + arsInterval;
|
|
commandText += " where id in " + idlist;
|
|
|
|
cmd = new NpgsqlCommand("select count(id) from vehicle where id in " + idlist, connection);
|
|
object temp = cmd.ExecuteScalar();
|
|
|
|
Utils.WriteLine("editGroupVehicle: " + commandText);
|
|
|
|
if (Convert.ToInt32(temp) > 0)
|
|
{
|
|
cmd = new NpgsqlCommand(commandText, connection, transaction);
|
|
cmd.ExecuteNonQuery();
|
|
|
|
cmd = new NpgsqlCommand("update emergdi SET DI=" + _DI.ToString() + " where sc_id in " + idlist, connection, transaction);
|
|
if (cmd.ExecuteNonQuery() == 0)
|
|
{
|
|
foreach (string tmp_sc_id in idListArray)
|
|
{
|
|
cmd = new NpgsqlCommand("insert into emergdi (sc_id,DI) VALUES(" + Convert.ToInt32(tmp_sc_id) + "," + _DI.ToString() + ")", connection);
|
|
cmd.ExecuteNonQuery();
|
|
}
|
|
}
|
|
|
|
if (editGW)
|
|
{
|
|
foreach (var id in idListArray)
|
|
{
|
|
cmd = new NpgsqlCommand($"update subs_gateway SET gateway_id= {(rg.Gw_id < 0 ? "null" : rg.Gw_id.ToString())}, radio_gw_id= {(rg.Id < 0 ? "null" : rg.Id.ToString()) } where sc_id = {id}", connection, transaction);
|
|
if (cmd.ExecuteNonQuery() == 0)
|
|
{
|
|
cmd = new NpgsqlCommand("SELECT max(id) FROM subs_gateway ", connection);
|
|
string str_id_subs_gateway = cmd.ExecuteScalar().ToString();
|
|
int id_subs_gateway = 0;
|
|
int.TryParse(str_id_subs_gateway, out id_subs_gateway);
|
|
|
|
cmd = new NpgsqlCommand($"insert into subs_gateway (id, sc_id,gateway_id,radio_gw_id) VALUES({id_subs_gateway + 1 }, {id},{(rg.Gw_id < 0 ? "null" : rg.Gw_id.ToString())} , {(rg.Id < 0 ? "null" : rg.Id.ToString()) } )", connection, transaction);
|
|
cmd.ExecuteNonQuery();
|
|
|
|
}
|
|
}
|
|
}
|
|
if (mob.CanUpdate)
|
|
{
|
|
string clause = "";
|
|
if (mob.ToggleStateDictionary.ContainsKey("HasGPS"))
|
|
{
|
|
if (mob.ToggleStateDictionary["HasGPS"] != true)
|
|
{
|
|
if (clause != "")
|
|
clause += ",";
|
|
clause += $"has_gps={mob.HasGPS}";
|
|
}
|
|
}
|
|
if (mob.ToggleStateDictionary.ContainsKey("HasVoice"))
|
|
{
|
|
if (mob.ToggleStateDictionary["HasVoice"] != true)
|
|
{
|
|
if (clause != "")
|
|
clause += ",";
|
|
clause += $"has_voice={mob.HasVoice}";
|
|
}
|
|
}
|
|
if (mob.ToggleStateDictionary.ContainsKey("HasText"))
|
|
{
|
|
if (mob.ToggleStateDictionary["HasText"] != true)
|
|
{
|
|
if (clause != "")
|
|
clause += ",";
|
|
clause += $"has_text={mob.HasText}";
|
|
}
|
|
}
|
|
|
|
if (mob.ToggleStateDictionary.ContainsKey("HasTicketing"))
|
|
{
|
|
if (mob.ToggleStateDictionary["HasTicketing"] != true)
|
|
{
|
|
if (clause != "")
|
|
clause += ",";
|
|
clause += $"has_ticketing={mob.HasTicketing}";
|
|
}
|
|
}
|
|
if (mob.ToggleStateDictionary.ContainsKey("IsLoneWorker"))
|
|
{
|
|
if (mob.ToggleStateDictionary["IsLoneWorker"] != true)
|
|
{
|
|
if (clause != "")
|
|
clause += ",";
|
|
clause += $"has_lone_worker={mob.IsLoneWorker}, lone_worker_interval={mob.LoneWorkerInterval}";
|
|
}
|
|
}
|
|
if (mob.ToggleStateDictionary.ContainsKey("HasManDown"))
|
|
{
|
|
if (mob.ToggleStateDictionary["HasManDown"] != true)
|
|
{
|
|
if (clause != "")
|
|
clause += ",";
|
|
clause += $"has_man_down = {mob.HasManDown}";
|
|
}
|
|
}
|
|
if (mob.ToggleStateDictionary.ContainsKey("HasEmergency"))
|
|
{
|
|
if (mob.ToggleStateDictionary["HasEmergency"] != true)
|
|
{
|
|
if (clause != "")
|
|
clause += ",";
|
|
clause += $"has_emergency = {mob.HasEmergency}";
|
|
}
|
|
}
|
|
if (clause != "")
|
|
{
|
|
string emergency = "";
|
|
if (mob.HasEmergency)
|
|
emergency = "1";
|
|
string updateSubscriberAlarm = $"update subscriber_alarm set emergency = '{emergency}' where sc_id in {idlist}";
|
|
string command = $"update subscriber_mobile SET {clause} where sc_id in {idlist};" + updateSubscriberAlarm;
|
|
cmd = new NpgsqlCommand(command, connection, transaction);
|
|
cmd.ExecuteNonQuery();
|
|
}
|
|
}
|
|
|
|
transaction.Commit();
|
|
|
|
resp = vehResponse.done;
|
|
}
|
|
else
|
|
{
|
|
resp = vehResponse.vehNontInDB;
|
|
}
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Utils.WriteLine("editGroupVehicle Commnad: " + ex.ToString());
|
|
transaction?.Rollback();
|
|
|
|
Utils.WriteLine(ex.ToString(), ConsoleColor.Red);
|
|
resp = vehResponse.SQLerror;
|
|
}
|
|
|
|
return resp;
|
|
}
|
|
|
|
public int getSCID(string imei)
|
|
{
|
|
string command = $"SELECT sc_id FROM subscriber WHERE imei='{imei}'";
|
|
return GetInt32Result(command);
|
|
}
|
|
|
|
public ArrayList getListofSCID(Hashtable hash)
|
|
{
|
|
|
|
ArrayList toreturn = new ArrayList();
|
|
string buffer = string.Join(",", hash.Keys);
|
|
|
|
|
|
try
|
|
{
|
|
using (NpgsqlConnection connection = new NpgsqlConnection())
|
|
{
|
|
|
|
connection.ConnectionString = getConnectionString();
|
|
connection.Open();
|
|
|
|
string command = $"SELECT sc_id FROM subscriber WHERE imei in ( {buffer} )";
|
|
using (NpgsqlCommand cmd = new NpgsqlCommand(command, connection))
|
|
{
|
|
|
|
using (NpgsqlDataReader reader = cmd.ExecuteReader())
|
|
{
|
|
while (reader.Read())
|
|
{
|
|
toreturn.Add(reader.GetInt32(0));
|
|
}
|
|
|
|
}
|
|
}
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
|
|
Utils.WriteLine("getListofSCID: " + ex.ToString(), ConsoleColor.Yellow);
|
|
}
|
|
|
|
return toreturn;
|
|
}
|
|
|
|
public string getIMEI(int sc_id)
|
|
{
|
|
|
|
string command = $"SELECT imei FROM subscriber WHERE sc_id={sc_id}";
|
|
return GetStringResult(command);
|
|
}
|
|
|
|
public bool isUniqueLogin(string login, int sc_id)
|
|
{
|
|
|
|
bool ret = true;
|
|
string cmdsql = "";
|
|
|
|
try
|
|
{
|
|
using (NpgsqlConnection connection = new NpgsqlConnection())
|
|
{
|
|
|
|
connection.ConnectionString = getConnectionString();
|
|
connection.Open();
|
|
|
|
cmdsql = $"SELECT count(sc_id) FROM subscriber_mobile WHERE login = '{login}'";
|
|
if (sc_id != -1)
|
|
cmdsql = $"{cmdsql} AND sc_id <> {sc_id}";
|
|
|
|
|
|
using (NpgsqlCommand cmd = new NpgsqlCommand(cmdsql, connection))
|
|
{
|
|
object veh_id = cmd.ExecuteScalar();
|
|
if (veh_id.ToString() != "0")
|
|
{
|
|
ret = false;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Utils.WriteLine("isUniqueLogin: " + ex.ToString(), ConsoleColor.Yellow);
|
|
}
|
|
|
|
return ret;
|
|
}
|
|
|
|
public MobileVehicles getMobileVehicle(int sc_id)
|
|
{
|
|
MobileVehicles result = new MobileVehicles();
|
|
|
|
try
|
|
{
|
|
using (NpgsqlConnection connection = new NpgsqlConnection())
|
|
{
|
|
|
|
connection.ConnectionString = getConnectionString();
|
|
connection.Open();
|
|
|
|
|
|
string command = $"SELECT sc_id, phone_imei , first_name, last_name, company, os, phone_type,"
|
|
+ " sip_pswd, has_gps, has_voice, has_text, has_ticketing, email, login, has_lone_worker, "
|
|
+ " lone_worker_interval, has_man_down, has_emergency"
|
|
+ " FROM subscriber_mobile"
|
|
+ $" WHERE sc_id= {sc_id}";
|
|
|
|
using (NpgsqlCommand cmd = new NpgsqlCommand(command, connection))
|
|
{
|
|
using (NpgsqlDataReader Reader = cmd.ExecuteReader())
|
|
{
|
|
while (Reader.Read())
|
|
{
|
|
result = new MobileVehicles()
|
|
{
|
|
IMEI = Reader.IsDBNull(Reader.GetOrdinal("phone_imei")) ? "" : Reader.GetString(Reader.GetOrdinal("phone_imei")),
|
|
FirstName = Reader.IsDBNull(Reader.GetOrdinal("first_name")) ? "" : Reader.GetString(Reader.GetOrdinal("first_name")),
|
|
LastName = Reader.IsDBNull(Reader.GetOrdinal("last_name")) ? "" : Reader.GetString(Reader.GetOrdinal("last_name")),
|
|
Company = Reader.IsDBNull(Reader.GetOrdinal("company")) ? "" : Reader.GetString(Reader.GetOrdinal("company")),
|
|
OS = Reader.IsDBNull(Reader.GetOrdinal("os")) ? "" : Reader.GetString(Reader.GetOrdinal("os")),
|
|
PhoneType = Reader.IsDBNull(Reader.GetOrdinal("phone_type")) ? "" : Reader.GetString(Reader.GetOrdinal("phone_type")),
|
|
SipPswd = Reader.IsDBNull(Reader.GetOrdinal("sip_pswd")) ? "" : Reader.GetString(Reader.GetOrdinal("sip_pswd")),
|
|
HasGPS = Reader.IsDBNull(Reader.GetOrdinal("has_gps")) ? false : Reader.GetBoolean(Reader.GetOrdinal("has_gps")),
|
|
HasVoice = Reader.IsDBNull(Reader.GetOrdinal("has_voice")) ? false : Reader.GetBoolean(Reader.GetOrdinal("has_voice")),
|
|
HasText = Reader.IsDBNull(Reader.GetOrdinal("has_text")) ? false : Reader.GetBoolean(Reader.GetOrdinal("has_text")),
|
|
HasTicketing = Reader.IsDBNull(Reader.GetOrdinal("has_ticketing")) ? false : Reader.GetBoolean(Reader.GetOrdinal("has_ticketing")),
|
|
Email = Reader.IsDBNull(Reader.GetOrdinal("email")) ? "" : Reader.GetString(Reader.GetOrdinal("email")),
|
|
SipLogin = Reader.IsDBNull(Reader.GetOrdinal("login")) ? "" : Reader.GetString(Reader.GetOrdinal("login")),
|
|
IsLoneWorker = Reader.IsDBNull(Reader.GetOrdinal("has_lone_worker")) ? false : Reader.GetBoolean(Reader.GetOrdinal("has_lone_worker")),
|
|
LoneWorkerInterval = Reader.IsDBNull(Reader.GetOrdinal("lone_worker_interval")) ? 0 : Reader.GetInt32(Reader.GetOrdinal("lone_worker_interval")),
|
|
HasManDown = Reader.IsDBNull(Reader.GetOrdinal("has_man_down")) ? false : Reader.GetBoolean(Reader.GetOrdinal("has_man_down")),
|
|
HasEmergency = Reader.IsDBNull(Reader.GetOrdinal("has_emergency")) ? false : Reader.GetBoolean(Reader.GetOrdinal("has_emergency"))
|
|
};
|
|
|
|
}
|
|
|
|
}
|
|
}
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Utils.WriteLine($"getMobileVehicle: {ex.ToString()}", ConsoleColor.Yellow);
|
|
}
|
|
|
|
|
|
return result;
|
|
}
|
|
|
|
public int getReportingInterval(string imei)
|
|
{
|
|
|
|
string command = "SELECT vehicle.\"GPS_reporting_interval\" FROM vehicle,subscriber,subscriber_history "
|
|
+ $" WHERE subscriber.imei = '{imei}'"
|
|
+ " AND subscriber.sc_id = subscriber_history.sc_id"
|
|
+ " AND subscriber_history.veh_id = vehicle.id ";
|
|
return GetInt32Result(command);
|
|
}
|
|
|
|
|
|
public List<TallysmanLostLog> getGetTallysmanLogs(int interval)
|
|
{
|
|
List<TallysmanLostLog> toRet = new List<TallysmanLostLog>();
|
|
|
|
|
|
|
|
int backwards = DateTime.UtcNow.GetSecondsFromDT() - interval * 60;
|
|
string command = "SELECT s.imei::int, tallysman_log_id FROM messages m " +
|
|
"JOIN subscriber s ON s.sc_id = m.sc_id " +
|
|
"JOIN lastpos l on l.imei = s.imei " +
|
|
"WHERE tallysman_log_id is not null " +
|
|
$"AND m.timegmt >= {backwards} " +
|
|
$"AND l.status not in ({(int)Status_for_tab.OFF},{(int)Status_for_tab.DISABLE},{(int)Status_for_tab.MADEOFF})";
|
|
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())
|
|
{
|
|
toRet.Add(new TallysmanLostLog()
|
|
{
|
|
RadioID = reader.GetInt32(0),
|
|
LogId = reader.GetInt32(1)
|
|
});
|
|
}
|
|
|
|
}
|
|
}
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Utils.WriteLine($"getGetTallysmanLogs: {ex.ToString()}", ConsoleColor.Red);
|
|
}
|
|
|
|
|
|
return toRet;
|
|
}
|
|
|
|
|
|
public uint getRRSInterval(string imei)
|
|
{
|
|
|
|
string command = "SELECT vehicle.ars_interval FROM vehicle,subscriber,subscriber_history "
|
|
+ "WHERE subscriber.imei = '" + imei + "'"
|
|
+ " AND subscriber.sc_id = subscriber_history.sc_id"
|
|
+ " AND subscriber_history.veh_id = vehicle.id ";
|
|
int result = GetInt32Result(command);
|
|
return (uint)(result <= 0 ? 0 : result);
|
|
}
|
|
|
|
|
|
|
|
public List<Vehicles> getAllSierraVehicles(out Boolean hasOnlyIntegerValues, string arg, bool getDeleted)
|
|
{
|
|
string whereClause = "";
|
|
if (arg == "GSM Only")
|
|
{
|
|
whereClause = "where length(imei) > 7";
|
|
whereClause += getDeleted ? " AND is_deleted = TRUE " : " AND is_deleted = FALSE ";
|
|
}
|
|
|
|
if (arg == "TETRA Based")
|
|
{
|
|
whereClause = "where length(imei) <= 7 AND is_deleted = FALSE ";
|
|
whereClause += getDeleted ? " AND is_deleted = TRUE " : " AND is_deleted = FALSE ";
|
|
}
|
|
|
|
string command = "SELECT veh.id,sub.imei,veh.lp,veh.name,em.di,veh.\"GPS_reporting_interval\",grp.name,veh.driver_id,veh.is_stolen,veh.ars_interval,veh.gps_poor,veh.gps_off,veh.made_off, "
|
|
+ " sub.phone, sub.email, "
|
|
+ " COALESCE(sgw.gateway_id, -1) gateway_id, COALESCE(sgw.radio_gw_id, -1) radio_gw_id,"
|
|
+ " veh.type, veh.active"
|
|
+ " FROM vehicle as veh"
|
|
|
|
+ " INNER JOIN subscriber_history as sh ON (veh.id = sh.veh_id) INNER JOIN subscriber as sub"
|
|
+ " on (sh.sc_id = sub.sc_id) LEFT JOIN emergdi as em on (sub.sc_id = em.sc_id)"
|
|
+ " LEFT JOIN (select * from vehicle_group vg join groups gp on vg.grp_ip = gp.id and gp.type = " + (int)SafeMobileLib.GroupType.CATEGORY.value + " ) as v_grp ON (v_grp.sc_id = sub.sc_id) "
|
|
+ " LEFT JOIN groups as grp ON (grp.id = v_grp.grp_ip)"
|
|
+ " LEFT JOIN subs_gateway as sgw ON (sgw.sc_id = sub.sc_id)"
|
|
+ whereClause
|
|
+ " ORDER BY veh.name";
|
|
return getAllVehiclesFromCMD(command, out hasOnlyIntegerValues);
|
|
}
|
|
|
|
|
|
|
|
public List<Vehicles> getAllVehicles(out Boolean hasOnlyIntegerValues, bool getDeleted)
|
|
{
|
|
string command = "SELECT veh.id,sub.imei,veh.lp,veh.name,em.di,veh.\"GPS_reporting_interval\",grp.name,veh.driver_id,veh.is_stolen,veh.ars_interval,veh.gps_poor,veh.gps_off,veh.made_off,"
|
|
+ " coalesce(sgw.gateway_id, -1) as gateway_id, coalesce(sgw.radio_gw_id, -1) as radio_gw_id, "
|
|
+ " veh.type, veh.active"
|
|
+ " FROM vehicle as veh"
|
|
|
|
+ " INNER JOIN subscriber_history as sh ON (veh.id = sh.veh_id) INNER JOIN subscriber as sub"
|
|
+ " on (sh.sc_id = sub.sc_id) LEFT JOIN emergdi as em on (sub.sc_id = em.sc_id)"
|
|
+ " LEFT JOIN (select * from vehicle_group vg join groups gp on vg.grp_ip = gp.id and gp.type = " + (int)SafeMobileLib.GroupType.CATEGORY.value + " ) as v_grp ON (v_grp.sc_id = sub.sc_id) "
|
|
+ " LEFT JOIN groups as grp ON (grp.id = v_grp.grp_ip)"
|
|
+ " LEFT JOIN subs_gateway as sgw ON (sgw.sc_id = sub.sc_id)";
|
|
command += getDeleted ? " WHERE is_deleted = TRUE" : " WHERE is_deleted = FALSE";
|
|
command +=" ORDER BY veh.name";
|
|
return getAllVehiclesFromCMD(command, out hasOnlyIntegerValues);
|
|
}
|
|
|
|
public List<Vehicles> getAllVehicles()
|
|
{
|
|
Boolean hasOnlyIntegerValues = false;
|
|
return getAllVehiclesFromCMD("SELECT veh.id,sub.imei,veh.lp,veh.name,em.di,veh.\"GPS_reporting_interval\",grp.name,veh.driver_id,veh.is_stolen,veh.ars_interval,veh.gps_poor,veh.gps_off,veh.made_off,"
|
|
+ " coalesce(sgw.gateway_id, -1) as gateway_id, coalesce(sgw.radio_gw_id, -1) as radio_gw_id,"
|
|
+ " veh.type, veh.active"
|
|
+ " FROM vehicle as veh"
|
|
|
|
+ " INNER JOIN subscriber_history as sh ON (veh.id = sh.veh_id) INNER JOIN subscriber as sub"
|
|
+ " on (sh.sc_id = sub.sc_id) LEFT JOIN emergdi as em on (sub.sc_id = em.sc_id)"
|
|
+ " LEFT JOIN (select * from vehicle_group vg join groups gp on vg.grp_ip = gp.id and gp.type = " + (int)SafeMobileLib.GroupType.CATEGORY.value + " ) as v_grp ON (v_grp.sc_id = sub.sc_id) "
|
|
+ " LEFT JOIN groups as grp ON (grp.id = v_grp.grp_ip)"
|
|
+ " LEFT JOIN subs_gateway as sgw ON (sgw.sc_id = sub.sc_id)"
|
|
+ " WHERE is_deleted = FALSE"
|
|
+ " ORDER BY sub.imei", out hasOnlyIntegerValues);
|
|
}
|
|
|
|
private List<Vehicles> getAllVehiclesFromCMD(String command, out Boolean hasOnlyIntegerValues)
|
|
{
|
|
|
|
hasOnlyIntegerValues = true;
|
|
List<Vehicles> vehList = new List<Vehicles>();
|
|
Vehicles veh;
|
|
|
|
|
|
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())
|
|
{
|
|
if (Reader.IsDBNull(4)) veh = new Vehicles(Convert.ToInt32(Reader.GetValue(0)),
|
|
Reader.GetValue(1).ToString(), Reader.GetValue(2).ToString(),
|
|
Reader.GetValue(3).ToString(), "", 0, Reader.GetInt32(5),
|
|
(Reader.IsDBNull(6)) ? "" : Reader.GetString(6),
|
|
Reader.GetInt32(7), Reader.GetInt32(8), Reader.GetInt32(10), Reader.GetInt32(11), Reader.GetInt32(12));
|
|
else veh = new Vehicles(Convert.ToInt32(Reader.GetValue(0)),
|
|
Reader.GetValue(1).ToString(), Reader.GetValue(2).ToString(),
|
|
Reader.GetValue(3).ToString(), "", Reader.GetInt32(4),
|
|
Reader.GetInt32(5), (Reader.IsDBNull(6)) ? "" : Reader.GetString(6),
|
|
Reader.GetInt32(7), Reader.GetInt32(8), Reader.GetInt32(10), Reader.GetInt32(11), Reader.GetInt32(12));
|
|
|
|
if (command.Contains("email"))
|
|
veh.Email = Reader.IsDBNull(Reader.GetOrdinal("email")) ? "" : Reader.GetString(Reader.GetOrdinal("email"));
|
|
|
|
if (command.Contains("phone"))
|
|
veh.Phone = Reader.IsDBNull(Reader.GetOrdinal("phone")) ? "" : Reader.GetString(Reader.GetOrdinal("phone"));
|
|
|
|
if (command.Contains("gateway_id"))
|
|
veh.Gw_id = Reader.IsDBNull(Reader.GetOrdinal("gateway_id")) ? 0 : Reader.GetInt32(Reader.GetOrdinal("gateway_id"));
|
|
if (command.Contains("radio_gw_id"))
|
|
veh.Radio_gw_id = Reader.IsDBNull(Reader.GetOrdinal("radio_gw_id")) ? 0 : Reader.GetInt32(Reader.GetOrdinal("radio_gw_id"));
|
|
|
|
if (command.Contains("type"))
|
|
veh.Type = Reader.IsDBNull(Reader.GetOrdinal("type")) ? 0 : Reader.GetInt32(Reader.GetOrdinal("type"));
|
|
if (command.Contains("active"))
|
|
veh.Active = Reader.IsDBNull(Reader.GetOrdinal("active")) ? false : Reader.GetBoolean(Reader.GetOrdinal("active"));
|
|
|
|
int ars_interval = Reader.GetInt32(9);
|
|
veh.ArsInterval = ars_interval;
|
|
try
|
|
{
|
|
veh.IntImei = Convert.ToInt64(veh.Imei);
|
|
}
|
|
catch
|
|
{
|
|
hasOnlyIntegerValues = false;
|
|
}
|
|
vehList.Add(veh);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Utils.WriteLine(ex.ToString(), ConsoleColor.Red);
|
|
}
|
|
|
|
return vehList;
|
|
}
|
|
|
|
|
|
|
|
public List<Vehicles> getAllVehiclesWithSc_ID()
|
|
{
|
|
|
|
List<Vehicles> vehList = new List<Vehicles>();
|
|
Vehicles veh;
|
|
|
|
|
|
string command = "SELECT veh.id,sub.imei,veh.lp,veh.name,em.di,veh.\"GPS_reporting_interval\",grp.name,veh.driver_id,veh.is_stolen,veh.ars_interval,sub.sc_id,veh.gps_poor,veh.gps_off,veh.made_off"
|
|
+ " FROM vehicle as veh"
|
|
|
|
+ " INNER JOIN subscriber_history as sh ON (veh.id = sh.veh_id) "
|
|
+ " INNER JOIN subscriber as sub on (sh.sc_id = sub.sc_id) "
|
|
+ " LEFT JOIN emergdi as em on (sub.sc_id = em.sc_id) "
|
|
+ " LEFT JOIN "
|
|
+ "( SELECT * FROM vehicle_group v_grp1 JOIN groups grp1 ON (grp1.id = v_grp1.grp_ip) WHERE grp1.type = " + (int)GroupType.CATEGORY.value + " )"
|
|
+ "as v_grp ON (v_grp.sc_id = sub.sc_id)"
|
|
+ " LEFT JOIN groups as grp ON (grp.id = v_grp.grp_ip)"
|
|
+ " WHERE is_deleted = FALSE"
|
|
+ " ORDER BY veh.name";
|
|
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())
|
|
{
|
|
if (Reader.IsDBNull(4)) veh = new Vehicles(Convert.ToInt32(Reader.GetValue(0)),
|
|
Reader.GetValue(1).ToString(), Reader.GetValue(2).ToString(),
|
|
Reader.GetValue(3).ToString(), "", 0, Reader.GetInt32(5),
|
|
(Reader.IsDBNull(6)) ? "" : Reader.GetString(6),
|
|
Reader.GetInt32(7), Reader.GetInt32(8), Reader.GetInt32(10), Reader.GetInt32(11), Reader.GetInt32(12), Reader.GetInt32(13), 0);
|
|
else veh = new Vehicles(Convert.ToInt32(Reader.GetValue(0)),
|
|
Reader.GetValue(1).ToString(), Reader.GetValue(2).ToString(),
|
|
Reader.GetValue(3).ToString(), "", Reader.GetInt32(4),
|
|
Reader.GetInt32(5), (Reader.IsDBNull(6)) ? "" : Reader.GetString(6),
|
|
Reader.GetInt32(7), Reader.GetInt32(8), Reader.GetInt32(10), Reader.GetInt32(11), Reader.GetInt32(12), Reader.GetInt32(13), 0);
|
|
|
|
int ars_interval = Reader.GetInt32(9);
|
|
veh.ArsInterval = ars_interval;
|
|
vehList.Add(veh);
|
|
}
|
|
|
|
}
|
|
}
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Utils.WriteLine(ex.ToString(), ConsoleColor.Red);
|
|
}
|
|
|
|
return vehList;
|
|
}
|
|
|
|
|
|
public List<Vehicles> getAllVehiclesForCurrentUser(string _id, bool onlyActive)
|
|
{
|
|
Vehicles veh;
|
|
List<Vehicles> vehList = new List<Vehicles>();
|
|
|
|
string command = "SELECT DISTINCT veh.id,sub.imei,veh.lp,veh.name,em.di,veh.\"GPS_reporting_interval\",grp.name,veh.driver_id,veh.is_stolen,veh.gps_poor,veh.gps_off,veh.made_off"
|
|
+ " FROM vehicle as veh"
|
|
|
|
+ " INNER JOIN subscriber_history as sh ON (veh.id = sh.veh_id) "
|
|
+ " INNER JOIN subscriber as sub on (sh.sc_id = sub.sc_id) "
|
|
+ " LEFT JOIN emergdi as em on (sub.sc_id = em.sc_id)"
|
|
+ " LEFT JOIN "
|
|
+ "( SELECT * FROM vehicle_group v_grp1 JOIN groups grp1 ON (grp1.id = v_grp1.grp_ip) WHERE grp1.type = " + (int)GroupType.CATEGORY.value + " )"
|
|
+ " as v_grp ON (v_grp.sc_id = sub.sc_id)"
|
|
+ " LEFT JOIN groups as grp ON (grp.id = v_grp.grp_ip)"
|
|
+ " INNER JOIN vehicle_user as vh on(vh.veh_id=veh.id)"
|
|
+ $" WHERE vh.user_id={_id} AND is_deleted = FALSE #allOrOnlyActive#"
|
|
+ " ORDER BY sub.imei";
|
|
|
|
if (onlyActive)
|
|
command = command.Replace("#allOrOnlyActive#", " AND active = TRUE ");
|
|
else
|
|
command = command.Replace("#allOrOnlyActive#", "");
|
|
|
|
|
|
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())
|
|
{
|
|
if (Reader.IsDBNull(4)) veh = new Vehicles(Convert.ToInt32(Reader.GetValue(0)),
|
|
Reader.GetValue(1).ToString(), Reader.GetValue(2).ToString(),
|
|
Reader.GetValue(3).ToString(), "", 0, Reader.GetInt32(5),
|
|
(Reader.IsDBNull(6)) ? "" : Reader.GetString(6),
|
|
Reader.GetInt32(7), Reader.GetInt32(8), Reader.GetInt32(9), Reader.GetInt32(10), Reader.GetInt32(11));
|
|
|
|
else veh = new Vehicles(Convert.ToInt32(Reader.GetValue(0)),
|
|
Reader.GetValue(1).ToString(), Reader.GetValue(2).ToString(),
|
|
Reader.GetValue(3).ToString(), "", Reader.GetInt32(4),
|
|
Reader.GetInt32(5), (Reader.IsDBNull(6)) ? "" : Reader.GetString(6),
|
|
Reader.GetInt32(7), Reader.GetInt32(8), Reader.GetInt32(9), Reader.GetInt32(10), Reader.GetInt32(11));
|
|
vehList.Add(veh);
|
|
}
|
|
|
|
}
|
|
}
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Utils.WriteLine(ex.ToString(), ConsoleColor.Red);
|
|
}
|
|
|
|
|
|
vehList.Sort(delegate (Vehicles c1, Vehicles c2) { return c1.VehName.CompareTo(c2.VehName); });
|
|
return vehList;
|
|
|
|
|
|
}
|
|
|
|
|
|
//get all vehicles for current user ( active and inactive )
|
|
public List<Vehicles> getAllVehiclesForCurrentUser(string _id)
|
|
{
|
|
|
|
return getAllVehiclesForCurrentUser(_id, false);
|
|
}
|
|
|
|
|
|
//get all vehicles that are not assigned to current user
|
|
public List<Vehicles> getAllOtherVehiclesForCurrentUser(string _id)
|
|
{
|
|
|
|
|
|
List<Vehicles> vehList = new List<Vehicles>();
|
|
|
|
string command = "SELECT DISTINCT veh.id,sub.imei,veh.lp,veh.name,em.DI,veh.\"GPS_reporting_interval\",veh.gps_poor,veh.gps_off,veh.made_off, veh.driver_id "
|
|
+ " FROM vehicle as veh "
|
|
+ " INNER JOIN subscriber_history as sh ON (veh.id = sh.veh_id) "
|
|
+ " INNER JOIN subscriber as sub on (sh.sc_id = sub.sc_id) "
|
|
+ " LEFT JOIN emergdi as em on (sub.sc_id = em.sc_id) "
|
|
+ " LEFT JOIN vehicle_user as vh on(vh.veh_id = veh.id) "
|
|
+ " WHERE veh.id NOT IN (SELECT veh_id FROM vehicle_user WHERE user_id = " + _id + ") AND is_deleted = FALSE "
|
|
+ " ORDER BY sub.imei";
|
|
|
|
|
|
try
|
|
{
|
|
using (NpgsqlConnection connection = new NpgsqlConnection())
|
|
{
|
|
|
|
connection.ConnectionString = getConnectionString();
|
|
connection.Open();
|
|
|
|
using (NpgsqlCommand cmd = new NpgsqlCommand(command, connection))
|
|
{
|
|
using (NpgsqlDataReader Reader = cmd.ExecuteReader())
|
|
{
|
|
|
|
Vehicles veh;
|
|
|
|
while (Reader.Read())
|
|
{
|
|
if (Reader.IsDBNull(4))
|
|
veh = new Vehicles(Convert.ToInt32(Reader.GetValue(0)), Reader.GetValue(1).ToString(), Reader.GetValue(2).ToString(),
|
|
Reader.GetValue(3).ToString(), "", 0, Reader.GetInt32(5), "", Reader.GetInt32(9), 0, Reader.GetInt32(6), Reader.GetInt32(7), Reader.GetInt32(8));
|
|
else
|
|
veh = new Vehicles(Convert.ToInt32(Reader.GetValue(0)), Reader.GetValue(1).ToString(), Reader.GetValue(2).ToString(),
|
|
Reader.GetValue(3).ToString(), "", Reader.GetInt32(4), Reader.GetInt32(5), "", Reader.GetInt32(9), 0, Reader.GetInt32(6), Reader.GetInt32(7), Reader.GetInt32(8));
|
|
vehList.Add(veh);
|
|
}
|
|
|
|
}
|
|
}
|
|
}
|
|
}
|
|
catch (Exception ee)
|
|
{
|
|
SM.Debug(command);
|
|
Console.WriteLine($"getAllOtherVehiclesForCurrentUser : {ee.ToString()}", ConsoleColor.Yellow);
|
|
}
|
|
|
|
vehList.Sort(delegate(Vehicles c1, Vehicles c2) { return c1.VehName.CompareTo(c2.VehName); });
|
|
|
|
return vehList;
|
|
}
|
|
|
|
public class VehiclesIDComparer : IComparer
|
|
{
|
|
public VehiclesIDComparer() : base() { }
|
|
|
|
int IComparer.Compare(object x, object y)
|
|
{
|
|
Vehicles X = x as Vehicles;
|
|
Vehicles Y = y as Vehicles;
|
|
return (X.VehName.CompareTo(Y.VehName)>0) ? 1 : -1;
|
|
}
|
|
}
|
|
|
|
// add connection between user and vehicle
|
|
public vehResponse addVehicleUserConnection(string vehId, string userId)
|
|
{
|
|
|
|
vehResponse resp = vehResponse.done;
|
|
|
|
|
|
try
|
|
{
|
|
using (NpgsqlConnection connection = new NpgsqlConnection())
|
|
{
|
|
|
|
connection.ConnectionString = getConnectionString();
|
|
connection.Open();
|
|
|
|
string command = $"SELECT count(veh_id) FROM vehicle_user where veh_id='{vehId}' AND user_id ='{userId}'";
|
|
using (NpgsqlCommand cmd2 = new NpgsqlCommand(command, connection))
|
|
{
|
|
object result = cmd2.ExecuteScalar();
|
|
if (result.ToString() == "0")
|
|
{
|
|
|
|
command = $"INSERT INTO vehicle_user VALUES({vehId},{userId},{String.Format("'{0:yyyy-MM-dd}'", DateTime.UtcNow)})";
|
|
using (NpgsqlCommand cmd = new NpgsqlCommand(command, connection))
|
|
{
|
|
cmd.ExecuteNonQuery();
|
|
}
|
|
}
|
|
|
|
}
|
|
}
|
|
}
|
|
catch (Exception ee)
|
|
{
|
|
Console.WriteLine($"{ee.Message} {ee.StackTrace} {ee.Source}", ConsoleColor.Yellow);
|
|
resp = vehResponse.SQLerror;
|
|
}
|
|
|
|
|
|
return resp;
|
|
}
|
|
|
|
|
|
// add connection between user and vehicle
|
|
public vehResponse assignVehiclesToUser(List<string> vehIds, string userId)
|
|
{
|
|
|
|
vehResponse resp = vehResponse.done;
|
|
|
|
StringBuilder sb = new StringBuilder(1024);
|
|
try
|
|
{
|
|
|
|
|
|
sb.Append("INSERT INTO vehicle_user VALUES ");
|
|
|
|
for (int i = 0; i < vehIds.Count; i++)
|
|
{
|
|
String vehId = vehIds[i];
|
|
sb.Append($"({vehId},{userId},{String.Format("'{0:yyyy-MM-dd}'", DateTime.UtcNow)})");
|
|
if (i < vehIds.Count - 1)
|
|
sb.Append(",");
|
|
}
|
|
|
|
using (NpgsqlConnection connection = new NpgsqlConnection())
|
|
{
|
|
|
|
connection.ConnectionString = getConnectionString();
|
|
connection.Open();
|
|
|
|
|
|
using (NpgsqlCommand cmd = new NpgsqlCommand(sb.ToString(), connection))
|
|
{
|
|
cmd.ExecuteNonQuery();
|
|
}
|
|
}
|
|
}
|
|
catch (Exception ee)
|
|
{
|
|
Console.WriteLine($"{ee.Message} {ee.StackTrace} {ee.Source} ");
|
|
resp = vehResponse.SQLerror;
|
|
}
|
|
|
|
|
|
return resp;
|
|
}
|
|
|
|
|
|
|
|
// remove connection between user and vehicle
|
|
public vehResponse removeVehiclesToUser(List<string> vehIds, string userId)
|
|
{
|
|
|
|
vehResponse resp = vehResponse.done;
|
|
|
|
StringBuilder sb = new StringBuilder(1024);
|
|
try
|
|
{
|
|
|
|
sb.Append("DELETE FROM vehicle_user WHERE ");
|
|
|
|
for (int i = 0; i < vehIds.Count; i++)
|
|
{
|
|
String vehId = vehIds[i];
|
|
sb.Append($" (veh_id ='{vehId}' AND user_id='{userId}') ");
|
|
if (i < vehIds.Count - 1)
|
|
sb.Append(" OR ");
|
|
|
|
}
|
|
|
|
using (NpgsqlConnection connection = new NpgsqlConnection())
|
|
{
|
|
|
|
connection.ConnectionString = getConnectionString();
|
|
connection.Open();
|
|
|
|
using (NpgsqlCommand cmd = new NpgsqlCommand(sb.ToString(), connection))
|
|
{
|
|
cmd.ExecuteNonQuery();
|
|
}
|
|
}
|
|
}
|
|
catch (Exception ee)
|
|
{
|
|
Console.WriteLine($"{ee.Message} {ee.StackTrace} {ee.Source}");
|
|
resp = vehResponse.SQLerror;
|
|
}
|
|
|
|
|
|
return resp;
|
|
}
|
|
|
|
|
|
|
|
//remove connection between user and vehicle
|
|
public vehResponse removeVehicleUserConnection(string vehId, string userId)
|
|
{
|
|
|
|
vehResponse resp = vehResponse.done;
|
|
|
|
try
|
|
{
|
|
using (NpgsqlConnection connection = new NpgsqlConnection())
|
|
{
|
|
|
|
connection.ConnectionString = getConnectionString();
|
|
connection.Open();
|
|
|
|
string command = $"DELETE FROM vehicle_user WHERE veh_id ='{vehId}' AND user_id ='{userId}'";
|
|
using (NpgsqlCommand cmd = new NpgsqlCommand(command, connection))
|
|
{
|
|
cmd.ExecuteNonQuery();
|
|
}
|
|
}
|
|
|
|
}
|
|
catch (Exception ee)
|
|
{
|
|
Console.WriteLine($"{ee.Message} {ee.StackTrace} {ee.Source}", ConsoleColor.Yellow );
|
|
resp = vehResponse.SQLerror;
|
|
}
|
|
|
|
return resp;
|
|
}
|
|
|
|
public sqlResponse assignUnit2GW(int radioID, int gwID, string r_gw_ip)
|
|
{
|
|
|
|
|
|
|
|
sqlResponse resp = sqlResponse.SQLerror;
|
|
NpgsqlTransaction transaction = null;
|
|
|
|
try
|
|
{
|
|
int scid = getSCID(radioID.ToString());
|
|
|
|
using (NpgsqlConnection connection = new NpgsqlConnection())
|
|
{
|
|
|
|
connection.ConnectionString = getConnectionString();
|
|
connection.Open();
|
|
|
|
// open a transaction
|
|
transaction = connection.BeginTransaction();
|
|
|
|
//get radioGW ID from it's IP
|
|
int r_gwID = -1;
|
|
string command = $"SELECT \"ID\" FROM radio_gw WHERE \"IP\"='{r_gw_ip}' AND \"GW_ID\" = {gwID}";
|
|
using (NpgsqlCommand cmd = new NpgsqlCommand(command, connection))
|
|
{
|
|
using (NpgsqlDataReader Reader = cmd.ExecuteReader())
|
|
{
|
|
while (Reader.Read())
|
|
{
|
|
r_gwID = Reader.GetInt32(0);
|
|
}
|
|
|
|
}
|
|
}
|
|
|
|
if (r_gwID == -1)
|
|
{
|
|
resp = sqlResponse.SQLerror;
|
|
SM.Debug("radio GW ip = " + r_gw_ip + " not found in DB.Please go in SUM and add this radioGW");
|
|
return resp;
|
|
}
|
|
//delete previous entry
|
|
using (NpgsqlCommand cmd = new NpgsqlCommand($"DELETE FROM subs_gateway where sc_id = {scid}", connection, transaction))
|
|
{
|
|
cmd.ExecuteNonQuery();
|
|
}
|
|
|
|
//add new entry
|
|
|
|
string str_id_subs_gateway = string.Empty;
|
|
using (NpgsqlCommand cmd = new NpgsqlCommand("SELECT max(id) FROM subs_gateway ", connection))
|
|
{
|
|
str_id_subs_gateway = cmd.ExecuteScalar().ToString();
|
|
}
|
|
|
|
int id_subs_gateway = 0;
|
|
int.TryParse(str_id_subs_gateway, out id_subs_gateway);
|
|
|
|
|
|
using (NpgsqlCommand cmd = new NpgsqlCommand($"INSERT INTO subs_gateway (id, sc_id, gateway_id, radio_gw_id) VALUES( {id_subs_gateway + 1},{scid},{(gwID < 0 ? "null" : gwID.ToString())}, {(r_gwID < 0 ? "null" : r_gwID.ToString()) })", connection, transaction))
|
|
{
|
|
cmd.ExecuteNonQuery();
|
|
}
|
|
|
|
transaction.Commit();
|
|
resp = sqlResponse.done;
|
|
}
|
|
}
|
|
catch (Exception o)
|
|
{
|
|
|
|
transaction?.Rollback();
|
|
Console.WriteLine(o.Message.ToString());
|
|
throw new ArgumentException(o.Message.ToString());
|
|
}
|
|
|
|
return resp;
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// gets the radio position in system (gateway ID, radio dateway ID)
|
|
/// </summary>
|
|
/// <param name="sc_id">unit sc_id</param>
|
|
/// <returns>returns null if incorect sc_id</returns>
|
|
public UnitSysPosition getSystemPosition(int sc_id)
|
|
{
|
|
UnitSysPosition pos = new UnitSysPosition(0, 0);
|
|
try
|
|
{
|
|
using (NpgsqlConnection conn = new NpgsqlConnection(getConnectionString()))
|
|
{
|
|
conn.Open();
|
|
|
|
string command = $"SELECT coalesce(gateway_id, -1) as gateway_id, coalesce(radio_gw_id, -1) radio_gw_id FROM subs_gateway WHERE sc_id = {sc_id}";
|
|
using (NpgsqlCommand cmd = new NpgsqlCommand(command, conn))
|
|
{
|
|
|
|
using (NpgsqlDataReader reader = cmd.ExecuteReader())
|
|
{
|
|
while (reader.Read())
|
|
{
|
|
int gateway_id = Convert.ToInt32(reader["gateway_id"]);
|
|
int radio_gw_id = Convert.ToInt32(reader["radio_gw_id"]);
|
|
|
|
pos = new UnitSysPosition(gateway_id, radio_gw_id);
|
|
}
|
|
reader.Close();
|
|
}
|
|
}
|
|
conn.Close();
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Utils.WriteLine("getSystemPosition " + ex.ToString(), ConsoleColor.Red);
|
|
}
|
|
|
|
return pos;
|
|
}
|
|
|
|
/// <summary>
|
|
/// gets the radio position in system (gateway ID, radio dateway ID)
|
|
/// </summary>
|
|
/// <param name="sc_id">unit sc_id</param>
|
|
/// <returns>returns null if incorect sc_id</returns>
|
|
public UnitSysPosition getSystemPositionIMEI(String IMEI)
|
|
{
|
|
|
|
UnitSysPosition pos = null;
|
|
try
|
|
{
|
|
using (NpgsqlConnection conn = new NpgsqlConnection(getConnectionString()))
|
|
{
|
|
conn.Open();
|
|
|
|
string command = "SELECT distinct coalesce(sg.gateway_id, -1) as gateway_id, coalesce(sg.radio_gw_id, -1) as radio_gw_id "
|
|
+ " FROM subs_gateway sg "
|
|
+ " INNER JOIN subscriber sb ON sb.sc_id = sg.sc_id "
|
|
+ $" WHERE sb.imei ='{IMEI}'";
|
|
|
|
using (NpgsqlCommand cmd = new NpgsqlCommand(command, conn))
|
|
{
|
|
using (NpgsqlDataReader reader = cmd.ExecuteReader())
|
|
{
|
|
while (reader.Read())
|
|
{
|
|
int gateway_id = Convert.ToInt32(reader["gateway_id"]);
|
|
int radio_gw_id = Convert.ToInt32(reader["radio_gw_id"]);
|
|
|
|
pos = new UnitSysPosition(gateway_id, radio_gw_id);
|
|
}
|
|
|
|
reader.Close();
|
|
}
|
|
}
|
|
conn.Close();
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Utils.WriteLine("getSystemPositionIMEI " + ex.ToString(), ConsoleColor.Red);
|
|
}
|
|
return pos;
|
|
}
|
|
|
|
/// <summary>
|
|
/// gets the radio position in system (gateway ID, radio dateway ID)
|
|
/// </summary>
|
|
/// <param name="sc_id">unit sc_id</param>
|
|
/// <returns>returns null if incorect sc_id</returns>
|
|
public Hashtable getSystemPosition_for_all_scid()
|
|
{
|
|
|
|
Hashtable ret = new Hashtable();
|
|
|
|
string command = "SELECT coalesce(gateway_id, -1) as gateway_id, coalesce(radio_gw_id, -1) as radio_gw_id, sc_id FROM subs_gateway";
|
|
|
|
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())
|
|
{
|
|
|
|
long sc_id = Convert.ToInt64(reader["sc_id"]);
|
|
int gateway_id = Convert.ToInt32(reader["gateway_id"]);
|
|
int radio_gw_id = Convert.ToInt32(reader["radio_gw_id"]);
|
|
|
|
if(!ret.ContainsKey(sc_id))
|
|
ret.Add(sc_id, new UnitSysPosition(gateway_id, radio_gw_id));
|
|
|
|
}
|
|
reader.Close();
|
|
}
|
|
}
|
|
|
|
connection.Close();
|
|
}
|
|
}
|
|
catch (Exception ee)
|
|
{
|
|
SM.Debug(command);
|
|
Console.WriteLine($"getSystemPosition_for_all_scid: {ee.ToString()}", ConsoleColor.Yellow);
|
|
}
|
|
|
|
|
|
return ret;
|
|
}
|
|
|
|
public UnitSysPosition getSystemPosition_for_group(string cps_id)
|
|
{
|
|
|
|
UnitSysPosition pos = null;
|
|
|
|
//string command = "SELECT DISTINCT coalesce(sub.gateway_id, -1) as gateway_id, coalesce(sub.radio_gw_id, -1) as radio_gw_id "
|
|
// + " FROM groups as grp "
|
|
// + " INNER JOIN vehicle_group as vgrp ON (grp.id=vgrp.grp_ip) "
|
|
// + "INNER JOIN subs_gateway as sub ON (vgrp.sc_id = sub.sc_id) "
|
|
// + " WHERE grp.cps_id=" + cps_id.ToString();
|
|
|
|
string command = "SELECT DISTINCT coalesce(sub.\"GW_ID\", -1) as gateway_id, coalesce(grp.r_gw_id, -1) as radio_gw_id " +
|
|
" FROM groups as grp " +
|
|
" INNER JOIN radio_gw as sub ON(grp.r_gw_id = sub.\"ID\") " +
|
|
$" WHERE grp.cps_id = {cps_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())
|
|
{
|
|
int gateway_id = Convert.ToInt32(reader["gateway_id"]);
|
|
int radio_gw_id = Convert.ToInt32(reader["radio_gw_id"]);
|
|
|
|
pos = new UnitSysPosition(gateway_id, radio_gw_id);
|
|
if ((gateway_id > 0) && (radio_gw_id > 0)) break;
|
|
}
|
|
reader.Close();
|
|
}
|
|
}
|
|
connection.Close();
|
|
|
|
}
|
|
}
|
|
catch (Exception ee)
|
|
{
|
|
SM.Debug(command);
|
|
Console.WriteLine($"getSystemPosition_for_group : {ee.ToString()}", ConsoleColor.Yellow);
|
|
}
|
|
|
|
return pos;
|
|
}
|
|
|
|
public ArrayList get_all_car_picture()
|
|
{
|
|
ArrayList ret = new ArrayList();
|
|
|
|
try
|
|
{
|
|
using (NpgsqlConnection connection = new NpgsqlConnection())
|
|
{
|
|
|
|
connection.ConnectionString = getConnectionString();
|
|
connection.Open();
|
|
|
|
string command = "SELECT name, id, pattern, displayed_name from car ORDER by name";
|
|
using (NpgsqlCommand cmd = new NpgsqlCommand(command, connection))
|
|
{
|
|
using (NpgsqlDataReader reader = cmd.ExecuteReader())
|
|
{
|
|
while (reader.Read())
|
|
{
|
|
Car obj = new Car();
|
|
|
|
obj.Name = reader["name"].ToString();
|
|
obj.idx = Convert.ToInt32(reader["id"]);
|
|
obj.iconPattern = reader["pattern"].ToString();
|
|
obj.DisplayedName = reader["displayed_name"].ToString();
|
|
|
|
ret.Add(obj);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Console.WriteLine($"get_all_car_picture : {ex.ToString()}", ConsoleColor.Yellow);
|
|
}
|
|
|
|
|
|
return ret;
|
|
}
|
|
|
|
/// <summary>
|
|
/// set the unit stolon status(0-ok, 1- stolen)
|
|
/// </summary>
|
|
/// <param name="radioID">remote radio id</param>
|
|
/// <param name="status">0-ok, 1- stolen</param>
|
|
/// <returns></returns>
|
|
public sqlResponse setStolenStatus(string radioID, int status)
|
|
{
|
|
|
|
NpgsqlCommand cmd;
|
|
|
|
sqlResponse resp = sqlResponse.SQLerror;
|
|
try
|
|
{
|
|
|
|
int scid = getSCID(radioID.ToString());
|
|
|
|
using (NpgsqlConnection connection = new NpgsqlConnection())
|
|
{
|
|
|
|
connection.ConnectionString = getConnectionString();
|
|
connection.Open();
|
|
|
|
cmd = new NpgsqlCommand("SELECT veh_id FROM subscriber_history WHERE sc_id=\'" + scid + "\'", connection);
|
|
object tmp_veh_id = cmd.ExecuteScalar();
|
|
if (tmp_veh_id != null)
|
|
{
|
|
cmd = new NpgsqlCommand("UPDATE vehicle SET is_stolen=" + status + " WHERE id=" + tmp_veh_id, connection);
|
|
cmd.ExecuteNonQuery();
|
|
resp = sqlResponse.done;
|
|
}
|
|
}
|
|
}
|
|
catch (Exception o)
|
|
{
|
|
Console.WriteLine(o.Message.ToString());
|
|
throw new ArgumentException(o.Message.ToString());
|
|
}
|
|
|
|
return resp;
|
|
}
|
|
|
|
|
|
public Int32 getActiveVehiclesCount(int totalUnits, bool isSierraWireless, out int totaldbunits)
|
|
{
|
|
totaldbunits = 0;
|
|
if (totalUnits == 0)
|
|
return totalUnits;
|
|
|
|
|
|
Int32 result = 0;
|
|
NpgsqlCommand cmd;
|
|
try
|
|
{
|
|
string selectClause = isSierraWireless ?
|
|
"SELECT COUNT(id) FROM vehicle v " +
|
|
"JOIN subscriber s ON s.sc_id = v.id WHERE active = true " +
|
|
"AND length(imei) <= 7" :
|
|
"SELECT COUNT(id) FROM vehicle WHERE active = true";
|
|
|
|
using (NpgsqlConnection connection = new NpgsqlConnection())
|
|
{
|
|
|
|
connection.ConnectionString = getConnectionString();
|
|
connection.Open();
|
|
|
|
cmd = new NpgsqlCommand(selectClause, connection);
|
|
int.TryParse(cmd.ExecuteScalar().ToString(), out result);
|
|
if (result > totalUnits)
|
|
{
|
|
//BRAINFUCK
|
|
string updateClause = isSierraWireless ?
|
|
$"UPDATE vehicle SET active = false WHERE id NOT IN ((SELECT id from vehicle v join subscriber s ON s.sc_id = v.id WHERE active = true and length(imei) <= 7 order by id limit {totalUnits}) UNION SELECT id FROM vehicle v join subscriber s ON s.sc_id = v.id WHERE active = true AND length(imei) > 7 )" :
|
|
$"UPDATE vehicle SET active = false WHERE id NOT IN (SELECT id from vehicle where active = true order by id limit {totalUnits} )";
|
|
cmd = new NpgsqlCommand(updateClause, connection);
|
|
cmd.ExecuteNonQuery();
|
|
result = totalUnits;
|
|
}
|
|
|
|
cmd = new NpgsqlCommand("SELECT COUNT(id) FROM vehicle v WHERE is_deleted = FALSE", connection);
|
|
int.TryParse(cmd.ExecuteScalar().ToString(), out totaldbunits);
|
|
|
|
connection.Close();
|
|
}
|
|
}
|
|
catch (Exception o)
|
|
{
|
|
Console.WriteLine(o.Message.ToString());
|
|
throw new ArgumentException(o.Message.ToString());
|
|
}
|
|
|
|
|
|
return result;
|
|
}
|
|
|
|
/// Get all the units that are marked as ON in lastpos_ars table
|
|
/// Time is GMT format
|
|
/// </summary>
|
|
/// <returns>ARSstatus</returns>
|
|
public List<ARSstatus> Get_ARS_ON_info_GMT()
|
|
{
|
|
List<ARSstatus> ret = new List<ARSstatus>();
|
|
|
|
|
|
string command = "SELECT ars.imei,ars.timegmt,ars.status,veh.ars_interval " +
|
|
" FROM lastpos_ars as ars" +
|
|
" INNER JOIN subscriber as sub ON (ars.imei = sub.imei)" +
|
|
" INNER JOIN subscriber_history as sh ON (sub.sc_id = sh.sc_id)" +
|
|
" INNER JOIN vehicle as veh ON (veh.id = sh.veh_id)" +
|
|
" WHERE ars.status = 1";
|
|
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())
|
|
{
|
|
ARSstatus obj = new ARSstatus();
|
|
|
|
obj.Imei = reader["imei"].ToString();
|
|
DateTime dt = new DateTime(1970, 1, 1, 0, 0, 0, 0);
|
|
obj.Timegmt = dt.AddSeconds(Convert.ToDouble(reader["timegmt"]));
|
|
obj.Status = Convert.ToInt32(reader["status"]);
|
|
obj.ArsInterval = Convert.ToInt32(reader["ars_interval"]);
|
|
|
|
ret.Add(obj);
|
|
}
|
|
reader.Close();
|
|
}
|
|
}
|
|
connection.Close();
|
|
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Console.WriteLine($"Get_ARS_ON_info_GMT : {ex.ToString()}", ConsoleColor.Yellow);
|
|
}
|
|
|
|
return ret;
|
|
}
|
|
|
|
public List<UnitGpsPos> GetLastPos()
|
|
{
|
|
|
|
List<UnitGpsPos> lastPosList = new List<UnitGpsPos>();
|
|
|
|
try
|
|
{
|
|
using (NpgsqlConnection connection = new NpgsqlConnection())
|
|
{
|
|
|
|
connection.ConnectionString = getConnectionString();
|
|
connection.Open();
|
|
|
|
string command = "SELECT imei, lat, lng, speed, status, timegmt, address FROM lastpos";
|
|
|
|
using (NpgsqlCommand cmd = new NpgsqlCommand(command, connection))
|
|
{
|
|
using (NpgsqlDataReader reader = cmd.ExecuteReader())
|
|
{
|
|
while (reader.Read())
|
|
{
|
|
UnitGpsPos lp = new UnitGpsPos();
|
|
|
|
lp.IMEI = reader["imei"].ToString();
|
|
lp.lat = Convert.ToDouble(reader["lat"]).ToString();
|
|
lp.lng = Convert.ToDouble(reader["lng"]).ToString();
|
|
lp.speed = Convert.ToInt32(reader["speed"]);
|
|
lp.status = Convert.ToInt32(reader["status"]);
|
|
lp.timeGMT = Convert.ToInt32(reader["timegmt"]);
|
|
lp.adr = reader["address"].ToString();
|
|
|
|
lastPosList.Add(lp);
|
|
}
|
|
reader.Close();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Console.WriteLine($"GetLastPos : {ex.ToString()}", ConsoleColor.Yellow);
|
|
}
|
|
|
|
|
|
return lastPosList;
|
|
}
|
|
|
|
public Dictionary<String, PositionData> getImeiLastPosDictionary(bool activeUnits)
|
|
{
|
|
Dictionary<String, PositionData> result = new Dictionary<string, PositionData>();
|
|
|
|
|
|
try
|
|
{
|
|
using (NpgsqlConnection connection = new NpgsqlConnection())
|
|
{
|
|
|
|
connection.ConnectionString = getConnectionString();
|
|
connection.Open();
|
|
|
|
string command = "SELECT veh.id, sub.imei, veh.lp, veh.name, veh.\"GPS_reporting_interval\" as rep,veh.driver_id, lp.imei, lp.lat, lp.lng, lp.speed, lp.status, lp.timegmt "
|
|
+ " FROM vehicle as veh"
|
|
+ " INNER JOIN subscriber_history as sh ON (veh.id = sh.veh_id) INNER JOIN subscriber as sub "
|
|
+ " ON (sh.sc_id = sub.sc_id) "
|
|
+ " INNER JOIN lastpos lp on lp.imei = sub.imei"
|
|
+ (activeUnits ? " WHERE veh.active = true" : " ")
|
|
+ " ORDER BY lp.imei::int; ";
|
|
|
|
using (NpgsqlCommand cmd = new NpgsqlCommand(command, connection))
|
|
{
|
|
using (NpgsqlDataReader dr = cmd.ExecuteReader())
|
|
{
|
|
while (dr.Read())
|
|
{
|
|
// read last position value and reporting interval
|
|
PositionData pos = new PositionData()
|
|
{
|
|
Lat = dr.GetDouble(dr.GetOrdinal("lat")),
|
|
Lng = dr.GetDouble(dr.GetOrdinal("lng")),
|
|
Speed = dr.GetInt32(dr.GetOrdinal("speed")),
|
|
TimeGMT = dr.GetInt32(dr.GetOrdinal("timegmt")),
|
|
ReportingInterval = dr.GetInt32(dr.GetOrdinal("rep")),
|
|
};
|
|
|
|
string imei = dr.GetString(dr.GetOrdinal("imei"));
|
|
|
|
// add imei and position only if not exists
|
|
if (!result.ContainsKey(imei))
|
|
result.Add(imei, pos);
|
|
}
|
|
dr.Close();
|
|
}
|
|
}
|
|
connection.Close();
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Console.WriteLine($"getImeiLastPosDictionary : {ex.ToString()}", ConsoleColor.Yellow);
|
|
}
|
|
|
|
|
|
return result;
|
|
}
|
|
|
|
|
|
public List<UnitGpsPos> GetLastPosUserID(Int32 userID)
|
|
{
|
|
|
|
List<UnitGpsPos> lastPosList = new List<UnitGpsPos>();
|
|
string command = "SELECT l.imei, l.lat, l.lng, l.speed, l.status, l.timegmt, l.address " +
|
|
"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) " +
|
|
"INNER JOIN vehicle_user as u on (u.veh_id = v.id) " +
|
|
$"WHERE u.user_id = {userID}";
|
|
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())
|
|
{
|
|
UnitGpsPos lp = new UnitGpsPos();
|
|
|
|
lp.IMEI = reader["imei"].ToString();
|
|
lp.lat = Convert.ToDouble(reader["lat"]).ToString();
|
|
lp.lng = Convert.ToDouble(reader["lng"]).ToString();
|
|
lp.speed = Convert.ToInt32(reader["speed"]);
|
|
lp.status = Convert.ToInt32(reader["status"]);
|
|
lp.timeGMT = Convert.ToInt32(reader["timegmt"]);
|
|
lp.adr = reader["address"].ToString();
|
|
|
|
lastPosList.Add(lp);
|
|
}
|
|
|
|
reader.Close();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Console.WriteLine($"GetLastPosUserID : {ex.ToString()}", ConsoleColor.Yellow);
|
|
}
|
|
|
|
|
|
return lastPosList;
|
|
}
|
|
|
|
public Boolean isUnitDeleted(string id)
|
|
{
|
|
|
|
object temp = null;
|
|
bool isDeleted;
|
|
try
|
|
{
|
|
using (NpgsqlConnection connection = new NpgsqlConnection())
|
|
{
|
|
|
|
connection.ConnectionString = getConnectionString();
|
|
connection.Open();
|
|
|
|
String query = $"SELECT is_deleted FROM vehicle where id = {id}";
|
|
using (NpgsqlCommand cmd = new NpgsqlCommand(query, connection))
|
|
{
|
|
temp = cmd.ExecuteScalar();
|
|
}
|
|
}
|
|
}
|
|
catch(Exception ex)
|
|
{
|
|
Utils.WriteLine("isUnitDeleted: " + ex.ToString(), ConsoleColor.Red);
|
|
}
|
|
|
|
|
|
if (temp is bool)
|
|
return isDeleted = (bool)temp;
|
|
else
|
|
return true;
|
|
|
|
}
|
|
|
|
public List<UnitGpsPos> GET_HistoryPositions(int sc_id, Int32 p_start, Int32 p_stop)
|
|
{
|
|
List<UnitGpsPos> ret = new List<UnitGpsPos>();
|
|
Double Stop = 0, Start = 0;
|
|
if ((p_start == 0) && (p_stop == 0)) p_stop = 2100000000;
|
|
|
|
Start = sc_id * 10000000000 + p_start;
|
|
Stop = sc_id * 10000000000 + p_stop;
|
|
|
|
|
|
try
|
|
{
|
|
using (NpgsqlConnection connection = new NpgsqlConnection())
|
|
{
|
|
|
|
connection.ConnectionString = getConnectionString();
|
|
connection.Open();
|
|
|
|
String query = String.Format($"SELECT lat, lng, speed, timeGMT, address FROM messages WHERE scevtime>{Start} AND scevtime<{Stop} ORDER BY timeGMT");
|
|
using (NpgsqlCommand cmd = new NpgsqlCommand(query, connection))
|
|
{
|
|
using (NpgsqlDataReader reader = cmd.ExecuteReader())
|
|
{
|
|
while (reader.Read())
|
|
{
|
|
|
|
UnitGpsPos pos = new UnitGpsPos();
|
|
|
|
pos.IMEI = "NA";
|
|
pos.lat = Convert.ToDouble(reader["lat"]).ToString();
|
|
pos.lng = Convert.ToDouble(reader["lng"]).ToString();
|
|
pos.speed = Convert.ToInt32(reader["speed"]);
|
|
pos.timeGMT = Convert.ToInt32(reader["timeGMT"]);
|
|
pos.adr = reader.IsDBNull(4) ? " " : reader["address"].ToString();
|
|
|
|
ret.Add(pos);
|
|
}
|
|
|
|
reader.Close();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Console.WriteLine($"GET_HistoryPositions : {ex.ToString()}", ConsoleColor.Yellow);
|
|
}
|
|
|
|
return ret;
|
|
}
|
|
|
|
}
|
|
public enum vehResponse
|
|
{
|
|
done,
|
|
alreadyInDB,
|
|
SQLerror,
|
|
vehNontInDB
|
|
}
|
|
|
|
public class ContactLinx
|
|
{
|
|
private int id;
|
|
/// <summary>
|
|
/// Radio ID for radio, user id for dispatcher, etc.
|
|
/// </summary>
|
|
public int Id
|
|
{
|
|
get { return id; }
|
|
set { id = value; }
|
|
}
|
|
|
|
private int sipid;
|
|
public int SipId
|
|
{
|
|
get { return sipid; }
|
|
set { sipid = value; }
|
|
}
|
|
|
|
private string ip;
|
|
public string IP
|
|
{
|
|
get { return ip; }
|
|
set { ip = value; }
|
|
}
|
|
|
|
private string sippwd;
|
|
public string Sippwd
|
|
{
|
|
get { return sippwd; }
|
|
set { sippwd = value; }
|
|
}
|
|
|
|
private int imageID;
|
|
public int ImageID
|
|
{
|
|
get { return imageID; }
|
|
set { imageID = value; }
|
|
}
|
|
|
|
private string name;
|
|
/// <summary>
|
|
/// Friendly name of radio unit, sipid or....
|
|
/// </summary>
|
|
public string Name
|
|
{
|
|
get { return name; }
|
|
set { name = value; }
|
|
}
|
|
|
|
private ContactType type;
|
|
public ContactType Type
|
|
{
|
|
get { return type; }
|
|
set { type = value; }
|
|
}
|
|
|
|
private int intType;
|
|
public int IntType
|
|
{
|
|
get { return intType; }
|
|
set { intType = value; }
|
|
}
|
|
|
|
private int dispatcherBackup;
|
|
public int DispatcherBackup
|
|
{
|
|
get { return dispatcherBackup; }
|
|
set { dispatcherBackup = value; }
|
|
}
|
|
|
|
private string gWandRadioGW;
|
|
/// <summary>
|
|
/// GwId + "." + RadioGwID sau "-1.-1"
|
|
/// </summary>
|
|
public string GWandRadioGW
|
|
{
|
|
get { return gWandRadioGW; }
|
|
set { gWandRadioGW = value; }
|
|
}
|
|
|
|
private GatewayType gw_type;
|
|
public GatewayType GWtype
|
|
{
|
|
get { return gw_type; }
|
|
set { gw_type = value; }
|
|
}
|
|
}
|
|
public class MobileVehicles
|
|
{
|
|
private int id;
|
|
public int Id
|
|
{
|
|
get { return id; }
|
|
set { id = value; }
|
|
}
|
|
|
|
private string sipLogin;
|
|
public string SipLogin
|
|
{
|
|
get { return sipLogin; }
|
|
set { sipLogin = value; }
|
|
}
|
|
|
|
private string unitName;
|
|
public string UnitName
|
|
{
|
|
get { return unitName; }
|
|
set { unitName = value; }
|
|
}
|
|
|
|
private string imei;
|
|
public string IMEI
|
|
{
|
|
get { return imei; }
|
|
set { imei = value; }
|
|
}
|
|
|
|
private string firstName;
|
|
public string FirstName
|
|
{
|
|
get { return firstName; }
|
|
set { firstName = value; }
|
|
}
|
|
|
|
private string lastName;
|
|
public string LastName
|
|
{
|
|
get { return lastName; }
|
|
set { lastName = value; }
|
|
}
|
|
|
|
private string company;
|
|
public string Company
|
|
{
|
|
get { return company; }
|
|
set { company = value; }
|
|
}
|
|
|
|
private string os;
|
|
public string OS
|
|
{
|
|
get { return os; }
|
|
set { os = value; }
|
|
}
|
|
|
|
private string phoneType;
|
|
public string PhoneType
|
|
{
|
|
get { return phoneType; }
|
|
set { phoneType = value; }
|
|
}
|
|
|
|
private string sipPswd;
|
|
public string SipPswd
|
|
{
|
|
get { return sipPswd; }
|
|
set { sipPswd = value; }
|
|
}
|
|
|
|
private string email;
|
|
public string Email
|
|
{
|
|
get { return email; }
|
|
set { email = value; }
|
|
}
|
|
|
|
private bool canUpdate;
|
|
public bool CanUpdate
|
|
{
|
|
get { return canUpdate; }
|
|
set { canUpdate = value; }
|
|
}
|
|
|
|
private bool has_gps;
|
|
public bool HasGPS
|
|
{
|
|
get { return has_gps; }
|
|
set { has_gps = value; }
|
|
}
|
|
|
|
private bool has_voice;
|
|
public bool HasVoice
|
|
{
|
|
get { return has_voice; }
|
|
set { has_voice = value; }
|
|
}
|
|
|
|
private bool has_text;
|
|
public bool HasText
|
|
{
|
|
get { return has_text; }
|
|
set { has_text = value; }
|
|
}
|
|
|
|
private bool has_ticketing;
|
|
public bool HasTicketing
|
|
{
|
|
get { return has_ticketing; }
|
|
set { has_ticketing = value; }
|
|
}
|
|
|
|
private bool is_lone_worker;
|
|
public bool IsLoneWorker
|
|
{
|
|
get { return is_lone_worker; }
|
|
set { is_lone_worker = value; }
|
|
}
|
|
|
|
private int lone_worker_interval;
|
|
public int LoneWorkerInterval
|
|
{
|
|
get { return lone_worker_interval; }
|
|
set { lone_worker_interval = value; }
|
|
}
|
|
|
|
private bool has_man_down;
|
|
public bool HasManDown
|
|
{
|
|
get { return has_man_down; }
|
|
set { has_man_down = value; }
|
|
}
|
|
|
|
private bool has_emergency;
|
|
public bool HasEmergency
|
|
{
|
|
get { return has_emergency; }
|
|
set { has_emergency = value; }
|
|
}
|
|
|
|
public MobileVehicles()
|
|
{
|
|
lone_worker_interval = 1;
|
|
}
|
|
public Dictionary<string, bool> ToggleStateDictionary;
|
|
|
|
public bool AddToHashTableThreeState(string key, bool IsIndeterminate)
|
|
{
|
|
bool ret = false;
|
|
if (!ToggleStateDictionary.ContainsKey(key))
|
|
{
|
|
ToggleStateDictionary.Add(key, IsIndeterminate);
|
|
ret = true;
|
|
}
|
|
return ret;
|
|
}
|
|
}
|
|
|
|
public class Vehicles
|
|
{
|
|
private int id;
|
|
public int Id
|
|
{
|
|
get { return id; }
|
|
set { id = value; }
|
|
}
|
|
|
|
private int di;
|
|
public int Di
|
|
{
|
|
get { return di; }
|
|
set { di = value; }
|
|
}
|
|
|
|
private Int64 intImei;
|
|
public Int64 IntImei
|
|
{
|
|
get { return intImei; }
|
|
set { intImei = value; }
|
|
}
|
|
|
|
private string imei;
|
|
public string Imei
|
|
{
|
|
get { return imei; }
|
|
set { imei = value; }
|
|
}
|
|
|
|
private string serialNumber;
|
|
public string SerialNumber
|
|
{
|
|
get { return serialNumber; }
|
|
set { serialNumber = value; }
|
|
}
|
|
|
|
private string vehName;
|
|
public string VehName
|
|
{
|
|
get { return vehName; }
|
|
set { vehName = value; }
|
|
}
|
|
|
|
private string userName;
|
|
public string UserName
|
|
{
|
|
get { return userName; }
|
|
set { userName = value; }
|
|
}
|
|
|
|
|
|
private string phone;
|
|
public string Phone
|
|
{
|
|
get { return phone; }
|
|
set { phone = value; }
|
|
}
|
|
|
|
|
|
private string email;
|
|
public string Email
|
|
{
|
|
get { return email; }
|
|
set { email = value; }
|
|
}
|
|
|
|
private int gpsInterval;
|
|
public int GpsInterval
|
|
{
|
|
get { return gpsInterval; }
|
|
set { gpsInterval = value; }
|
|
}
|
|
|
|
private int arsInterval;
|
|
public int ArsInterval
|
|
{
|
|
get { return arsInterval; }
|
|
set { arsInterval = value; }
|
|
}
|
|
|
|
private string groupName;
|
|
public string GroupName
|
|
{
|
|
get { return groupName; }
|
|
set { groupName = value; }
|
|
}
|
|
|
|
private int isStolen;
|
|
public int IsStolen
|
|
{
|
|
get { return isStolen; }
|
|
set { isStolen = value; }
|
|
}
|
|
|
|
private int imgID;
|
|
public int ImgID
|
|
{
|
|
get { return imgID; }
|
|
set { imgID = value; }
|
|
}
|
|
|
|
private int enableStatus;
|
|
|
|
public int EnableStatus
|
|
{
|
|
get { return enableStatus; }
|
|
set { enableStatus = value; }
|
|
}
|
|
|
|
private int sc_id;
|
|
|
|
public int Sc_id
|
|
{
|
|
get { return sc_id; }
|
|
set { sc_id = value; }
|
|
}
|
|
|
|
private int gps_poor;
|
|
|
|
public int Gps_poor
|
|
{
|
|
get { return gps_poor; }
|
|
set { gps_poor = value; }
|
|
}
|
|
|
|
private int gps_off;
|
|
|
|
public int Gps_off
|
|
{
|
|
get { return gps_off; }
|
|
set { gps_off = value; }
|
|
}
|
|
|
|
private int made_off;
|
|
|
|
public int Made_off
|
|
{
|
|
get { return made_off; }
|
|
set { made_off = value; }
|
|
}
|
|
private int gw_id;
|
|
public int Gw_id
|
|
{
|
|
get { return gw_id; }
|
|
set { gw_id = value; }
|
|
}
|
|
|
|
private int radio_gw_id;
|
|
public int Radio_gw_id
|
|
{
|
|
get { return radio_gw_id; }
|
|
set { radio_gw_id = value; }
|
|
}
|
|
|
|
private int type;
|
|
public int Type
|
|
{
|
|
get { return type; }
|
|
set { type = value; }
|
|
}
|
|
|
|
private bool active;
|
|
public bool Active
|
|
{
|
|
get { return active; }
|
|
set { active = value; }
|
|
}
|
|
|
|
public Vehicles(int id, string imei, string serialNumber, string name, string user, int DI, int gpsInterval, string groupName, int imgID, int _isStolen, int gps_poor, int gps_off, int made_off, int _arsInterval = 0)
|
|
{
|
|
this.id = id;
|
|
this.imei = imei;
|
|
this.serialNumber = serialNumber;
|
|
this.vehName = name;
|
|
this.userName = user;
|
|
this.di = DI;
|
|
this.gpsInterval = gpsInterval;
|
|
this.groupName = groupName;
|
|
this.imgID = imgID;
|
|
this.isStolen = _isStolen;
|
|
this.arsInterval = _arsInterval;
|
|
this.gps_poor = gps_poor;
|
|
this.gps_off = gps_off;
|
|
this.made_off = made_off;
|
|
this.sc_id = 0;
|
|
}
|
|
|
|
public Vehicles(int id, string imei, string serialNumber, string name, string user, int DI, int gpsInterval, string groupName, int imgID, int _isStolen, int _sc_id, int gps_poor, int gps_off, int made_off, int _arsInterval = 0)
|
|
{
|
|
this.id = id;
|
|
this.imei = imei;
|
|
this.serialNumber = serialNumber;
|
|
this.vehName = name;
|
|
this.userName = user;
|
|
this.di = DI;
|
|
this.gpsInterval = gpsInterval;
|
|
this.groupName = groupName;
|
|
this.imgID = imgID;
|
|
this.isStolen = _isStolen;
|
|
this.arsInterval = _arsInterval;
|
|
this.gps_poor = gps_poor;
|
|
this.gps_off = gps_off;
|
|
this.made_off = made_off;
|
|
this.sc_id = _sc_id;
|
|
}
|
|
|
|
public Vehicles()
|
|
{
|
|
// TODO: Complete member initialization
|
|
}
|
|
}
|
|
|
|
public class VehicleNameComparer : IComparer
|
|
{
|
|
public VehicleNameComparer() : base() { }
|
|
|
|
int IComparer.Compare(object x, object y)
|
|
{
|
|
|
|
Vehicles X = x as Vehicles;
|
|
Vehicles Y = y as Vehicles;
|
|
return String.Compare(X.VehName, Y.VehName);
|
|
}
|
|
}
|
|
|
|
public class UnitSysPosition
|
|
{
|
|
private int gw_id;
|
|
|
|
public int Gw_id
|
|
{
|
|
get { return gw_id; }
|
|
set { gw_id = value; }
|
|
}
|
|
private int r_gw_id;
|
|
|
|
public int R_gw_id
|
|
{
|
|
get { return r_gw_id; }
|
|
set { r_gw_id = value; }
|
|
}
|
|
|
|
public UnitSysPosition(int gwid, int rgwid)
|
|
{
|
|
gw_id = gwid;
|
|
r_gw_id = rgwid;
|
|
}
|
|
}
|
|
|
|
public class Car
|
|
{
|
|
private string name;
|
|
|
|
public string Name
|
|
{
|
|
get { return name; }
|
|
set { name = value; }
|
|
}
|
|
public string fileName;
|
|
public string desc;
|
|
public Int32 idx;
|
|
|
|
public string listFilePath;
|
|
public string iconPattern;
|
|
private string displayedName;
|
|
|
|
public string DisplayedName
|
|
{
|
|
get { return displayedName; }
|
|
set { displayedName = value; }
|
|
}
|
|
}
|
|
|
|
|
|
|
|
public class SUID_AND_IMEI
|
|
{
|
|
private int sc_id;
|
|
|
|
public int Sc_id
|
|
{
|
|
get { return sc_id; }
|
|
set { sc_id = value; }
|
|
}
|
|
private string imei;
|
|
public string Imei
|
|
{
|
|
get { return imei; }
|
|
set { imei = value; }
|
|
}
|
|
|
|
public SUID_AND_IMEI(int scid, string imei)
|
|
{
|
|
this.sc_id = scid;
|
|
this.imei = imei;
|
|
}
|
|
}
|
|
|
|
public class Scid_and_Status
|
|
{
|
|
private int sc_id;
|
|
public int Sc_id
|
|
{
|
|
get { return sc_id; }
|
|
set { sc_id = value; }
|
|
}
|
|
private int status;
|
|
public int Status
|
|
{
|
|
get { return status; }
|
|
set { status = value; }
|
|
}
|
|
|
|
public Scid_and_Status(int scid, int status)
|
|
{
|
|
this.sc_id = scid;
|
|
this.status = status;
|
|
}
|
|
}
|
|
|
|
public class ARSstatus
|
|
{
|
|
private int status;
|
|
public int Status
|
|
{
|
|
get { return status; }
|
|
set { status = value; }
|
|
}
|
|
|
|
private string imei;
|
|
public string Imei
|
|
{
|
|
get { return imei; }
|
|
set { imei = value; }
|
|
}
|
|
|
|
private DateTime timegmt;
|
|
public DateTime Timegmt
|
|
{
|
|
get { return timegmt; }
|
|
set { timegmt = value; }
|
|
}
|
|
|
|
private int arsInterval;//seconds
|
|
public int ArsInterval
|
|
{
|
|
get { return arsInterval; }
|
|
set { arsInterval = value; }
|
|
}
|
|
}
|
|
|
|
public class UnitGpsPos
|
|
{
|
|
public string IMEI;
|
|
public string lat;
|
|
public string lng;
|
|
|
|
public int speed;
|
|
public int status;
|
|
|
|
public int timeGMT;
|
|
public string adr;
|
|
public UnitGpsPos()
|
|
{
|
|
}
|
|
}
|
|
}
|