- Debug kann auch Fatal Fehler erneut senden

- Schickt nicht direkt per Dakota, sondern legt erstmal in Appsettings.QueueFolderPath Datei an
This commit is contained in:
2024-07-01 12:49:45 +02:00
parent 9d020aa994
commit e886bd7a7f
4 changed files with 79 additions and 84 deletions

View File

@@ -106,6 +106,8 @@ namespace BeWo.View.Detail.Accounting
CriteriaOperator.FromLambda<GkvAbrechnungDC>(gkv => gkv.AbrechnungsZeitraumStart <= filter_start && filter_ende <= gkv.AbrechnungsZeitraumEnde));
}
}
gridView.BestFitColumns();
}
private void UpdateGkvAbrechnungList(IList<GkvAbrechnungDC> dcList)
@@ -120,8 +122,6 @@ namespace BeWo.View.Detail.Accounting
datagrid_gkvAbrechnungen.Visibility = Visibility.Visible;
UpdateDataGridFilter();
gridView.BestFitColumns();
});
@@ -233,7 +233,13 @@ namespace BeWo.View.Detail.Accounting
var state = dc.GetState();
var can_send = state == GkvState.NoSend || state == GkvState.Error;
var can_send = false;
can_send |= state == GkvState.NoSend;
can_send |= state == GkvState.Error;
#if DEBUG
can_send |= state == GkvState.ErrorFatal;
#endif
if (!can_send)
{

View File

@@ -36,10 +36,14 @@ namespace Host
{
public partial class GkvAbrechnungView : Page
{
public const int PROCESS_WAITFOREXIT_MS = 10 * 1000;
private string GETSERVER_URL = "https://support.bewoplaner.de/api/getserver.php?k={0}&t=0";
private string LOGINSERVER_URL = "{0}/Login.aspx";
private string GkvAbrechnungResultFolderPath { get; set; } = ConfigurationManager.AppSettings.Get("GkvAbrechnungResultFolderPath");
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; }
@@ -139,7 +143,7 @@ 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")
if (gkv_request.Tenant == "demo" && gkv_request.Username == "demo" && gkv_request.DebugMode == "fozc4897b6ztvf978AFCRRG244fvFV2532fvf324AF")
return true;
bool successful = false;
@@ -158,7 +162,7 @@ namespace Host
successful = BitConverter.ToBoolean(loginresponse, 0);
}
}
catch(Exception e)
catch (Exception e)
{
}
@@ -168,38 +172,14 @@ namespace Host
private void SendNew(GkvApp8SendNewRequest req)
{
var debug_mode = false;
#if DEBUG
debug_mode = true;
#endif
// Response
var response = new GkvApp8SendNewResponse(false);
bool saved_in_filesystem = false;
bool send_success = false;
var protokoll = req.GkvTransferProtokoll;
string path = string.Empty;
try
{
//var test = System.Security.Principal.WindowsIdentity.GetCurrent().Name;
//throw new DakotaException(test);
// Check Dakota Status
CheckDakotaStatus();
// Save File
path = SaveFileInFileSystem(req, debug_mode);
saved_in_filesystem = true;
if (req.SendDirect)
{
// Dakota Send
SendViaDakota();
}
send_success = true;
SaveFileInFileSystem(req, true);
req.GkvTransferProtokoll.SentSuccess = true;
@@ -207,27 +187,24 @@ namespace Host
}
catch (DakotaException e)
{
req.GkvTransferProtokoll.Fehlerdatum = DateTime.Now;
req.GkvTransferProtokoll.Fehlerlevel = GkvTransferFehlerlevel.Soft;
req.GkvTransferProtokoll.Fehlertitel = "App8";
req.GkvTransferProtokoll.Fehlernachricht = e.Message;
protokoll.Fehlerdatum = DateTime.Now;
protokoll.Fehlerlevel = GkvTransferFehlerlevel.Soft;
protokoll.Fehlertitel = "App8";
protokoll.Fehlernachricht = e.Message;
response.Message = e.Message;
}
catch (Exception e)
{
req.GkvTransferProtokoll.Fehlerdatum = DateTime.Now;
req.GkvTransferProtokoll.Fehlerlevel = GkvTransferFehlerlevel.Soft;
req.GkvTransferProtokoll.Fehlertitel = "App8";
req.GkvTransferProtokoll.Fehlernachricht = e.Message;
protokoll.Fehlerdatum = DateTime.Now;
protokoll.Fehlerlevel = GkvTransferFehlerlevel.Soft;
protokoll.Fehlertitel = "App8";
protokoll.Fehlernachricht = e.Message;
response.Message = e.Message;
}
if (!send_success && saved_in_filesystem)
DeleteFileInFileSystem(path);
response.GkvTransferProtokollDC = req.GkvTransferProtokoll;
response.GkvTransferProtokollDC = protokoll;
SendResponse(response);
}
@@ -244,15 +221,16 @@ namespace Host
// Load XML Info
var results = GetResultFile(req.Tenant);
for (int i = 0; i < tuple_count; i++)
{
var gkv_transfer_oid = req.Oids[i];
if (results.TryGetValue(gkv_transfer_oid, out var fehlerDC))
if (results is object)
for (int i = 0; i < tuple_count; i++)
{
response.Fehler[i] = fehlerDC;
var gkv_transfer_oid = req.Oids[i];
if (results.TryGetValue(gkv_transfer_oid, out var fehlerDC))
{
response.Fehler[i] = fehlerDC;
}
}
}
response.Success = true;
}
@@ -283,7 +261,7 @@ namespace Host
SendResponse(response);
}
private void CheckDakotaStatus() => ExecuteDakota("-s", 0);
private void CheckDakotaStatus() => ExecuteDakota("-s", 0);
private void SendViaDakota() => ExecuteDakota("-e", 0, 1);
private int ExecuteDakota(string arg, params int[] accepted_return_codes)
{
@@ -291,7 +269,10 @@ namespace Host
var process = Process.Start(path, arg);
process.WaitForExit();
var success = process.WaitForExit(PROCESS_WAITFOREXIT_MS);
if (!success)
throw new DakotaException($"Execute {arg} Timeout");
var returncode = process.ExitCode;
@@ -303,21 +284,22 @@ namespace Host
}
private string SaveFileInFileSystem(GkvApp8SendNewRequest req, bool debug_mode = false)
=> SaveFileInFileSystem(req.Tenant, req.GkvTransferProtokoll.IKDatenannahmestelle, req.GkvTransferProtokoll.Transfername,
=> SaveFileInFileSystem(req.GkvTransferProtokoll.GkvTransferProtokollOid.Value, req.Tenant, req.GkvTransferProtokoll.IKDatenannahmestelle, req.GkvTransferProtokoll.Transfername,
req.GkvTransferProtokoll.Nutzdatendatei, req.GkvTransferProtokoll.Auftragsdatei, debug_mode);
private string SaveFileInFileSystem(string tenant, string datenannahmestelle, string transfername, string nutzdaten, string auftragsdatei, bool debug_mode = false)
private string SaveFileInFileSystem(long protokoll_oid, string tenant, string datenannahmestelle, string transfername, string nutzdaten, string auftragsdatei, bool debug_mode = false)
{
string root_path;
string file_path;
if (debug_mode)
{
root_path = $@"C:\GkvAbrechnung\";
file_path = $@"{tenant}-{datenannahmestelle}-{transfername}";
root_path = QueueFolderPath;
file_path = $@"{tenant}_{protokoll_oid}_{datenannahmestelle}_{transfername}";
}
else
{
root_path = $@"C:\GkvAbrechnung\{tenant}\{datenannahmestelle}\";
file_path = $@"{transfername}";
throw new DakotaException("No Debugmode impl");
//root_path = $@"C:\GkvAbrechnung\{tenant}\{datenannahmestelle}\";
//file_path = $@"{transfername}";
}
Directory.CreateDirectory(root_path);
@@ -369,16 +351,19 @@ namespace Host
{
try
{
if (string.IsNullOrWhiteSpace(GkvAbrechnungResultFolderPath))
var path = ResultFolderPath;
if (string.IsNullOrWhiteSpace(path))
throw new DakotaException("Config GkvAbrechnungResultFolderPath is empty or whitespace");
if (string.IsNullOrWhiteSpace(tenant))
throw new DakotaException("Tenant is empty or whitespace");
var path = GkvAbrechnungResultFolderPath;
var folder = path;
var location = Path.GetFullPath(Path.Combine(folder, $"{tenant}.results.xml"));
var folder = Path.Combine(path, tenant);
var location = Path.Combine(folder, "results.xml");
if (!Directory.Exists(folder))
Directory.CreateDirectory(folder);
if (!File.Exists(location))
{
@@ -386,20 +371,19 @@ namespace Host
using (File.Create(location)) { };
return null;
}
var doc = XDocument.Load(location);
var list = doc.Root.Elements("Fehler")
var list = doc?.Root?.Elements("Fehler")?
.Select(GkvApp8FehlerXml.Parse)
.Select(GkvApp8FehlerXml.ToDC)
.ToList();
return list.ToDictionary(dc => dc.Oid);
return list?.ToDictionary(dc => dc.Oid);
}
catch (Exception e)
{
throw new DakotaException("App8 Server Error: " + e.Message);
throw new DakotaException("App8 Server Error: " + e.ToString());
}
}
}

View File

@@ -237,6 +237,7 @@
<add key="OpenrouteServiceApiUrlGeocode" value="https://api.openrouteservice.org/geocode/search" />
<add key="OpenrouteServiceApiKey" value="5b3ce3597851110001cf62484b0917529e9a4008acda819dc06e47e8" />
<add key="GkvAbrechnungResultFolderPath" value="C:\GkvAbrechnung\Results\" />
<add key="GkvAbrechnungQueueFolderPath" value="C:\GkvAbrechnung\Queue\" />
<add key="DakotaPath" value="C:\Program Files (x86)\ITSG\dakotale\dakota30.exe" />
</appSettings>
<devExpress>

View File

@@ -865,6 +865,13 @@ namespace BeWo.Service.ServiceImplementations
return response;
}
if (entity.GkvTransferProtokolle is null)
entity.GkvTransferProtokolle = new List<GkvTransferProtokoll>();
entity.GkvTransferProtokolle.Add(protokoll);
DAOFactory.GenericDAO.Update(entity);
var app8_response = SendApp8SendNewRequest(protokoll, user.LoginName, user.RC2EncryptedHash);
var app8_protokoll = app8_response.GkvTransferProtokollDC;
@@ -888,11 +895,6 @@ namespace BeWo.Service.ServiceImplementations
protokoll.Fehlertitel = "Erstellung (kritisch)";
}
if (entity.GkvTransferProtokolle is null)
entity.GkvTransferProtokolle = new List<GkvTransferProtokoll>();
entity.GkvTransferProtokolle.Add(protokoll);
DAOFactory.GenericDAO.Update(entity);
response.TransferProtokoll = MapperFactory.GkvTransferProtokollDC_GkvTransferprotokoll.MapToNewDC(protokoll);
@@ -910,7 +912,7 @@ namespace BeWo.Service.ServiceImplementations
var state = GkvAbrechnung.GetState(gkvAbrechnung);
if (state == GkvState.Waiting || state == GkvState.OldAndNoFeedback || state == GkvState.Paid || state == GkvState.ErrorFatal)
if (state == GkvState.Waiting || state == GkvState.OldAndNoFeedback || state == GkvState.Paid)
{
return false;
}
@@ -1008,7 +1010,7 @@ namespace BeWo.Service.ServiceImplementations
{
transfernummer = DAOFactory.SearchDAO.GetNextTransfernummer(datenannahmestelle);
}
else if (state == GkvState.Error)
else if (state == GkvState.Error || state == GkvState.ErrorFatal)
{
transfernummer = gkvAbrechnung.GkvTransferProtokolle.Last().Transfernummer;
}
@@ -1076,16 +1078,13 @@ namespace BeWo.Service.ServiceImplementations
var url = "https://app8.bewoplaner.de/service/GkvAbrechnungView.aspx";
#if DEBUG
url = "http://localhost:3777/Host/GkvAbrechnungView.aspx";
#endif
var request = new GkvApp8GetStatusRequest
{
Username = loginName,
Password = hashed_password,
Tenant = MultitenancyOperationContextExt.Current.Tenant,
Oids = new long[updateables_len]
Oids = new long[updateables_len],
DebugMode = "fozc4897b6ztvf978AFCRRG244fvFV2532fvf324AF",
};
for (int id = 0; id < updateables_len; id++)
@@ -1096,16 +1095,21 @@ namespace BeWo.Service.ServiceImplementations
request.Oids[id] = gkv_transfer.GkvTransferProtokollOid.Value;
}
var response_app8_str = SendApp8Request(url, JsonConvert.SerializeObject(request));
GkvApp8GetStatusResponse response_app8;
try
{
var response_app8_str = SendApp8Request(url, JsonConvert.SerializeObject(request));
var response_app8 = JsonConvert.DeserializeObject<GkvApp8GetStatusResponse>(response_app8_str);
if (!response_app8.Success)
response_app8 = JsonConvert.DeserializeObject<GkvApp8GetStatusResponse>(response_app8_str);
}
catch(Exception e)
{
return true;
throw new NotImplementedException("App 8 Anfrage nicht erfolgreich");
}
if (!response_app8.Success)
throw new DakotaException(response_app8.Message);
bool allAreUpToDate = true;
for (int id = 0; id < updateables_len; id++)
{