//--------------------------------------------------------------------
// 此代码由T4模板自动生成 byzhouhang 20210918
// 生成时间 2022-10-20 11:52:17
// 对此文件的更改可能会导致不正确的行为,并且如果重新生成代码,这些更改将会丢失。
//--------------------------------------------------------------------
using IRaCIS.Core.Domain.Models;
using Microsoft.AspNetCore.Mvc;
using IRaCIS.Core.Application.Interfaces;
using IRaCIS.Core.Application.ViewModel;
using IRaCIS.Core.Domain.Share;
using IRaCIS.Core.Infrastructure;
using IRaCIS.Core.Application.Helper;
namespace IRaCIS.Core.Application.Service
{
///
/// TrialEmailNoticeConfigService
///
[ApiExplorerSettings(GroupName = "Trial")]
public class TrialEmailNoticeConfigService : BaseService, ITrialEmailNoticeConfigService
{
private readonly IRepository _trialEmailNoticeConfigRepository;
public TrialEmailNoticeConfigService(IRepository trialEmailNoticeConfigRepository)
{
_trialEmailNoticeConfigRepository = trialEmailNoticeConfigRepository;
}
///
/// 同步系统配置的文档到想项目中
///
///
///
///
///
private async Task SyncSystemEmainCofigDocListAsync(Guid trialId, CriterionType? criterionTypeEnum)
{
if (criterionTypeEnum != null)
{
var docmentList = _repository.Where(t => t.CriterionTypeEnum == criterionTypeEnum).Select(t => new { t.Path, t.Name, t.Code, t.BusinessScenarioEnum }).ToList();
var trialDocCount = _trialEmailNoticeConfigRepository.Where(t => t.CriterionTypeEnum == criterionTypeEnum).Count();
if (trialDocCount == 0)
{
foreach (var item in docmentList)
{
await _trialEmailNoticeConfigRepository.AddAsync(new TrialEmailNoticeConfig() { FileName = item.Name, FilePath = item.Path, BusinessScenarioEnum = item.BusinessScenarioEnum, Code = item.Code });
}
}
}
await _trialEmailNoticeConfigRepository.SaveChangesAsync();
}
///
/// 测试邮件 带附件 填充word --前端不需要用
///
///
///
///
///
///
///
public async Task FillWordTemplateAndEmailConfig(Guid trialId, Guid visitTaskId, Guid trialReadingCriterionId, CommonDocumentBusinessScenario businessScenarioEnum)
{
var criterionTypeEnum = await _repository.Where(t => t.TrialId == trialId && t.Id == trialReadingCriterionId).Select(t => t.CriterionType).FirstOrDefaultAsync();
var emailConfig = await _trialEmailNoticeConfigRepository.Where(t => t.TrialId == trialId && t.CriterionTypeEnum == criterionTypeEnum && t.BusinessScenarioEnum == businessScenarioEnum).FirstOrDefaultAsync();
if (emailConfig == null)
{
throw new BusinessValidationFailedException("找不到该项目标准场景下邮件的配置");
}
//填充邮件基本配置
var sendEmailConfig = new SMTPEmailConfig();
foreach (var item in emailConfig.ReceiveEmailList)
{
sendEmailConfig.ToMailAddressList.Add(new MimeKit.MailboxAddress(item, item));
}
foreach (var item in emailConfig.CopyEmailList)
{
if (item.Contains("@") && !string.IsNullOrEmpty(item))
{
sendEmailConfig.CopyToMailAddressList.Add(new MimeKit.MailboxAddress(item.Trim(), item.Trim()));
}
}
//邮件内容html
await FillWordTemplateAndSetEmailAsync(sendEmailConfig, businessScenarioEnum, criterionTypeEnum!);
//邮件附件
var path = FileStoreHelper.GetPhysicalFilePath(_hostEnvironment, emailConfig.FilePath);
if (!File.Exists(path))
{
throw new BusinessValidationFailedException("找不到该项目标准场景下邮件模板");
}
sendEmailConfig.EmailAttachMentConfigList.Add(new EmailAttachMentConfig()
{
FileName = emailConfig.FileName,
FileStream = System.IO.File.OpenRead(path)
});
await SendEmailHelper.SendEmailAsync(sendEmailConfig);
}
private async Task FillWordTemplateAndSetEmailAsync(SMTPEmailConfig sendEmailConfig, CommonDocumentBusinessScenario businessScenarioEnum, CriterionType criterionType)
{
var pathToFile = _hostEnvironment.WebRootPath
+ Path.DirectorySeparatorChar.ToString()
+ "EmailTemplate"
+ Path.DirectorySeparatorChar.ToString()
+ "SubjectEnrollConfirmOrPDProgress.html";
if (businessScenarioEnum == CommonDocumentBusinessScenario.EnrollConfirmed)
{
sendEmailConfig.TopicDescription = "入组确认";
using (StreamReader SourceReader = System.IO.File.OpenText(pathToFile))
{
var templateInfo = SourceReader.ReadToEnd();
sendEmailConfig.HtmlBodyStr = string.Format(templateInfo,
$" 附件为入组确认报告,请查收 "
);
}
}
else if (businessScenarioEnum == CommonDocumentBusinessScenario.PDConfirmed)
{
sendEmailConfig.TopicDescription = "疾病进展";
using (StreamReader SourceReader = System.IO.File.OpenText(pathToFile))
{
var templateInfo = SourceReader.ReadToEnd();
sendEmailConfig.HtmlBodyStr = string.Format(templateInfo,
$" 附件为疾病进展确认报告,请查收 "
);
}
}
}
[HttpPost]
public async Task> GetTrialEmailNoticeConfigList(TrialEmailNoticeConfigQuery inQuery)
{
await SyncSystemEmainCofigDocListAsync(inQuery.TrialId, inQuery.CriterionTypeEnum);
var trialEmailNoticeConfigQueryable = _trialEmailNoticeConfigRepository
.WhereIf(inQuery.CriterionTypeEnum != null, t => t.CriterionTypeEnum == inQuery.CriterionTypeEnum)
.WhereIf(inQuery.BusinessScenarioEnum != null, t => t.BusinessScenarioEnum == inQuery.BusinessScenarioEnum)
.ProjectTo(_mapper.ConfigurationProvider);
return await trialEmailNoticeConfigQueryable.ToListAsync();
}
public async Task AddOrUpdateTrialEmailNoticeConfig(TrialEmailNoticeConfigAddOrEdit addOrEditTrialEmailNoticeConfig)
{
addOrEditTrialEmailNoticeConfig.ReceiveEmailsStr = String.Join('|', addOrEditTrialEmailNoticeConfig.ReceiveEmailList);
addOrEditTrialEmailNoticeConfig.CopyEmailsStr = String.Join('|', addOrEditTrialEmailNoticeConfig.CopyEmailList);
var entity = await _trialEmailNoticeConfigRepository.InsertOrUpdateAsync(addOrEditTrialEmailNoticeConfig, true);
return ResponseOutput.Ok(entity.Id.ToString());
}
[HttpDelete("{trialEmailNoticeConfigId:guid}")]
public async Task DeleteTrialEmailNoticeConfig(Guid trialEmailNoticeConfigId)
{
var success = await _trialEmailNoticeConfigRepository.DeleteFromQueryAsync(t => t.Id == trialEmailNoticeConfigId, true);
return ResponseOutput.Ok();
}
}
}