diff --git a/IRaCIS.Core.Application/Service/Document/EmailSendService.cs b/IRaCIS.Core.Application/Service/Document/EmailSendService.cs index b6a9d4be4..715531af8 100644 --- a/IRaCIS.Core.Application/Service/Document/EmailSendService.cs +++ b/IRaCIS.Core.Application/Service/Document/EmailSendService.cs @@ -1,4 +1,5 @@ -using IRaCIS.Core.Application.Contracts; +using DocumentFormat.OpenXml.Spreadsheet; +using IRaCIS.Core.Application.Contracts; using IRaCIS.Core.Application.Helper; using IRaCIS.Core.Application.Service.Reading.Dto; using IRaCIS.Core.Domain.Models; @@ -19,10 +20,14 @@ namespace IRaCIS.Core.Application.Service public interface IEmailSendService { + Task SendClinicalDataQuestionAsync(Guid visitTaskId, string content); + Task SendTrialImageQCTaskEmailAsync(Guid trialId); + Task SendTrialQCQuestionEmailAsync(Guid trialId); + Task SendTrialImageQuestionAsync(Guid trialId); } - public class EmailSendService : BaseService + public class EmailSendService : BaseService, IEmailSendService { private readonly IRepository _trialEmailNoticeConfigRepository; @@ -41,7 +46,7 @@ namespace IRaCIS.Core.Application.Service /// /// /// - public async Task SendTrialImageQCTaskEmail(Guid trialId) + public async Task SendTrialImageQCTaskEmailAsync(Guid trialId) { var trialInfo = _repository.Where(t => t.Id == trialId).Select(t => new { t.ResearchProgramNo, t.ExperimentName, t.TrialCode, t.TrialStatusStr }).FirstOrDefault(); @@ -49,7 +54,7 @@ namespace IRaCIS.Core.Application.Service var userList = await _repository.Where(t => t.TrialId == trialId).Where(t => t.User.UserTypeEnum == UserTypeEnum.IQC).Select(t => new { t.UserId, t.User.FullName }).ToListAsync(); //判断是否任务可以领取 ,可以的话 发送邮件 - var userIdList=userList.Select(t=>t.UserId).ToList(); + var userIdList = userList.Select(t => t.UserId).ToList(); foreach (var user in userList) { @@ -81,7 +86,7 @@ namespace IRaCIS.Core.Application.Service return (topicStr, htmlBodyStr); }; - await SendTrialEmailAsync(trialId, CommonDocumentBusinessScenario.QCQuestion, topicAndHtmlFunc); + await SendTrialEmailAsync(trialId, CommonDocumentBusinessScenario.QCTask, topicAndHtmlFunc); } } } @@ -91,7 +96,7 @@ namespace IRaCIS.Core.Application.Service /// /// /// - public async Task SendTrialQCQuestionEmail(Guid trialId) + public async Task SendTrialQCQuestionEmailAsync(Guid trialId) { var trialInfo = _repository.Where(t => t.Id == trialId).Select(t => new { t.ResearchProgramNo, t.ExperimentName, t.TrialCode, t.TrialStatusStr }).FirstOrDefault(); @@ -106,15 +111,15 @@ namespace IRaCIS.Core.Application.Service //过滤项目 并且 将 _userInfo.Id 换位 当前发送邮件的Id var query = _trialRepository - .Select(t => new + .Select(t => new { - ReUploadTobeDealedCount= t.SubjectVisitList.SelectMany(c => c.QCChallengeList) - .Where(u => u.CreateUserId == userId && u.IsClosed == false && u.LatestReplyUser.UserTypeEnum == UserTypeEnum.ClinicalResearchCoordinator && u.ReuploadEnum==QCChanllengeReuploadEnum.CRCRequestReupload).Count(), + ReUploadTobeDealedCount = t.SubjectVisitList.SelectMany(c => c.QCChallengeList) + .Where(u => u.CreateUserId == userId && u.IsClosed == false && u.LatestReplyUser.UserTypeEnum == UserTypeEnum.ClinicalResearchCoordinator && u.ReuploadEnum == QCChanllengeReuploadEnum.CRCRequestReupload).Count(), //质疑待处理 ToBeDealedCount = t.SubjectVisitList.SelectMany(c => c.QCChallengeList) .Where(u => u.CreateUserId == userId && u.IsClosed == false && u.LatestReplyUser.UserTypeEnum == UserTypeEnum.ClinicalResearchCoordinator).Count(), - }); + }); var sendStat = await query.FirstOrDefaultAsync(); @@ -139,7 +144,7 @@ namespace IRaCIS.Core.Application.Service /// /// /// - public async Task SendTrialImageQuestino(Guid trialId) + public async Task SendTrialImageQuestionAsync(Guid trialId) { var trialInfo = _repository.Where(t => t.Id == trialId).Select(t => new { t.ResearchProgramNo, t.ExperimentName, t.TrialCode, t.TrialStatusStr }).FirstOrDefault(); @@ -154,7 +159,7 @@ namespace IRaCIS.Core.Application.Service //过滤项目 并且 将 _userInfo.Id 换位 当前发送邮件的Id var query = _trialRepository .Select(t => new - { + { //质疑待处理 ToBeDealedCount = t.SubjectVisitList.SelectMany(c => c.QCChallengeList) .Where(u => u.CreateUserId == userId && u.IsClosed == false && u.LatestReplyUser.UserTypeEnum == UserTypeEnum.IQC).Count(), @@ -164,7 +169,7 @@ namespace IRaCIS.Core.Application.Service var sendStat = await query.FirstOrDefaultAsync(); //当前人 - if (sendStat != null && (sendStat.ToBeDealedCount > 0 )) + if (sendStat != null && (sendStat.ToBeDealedCount > 0)) { Func topicAndHtmlFunc = trialEmailConfig => @@ -174,16 +179,26 @@ namespace IRaCIS.Core.Application.Service return (topicStr, htmlBodyStr); }; - await SendTrialEmailAsync(trialId, CommonDocumentBusinessScenario.QCQuestion, topicAndHtmlFunc); + await SendTrialEmailAsync(trialId, CommonDocumentBusinessScenario.ImageQuestion, topicAndHtmlFunc); } } } //临床数据质询 - public async Task SendClinicalDataQuestion(Guid trialId,Guid visitTaskId,string content) + public async Task SendClinicalDataQuestionAsync(Guid visitTaskId, string content) { + var info = await _repository.Where(t => t.Id == visitTaskId, ignoreQueryFilters: true).Select(t => new { t.TrialId, t.Trial.ResearchProgramNo, t.Trial.TrialCode, t.SourceSubjectVisit.VisitName, t.Subject.Code }).FirstOrDefaultAsync(); + + Func topicAndHtmlFunc = trialEmailConfig => + { + var topicStr = string.Format(_userInfo.IsEn_Us ? trialEmailConfig.EmailTopic : trialEmailConfig.EmailTopicCN, info.ResearchProgramNo,info.Code,info.VisitName); + var htmlBodyStr = string.Format(_userInfo.IsEn_Us ? trialEmailConfig.EmailHtmlContent : trialEmailConfig.EmailHtmlContentCN, info.ResearchProgramNo, info.Code, info.VisitName,_userInfo.UserName,content); + return (topicStr, htmlBodyStr); + }; + + await SendTrialEmailAsync(info.TrialId, CommonDocumentBusinessScenario.ClinicalDataQuestion, topicAndHtmlFunc); }