diff --git a/IRaCIS.Core.Application/Helper/SendEmailHelper.cs b/IRaCIS.Core.Application/Helper/SendEmailHelper.cs
index d15a5d857..57cb50bc1 100644
--- a/IRaCIS.Core.Application/Helper/SendEmailHelper.cs
+++ b/IRaCIS.Core.Application/Helper/SendEmailHelper.cs
@@ -144,6 +144,9 @@ public static class SendEmailHelper
}
}
+
+
+
}
diff --git a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml
index 956f11d32..bea106462 100644
--- a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml
+++ b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml
@@ -609,6 +609,20 @@
+
+
+ 获取系统 邮件配置 勾选列表
+
+
+
+
+
+
+ 批量勾选 传递列表每行数据,后台进行处理转换,建立关联关系
+
+
+
+
指定资源Id,渲染Dicom检查的Jpeg预览图像
Dicom检查的Id
@@ -8074,30 +8088,30 @@
TrialEmailNoticeConfigQuery 列表查询参数模型
-
- TrialEmailNoticeConfigAddOrEdit 列表查询参数模型
-
-
+
业务模块 ///
-
+
业务层级 ///
-
+
邮件类型 ///
-
+
邮件加急类型 ///
-
+
定时周期 ///
-
+
邮件主题 ///
-
+
附件 ///
+
+ TrialEmailNoticeConfigAddOrEdit 列表查询参数模型
+
SystemAnonymizationView 列表视图模型
diff --git a/IRaCIS.Core.Application/Service/Common/DTO/EmailNoticeConfigViewModel.cs b/IRaCIS.Core.Application/Service/Common/DTO/EmailNoticeConfigViewModel.cs
index a4b6e0622..b77a742aa 100644
--- a/IRaCIS.Core.Application/Service/Common/DTO/EmailNoticeConfigViewModel.cs
+++ b/IRaCIS.Core.Application/Service/Common/DTO/EmailNoticeConfigViewModel.cs
@@ -8,6 +8,11 @@ using IRaCIS.Core.Domain.Share;
using Newtonsoft.Json;
namespace IRaCIS.Core.Application.Contracts
{
+ public class TrialSelectEmailNoticeConfigView: EmailNoticeConfigView
+ {
+ public bool IsHaveSelected { get; set; }
+ }
+
/// EmailNoticeConfigView 列表视图模型
public class EmailNoticeConfigView : EmailNoticeConfigAddOrEdit
{
@@ -54,7 +59,7 @@ namespace IRaCIS.Core.Application.Contracts
public CriterionType? CriterionTypeEnum { get; set; }
-
+ public Guid? TrialId { get; set; }
}
diff --git a/IRaCIS.Core.Application/Service/Common/_MapConfig.cs b/IRaCIS.Core.Application/Service/Common/_MapConfig.cs
index 02a1990e8..9c2c3c95c 100644
--- a/IRaCIS.Core.Application/Service/Common/_MapConfig.cs
+++ b/IRaCIS.Core.Application/Service/Common/_MapConfig.cs
@@ -24,9 +24,13 @@ namespace IRaCIS.Core.Application.Service
CreateMap();
-
+ var trialId = Guid.Empty;
+ CreateMap().IncludeBase()
+ .ForMember(o => o.IsHaveSelected, t => t.MapFrom(u => u.TrialEmailNoticeConfigList.Any(c=>c.TrialId==trialId && c.SysEmailNoticeConfigId==u.Id)))
+ ;
+
CreateMap()
.ForMember(t => t.EmailNoticeUserList, u => u.MapFrom(c => c.EmailNoticeUserTypeList));
diff --git a/IRaCIS.Core.Application/Service/Document/DTO/TrialEmailNoticeConfigViewModel.cs b/IRaCIS.Core.Application/Service/Document/DTO/TrialEmailNoticeConfigViewModel.cs
index 9d787eab1..0f1c89010 100644
--- a/IRaCIS.Core.Application/Service/Document/DTO/TrialEmailNoticeConfigViewModel.cs
+++ b/IRaCIS.Core.Application/Service/Document/DTO/TrialEmailNoticeConfigViewModel.cs
@@ -77,7 +77,7 @@ namespace IRaCIS.Core.Application.ViewModel
///
/// SMTP端口
///
- public int? EmailSMTPServerPort { get; set; }
+ public int EmailSMTPServerPort { get; set; }
///
/// 是否配置过邮箱
@@ -120,39 +120,30 @@ namespace IRaCIS.Core.Application.ViewModel
public CommonDocumentBusinessScenario BusinessScenarioEnum { get; set; }
}
- /// TrialEmailNoticeConfigAddOrEdit 列表查询参数模型
- public class TrialEmailNoticeConfigAddOrEdit
+ public class BatchAddTrialEmailNoticeConfig
{
+
+
+
public Guid? Id { get; set; }
public CommonDocumentBusinessScenario BusinessScenarioEnum { get; set; }
public string Code { get; set; } = string.Empty;
- public Guid? TrialReadingCriterionId { get; set; }
+
public Guid TrialId { get; set; }
- public string AuthorizationCode { get; set; } = string.Empty;
-
- public string SMTPServerAddress { get; set; } = string.Empty;
-
- public int SMTPServerPort { get; set; }
-
+
public CriterionType CriterionTypeEnum { get; set; }
- public string FromName { get; set; } = string.Empty;
-
- public string FromEmail { get; set; } = string.Empty;
-
public List ToUserTypeList { get; set; }
public List CopyUserTypeList { get; set; }
- public bool IsUrgent { get; set; }
-
public bool IsAutoSend { get; set; }
@@ -160,8 +151,6 @@ namespace IRaCIS.Core.Application.ViewModel
-
-
/// 业务模块 ///
public int BusinessModuleEnum { get; set; }
@@ -197,6 +186,26 @@ namespace IRaCIS.Core.Application.ViewModel
public string EmailHtmlContent { get; set; } = string.Empty;
public string EmailHtmlContentCN { get; set; } = string.Empty;
+ }
+
+
+ /// TrialEmailNoticeConfigAddOrEdit 列表查询参数模型
+ public class TrialEmailNoticeConfigAddOrEdit: BatchAddTrialEmailNoticeConfig
+ {
+
+ public Guid? TrialReadingCriterionId { get; set; }
+
+
+ public string AuthorizationCode { get; set; } = string.Empty;
+
+ public string SMTPServerAddress { get; set; } = string.Empty;
+
+ public int SMTPServerPort { get; set; }
+
+
+ public string FromName { get; set; } = string.Empty;
+
+ public string FromEmail { get; set; } = string.Empty;
public List BlackUserIdList { get; set; }
diff --git a/IRaCIS.Core.Application/Service/Document/EmailSendService.cs b/IRaCIS.Core.Application/Service/Document/EmailSendService.cs
new file mode 100644
index 000000000..f1e72986e
--- /dev/null
+++ b/IRaCIS.Core.Application/Service/Document/EmailSendService.cs
@@ -0,0 +1,121 @@
+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 class EmailSendService : BaseService
+ {
+ private readonly IRepository _trialEmailNoticeConfigRepository;
+
+ private readonly IRepository _emailNoticeConfigRepository;
+ public EmailSendService(IRepository trialEmailNoticeConfigRepository, IRepository 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(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(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));
+
+ }
+ }
+
+
+ }
+
+ }
+
+ }
+}
diff --git a/IRaCIS.Core.Application/Service/Document/TrialEmailNoticeConfigService.cs b/IRaCIS.Core.Application/Service/Document/TrialEmailNoticeConfigService.cs
index 8a6f4b1ee..923da4b34 100644
--- a/IRaCIS.Core.Application/Service/Document/TrialEmailNoticeConfigService.cs
+++ b/IRaCIS.Core.Application/Service/Document/TrialEmailNoticeConfigService.cs
@@ -33,11 +33,12 @@ namespace IRaCIS.Core.Application.Service
private readonly IRepository _trialEmailNoticeConfigRepository;
-
private readonly IRepository _trialRepository;
private readonly IRepository _trialEmailBlackUserRepository;
private readonly IRepository _taskMedicalReviewRepository;
+ private readonly IRepository _emailNoticeConfigRepository;
+
public IRepository _visitTaskRepository { get; }
public IRepository _trialUserRepository { get; }
@@ -46,9 +47,13 @@ namespace IRaCIS.Core.Application.Service
public IRepository _subjectVisitRepository { get; }
+
+
+
public TrialEmailNoticeConfigService(IRepository trialEmailNoticeConfigRepository, IRepository visitTaskRepository,
IRepository trialRepository,
- IRepository trialUserRepository, IRepository taskMedicalReviewRepository, IRepository subjectRepository, IRepository subjectVisitRepository, IRepository trialEmailBlackUserRepository)
+ IRepository trialUserRepository, IRepository taskMedicalReviewRepository, IRepository subjectRepository,
+ Repository subjectVisitRepository, IRepository trialEmailBlackUserRepository, IRepository emailNoticeConfigRepository)
{
_trialEmailNoticeConfigRepository = trialEmailNoticeConfigRepository;
_visitTaskRepository = visitTaskRepository;
@@ -59,6 +64,7 @@ namespace IRaCIS.Core.Application.Service
_subjectVisitRepository = subjectVisitRepository;
_trialEmailBlackUserRepository = trialEmailBlackUserRepository;
+ _emailNoticeConfigRepository = emailNoticeConfigRepository;
}
///
@@ -97,7 +103,7 @@ namespace IRaCIS.Core.Application.Service
FromEmail = inDto.EmailFromEmail,
FromName = inDto.EmailFromName,
SMTPServerAddress = inDto.EmailSMTPServerAddress,
- SMTPServerPort = inDto.EmailSMTPServerPort.Value,
+ SMTPServerPort = inDto.EmailSMTPServerPort,
TrialId = inDto.TrialId,
});
@@ -120,7 +126,7 @@ namespace IRaCIS.Core.Application.Service
FromEmail = inDto.EmailFromEmail,
FromName = inDto.EmailFromName,
SMTPServerAddress = inDto.EmailSMTPServerAddress,
- SMTPServerPort = inDto.EmailSMTPServerPort.Value,
+ SMTPServerPort = inDto.EmailSMTPServerPort,
});
await _trialRepository.SaveChangesAsync();
@@ -1518,6 +1524,83 @@ namespace IRaCIS.Core.Application.Service
return await query.ToListAsync();
}
+ ///
+ /// 获取系统 邮件配置 勾选列表
+ ///
+ ///
+ ///
+ public async Task> GetSysEmailNoticeConfigList(EmailNoticeConfigQuery queryEmailNoticeConfig)
+ {
+ var emailNoticeConfigQueryable = _emailNoticeConfigRepository
+ .WhereIf(queryEmailNoticeConfig.BusinessScenarioEnum != null, t => t.BusinessScenarioEnum == queryEmailNoticeConfig.BusinessScenarioEnum)
+ .WhereIf(queryEmailNoticeConfig.IsReturnRequired != null, t => t.IsReturnRequired == queryEmailNoticeConfig.IsReturnRequired)
+ .WhereIf(queryEmailNoticeConfig.IsEnable != null, t => t.IsEnable == queryEmailNoticeConfig.IsEnable)
+
+ .ProjectTo(_mapper.ConfigurationProvider, new { trialId = queryEmailNoticeConfig.TrialId });
+
+ return await emailNoticeConfigQueryable.ToPagedListAsync(queryEmailNoticeConfig.PageIndex, queryEmailNoticeConfig.PageSize, queryEmailNoticeConfig.SortField, queryEmailNoticeConfig.Asc);
+ }
+
+ ///
+ /// 批量勾选 传递列表每行数据,后台进行处理转换,建立关联关系
+ ///
+ ///
+ ///
+ public async Task BatchAddSysEmailConfig(List batchAddList)
+ {
+
+ var first = batchAddList.First();
+ var trialId = first.TrialId;
+
+ var emailConfig = await _trialRepository.Where(t => t.Id == trialId).Select(x => new
+ {
+ TrialId = x.Id,
+ EmailAuthorizationCode = x.EmailAuthorizationCode,
+ EmailSMTPServerAddress = x.EmailSMTPServerAddress,
+ EmailFromEmail = x.EmailFromEmail,
+ EmailFromName = x.EmailFromName,
+ IsConfigureEmail = x.IsConfigureEmail,
+ EmailSMTPServerPort = x.EmailSMTPServerPort
+
+ }).FirstNotNullAsync();
+
+ var list = await _repository.Where(t => t.TrialId == trialId && t.IsConfirm).Select(t => new { t.CriterionType, TrialReadingCriterionId = t.Id }).ToListAsync();
+
+
+ var addList = _mapper.Map>(batchAddList);
+
+
+ foreach (var item in addList)
+ {
+ item.SysEmailNoticeConfigId = item.Id;
+ item.Id = Guid.Empty;
+
+ item.AuthorizationCode = emailConfig.EmailAuthorizationCode;
+ item.FromEmail = emailConfig.EmailFromEmail;
+ item.SMTPServerAddress = emailConfig.EmailSMTPServerAddress;
+ item.FromName=emailConfig.EmailFromName;
+ item.SMTPServerPort = emailConfig.EmailSMTPServerPort;
+
+
+ item.TrialReadingCriterionId = list.FirstOrDefault(t => t.CriterionType == item.CriterionTypeEnum)?.TrialReadingCriterionId;
+
+ item.TrialEmailNoticeUserList.AddRange(batchAddList.Where(t => t.Id == item.SysEmailNoticeConfigId)
+ .SelectMany(t => t.ToUserTypeList).Select(t => new TrialEmailNoticeUser() { EmailUserType = EmailUserType.To, UserType = t }));
+
+ item.TrialEmailNoticeUserList.AddRange(batchAddList.Where(t => t.Id == item.SysEmailNoticeConfigId)
+ .SelectMany(t => t.CopyUserTypeList).Select(t => new TrialEmailNoticeUser() { EmailUserType = EmailUserType.Copy, UserType = t }));
+
+
+ await _trialEmailNoticeConfigRepository.AddAsync(item);
+
+ }
+
+ await _trialEmailNoticeConfigRepository.SaveChangesAsync();
+
+ return ResponseOutput.Ok();
+
+
+ }
[HttpPost]
@@ -1534,6 +1617,7 @@ namespace IRaCIS.Core.Application.Service
return await trialEmailNoticeConfigQueryable.ToListAsync();
}
+
[TypeFilter(typeof(TrialResourceFilter), Arguments = new object[] { "AfterStopCannNotOpt" })]
public async Task AddOrUpdateTrialEmailNoticeConfig(TrialEmailNoticeConfigAddOrEdit addOrEditTrialEmailNoticeConfig)
{
@@ -1609,6 +1693,8 @@ namespace IRaCIS.Core.Application.Service
}
+
+
private async Task TestEmailConfigAsync(TrialEmailNoticeConfigAddOrEdit config)
{
diff --git a/IRaCIS.Core.Domain/Common/EmailNoticeConfig.cs b/IRaCIS.Core.Domain/Common/EmailNoticeConfig.cs
index d086d5e48..344c2961b 100644
--- a/IRaCIS.Core.Domain/Common/EmailNoticeConfig.cs
+++ b/IRaCIS.Core.Domain/Common/EmailNoticeConfig.cs
@@ -18,6 +18,9 @@ namespace IRaCIS.Core.Domain.Models
[Table("EmailNoticeConfig")]
public class EmailNoticeConfig : Entity, IAuditUpdate, IAuditAdd,ISoftDelete
{
+ [JsonIgnore]
+ public List TrialEmailNoticeConfigList { get; set; }
+
[JsonIgnore]
public List EmailNoticeUserTypeList { get; set; }
public string Code { get; set; } = String.Empty;
diff --git a/IRaCIS.Core.Domain/Document/TrialEmailNoticeConfig.cs b/IRaCIS.Core.Domain/Document/TrialEmailNoticeConfig.cs
index f54f4b1fa..e75d90472 100644
--- a/IRaCIS.Core.Domain/Document/TrialEmailNoticeConfig.cs
+++ b/IRaCIS.Core.Domain/Document/TrialEmailNoticeConfig.cs
@@ -76,10 +76,12 @@ namespace IRaCIS.Core.Domain.Models
public string EmailHtmlContent { get; set; } = string.Empty;
public string EmailHtmlContentCN { get; set; } = string.Empty;
-
+ [JsonIgnore]
+
+ public EmailNoticeConfig SysEmailNoticeConfig { get; set; }
public Guid? SysEmailNoticeConfigId { get; set; }
diff --git a/IRaCIS.Core.Domain/Trial/Trial.cs b/IRaCIS.Core.Domain/Trial/Trial.cs
index cdac60b49..c40b80e07 100644
--- a/IRaCIS.Core.Domain/Trial/Trial.cs
+++ b/IRaCIS.Core.Domain/Trial/Trial.cs
@@ -382,7 +382,7 @@ namespace IRaCIS.Core.Domain.Models
///
/// SMTP˿
///
- public int? EmailSMTPServerPort { get; set; }
+ public int EmailSMTPServerPort { get; set; }
///
/// Ƿù