App8 aspx Seite verarbeitet einzelne Xml Fehler, nicht mehr eine ganze Sammlung

This commit is contained in:
2024-07-03 16:45:48 +02:00
parent 7bea3c82d8
commit 9aaa3a1c21

View File

@@ -31,6 +31,7 @@ using Dakota.Models;
using System.Xml;
using System.Xml.Linq;
using System.Diagnostics;
using System.Xml.Serialization;
namespace Host
{
@@ -44,8 +45,6 @@ namespace Host
private string ResultFolderPath { get; set; } = ConfigurationManager.AppSettings.Get("GkvAbrechnungResultFolderPath");
private string QueueFolderPath { get; set; } = ConfigurationManager.AppSettings.Get("GkvAbrechnungQueueFolderPath");
private string DakotaPath { get; set; } = ConfigurationManager.AppSettings.Get("DakotaPath");
public GkvApp8Request GkvRequest { get; set; }
protected void Page_Load(object sender, EventArgs e)
@@ -135,6 +134,12 @@ namespace Host
private bool TryLogin() => TryLogin(GkvRequest);
private bool TryLogin(GkvApp8Request gkv_request)
{
if (gkv_request.Tenant == "demo" && gkv_request.Username == "demo" && gkv_request.DebugMode == "fozc4897b6ztvf978AFCRRG244fvFV2532fvf324AF")
{
gkv_request.Tenant = "7375324044";
return true;
}
var server = GetServerFromTenant(gkv_request.Tenant);
var loginurl = string.Format(LOGINSERVER_URL, server);
@@ -143,9 +148,6 @@ namespace Host
loginurl = string.Format(LOGINSERVER_URL, "http://localhost:3777/Host");
#endif
if (gkv_request.Tenant == "demo" && gkv_request.Username == "demo" && gkv_request.DebugMode == "fozc4897b6ztvf978AFCRRG244fvFV2532fvf324AF")
return true;
bool successful = false;
try
@@ -219,7 +221,7 @@ namespace Host
try
{
// Load XML Info
var results = GetResultFile(req.Tenant);
var results = GetResultFile(GkvRequest.Tenant);
if (results is object)
for (int i = 0; i < tuple_count; i++)
@@ -261,28 +263,6 @@ namespace Host
SendResponse(response);
}
private void CheckDakotaStatus() => ExecuteDakota("-s", 0);
private void SendViaDakota() => ExecuteDakota("-e", 0, 1);
private int ExecuteDakota(string arg, params int[] accepted_return_codes)
{
var path = DakotaPath;
var process = Process.Start(path, arg);
var success = process.WaitForExit(PROCESS_WAITFOREXIT_MS);
if (!success)
throw new DakotaException($"Execute {arg} Timeout");
var returncode = process.ExitCode;
if (accepted_return_codes is object && accepted_return_codes.Length > 0)
if (accepted_return_codes.All(x => x != returncode))
throw new DakotaException($"Execute {arg} rc: " + returncode);
return returncode;
}
private string SaveFileInFileSystem(GkvApp8SendNewRequest req, bool debug_mode = false)
=> SaveFileInFileSystem(req.GkvTransferProtokoll.GkvTransferProtokollOid.Value, req.Tenant, req.GkvTransferProtokoll.IKDatenannahmestelle, req.GkvTransferProtokoll.Transfername,
req.GkvTransferProtokoll.Nutzdatendatei, req.GkvTransferProtokoll.Auftragsdatei, debug_mode);
@@ -319,12 +299,6 @@ namespace Host
return finalpath;
}
private void DeleteFileInFileSystem(string finalpath)
{
File.Delete(finalpath);
File.Delete(finalpath + ".auf");
}
private string GetServerFromTenant(string tenant)
{
try
@@ -359,32 +333,56 @@ namespace Host
if (string.IsNullOrWhiteSpace(tenant))
throw new DakotaException("Tenant is empty or whitespace");
var folder = path;
var location = Path.GetFullPath(Path.Combine(folder, $"{tenant}.results.xml"));
var folder = new DirectoryInfo(Path.Combine(path, tenant));
if (!Directory.Exists(folder))
Directory.CreateDirectory(folder);
if (!File.Exists(location))
if (!folder.Exists)
{
Directory.CreateDirectory(folder);
using (File.Create(location)) { };
return null;
}
var dict = new Dictionary<long, GkvApp8FehlerDC>();
foreach (var file in folder.GetFiles("*.xml"))
{
var xml = GetFehlerXmlFromFile(file);
var doc = XDocument.Load(location);
if (xml is null)
continue;
var list = doc?.Root?.Elements("Fehler")?
.Select(GkvApp8FehlerXml.Parse)
.Select(GkvApp8FehlerXml.ToDC)
.ToList();
return list?.ToDictionary(dc => dc.Oid);
dict.Add(xml.Oid, GkvApp8FehlerXml.ToDC(xml));
}
return dict;
}
catch (DakotaException e)
{
throw e;
}
catch (Exception e)
{
throw new DakotaException("App8 Server Error: " + e.ToString());
}
}
private GkvApp8FehlerXml GetFehlerXmlFromFile(FileSystemInfo file)
{
if (!file.Exists)
return null;
using (var stream = File.OpenRead(file.FullName))
{
var serializer = new XmlSerializer(typeof(GkvApp8FehlerXml));
return serializer.Deserialize(stream) as GkvApp8FehlerXml;
}
try
{
}
catch (Exception)
{
}
return null;
}
}
}