irc-netcore-api/IRaCIS.Core.Application/MassTransit/Consumer/ReadingRelationEmailConsume...

126 lines
4.8 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 MassTransit;
using Microsoft.Extensions.Options;
using MimeKit;
using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
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<ReadingQuestionCriterionTrial> _readingQuestionCriterionTrialRepository,
IRepository<TrialSiteSurvey> _trialSiteSurveyRepository,
IRepository<EmailNoticeConfig> _emailNoticeConfigrepository,
IOptionsMonitor<SystemEmailSendConfig> systemEmailConfig
) : IConsumer<UrgentMedicalReviewAddedEvent>
{
private readonly SystemEmailSendConfig _systemEmailConfig = systemEmailConfig.CurrentValue;
/// <summary>
/// 加急的医学反馈任务 通知MIM
/// </summary>
/// <param name="context"></param>
/// <returns></returns>
/// <exception cref="NotImplementedException"></exception>
public async Task Consume(ConsumeContext<UrgentMedicalReviewAddedEvent> context)
{
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 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;
Func<(string topicStr, string htmlBodyStr), (string topicStr, string htmlBodyStr)> emailConfigFunc = input =>
{
var topicStr = string.Format(input.topicStr, companyName, trialInfo.ResearchProgramNo);
var htmlBodyStr = string.Format(CommonEmailHelper.ReplaceCompanyName(_systemEmailConfig, input.htmlBodyStr),
userinfo.FullName, // 用户名
trialInfo.ExperimentName , // 项目
criterion.CriterionName // 阅片标准
// 受试者
// 访视
// 任务类型
// 阅片人是否同意
// 审核状态
// 是否加急
);
return (topicStr, htmlBodyStr);
};
await CommonEmailHelper.GetEmailSubejctAndHtmlInfoAndBuildAsync(_emailNoticeConfigrepository, EmailBusinessScenario.SiteSurveyReject, messageToSend, emailConfigFunc);
await SendEmailHelper.SendEmailAsync(messageToSend, _systemEmailConfig);
}
}
//IR 回复医学反馈通知MIM
public class UrgentIRRepliedMedicalReviewConsumer : IConsumer<UrgentIRRepliedMedicalReview>
{
public Task Consume(ConsumeContext<UrgentIRRepliedMedicalReview> context)
{
throw new NotImplementedException();
}
}
/// <summary>
/// MIM 回复医学返回通知IR
/// </summary>
public class UrgentMIMRepliedMedicalReviewConsumer : IConsumer<UrgentMIMRepliedMedicalReview>
{
public Task Consume(ConsumeContext<UrgentMIMRepliedMedicalReview> context)
{
throw new NotImplementedException();
}
}
/// <summary>
/// 加急阅片 IR 申请重阅 或者PM 申请重阅
/// </summary>
public class UrgentIRApplyedReReadingConsumer : IConsumer<UrgentApplyedReReading>
{
public Task Consume(ConsumeContext<UrgentApplyedReReading> context)
{
throw new NotImplementedException();
}
}