using DocumentFormat.OpenXml.Office2013.Excel; using DocumentFormat.OpenXml.Spreadsheet; using DocumentFormat.OpenXml.Vml; using DocumentFormat.OpenXml.Wordprocessing; using IRaCIS.Core.Application.Contracts; 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.AspNetCore.Components.Routing; 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; /// /// 用户提交 发送邮件 通知SPM 或者PM /// public class UserSiteSurveySubmitedEventConsumer( IRepository _userRepository, IRepository _trialRepository, IRepository _trialSiteRepository, IRepository _trialSiteSurveyRepository, IRepository _emailNoticeConfigrepository, IOptionsMonitor systemEmailConfig ) : IConsumer { private readonly SystemEmailSendConfig _systemEmailConfig = systemEmailConfig.CurrentValue; public async Task Consume(ConsumeContext context) { var isEn_US = CultureInfo.CurrentCulture.Name == StaticData.CultureInfo.en_US; var trialSiteSurveyId = context.Message.TrialSiteSurveyId; var siteSurveyInfo = _trialSiteSurveyRepository.Where(t => t.Id == trialSiteSurveyId).FirstOrDefault().IfNullThrowException(); var trialId = siteSurveyInfo.TrialId; var hasSPMOrCPM = await _trialSiteSurveyRepository.AnyAsync(t => t.TrialId == siteSurveyInfo.TrialId && t.Trial.TrialUserList.Any(u => u.User.UserTypeEnum == UserTypeEnum.SPM || u.User.UserTypeEnum == UserTypeEnum.CPM)); var messageToSend = new MimeMessage(); var userName = siteSurveyInfo.UserName; var email = siteSurveyInfo.Email; var phone = siteSurveyInfo.Phone; if (hasSPMOrCPM) { var user = await _userRepository.FirstOrDefaultAsync(t => t.Id == siteSurveyInfo.PreliminaryUserId); userName = user.FullName; email = user.EMail; phone = user.Phone; messageToSend.To.Add(new MailboxAddress(String.Empty, user.EMail)); } else { messageToSend.To.Add(new MailboxAddress(String.Empty, siteSurveyInfo.Email)); } var trialInfo = await _trialRepository.FirstOrDefaultAsync(t => t.Id == trialId); var siteInfo = await _trialSiteRepository.FirstOrDefaultAsync(t => t.TrialId == trialId && t.Id == siteSurveyInfo.TrialSiteId, true); 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), siteInfo.TrialSiteCode, siteInfo.TrialSiteAliasName, userName, email, phone, _systemEmailConfig.SiteUrl ); return (topicStr, htmlBodyStr); }; await CommonEmailHelper.GetEmailSubejctAndHtmlInfoAndBuildAsync(_emailNoticeConfigrepository, EmailBusinessScenario.SiteSurveyReject, messageToSend, emailConfigFunc); await SendEmailHelper.SendEmailAsync(messageToSend, _systemEmailConfig); } } /// /// 调研表初审通过,进行复审发送邮件 /// public class SiteSurveySPMSubmitedEventConsumer( IRepository _userRepository, IRepository _trialRepository, IRepository _trialSiteRepository, IRepository _trialSiteSurveyRepository, IRepository _emailNoticeConfigrepository, IOptionsMonitor systemEmailConfig) : IConsumer { private readonly SystemEmailSendConfig _systemEmailConfig = systemEmailConfig.CurrentValue; public async Task Consume(ConsumeContext context) { var isEn_US = CultureInfo.CurrentCulture.Name == StaticData.CultureInfo.en_US; var trialSiteSurveyId = context.Message.TrialSiteSurveyId; var siteSurveyInfo = _trialSiteSurveyRepository.Where(t => t.Id == trialSiteSurveyId).FirstOrDefault().IfNullThrowException(); var trialId = siteSurveyInfo.TrialId; var messageToSend = new MimeMessage(); var pmAndAPMList = _trialRepository.Where(t => t.Id == trialId).SelectMany(t => t.TrialUserList.Where(t => t.User.UserTypeEnum == UserTypeEnum.APM || t.User.UserTypeEnum == UserTypeEnum.ProjectManager)) .Select(t => new { t.User.EMail/*,t.User.FullName,t.User.UserName*/ }).ToList(); foreach (var item in pmAndAPMList) { messageToSend.To.Add(new MailboxAddress(String.Empty, item.EMail)); } var user = await _userRepository.FirstOrDefaultAsync(t => t.Id == siteSurveyInfo.PreliminaryUserId); var userName = user.FullName; var email = user.EMail; var phone = user.Phone; var trialInfo = await _trialRepository.FirstOrDefaultAsync(t => t.Id == trialId); var siteInfo = await _trialSiteRepository.FirstOrDefaultAsync(t => t.TrialId == trialId && t.Id == siteSurveyInfo.TrialSiteId, true); 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), siteInfo.TrialSiteCode, siteInfo.TrialSiteAliasName, userName, email, phone, _systemEmailConfig.SiteUrl ); return (topicStr, htmlBodyStr); }; await CommonEmailHelper.GetEmailSubejctAndHtmlInfoAndBuildAsync(_emailNoticeConfigrepository, EmailBusinessScenario.SiteSurveyReject, messageToSend, emailConfigFunc); await SendEmailHelper.SendEmailAsync(messageToSend, _systemEmailConfig); } } /// /// 调研表驳回发送邮件 之前已有,需要迁移过来 /// public class SiteSurverRejectedEventConsumer( IRepository _userRepository, IRepository _trialRepository, IRepository _trialSiteRepository, IRepository _trialSiteSurveyRepository, IRepository _emailNoticeConfigrepository, IOptionsMonitor systemEmailConfig ) : IConsumer { private readonly SystemEmailSendConfig _systemEmailConfig = systemEmailConfig.CurrentValue; public async Task Consume(ConsumeContext context) { var isEn_US = CultureInfo.CurrentCulture.Name == StaticData.CultureInfo.en_US; var trialSiteSurveyId = context.Message.TrialSiteSurveyId; var siteSurveyInfo = _trialSiteSurveyRepository.Where(t => t.Id == trialSiteSurveyId).FirstOrDefault().IfNullThrowException(); var trialId = siteSurveyInfo.TrialId; var messageToSend = new MimeMessage(); var name = siteSurveyInfo.UserName; if (context.Message.IsHaveSPMOrCPM) { //PM 驳回到SPM if (siteSurveyInfo.State == TrialSiteSurveyEnum.CRCSubmitted) { var user = await _userRepository.FirstOrDefaultAsync(t => t.Id == siteSurveyInfo.PreliminaryUserId); name = user.FullName; messageToSend.To.Add(new MailboxAddress(String.Empty, user.EMail)); } //SPM 驳回到CRC else if (siteSurveyInfo.State == TrialSiteSurveyEnum.ToSubmit) { messageToSend.To.Add(new MailboxAddress(String.Empty, siteSurveyInfo.Email)); } } else { //没有SPM PM驳回到CRC messageToSend.To.Add(new MailboxAddress(String.Empty, siteSurveyInfo.Email)); } //发件地址 messageToSend.From.Add(new MailboxAddress(_systemEmailConfig.FromName, _systemEmailConfig.FromEmail)); var trialInfo = await _trialRepository.FirstOrDefaultAsync(t => t.Id == trialId); var siteInfo = await _trialSiteRepository.FirstOrDefaultAsync(t => t.TrialId == trialId && t.Id == siteSurveyInfo.TrialSiteId, true); 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), name, trialInfo.TrialCode, trialInfo.ResearchProgramNo, trialInfo.ExperimentName, siteInfo.TrialSiteCode, siteInfo.TrialSiteAliasName, siteSurveyInfo.LatestBackReason, _systemEmailConfig.SiteUrl, (siteSurveyInfo.State == TrialSiteSurveyEnum.ToSubmit ? "inline - block" : "none") ); return (topicStr, htmlBodyStr); }; await CommonEmailHelper.GetEmailSubejctAndHtmlInfoAndBuildAsync(_emailNoticeConfigrepository, EmailBusinessScenario.SiteSurveyReject, messageToSend, emailConfigFunc); await SendEmailHelper.SendEmailAsync(messageToSend, _systemEmailConfig); } }