From e05f43b0b86063d245f35f7ce97ab8cd732e6b27 Mon Sep 17 00:00:00 2001 From: hang <872297557@qq.com> Date: Tue, 22 Aug 2023 14:54:30 +0800 Subject: [PATCH] =?UTF-8?q?=E9=A1=B9=E7=9B=AE=E9=82=AE=E4=BB=B6=E9=85=8D?= =?UTF-8?q?=E7=BD=AE=E4=BF=AE=E6=94=B9--015?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Service/Document/EmailSendService.cs | 35 +++++++++++-------- .../Document/TrialEmailNoticeConfigService.cs | 11 ++++-- .../Management/DTO/UserTypeRoleModel.cs | 10 ++++++ .../Common/EmailScenarioEnum.cs | 8 +++++ 4 files changed, 47 insertions(+), 17 deletions(-) diff --git a/IRaCIS.Core.Application/Service/Document/EmailSendService.cs b/IRaCIS.Core.Application/Service/Document/EmailSendService.cs index dc4f0d9be..e674d76c3 100644 --- a/IRaCIS.Core.Application/Service/Document/EmailSendService.cs +++ b/IRaCIS.Core.Application/Service/Document/EmailSendService.cs @@ -5,6 +5,7 @@ using IRaCIS.Core.Domain.Models; using IRaCIS.Core.Domain.Share; using IRaCIS.Core.Infrastructure; using MailKit; +using Microsoft.VisualBasic; using MimeKit; using System; using System.Collections.Generic; @@ -38,23 +39,25 @@ namespace IRaCIS.Core.Application.Service public async Task TrialImageQCTaskEmail(Guid trialId) { - var trialInfo=_repository.Where(t=>t.Id == trialId).Select(t=>new {t.ResearchProgramNo,t.ExperimentName, t.TrialCode,t.TrialStatusStr}).FirstOrDefault(); + var trialInfo = _repository.Where(t => t.Id == trialId).Select(t => new { t.ResearchProgramNo, t.ExperimentName, t.TrialCode, t.TrialStatusStr }).FirstOrDefault(); //找到 该项目的IQC 用户Id - var userIdList = await _repository.Where(t => t.TrialId == trialId).Where(t => t.User.UserTypeEnum == UserTypeEnum.IQC).Select(t => t.UserId).ToListAsync(); + 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(); //判断是否任务可以领取 ,可以的话 发送邮件 - foreach (var userId in userIdList) + foreach (var user in userList) { + var userId = user.UserId; + //过滤项目 并且 将 _userInfo.Id 换位 当前发送邮件的Id - var query = _trialRepository.Where(t=>t.Id==trialId) + var query = _trialRepository.Where(t => t.Id == trialId) .Where(t => t.TrialUserList.Any(t => t.UserId == userId)) .Where(t => t.QCProcessEnum != TrialQCProcess.NotAudit) - .Select(t => new - { + .Select(t => new + { //待领取量 ToBeClaimedCount = t.SubjectVisitList.Where(u => u.CurrentActionUserId == null && (u.PreliminaryAuditUserId == null || (u.PreliminaryAuditUserId != userId && u.ReviewAuditUserId == null))).Count(), @@ -63,26 +66,28 @@ namespace IRaCIS.Core.Application.Service }); - var sendStat= await query.FirstOrDefaultAsync(); + var sendStat = await query.FirstOrDefaultAsync(); //当前人 有待领取的或者有待审核的才发邮件 - if (sendStat != null && (sendStat.ToBeClaimedCount > 0 || sendStat.ToBeReviewedCount>0)) + if (sendStat != null && (sendStat.ToBeClaimedCount > 0 || sendStat.ToBeReviewedCount > 0)) { + Func topicAndHtmlFunc = trialEmailConfig => + { + var topicStr = string.Format(_userInfo.IsEn_Us ? trialEmailConfig.EmailTopic : trialEmailConfig.EmailTopicCN, trialInfo.ResearchProgramNo); + var htmlBodyStr = string.Format(_userInfo.IsEn_Us ? trialEmailConfig.EmailHtmlContent : trialEmailConfig.EmailHtmlContentCN, user.FullName, DateTime.Now, sendStat.ToBeClaimedCount, sendStat.ToBeReviewedCount); + return (topicStr, htmlBodyStr); + }; + + await SendTrialEmailAsync(trialId, CommonDocumentBusinessScenario.QCQuestion, topicAndHtmlFunc); } - - - } - - - } - public async Task SendTrialEmail(Guid trialId, CommonDocumentBusinessScenario businessScenario, Func topicAndHtmlFunc, Guid? trialReadingCriterionId, Guid? subjectId) + public async Task SendTrialEmailAsync(Guid trialId, CommonDocumentBusinessScenario businessScenario, Func topicAndHtmlFunc, Guid? trialReadingCriterionId = null, Guid? subjectId = null) { //找到配置 var trialEmailConfig = await _trialEmailNoticeConfigRepository.Where(t => t.TrialId == trialId && t.TrialReadingCriterionId == trialReadingCriterionId && t.BusinessScenarioEnum == businessScenario, ignoreQueryFilters: true) diff --git a/IRaCIS.Core.Application/Service/Document/TrialEmailNoticeConfigService.cs b/IRaCIS.Core.Application/Service/Document/TrialEmailNoticeConfigService.cs index 9850ac162..7ac89fe3a 100644 --- a/IRaCIS.Core.Application/Service/Document/TrialEmailNoticeConfigService.cs +++ b/IRaCIS.Core.Application/Service/Document/TrialEmailNoticeConfigService.cs @@ -1519,9 +1519,16 @@ namespace IRaCIS.Core.Application.Service /// /// /// - public async Task> GetTrialUserIdSelectList(Guid trialId) + public async Task> GetTrialUserIdSelectList(Guid trialId) { - var query = _trialUserRepository.Where(t => t.TrialId == trialId, false, true).IgnoreQueryFilters().Select(t => t.UserId).Distinct(); + var query = _trialUserRepository.Where(t => t.TrialId == trialId, false, true).IgnoreQueryFilters() + .Select(t => new TrialSelectUser() + { + UserId = t.UserId, + UserName = t.User.UserName, + RealName = t.User.FullName, + UserTypeEnum = t.User.UserTypeEnum + }).Distinct(); return await query.ToListAsync(); } diff --git a/IRaCIS.Core.Application/Service/Management/DTO/UserTypeRoleModel.cs b/IRaCIS.Core.Application/Service/Management/DTO/UserTypeRoleModel.cs index 3a059e4bd..ac6275188 100644 --- a/IRaCIS.Core.Application/Service/Management/DTO/UserTypeRoleModel.cs +++ b/IRaCIS.Core.Application/Service/Management/DTO/UserTypeRoleModel.cs @@ -64,6 +64,16 @@ namespace IRaCIS.Core.Application.Contracts } + public class TrialSelectUser + { + public Guid UserId { get; set; } + + public string UserName { get; set; } + + public string RealName { get; set; } + + public UserTypeEnum UserTypeEnum { get; set; } + } public class TrialUserType { diff --git a/IRaCIS.Core.Domain.Share/Common/EmailScenarioEnum.cs b/IRaCIS.Core.Domain.Share/Common/EmailScenarioEnum.cs index d14ccc540..584e8e411 100644 --- a/IRaCIS.Core.Domain.Share/Common/EmailScenarioEnum.cs +++ b/IRaCIS.Core.Domain.Share/Common/EmailScenarioEnum.cs @@ -44,6 +44,14 @@ namespace IRaCIS.Core.Domain.Share Trial=3, Reviewer=4, + + QCTask=5, + + QCQuestion=6, + + ImageQuestion = 7, + + ClinicalDataQuestion=8, }