125 lines
4.9 KiB
C#
125 lines
4.9 KiB
C#
using IRaCIS.Core.Application.Helper;
|
|
using IRaCIS.Core.Application.Service.Reading.Dto;
|
|
using IRaCIS.Core.Domain.Models;
|
|
using IRaCIS.Core.Domain.Share;
|
|
using IRaCIS.Core.Infrastructure;
|
|
using MailKit;
|
|
using MimeKit;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Net.Mail;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
|
|
namespace IRaCIS.Core.Application.Service
|
|
{
|
|
|
|
public interface IEmailSendService
|
|
{
|
|
|
|
}
|
|
|
|
public class EmailSendService : BaseService
|
|
{
|
|
private readonly IRepository<TrialEmailNoticeConfig> _trialEmailNoticeConfigRepository;
|
|
|
|
private readonly IRepository<EmailNoticeConfig> _emailNoticeConfigRepository;
|
|
public EmailSendService(IRepository<TrialEmailNoticeConfig> trialEmailNoticeConfigRepository, IRepository<EmailNoticeConfig> emailNoticeConfigRepository)
|
|
{
|
|
_trialEmailNoticeConfigRepository = trialEmailNoticeConfigRepository;
|
|
_emailNoticeConfigRepository = emailNoticeConfigRepository;
|
|
}
|
|
|
|
public async Task BaseTrialEmailConfigSendEmail(Guid trialId, CommonDocumentBusinessScenario businessScenario, Guid? trialReadingCriterionId, Guid? subjectId)
|
|
{
|
|
|
|
//找到配置
|
|
|
|
|
|
var trialEmailConfig = await _trialEmailNoticeConfigRepository.Where(t => t.TrialId == trialId && t.TrialReadingCriterionId == trialReadingCriterionId && t.BusinessScenarioEnum == businessScenario, ignoreQueryFilters: true)
|
|
.Include(t => t.TrialEmailNoticeUserList).Include(t => t.TrialEmailBlackUserList).FirstOrDefaultAsync();
|
|
|
|
|
|
if (trialEmailConfig == null || trialEmailConfig.IsAutoSend == false)
|
|
{
|
|
return;
|
|
}
|
|
else
|
|
{
|
|
|
|
var sendEmailConfig = new SMTPEmailConfig();
|
|
|
|
//收件人 如果是CRC CRA 要按照中心发送
|
|
var toUserTypeEnumList = trialEmailConfig.TrialEmailNoticeUserList.Where(t => t.EmailUserType == EmailUserType.To).Select(c => c.UserType).ToList();
|
|
|
|
var copyUserTypeEnumList = trialEmailConfig.TrialEmailNoticeUserList.Where(t => t.EmailUserType == EmailUserType.Copy).Select(c => c.UserType).ToList();
|
|
|
|
var allUserTypeEnumList= toUserTypeEnumList.Union(copyUserTypeEnumList).Distinct().ToList();
|
|
|
|
var allUserList= _repository.Where<TrialUser>(t => t.TrialId == trialId && allUserTypeEnumList.Contains(t.User.UserTypeEnum)).Select(t => new { t.User.EMail, t.User.FullName ,t.User.UserTypeEnum }).ToList();
|
|
|
|
|
|
var toUserList = allUserList.Where(t => toUserTypeEnumList.Contains(t.UserTypeEnum)).ToList();
|
|
|
|
if(subjectId!=null)
|
|
{
|
|
toUserList = _repository.Where<TrialSiteUser>(t => t.TrialId == trialId && allUserTypeEnumList.Contains(t.User.UserTypeEnum) && t.TrialSite.SubjectList.Any(c=>c.Id==subjectId)).Select(t => new { t.User.EMail, t.User.FullName, t.User.UserTypeEnum }).ToList();
|
|
}
|
|
|
|
|
|
var copyUserList = allUserList.Where(t => copyUserTypeEnumList.Contains(t.UserTypeEnum)).ToList();
|
|
|
|
|
|
if (toUserList.Count() == 0)
|
|
{
|
|
//---没有收件人,无法发送邮件
|
|
throw new BusinessValidationFailedException(_localizer["TrialEmailN_NoRecipient"]);
|
|
}
|
|
|
|
|
|
if (trialEmailConfig.FromEmail.Contains("@") && !string.IsNullOrEmpty(trialEmailConfig.FromEmail))
|
|
{
|
|
|
|
sendEmailConfig.FromEmailAddress = new MimeKit.MailboxAddress(trialEmailConfig.FromName, trialEmailConfig.FromEmail);
|
|
sendEmailConfig.AuthorizationCode = trialEmailConfig.AuthorizationCode;
|
|
sendEmailConfig.UserName = trialEmailConfig.FromEmail;
|
|
|
|
sendEmailConfig.Host = trialEmailConfig.SMTPServerAddress;
|
|
sendEmailConfig.Port = trialEmailConfig.SMTPServerPort;
|
|
}
|
|
else
|
|
{
|
|
//---项目发件邮箱配置有误,请核实
|
|
throw new BusinessValidationFailedException(_localizer["TrialEmailN_InvalidEmailConfig"]);
|
|
}
|
|
|
|
foreach (var item in toUserList)
|
|
{
|
|
|
|
if (item.EMail.Contains("@") && !string.IsNullOrEmpty(item.EMail))
|
|
{
|
|
|
|
sendEmailConfig.ToMailAddressList.Add(new MimeKit.MailboxAddress(item.FullName, item.EMail));
|
|
|
|
}
|
|
}
|
|
foreach (var item in copyUserList)
|
|
{
|
|
|
|
if (item.EMail.Contains("@") && !string.IsNullOrEmpty(item.EMail))
|
|
{
|
|
|
|
sendEmailConfig.CopyToMailAddressList.Add(new MimeKit.MailboxAddress(item.FullName, item.EMail));
|
|
|
|
}
|
|
}
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
}
|