修改排序
continuous-integration/drone/push Build is passing
Details
continuous-integration/drone/push Build is passing
Details
parent
98acb5ea70
commit
7c0c9b986d
|
@ -2,6 +2,7 @@
|
||||||
using IRaCIS.Core.Application.Contracts;
|
using IRaCIS.Core.Application.Contracts;
|
||||||
using IRaCIS.Core.Application.Helper;
|
using IRaCIS.Core.Application.Helper;
|
||||||
using IRaCIS.Core.Application.MassTransit.Consumer;
|
using IRaCIS.Core.Application.MassTransit.Consumer;
|
||||||
|
using IRaCIS.Core.Application.Service.Reading.Dto;
|
||||||
using MassTransit;
|
using MassTransit;
|
||||||
using Microsoft.Extensions.Options;
|
using Microsoft.Extensions.Options;
|
||||||
using MimeKit;
|
using MimeKit;
|
||||||
|
@ -9,7 +10,9 @@ using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Globalization;
|
using System.Globalization;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
|
using System.Reactive.Joins;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
|
using System.Text.RegularExpressions;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
namespace IRaCIS.Core.Application.MassTransit.Recurring
|
namespace IRaCIS.Core.Application.MassTransit.Recurring
|
||||||
|
@ -21,6 +24,7 @@ namespace IRaCIS.Core.Application.MassTransit.Recurring
|
||||||
public class UrgentIRUnReadTaskRecurringEventConsumer(
|
public class UrgentIRUnReadTaskRecurringEventConsumer(
|
||||||
IRepository<ReadingQuestionCriterionTrial> _trialReadingCriterionRepository,
|
IRepository<ReadingQuestionCriterionTrial> _trialReadingCriterionRepository,
|
||||||
IRepository<VisitTask> _visitTaskRepository,
|
IRepository<VisitTask> _visitTaskRepository,
|
||||||
|
IRepository<Dictionary> _dictionaryRepository,
|
||||||
IRepository<TrialUser> _trialUserRepository,
|
IRepository<TrialUser> _trialUserRepository,
|
||||||
IRepository<EmailNoticeConfig> _emailNoticeConfigrepository,
|
IRepository<EmailNoticeConfig> _emailNoticeConfigrepository,
|
||||||
IOptionsMonitor<SystemEmailSendConfig> systemEmailConfig) : IConsumer<UrgentIRUnReadTaskRecurringEvent>
|
IOptionsMonitor<SystemEmailSendConfig> systemEmailConfig) : IConsumer<UrgentIRUnReadTaskRecurringEvent>
|
||||||
|
@ -33,6 +37,14 @@ namespace IRaCIS.Core.Application.MassTransit.Recurring
|
||||||
|
|
||||||
var trialId = context.Message.TrialId;
|
var trialId = context.Message.TrialId;
|
||||||
|
|
||||||
|
var dictionValue = await CommonEmailHelper.TranslationDictionary(new TranslationDictionaryDto()
|
||||||
|
{
|
||||||
|
DictionaryRepository = _dictionaryRepository,
|
||||||
|
IsEn_US = isEn_US,
|
||||||
|
DictionaryList = new List<DictionaryDto>()
|
||||||
|
{new DictionaryDto (){DictionaryCode= "YesOrNo",EnumValue="1", }, //是否加急}
|
||||||
|
});
|
||||||
|
|
||||||
//找到该项目所有的IR 并且有加急 和Pd 未读的任务
|
//找到该项目所有的IR 并且有加急 和Pd 未读的任务
|
||||||
|
|
||||||
Expression<Func<VisitTask, bool>> comonTaskFilter = t => t.TrialId == trialId && t.TaskState == TaskState.Effect && t.ReadingTaskState != ReadingTaskState.HaveSigned && t.TaskAllocationState == TaskAllocationState.Allocated;
|
Expression<Func<VisitTask, bool>> comonTaskFilter = t => t.TrialId == trialId && t.TaskState == TaskState.Effect && t.ReadingTaskState != ReadingTaskState.HaveSigned && t.TaskAllocationState == TaskAllocationState.Allocated;
|
||||||
|
@ -41,10 +53,11 @@ namespace IRaCIS.Core.Application.MassTransit.Recurring
|
||||||
{
|
{
|
||||||
t.UserId,
|
t.UserId,
|
||||||
t.User.FullName,
|
t.User.FullName,
|
||||||
|
t.User.EMail,
|
||||||
t.User.UserName,
|
t.User.UserName,
|
||||||
t.Trial.TrialCode,
|
t.Trial.TrialCode,
|
||||||
t.Trial.ResearchProgramNo,
|
t.Trial.ResearchProgramNo
|
||||||
TrialReadingCriterionList = t.Trial.TrialReadingCriterionList.Select(t => new { t.CriterionName, TrialReadingCriterionId = t.Id }).ToList()
|
//TrialReadingCriterionList = t.Trial.TrialReadingCriterionList.Select(t => new { t.CriterionName, TrialReadingCriterionId = t.Id }).ToList()
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
|
@ -58,6 +71,7 @@ namespace IRaCIS.Core.Application.MassTransit.Recurring
|
||||||
{
|
{
|
||||||
|
|
||||||
TrialReadingCriterionId = c.Id,
|
TrialReadingCriterionId = c.Id,
|
||||||
|
CriterionName=c.CriterionName,
|
||||||
|
|
||||||
UnReadList = c.VisitTaskList
|
UnReadList = c.VisitTaskList
|
||||||
.Where(t => t.DoctorUserId == userId && t.ReadingTaskState != ReadingTaskState.HaveSigned && t.TaskState == TaskState.Effect)
|
.Where(t => t.DoctorUserId == userId && t.ReadingTaskState != ReadingTaskState.HaveSigned && t.TaskState == TaskState.Effect)
|
||||||
|
@ -85,11 +99,35 @@ namespace IRaCIS.Core.Application.MassTransit.Recurring
|
||||||
|
|
||||||
var messageToSend = new MimeMessage();
|
var messageToSend = new MimeMessage();
|
||||||
|
|
||||||
|
//发件地址
|
||||||
|
messageToSend.From.Add(new MailboxAddress(_systemEmailConfig.FromName, _systemEmailConfig.FromEmail));
|
||||||
|
messageToSend.To.Add(new MailboxAddress(trialUser.FullName, trialUser.EMail));
|
||||||
|
|
||||||
var companyName = isEn_US ? _systemEmailConfig.CompanyShortName : _systemEmailConfig.CompanyShortNameCN;
|
var companyName = isEn_US ? _systemEmailConfig.CompanyShortName : _systemEmailConfig.CompanyShortNameCN;
|
||||||
|
|
||||||
Func<(string topicStr, string htmlBodyStr), (string topicStr, string htmlBodyStr)> emailConfigFunc = input =>
|
Func<(string topicStr, string htmlBodyStr), (string topicStr, string htmlBodyStr)> emailConfigFunc = input =>
|
||||||
{
|
{
|
||||||
var topicStr = string.Format(input.topicStr, trialUser.ResearchProgramNo);
|
var topicStr = string.Format(input.topicStr, trialUser.ResearchProgramNo);
|
||||||
|
|
||||||
|
var template = input.htmlBodyStr;
|
||||||
|
|
||||||
|
//正则提取循环的部分 {%for%}(.*?){%end for%}
|
||||||
|
string pattern = @"{%for%}(.*?){%end for%}";
|
||||||
|
var match = Regex.Match(template, pattern, RegexOptions.Singleline);
|
||||||
|
|
||||||
|
string criteriaTemplate = match.Groups[1].Value; // 提取循环模板
|
||||||
|
|
||||||
|
// 构建循环内容
|
||||||
|
string criteriaDetails = "";
|
||||||
|
foreach (var criteria in doctorCriterionList)
|
||||||
|
{
|
||||||
|
criteriaDetails += string.Format(criteriaTemplate, criteria.CriterionName, criteria.UnReadList.Select(t=>t.SubejctCode).Distinct().Count(), criteria.UnReadList.Count());
|
||||||
|
}
|
||||||
|
|
||||||
|
// 用循环内容替换原始模板中的循环部分
|
||||||
|
string emailContent = Regex.Replace(template, pattern, criteriaDetails);
|
||||||
|
|
||||||
|
|
||||||
var htmlBodyStr = string.Format(CommonEmailHelper.ReplaceCompanyName(_systemEmailConfig, input.htmlBodyStr),
|
var htmlBodyStr = string.Format(CommonEmailHelper.ReplaceCompanyName(_systemEmailConfig, input.htmlBodyStr),
|
||||||
trialUser.FullName,
|
trialUser.FullName,
|
||||||
|
|
||||||
|
@ -97,15 +135,14 @@ namespace IRaCIS.Core.Application.MassTransit.Recurring
|
||||||
toTalUnreadCount,
|
toTalUnreadCount,
|
||||||
|
|
||||||
trialUser.ResearchProgramNo,
|
trialUser.ResearchProgramNo,
|
||||||
trialUser.TrialReadingCriterionList,
|
dictionValue[0],
|
||||||
//siteSurveyInfo.Phone,
|
|
||||||
_systemEmailConfig.SiteUrl
|
_systemEmailConfig.SiteUrl
|
||||||
);
|
);
|
||||||
|
|
||||||
return (topicStr, htmlBodyStr);
|
return (topicStr, htmlBodyStr);
|
||||||
};
|
};
|
||||||
|
|
||||||
await CommonEmailHelper.GetEmailSubejctAndHtmlInfoAndBuildAsync(_emailNoticeConfigrepository, EmailBusinessScenario.Approval_SubmitSiteSurvey, messageToSend, emailConfigFunc);
|
await CommonEmailHelper.GetEmailSubejctAndHtmlInfoAndBuildAsync(_emailNoticeConfigrepository, EmailBusinessScenario.ExpeditedReading, messageToSend, emailConfigFunc);
|
||||||
|
|
||||||
await SendEmailHelper.SendEmailAsync(messageToSend, _systemEmailConfig);
|
await SendEmailHelper.SendEmailAsync(messageToSend, _systemEmailConfig);
|
||||||
|
|
||||||
|
|
|
@ -34,7 +34,7 @@ public class EventStoreRecordService(IRepository<EventStoreRecord> _eventStoreRe
|
||||||
var eventStoreRecordQueryable = _eventStoreRecordRepository.WhereIf(inQuery.EventTypeName.IsNotNullOrEmpty(),t=>t.EventTypeName.Contains(inQuery.EventTypeName))
|
var eventStoreRecordQueryable = _eventStoreRecordRepository.WhereIf(inQuery.EventTypeName.IsNotNullOrEmpty(),t=>t.EventTypeName.Contains(inQuery.EventTypeName))
|
||||||
.ProjectTo<EventStoreRecordView>(_mapper.ConfigurationProvider);
|
.ProjectTo<EventStoreRecordView>(_mapper.ConfigurationProvider);
|
||||||
|
|
||||||
var pageList = await eventStoreRecordQueryable.ToPagedListAsync(inQuery);
|
var pageList = await eventStoreRecordQueryable.ToPagedListAsync(inQuery,nameof(EventStoreRecordView.CreateTime));
|
||||||
|
|
||||||
return pageList;
|
return pageList;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue