449 lines
		
	
	
		
			21 KiB
		
	
	
	
		
			C#
		
	
	
			
		
		
	
	
			449 lines
		
	
	
		
			21 KiB
		
	
	
	
		
			C#
		
	
	
using IRaCIS.Core.Application.Helper;
 | 
						||
using IRaCIS.Core.Application.MassTransit.Command;
 | 
						||
using IRaCIS.Core.Domain;
 | 
						||
using IRaCIS.Core.Domain.BaseModel;
 | 
						||
using IRaCIS.Core.Domain.Models;
 | 
						||
using IRaCIS.Core.Domain.Share;
 | 
						||
using IRaCIS.Core.Infra.EFCore.Common;
 | 
						||
using MassTransit;
 | 
						||
using Microsoft.Extensions.Options;
 | 
						||
using MimeKit;
 | 
						||
using System;
 | 
						||
using System.Collections.Generic;
 | 
						||
using System.Globalization;
 | 
						||
using System.Linq;
 | 
						||
using System.Reactive.Subjects;
 | 
						||
using System.Text;
 | 
						||
using System.Threading.Tasks;
 | 
						||
 | 
						||
namespace IRaCIS.Core.Application.MassTransit.Consumer;
 | 
						||
 | 
						||
/// <summary>
 | 
						||
/// 加急的医学反馈任务  通知MIM
 | 
						||
/// </summary>
 | 
						||
public class UrgentMedicalReviewAddedEventConsumer(
 | 
						||
      IRepository<User> _userRepository,
 | 
						||
       IRepository<TaskMedicalReview> _taskMedicalReviewRepository,
 | 
						||
      IRepository<Trial> _trialRepository,
 | 
						||
        IRepository<SubjectVisit> _subjectVisitRepository,
 | 
						||
      IRepository<ReadingQuestionCriterionTrial> _readingQuestionCriterionTrialRepository,
 | 
						||
      IRepository<VisitTask> _visitTaskRepository,
 | 
						||
         IRepository<Dictionary> _dictionaryRepository,
 | 
						||
      IRepository<EmailNoticeConfig> _emailNoticeConfigrepository,
 | 
						||
      IOptionsMonitor<SystemEmailSendConfig> systemEmailConfig
 | 
						||
    ) : IConsumer<UrgentMedicalReviewAddedEvent>
 | 
						||
{
 | 
						||
    private readonly SystemEmailSendConfig _systemEmailConfig = systemEmailConfig.CurrentValue;
 | 
						||
 | 
						||
    /// <summary>
 | 
						||
    ///  加急的医学反馈任务  通知MIM    (026,027)
 | 
						||
    /// </summary>
 | 
						||
    /// <param name="context"></param>
 | 
						||
    /// <returns></returns>
 | 
						||
    /// <exception cref="NotImplementedException"></exception>
 | 
						||
    public async Task Consume(ConsumeContext<UrgentMedicalReviewAddedEvent> context)
 | 
						||
    {
 | 
						||
        Console.WriteLine("发送(026,027) 【加急的医学反馈任务  通知MIM】邮件!!!");
 | 
						||
        var isEn_US = CultureInfo.CurrentCulture.Name == StaticData.CultureInfo.en_US;
 | 
						||
 | 
						||
        var medicalReviewId = context.Message.MedicalReviewId;
 | 
						||
 | 
						||
        var medicalReview = await _taskMedicalReviewRepository.Where(x => x.Id == medicalReviewId).Include(x => x.VisitTask).Include(x=>x.MedicalManagerUser).FirstOrDefaultAsync();
 | 
						||
 | 
						||
    
 | 
						||
 | 
						||
        if (medicalReview.MedicalManagerUserId == null)
 | 
						||
        {
 | 
						||
            Console.WriteLine("MIMId为空 ID"+ medicalReviewId);
 | 
						||
            return;
 | 
						||
        }
 | 
						||
        var criterion = await _readingQuestionCriterionTrialRepository.FirstOrDefaultAsync(x => x.Id == medicalReview.VisitTask.TrialReadingCriterionId);
 | 
						||
        var userinfo = await _userRepository.Where(x => x.Id == medicalReview.MedicalManagerUserId).FirstOrDefaultAsync();
 | 
						||
 | 
						||
        var taskInfo = await _visitTaskRepository.Where(x => x.Id == medicalReview.VisitTaskId).Include(x=>x.SourceSubjectVisit).Include(x => x.ReadModule).Include(x => x.Subject).FirstNotNullAsync();
 | 
						||
 | 
						||
 | 
						||
        var visitid = taskInfo.SourceSubjectVisit == null ? taskInfo.ReadModule.SubjectVisitId : taskInfo.SourceSubjectVisitId;
 | 
						||
 | 
						||
 | 
						||
        var subjectVisit = await _subjectVisitRepository.Where(x => x.Id == visitid).FirstOrDefaultAsync();
 | 
						||
 | 
						||
 | 
						||
 | 
						||
        var messageToSend = new MimeMessage();
 | 
						||
        //发件地址
 | 
						||
        messageToSend.From.Add(new MailboxAddress(_systemEmailConfig.FromName, _systemEmailConfig.FromEmail));
 | 
						||
        messageToSend.To.Add(new MailboxAddress(String.Empty, userinfo.EMail));
 | 
						||
 | 
						||
        var trialInfo = await _trialRepository.FirstOrDefaultAsync(t => t.Id == medicalReview.TrialId);
 | 
						||
        var companyName = isEn_US ? _systemEmailConfig.CompanyShortName : _systemEmailConfig.CompanyShortNameCN;
 | 
						||
 | 
						||
 | 
						||
        var dictionValue = await CommonEmailHelper.TranslationDictionary(new TranslationDictionaryDto()
 | 
						||
        {
 | 
						||
 | 
						||
            DictionaryRepository = _dictionaryRepository,
 | 
						||
            IsEn_US = isEn_US,
 | 
						||
 | 
						||
 | 
						||
            DictionaryList = new List<DictionaryDto>()
 | 
						||
            { 
 | 
						||
             new DictionaryDto (){DictionaryCode= "ReadingCategory",EnumValue=taskInfo.ReadingCategory.GetEnumInt(), },
 | 
						||
             new DictionaryDto (){DictionaryCode= "MedicalReviewDoctorUserIdea",EnumValue=medicalReview.DoctorUserIdeaEnum.GetEnumInt(), },
 | 
						||
             new DictionaryDto (){DictionaryCode= "MedicalReviewAuditState",EnumValue=medicalReview.AuditState.GetEnumInt(), },
 | 
						||
             new DictionaryDto (){DictionaryCode= "YesOrNo",EnumValue=taskInfo.IsUrgent.ToString().ToLower(), }
 | 
						||
            }
 | 
						||
         }) ;
 | 
						||
 | 
						||
            Func<(string topicStr, string htmlBodyStr), (string topicStr, string htmlBodyStr)> emailConfigFunc = input =>
 | 
						||
            {
 | 
						||
                var subjectName = taskInfo.BlindSubjectCode.IsNullOrEmpty() ? taskInfo.Subject.Code : taskInfo.BlindSubjectCode;
 | 
						||
                var topicStr = string.Format(input.topicStr, trialInfo.ResearchProgramNo, subjectName, taskInfo.TaskBlindName);
 | 
						||
                var htmlBodyStr = string.Format(
 | 
						||
                   CommonEmailHelper.ReplaceCompanyName(_systemEmailConfig, input.htmlBodyStr),
 | 
						||
                   userinfo.FullName,              // 用户名  {0}
 | 
						||
                   trialInfo.ExperimentName,        // 项目   {1}
 | 
						||
                   criterion.CriterionName,  // 阅片标准       {2}
 | 
						||
                   subjectName, // 受试者 {3}
 | 
						||
                   taskInfo.TaskBlindName,             // 访视  {4}
 | 
						||
                   dictionValue[0],      // 任务类型            {5}
 | 
						||
                   //dictionValue[1],     // 阅片人是否同意        {6}
 | 
						||
                   dictionValue[2],     // 审核状态             {6}
 | 
						||
                   dictionValue[3],    // 是否加急               {7}
 | 
						||
                  _systemEmailConfig.SiteUrl              // 链接                    {8}
 | 
						||
                    );
 | 
						||
 | 
						||
                return (topicStr, htmlBodyStr);
 | 
						||
            };
 | 
						||
 | 
						||
        await CommonEmailHelper.GetEmailSubejctAndHtmlInfoAndBuildAsync(_emailNoticeConfigrepository,
 | 
						||
 | 
						||
         context.Message.IsPD ? EmailBusinessScenario.PDVerification_MedicalQC :   EmailBusinessScenario.EligibilityVerification_MedicalQC,
 | 
						||
            
 | 
						||
            messageToSend, emailConfigFunc);
 | 
						||
 | 
						||
        await SendEmailHelper.SendEmailAsync(messageToSend, _systemEmailConfig);
 | 
						||
    }
 | 
						||
}
 | 
						||
 | 
						||
//IR 回复医学反馈通知MIM
 | 
						||
public class UrgentIRRepliedMedicalReviewConsumer(
 | 
						||
      IRepository<User> _userRepository,
 | 
						||
       IRepository<TaskMedicalReview> _taskMedicalReviewRepository,
 | 
						||
      IRepository<Trial> _trialRepository,
 | 
						||
        IRepository<SubjectVisit> _subjectVisitRepository,
 | 
						||
      IRepository<ReadingQuestionCriterionTrial> _readingQuestionCriterionTrialRepository,
 | 
						||
      IRepository<VisitTask> _visitTaskRepository,
 | 
						||
         IRepository<Dictionary> _dictionaryRepository,
 | 
						||
      IRepository<EmailNoticeConfig> _emailNoticeConfigrepository,
 | 
						||
      IOptionsMonitor<SystemEmailSendConfig> systemEmailConfig) : IConsumer<UrgentIRRepliedMedicalReview>
 | 
						||
{
 | 
						||
    private readonly SystemEmailSendConfig _systemEmailConfig = systemEmailConfig.CurrentValue;
 | 
						||
 | 
						||
 | 
						||
    //IR 回复医学反馈通知MIM
 | 
						||
    public async Task Consume(ConsumeContext<UrgentIRRepliedMedicalReview> context)
 | 
						||
    {
 | 
						||
        Console.WriteLine("发送(028,029) 【IR 回复医学反馈通知MIM】邮件!!!");
 | 
						||
        var isEn_US = CultureInfo.CurrentCulture.Name == StaticData.CultureInfo.en_US;
 | 
						||
 | 
						||
        var medicalReviewId = context.Message.MedicalReviewId;
 | 
						||
 | 
						||
        var medicalReview = await _taskMedicalReviewRepository.Where(x => x.Id == medicalReviewId).Include(x => x.VisitTask).Include(x => x.MedicalManagerUser).FirstOrDefaultAsync();
 | 
						||
 | 
						||
 | 
						||
 | 
						||
        if (medicalReview.MedicalManagerUserId == null)
 | 
						||
        {
 | 
						||
            Console.WriteLine("MIMId为空 ID" + medicalReviewId);
 | 
						||
            return;
 | 
						||
        }
 | 
						||
        var criterion = await _readingQuestionCriterionTrialRepository.FirstOrDefaultAsync(x => x.Id == medicalReview.VisitTask.TrialReadingCriterionId);
 | 
						||
        var userinfo = await _userRepository.Where(x => x.Id == medicalReview.MedicalManagerUserId).FirstOrDefaultAsync();
 | 
						||
 | 
						||
        var taskInfo = await _visitTaskRepository.Where(x => x.Id == medicalReview.VisitTaskId).Include(x => x.SourceSubjectVisit).Include(x => x.ReadModule).Include(x => x.Subject).FirstNotNullAsync();
 | 
						||
 | 
						||
 | 
						||
        var visitid = taskInfo.SourceSubjectVisit == null ? taskInfo.ReadModule.SubjectVisitId : taskInfo.SourceSubjectVisitId;
 | 
						||
 | 
						||
 | 
						||
        var subjectVisit = await _subjectVisitRepository.Where(x => x.Id == visitid).FirstOrDefaultAsync();
 | 
						||
 | 
						||
 | 
						||
 | 
						||
        var messageToSend = new MimeMessage();
 | 
						||
        //发件地址
 | 
						||
        messageToSend.From.Add(new MailboxAddress(_systemEmailConfig.FromName, _systemEmailConfig.FromEmail));
 | 
						||
        messageToSend.To.Add(new MailboxAddress(String.Empty, userinfo.EMail));
 | 
						||
 | 
						||
        var trialInfo = await _trialRepository.FirstOrDefaultAsync(t => t.Id == medicalReview.TrialId);
 | 
						||
        var companyName = isEn_US ? _systemEmailConfig.CompanyShortName : _systemEmailConfig.CompanyShortNameCN;
 | 
						||
 | 
						||
 | 
						||
        var dictionValue = await CommonEmailHelper.TranslationDictionary(new TranslationDictionaryDto()
 | 
						||
        {
 | 
						||
 | 
						||
            DictionaryRepository = _dictionaryRepository,
 | 
						||
            IsEn_US = isEn_US,
 | 
						||
 | 
						||
 | 
						||
            DictionaryList = new List<DictionaryDto>()
 | 
						||
            {
 | 
						||
             new DictionaryDto (){DictionaryCode= "ReadingCategory",EnumValue=taskInfo.ReadingCategory.GetEnumInt(), },
 | 
						||
             new DictionaryDto (){DictionaryCode= "MedicalReviewDoctorUserIdea",EnumValue=medicalReview.DoctorUserIdeaEnum.GetEnumInt(), },
 | 
						||
             new DictionaryDto (){DictionaryCode= "MedicalReviewAuditState",EnumValue=medicalReview.AuditState.GetEnumInt(), },
 | 
						||
             new DictionaryDto (){DictionaryCode= "YesOrNo",EnumValue=taskInfo.IsUrgent.ToString().ToLower(), }
 | 
						||
            }
 | 
						||
        });
 | 
						||
 | 
						||
        Func<(string topicStr, string htmlBodyStr), (string topicStr, string htmlBodyStr)> emailConfigFunc = input =>
 | 
						||
        {
 | 
						||
            var subjectCode = taskInfo.BlindSubjectCode.IsNullOrEmpty() ? taskInfo.Subject.Code : taskInfo.BlindSubjectCode;
 | 
						||
            var topicStr = string.Format(input.topicStr, trialInfo.ResearchProgramNo, subjectCode, taskInfo.TaskBlindName);
 | 
						||
            var htmlBodyStr = string.Format(
 | 
						||
               CommonEmailHelper.ReplaceCompanyName(_systemEmailConfig, input.htmlBodyStr),
 | 
						||
               userinfo.FullName,              // 用户名  {0}
 | 
						||
               trialInfo.ExperimentName,        // 项目   {1}
 | 
						||
               criterion.CriterionName,  // 阅片标准       {2}
 | 
						||
               subjectCode, // 受试者 {3}
 | 
						||
               taskInfo.TaskBlindName,             // 访视  {4}
 | 
						||
               dictionValue[0],      // 任务类型            {5}
 | 
						||
               dictionValue[1],     // 阅片人是否同意        {6}
 | 
						||
               dictionValue[2],     // 审核状态             {7}
 | 
						||
               dictionValue[3],    // 是否加急               {8}
 | 
						||
              _systemEmailConfig.SiteUrl              // 链接                    {9}
 | 
						||
                );
 | 
						||
 | 
						||
            return (topicStr, htmlBodyStr);
 | 
						||
        };
 | 
						||
 | 
						||
        await CommonEmailHelper.GetEmailSubejctAndHtmlInfoAndBuildAsync(_emailNoticeConfigrepository,
 | 
						||
 | 
						||
         context.Message.IsPD ? EmailBusinessScenario.PDVerification_ExpeditedMedicalQCResponse : EmailBusinessScenario.EligibilityVerification_ExpeditedMedicalQCResponse,
 | 
						||
 | 
						||
            messageToSend, emailConfigFunc);
 | 
						||
 | 
						||
        await SendEmailHelper.SendEmailAsync(messageToSend, _systemEmailConfig);
 | 
						||
    }
 | 
						||
}
 | 
						||
 | 
						||
/// <summary>
 | 
						||
/// MIM 回复医学返回通知IR
 | 
						||
/// </summary>
 | 
						||
public class UrgentMIMRepliedMedicalReviewConsumer(
 | 
						||
      IRepository<User> _userRepository,
 | 
						||
       IRepository<TaskMedicalReview> _taskMedicalReviewRepository,
 | 
						||
      IRepository<Trial> _trialRepository,
 | 
						||
        IRepository<SubjectVisit> _subjectVisitRepository,
 | 
						||
      IRepository<ReadingQuestionCriterionTrial> _readingQuestionCriterionTrialRepository,
 | 
						||
      IRepository<VisitTask> _visitTaskRepository,
 | 
						||
         IRepository<Dictionary> _dictionaryRepository,
 | 
						||
      IRepository<EmailNoticeConfig> _emailNoticeConfigrepository,
 | 
						||
      IOptionsMonitor<SystemEmailSendConfig> systemEmailConfig) : IConsumer<UrgentMIMRepliedMedicalReview>
 | 
						||
{
 | 
						||
 | 
						||
    private readonly SystemEmailSendConfig _systemEmailConfig = systemEmailConfig.CurrentValue;
 | 
						||
 | 
						||
    /// <summary>
 | 
						||
    /// MIM 回复医学返回通知IR
 | 
						||
    /// </summary>
 | 
						||
    /// <param name="context"></param>
 | 
						||
    /// <returns></returns>
 | 
						||
    public async Task Consume(ConsumeContext<UrgentMIMRepliedMedicalReview> context)
 | 
						||
    {
 | 
						||
        Console.WriteLine("发送(022) 【加急医学反馈】邮件!!!");
 | 
						||
        var isEn_US = CultureInfo.CurrentCulture.Name == StaticData.CultureInfo.en_US;
 | 
						||
 | 
						||
        var medicalReviewId = context.Message.MedicalReviewId;
 | 
						||
 | 
						||
        var medicalReview = await _taskMedicalReviewRepository.Where(x => x.Id == medicalReviewId).Include(x => x.VisitTask).Include(x => x.MedicalManagerUser).FirstOrDefaultAsync();
 | 
						||
 | 
						||
 | 
						||
 | 
						||
        if (medicalReview.MedicalManagerUserId == null)
 | 
						||
        {
 | 
						||
            Console.WriteLine("MIMId为空 ID" + medicalReviewId);
 | 
						||
            return;
 | 
						||
        }
 | 
						||
        var criterion = await _readingQuestionCriterionTrialRepository.FirstOrDefaultAsync(x => x.Id == medicalReview.VisitTask.TrialReadingCriterionId);
 | 
						||
        var taskInfo = await _visitTaskRepository.Where(x => x.Id == medicalReview.VisitTaskId).Include(x => x.SourceSubjectVisit).Include(x => x.ReadModule).Include(x => x.Subject).FirstNotNullAsync();
 | 
						||
 | 
						||
        var userinfo = await _userRepository.Where(x => x.Id == taskInfo.DoctorUserId).FirstOrDefaultAsync();
 | 
						||
 | 
						||
      
 | 
						||
 | 
						||
 | 
						||
        var visitid = taskInfo.SourceSubjectVisit == null ? taskInfo.ReadModule.SubjectVisitId : taskInfo.SourceSubjectVisitId;
 | 
						||
 | 
						||
 | 
						||
        var subjectVisit = await _subjectVisitRepository.Where(x => x.Id == visitid).FirstOrDefaultAsync();
 | 
						||
 | 
						||
 | 
						||
 | 
						||
        var messageToSend = new MimeMessage();
 | 
						||
        //发件地址
 | 
						||
        messageToSend.From.Add(new MailboxAddress(_systemEmailConfig.FromName, _systemEmailConfig.FromEmail));
 | 
						||
        messageToSend.To.Add(new MailboxAddress(String.Empty, userinfo.EMail));
 | 
						||
 | 
						||
        var trialInfo = await _trialRepository.FirstOrDefaultAsync(t => t.Id == medicalReview.TrialId);
 | 
						||
        var companyName = isEn_US ? _systemEmailConfig.CompanyShortName : _systemEmailConfig.CompanyShortNameCN;
 | 
						||
 | 
						||
 | 
						||
        var dictionValue = await CommonEmailHelper.TranslationDictionary(new TranslationDictionaryDto()
 | 
						||
        {
 | 
						||
 | 
						||
            DictionaryRepository = _dictionaryRepository,
 | 
						||
            IsEn_US = isEn_US,
 | 
						||
 | 
						||
 | 
						||
            DictionaryList = new List<DictionaryDto>()
 | 
						||
            {
 | 
						||
             new DictionaryDto (){DictionaryCode= "ReadingCategory",EnumValue=taskInfo.ReadingCategory.GetEnumInt(), },
 | 
						||
             new DictionaryDto (){DictionaryCode= "IsPass",EnumValue=medicalReview.IsHaveQuestion.ToString().ToLower(), },// 审核结论
 | 
						||
             new DictionaryDto (){DictionaryCode= "AuditAdvice",EnumValue=medicalReview.AuditAdviceEnum.GetEnumInt(), },// 审核建议
 | 
						||
             new DictionaryDto (){DictionaryCode= "YesOrNo",EnumValue=taskInfo.IsUrgent.ToString().ToLower(), }, //是否加急
 | 
						||
 | 
						||
 
 | 
						||
          
 | 
						||
          
 | 
						||
         
 | 
						||
            }
 | 
						||
        });
 | 
						||
 | 
						||
        Func<(string topicStr, string htmlBodyStr), (string topicStr, string htmlBodyStr)> emailConfigFunc = input =>
 | 
						||
        {
 | 
						||
            var subjectCode = taskInfo.BlindSubjectCode.IsNullOrEmpty() ? taskInfo.Subject.Code : taskInfo.BlindSubjectCode;
 | 
						||
            var topicStr = string.Format(input.topicStr, trialInfo.ResearchProgramNo, subjectCode, taskInfo.TaskBlindName);
 | 
						||
            var htmlBodyStr = string.Format(
 | 
						||
               CommonEmailHelper.ReplaceCompanyName(_systemEmailConfig, input.htmlBodyStr),
 | 
						||
               userinfo.FullName,              // 用户名  {0}
 | 
						||
               trialInfo.ExperimentName,        // 项目   {1}
 | 
						||
               subjectCode, // 受试者 {2}
 | 
						||
               taskInfo.TaskBlindName,             // 访视  {3}
 | 
						||
               criterion.CriterionName,  // 阅片标准       {4}
 | 
						||
               dictionValue[0],      // 任务类型            {5}
 | 
						||
               dictionValue[1],      // 审核结论           {6}
 | 
						||
               dictionValue[2],     // 医学审核建议        {7}
 | 
						||
               dictionValue[3],    // 是否加急               {8}
 | 
						||
 | 
						||
              _systemEmailConfig.SiteUrl              // 链接                  {9}
 | 
						||
                );
 | 
						||
 | 
						||
            return (topicStr, htmlBodyStr);
 | 
						||
        };
 | 
						||
 | 
						||
        await CommonEmailHelper.GetEmailSubejctAndHtmlInfoAndBuildAsync(_emailNoticeConfigrepository,
 | 
						||
 | 
						||
          EmailBusinessScenario.ExpeditedMedicalQCToIR,
 | 
						||
 | 
						||
            messageToSend, emailConfigFunc);
 | 
						||
 | 
						||
        await SendEmailHelper.SendEmailAsync(messageToSend, _systemEmailConfig);
 | 
						||
    }
 | 
						||
}
 | 
						||
 | 
						||
/// <summary>
 | 
						||
/// 加急阅片 IR 申请重阅  或者PM 申请重阅
 | 
						||
/// </summary>
 | 
						||
public class UrgentIRApplyedReReadingConsumer(
 | 
						||
      IRepository<User> _userRepository,
 | 
						||
        IRepository<TrialUser> _trialUseRepository,
 | 
						||
       IRepository<TaskMedicalReview> _taskMedicalReviewRepository,
 | 
						||
      IRepository<Trial> _trialRepository,
 | 
						||
        IRepository<SubjectVisit> _subjectVisitRepository,
 | 
						||
      IRepository<ReadingQuestionCriterionTrial> _readingQuestionCriterionTrialRepository,
 | 
						||
      IRepository<VisitTask> _visitTaskRepository,
 | 
						||
         IRepository<Dictionary> _dictionaryRepository,
 | 
						||
      IRepository<EmailNoticeConfig> _emailNoticeConfigrepository,
 | 
						||
      IOptionsMonitor<SystemEmailSendConfig> systemEmailConfig) : IConsumer<UrgentApplyedReReading>
 | 
						||
{
 | 
						||
 | 
						||
    private readonly SystemEmailSendConfig _systemEmailConfig = systemEmailConfig.CurrentValue;
 | 
						||
    public async Task Consume(ConsumeContext<UrgentApplyedReReading> context)
 | 
						||
    {
 | 
						||
        Console.WriteLine("发送(024,025) 【加急医学反馈】邮件!!!");
 | 
						||
        var isEn_US = CultureInfo.CurrentCulture.Name == StaticData.CultureInfo.en_US;
 | 
						||
 | 
						||
        var visitTaskId = context.Message.VisitTaskId;
 | 
						||
 | 
						||
        var taskInfo = await _visitTaskRepository.Where(x => x.Id == visitTaskId).Include(x => x.SourceSubjectVisit).Include(x => x.ReadModule).Include(x => x.Subject).FirstNotNullAsync();
 | 
						||
        var criterion = await _readingQuestionCriterionTrialRepository.FirstOrDefaultAsync(x => x.Id == taskInfo.TrialReadingCriterionId);
 | 
						||
        
 | 
						||
 | 
						||
        var doctorInfo = await _userRepository.Where(x => x.Id == taskInfo.DoctorUserId).FirstOrDefaultAsync();
 | 
						||
 | 
						||
        var trialUser = await _trialUseRepository.Where(x => x.TrialId == taskInfo.TrialId).Include(x => x.User).Select(x=>x.User).ToListAsync();
 | 
						||
 | 
						||
        var userinfoList = trialUser.Where(x => x.UserTypeEnum == UserTypeEnum.ProjectManager||x.UserTypeEnum==UserTypeEnum.APM).ToList();
 | 
						||
        if (context.Message.ReReadingApplyState == ReReadingApplyState.TrialGroupHaveApplyed)
 | 
						||
        {
 | 
						||
            userinfoList = trialUser.Where(x => x.UserTypeEnum == UserTypeEnum.CPM || x.UserTypeEnum == UserTypeEnum.SPM).ToList();
 | 
						||
        }
 | 
						||
 | 
						||
        var visitid = taskInfo.SourceSubjectVisit == null ? taskInfo.ReadModule.SubjectVisitId : taskInfo.SourceSubjectVisitId;
 | 
						||
 | 
						||
 | 
						||
        var subjectVisit = await _subjectVisitRepository.Where(x => x.Id == visitid).FirstOrDefaultAsync();
 | 
						||
 | 
						||
 | 
						||
        foreach (var userinfo in userinfoList)
 | 
						||
        {
 | 
						||
            var messageToSend = new MimeMessage();
 | 
						||
            //发件地址
 | 
						||
            messageToSend.From.Add(new MailboxAddress(_systemEmailConfig.FromName, _systemEmailConfig.FromEmail));
 | 
						||
            messageToSend.To.Add(new MailboxAddress(String.Empty, userinfo.EMail));
 | 
						||
 | 
						||
            var trialInfo = await _trialRepository.FirstOrDefaultAsync(t => t.Id == taskInfo.TrialId);
 | 
						||
            var companyName = isEn_US ? _systemEmailConfig.CompanyShortName : _systemEmailConfig.CompanyShortNameCN;
 | 
						||
 | 
						||
 | 
						||
            var dictionValue = await CommonEmailHelper.TranslationDictionary(new TranslationDictionaryDto()
 | 
						||
            {
 | 
						||
 | 
						||
                DictionaryRepository = _dictionaryRepository,
 | 
						||
                IsEn_US = isEn_US,
 | 
						||
                DictionaryList = new List<DictionaryDto>()
 | 
						||
            {
 | 
						||
             new DictionaryDto (){DictionaryCode= "ReadingCategory",EnumValue=taskInfo.ReadingCategory.GetEnumInt(), }, //任务类型
 | 
						||
             new DictionaryDto (){DictionaryCode= "RequestReReadingResult",EnumValue="0", }, //审批结果 都是待审批
 | 
						||
            }
 | 
						||
            });
 | 
						||
 | 
						||
            Func<(string topicStr, string htmlBodyStr), (string topicStr, string htmlBodyStr)> emailConfigFunc = input =>
 | 
						||
            {
 | 
						||
                var subjectCode = taskInfo.BlindSubjectCode.IsNullOrEmpty() ? taskInfo.Subject.Code : taskInfo.BlindSubjectCode;
 | 
						||
                var topicStr = string.Format(input.topicStr, trialInfo.ResearchProgramNo, subjectCode, taskInfo.TaskBlindName);
 | 
						||
                var htmlBodyStr = string.Format(
 | 
						||
                   CommonEmailHelper.ReplaceCompanyName(_systemEmailConfig, input.htmlBodyStr),
 | 
						||
                   userinfo.FullName,              // 用户名  {0}
 | 
						||
                   trialInfo.ExperimentName,        // 项目   {1}
 | 
						||
                   subjectCode, // 受试者 {2}
 | 
						||
                   taskInfo.TaskBlindName,             // 访视  {3}
 | 
						||
                   dictionValue[0],    // 任务类型 {4}
 | 
						||
                   doctorInfo.FullName,                       // 阅片人 {5}
 | 
						||
                   criterion.CriterionName,                      // 阅片标准 {6}
 | 
						||
                   dictionValue[1],                                               // 审批结果 {7}
 | 
						||
                   _systemEmailConfig.SiteUrl             // 链接                  {8}
 | 
						||
 | 
						||
 | 
						||
 | 
						||
 | 
						||
                    );
 | 
						||
 | 
						||
                return (topicStr, htmlBodyStr);
 | 
						||
            };
 | 
						||
 | 
						||
            await CommonEmailHelper.GetEmailSubejctAndHtmlInfoAndBuildAsync(_emailNoticeConfigrepository,
 | 
						||
 | 
						||
             context.Message.ReReadingApplyState == ReReadingApplyState.TrialGroupHaveApplyed? EmailBusinessScenario.ReReadFromPMApproval: EmailBusinessScenario.ReReadFromIRApproval,
 | 
						||
 | 
						||
                messageToSend, emailConfigFunc);
 | 
						||
 | 
						||
            await SendEmailHelper.SendEmailAsync(messageToSend, _systemEmailConfig);
 | 
						||
        }
 | 
						||
 | 
						||
       
 | 
						||
    }
 | 
						||
}
 | 
						||
 |