Dakota Sender erkennt Datenannahmestellen Fehler und verschiebt in Failed Ordner
-> Automatische Fehlererkennung
This commit is contained in:
@@ -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()
|
||||
|
||||
Reference in New Issue
Block a user