This commit is contained in:
2020-07-13 18:37:12 +00:00
parent e84b5b6bd5
commit 2bbcdb040c
4 changed files with 70 additions and 15 deletions

View File

@@ -31,6 +31,8 @@ namespace GZTW.AyaNova.BLL
ClientNotificationList nl = ClientNotificationList.GetList();
if (nl.Count == 0) return;
NotifyDeliveryLog.LogSMTPDeliveryMessage("Found " + nl.Count.ToString() + " Client notification messages awaiting delivery");
// Create a mailman object for sending email.
MailMan mailman = new MailMan();
mailman.UnlockComponent("SAyanovaMAILQ_46WCmUg3lQ1i");
@@ -57,8 +59,12 @@ namespace GZTW.AyaNova.BLL
if(AyaBizUtils.GlobalSettings.SMTPRetry)
return;
}
//case 3808 prevent dupes in single delivery tranche
//If this doesn't prevent it, it means it's duping in separate runs of this method
// so would need an external static location to store a limited number of dupes in some kind of
//queue, probably in ayabizutils with everything else
System.Collections.Generic.List<string> Hashes = new System.Collections.Generic.List<string>();
foreach (ClientNotificationList.ClientNotificationListInfo info in nl)
{
@@ -86,6 +92,21 @@ namespace GZTW.AyaNova.BLL
//case 1601
string ToAddress = sMessageFields[3];
//case 3808
string NotifySummary =string.Empty;
NotifySummary = ToAddress + "|" + email.Subject;
if (nFieldCount > 4)
{
NotifySummary += "|woid:" + sMessageFields[5];
}
if (nFieldCount > 5)
{
NotifySummary += "|woid:" + sMessageFields[5];
}
NotifyDeliveryLog.LogSMTPDeliveryMessage("Preparing to send client notification: " + NotifySummary);
if (ToAddress.Contains(";")) ToAddress = ToAddress.Replace(";", ",");
if (ToAddress.Contains(","))
@@ -100,6 +121,8 @@ namespace GZTW.AyaNova.BLL
string sWOID = sMessageFields[5];
if (!string.IsNullOrEmpty(sWOID))
{
NotifySummary += "|woid:" + sWOID;//case 3808
Guid woid = new Guid(sWOID);
//attach a workorder
Report r = Report.GetItem(new Guid(sMessageFields[6]));
@@ -113,6 +136,7 @@ namespace GZTW.AyaNova.BLL
else if (r.ReportKey == "WorkorderQuoteDetailed")
o = WorkorderQuoteDetailedReportData.GetItem(woid);
NotifySummary += "|reportkey:" + r.ReportKey + "|reportid:"+sMessageFields[6];//case 3808
//ms.toarray = byte array from memory stream
@@ -121,6 +145,23 @@ namespace GZTW.AyaNova.BLL
}
}
//case 3808
var hash = CheckSum(email.Body + NotifySummary);
NotifySummary += "|hash:" + hash;
if (!Hashes.Contains(hash))
{
Hashes.Add(hash);
}
else
{
NotifyDeliveryLog.LogSMTPDeliveryMessage("Skipping duplicate: " + NotifySummary);
ClientNotifyEvent.DeleteItem(n.ID);
continue;
}
NotifyDeliveryLog.LogSMTPDeliveryMessage("Delivering: " + NotifySummary);
// Send mail.
bool success;
success = mailman.SendEmail(email);
@@ -148,6 +189,17 @@ namespace GZTW.AyaNova.BLL
}
public static string CheckSum(string input)
{
string hash = string.Empty;
using (System.Security.Cryptography.MD5 md5 = System.Security.Cryptography.MD5.Create())
{
hash = BitConverter.ToString(
md5.ComputeHash(System.Text.Encoding.UTF8.GetBytes(input))
).Replace("-", String.Empty);
}
return hash;
}
//=================================