474 lines
23 KiB
C#
474 lines
23 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<UserRole> _userRoleRepository,
|
||
IRepository<TaskMedicalReview> _taskMedicalReviewRepository,
|
||
IRepository<Trial> _trialRepository,
|
||
IRepository<SubjectVisit> _subjectVisitRepository,
|
||
IRepository<ReadingQuestionCriterionTrial> _readingQuestionCriterionTrialRepository,
|
||
IRepository<VisitTask> _visitTaskRepository,
|
||
IRepository<Dictionary> _dictionaryRepository,
|
||
IRepository<TrialEmailNoticeConfig> _trialEmailNoticeConfigrepository,
|
||
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 trialId = medicalReview.TrialId;
|
||
|
||
var scenario = context.Message.IsPD ? EmailBusinessScenario.PDVerification_MedicalQC : EmailBusinessScenario.EligibilityVerification_MedicalQC;
|
||
|
||
var trialEmailConfig = _trialEmailNoticeConfigrepository.Where(t => t.TrialId == trialId && t.BusinessScenarioEnum == scenario && t.IsAutoSend && t.IsEnable).FirstOrDefault();
|
||
|
||
if (trialEmailConfig != null)
|
||
{
|
||
|
||
|
||
var criterion = await _readingQuestionCriterionTrialRepository.FirstOrDefaultAsync(x => x.Id == medicalReview.VisitTask.TrialReadingCriterionId);
|
||
var userinfo = await _userRoleRepository.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.GetTrialEmailSubejctAndHtmlInfoAndBuildAsync(trialEmailConfig, messageToSend, emailConfigFunc);
|
||
|
||
await SendEmailHelper.SendEmailAsync(messageToSend, _systemEmailConfig);
|
||
|
||
}
|
||
|
||
}
|
||
}
|
||
|
||
//IR 回复医学反馈通知MIM
|
||
public class UrgentIRRepliedMedicalReviewConsumer(
|
||
IRepository<UserRole> _userRoleRepository,
|
||
IRepository<TaskMedicalReview> _taskMedicalReviewRepository,
|
||
IRepository<Trial> _trialRepository,
|
||
IRepository<SubjectVisit> _subjectVisitRepository,
|
||
IRepository<ReadingQuestionCriterionTrial> _readingQuestionCriterionTrialRepository,
|
||
IRepository<VisitTask> _visitTaskRepository,
|
||
IRepository<Dictionary> _dictionaryRepository,
|
||
IRepository<TrialEmailNoticeConfig> _trialEmailNoticeConfigrepository,
|
||
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 trialId = medicalReview.TrialId;
|
||
|
||
var scenario = context.Message.IsPD ? EmailBusinessScenario.PDVerification_ExpeditedMedicalQCResponse : EmailBusinessScenario.EligibilityVerification_ExpeditedMedicalQCResponse;
|
||
|
||
var trialEmailConfig = _trialEmailNoticeConfigrepository.Where(t => t.TrialId == trialId && t.BusinessScenarioEnum == scenario && t.IsAutoSend && t.IsEnable).FirstOrDefault();
|
||
|
||
if (trialEmailConfig != null)
|
||
{
|
||
|
||
|
||
|
||
var criterion = await _readingQuestionCriterionTrialRepository.FirstOrDefaultAsync(x => x.Id == medicalReview.VisitTask.TrialReadingCriterionId);
|
||
var userinfo = await _userRoleRepository.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.GetTrialEmailSubejctAndHtmlInfoAndBuildAsync(trialEmailConfig, messageToSend, emailConfigFunc);
|
||
|
||
await SendEmailHelper.SendEmailAsync(messageToSend, _systemEmailConfig);
|
||
}
|
||
|
||
}
|
||
}
|
||
|
||
/// <summary>
|
||
/// MIM 回复医学返回通知IR
|
||
/// </summary>
|
||
public class UrgentMIMRepliedMedicalReviewConsumer(
|
||
IRepository<UserRole> _userRoleRepository,
|
||
IRepository<TaskMedicalReview> _taskMedicalReviewRepository,
|
||
IRepository<Trial> _trialRepository,
|
||
IRepository<SubjectVisit> _subjectVisitRepository,
|
||
IRepository<ReadingQuestionCriterionTrial> _readingQuestionCriterionTrialRepository,
|
||
IRepository<VisitTask> _visitTaskRepository,
|
||
IRepository<Dictionary> _dictionaryRepository,
|
||
IRepository<TrialEmailNoticeConfig> _trialEmailNoticeConfigrepository,
|
||
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 trialId = medicalReview.TrialId;
|
||
|
||
var scenario = EmailBusinessScenario.ExpeditedMedicalQCToIR;
|
||
|
||
var trialEmailConfig = _trialEmailNoticeConfigrepository.Where(t => t.TrialId == trialId && t.BusinessScenarioEnum == scenario && t.IsAutoSend && t.IsEnable).FirstOrDefault();
|
||
|
||
if (trialEmailConfig != null)
|
||
{
|
||
|
||
|
||
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 _userRoleRepository.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.GetTrialEmailSubejctAndHtmlInfoAndBuildAsync(trialEmailConfig, messageToSend, emailConfigFunc);
|
||
|
||
await SendEmailHelper.SendEmailAsync(messageToSend, _systemEmailConfig);
|
||
}
|
||
}
|
||
}
|
||
|
||
/// <summary>
|
||
/// 加急阅片 IR 申请重阅 或者PM 申请重阅
|
||
/// </summary>
|
||
public class UrgentIRApplyedReReadingConsumer(
|
||
IRepository<UserRole> _userRoleRepository,
|
||
IRepository<TrialUserRole> _trialUseRoleRepository,
|
||
IRepository<TaskMedicalReview> _taskMedicalReviewRepository,
|
||
IRepository<Trial> _trialRepository,
|
||
IRepository<SubjectVisit> _subjectVisitRepository,
|
||
IRepository<ReadingQuestionCriterionTrial> _readingQuestionCriterionTrialRepository,
|
||
IRepository<VisitTask> _visitTaskRepository,
|
||
IRepository<Dictionary> _dictionaryRepository,
|
||
IRepository<TrialEmailNoticeConfig> _trialEmailNoticeConfigrepository,
|
||
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 trialId=taskInfo.TrialId;
|
||
|
||
var scenario = context.Message.ReReadingApplyState == ReReadingApplyState.TrialGroupHaveApplyed ? EmailBusinessScenario.ReReadFromPMApproval : EmailBusinessScenario.ReReadFromIRApproval;
|
||
|
||
var trialEmailConfig = _trialEmailNoticeConfigrepository.Where(t => t.TrialId == trialId && t.BusinessScenarioEnum == scenario && t.IsAutoSend && t.IsEnable).FirstOrDefault();
|
||
|
||
if (trialEmailConfig != null)
|
||
{
|
||
|
||
|
||
var criterion = await _readingQuestionCriterionTrialRepository.FirstOrDefaultAsync(x => x.Id == taskInfo.TrialReadingCriterionId);
|
||
|
||
|
||
var doctorInfo = await _userRoleRepository.Where(x => x.Id == taskInfo.DoctorUserId).FirstOrDefaultAsync();
|
||
|
||
var trialUserList = await _trialUseRoleRepository.Where(x => x.TrialId == taskInfo.TrialId && x.TrialUser.IsDeleted==false).Include(x => x.UserRole).Select(x => x.UserRole).ToListAsync();
|
||
|
||
var userinfoList = trialUserList.Where(x => x.UserTypeEnum == UserTypeEnum.ProjectManager || x.UserTypeEnum == UserTypeEnum.APM).ToList();
|
||
if (context.Message.ReReadingApplyState == ReReadingApplyState.TrialGroupHaveApplyed)
|
||
{
|
||
userinfoList = trialUserList.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.GetTrialEmailSubejctAndHtmlInfoAndBuildAsync(trialEmailConfig, messageToSend, emailConfigFunc);
|
||
|
||
await SendEmailHelper.SendEmailAsync(messageToSend, _systemEmailConfig);
|
||
}
|
||
}
|
||
|
||
|
||
}
|
||
}
|
||
|