Dakota Sender erkennt Datenannahmestellen Fehler und verschiebt in Failed Ordner

-> Automatische Fehlererkennung
This commit is contained in:
2024-07-24 18:56:50 +02:00
parent 515d1fb399
commit 02d71f09ef

View File

@@ -59,7 +59,8 @@ namespace DakotaSender
PrintLine("-------------------");
}
static void PrintLine(string line = null)
static void PrintLine() => PrintLine(null);
static void PrintLine(string line)
{
PrintWithTime(line + "\n", !time_in_line);
@@ -78,6 +79,13 @@ namespace DakotaSender
else
Console.Write(line);
}
static void PrintFileInfo(DakotaSystemFile file)
{
PrintLine($"Verarbeite Datei: {file.SourceNutzdatendatei.Name}");
PrintLine($"- Tenant: {file.Tenant}");
PrintLine($"- Protokoll Oid: {file.ProtokollOid}");
PrintLine($"- Datenannahmestelle: {file.Datenannahmestelle}");
}
static void CheckDakotaStatus()
{
@@ -176,64 +184,65 @@ namespace DakotaSender
return toCheck.Any() ? toCheck : null;
}
static void TryProcessFile(DakotaSystemFile file)
{
string error;
bool copied = false;
try
{
var protokoll_oid = file.ProtokollOid;
PrintLine($"Verarbeite Datei: {file.SourceNutzdatendatei.Name}");
PrintLine($"- Tenant: {file.Tenant}");
PrintLine($"- Protokoll Oid: {protokoll_oid}");
PrintLine($"- Datenannahmestelle: {file.Datenannahmestelle}");
copied = true;
CopyFileToDestination(file);
Print("Sende via Dakota. ");
var code = ExecuteDakota("-x");
if (AcceptSendCodes.Contains(code))
{
PrintLine($"Ok.");
DeleteQueueFile(file);
}
else
{
if(code == RC_DAKOTA_ALREADY_LOADED)
{
PrintLine($"Verarbeitung fehlgeschlagen. Dakota läuft bereits.");
PrintLine("Ignoriere Verarbeitung aktuell. Versuche im nächsten Programm Aufruf erneut.");
DeleteDakotaFile(file);
}
else
{
var error = $"Verarbeitung fehlgeschlagen. Statuscode {code} wird nicht akzeptiert.";
PrintLine(error);
MoveQueueToFailed(file);
DeleteDakotaFile(file);
CreateResultXmlFile(file, error);
}
}
error = ProcessFile(file, out copied);
}
catch (Exception e)
{
PrintLine($"Verarbeitung fehlgeschlagen. Exception: {e}");
error = e.ToString();
}
if (error is string)
{
PrintLine(error);
MoveQueueToFailed(file);
if (copied)
DeleteDakotaFile(file);
CreateResultXmlFile(file, error);
}
}
static string ProcessFile(DakotaSystemFile file, out bool copied)
{
copied = false;
PrintFileInfo(file);
if (!IsDakotaFolderDatenannahmestelleValid(file.Datenannahmestelle))
return "Datenannahmestelle unbekannt.";
CopyFileToDestination(file);
copied = true;
Print("Sende via Dakota. ");
var code = ExecuteDakota("-x");
if (code == RC_DAKOTA_ALREADY_LOADED)
{
PrintLine($"Verarbeitung fehlgeschlagen. Dakota läuft bereits.");
PrintLine("Ignoriere Verarbeitung aktuell. Versuche im nächsten Programm Aufruf erneut.");
DeleteDakotaFile(file);
return null;
}
if (!AcceptSendCodes.Contains(code))
return $"Verarbeitung fehlgeschlagen. Statuscode {code} wird nicht akzeptiert.";
PrintLine($"Ok.");
DeleteQueueFile(file);
return null;
}
static void CreateResultXmlFile(DakotaSystemFile file, string error)
{
Print("Speichere Fehler als Xml. ");
@@ -338,6 +347,19 @@ namespace DakotaSender
}
}
static bool IsDakotaFolderDatenannahmestelleValid(string datenannahmestelle)
{
try
{
_ = GetDakotaFolderDatenannahmestelle(datenannahmestelle);
return true;
}
catch (Exception e)
{
return false;
}
}
static DirectoryInfo GetDakotaFolderDatenannahmestelle(string datenannahmestelle)
{
var folder = new DirectoryInfo(Path.Combine(GetDakotaFolder().FullName, "TP5Daten", datenannahmestelle));
@@ -359,7 +381,7 @@ namespace DakotaSender
return dirinfo;
}
static string GetLogPath()
=> ConfigurationManager.AppSettings.Get("LogPath") ?? @"C:\GkvAbrechnung\Sender\log.txt";
static int GetProcessWaitForExitMs()