Veriosion 2.4.16

This commit is contained in:
Daniel Schick 2016-01-06 08:51:27 +00:00
parent b8d4e943e5
commit 8d93750655
6 changed files with 184 additions and 80 deletions

Binary file not shown.

View File

@ -192,7 +192,9 @@ namespace SendNSWMessageService
if ((message.InternalStatus != Message.BSMDStatus.CONFIRMED) &&
(message.InternalStatus != Message.BSMDStatus.SENT))
{
if (message.HIS == Message.NSWProvider.UNDEFINED)
// 28.12.2015: Das über "Overview" eingestellte HIS ist immer "führend" (zumindest aktuell zum Testen)
// if (message.HIS == Message.NSWProvider.UNDEFINED)
message.HIS = core.InitialHIS;
if (core.DefaultReportingPartyId.HasValue)
{

View File

@ -21,18 +21,13 @@ namespace bsmd.dakosy
{
private static ILog _log = LogManager.GetLogger(typeof(Request));
#region send single message
public static bool Send(Message aMessage)
{
bool retval = true;
try
{
/*
Message aMessage = null;
if (dbEntity.GetType().IsAssignableFrom(typeof(Message)))
aMessage = (Message)dbEntity;
else
aMessage = dbEntity.MessageHeader;
*/
{
if (!XtraSendLogic.ShouldSendMessage(aMessage)) return false;
@ -57,75 +52,15 @@ namespace bsmd.dakosy
switch (aMessage.MessageNotificationClass)
{
#region VISIT / TRANSIT
case Message.NotificationClass.VISIT:
case Message.NotificationClass.TRANSIT:
{
eDeclarationMessageInterchangeBodyRequestIdList reqList = new eDeclarationMessageInterchangeBodyRequestIdList();
b.Item = reqList;
reqList.RequestId = new RequestId[1];
reqList.RequestId[0] = new RequestId();
reqList.RequestId[0].MessageHeader = new MessageHeaderType();
reqList.RequestId[0].MessageHeader.MessageReferenceNumber = aMessage.Id.Value.ToString("N");
//reqList.RequestId[0].MessageHeader.CreationTime = DateTime.UtcNow;
//reqList.RequestId[0].MessageHeader.CreationTimeSpecified = true;
reqList.RequestId[0].LocalReferenceNumber = aMessage.MessageCore.Id.Value.ToString("N");
reqList.RequestId[0].OriginatorsVoyageNumber = "tbd";
reqList.RequestId[0].MessageHeader.MessageRecipient = new Participant();
reqList.RequestId[0].MessageHeader.MessageRecipient.ParticipantCode = new ParticipantCode();
reqList.RequestId[0].MessageHeader.MessageRecipient.ParticipantCode.AgencyID = "DAK";
reqList.RequestId[0].MessageHeader.MessageRecipient.ParticipantCode.Value = "NSW";
reqList.RequestId[0].MessageHeader.MessageSender = new Participant();
reqList.RequestId[0].MessageHeader.MessageSender.ParticipantCode = new ParticipantCode();
reqList.RequestId[0].MessageHeader.MessageSender.ParticipantCode.AgencyID = "DAK";
reqList.RequestId[0].MessageHeader.MessageSender.ParticipantCode.Value = "BSM"; // TODO -> Absprache!
reqList.RequestId[0].ReportingParty = new ReportingParty();
reqList.RequestId[0].ReportingParty.City = aMessage.ReportingParty.City;
reqList.RequestId[0].ReportingParty.Country = aMessage.ReportingParty.Country;
reqList.RequestId[0].ReportingParty.EMail = aMessage.ReportingParty.EMail;
reqList.RequestId[0].ReportingParty.Fax = aMessage.ReportingParty.Fax;
reqList.RequestId[0].ReportingParty.FirstName = aMessage.ReportingParty.FirstName;
reqList.RequestId[0].ReportingParty.LastName = aMessage.ReportingParty.LastName;
reqList.RequestId[0].ReportingParty.Name = aMessage.ReportingParty.Name;
reqList.RequestId[0].ReportingParty.Phone = aMessage.ReportingParty.Phone;
reqList.RequestId[0].ReportingParty.PostalCode = aMessage.ReportingParty.PostalCode;
if (!aMessage.ReportingParty.StreetAndNumber.IsNullOrEmpty())
{
int lastBlank = aMessage.ReportingParty.StreetAndNumber.LastIndexOf(' ');
if (lastBlank > 0)
{
reqList.RequestId[0].ReportingParty.StreetName = aMessage.ReportingParty.StreetAndNumber.Substring(0, lastBlank);
reqList.RequestId[0].ReportingParty.StreetNumber = aMessage.ReportingParty.StreetAndNumber.Substring(lastBlank);
}
}
reqList.RequestId[0].ReportingParty.Type = ReportingPartyType.OTHERS; // TBD
reqList.RequestId[0].ReportingParty.TypeSpecified = false; // TBD
if (aMessage.MessageNotificationClass == Message.NotificationClass.TRANSIT)
{
reqList.RequestId[0].REG_TRANSIT = new REG_TRANSIT();
reqList.RequestId[0].REG_TRANSIT.EniNumber = aMessage.MessageCore.ENI;
reqList.RequestId[0].REG_TRANSIT.EtaKielCanal = aMessage.MessageCore.ETA.Value;
reqList.RequestId[0].REG_TRANSIT.ImoNumber = aMessage.MessageCore.IMO;
}
else
{
reqList.RequestId[0].REG_VISIT = new REG_VISIT();
reqList.RequestId[0].REG_VISIT.EniNumber = aMessage.MessageCore.ENI;
reqList.RequestId[0].REG_VISIT.EtaPortOfCall = aMessage.MessageCore.ETA.Value;
reqList.RequestId[0].REG_VISIT.ImoNumber = aMessage.MessageCore.IMO;
reqList.RequestId[0].REG_VISIT.PortOfCall = aMessage.MessageCore.PoC;
}
}
#endregion
Request.CreateVisitTransit(b, aMessage);
break;
default:
eDeclarationMessageInterchangeBodyVisitList vList = new eDeclarationMessageInterchangeBodyVisitList();
b.Item = vList;
vList.Visit = new Visit[1];
vList.Visit[0] = new Visit();
vList.Visit[0].MessageHeader = new MessageHeaderType();
@ -138,7 +73,7 @@ namespace bsmd.dakosy
vList.Visit[0].MessageHeader.MessageSender = new Participant();
vList.Visit[0].MessageHeader.MessageSender.ParticipantCode = new ParticipantCode();
vList.Visit[0].MessageHeader.MessageSender.ParticipantCode.AgencyID = "DAK";
vList.Visit[0].MessageHeader.MessageSender.ParticipantCode.Value = "TBD"; // TODO -> Absprache!
vList.Visit[0].MessageHeader.MessageSender.ParticipantCode.Value = "BSM"; // TODO -> Absprache!
vList.Visit[0].MessageHeader.MessageReferenceNumber = aMessage.Id.Value.ToString("N");
vList.Visit[0].MessageType = MessageType.FULL; // bei DRAFT geht es nicht an das NSW
if (aMessage.MessageCore.IsTransit)
@ -162,7 +97,7 @@ namespace bsmd.dakosy
vList.Visit[0].VesselOperator = new Participant();
vList.Visit[0].VesselOperator.ParticipantCode = new ParticipantCode();
vList.Visit[0].VesselOperator.ParticipantCode.AgencyID = "DAK";
vList.Visit[0].VesselOperator.ParticipantCode.Value = "TBD"; // TBD, das weiß ich auch nicht!
vList.Visit[0].VesselOperator.ParticipantCode.Value = "NSW"; // TBD, das weiß ich auch nicht!
vList.Visit[0].ReportingParty = new ReportingParty();
vList.Visit[0].ReportingParty.City = aMessage.ReportingParty.City;
@ -181,7 +116,7 @@ namespace bsmd.dakosy
vList.Visit[0].ReportingParty.StreetNumber = aMessage.ReportingParty.StreetAndNumber.Substring(aLastBlank);
}
vList.Visit[0].ReportingParty.Type = ReportingPartyType.OTHERS; // TBD
vList.Visit[0].ReportingParty.TypeSpecified = false; // TBD
vList.Visit[0].ReportingParty.TypeSpecified = true;
switch (aMessage.MessageNotificationClass)
{
@ -748,7 +683,7 @@ namespace bsmd.dakosy
{
byte wt = was.Waste[i].WasteType ?? 0;
vList.Visit[0].WAS.Waste[i] = new Waste();
vList.Visit[0].WAS.Waste[i].WasteType = (WasteType)wt;
vList.Visit[0].WAS.Waste[i].WasteType = Request.setWasteType(wt);
vList.Visit[0].WAS.Waste[i].Description = was.Waste[i].WasteDescription;
vList.Visit[0].WAS.Waste[i].DisposalAmountMTQSpecified = was.Waste[i].WasteDisposalAmount_MTQ.HasValue;
vList.Visit[0].WAS.Waste[i].DisposalAmountMTQ = was.Waste[i].WasteDisposalAmount_MTQ ?? 0;
@ -801,5 +736,166 @@ namespace bsmd.dakosy
}
return retval;
}
}
#endregion
#region send complete message core
/// <summary>
/// Diese Methode ist aktuell nicht funktional. Beim Testen hat es durch Ändern der participant-Codes auf einmal
/// auch mit Einzelnachrichten funktioniert, ich behalte das also erstmal bei und verfolge diesen Ansatz (vorerst) nicht weiter.
/// </summary>
/// <param name="messages"></param>
/// <returns></returns>
public static bool SendAll(List<Message> messages)
{
bool result = true;
try
{
// fill eDeclaration class
eDeclarationMessage edm = new eDeclarationMessage();
// edm.Version = "08.15"; // entfernt auf Anraten von Fr. Ebeling 30.6.15
edm.InterchangeHeader = new InterchangeHeaderType();
edm.InterchangeHeader.CreationTime = DateTime.UtcNow;
edm.InterchangeHeader.ExchangeNumber = "tbd";
edm.InterchangeHeader.TestIndicator = Properties.Settings.Default.TestMode;
edm.InterchangeHeader.Sender = new Participant();
edm.InterchangeHeader.Sender.ParticipantCode = new ParticipantCode();
edm.InterchangeHeader.Sender.ParticipantCode.AgencyID = "DAK";
edm.InterchangeHeader.Sender.ParticipantCode.Value = "BSM";
edm.InterchangeHeader.Recipient = new Participant();
edm.InterchangeHeader.Recipient.ParticipantCode = new ParticipantCode();
edm.InterchangeHeader.Recipient.ParticipantCode.AgencyID = "DAK";
edm.InterchangeHeader.Recipient.ParticipantCode.Value = "DAK";
eDeclarationMessageInterchangeBody b = new eDeclarationMessageInterchangeBody();
edm.InterchangeBody = b;
// check if visit/transit apply or list of data messages
if((messages.Count == 1) && ((messages[0].MessageNotificationClass == Message.NotificationClass.VISIT) ||
(messages[0].MessageNotificationClass == Message.NotificationClass.TRANSIT))) {
Request.CreateVisitTransit(b, messages[0]);
} else {
}
// save to temp file
string fileName = string.Format(".{0}.xml", Guid.NewGuid().ToString());
string filePath = string.Format(@"{0}\{1}", Properties.Settings.Default.SFTPOutDir, fileName);
XmlSerializer serializer = new XmlSerializer(typeof(eDeclarationMessage));
using(TextWriter tw = new StreamWriter(filePath)) {
serializer.Serialize(tw, edm);
}
// call sftp client to send
sftp.Put(fileName,
Properties.Settings.Default.TestMode ?
Properties.Settings.Default.RemoteTestIncomingDir : Properties.Settings.Default.RemoteProdIncomingDir);
// remove sent file if not test mode
if (!Properties.Settings.Default.TestMode)
File.Delete(fileName);
}
catch(Exception ex)
{
_log.ErrorFormat("Exception on SendAll:{0}", ex.ToString());
result = false;
}
return result;
}
#endregion
#region CreateVisitTransit
private static void CreateVisitTransit(eDeclarationMessageInterchangeBody b, Message aMessage)
{
eDeclarationMessageInterchangeBodyRequestIdList reqList = new eDeclarationMessageInterchangeBodyRequestIdList();
b.Item = reqList;
reqList.RequestId = new RequestId[1];
reqList.RequestId[0] = new RequestId();
reqList.RequestId[0].MessageHeader = new MessageHeaderType();
reqList.RequestId[0].MessageHeader.MessageReferenceNumber = aMessage.Id.Value.ToString("N");
//reqList.RequestId[0].MessageHeader.CreationTime = DateTime.UtcNow;
//reqList.RequestId[0].MessageHeader.CreationTimeSpecified = true;
reqList.RequestId[0].LocalReferenceNumber = aMessage.MessageCore.Id.Value.ToString("N");
reqList.RequestId[0].OriginatorsVoyageNumber = "tbd";
reqList.RequestId[0].MessageHeader.MessageRecipient = new Participant();
reqList.RequestId[0].MessageHeader.MessageRecipient.ParticipantCode = new ParticipantCode();
reqList.RequestId[0].MessageHeader.MessageRecipient.ParticipantCode.AgencyID = "DAK";
reqList.RequestId[0].MessageHeader.MessageRecipient.ParticipantCode.Value = "NSW";
reqList.RequestId[0].MessageHeader.MessageSender = new Participant();
reqList.RequestId[0].MessageHeader.MessageSender.ParticipantCode = new ParticipantCode();
reqList.RequestId[0].MessageHeader.MessageSender.ParticipantCode.AgencyID = "DAK";
reqList.RequestId[0].MessageHeader.MessageSender.ParticipantCode.Value = "BSM"; // TODO -> Absprache!
reqList.RequestId[0].ReportingParty = new ReportingParty();
reqList.RequestId[0].ReportingParty.City = aMessage.ReportingParty.City;
reqList.RequestId[0].ReportingParty.Country = aMessage.ReportingParty.Country;
reqList.RequestId[0].ReportingParty.EMail = aMessage.ReportingParty.EMail;
reqList.RequestId[0].ReportingParty.Fax = aMessage.ReportingParty.Fax;
reqList.RequestId[0].ReportingParty.FirstName = aMessage.ReportingParty.FirstName;
reqList.RequestId[0].ReportingParty.LastName = aMessage.ReportingParty.LastName;
reqList.RequestId[0].ReportingParty.Name = aMessage.ReportingParty.Name;
reqList.RequestId[0].ReportingParty.Phone = aMessage.ReportingParty.Phone;
reqList.RequestId[0].ReportingParty.PostalCode = aMessage.ReportingParty.PostalCode;
if (!aMessage.ReportingParty.StreetAndNumber.IsNullOrEmpty())
{
int lastBlank = aMessage.ReportingParty.StreetAndNumber.LastIndexOf(' ');
if (lastBlank > 0)
{
reqList.RequestId[0].ReportingParty.StreetName = aMessage.ReportingParty.StreetAndNumber.Substring(0, lastBlank);
reqList.RequestId[0].ReportingParty.StreetNumber = aMessage.ReportingParty.StreetAndNumber.Substring(lastBlank);
}
}
reqList.RequestId[0].ReportingParty.Type = ReportingPartyType.OTHERS; // TBD
reqList.RequestId[0].ReportingParty.TypeSpecified = false; // TBD
if (aMessage.MessageNotificationClass == Message.NotificationClass.TRANSIT)
{
reqList.RequestId[0].REG_TRANSIT = new REG_TRANSIT();
reqList.RequestId[0].REG_TRANSIT.EniNumber = aMessage.MessageCore.ENI;
reqList.RequestId[0].REG_TRANSIT.EtaKielCanal = aMessage.MessageCore.ETA.Value;
reqList.RequestId[0].REG_TRANSIT.ImoNumber = aMessage.MessageCore.IMO;
}
else
{
reqList.RequestId[0].REG_VISIT = new REG_VISIT();
reqList.RequestId[0].REG_VISIT.EniNumber = aMessage.MessageCore.ENI;
reqList.RequestId[0].REG_VISIT.EtaPortOfCall = aMessage.MessageCore.ETA.Value;
reqList.RequestId[0].REG_VISIT.ImoNumber = aMessage.MessageCore.IMO;
reqList.RequestId[0].REG_VISIT.PortOfCall = aMessage.MessageCore.PoC;
}
}
private static WasteType setWasteType(byte wasteTypeValue)
{
switch (wasteTypeValue)
{
case 1:
return WasteType.WASTE_OILS_SLUDGE_1;
case 2:
return WasteType.WASTE_OILS_BILGE_WATER_2;
case 3:
return WasteType.WASTE_OILS_OTHERS_3;
case 4:
return WasteType.GARBAGE_FOOD_WASTE_4;
case 5:
return WasteType.GARBAGE_PLASTIC_5;
case 6:
return WasteType.GARBAGE_OTHER_6;
case 7:
return WasteType.SEWAGE_7;
case 8:
return WasteType.CARGO_ASSOCIATED_WASTE_8;
default:
return WasteType.CARGO_RESIDUES_9;
}
}
#endregion
}
}

View File

@ -39,10 +39,13 @@ namespace bsmd.dakosy
foreach (string inputFile in Directory.GetFiles(localDir))
{
if (!Response.Read(inputFile))
{
_log.ErrorFormat("Error reading input file {0}", inputFile);
}
else
{
File.Delete(inputFile); // alternativ: move to archive folder
}
// remote Dateien löschen
sftp.RemoveProcessedFile(remoteDir, Path.GetFileName(inputFile));
}
@ -147,6 +150,9 @@ namespace bsmd.dakosy
aMessage.InternalStatus = Message.BSMDStatus.CONFIRMED; // ? Ok?
break;
default:
_log.InfoFormat("unknown response type {0}", ediResponse.ResponseType);
break;
}
DBManager.Instance.Save(aMessage);

View File

@ -2,6 +2,6 @@
[assembly: AssemblyCompany("Informatikbüro Daniel Schick")]
[assembly: AssemblyProduct("BSMD NSW interface")]
[assembly: AssemblyInformationalVersion("2.4.14")]
[assembly: AssemblyInformationalVersion("2.4.16")]
[assembly: AssemblyCopyright("Copyright © 2014-2015 Informatikbüro Daniel Schick. All rights reserved.")]
[assembly: AssemblyTrademark("")]

View File

@ -1,4 +1,4 @@
using System.Reflection;
[assembly: AssemblyVersion("2.4.14.*")]
[assembly: AssemblyVersion("2.4.16.*")]