Merge branch 'feature/sending_7.13' into develop

This commit is contained in:
Daniel Schick 2023-08-09 07:01:57 +02:00
commit 1643a22277
9 changed files with 195 additions and 59 deletions

View File

@ -292,9 +292,7 @@ namespace SendNSWMessageService
// external processing for dbh
bsmd.dbh.MessageController.SendAndReceive();
List<MessageCore> coresMarkedForStatusQuery = DBManager.Instance.GetMessageCoresWithNSWStatusFlag();
foreach (MessageCore core in coresMarkedForStatusQuery)
foreach (MessageCore core in DBManager.Instance.GetMessageCoresWithNSWStatusFlag())
{
core.QueryNSWStatus = false; // reset flag
Status aStatus = new Status(core);

View File

@ -97,7 +97,7 @@ namespace bsmd.dakosy
}
public static void TransmitAll(string remoteDir, string localDir, Direction direction, string sessionName)
private static Process StartWinSCPProcess()
{
Process winscp = new Process();
winscp.StartInfo.FileName = Properties.Settings.Default.WINSCPFullPath;
@ -107,12 +107,24 @@ namespace bsmd.dakosy
winscp.StartInfo.RedirectStandardOutput = true;
winscp.StartInfo.RedirectStandardError = true;
winscp.StartInfo.CreateNoWindow = true;
winscp.EnableRaisingEvents = true;
winscp.OutputDataReceived += (s, e) => { if (!e.Data.IsNullOrEmpty()) _log.Debug(e.Data); };
winscp.ErrorDataReceived += (s, e) => { if (!e.Data.IsNullOrEmpty()) _log.Warn(e.Data); };
winscp.Start();
winscp.BeginErrorReadLine();
winscp.BeginOutputReadLine();
return winscp;
}
public static void TransmitAll(string remoteDir, string localDir, Direction direction, string openCommand)
{
Process winscp = StartWinSCPProcess();
// Feed in the scripting commands
winscp.StandardInput.WriteLine("option batch abort");
winscp.StandardInput.WriteLine("option confirm off");
winscp.StandardInput.WriteLine("open " + sessionName);
winscp.StandardInput.WriteLine(openCommand);
winscp.StandardInput.WriteLine("lcd " + localDir);
// winscp.StandardInput.WriteLine("ls");
if (remoteDir != null)
@ -121,62 +133,29 @@ namespace bsmd.dakosy
winscp.StandardInput.WriteLine("get *.xml");
if(direction == Direction.OUTGOING)
winscp.StandardInput.WriteLine("put *.xml");
// move back up since winscp session remembers the last folder
winscp.StandardInput.WriteLine("cd ..");
winscp.StandardInput.WriteLine("cd ..");
winscp.StandardInput.Close();
// Collect all output
string output = winscp.StandardOutput.ReadToEnd();
_log.Debug(output);
output = winscp.StandardError.ReadToEnd();
if(!output.Trim().IsNullOrEmpty())
_log.Warn(output);
// Wait until WinSCP finishes
winscp.WaitForExit();
}
public static void RemoveProcessedFile(string remoteDir, string filename, string sessionName)
public static void RemoveProcessedFile(string remoteDir, string filename, string openCommand)
{
Process winscp = new Process();
winscp.StartInfo.FileName = Properties.Settings.Default.WINSCPFullPath;
winscp.StartInfo.Arguments = "/xmllog=\"" + Properties.Settings.Default.SFTPLog + "\"";
winscp.StartInfo.UseShellExecute = false;
winscp.StartInfo.RedirectStandardInput = true;
winscp.StartInfo.RedirectStandardOutput = true;
winscp.StartInfo.RedirectStandardError = true;
winscp.StartInfo.CreateNoWindow = true;
winscp.Start();
Process winscp = StartWinSCPProcess();
// Feed in the scripting commands
winscp.StandardInput.WriteLine("option batch abort");
winscp.StandardInput.WriteLine("option confirm off");
winscp.StandardInput.WriteLine("open " + sessionName);
winscp.StandardInput.WriteLine(openCommand);
// winscp.StandardInput.WriteLine("ls");
if (remoteDir != null)
winscp.StandardInput.WriteLine("cd " + remoteDir);
winscp.StandardInput.WriteLine("rm " + filename);
if (remoteDir != null)
{
// move back up since winscp session remembers the last folder
winscp.StandardInput.WriteLine("cd ..");
winscp.StandardInput.WriteLine("cd ..");
}
winscp.StandardInput.Close();
// Collect all output
string output = winscp.StandardOutput.ReadToEnd();
_log.Debug(output);
output = winscp.StandardError.ReadToEnd();
if (!output.Trim().IsNullOrEmpty())
_log.Warn(output);
// Wait until WinSCP finishes
winscp.WaitForExit();
}
}
}

View File

@ -6,7 +6,7 @@ using System;
using System.IO;
using bsmd.database;
using System.Linq;
namespace bsmd.dbh
{
@ -117,7 +117,7 @@ namespace bsmd.dbh
public static void SendAndReceive()
{
// sent unsent messages in output folder
bsmd.dakosy.SFtp.TransmitAll(Properties.Settings.Default.RemoteIncomingFolder, Properties.Settings.Default.OutgoingFolder, dakosy.SFtp.Direction.OUTGOING, Properties.Settings.Default.SFTPSessionName);
bsmd.dakosy.SFtp.TransmitAll(Properties.Settings.Default.RemoteIncomingFolder, Properties.Settings.Default.OutgoingFolder, dakosy.SFtp.Direction.OUTGOING, Properties.Settings.Default.SFTPOpenCommand);
// move files from output folder to archive folder
foreach(string sentFile in Directory.GetFiles(Properties.Settings.Default.OutgoingFolder))
{
@ -130,7 +130,7 @@ namespace bsmd.dbh
// receive files from remote host
// SFTP verbindung öffnen und alle Dateien herunterladen
bsmd.dakosy.SFtp.TransmitAll(Properties.Settings.Default.RemoteOutgoingFolder, Properties.Settings.Default.IncomingFolder, dakosy.SFtp.Direction.INCOMING, Properties.Settings.Default.SFTPSessionName);
bsmd.dakosy.SFtp.TransmitAll(Properties.Settings.Default.RemoteOutgoingFolder, Properties.Settings.Default.IncomingFolder, dakosy.SFtp.Direction.INCOMING, Properties.Settings.Default.SFTPOpenCommand);
foreach (string inputFile in Directory.GetFiles(Properties.Settings.Default.IncomingFolder))
{
@ -151,7 +151,7 @@ namespace bsmd.dbh
File.Delete(inputFile);
}
// remote Dateien löschen
bsmd.dakosy.SFtp.RemoveProcessedFile(Properties.Settings.Default.RemoteOutgoingFolder, Path.GetFileName(inputFile), Properties.Settings.Default.SFTPSessionName);
bsmd.dakosy.SFtp.RemoveProcessedFile(Properties.Settings.Default.RemoteOutgoingFolder, Path.GetFileName(inputFile), Properties.Settings.Default.SFTPOpenCommand);
}
}

View File

@ -89,15 +89,17 @@ namespace bsmd.dbh.Properties {
[global::System.Configuration.ApplicationScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("dbh")]
public string SFTPSessionName {
public string SFTPOpenCommand {
get {
return ((string)(this["SFTPSessionName"]));
return ((string)(this["SFTPOpenCommand"]));
}
}
[global::System.Configuration.ApplicationScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("")]
[global::System.Configuration.DefaultSettingValueAttribute("sftp://f-000333@fx.dbh.de/ -hostkey=\"ecdsa-sha2-nistp256 256 453JBU8hAOOQ7wEvmTw5" +
"fXsUyZsVCSufyATbGKLh+ak\" -privatekey=\"C:\\work\\Services\\SendNSWMessageService\\dbh" +
"\\sshkeynp.ppk\"")]
public string IncomingErrorFolder {
get {
return ((string)(this["IncomingErrorFolder"]));

View File

@ -23,11 +23,11 @@
<Setting Name="RemoteOutgoingFolder" Type="System.String" Scope="Application">
<Value Profile="(Default)">test/dbh_2_bsmd</Value>
</Setting>
<Setting Name="SFTPSessionName" Type="System.String" Scope="Application">
<Setting Name="SFTPOpenCommand" Type="System.String" Scope="Application">
<Value Profile="(Default)">dbh</Value>
</Setting>
<Setting Name="IncomingErrorFolder" Type="System.String" Scope="Application">
<Value Profile="(Default)" />
<Value Profile="(Default)">sftp://f-000333@fx.dbh.de/ -hostkey="ecdsa-sha2-nistp256 256 453JBU8hAOOQ7wEvmTw5fXsUyZsVCSufyATbGKLh+ak" -privatekey="C:\work\Services\SendNSWMessageService\dbh\sshkeynp.ppk"</Value>
</Setting>
<Setting Name="SenderMaersk" Type="System.String" Scope="Application">
<Value Profile="(Default)">00006017</Value>

View File

@ -778,7 +778,7 @@ namespace bsmd.dbh
rootPre.TankerDetails.ConditionCargoBallastTanks = (TankCondition)pre72h.ConditionCargoBallastTanks.Value;
if (pre72h.NatureOfCargo != string.Empty)
rootPre.TankerDetails.TypeOfCargo = pre72h.NatureOfCargo;
bool sendVolume = pre72h.VolumeOfCargo.HasValue && (pre72h.VolumeOfCargo.Value > 0);
bool sendVolume = pre72h.VolumeOfCargo > 0;
rootPre.TankerDetails.VolumeOfCargo_TNESpecified = sendVolume;
if (sendVolume)
rootPre.TankerDetails.VolumeOfCargo_TNE = Decimal.Round((decimal)(pre72h.VolumeOfCargo.Value), 3);

View File

@ -129,7 +129,7 @@ namespace bsmd.dbh
case Response.RootType.RESET:
if(root.ReportingClassesResetted?.ReportingClass.Length > 0)
{
_log.InfoFormat("Message {0} RESET confirmed, {1} messages", sentMessage.MessageNotificationClassDisplay, root.Messages.Length); ;
_log.InfoFormat("Message {0} RESET confirmed, {1} messages", sentMessage.MessageNotificationClassDisplay, root.Messages?.Length);
sentMessage.SendSuccess = false; // bestätigter Reset setzt grünen Buppel zurück
sentMessage.Status = Message.MessageStatus.ACCEPTED;
sentMessage.InternalStatus = Message.BSMDStatus.CONFIRMED;

View File

@ -28,11 +28,11 @@
<setting name="RemoteOutgoingFolder" serializeAs="String">
<value>test/dbh_2_bsmd</value>
</setting>
<setting name="SFTPSessionName" serializeAs="String">
<setting name="SFTPOpenCommand" serializeAs="String">
<value>dbh</value>
</setting>
<setting name="IncomingErrorFolder" serializeAs="String">
<value />
<value>sftp://f-000333@fx.dbh.de/ -hostkey="ecdsa-sha2-nistp256 256 453JBU8hAOOQ7wEvmTw5fXsUyZsVCSufyATbGKLh+ak" -privatekey="C:\work\Services\SendNSWMessageService\dbh\sshkeynp.ppk"</value>
</setting>
<setting name="SenderMaersk" serializeAs="String">
<value>00006017</value>

View File

@ -0,0 +1,157 @@
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,Log4net"/>
<sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<section name="SendNSWMessageService.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" />
<section name="bsmd.dakosy.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" />
<section name="bsmd.dbh.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" />
<section name="bsmd.hisnord.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" />
<section name="bsmd.status.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" />
</sectionGroup>
</configSections>
<log4net>
<root>
<level value="INFO" />
<appender-ref ref="LogFileAppender" />
</root>
<appender name="LogFileAppender" type="log4net.Appender.RollingFileAppender" >
<param name="File" value="C:\\work\\Logs\\log-NSWMessageServiceTest.txt" />
<param name="AppendToFile" value="true" />
<rollingStyle value="Size" />
<maxSizeRollBackups value="10" />
<maximumFileSize value="2MB" />
<staticLogFileName value="true" />
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="%date [%thread] %-5level [%logger] - %message%newline" />
</layout>
</appender>
</log4net>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
</startup>
<applicationSettings>
<bsmd.status.Properties.Settings>
<setting name="login" serializeAs="String">
<value>BSMD-PROD</value>
</setting>
<setting name="password" serializeAs="String">
<value>t7g7fDP18#7GQw#D</value>
</setting>
<setting name="url" serializeAs="String">
<value>https://www.his-nord.de/HIS-Service/StatusInfoNSW.jsp</value>
</setting>
</bsmd.status.Properties.Settings>
<SendNSWMessageService.Properties.Settings>
<setting name="ConnectionString" serializeAs="String">
<value>Initial Catalog=nswtest;Data Source=192.168.2.24\SQLEXPRESS;Uid=dfuser;pwd=dfpasswd;Persist Security Info=False;Connection Reset=false</value>
</setting>
<setting name="SleepSeconds" serializeAs="String">
<value>30</value>
</setting>
</SendNSWMessageService.Properties.Settings>
<bsmd.dakosy.Properties.Settings>
<setting name="SFTPSessionName" serializeAs="String">
<value>dakosy</value>
</setting>
<setting name="SFTPLog" serializeAs="String">
<value>c:\temp\sftp_log.xml</value>
</setting>
<setting name="SFTPOutDir" serializeAs="String">
<value>c:\work\dakosy\out</value>
</setting>
<setting name="SFTPInDir" serializeAs="String">
<value>c:\work\dakosy\in</value>
</setting>
<setting name="TestMode" serializeAs="String">
<value>True</value>
</setting>
<setting name="WINSCPFullPath" serializeAs="String">
<value>c:\work\Tools\WinSCP\WinSCP.com</value>
</setting>
<setting name="RemoteProdIncomingDir" serializeAs="String">
<value>in/prod/ed02</value>
</setting>
<setting name="RemoteTestIncomingDir" serializeAs="String">
<value>in/test/ed02</value>
</setting>
<setting name="RemoteProdOutgoingDir" serializeAs="String">
<value>out/prod</value>
</setting>
<setting name="RemoteTestOutgoingDir" serializeAs="String">
<value>out/test</value>
</setting>
</bsmd.dakosy.Properties.Settings>
<bsmd.dbh.Properties.Settings>
<setting name="bsmd_dbh_DBHWebReference_Dbh_Osis_Answ_Ws" serializeAs="String">
<value>https://edi-gate.dbh.de/bsmd-soap</value>
</setting>
<setting name="Sender" serializeAs="String">
<value>00003050</value>
<!-- Maersk produktiv value>00000768</value-->
<!-- BSMD-PROD value>00003050</value-->
</setting>
<setting name="SenderMaersk" serializeAs="String">
<value>00006017</value>
</setting>
<setting name="OutgoingFolder" serializeAs="String">
<value>C:\temp\dbh\out</value>
</setting>
<setting name="OutgoingArchiveFolder" serializeAs="String">
<value>C:\temp\dbh\out_archive</value>
</setting>
<setting name="IncomingFolder" serializeAs="String">
<value>C:\temp\dbh\in</value>
</setting>
<setting name="IncomingArchiveFolder" serializeAs="String">
<value>C:\temp\dbh\in_archive</value>
</setting>
<setting name="IncomingErrorFolder" serializeAs="String">
<value>C:\temp\dbh\in_error</value>
</setting>
<setting name="RemoteIncomingFolder" serializeAs="String">
<value>test/bsmd_2_dbh</value>
</setting>
<setting name="RemoteOutgoingFolder" serializeAs="String">
<value>test/dbh_2_bsmd</value>
</setting>
<setting name="SFTPOpenCommand" serializeAs="String">
<value>open sftp://f-000333@fx.dbh.de/ -hostkey="ecdsa-sha2-nistp256 256 453JBU8hAOOQ7wEvmTw5fXsUyZsVCSufyATbGKLh+ak" -privatekey="C:\git_lager\git_bsmd\bsmd.dbh\misc\sshkeynp.ppk"</value>
</setting>
</bsmd.dbh.Properties.Settings>
<bsmd.hisnord.Properties.Settings>
<setting name="TransmitterRoot" serializeAs="String">
<value>C:\work\HIS-NORD\Test</value>
</setting>
<setting name="OutputDir" serializeAs="String">
<value>IMP</value>
</setting>
<setting name="Transmitter" serializeAs="String">
<value>client.bat</value>
</setting>
<setting name="BatchTimeoutMins" serializeAs="String">
<value>1</value>
</setting>
<setting name="ResultDir" serializeAs="String">
<value>RESULTS</value>
</setting>
<setting name="AnswerDir" serializeAs="String">
<value>ANSWERS</value>
</setting>
<setting name="AnswerArchiveDir" serializeAs="String">
<value>ANSWERS_DONE</value>
</setting>
<setting name="AnswerCorruptDir" serializeAs="String">
<value>ANSWERS_CORRUPT</value>
</setting>
</bsmd.hisnord.Properties.Settings>
</applicationSettings>
<system.web>
<webServices>
<!-- zum debuggen -->
<soapExtensionTypes>
<add type="bsmd.database.SoapLoggerExtension, bsmd.database" priority="1" group="0" />
</soapExtensionTypes>
</webServices>
</system.web>
</configuration>