合并
continuous-integration/drone/push Build is passing

This commit is contained in:
he
2024-10-12 16:57:01 +08:00
25 changed files with 36081 additions and 76 deletions
@@ -0,0 +1,31 @@
using MassTransit;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using static IRaCIS.Core.Application.Service.TestService;
namespace IRaCIS.Core.Application.MassTransit.Consumer;
/// <summary>
/// meditor send 的时候,请求流会先到消费者,返回后才会执行后续代码
/// publish 请求流不会先到消费者,发布后,直接执行后续代码
///
/// </summary>
/// <param name="_userRepository"></param>
public class MasstransitHangfireTestConsumer(IRepository<User> _userRepository) : IConsumer<MasstransitHangfireTest>
{
public async Task Consume(ConsumeContext<MasstransitHangfireTest> context)
{
Console.WriteLine(_userRepository._dbContext.GetHashCode());
Console.WriteLine("Now is " + DateTime.Now.ToString());
Console.WriteLine($"MassTransit.Consumer :{context.Message.value}");
await context.RespondAsync<IResponseOutput>(ResponseOutput.Ok());
}
}
@@ -113,11 +113,11 @@ public class UrgentMIMRepliedMedicalReviewConsumer : IConsumer<UrgentMIMRepliedM
}
/// <summary>
/// 加急阅片 IR 申请重阅
/// 加急阅片 IR 申请重阅 或者PM 申请重阅
/// </summary>
public class UrgentIRApplyedReReadingConsumer : IConsumer<UrgentIRApplyedReReading>
public class UrgentIRApplyedReReadingConsumer : IConsumer<UrgentApplyedReReading>
{
public Task Consume(ConsumeContext<UrgentIRApplyedReReading> context)
public Task Consume(ConsumeContext<UrgentApplyedReReading> context)
{
throw new NotImplementedException();
}
@@ -13,6 +13,7 @@ using MassTransit;
using Microsoft.AspNetCore.Components.Routing;
using Microsoft.Extensions.Options;
using MimeKit;
using NPOI.SS.Formula.Functions;
using System;
using System.Collections.Generic;
using System.Globalization;
@@ -45,56 +46,62 @@ public class UserSiteSurveySubmitedEventConsumer(
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 trialUserList = await _trialSiteSurveyRepository.Where(t => t.TrialId == siteSurveyInfo.TrialId ).SelectMany(t=>t.Trial.TrialUserList)
.Where(t=> t.User.UserTypeEnum == UserTypeEnum.SPM || t.User.UserTypeEnum == UserTypeEnum.CPM || t.User.UserTypeEnum == UserTypeEnum.ProjectManager)
.Select(t=>new {t.User.FullName,t.User.EMail,t.User.UserTypeEnum}).ToListAsync();
var sPMOrCPMList = trialUserList.Where(t => t.UserTypeEnum == UserTypeEnum.SPM || t.UserTypeEnum == UserTypeEnum.CPM).ToList();
var pmList = trialUserList.Where(t => t.UserTypeEnum == UserTypeEnum.ProjectManager || t.UserTypeEnum == UserTypeEnum.APM).ToList();
var messageToSend = new MimeMessage();
var toUserName = string.Empty;
var userName = siteSurveyInfo.UserName;
var email = siteSurveyInfo.Email;
var phone = siteSurveyInfo.Phone;
if (hasSPMOrCPM)
//有SPM
if (sPMOrCPMList.Count>0)
{
var user = await _userRepository.FirstOrDefaultAsync(t => t.Id == siteSurveyInfo.PreliminaryUserId);
foreach (var user in sPMOrCPMList)
{
messageToSend.To.Add(new MailboxAddress(user.FullName, user.EMail));
}
userName = user.FullName;
email = user.EMail;
phone = user.Phone;
toUserName = string.Join('、', sPMOrCPMList.Select(t => t.FullName));
messageToSend.To.Add(new MailboxAddress(String.Empty, user.EMail));
}
else
{
messageToSend.To.Add(new MailboxAddress(String.Empty, siteSurveyInfo.Email));
foreach (var user in pmList)
{
messageToSend.To.Add(new MailboxAddress(user.FullName, user.EMail));
}
toUserName = string.Join('、', pmList.Select(t => t.FullName));
}
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 topicStr = string.Format(input.topicStr, trialInfo.ResearchProgramNo);
var htmlBodyStr = string.Format(CommonEmailHelper.ReplaceCompanyName(_systemEmailConfig, input.htmlBodyStr),
toUserName,
siteInfo.TrialSiteCode,
siteInfo.TrialSiteAliasName,
userName,
email,
phone,
siteSurveyInfo.UserName,
siteSurveyInfo.Email,
siteSurveyInfo.Phone,
_systemEmailConfig.SiteUrl
);
return (topicStr, htmlBodyStr);
};
await CommonEmailHelper.GetEmailSubejctAndHtmlInfoAndBuildAsync(_emailNoticeConfigrepository, EmailBusinessScenario.SiteSurveyReject, messageToSend, emailConfigFunc);
await CommonEmailHelper.GetEmailSubejctAndHtmlInfoAndBuildAsync(_emailNoticeConfigrepository, EmailBusinessScenario.Approval_SubmitSiteSurvey, messageToSend, emailConfigFunc);
await SendEmailHelper.SendEmailAsync(messageToSend, _systemEmailConfig);
@@ -195,16 +202,14 @@ public class SiteSurverRejectedEventConsumer(
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 name = siteSurveyInfo.UserName;
if (hasSPMOrCPM)
if (context.Message.IsHaveSPMOrCPM)
{
//PM 驳回
//PM 驳回到SPM
if (siteSurveyInfo.State == TrialSiteSurveyEnum.CRCSubmitted)
{
var user = await _userRepository.FirstOrDefaultAsync(t => t.Id == siteSurveyInfo.PreliminaryUserId);
@@ -213,15 +218,16 @@ public class SiteSurverRejectedEventConsumer(
messageToSend.To.Add(new MailboxAddress(String.Empty, user.EMail));
}
//SPM 驳回
//SPM 驳回到CRC
else if (siteSurveyInfo.State == TrialSiteSurveyEnum.ToSubmit)
{
messageToSend.To.Add(new MailboxAddress(String.Empty, siteSurveyInfo.Email));
}
}
else
{
//没有SPM 给填表人发
//没有SPM PM驳回到CRC
messageToSend.To.Add(new MailboxAddress(String.Empty, siteSurveyInfo.Email));
}
@@ -0,0 +1,34 @@
using System.Globalization;
using System.Threading;
using System.Threading.Tasks;
using IRaCIS.Core.Domain.BaseModel;
using IRaCIS.Core.Domain.Share;
using MassTransit;
using NPOI.SS.Formula.Functions;
public class CultureInfoFilter<T> (IRepository<EventStoreRecord> _eventStoreRecordRepository) : IFilter<ConsumeContext<T>> where T : DomainEvent
{
public async Task Send(ConsumeContext<T> context, IPipe<ConsumeContext<T>> next)
{
var cultureInfoName = context.Message.CultureInfoName;
var eventId = context.Message.EventId;
if (!string.IsNullOrEmpty(cultureInfoName))
{
CultureInfo.CurrentCulture = new CultureInfo(cultureInfoName);
CultureInfo.CurrentUICulture = new CultureInfo(cultureInfoName);
}
await next.Send(context);
await _eventStoreRecordRepository.BatchUpdateNoTrackingAsync(t => t.Id == eventId, u => new EventStoreRecord() { EventState= EventStateEnum.ConsumeSuccessed } );
}
public void Probe(ProbeContext context)
{
context.CreateFilterScope("CultureInfoFilter");
}
}