Merge branch 'Test.IRC' of http://192.168.3.69:2000/XCKJ/irc-netcore-api into Test.IRC
commit
3bedd60b72
|
@ -1,16 +0,0 @@
|
||||||
using DocumentFormat.OpenXml.Bibliography;
|
|
||||||
using NPOI.XWPF.UserModel;
|
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
|
|
||||||
namespace IRaCIS.Core.Application.Helper
|
|
||||||
{
|
|
||||||
public class FileFormatConvertHelper
|
|
||||||
{
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,171 +0,0 @@
|
||||||
|
|
||||||
using IRaCIS.Core.Application.Helper;
|
|
||||||
using Microsoft.AspNetCore.Hosting;
|
|
||||||
using Microsoft.AspNetCore.Mvc;
|
|
||||||
using NPOI.OpenXmlFormats.Wordprocessing;
|
|
||||||
using NPOI.XWPF.UserModel;
|
|
||||||
using System.Collections;
|
|
||||||
using System.Reflection;
|
|
||||||
|
|
||||||
namespace IRaCIS.Core.Application.Service;
|
|
||||||
|
|
||||||
public static class NpoiWordHelper
|
|
||||||
{
|
|
||||||
public static async Task<IActionResult> TemplateExportWordAsync(string code, object data, IRepository<CommonDocument>? _commonDocumentRepository, IWebHostEnvironment _hostEnvironment)
|
|
||||||
{
|
|
||||||
//var (physicalPath, fileNmae) = await FileStoreHelper.GetCommonDocPhysicalFilePathAsync(_hostEnvironment, _commonDocumentRepository, code);
|
|
||||||
|
|
||||||
var physicalPath = code;
|
|
||||||
|
|
||||||
|
|
||||||
using (FileStream stream = File.OpenRead(physicalPath))
|
|
||||||
{
|
|
||||||
XWPFDocument doc = new XWPFDocument(stream);
|
|
||||||
//遍历段落
|
|
||||||
foreach (var para in doc.Paragraphs)
|
|
||||||
{
|
|
||||||
ReplaceKey(para, data);
|
|
||||||
}
|
|
||||||
//遍历表格
|
|
||||||
var tables = doc.Tables;
|
|
||||||
foreach (var table in tables)
|
|
||||||
{
|
|
||||||
//ReplaceTableKey(table, data, "Data");
|
|
||||||
}
|
|
||||||
|
|
||||||
foreach (var table in tables)
|
|
||||||
{
|
|
||||||
foreach (var row in table.Rows)
|
|
||||||
{
|
|
||||||
foreach (var cell in row.GetTableCells())
|
|
||||||
{
|
|
||||||
foreach (var para in cell.Paragraphs)
|
|
||||||
{
|
|
||||||
ReplaceKey(para, data);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
FileStream out1 = new FileStream("table.docx", FileMode.Create);
|
|
||||||
doc.Write(out1);
|
|
||||||
out1.Close();
|
|
||||||
return new FileStreamResult(stream, "application/msword")
|
|
||||||
{
|
|
||||||
FileDownloadName = $"replaced_{DateTime.Now.ToString("yyyyMMddHHmmss")}.docx"
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
private static void ReplaceKey(XWPFParagraph para, object model)
|
|
||||||
{
|
|
||||||
string text = para.ParagraphText;
|
|
||||||
|
|
||||||
Type t = model.GetType();
|
|
||||||
PropertyInfo[] pi = t.GetProperties();
|
|
||||||
foreach (PropertyInfo p in pi)
|
|
||||||
{
|
|
||||||
//$$与模板中$$对应,也可以改成其它符号,比如{$name},务必做到唯一
|
|
||||||
if (text.Contains("$" + p.Name + "$"))
|
|
||||||
{
|
|
||||||
text = text.Replace("$" + p.Name + "$", p.GetValue(model)?.ToString());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//var runs = para.Runs;
|
|
||||||
//string styleid = para.Style;
|
|
||||||
//for (int i = 0; i < runs.Count; i++)
|
|
||||||
//{
|
|
||||||
// var run = runs[i];
|
|
||||||
// text = run.ToString();
|
|
||||||
// Type t = model.GetType();
|
|
||||||
// PropertyInfo[] pi = t.GetProperties();
|
|
||||||
// foreach (PropertyInfo p in pi)
|
|
||||||
// {
|
|
||||||
// //$$与模板中$$对应,也可以改成其它符号,比如{$name},务必做到唯一
|
|
||||||
// if (text.Contains("$" + p.Name + "$"))
|
|
||||||
// {
|
|
||||||
// text = text.Replace("$" + p.Name + "$", p.GetValue(model)?.ToString());
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// runs[i].SetText(text, 0);
|
|
||||||
//}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 替换表格Key
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="table"></param>
|
|
||||||
/// <param name="list"></param>
|
|
||||||
/// <param name="field"></param>
|
|
||||||
|
|
||||||
private static void ReplaceTableKey(XWPFTable table, IList list, String field)
|
|
||||||
{
|
|
||||||
List<XWPFParagraph> paras = new List<XWPFParagraph>();
|
|
||||||
// 获取最后一行数据,最后一行设置值
|
|
||||||
Int32 iLastRowIndex = 0;
|
|
||||||
for (int iIndex = 0; iIndex < table.Rows.Count; iIndex++)
|
|
||||||
{
|
|
||||||
if (iIndex == table.Rows.Count - 1)
|
|
||||||
{
|
|
||||||
iLastRowIndex = iIndex;
|
|
||||||
foreach (var cell in table.Rows[iIndex].GetTableCells())
|
|
||||||
{
|
|
||||||
foreach (var para in cell.Paragraphs)
|
|
||||||
{
|
|
||||||
paras.Add(para);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// 删除最后一行
|
|
||||||
table.RemoveRow(iLastRowIndex);
|
|
||||||
|
|
||||||
for (int iIndex = 0; iIndex < list.Count; iIndex++)
|
|
||||||
{
|
|
||||||
object data = list[iIndex];
|
|
||||||
Type t = data.GetType();
|
|
||||||
PropertyInfo[] pi = t.GetProperties();
|
|
||||||
// 表增加行
|
|
||||||
XWPFTableRow m_row = table.CreateRow();
|
|
||||||
CT_Row m_NewRow = new CT_Row();
|
|
||||||
String text = String.Empty;
|
|
||||||
Int32 jIndex = 0;
|
|
||||||
paras.ForEach(para =>
|
|
||||||
{
|
|
||||||
text = para.ParagraphText;
|
|
||||||
foreach (PropertyInfo p in pi)
|
|
||||||
{
|
|
||||||
if (text.Contains("$" + field + "." + p.Name + "$"))
|
|
||||||
{
|
|
||||||
m_row.GetCell(jIndex).SetText(p.GetValue(data, null).ToString());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
jIndex++;
|
|
||||||
});
|
|
||||||
m_row = new XWPFTableRow(m_NewRow, table);
|
|
||||||
table.AddRow(m_row);
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
|
@ -85,14 +85,6 @@
|
||||||
<param name="type"></param>
|
<param name="type"></param>
|
||||||
<returns></returns>
|
<returns></returns>
|
||||||
</member>
|
</member>
|
||||||
<member name="M:IRaCIS.Core.Application.Service.NpoiWordHelper.ReplaceTableKey(NPOI.XWPF.UserModel.XWPFTable,System.Collections.IList,System.String)">
|
|
||||||
<summary>
|
|
||||||
替换表格Key
|
|
||||||
</summary>
|
|
||||||
<param name="table"></param>
|
|
||||||
<param name="list"></param>
|
|
||||||
<param name="field"></param>
|
|
||||||
</member>
|
|
||||||
<member name="T:IRaCIS.Core.Application.Service.TaskAllocationRuleService">
|
<member name="T:IRaCIS.Core.Application.Service.TaskAllocationRuleService">
|
||||||
<summary>
|
<summary>
|
||||||
分配规则
|
分配规则
|
||||||
|
@ -725,17 +717,9 @@
|
||||||
<param name="inDto"></param>
|
<param name="inDto"></param>
|
||||||
<returns></returns>
|
<returns></returns>
|
||||||
</member>
|
</member>
|
||||||
<member name="M:IRaCIS.Core.Application.Service.TrialEmailNoticeConfigService.SyncSystemEmainCofigDocListAsync(System.Guid)">
|
|
||||||
<summary>
|
|
||||||
同步系统配置的文档到想项目中 ---废弃
|
|
||||||
</summary>
|
|
||||||
<param name="trialId"></param>
|
|
||||||
<returns></returns>
|
|
||||||
|
|
||||||
</member>
|
|
||||||
<member name="M:IRaCIS.Core.Application.Service.TrialEmailNoticeConfigService.BaseBusinessScenarioSendEmailAsync(System.Guid,System.Nullable{System.Boolean},IRaCIS.Core.Domain.Share.Common.EmailStoreSendMode,System.String)">
|
<member name="M:IRaCIS.Core.Application.Service.TrialEmailNoticeConfigService.BaseBusinessScenarioSendEmailAsync(System.Guid,System.Nullable{System.Boolean},IRaCIS.Core.Domain.Share.Common.EmailStoreSendMode,System.String)">
|
||||||
<summary>
|
<summary>
|
||||||
测试邮件 带附件 填充word --前端不需
|
测试邮件 带附件 填充word
|
||||||
</summary>
|
</summary>
|
||||||
<param name="visitTaskId"></param>
|
<param name="visitTaskId"></param>
|
||||||
<param name="isHandSend"> 为空 代表 正常任务自动发送,为true 代表医学审核手动发送 为false 代表医学审核自动发送 </param>
|
<param name="isHandSend"> 为空 代表 正常任务自动发送,为true 代表医学审核手动发送 为false 代表医学审核自动发送 </param>
|
||||||
|
|
|
@ -18,6 +18,7 @@ using System.Linq;
|
||||||
using System.Net.Mail;
|
using System.Net.Mail;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
using static IRaCIS.Core.Domain.Share.StaticData;
|
||||||
|
|
||||||
namespace IRaCIS.Core.Application.Service
|
namespace IRaCIS.Core.Application.Service
|
||||||
{
|
{
|
||||||
|
@ -29,6 +30,8 @@ namespace IRaCIS.Core.Application.Service
|
||||||
|
|
||||||
Task SendTrialQCQuestionEmailAsync(Guid trialId);
|
Task SendTrialQCQuestionEmailAsync(Guid trialId);
|
||||||
Task SendTrialImageQuestionAsync(Guid trialId);
|
Task SendTrialImageQuestionAsync(Guid trialId);
|
||||||
|
|
||||||
|
Task<(TrialEmailNoticeConfig?, SMTPEmailConfig?)> BuildEmailConfig(Guid trialId, EmailBusinessScenario businessScenario, Func<TrialEmailNoticeConfig, (string topicStr, string htmlBodyStr, bool isEn_us, Guid? onlyToUserId)> topicAndHtmlFunc, Guid? siteId = null, Guid? trialReadingCriterionId = null);
|
||||||
}
|
}
|
||||||
|
|
||||||
public class EmailSendService : BaseService, IEmailSendService
|
public class EmailSendService : BaseService, IEmailSendService
|
||||||
|
@ -39,18 +42,16 @@ namespace IRaCIS.Core.Application.Service
|
||||||
|
|
||||||
private readonly IRepository<Trial> _trialRepository;
|
private readonly IRepository<Trial> _trialRepository;
|
||||||
|
|
||||||
private readonly IDictionaryService _dictionaryService;
|
|
||||||
private readonly IOptionsMonitor<SystemEmailSendConfig> _SystemEmailSendConfig;
|
private readonly IOptionsMonitor<SystemEmailSendConfig> _SystemEmailSendConfig;
|
||||||
|
|
||||||
public readonly static string EmailNamePlaceholder = "EmailNamePlaceholder";
|
public static string EmailNamePlaceholder => StaticData. EmailSend.EmailNamePlaceholder;
|
||||||
|
|
||||||
public EmailSendService(IRepository<TrialEmailNoticeConfig> trialEmailNoticeConfigRepository, IRepository<EmailNoticeConfig> emailNoticeConfigRepository, IRepository<Trial> trialRepository, IOptionsMonitor<SystemEmailSendConfig> systemEmailSendConfig, IDictionaryService dictionaryService)
|
public EmailSendService(IRepository<TrialEmailNoticeConfig> trialEmailNoticeConfigRepository, IRepository<EmailNoticeConfig> emailNoticeConfigRepository, IRepository<Trial> trialRepository, IOptionsMonitor<SystemEmailSendConfig> systemEmailSendConfig)
|
||||||
{
|
{
|
||||||
_trialEmailNoticeConfigRepository = trialEmailNoticeConfigRepository;
|
_trialEmailNoticeConfigRepository = trialEmailNoticeConfigRepository;
|
||||||
_emailNoticeConfigRepository = emailNoticeConfigRepository;
|
_emailNoticeConfigRepository = emailNoticeConfigRepository;
|
||||||
_trialRepository = trialRepository;
|
_trialRepository = trialRepository;
|
||||||
_SystemEmailSendConfig = systemEmailSendConfig;
|
_SystemEmailSendConfig = systemEmailSendConfig;
|
||||||
_dictionaryService = dictionaryService;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//入组确认/PD确认
|
//入组确认/PD确认
|
||||||
|
@ -92,27 +93,30 @@ namespace IRaCIS.Core.Application.Service
|
||||||
|
|
||||||
if (isEnrollment == true)
|
if (isEnrollment == true)
|
||||||
{
|
{
|
||||||
Func<TrialEmailNoticeConfig, (string topicStr, string htmlBodyStr, bool isEn_us, Guid? onlyToUserId)> topicAndHtmlFunc = trialEmailConfig =>
|
Func<TrialEmailNoticeConfig, (string topicStr, string htmlBodyStr, bool isEn_us, Guid? onlyToUserId)> topicAndHtmlFunc = trialEmailConfig =>
|
||||||
{
|
{
|
||||||
var topicStr = string.Format(isEn_us ? trialEmailConfig.EmailTopic : trialEmailConfig.EmailTopicCN, taskInfo.ResearchProgramNo, taskInfo.SubjectCode);
|
var topicStr = string.Format(isEn_us ? trialEmailConfig.EmailTopic : trialEmailConfig.EmailTopicCN, taskInfo.ResearchProgramNo, taskInfo.SubjectCode);
|
||||||
|
|
||||||
var htmlBodyStr = string.Format(isEn_us ? trialEmailConfig.EmailHtmlContent : trialEmailConfig.EmailHtmlContentCN,
|
var htmlBodyStr = string.Format(isEn_us ? trialEmailConfig.EmailHtmlContent : trialEmailConfig.EmailHtmlContentCN,
|
||||||
EmailNamePlaceholder, taskInfo.ResearchProgramNo, taskInfo.SubjectCode, resultStr);
|
EmailNamePlaceholder, taskInfo.ResearchProgramNo, taskInfo.SubjectCode, resultStr);
|
||||||
return (topicStr, htmlBodyStr, isEn_us, null);
|
|
||||||
|
|
||||||
|
return (topicStr, htmlBodyStr, isEn_us, null);
|
||||||
};
|
};
|
||||||
|
|
||||||
await SendTrialEmailAsync(taskInfo.TrialId, businessScenarioEnum, topicAndHtmlFunc, taskInfo.SiteId);
|
await SendTrialEmailAsync(taskInfo.TrialId, businessScenarioEnum, topicAndHtmlFunc, taskInfo.SiteId);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
Func<TrialEmailNoticeConfig, (string topicStr, string htmlBodyStr, bool isEn_us, Guid? onlyToUserId)> topicAndHtmlFunc = trialEmailConfig =>
|
Func<TrialEmailNoticeConfig, (string topicStr, string htmlBodyStr, bool isEn_us, Guid? onlyToUserId)> topicAndHtmlFunc = trialEmailConfig =>
|
||||||
{
|
{
|
||||||
var topicStr = string.Format(isEn_us ? trialEmailConfig.EmailTopic : trialEmailConfig.EmailTopicCN, taskInfo.ResearchProgramNo, taskInfo.SubjectCode, taskInfo.VisitName);
|
var topicStr = string.Format(isEn_us ? trialEmailConfig.EmailTopic : trialEmailConfig.EmailTopicCN, taskInfo.ResearchProgramNo, taskInfo.SubjectCode, taskInfo.VisitName);
|
||||||
|
|
||||||
var htmlBodyStr = string.Format(isEn_us ? trialEmailConfig.EmailHtmlContent : trialEmailConfig.EmailHtmlContentCN,
|
var htmlBodyStr = string.Format(isEn_us ? trialEmailConfig.EmailHtmlContent : trialEmailConfig.EmailHtmlContentCN,
|
||||||
EmailNamePlaceholder, taskInfo.ResearchProgramNo, taskInfo.SubjectCode, taskInfo.VisitName, resultStr);
|
EmailNamePlaceholder, taskInfo.ResearchProgramNo, taskInfo.SubjectCode, taskInfo.VisitName, resultStr);
|
||||||
|
|
||||||
return (topicStr, htmlBodyStr, isEn_us, null);
|
|
||||||
|
return (topicStr, htmlBodyStr, isEn_us, null);
|
||||||
};
|
};
|
||||||
|
|
||||||
await SendTrialEmailAsync(taskInfo.TrialId, businessScenarioEnum, topicAndHtmlFunc, taskInfo.SiteId);
|
await SendTrialEmailAsync(taskInfo.TrialId, businessScenarioEnum, topicAndHtmlFunc, taskInfo.SiteId);
|
||||||
|
@ -160,11 +164,12 @@ namespace IRaCIS.Core.Application.Service
|
||||||
if (sendStat != null && (sendStat.ToBeClaimedCount > 0 || sendStat.ToBeReviewedCount > 0))
|
if (sendStat != null && (sendStat.ToBeClaimedCount > 0 || sendStat.ToBeReviewedCount > 0))
|
||||||
{
|
{
|
||||||
|
|
||||||
Func<TrialEmailNoticeConfig, (string topicStr, string htmlBodyStr, bool isEn_us, Guid? onlyToUserId)> topicAndHtmlFunc = trialEmailConfig =>
|
Func<TrialEmailNoticeConfig, (string topicStr, string htmlBodyStr, bool isEn_us, Guid? onlyToUserId)> topicAndHtmlFunc = trialEmailConfig =>
|
||||||
{
|
{
|
||||||
var topicStr = string.Format(isEn_us ? trialEmailConfig.EmailTopic : trialEmailConfig.EmailTopicCN, trialInfo.ResearchProgramNo);
|
var topicStr = string.Format(isEn_us ? trialEmailConfig.EmailTopic : trialEmailConfig.EmailTopicCN, trialInfo.ResearchProgramNo);
|
||||||
var htmlBodyStr = string.Format(isEn_us ? trialEmailConfig.EmailHtmlContent : trialEmailConfig.EmailHtmlContentCN,
|
var htmlBodyStr = string.Format(isEn_us ? trialEmailConfig.EmailHtmlContent : trialEmailConfig.EmailHtmlContentCN,
|
||||||
user.FullName, DateTime.Now, sendStat.ToBeClaimedCount, sendStat.ToBeReviewedCount, _SystemEmailSendConfig.CurrentValue.SiteUrl);
|
user.FullName, DateTime.Now, sendStat.ToBeClaimedCount, sendStat.ToBeReviewedCount, _SystemEmailSendConfig.CurrentValue.SiteUrl);
|
||||||
|
|
||||||
return (topicStr, htmlBodyStr, false, userId);
|
return (topicStr, htmlBodyStr, false, userId);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -211,13 +216,15 @@ namespace IRaCIS.Core.Application.Service
|
||||||
if (sendStat != null && (sendStat.ToBeDealedCount > 0 || sendStat.ReUploadTobeDealedCount > 0))
|
if (sendStat != null && (sendStat.ToBeDealedCount > 0 || sendStat.ReUploadTobeDealedCount > 0))
|
||||||
{
|
{
|
||||||
|
|
||||||
Func<TrialEmailNoticeConfig, (string topicStr, string htmlBodyStr, bool isEn_us, Guid? onlyToUserId)> topicAndHtmlFunc = trialEmailConfig =>
|
Func<TrialEmailNoticeConfig, (string topicStr, string htmlBodyStr, bool isEn_us, Guid? onlyToUserId)> topicAndHtmlFunc = trialEmailConfig =>
|
||||||
{
|
{
|
||||||
var topicStr = string.Format(isEn_us ? trialEmailConfig.EmailTopic : trialEmailConfig.EmailTopicCN, trialInfo.ResearchProgramNo);
|
var topicStr = string.Format(isEn_us ? trialEmailConfig.EmailTopic : trialEmailConfig.EmailTopicCN, trialInfo.ResearchProgramNo);
|
||||||
var htmlBodyStr = string.Format(isEn_us ? trialEmailConfig.EmailHtmlContent : trialEmailConfig.EmailHtmlContentCN,
|
var htmlBodyStr = string.Format(isEn_us ? trialEmailConfig.EmailHtmlContent : trialEmailConfig.EmailHtmlContentCN,
|
||||||
|
|
||||||
user.FullName, DateTime.Now, sendStat.ToBeDealedCount - sendStat.ReUploadTobeDealedCount, sendStat.ReUploadTobeDealedCount, _SystemEmailSendConfig.CurrentValue.SiteUrl);
|
user.FullName, DateTime.Now, sendStat.ToBeDealedCount - sendStat.ReUploadTobeDealedCount, sendStat.ReUploadTobeDealedCount, _SystemEmailSendConfig.CurrentValue.SiteUrl);
|
||||||
return (topicStr, htmlBodyStr, false, userId);
|
|
||||||
|
|
||||||
|
return (topicStr, htmlBodyStr, false, userId);
|
||||||
};
|
};
|
||||||
|
|
||||||
await SendTrialEmailAsync(trialId, EmailBusinessScenario.QCQuestion, topicAndHtmlFunc);
|
await SendTrialEmailAsync(trialId, EmailBusinessScenario.QCQuestion, topicAndHtmlFunc);
|
||||||
|
@ -261,12 +268,13 @@ namespace IRaCIS.Core.Application.Service
|
||||||
if (sendStat != null && (sendStat.ToBeDealedCount > 0))
|
if (sendStat != null && (sendStat.ToBeDealedCount > 0))
|
||||||
{
|
{
|
||||||
|
|
||||||
Func<TrialEmailNoticeConfig, (string topicStr, string htmlBodyStr, bool isEn_us, Guid? onlyToUserId)> topicAndHtmlFunc = trialEmailConfig =>
|
Func<TrialEmailNoticeConfig, (string topicStr, string htmlBodyStr, bool isEn_us, Guid? onlyToUserId)> topicAndHtmlFunc = trialEmailConfig =>
|
||||||
{
|
{
|
||||||
var topicStr = string.Format(isEn_us ? trialEmailConfig.EmailTopic : trialEmailConfig.EmailTopicCN, trialInfo.ResearchProgramNo);
|
var topicStr = string.Format(isEn_us ? trialEmailConfig.EmailTopic : trialEmailConfig.EmailTopicCN, trialInfo.ResearchProgramNo);
|
||||||
var htmlBodyStr = string.Format(isEn_us ? trialEmailConfig.EmailHtmlContent : trialEmailConfig.EmailHtmlContentCN,
|
var htmlBodyStr = string.Format(isEn_us ? trialEmailConfig.EmailHtmlContent : trialEmailConfig.EmailHtmlContentCN,
|
||||||
user.FullName, DateTime.Now, sendStat.ToBeDealedCount, _SystemEmailSendConfig.CurrentValue.SiteUrl);
|
user.FullName, DateTime.Now, sendStat.ToBeDealedCount, _SystemEmailSendConfig.CurrentValue.SiteUrl);
|
||||||
return (topicStr, htmlBodyStr, isEn_us, userId);
|
|
||||||
|
return (topicStr, htmlBodyStr, isEn_us, userId);
|
||||||
};
|
};
|
||||||
|
|
||||||
await SendTrialEmailAsync(trialId, EmailBusinessScenario.ImageQuestion, topicAndHtmlFunc);
|
await SendTrialEmailAsync(trialId, EmailBusinessScenario.ImageQuestion, topicAndHtmlFunc);
|
||||||
|
@ -277,7 +285,19 @@ namespace IRaCIS.Core.Application.Service
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public async Task SendTrialEmailAsync(Guid trialId, EmailBusinessScenario businessScenario, Func<TrialEmailNoticeConfig, (string topicStr, string htmlBodyStr, bool isEn_us, Guid? onlyToUserId)> topicAndHtmlFunc, Guid? siteId = null, Guid? trialReadingCriterionId = null)
|
public async Task SendTrialEmailAsync(Guid trialId, EmailBusinessScenario businessScenario, Func<TrialEmailNoticeConfig, (string topicStr, string htmlBodyStr, bool isEn_us, Guid? onlyToUserId)> topicAndHtmlFunc, Guid? siteId = null, Guid? trialReadingCriterionId = null, Func<TrialEmailNoticeConfig, SMTPEmailConfig, SMTPEmailConfig> emailAttachFunc=null)
|
||||||
|
{
|
||||||
|
var (trialEmailConfig, sendEmailConfig) = await BuildEmailConfig(trialId, businessScenario, topicAndHtmlFunc, siteId, trialReadingCriterionId);
|
||||||
|
|
||||||
|
if (sendEmailConfig != null)
|
||||||
|
{
|
||||||
|
|
||||||
|
await SendEmailHelper.SendEmailAsync(sendEmailConfig);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public async Task<(TrialEmailNoticeConfig?, SMTPEmailConfig?)> BuildEmailConfig(Guid trialId, EmailBusinessScenario businessScenario, Func<TrialEmailNoticeConfig, (string topicStr, string htmlBodyStr, bool isEn_us, Guid? onlyToUserId)> topicAndHtmlFunc, Guid? siteId = null, Guid? trialReadingCriterionId = null)
|
||||||
{
|
{
|
||||||
//找到配置
|
//找到配置
|
||||||
var trialEmailConfig = await _trialEmailNoticeConfigRepository.Where(t => t.TrialId == trialId && t.TrialReadingCriterionId == trialReadingCriterionId && t.BusinessScenarioEnum == businessScenario, ignoreQueryFilters: true)
|
var trialEmailConfig = await _trialEmailNoticeConfigRepository.Where(t => t.TrialId == trialId && t.TrialReadingCriterionId == trialReadingCriterionId && t.BusinessScenarioEnum == businessScenario, ignoreQueryFilters: true)
|
||||||
|
@ -286,13 +306,13 @@ namespace IRaCIS.Core.Application.Service
|
||||||
|
|
||||||
if (trialEmailConfig == null || trialEmailConfig.IsAutoSend == false)
|
if (trialEmailConfig == null || trialEmailConfig.IsAutoSend == false)
|
||||||
{
|
{
|
||||||
return;
|
return (null,null);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
var sendEmailConfig = new SMTPEmailConfig();
|
var sendEmailConfig = new SMTPEmailConfig();
|
||||||
|
|
||||||
var (topicStr, htmlBodyStr, isEn_us, onlyToUserId) = topicAndHtmlFunc(trialEmailConfig);
|
var (topicStr, htmlBodyStr, isEn_us, onlyToUserId) = topicAndHtmlFunc(trialEmailConfig);
|
||||||
|
|
||||||
|
|
||||||
sendEmailConfig.TopicDescription = topicStr;
|
sendEmailConfig.TopicDescription = topicStr;
|
||||||
|
@ -393,11 +413,25 @@ namespace IRaCIS.Core.Application.Service
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
await SendEmailHelper.SendEmailAsync(sendEmailConfig);
|
//邮件附件 这里是原格式发送,不是PDF
|
||||||
|
|
||||||
|
//if (trialEmailConfig.AttachCNPath != string.Empty && trialEmailConfig.AttachPath != string.Empty)
|
||||||
|
//{
|
||||||
|
// var phyPath = FileStoreHelper.GetPhysicalFilePath(_hostEnvironment, isEn_us? trialEmailConfig.AttachName: trialEmailConfig.AttachNameCN);
|
||||||
|
|
||||||
|
// //先预先生成了邮件,发送预先生成的邮件
|
||||||
|
// sendEmailConfig.EmailAttachMentConfigList.Add(new EmailAttachMentConfig()
|
||||||
|
// {
|
||||||
|
// FileName = $"{attachPrefix}_{Path.GetFileName(_userInfo.IsEn_Us ? trialEmailConfig.AttachName : trialEmailConfig.AttachNameCN)}",
|
||||||
|
|
||||||
|
// FileStream = File.OpenRead(phyPath),
|
||||||
|
// });
|
||||||
|
//}
|
||||||
|
|
||||||
|
return (trialEmailConfig,sendEmailConfig) ;
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -36,7 +36,7 @@ namespace IRaCIS.Core.Domain.Share
|
||||||
|
|
||||||
public enum EmailBusinessScenario
|
public enum EmailBusinessScenario
|
||||||
{
|
{
|
||||||
|
None=-1,
|
||||||
EnrollConfirmed = 1,
|
EnrollConfirmed = 1,
|
||||||
|
|
||||||
PDConfirmed = 2,
|
PDConfirmed = 2,
|
||||||
|
|
|
@ -141,6 +141,11 @@ public static class StaticData
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public static class EmailSend
|
||||||
|
{
|
||||||
|
public static string EmailNamePlaceholder = "EmailNamePlaceholder";
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 医生学位等级
|
/// 医生学位等级
|
||||||
|
|
Loading…
Reference in New Issue