330 lines
17 KiB
C#
330 lines
17 KiB
C#
using LSWLib;
|
|
using System;
|
|
using System.Data;
|
|
using System.Data.SqlClient;
|
|
using System.Text;
|
|
using spl = LSWLib.CLog;
|
|
|
|
namespace syncEdosLocal
|
|
{
|
|
class Program
|
|
{
|
|
public static DataSet ds = null;
|
|
static System.Data.SqlClient.SqlInfoMessageEventHandler iMessage = new SqlInfoMessageEventHandler(Connection_InfoMessage);
|
|
static bool error = false;
|
|
static bool warning = false;
|
|
static StringBuilder messages = null;
|
|
static string splunkMessage = string.Empty;
|
|
static spl spLog;
|
|
static LSWLib.Bulker Bulker;
|
|
|
|
public static bool DoorloopToDo(System.Data.SqlClient.SqlConnection fromConnection, string toConstr, System.Data.SqlClient.SqlInfoMessageEventHandler im, ref bool error, ref bool warning, ref StringBuilder messages)
|
|
{
|
|
ds = new DataSet();
|
|
DataTable dtTables = new DataTable("Tables");
|
|
ds.Tables.Add(dtTables);
|
|
DataTable dtActions = new DataTable("Actions");
|
|
ds.Tables.Add(dtActions);
|
|
{
|
|
using (var cmd = new System.Data.SqlClient.SqlCommand("syncloc.SynchroToLocalTables", fromConnection))
|
|
{
|
|
spLog.KvClear();
|
|
cmd.CommandType = CommandType.StoredProcedure;
|
|
spLog.kvAddCommand(spl.skeys.sqlQuery, cmd);
|
|
using (var ncta = new System.Data.SqlClient.SqlDataAdapter(cmd))
|
|
{
|
|
try
|
|
{
|
|
ncta.Fill(dtTables);
|
|
int r = dtTables.Rows.Count;
|
|
spLog.KvAdd(spl.skeys.recordsAffected, r);
|
|
spLog.WriteSplunkLog(string.Empty, spl.iseverity.info, "LoadTables");
|
|
}
|
|
catch (System.Exception ex)
|
|
{
|
|
spLog.WriteSplunkLog(string.Empty, spl.iseverity.err, "LoadTables", ex.Message);
|
|
}
|
|
}
|
|
}
|
|
spLog.KvClear();
|
|
dtTables.PrimaryKey = new DataColumn[] { dtTables.Columns["object_id"] };
|
|
|
|
using (var cmd = new System.Data.SqlClient.SqlCommand("syncloc.SynchroToLocalActions", fromConnection))
|
|
{
|
|
cmd.CommandType = CommandType.StoredProcedure;
|
|
using (var ncta = new System.Data.SqlClient.SqlDataAdapter(cmd))
|
|
{
|
|
try
|
|
{
|
|
ncta.Fill(dtActions);
|
|
spLog.KvAdd(spl.skeys.recordsAffected, dtActions.Rows.Count);
|
|
spLog.WriteSplunkLog(string.Empty, spl.iseverity.info, "LoadActions");
|
|
}
|
|
catch (System.Exception ex)
|
|
{
|
|
spLog.WriteSplunkLog(string.Empty, spl.iseverity.err, "LoadActions", ex.Message);
|
|
}
|
|
}
|
|
}
|
|
dtActions.PrimaryKey = new DataColumn[] { dtActions.Columns["object_id"], dtActions.Columns["Type"], dtActions.Columns["r"] };
|
|
dtActions.ParentRelations.Add(new DataRelation("pObject", dtTables.Columns["object_id"], dtActions.Columns["object_id"]));
|
|
|
|
StringBuilder sqlCmdsActivate = null;
|
|
StringBuilder sqlCmdsDeActivate = null;
|
|
string Task = string.Empty;
|
|
string dest = string.Empty;
|
|
string qry = string.Empty;
|
|
|
|
using (System.Data.SqlClient.SqlConnection toConnection = new SqlConnection(toConstr))
|
|
{
|
|
spLog.KvClear();
|
|
spLog.KvAdd(toConnection);
|
|
toConnection.InfoMessage += im;
|
|
toConnection.Open();
|
|
if (toConnection.State == ConnectionState.Open)
|
|
using (var ucmd = new System.Data.SqlClient.SqlCommand("syncloc.SynchroToLocalTablesUpdate".ToString(), fromConnection))
|
|
{
|
|
ucmd.CommandType = CommandType.StoredProcedure;
|
|
SqlParameter pa = new SqlParameter("OBJECT_ID", SqlDbType.Int, 4); ucmd.Parameters.Add(pa);
|
|
pa = new SqlParameter("lastRecords", SqlDbType.Int, 4); ucmd.Parameters.Add(pa);
|
|
pa = new SqlParameter("constraintsDeactivated", SqlDbType.Bit); ucmd.Parameters.Add(pa);
|
|
pa = new SqlParameter("constraintsActivated", SqlDbType.Bit); ucmd.Parameters.Add(pa);
|
|
pa = new SqlParameter("syncError", SqlDbType.Bit); ucmd.Parameters.Add(pa);
|
|
|
|
if (fromConnection.State == ConnectionState.Closed) fromConnection.Open();
|
|
|
|
foreach (DataRow rtr in dtTables.Rows)
|
|
{
|
|
ucmd.Parameters["OBJECT_ID"].Value = (int)rtr[0];
|
|
dest = rtr[1].ToString();
|
|
var x = rtr.GetChildRows(dtActions.ParentRelations[0]);
|
|
Task = $"Table {dest}";
|
|
System.Console.WriteLine($"*** Step {rtr[1].ToString()}");
|
|
if (x.Length > 0)
|
|
{
|
|
sqlCmdsActivate = new StringBuilder();
|
|
sqlCmdsDeActivate = new StringBuilder();
|
|
foreach (DataRow aa in x)
|
|
{
|
|
sqlCmdsDeActivate.Append($" {aa["ActionDeActivate"].ToString()};");
|
|
sqlCmdsActivate.Append($" {aa["ActionActivate"].ToString()};");
|
|
}
|
|
}
|
|
else
|
|
{
|
|
sqlCmdsActivate = sqlCmdsDeActivate = null;
|
|
}
|
|
|
|
int res = 0;
|
|
if (sqlCmdsDeActivate != null)
|
|
using (var cmd = new System.Data.SqlClient.SqlCommand(sqlCmdsDeActivate.ToString(), toConnection))
|
|
{
|
|
cmd.CommandType = CommandType.Text;
|
|
try
|
|
{
|
|
spLog.SeverityReset();
|
|
res = cmd.ExecuteNonQuery();
|
|
messages.AppendLine($"Success:Query={sqlCmdsDeActivate.ToString()}");
|
|
ucmd.Parameters["constraintsDeactivated"].Value = true;
|
|
spLog.WriteSplunkLog(string.Empty, spLog.splunkSeverity, "constraintsDeactivated", string.Empty);
|
|
}
|
|
catch (System.Exception ex)
|
|
{
|
|
spLog.setErrorException(ex);
|
|
error = true;
|
|
messages.AppendLine(spLog.splunkError);
|
|
ucmd.Parameters["constraintsDeactivated"].Value = false;
|
|
spLog.WriteSplunkLog(string.Empty, spLog.splunkSeverity, "constraintsDeactivated", spLog.splunkError);
|
|
}
|
|
}
|
|
|
|
int cnt = 0;
|
|
qry = LSWLib.SqlCommands.getColumnsQry(fromConnection, dest);
|
|
SqlConnection[] curDests = new SqlConnection[] { toConnection };
|
|
cnt = Bulker.Execute(Task, fromConnection, curDests, qry, CommandType.Text, dest, 0, ref error, ref messages);
|
|
ucmd.Parameters["lastRecords"].Value = cnt;
|
|
|
|
if (sqlCmdsActivate != null)
|
|
using (var cmd = new System.Data.SqlClient.SqlCommand(sqlCmdsActivate.ToString(), toConnection))
|
|
{
|
|
cmd.CommandType = CommandType.Text;
|
|
spLog.KvClear();
|
|
spLog.kvAddCommand(spl.skeys.sqlQuery, cmd);
|
|
try
|
|
{
|
|
spLog.SeverityReset();
|
|
res = cmd.ExecuteNonQuery();
|
|
messages.AppendLine($"Success:Query={sqlCmdsActivate.ToString()}");
|
|
ucmd.Parameters["constraintsActivated"].Value = true;
|
|
spLog.WriteSplunkLog(string.Empty, spLog.splunkSeverity, "constraintsActivated", spLog.splunkError);
|
|
}
|
|
catch (System.Exception ex)
|
|
{
|
|
spLog.setErrorException(ex);
|
|
error = true;
|
|
ucmd.Parameters["constraintsActivated"].Value = false;
|
|
messages.AppendLine(spLog.splunkError);
|
|
spLog.WriteSplunkLog(string.Empty, spLog.splunkSeverity, "constraintsActivated", spLog.splunkError);
|
|
}
|
|
}
|
|
ucmd.Parameters["syncError"].Value = error;
|
|
ucmd.ExecuteNonQuery();
|
|
if (error) break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return error;
|
|
}
|
|
static void Main(string[] args)
|
|
{
|
|
var SourceCoStr = System.Configuration.ConfigurationManager.ConnectionStrings["eDosConnectionString"].ConnectionString;
|
|
var LocalCoStr = System.Configuration.ConfigurationManager.ConnectionStrings["LocalConnectionString"].ConnectionString;
|
|
spLog = new spl("SynceDosLocal");
|
|
Bulker = new LSWLib.Bulker(spLog, true);
|
|
messages = Bulker.messages;
|
|
|
|
messages.AppendLine(spLog.GetStartInfoString());
|
|
try
|
|
{
|
|
using (System.Data.SqlClient.SqlConnection eDosLocalCon = new SqlConnection(LocalCoStr))
|
|
{
|
|
eDosLocalCon.Open();
|
|
int? StationID = Bulker.SqlCommands.ExecProcScalar("Get Station ID", eDosLocalCon, "GetID_LocalStation", true, ref error) as int?;
|
|
using (System.Data.SqlClient.SqlConnection eDosCon = new SqlConnection(SourceCoStr))
|
|
{
|
|
eDosCon.InfoMessage += Connection_InfoMessage;
|
|
DoorloopToDo(eDosCon, LocalCoStr, iMessage, ref error, ref warning, ref messages);
|
|
DoorloopVisits(eDosLocalCon, eDosCon, Bulker.spLog);
|
|
}
|
|
eDosLocalCon.Close();
|
|
}
|
|
}
|
|
catch (System.Exception ex)
|
|
{
|
|
error = true;
|
|
spLog.WriteSplunkLog(string.Empty, spl.iseverity.err, "syncEdosLocal", ex.Message);
|
|
}
|
|
if (error) goto final;
|
|
|
|
final:
|
|
|
|
messages.AppendLine($"Process:End,tm={System.DateTime.Now.ToString("yyyy-MM-ddTHH:mm")}, Errors={error}, Warnings={warning}");
|
|
System.Diagnostics.Debug.WriteLine(messages.ToString());
|
|
Console.WriteLine(messages.ToString());
|
|
|
|
var smtpFrom = System.Configuration.ConfigurationManager.AppSettings["smtpFrom"];
|
|
var smtpServer = System.Configuration.ConfigurationManager.AppSettings["smtpServer"];
|
|
using (System.Net.Mail.MailMessage m = new System.Net.Mail.MailMessage())
|
|
{
|
|
m.From = new System.Net.Mail.MailAddress(smtpFrom);
|
|
m.To.Add("lvandenb@sckcen.be");
|
|
m.Subject = "SynceDosLocal " + (error ? "Error" : "No errors") + (warning ? " Warnings" : "");
|
|
m.IsBodyHtml = true;
|
|
m.Body = Bulker.htmlLog.ToString();
|
|
using (var mc = new System.Net.Mail.SmtpClient(smtpServer)) mc.Send(m);
|
|
}
|
|
spLog.CloseSplunkLog();
|
|
}
|
|
static void DoorloopVisits(SqlConnection coLocal, SqlConnection coCentral, spl spLog)
|
|
{
|
|
const string sStep = "Doorloop Visits";
|
|
int VisitsNew = 0, VisitsAddedEntries = 0, VisitsAddedExits = 0, VisitsSkipped = 0;
|
|
spLog.WriteSplunkLog(sStep, spl.iseverity.info);
|
|
DataSet1 ds = new DataSet1();
|
|
DataSet1.CentralVisitsRow cr;
|
|
try
|
|
{
|
|
using (var ta = new DataSet1TableAdapters.LocalVisitsTableAdapter())
|
|
using (var tc = new DataSet1TableAdapters.CentralVisitsTableAdapter())
|
|
{
|
|
ta.Connection = coLocal;
|
|
tc.Connection = coCentral;
|
|
tc.ClearBeforeFill = false;
|
|
ta.Fill(ds.LocalVisits);
|
|
spLog.KvAdd(spl.skeys.recordsAffected, ds.LocalVisits.Rows.Count);
|
|
foreach (DataSet1.LocalVisitsRow lr in ds.LocalVisits.Rows)
|
|
{
|
|
tc.Fill(ds.CentralVisits, lr.ID_Station, lr.ID_Visit);
|
|
cr = ds.CentralVisits.FindByID_StationID_Visit(lr.ID_Station, lr.ID_Visit);
|
|
if (cr == null)
|
|
{
|
|
VisitsNew++; copyrow(lr, ds.CentralVisits);
|
|
}
|
|
else switch (cr.VisitStatus)
|
|
{
|
|
case 3: lr.syncedEntry = lr.syncedExit = true; VisitsSkipped++; break;
|
|
case 1: if ((lr.VisitStatus & 2) == 2) { copyExit(lr, cr); lr.syncedExit = true; VisitsAddedExits++; } break;
|
|
case 2: if ((lr.VisitStatus & 1) == 1) { copyEntry(lr, cr); lr.syncedEntry = true; VisitsAddedEntries++; } break;
|
|
}
|
|
}
|
|
ta.Update(ds.LocalVisits);
|
|
tc.Update(ds.CentralVisits);
|
|
}
|
|
spLog.KvClear();
|
|
string r = $"Success: {VisitsNew} new , {VisitsAddedEntries} Added Entries, {VisitsAddedExits} Added Exits, {VisitsSkipped} skipped";
|
|
spLog.WriteSplunkLog(sStep, spl.iseverity.info, "end", r);
|
|
}
|
|
catch (System.Exception ex)
|
|
{
|
|
spLog.setErrorException(ex);
|
|
spLog.WriteSplunkLog(sStep, spLog.splunkSeverity, null, spLog.splunkError);
|
|
}
|
|
}
|
|
private static void copyEntry(DataSet1.LocalVisitsRow lr, DataSet1.CentralVisitsRow cr)
|
|
{
|
|
cr["ID_Station"] = lr["ID_Station"];
|
|
cr["ID_Visit"] = lr["ID_Visit"];
|
|
cr["Inst_CODE"] = lr["Inst_CODE"];
|
|
cr["PersID"] = lr["PersID"];
|
|
cr["ID_Task"] = lr["ID_Task"];
|
|
cr["EntryTime"] = lr["EntryTime"];
|
|
cr["ID_EPD"] = lr["ID_EPD"];
|
|
cr["isBG"] = lr["isBG"];
|
|
cr["ENTRY_EPD_CLOCK"] = lr["ENTRY_EPD_CLOCK"];
|
|
}
|
|
private static void copyExit(DataSet1.LocalVisitsRow lr, DataSet1.CentralVisitsRow cr)
|
|
{
|
|
cr["ReturnTime"] = lr["ReturnTime"];
|
|
cr["Hp10Dose"] = lr["Hp10Dose"];
|
|
cr["Hp07Dose"] = lr["Hp07Dose"];
|
|
cr["Hp10Total"] = lr["Hp10Total"];
|
|
cr["Hp07Total"] = lr["Hp07Total"];
|
|
cr["Hp10Peak"] = lr["Hp10Peak"];
|
|
cr["Hp07Peak"] = lr["Hp07Peak"];
|
|
cr["Hp10Time"] = lr["Hp10Time"];
|
|
cr["Hp07Time"] = lr["Hp07Time"];
|
|
cr["QualityData"] = lr["QualityData"];
|
|
cr["K1"] = lr["K1"];
|
|
cr["K2"] = lr["K2"];
|
|
cr["K3"] = lr["K3"];
|
|
cr["K4"] = lr["K4"];
|
|
cr["K5"] = lr["K5"];
|
|
cr["K6"] = lr["K6"];
|
|
cr["SG"] = lr["SG"];
|
|
cr["BC"] = lr["BC"];
|
|
cr["FB"] = lr["FB"];
|
|
cr["HG"] = lr["HG"];
|
|
cr["alarmStatus"] = lr["alarmStatus"];
|
|
cr["otherAlarms"] = lr["otherAlarms"];
|
|
cr["errorStatus"] = lr["errorStatus"];
|
|
cr["operatingStatus"] = lr["operatingStatus"];
|
|
cr["isAlarm"] = lr["isAlarm"];
|
|
cr["isAlarmCleared"] = lr["isAlarmCleared"];
|
|
cr["EXIT_EPD_CLOCK"] = lr["EXIT_EPD_CLOCK"];
|
|
cr["TIME_LOST"] = lr["TIME_LOST"];
|
|
}
|
|
private static DataSet1.CentralVisitsRow copyrow(DataSet1.LocalVisitsRow lr, DataSet1.CentralVisitsDataTable centralVisits)
|
|
{
|
|
DataSet1.CentralVisitsRow cr = centralVisits.NewCentralVisitsRow();
|
|
foreach (DataColumn sc in lr.Table.Columns) cr[sc.ColumnName] = lr[sc.ColumnName];
|
|
centralVisits.AddCentralVisitsRow(cr);
|
|
return cr;
|
|
}
|
|
private static void Connection_InfoMessage(object sender, System.Data.SqlClient.SqlInfoMessageEventArgs e)
|
|
{
|
|
spLog.Connection_InfoMessageLog(e, ref messages);
|
|
}
|
|
}
|
|
|
|
}
|