Merge branch 'Test_IRC_Net8' of https://gitea.frp.extimaging.com/XCKJ/irc-netcore-api into Test_IRC_Net8
continuous-integration/drone/push Build is running
Details
continuous-integration/drone/push Build is running
Details
commit
35a2a0cc61
|
|
@ -147,7 +147,7 @@ public static class SendEmailHelper
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static async Task SendEmailAsync(SMTPEmailConfig sMTPEmailConfig,Trial? trial, EventHandler<MessageSentEventArgs>? messageSentSuccess = null)
|
public static async Task SendEmailAsync(SMTPEmailConfig sMTPEmailConfig, Trial? trial, EventHandler<MessageSentEventArgs>? messageSentSuccess = null)
|
||||||
{
|
{
|
||||||
var messageToSend = new MimeMessage();
|
var messageToSend = new MimeMessage();
|
||||||
|
|
||||||
|
|
@ -161,8 +161,9 @@ public static class SendEmailHelper
|
||||||
|
|
||||||
if (sMTPEmailConfig.ToMailAddressList.Count == 0)
|
if (sMTPEmailConfig.ToMailAddressList.Count == 0)
|
||||||
{
|
{
|
||||||
|
return;
|
||||||
//---没有收件人
|
//---没有收件人
|
||||||
throw new ArgumentException(I18n.T("SendEmail_NoRecipient"));
|
//throw new ArgumentException(I18n.T("SendEmail_NoRecipient"));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -2340,7 +2340,7 @@
|
||||||
<param name="sendFileRelativePath"></param>
|
<param name="sendFileRelativePath"></param>
|
||||||
<returns></returns>
|
<returns></returns>
|
||||||
</member>
|
</member>
|
||||||
<member name="M:IRaCIS.Core.Application.Service.TrialEmailNoticeConfigService.DealEnrollAnswer(System.Guid,System.Guid,IRaCIS.Core.Domain.Share.CriterionType,System.Guid)">
|
<member name="M:IRaCIS.Core.Application.Service.TrialEmailNoticeConfigService.DealEnrollAnswer(System.Guid,System.Guid,IRaCIS.Core.Domain.Share.CriterionType,System.Guid,IRaCIS.Core.Domain.Models.UserWorkLanguage)">
|
||||||
<summary>
|
<summary>
|
||||||
获取入组结果
|
获取入组结果
|
||||||
</summary>
|
</summary>
|
||||||
|
|
@ -2348,9 +2348,10 @@
|
||||||
<param name="subjectVisitId"></param>
|
<param name="subjectVisitId"></param>
|
||||||
<param name="criterionType"></param>
|
<param name="criterionType"></param>
|
||||||
<param name="trialReadingCriterionId"></param>
|
<param name="trialReadingCriterionId"></param>
|
||||||
|
<param name="userWorkLanguage"></param>
|
||||||
<returns></returns>
|
<returns></returns>
|
||||||
</member>
|
</member>
|
||||||
<member name="M:IRaCIS.Core.Application.Service.TrialEmailNoticeConfigService.TranslatePdStateAsync(System.Guid,IRaCIS.Core.Domain.Share.ReadingCategory,IRaCIS.Core.Domain.Share.CriterionType,System.Nullable{System.Boolean})">
|
<member name="M:IRaCIS.Core.Application.Service.TrialEmailNoticeConfigService.TranslatePdStateAsync(System.Guid,IRaCIS.Core.Domain.Share.ReadingCategory,IRaCIS.Core.Domain.Share.CriterionType,IRaCIS.Core.Domain.Models.UserWorkLanguage,System.Nullable{System.Boolean})">
|
||||||
<summary>
|
<summary>
|
||||||
获取PD 结果
|
获取PD 结果
|
||||||
</summary>
|
</summary>
|
||||||
|
|
@ -2358,6 +2359,7 @@
|
||||||
<param name="readingCategory"> 任务类型</param>
|
<param name="readingCategory"> 任务类型</param>
|
||||||
<param name="criterionType">标准类型</param>
|
<param name="criterionType">标准类型</param>
|
||||||
<param name="IsGlobalGenerate"> 是否是全局产生(区分裁判任务)</param>
|
<param name="IsGlobalGenerate"> 是否是全局产生(区分裁判任务)</param>
|
||||||
|
<param name="userWorkLanguage"></param>
|
||||||
<returns></returns>
|
<returns></returns>
|
||||||
<exception cref="T:IRaCIS.Core.Infrastructure.BusinessValidationFailedException"></exception>
|
<exception cref="T:IRaCIS.Core.Infrastructure.BusinessValidationFailedException"></exception>
|
||||||
</member>
|
</member>
|
||||||
|
|
|
||||||
|
|
@ -27,5 +27,16 @@ namespace IRaCIS.Core.Application.MassTransit.Consumer.Dto
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public class SendEmailUserDto
|
||||||
|
{
|
||||||
|
public UserTypeEnum UserTypeEnum { get; set; }
|
||||||
|
|
||||||
|
public string FullName { get; set; }
|
||||||
|
|
||||||
|
public UserWorkLanguage UserWorkLanguage { get; set; }
|
||||||
|
|
||||||
|
public string EMail { get; set; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -273,15 +273,30 @@ public class ImageConsumer(
|
||||||
};
|
};
|
||||||
|
|
||||||
// 根据不同场景获取不同角色的用户 先排除CRC和CRA
|
// 根据不同场景获取不同角色的用户 先排除CRC和CRA
|
||||||
var trialUserList = await _trialUseRoleRepository.Where(x => x.TrialId == inDto.TrialId && !x.TrialUser.IsDeleted && !filterUserTypeList.Contains(x.UserRole.UserTypeEnum) ).Include(x => x.UserRole).Select(x => x.UserRole).ToListAsync();
|
var trialUserList = await _trialUseRoleRepository.Where(x => x.TrialId == inDto.TrialId && !x.TrialUser.IsDeleted && !filterUserTypeList.Contains(x.UserRole.UserTypeEnum) ).Include(x => x.UserRole).Select(x => x.UserRole)
|
||||||
|
.Select(x => new SendEmailUserDto()
|
||||||
|
{
|
||||||
|
UserTypeEnum = x.UserTypeEnum,
|
||||||
|
FullName = x.FullName,
|
||||||
|
UserWorkLanguage = x.IdentityUser.UserWorkLanguage,
|
||||||
|
EMail=x.EMail,
|
||||||
|
})
|
||||||
|
.ToListAsync();
|
||||||
|
|
||||||
// CRC和CRA单独取
|
// CRC和CRA单独取
|
||||||
var crcAndcraUserList = await _trialSiteRepository.Where(x => x.Id == inDto.SubjectVisit.TrialSiteId).SelectMany(x => x.CRCUserList.Select(y => y.UserRole)).ToListAsync();
|
var crcAndcraUserList = await _trialSiteRepository.Where(x => x.Id == inDto.SubjectVisit.TrialSiteId).SelectMany(x => x.CRCUserList.Select(y => y.UserRole))
|
||||||
|
.Select(x => new SendEmailUserDto()
|
||||||
|
{
|
||||||
|
UserTypeEnum = x.UserTypeEnum,
|
||||||
|
FullName = x.FullName,
|
||||||
|
UserWorkLanguage = x.IdentityUser.UserWorkLanguage,
|
||||||
|
EMail = x.EMail,
|
||||||
|
}).ToListAsync();
|
||||||
trialUserList.AddRange(crcAndcraUserList);
|
trialUserList.AddRange(crcAndcraUserList);
|
||||||
|
|
||||||
// 根据场景确定收件人
|
// 根据场景确定收件人
|
||||||
List<UserRole> toUserList = new List<UserRole>();
|
List<SendEmailUserDto> toUserList = new List<SendEmailUserDto>();
|
||||||
List<UserRole> ccUserList = new List<UserRole>();
|
List<SendEmailUserDto> ccUserList = new List<SendEmailUserDto>();
|
||||||
|
|
||||||
var emailNoticeUserList = await _emailNoticeUserTypeRepository.Where(x => x.EmailNoticeConfigId == inDto.EmailNoticeConfig.Id).ToListAsync();
|
var emailNoticeUserList = await _emailNoticeUserTypeRepository.Where(x => x.EmailNoticeConfigId == inDto.EmailNoticeConfig.Id).ToListAsync();
|
||||||
var userTypeEnumList = emailNoticeUserList.Select(x => x.UserType).ToList();
|
var userTypeEnumList = emailNoticeUserList.Select(x => x.UserType).ToList();
|
||||||
|
|
@ -334,26 +349,39 @@ public class ImageConsumer(
|
||||||
DictionaryList = dictionaryDtos
|
DictionaryList = dictionaryDtos
|
||||||
});
|
});
|
||||||
|
|
||||||
foreach (var userinfo in toUserList)
|
|
||||||
|
var userWorkLanguageList = toUserList.Select(x => x.UserWorkLanguage).Distinct().ToList();
|
||||||
|
|
||||||
|
foreach (var workLanguage in userWorkLanguageList)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
var userinfoList = toUserList.Where(x => x.UserWorkLanguage == workLanguage).ToList();
|
||||||
var messageToSend = new MimeMessage();
|
var messageToSend = new MimeMessage();
|
||||||
// 发件地址
|
// 发件地址
|
||||||
messageToSend.From.Add(new MailboxAddress(_systemEmailConfig.FromName, _systemEmailConfig.FromEmail));
|
messageToSend.From.Add(new MailboxAddress(_systemEmailConfig.FromName, _systemEmailConfig.FromEmail));
|
||||||
|
|
||||||
|
foreach (var userinfo in userinfoList)
|
||||||
|
{
|
||||||
messageToSend.To.Add(new MailboxAddress(userinfo.FullName, userinfo.EMail));
|
messageToSend.To.Add(new MailboxAddress(userinfo.FullName, userinfo.EMail));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// 添加抄送
|
// 添加抄送
|
||||||
foreach (var ccUser in ccUserList)
|
foreach (var ccUser in ccUserList)
|
||||||
{
|
{
|
||||||
messageToSend.Cc.Add(new MailboxAddress(ccUser.FullName, ccUser.EMail));
|
messageToSend.Cc.Add(new MailboxAddress(ccUser.FullName, ccUser.EMail));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var userNames = userinfoList.Select(x => x.FullName).ToList();
|
||||||
|
|
||||||
// 格式化邮件内容
|
// 格式化邮件内容
|
||||||
Func<(string topicStr, string htmlBodyStr), (string topicStr, string htmlBodyStr)> emailConfigFunc = input =>
|
Func<(string topicStr, string htmlBodyStr), (string topicStr, string htmlBodyStr)> emailConfigFunc = input =>
|
||||||
{
|
{
|
||||||
var subjectCode = inDto.SubjectVisit.Subject.Code;
|
var subjectCode = inDto.SubjectVisit.Subject.Code;
|
||||||
var topicStr = string.Format(input.topicStr, trialInfo.ResearchProgramNo, subjectCode, inDto.SubjectVisit.VisitName);
|
var topicStr = string.Format(input.topicStr, trialInfo.ResearchProgramNo, subjectCode, inDto.SubjectVisit.VisitName);
|
||||||
var htmlBodyStr = string.Format(
|
var htmlBodyStr = string.Format(
|
||||||
CommonEmailHelper.ReplaceCompanyName(_systemEmailConfig, input.htmlBodyStr),
|
CommonEmailHelper.ReplaceCompanyName(_systemEmailConfig, input.htmlBodyStr, workLanguage),
|
||||||
userinfo.FullName, // 用户名 {0}
|
string.Join(',', userNames), // 用户名 {0}
|
||||||
trialInfo.ExperimentName, // 项目 {1}
|
trialInfo.ExperimentName, // 项目 {1}
|
||||||
subjectCode, // 受试者 {2}
|
subjectCode, // 受试者 {2}
|
||||||
inDto.SubjectVisit.VisitName, // 访视 {3}
|
inDto.SubjectVisit.VisitName, // 访视 {3}
|
||||||
|
|
@ -367,7 +395,7 @@ public class ImageConsumer(
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
await CommonEmailHelper.GetEmailSubejctAndHtmlInfoAndBuildAsync(inDto.EmailNoticeConfig, messageToSend, emailConfigFunc);
|
await CommonEmailHelper.GetEmailSubejctAndHtmlInfoAndBuildAsync(inDto.EmailNoticeConfig, messageToSend, emailConfigFunc, workLanguage);
|
||||||
|
|
||||||
await SendEmailHelper.SendEmailAsync(messageToSend, trialInfo);
|
await SendEmailHelper.SendEmailAsync(messageToSend, trialInfo);
|
||||||
}
|
}
|
||||||
|
|
@ -446,11 +474,19 @@ public class ImageConsumer(
|
||||||
var trialInfo = await _trialRepository.FirstOrDefaultAsync(t => t.Id == trialId);
|
var trialInfo = await _trialRepository.FirstOrDefaultAsync(t => t.Id == trialId);
|
||||||
|
|
||||||
// 根据不同场景获取不同角色的用户
|
// 根据不同场景获取不同角色的用户
|
||||||
var trialUser = await _trialUseRoleRepository.Where(x => x.TrialId == trialId && !x.TrialUser.IsDeleted).Include(x => x.UserRole).Select(x => x.UserRole).ToListAsync();
|
var trialUser = await _trialUseRoleRepository.Where(x => x.TrialId == trialId && !x.TrialUser.IsDeleted).Include(x => x.UserRole).Select(x => x.UserRole)
|
||||||
|
.Select(x => new SendEmailUserDto()
|
||||||
|
{
|
||||||
|
UserTypeEnum = x.UserTypeEnum,
|
||||||
|
FullName = x.FullName,
|
||||||
|
UserWorkLanguage = x.IdentityUser.UserWorkLanguage,
|
||||||
|
EMail = x.EMail,
|
||||||
|
})
|
||||||
|
.ToListAsync();
|
||||||
|
|
||||||
// 根据场景确定收件人
|
// 根据场景确定收件人
|
||||||
List<UserRole> toUserList = new List<UserRole>();
|
List<SendEmailUserDto> toUserList = new List<SendEmailUserDto>();
|
||||||
List<UserRole> ccUserList = new List<UserRole>();
|
List<SendEmailUserDto> ccUserList = new List<SendEmailUserDto>();
|
||||||
|
|
||||||
var emailNoticeUserList = await _emailNoticeUserTypeRepository.Where(x => x.EmailNoticeConfigId == emailNoticeConfig.Id).ToListAsync();
|
var emailNoticeUserList = await _emailNoticeUserTypeRepository.Where(x => x.EmailNoticeConfigId == emailNoticeConfig.Id).ToListAsync();
|
||||||
|
|
||||||
|
|
@ -469,12 +505,19 @@ public class ImageConsumer(
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach (var userinfo in toUserList)
|
var userWorkLanguageList = toUserList.Select(x => x.UserWorkLanguage).Distinct().ToList();
|
||||||
|
|
||||||
|
foreach (var workLanguage in userWorkLanguageList)
|
||||||
{
|
{
|
||||||
|
var userinfoList = toUserList.Where(x => x.UserWorkLanguage == workLanguage).ToList();
|
||||||
var messageToSend = new MimeMessage();
|
var messageToSend = new MimeMessage();
|
||||||
// 发件地址
|
// 发件地址
|
||||||
messageToSend.From.Add(new MailboxAddress(_systemEmailConfig.FromName, _systemEmailConfig.FromEmail));
|
messageToSend.From.Add(new MailboxAddress(_systemEmailConfig.FromName, _systemEmailConfig.FromEmail));
|
||||||
|
|
||||||
|
foreach (var userinfo in userinfoList)
|
||||||
|
{
|
||||||
messageToSend.To.Add(new MailboxAddress(userinfo.FullName, userinfo.EMail));
|
messageToSend.To.Add(new MailboxAddress(userinfo.FullName, userinfo.EMail));
|
||||||
|
}
|
||||||
|
|
||||||
// 添加抄送
|
// 添加抄送
|
||||||
foreach (var ccUser in ccUserList)
|
foreach (var ccUser in ccUserList)
|
||||||
|
|
@ -482,13 +525,15 @@ public class ImageConsumer(
|
||||||
messageToSend.Cc.Add(new MailboxAddress(ccUser.FullName, ccUser.EMail));
|
messageToSend.Cc.Add(new MailboxAddress(ccUser.FullName, ccUser.EMail));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var userNames = userinfoList.Select(x => x.FullName).ToList();
|
||||||
|
|
||||||
// 格式化邮件内容
|
// 格式化邮件内容
|
||||||
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, trialInfo.ResearchProgramNo);
|
var topicStr = string.Format(input.topicStr, trialInfo.ResearchProgramNo);
|
||||||
var htmlBodyStr = string.Format(
|
var htmlBodyStr = string.Format(
|
||||||
CommonEmailHelper.ReplaceCompanyName(_systemEmailConfig, input.htmlBodyStr),
|
CommonEmailHelper.ReplaceCompanyName(_systemEmailConfig, input.htmlBodyStr, workLanguage),
|
||||||
userinfo.FullName, // 用户名 {0}
|
string.Join(',', userNames), // 用户名 {0}
|
||||||
trialInfo.ExperimentName, // 项目 {1}
|
trialInfo.ExperimentName, // 项目 {1}
|
||||||
"", // 受试者 {2} - 阅片人筛选不涉及受试者
|
"", // 受试者 {2} - 阅片人筛选不涉及受试者
|
||||||
"", // 访视 {3} - 阅片人筛选不涉及访视
|
"", // 访视 {3} - 阅片人筛选不涉及访视
|
||||||
|
|
@ -500,7 +545,7 @@ public class ImageConsumer(
|
||||||
return (topicStr, htmlBodyStr);
|
return (topicStr, htmlBodyStr);
|
||||||
};
|
};
|
||||||
|
|
||||||
await CommonEmailHelper.GetEmailSubejctAndHtmlInfoAndBuildAsync(emailNoticeConfig, messageToSend, emailConfigFunc);
|
await CommonEmailHelper.GetEmailSubejctAndHtmlInfoAndBuildAsync(emailNoticeConfig, messageToSend, emailConfigFunc, workLanguage);
|
||||||
|
|
||||||
await SendEmailHelper.SendEmailAsync(messageToSend, trialInfo);
|
await SendEmailHelper.SendEmailAsync(messageToSend, trialInfo);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,6 @@
|
||||||
using IRaCIS.Core.Application.Helper;
|
using IRaCIS.Core.Application.Helper;
|
||||||
using IRaCIS.Core.Application.MassTransit.Command;
|
using IRaCIS.Core.Application.MassTransit.Command;
|
||||||
|
using IRaCIS.Core.Application.MassTransit.Consumer.Dto;
|
||||||
using IRaCIS.Core.Domain;
|
using IRaCIS.Core.Domain;
|
||||||
using IRaCIS.Core.Domain.BaseModel;
|
using IRaCIS.Core.Domain.BaseModel;
|
||||||
using IRaCIS.Core.Domain.Models;
|
using IRaCIS.Core.Domain.Models;
|
||||||
|
|
@ -68,7 +69,7 @@ public class UrgentMedicalReviewAddedEventConsumer(
|
||||||
|
|
||||||
|
|
||||||
var criterion = await _readingQuestionCriterionTrialRepository.FirstOrDefaultAsync(x => x.Id == medicalReview.VisitTask.TrialReadingCriterionId);
|
var criterion = await _readingQuestionCriterionTrialRepository.FirstOrDefaultAsync(x => x.Id == medicalReview.VisitTask.TrialReadingCriterionId);
|
||||||
var userinfo = await _userRoleRepository.Where(x => x.Id == medicalReview.MedicalManagerUserId).FirstOrDefaultAsync();
|
var userinfo = await _userRoleRepository.Where(x => x.Id == medicalReview.MedicalManagerUserId).Include(x => x.IdentityUser).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 taskInfo = await _visitTaskRepository.Where(x => x.Id == medicalReview.VisitTaskId).Include(x => x.SourceSubjectVisit).Include(x => x.ReadModule).Include(x => x.Subject).FirstNotNullAsync();
|
||||||
|
|
||||||
|
|
@ -78,7 +79,8 @@ public class UrgentMedicalReviewAddedEventConsumer(
|
||||||
|
|
||||||
var subjectVisit = await _subjectVisitRepository.Where(x => x.Id == visitid).FirstOrDefaultAsync();
|
var subjectVisit = await _subjectVisitRepository.Where(x => x.Id == visitid).FirstOrDefaultAsync();
|
||||||
|
|
||||||
|
var workLanguage = userinfo.IdentityUser?.UserWorkLanguage;
|
||||||
|
var userIsEn_US = workLanguage.HasValue ? workLanguage.Value == UserWorkLanguage.US : isEn_US;
|
||||||
|
|
||||||
var messageToSend = new MimeMessage();
|
var messageToSend = new MimeMessage();
|
||||||
//发件地址
|
//发件地址
|
||||||
|
|
@ -86,14 +88,14 @@ public class UrgentMedicalReviewAddedEventConsumer(
|
||||||
messageToSend.To.Add(new MailboxAddress(userinfo.FullName, userinfo.EMail));
|
messageToSend.To.Add(new MailboxAddress(userinfo.FullName, userinfo.EMail));
|
||||||
|
|
||||||
var trialInfo = await _trialRepository.FirstOrDefaultAsync(t => t.Id == medicalReview.TrialId);
|
var trialInfo = await _trialRepository.FirstOrDefaultAsync(t => t.Id == medicalReview.TrialId);
|
||||||
var companyName = isEn_US ? _systemEmailConfig.CompanyShortName : _systemEmailConfig.CompanyShortNameCN;
|
var companyName = userIsEn_US ? _systemEmailConfig.CompanyShortName : _systemEmailConfig.CompanyShortNameCN;
|
||||||
|
|
||||||
|
|
||||||
var dictionValue = await CommonEmailHelper.TranslationDictionary(new TranslationDictionaryDto()
|
var dictionValue = await CommonEmailHelper.TranslationDictionary(new TranslationDictionaryDto()
|
||||||
{
|
{
|
||||||
|
|
||||||
DictionaryRepository = _dictionaryRepository,
|
DictionaryRepository = _dictionaryRepository,
|
||||||
IsEn_US = isEn_US,
|
IsEn_US = userIsEn_US,
|
||||||
|
|
||||||
|
|
||||||
DictionaryList = new List<DictionaryDto>()
|
DictionaryList = new List<DictionaryDto>()
|
||||||
|
|
@ -110,7 +112,7 @@ public class UrgentMedicalReviewAddedEventConsumer(
|
||||||
var subjectName = taskInfo.BlindSubjectCode.IsNullOrEmpty() ? taskInfo.Subject.Code : taskInfo.BlindSubjectCode;
|
var subjectName = taskInfo.BlindSubjectCode.IsNullOrEmpty() ? taskInfo.Subject.Code : taskInfo.BlindSubjectCode;
|
||||||
var topicStr = string.Format(input.topicStr, trialInfo.ResearchProgramNo, subjectName, taskInfo.TaskBlindName);
|
var topicStr = string.Format(input.topicStr, trialInfo.ResearchProgramNo, subjectName, taskInfo.TaskBlindName);
|
||||||
var htmlBodyStr = string.Format(
|
var htmlBodyStr = string.Format(
|
||||||
CommonEmailHelper.ReplaceCompanyName(_systemEmailConfig, input.htmlBodyStr),
|
CommonEmailHelper.ReplaceCompanyName(_systemEmailConfig, input.htmlBodyStr, workLanguage),
|
||||||
userinfo.FullName, // 用户名 {0}
|
userinfo.FullName, // 用户名 {0}
|
||||||
trialInfo.ExperimentName, // 项目 {1}
|
trialInfo.ExperimentName, // 项目 {1}
|
||||||
criterion.CriterionName, // 阅片标准 {2}
|
criterion.CriterionName, // 阅片标准 {2}
|
||||||
|
|
@ -126,7 +128,7 @@ public class UrgentMedicalReviewAddedEventConsumer(
|
||||||
return (topicStr, htmlBodyStr);
|
return (topicStr, htmlBodyStr);
|
||||||
};
|
};
|
||||||
|
|
||||||
await CommonEmailHelper.GetTrialEmailSubejctAndHtmlInfoAndBuildAsync(trialEmailConfig, messageToSend, emailConfigFunc);
|
await CommonEmailHelper.GetTrialEmailSubejctAndHtmlInfoAndBuildAsync(trialEmailConfig, messageToSend, emailConfigFunc, workLanguage);
|
||||||
|
|
||||||
await SendEmailHelper.SendEmailAsync(messageToSend, trialInfo);
|
await SendEmailHelper.SendEmailAsync(messageToSend, trialInfo);
|
||||||
|
|
||||||
|
|
@ -177,7 +179,7 @@ public class UrgentIRRepliedMedicalReviewConsumer(
|
||||||
|
|
||||||
|
|
||||||
var criterion = await _readingQuestionCriterionTrialRepository.FirstOrDefaultAsync(x => x.Id == medicalReview.VisitTask.TrialReadingCriterionId);
|
var criterion = await _readingQuestionCriterionTrialRepository.FirstOrDefaultAsync(x => x.Id == medicalReview.VisitTask.TrialReadingCriterionId);
|
||||||
var userinfo = await _userRoleRepository.Where(x => x.Id == medicalReview.MedicalManagerUserId).FirstOrDefaultAsync();
|
var userinfo = await _userRoleRepository.Where(x => x.Id == medicalReview.MedicalManagerUserId).Include(x => x.IdentityUser).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 taskInfo = await _visitTaskRepository.Where(x => x.Id == medicalReview.VisitTaskId).Include(x => x.SourceSubjectVisit).Include(x => x.ReadModule).Include(x => x.Subject).FirstNotNullAsync();
|
||||||
|
|
||||||
|
|
@ -187,6 +189,8 @@ public class UrgentIRRepliedMedicalReviewConsumer(
|
||||||
|
|
||||||
var subjectVisit = await _subjectVisitRepository.Where(x => x.Id == visitid).FirstOrDefaultAsync();
|
var subjectVisit = await _subjectVisitRepository.Where(x => x.Id == visitid).FirstOrDefaultAsync();
|
||||||
|
|
||||||
|
var workLanguage = userinfo.IdentityUser?.UserWorkLanguage;
|
||||||
|
var userIsEn_US = workLanguage.HasValue ? workLanguage.Value == UserWorkLanguage.US : isEn_US;
|
||||||
|
|
||||||
|
|
||||||
var messageToSend = new MimeMessage();
|
var messageToSend = new MimeMessage();
|
||||||
|
|
@ -195,14 +199,14 @@ public class UrgentIRRepliedMedicalReviewConsumer(
|
||||||
messageToSend.To.Add(new MailboxAddress(userinfo.FullName, userinfo.EMail));
|
messageToSend.To.Add(new MailboxAddress(userinfo.FullName, userinfo.EMail));
|
||||||
|
|
||||||
var trialInfo = await _trialRepository.FirstOrDefaultAsync(t => t.Id == medicalReview.TrialId);
|
var trialInfo = await _trialRepository.FirstOrDefaultAsync(t => t.Id == medicalReview.TrialId);
|
||||||
var companyName = isEn_US ? _systemEmailConfig.CompanyShortName : _systemEmailConfig.CompanyShortNameCN;
|
var companyName = userIsEn_US ? _systemEmailConfig.CompanyShortName : _systemEmailConfig.CompanyShortNameCN;
|
||||||
|
|
||||||
|
|
||||||
var dictionValue = await CommonEmailHelper.TranslationDictionary(new TranslationDictionaryDto()
|
var dictionValue = await CommonEmailHelper.TranslationDictionary(new TranslationDictionaryDto()
|
||||||
{
|
{
|
||||||
|
|
||||||
DictionaryRepository = _dictionaryRepository,
|
DictionaryRepository = _dictionaryRepository,
|
||||||
IsEn_US = isEn_US,
|
IsEn_US = userIsEn_US,
|
||||||
|
|
||||||
|
|
||||||
DictionaryList = new List<DictionaryDto>()
|
DictionaryList = new List<DictionaryDto>()
|
||||||
|
|
@ -219,7 +223,7 @@ public class UrgentIRRepliedMedicalReviewConsumer(
|
||||||
var subjectCode = taskInfo.BlindSubjectCode.IsNullOrEmpty() ? taskInfo.Subject.Code : taskInfo.BlindSubjectCode;
|
var subjectCode = taskInfo.BlindSubjectCode.IsNullOrEmpty() ? taskInfo.Subject.Code : taskInfo.BlindSubjectCode;
|
||||||
var topicStr = string.Format(input.topicStr, trialInfo.ResearchProgramNo, subjectCode, taskInfo.TaskBlindName);
|
var topicStr = string.Format(input.topicStr, trialInfo.ResearchProgramNo, subjectCode, taskInfo.TaskBlindName);
|
||||||
var htmlBodyStr = string.Format(
|
var htmlBodyStr = string.Format(
|
||||||
CommonEmailHelper.ReplaceCompanyName(_systemEmailConfig, input.htmlBodyStr),
|
CommonEmailHelper.ReplaceCompanyName(_systemEmailConfig, input.htmlBodyStr, workLanguage),
|
||||||
userinfo.FullName, // 用户名 {0}
|
userinfo.FullName, // 用户名 {0}
|
||||||
trialInfo.ExperimentName, // 项目 {1}
|
trialInfo.ExperimentName, // 项目 {1}
|
||||||
criterion.CriterionName, // 阅片标准 {2}
|
criterion.CriterionName, // 阅片标准 {2}
|
||||||
|
|
@ -234,7 +238,7 @@ public class UrgentIRRepliedMedicalReviewConsumer(
|
||||||
|
|
||||||
return (topicStr, htmlBodyStr);
|
return (topicStr, htmlBodyStr);
|
||||||
};
|
};
|
||||||
await CommonEmailHelper.GetTrialEmailSubejctAndHtmlInfoAndBuildAsync(trialEmailConfig, messageToSend, emailConfigFunc);
|
await CommonEmailHelper.GetTrialEmailSubejctAndHtmlInfoAndBuildAsync(trialEmailConfig, messageToSend, emailConfigFunc, workLanguage);
|
||||||
|
|
||||||
await SendEmailHelper.SendEmailAsync(messageToSend, trialInfo);
|
await SendEmailHelper.SendEmailAsync(messageToSend, trialInfo);
|
||||||
}
|
}
|
||||||
|
|
@ -293,7 +297,7 @@ public class UrgentMIMRepliedMedicalReviewConsumer(
|
||||||
var criterion = await _readingQuestionCriterionTrialRepository.FirstOrDefaultAsync(x => x.Id == medicalReview.VisitTask.TrialReadingCriterionId);
|
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 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 userinfo = await _userRoleRepository.Where(x => x.Id == taskInfo.DoctorUserId).Include(x => x.IdentityUser).FirstOrDefaultAsync();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -303,6 +307,9 @@ public class UrgentMIMRepliedMedicalReviewConsumer(
|
||||||
|
|
||||||
var subjectVisit = await _subjectVisitRepository.Where(x => x.Id == visitid).FirstOrDefaultAsync();
|
var subjectVisit = await _subjectVisitRepository.Where(x => x.Id == visitid).FirstOrDefaultAsync();
|
||||||
|
|
||||||
|
var workLanguage = userinfo.IdentityUser?.UserWorkLanguage;
|
||||||
|
var userIsEn_US = workLanguage.HasValue ? workLanguage.Value == UserWorkLanguage.US : isEn_US;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
var messageToSend = new MimeMessage();
|
var messageToSend = new MimeMessage();
|
||||||
|
|
@ -311,14 +318,14 @@ public class UrgentMIMRepliedMedicalReviewConsumer(
|
||||||
messageToSend.To.Add(new MailboxAddress(userinfo.FullName, userinfo.EMail));
|
messageToSend.To.Add(new MailboxAddress(userinfo.FullName, userinfo.EMail));
|
||||||
|
|
||||||
var trialInfo = await _trialRepository.FirstOrDefaultAsync(t => t.Id == medicalReview.TrialId);
|
var trialInfo = await _trialRepository.FirstOrDefaultAsync(t => t.Id == medicalReview.TrialId);
|
||||||
var companyName = isEn_US ? _systemEmailConfig.CompanyShortName : _systemEmailConfig.CompanyShortNameCN;
|
var companyName = userIsEn_US ? _systemEmailConfig.CompanyShortName : _systemEmailConfig.CompanyShortNameCN;
|
||||||
|
|
||||||
|
|
||||||
var dictionValue = await CommonEmailHelper.TranslationDictionary(new TranslationDictionaryDto()
|
var dictionValue = await CommonEmailHelper.TranslationDictionary(new TranslationDictionaryDto()
|
||||||
{
|
{
|
||||||
|
|
||||||
DictionaryRepository = _dictionaryRepository,
|
DictionaryRepository = _dictionaryRepository,
|
||||||
IsEn_US = isEn_US,
|
IsEn_US = userIsEn_US,
|
||||||
|
|
||||||
|
|
||||||
DictionaryList = new List<DictionaryDto>()
|
DictionaryList = new List<DictionaryDto>()
|
||||||
|
|
@ -335,7 +342,7 @@ public class UrgentMIMRepliedMedicalReviewConsumer(
|
||||||
var subjectCode = taskInfo.BlindSubjectCode.IsNullOrEmpty() ? taskInfo.Subject.Code : taskInfo.BlindSubjectCode;
|
var subjectCode = taskInfo.BlindSubjectCode.IsNullOrEmpty() ? taskInfo.Subject.Code : taskInfo.BlindSubjectCode;
|
||||||
var topicStr = string.Format(input.topicStr, trialInfo.ResearchProgramNo, subjectCode, taskInfo.TaskBlindName);
|
var topicStr = string.Format(input.topicStr, trialInfo.ResearchProgramNo, subjectCode, taskInfo.TaskBlindName);
|
||||||
var htmlBodyStr = string.Format(
|
var htmlBodyStr = string.Format(
|
||||||
CommonEmailHelper.ReplaceCompanyName(_systemEmailConfig, input.htmlBodyStr),
|
CommonEmailHelper.ReplaceCompanyName(_systemEmailConfig, input.htmlBodyStr, workLanguage),
|
||||||
userinfo.FullName, // 用户名 {0}
|
userinfo.FullName, // 用户名 {0}
|
||||||
trialInfo.ExperimentName, // 项目 {1}
|
trialInfo.ExperimentName, // 项目 {1}
|
||||||
subjectCode, // 受试者 {2}
|
subjectCode, // 受试者 {2}
|
||||||
|
|
@ -352,7 +359,7 @@ public class UrgentMIMRepliedMedicalReviewConsumer(
|
||||||
return (topicStr, htmlBodyStr);
|
return (topicStr, htmlBodyStr);
|
||||||
};
|
};
|
||||||
|
|
||||||
await CommonEmailHelper.GetTrialEmailSubejctAndHtmlInfoAndBuildAsync(trialEmailConfig, messageToSend, emailConfigFunc);
|
await CommonEmailHelper.GetTrialEmailSubejctAndHtmlInfoAndBuildAsync(trialEmailConfig, messageToSend, emailConfigFunc, workLanguage);
|
||||||
await SendEmailHelper.SendEmailAsync(messageToSend, trialInfo);
|
await SendEmailHelper.SendEmailAsync(messageToSend, trialInfo);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -399,7 +406,15 @@ public class UrgentIRApplyedReReadingConsumer(
|
||||||
|
|
||||||
var doctorInfo = await _userRoleRepository.Where(x => x.Id == taskInfo.DoctorUserId).FirstOrDefaultAsync();
|
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 trialUserList = await _trialUseRoleRepository.Where(x => x.TrialId == taskInfo.TrialId && x.TrialUser.IsDeleted==false).Include(x => x.UserRole).Select(x => x.UserRole)
|
||||||
|
.Select(x => new SendEmailUserDto()
|
||||||
|
{
|
||||||
|
UserTypeEnum = x.UserTypeEnum,
|
||||||
|
FullName = x.FullName,
|
||||||
|
UserWorkLanguage = x.IdentityUser.UserWorkLanguage,
|
||||||
|
EMail = x.EMail,
|
||||||
|
})
|
||||||
|
.ToListAsync();
|
||||||
|
|
||||||
var userinfoList = trialUserList.Where(x => x.UserTypeEnum == UserTypeEnum.ProjectManager || x.UserTypeEnum == UserTypeEnum.APM).ToList();
|
var userinfoList = trialUserList.Where(x => x.UserTypeEnum == UserTypeEnum.ProjectManager || x.UserTypeEnum == UserTypeEnum.APM).ToList();
|
||||||
if (context.Message.ReReadingApplyState == ReReadingApplyState.TrialGroupHaveApplyed)
|
if (context.Message.ReReadingApplyState == ReReadingApplyState.TrialGroupHaveApplyed)
|
||||||
|
|
@ -412,23 +427,21 @@ public class UrgentIRApplyedReReadingConsumer(
|
||||||
|
|
||||||
var subjectVisit = await _subjectVisitRepository.Where(x => x.Id == visitid).FirstOrDefaultAsync();
|
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(userinfo.FullName, userinfo.EMail));
|
|
||||||
|
|
||||||
var trialInfo = await _trialRepository.FirstOrDefaultAsync(t => t.Id == taskInfo.TrialId);
|
var trialInfo = await _trialRepository.FirstOrDefaultAsync(t => t.Id == taskInfo.TrialId);
|
||||||
var companyName = isEn_US ? _systemEmailConfig.CompanyShortName : _systemEmailConfig.CompanyShortNameCN;
|
|
||||||
|
|
||||||
|
var userWorkLanguageList = userinfoList.Select(x => x.UserWorkLanguage).Distinct().ToList();
|
||||||
|
|
||||||
|
foreach (var workLanguage in userWorkLanguageList)
|
||||||
|
{
|
||||||
|
var langUserinfoList = userinfoList.Where(x => x.UserWorkLanguage == workLanguage).ToList();
|
||||||
|
if (!langUserinfoList.Any()) continue;
|
||||||
|
|
||||||
|
var userIsEn_US = workLanguage == UserWorkLanguage.US;
|
||||||
|
|
||||||
var dictionValue = await CommonEmailHelper.TranslationDictionary(new TranslationDictionaryDto()
|
var dictionValue = await CommonEmailHelper.TranslationDictionary(new TranslationDictionaryDto()
|
||||||
{
|
{
|
||||||
|
|
||||||
DictionaryRepository = _dictionaryRepository,
|
DictionaryRepository = _dictionaryRepository,
|
||||||
IsEn_US = isEn_US,
|
IsEn_US = userIsEn_US,
|
||||||
DictionaryList = new List<DictionaryDto>()
|
DictionaryList = new List<DictionaryDto>()
|
||||||
{
|
{
|
||||||
new DictionaryDto (){DictionaryCode= "ReadingCategory",EnumValue=taskInfo.ReadingCategory.GetEnumInt(), }, //任务类型
|
new DictionaryDto (){DictionaryCode= "ReadingCategory",EnumValue=taskInfo.ReadingCategory.GetEnumInt(), }, //任务类型
|
||||||
|
|
@ -436,13 +449,26 @@ public class UrgentIRApplyedReReadingConsumer(
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
var messageToSend = new MimeMessage();
|
||||||
|
//发件地址
|
||||||
|
messageToSend.From.Add(new MailboxAddress(_systemEmailConfig.FromName, _systemEmailConfig.FromEmail));
|
||||||
|
|
||||||
|
foreach (var userinfo in langUserinfoList)
|
||||||
|
{
|
||||||
|
messageToSend.To.Add(new MailboxAddress(userinfo.FullName, userinfo.EMail));
|
||||||
|
}
|
||||||
|
|
||||||
|
var companyName = userIsEn_US ? _systemEmailConfig.CompanyShortName : _systemEmailConfig.CompanyShortNameCN;
|
||||||
|
|
||||||
|
var userNames = langUserinfoList.Select(x => x.FullName).ToList();
|
||||||
|
|
||||||
Func<(string topicStr, string htmlBodyStr), (string topicStr, string htmlBodyStr)> emailConfigFunc = input =>
|
Func<(string topicStr, string htmlBodyStr), (string topicStr, string htmlBodyStr)> emailConfigFunc = input =>
|
||||||
{
|
{
|
||||||
var subjectCode = taskInfo.BlindSubjectCode.IsNullOrEmpty() ? taskInfo.Subject.Code : taskInfo.BlindSubjectCode;
|
var subjectCode = taskInfo.BlindSubjectCode.IsNullOrEmpty() ? taskInfo.Subject.Code : taskInfo.BlindSubjectCode;
|
||||||
var topicStr = string.Format(input.topicStr, trialInfo.ResearchProgramNo, subjectCode, taskInfo.TaskBlindName);
|
var topicStr = string.Format(input.topicStr, trialInfo.ResearchProgramNo, subjectCode, taskInfo.TaskBlindName);
|
||||||
var htmlBodyStr = string.Format(
|
var htmlBodyStr = string.Format(
|
||||||
CommonEmailHelper.ReplaceCompanyName(_systemEmailConfig, input.htmlBodyStr),
|
CommonEmailHelper.ReplaceCompanyName(_systemEmailConfig, input.htmlBodyStr, workLanguage),
|
||||||
userinfo.FullName, // 用户名 {0}
|
string.Join(',', userNames), // 用户名 {0}
|
||||||
trialInfo.ExperimentName, // 项目 {1}
|
trialInfo.ExperimentName, // 项目 {1}
|
||||||
subjectCode, // 受试者 {2}
|
subjectCode, // 受试者 {2}
|
||||||
taskInfo.TaskBlindName, // 访视 {3}
|
taskInfo.TaskBlindName, // 访视 {3}
|
||||||
|
|
@ -451,16 +477,12 @@ public class UrgentIRApplyedReReadingConsumer(
|
||||||
criterion.CriterionName, // 阅片标准 {6}
|
criterion.CriterionName, // 阅片标准 {6}
|
||||||
dictionValue[1], // 审批结果 {7}
|
dictionValue[1], // 审批结果 {7}
|
||||||
_systemEmailConfig.SiteUrl // 链接 {8}
|
_systemEmailConfig.SiteUrl // 链接 {8}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
);
|
);
|
||||||
|
|
||||||
return (topicStr, htmlBodyStr);
|
return (topicStr, htmlBodyStr);
|
||||||
};
|
};
|
||||||
|
|
||||||
await CommonEmailHelper.GetTrialEmailSubejctAndHtmlInfoAndBuildAsync(trialEmailConfig, messageToSend, emailConfigFunc);
|
await CommonEmailHelper.GetTrialEmailSubejctAndHtmlInfoAndBuildAsync(trialEmailConfig, messageToSend, emailConfigFunc, workLanguage);
|
||||||
|
|
||||||
await SendEmailHelper.SendEmailAsync(messageToSend, trialInfo);
|
await SendEmailHelper.SendEmailAsync(messageToSend, trialInfo);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -388,7 +388,7 @@ public class CRCRepliedCheckChallengeEventConsumer(
|
||||||
private readonly SystemEmailSendConfig _systemEmailConfig = systemEmailConfig.CurrentValue;
|
private readonly SystemEmailSendConfig _systemEmailConfig = systemEmailConfig.CurrentValue;
|
||||||
public async Task Consume(ConsumeContext<CRCRepliedCheckChallengeEvent> context)
|
public async Task Consume(ConsumeContext<CRCRepliedCheckChallengeEvent> context)
|
||||||
{
|
{
|
||||||
Console.WriteLine("发送(019,020) 【 CRC 回复一致性核查质疑 通知PM】邮件!!!");
|
Log.Logger.Warning("发送(019,020) 【 CRC 回复一致性核查质疑 通知PM】邮件!!!");
|
||||||
var isEn_US = CultureInfo.CurrentCulture.Name == StaticData.CultureInfo.en_US;
|
var isEn_US = CultureInfo.CurrentCulture.Name == StaticData.CultureInfo.en_US;
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -407,13 +407,18 @@ public class CRCRepliedCheckChallengeEventConsumer(
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|
||||||
var trialUserList = await _trialUseRoleRepository.Where(x => x.TrialId == subjectVisit.TrialId && x.TrialUser.IsDeleted == false).Include(x => x.UserRole).Select(x => x.UserRole).ToListAsync();
|
var trialUserList = await _trialUseRoleRepository.Where(x => x.TrialId == subjectVisit.TrialId && x.TrialUser.IsDeleted == false)
|
||||||
|
.Select(t => new { t.UserRole.IdentityUser.EMail, t.UserRole.FullName, t.UserRole.UserTypeEnum, t.UserRole.IdentityUser.UserWorkLanguage }).ToListAsync();
|
||||||
|
|
||||||
var userinfoList = trialUserList.Where(x => x.UserTypeEnum == UserTypeEnum.APM || x.UserTypeEnum == UserTypeEnum.ProjectManager).ToList();
|
|
||||||
|
|
||||||
|
|
||||||
var trialInfo = await _trialRepository.FirstOrDefaultAsync(t => t.Id == subjectVisit.TrialId);
|
var trialInfo = await _trialRepository.FirstOrDefaultAsync(t => t.Id == subjectVisit.TrialId);
|
||||||
|
|
||||||
|
// 遍历语言枚举 在底层判断收件人是否为空,决定是否跳过邮件发送,避免每个邮件场景的地方都重复判断
|
||||||
|
foreach (UserWorkLanguage workLanguage in Enum.GetValues<UserWorkLanguage>())
|
||||||
|
{
|
||||||
|
//重新设置当前发送邮件的语言
|
||||||
|
isEn_US = workLanguage == UserWorkLanguage.US;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -429,27 +434,31 @@ public class CRCRepliedCheckChallengeEventConsumer(
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
var userinfoList = trialUserList.Where(x => x.UserTypeEnum == UserTypeEnum.APM || x.UserTypeEnum == UserTypeEnum.ProjectManager)
|
||||||
|
.Where(t => t.UserWorkLanguage == workLanguage).ToList();
|
||||||
|
|
||||||
|
|
||||||
foreach (var userinfo in userinfoList)
|
|
||||||
{
|
|
||||||
var messageToSend = new MimeMessage();
|
var messageToSend = new MimeMessage();
|
||||||
|
|
||||||
//发件地址
|
//发件地址
|
||||||
messageToSend.From.Add(new MailboxAddress(_systemEmailConfig.FromName, _systemEmailConfig.FromEmail));
|
messageToSend.From.Add(new MailboxAddress(_systemEmailConfig.FromName, _systemEmailConfig.FromEmail));
|
||||||
messageToSend.To.Add(new MailboxAddress(String.Empty, userinfo.EMail));
|
|
||||||
|
|
||||||
|
var toUserName = string.Join('、', userinfoList.Select(t => t.FullName));
|
||||||
|
foreach (var userinfo in userinfoList)
|
||||||
|
{
|
||||||
|
messageToSend.To.Add(new MailboxAddress(userinfo.FullName, userinfo.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 subjectCode = subjectVisit.Subject.Code;
|
var subjectCode = subjectVisit.Subject.Code;
|
||||||
var topicStr = string.Format(input.topicStr, trialInfo.ResearchProgramNo, subjectCode, subjectVisit.VisitName);
|
var topicStr = string.Format(input.topicStr, trialInfo.ResearchProgramNo, subjectCode, subjectVisit.VisitName);
|
||||||
var htmlBodyStr = string.Format(
|
var htmlBodyStr = string.Format(
|
||||||
CommonEmailHelper.ReplaceCompanyName(_systemEmailConfig, input.htmlBodyStr),
|
CommonEmailHelper.ReplaceCompanyName(_systemEmailConfig, input.htmlBodyStr, workLanguage),
|
||||||
userinfo.FullName, // 用户名 {0}
|
toUserName, // 用户名 {0}
|
||||||
trialInfo.ExperimentName, // 项目 {1}
|
trialInfo.ExperimentName, // 项目 {1}
|
||||||
subjectCode, // 受试者 {2}
|
subjectCode, // 受试者 {2}
|
||||||
subjectVisit.VisitName, // 访视 {3}
|
subjectVisit.VisitName, // 访视 {3}
|
||||||
|
|
@ -461,10 +470,17 @@ public class CRCRepliedCheckChallengeEventConsumer(
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
await CommonEmailHelper.GetTrialEmailSubejctAndHtmlInfoAndBuildAsync(trialEmailConfig, messageToSend, emailConfigFunc);
|
await CommonEmailHelper.GetTrialEmailSubejctAndHtmlInfoAndBuildAsync(trialEmailConfig, messageToSend, emailConfigFunc, workLanguage);
|
||||||
|
|
||||||
await SendEmailHelper.SendEmailAsync(messageToSend, trialInfo);
|
await SendEmailHelper.SendEmailAsync(messageToSend, trialInfo);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -490,7 +506,7 @@ public class PMRepliedCheckChallengeEventConsumer(
|
||||||
private readonly SystemEmailSendConfig _systemEmailConfig = systemEmailConfig.CurrentValue;
|
private readonly SystemEmailSendConfig _systemEmailConfig = systemEmailConfig.CurrentValue;
|
||||||
public async Task Consume(ConsumeContext<PMRepliedCheckChallengeEvent> context)
|
public async Task Consume(ConsumeContext<PMRepliedCheckChallengeEvent> context)
|
||||||
{
|
{
|
||||||
Console.WriteLine("发送(016,017) 【 PM 一致性核查 通知CRC】邮件!!!");
|
Log.Logger.Warning("发送(016,017) 【 PM 一致性核查 通知CRC】邮件!!!");
|
||||||
var isEn_US = CultureInfo.CurrentCulture.Name == StaticData.CultureInfo.en_US;
|
var isEn_US = CultureInfo.CurrentCulture.Name == StaticData.CultureInfo.en_US;
|
||||||
|
|
||||||
var subjectVisitId = context.Message.SubjectVisitId;
|
var subjectVisitId = context.Message.SubjectVisitId;
|
||||||
|
|
@ -510,11 +526,11 @@ public class PMRepliedCheckChallengeEventConsumer(
|
||||||
var checkChallengeDialog = await _checkChallengeDialogRepository.Where(x => x.Id == context.Message.CheckChallengeDialogId).FirstNotNullAsync();
|
var checkChallengeDialog = await _checkChallengeDialogRepository.Where(x => x.Id == context.Message.CheckChallengeDialogId).FirstNotNullAsync();
|
||||||
|
|
||||||
|
|
||||||
var trialUserList = await _trialUseRoleRepository.Where(x => x.TrialId == subjectVisit.TrialId && x.TrialUser.IsDeleted == false).Include(x => x.UserRole).Select(x => x.UserRole).ToListAsync();
|
var trialUserList = await _trialUseRoleRepository.Where(x => x.TrialId == subjectVisit.TrialId && x.TrialUser.IsDeleted == false)
|
||||||
|
.Select(t => new { t.UserRole.IdentityUser.EMail, t.UserRole.FullName, t.UserRole.UserTypeEnum, t.UserRole.IdentityUser.UserWorkLanguage }).ToListAsync();
|
||||||
|
|
||||||
var userinfoList = trialUserList.Where(x => x.UserTypeEnum == UserTypeEnum.ClinicalResearchCoordinator).ToList();
|
|
||||||
|
|
||||||
var craInfo = trialUserList.Where(x => x.UserTypeEnum == UserTypeEnum.CRA).FirstOrDefault();
|
var craInfoList = trialUserList.Where(x => x.UserTypeEnum == UserTypeEnum.CRA).ToList();
|
||||||
|
|
||||||
var trialInfo = await _trialRepository.FirstOrDefaultAsync(t => t.Id == subjectVisit.TrialId);
|
var trialInfo = await _trialRepository.FirstOrDefaultAsync(t => t.Id == subjectVisit.TrialId);
|
||||||
|
|
||||||
|
|
@ -523,6 +539,16 @@ public class PMRepliedCheckChallengeEventConsumer(
|
||||||
modalities = subjectVisit.NoneDicomStudyList.Select(t => t.Modality)
|
modalities = subjectVisit.NoneDicomStudyList.Select(t => t.Modality)
|
||||||
.Union(subjectVisit.StudyList.Select(k => k.ModalityForEdit)).ToList();
|
.Union(subjectVisit.StudyList.Select(k => k.ModalityForEdit)).ToList();
|
||||||
|
|
||||||
|
|
||||||
|
// 遍历语言枚举 在底层判断收件人是否为空,决定是否跳过邮件发送,避免每个邮件场景的地方都重复判断
|
||||||
|
foreach (UserWorkLanguage workLanguage in Enum.GetValues<UserWorkLanguage>())
|
||||||
|
{
|
||||||
|
//重新设置当前发送邮件的语言
|
||||||
|
isEn_US = workLanguage == UserWorkLanguage.US;
|
||||||
|
|
||||||
|
var userinfoList = trialUserList.Where(x => x.UserTypeEnum == UserTypeEnum.ClinicalResearchCoordinator).Where(t => t.UserWorkLanguage == workLanguage).ToList();
|
||||||
|
|
||||||
|
|
||||||
var dictionValue = await CommonEmailHelper.TranslationDictionary(new TranslationDictionaryDto()
|
var dictionValue = await CommonEmailHelper.TranslationDictionary(new TranslationDictionaryDto()
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|
@ -535,16 +561,20 @@ public class PMRepliedCheckChallengeEventConsumer(
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
foreach (var userinfo in userinfoList)
|
|
||||||
{
|
|
||||||
var messageToSend = new MimeMessage();
|
var messageToSend = new MimeMessage();
|
||||||
|
|
||||||
//发件地址
|
//发件地址
|
||||||
messageToSend.From.Add(new MailboxAddress(_systemEmailConfig.FromName, _systemEmailConfig.FromEmail));
|
messageToSend.From.Add(new MailboxAddress(_systemEmailConfig.FromName, _systemEmailConfig.FromEmail));
|
||||||
messageToSend.To.Add(new MailboxAddress(userinfo.FullName, userinfo.EMail));
|
|
||||||
if (craInfo != null)
|
var toUserName = string.Join('、', userinfoList.Select(t => t.FullName));
|
||||||
|
foreach (var userinfo in userinfoList)
|
||||||
{
|
{
|
||||||
messageToSend.Cc.Add(new MailboxAddress(craInfo.FullName, craInfo.EMail));
|
messageToSend.To.Add(new MailboxAddress(userinfo.FullName, userinfo.EMail));
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach (var user in craInfoList)
|
||||||
|
{
|
||||||
|
messageToSend.Cc.Add(new MailboxAddress(user.FullName, user.EMail));
|
||||||
}
|
}
|
||||||
|
|
||||||
var companyName = isEn_US ? _systemEmailConfig.CompanyShortName : _systemEmailConfig.CompanyShortNameCN;
|
var companyName = isEn_US ? _systemEmailConfig.CompanyShortName : _systemEmailConfig.CompanyShortNameCN;
|
||||||
|
|
@ -555,8 +585,8 @@ public class PMRepliedCheckChallengeEventConsumer(
|
||||||
var subjectCode = subjectVisit.Subject.Code;
|
var subjectCode = subjectVisit.Subject.Code;
|
||||||
var topicStr = string.Format(input.topicStr, trialInfo.ResearchProgramNo, subjectCode, subjectVisit.VisitName);
|
var topicStr = string.Format(input.topicStr, trialInfo.ResearchProgramNo, subjectCode, subjectVisit.VisitName);
|
||||||
var htmlBodyStr = string.Format(
|
var htmlBodyStr = string.Format(
|
||||||
CommonEmailHelper.ReplaceCompanyName(_systemEmailConfig, input.htmlBodyStr),
|
CommonEmailHelper.ReplaceCompanyName(_systemEmailConfig, input.htmlBodyStr, workLanguage),
|
||||||
userinfo.FullName, // 用户名 {0}
|
toUserName, // 用户名 {0}
|
||||||
trialInfo.ExperimentName, // 项目 {1}
|
trialInfo.ExperimentName, // 项目 {1}
|
||||||
|
|
||||||
subjectCode, // 受试者 {2}
|
subjectCode, // 受试者 {2}
|
||||||
|
|
@ -571,10 +601,11 @@ public class PMRepliedCheckChallengeEventConsumer(
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
await CommonEmailHelper.GetTrialEmailSubejctAndHtmlInfoAndBuildAsync(trialEmailConfig, messageToSend, emailConfigFunc);
|
await CommonEmailHelper.GetTrialEmailSubejctAndHtmlInfoAndBuildAsync(trialEmailConfig, messageToSend, emailConfigFunc, workLanguage);
|
||||||
|
|
||||||
await SendEmailHelper.SendEmailAsync(messageToSend, trialInfo);
|
await SendEmailHelper.SendEmailAsync(messageToSend, trialInfo);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -616,15 +647,22 @@ public class CheckStateChangedToAuditEventConsumer(
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
var trialUserList = await _trialUseRoleRepository.Where(x => x.TrialId == subjectVisit.TrialId && x.TrialUser.IsDeleted == false).Include(x => x.UserRole).Select(x => x.UserRole).ToListAsync();
|
var trialUserList = await _trialUseRoleRepository.Where(x => x.TrialId == subjectVisit.TrialId && x.TrialUser.IsDeleted == false)
|
||||||
|
.Select(t => new { t.UserRole.IdentityUser.EMail, t.UserRole.FullName, t.UserRole.UserTypeEnum, t.UserRole.IdentityUser.UserWorkLanguage }).ToListAsync();
|
||||||
|
|
||||||
var userinfoList = trialUserList.Where(x => x.UserTypeEnum == UserTypeEnum.APM || x.UserTypeEnum == UserTypeEnum.ProjectManager).ToList();
|
|
||||||
|
|
||||||
|
|
||||||
var trialInfo = await _trialRepository.FirstOrDefaultAsync(t => t.Id == subjectVisit.TrialId);
|
var trialInfo = await _trialRepository.FirstOrDefaultAsync(t => t.Id == subjectVisit.TrialId);
|
||||||
|
|
||||||
|
|
||||||
|
// 遍历语言枚举 在底层判断收件人是否为空,决定是否跳过邮件发送,避免每个邮件场景的地方都重复判断
|
||||||
|
foreach (UserWorkLanguage workLanguage in Enum.GetValues<UserWorkLanguage>())
|
||||||
|
{
|
||||||
|
//重新设置当前发送邮件的语言
|
||||||
|
isEn_US = workLanguage == UserWorkLanguage.US;
|
||||||
|
|
||||||
|
var userinfoList = trialUserList.Where(x => x.UserTypeEnum == UserTypeEnum.APM || x.UserTypeEnum == UserTypeEnum.ProjectManager)
|
||||||
|
.Where(t => t.UserWorkLanguage == workLanguage).ToList();
|
||||||
|
|
||||||
var dictionValue = await CommonEmailHelper.TranslationDictionary(new TranslationDictionaryDto()
|
var dictionValue = await CommonEmailHelper.TranslationDictionary(new TranslationDictionaryDto()
|
||||||
{
|
{
|
||||||
|
|
@ -639,26 +677,27 @@ public class CheckStateChangedToAuditEventConsumer(
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
foreach (var userinfo in userinfoList)
|
|
||||||
{
|
|
||||||
var messageToSend = new MimeMessage();
|
var messageToSend = new MimeMessage();
|
||||||
//发件地址
|
//发件地址
|
||||||
messageToSend.From.Add(new MailboxAddress(_systemEmailConfig.FromName, _systemEmailConfig.FromEmail));
|
messageToSend.From.Add(new MailboxAddress(_systemEmailConfig.FromName, _systemEmailConfig.FromEmail));
|
||||||
|
|
||||||
|
var toUserName = string.Join('、', userinfoList.Select(t => t.FullName));
|
||||||
|
|
||||||
|
foreach (var userinfo in userinfoList)
|
||||||
|
{
|
||||||
messageToSend.To.Add(new MailboxAddress(userinfo.FullName, userinfo.EMail));
|
messageToSend.To.Add(new MailboxAddress(userinfo.FullName, userinfo.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 subjectCode = subjectVisit.Subject.Code;
|
var subjectCode = subjectVisit.Subject.Code;
|
||||||
var topicStr = string.Format(input.topicStr, trialInfo.ResearchProgramNo, subjectCode, subjectVisit.VisitName);
|
var topicStr = string.Format(input.topicStr, trialInfo.ResearchProgramNo, subjectCode, subjectVisit.VisitName);
|
||||||
var htmlBodyStr = string.Format(
|
var htmlBodyStr = string.Format(
|
||||||
CommonEmailHelper.ReplaceCompanyName(_systemEmailConfig, input.htmlBodyStr),
|
CommonEmailHelper.ReplaceCompanyName(_systemEmailConfig, input.htmlBodyStr, workLanguage),
|
||||||
userinfo.FullName, // 姓名 {0}
|
toUserName, // 姓名 {0}
|
||||||
trialInfo.ExperimentName, // 项目 {1}
|
trialInfo.ExperimentName, // 项目 {1}
|
||||||
subjectCode, // 受试者 {2}
|
subjectCode, // 受试者 {2}
|
||||||
subjectVisit.VisitName, // 访视 {3}
|
subjectVisit.VisitName, // 访视 {3}
|
||||||
|
|
@ -670,10 +709,11 @@ public class CheckStateChangedToAuditEventConsumer(
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
await CommonEmailHelper.GetTrialEmailSubejctAndHtmlInfoAndBuildAsync(trialEmailConfig, messageToSend, emailConfigFunc);
|
await CommonEmailHelper.GetTrialEmailSubejctAndHtmlInfoAndBuildAsync(trialEmailConfig, messageToSend, emailConfigFunc, workLanguage);
|
||||||
|
|
||||||
await SendEmailHelper.SendEmailAsync(messageToSend, trialInfo);
|
await SendEmailHelper.SendEmailAsync(messageToSend, trialInfo);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -62,10 +62,18 @@ namespace IRaCIS.Core.Application.Service
|
||||||
|
|
||||||
}).FirstNotNullAsync();
|
}).FirstNotNullAsync();
|
||||||
|
|
||||||
var isEn_us = _userInfo.IsEn_Us;
|
//找到当前收件人语言
|
||||||
|
var workLanguageList = _trialUserRoleRepository.Where(t => t.TrialId == taskInfo.TrialId && t.UserRole.UserTypeEnum == UserTypeEnum.ClinicalResearchCoordinator).Select(t => t.UserRole.IdentityUser.UserWorkLanguage).Distinct().ToList();
|
||||||
|
|
||||||
|
foreach (var workLanguage in workLanguageList)
|
||||||
|
{
|
||||||
|
//设置工作语言
|
||||||
|
var isEn_us = workLanguage == UserWorkLanguage.US;
|
||||||
|
|
||||||
var resultStr = isEn_us ? (result == true ? "Yes" : "No") : (result == true ? "是" : "否");
|
var resultStr = isEn_us ? (result == true ? "Yes" : "No") : (result == true ? "是" : "否");
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if (isEnrollment == true)
|
if (isEnrollment == true)
|
||||||
{
|
{
|
||||||
Func<TrialEmailNoticeConfig, (string topicStr, string htmlBodyStr, bool isEn_us, Guid? onlyToUserId)> topicAndHtmlFunc = trialEmailConfig =>
|
Func<TrialEmailNoticeConfig, (string topicStr, string htmlBodyStr, bool isEn_us, Guid? onlyToUserId)> topicAndHtmlFunc = trialEmailConfig =>
|
||||||
|
|
@ -97,6 +105,7 @@ namespace IRaCIS.Core.Application.Service
|
||||||
await SendTrialEmailAsync(taskInfo.TrialId, taskInfo.CriterionType, businessScenarioEnum, topicAndHtmlFunc, taskInfo.TrialSiteId);
|
await SendTrialEmailAsync(taskInfo.TrialId, taskInfo.CriterionType, businessScenarioEnum, topicAndHtmlFunc, taskInfo.TrialSiteId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -133,8 +142,12 @@ namespace IRaCIS.Core.Application.Service
|
||||||
|
|
||||||
var (topicStr, htmlBodyStr, isEn_us, onlyToUserId) = topicAndHtmlFunc(trialEmailConfig);
|
var (topicStr, htmlBodyStr, isEn_us, onlyToUserId) = topicAndHtmlFunc(trialEmailConfig);
|
||||||
|
|
||||||
|
//设置工作语言
|
||||||
|
var workLanguage = isEn_us ? UserWorkLanguage.US : UserWorkLanguage.CN;
|
||||||
|
|
||||||
|
|
||||||
//处理替换公司名
|
//处理替换公司名
|
||||||
htmlBodyStr = CommonEmailHelper.ReplaceCompanyName(_systemEmailConfig, htmlBodyStr);
|
htmlBodyStr = CommonEmailHelper.ReplaceCompanyName(_systemEmailConfig, htmlBodyStr, workLanguage);
|
||||||
|
|
||||||
|
|
||||||
sendEmailConfig.TopicDescription = topicStr;
|
sendEmailConfig.TopicDescription = topicStr;
|
||||||
|
|
@ -150,10 +163,10 @@ namespace IRaCIS.Core.Application.Service
|
||||||
|
|
||||||
var allUserTypeEnumList = toUserTypeEnumList.Union(copyUserTypeEnumList).Distinct().ToList();
|
var allUserTypeEnumList = toUserTypeEnumList.Union(copyUserTypeEnumList).Distinct().ToList();
|
||||||
|
|
||||||
var allUserList = await _trialUserRoleRepository.Where(t => t.TrialId == trialId && allUserTypeEnumList.Contains(t.UserRole.UserTypeEnum)).Select(t => new { t.UserId, t.UserRole.IdentityUser.EMail, t.UserRole.FullName, t.UserRole.UserTypeEnum }).ToListAsync();
|
var allUserList = await _trialUserRoleRepository.Where(t => t.TrialId == trialId && allUserTypeEnumList.Contains(t.UserRole.UserTypeEnum)).Select(t => new { t.UserId, t.UserRole.IdentityUser.EMail, t.UserRole.FullName, t.UserRole.UserTypeEnum, t.UserRole.IdentityUser.UserWorkLanguage }).ToListAsync();
|
||||||
|
|
||||||
|
//过滤当前语言
|
||||||
var toUserList = allUserList.Where(t => toUserTypeEnumList.Contains(t.UserTypeEnum))
|
var toUserList = allUserList.Where(t => toUserTypeEnumList.Contains(t.UserTypeEnum)).Where(t=>t.UserWorkLanguage==workLanguage)
|
||||||
.ToList();
|
.ToList();
|
||||||
|
|
||||||
//收件人 有CRC CRA , CRC CRA的账户要按照中心发送
|
//收件人 有CRC CRA , CRC CRA的账户要按照中心发送
|
||||||
|
|
@ -191,11 +204,6 @@ namespace IRaCIS.Core.Application.Service
|
||||||
sendEmailConfig.HtmlBodyStr = htmlBodyStr.Replace(EmailNamePlaceholder, string.Join(isEn_us ? ", " : "、", toUserList.Select(t => t.FullName).ToList()));
|
sendEmailConfig.HtmlBodyStr = htmlBodyStr.Replace(EmailNamePlaceholder, string.Join(isEn_us ? ", " : "、", toUserList.Select(t => t.FullName).ToList()));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (toUserList.Count == 0)
|
|
||||||
{
|
|
||||||
//---没有收件人,无法发送邮件
|
|
||||||
throw new BusinessValidationFailedException(_localizer["TrialEmailN_NoRecipient"]);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
if (trialEmailConfig.FromEmail.Contains("@") && !string.IsNullOrEmpty(trialEmailConfig.FromEmail))
|
if (trialEmailConfig.FromEmail.Contains("@") && !string.IsNullOrEmpty(trialEmailConfig.FromEmail))
|
||||||
|
|
@ -235,20 +243,7 @@ namespace IRaCIS.Core.Application.Service
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//邮件附件 这里是原格式发送,不是PDF
|
|
||||||
|
|
||||||
//if (trialEmailConfig.AttachCNPath != string.Empty && trialEmailConfig.AttachPath != string.Empty)
|
|
||||||
//{
|
|
||||||
// var phyPath = FileStoreHelper.GetPhysicalFilePath(_hostEnvironment, isEn_us? trialEmailConfig.AttachName: trialEmailConfig.AttachNameCN);
|
|
||||||
|
|
||||||
// //先预先生成了邮件,发送预先生成的邮件
|
|
||||||
// sendEmailConfig.EmailAttachMentConfigList.Add(new EmailAttachMentConfig()
|
|
||||||
// {
|
|
||||||
// FileName = $"{attachPrefix}_{Path.GetFileName(_userInfo.IsEn_Us ? trialEmailConfig.AttachName : trialEmailConfig.AttachNameCN)}",
|
|
||||||
|
|
||||||
// FileStream = File.OpenRead(phyPath),
|
|
||||||
// });
|
|
||||||
//}
|
|
||||||
|
|
||||||
return (trialEmailConfig, sendEmailConfig);
|
return (trialEmailConfig, sendEmailConfig);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -24,6 +24,7 @@ using Microsoft.Extensions.Logging;
|
||||||
using Microsoft.Extensions.Options;
|
using Microsoft.Extensions.Options;
|
||||||
using Spire.Doc;
|
using Spire.Doc;
|
||||||
using System.Linq.Dynamic.Core;
|
using System.Linq.Dynamic.Core;
|
||||||
|
using System.Runtime;
|
||||||
using System.Runtime.InteropServices;
|
using System.Runtime.InteropServices;
|
||||||
|
|
||||||
namespace IRaCIS.Core.Application.Service
|
namespace IRaCIS.Core.Application.Service
|
||||||
|
|
@ -194,7 +195,15 @@ namespace IRaCIS.Core.Application.Service
|
||||||
/// <exception cref="BusinessValidationFailedException"></exception>
|
/// <exception cref="BusinessValidationFailedException"></exception>
|
||||||
public async Task<string> BaseBusinessScenarioSendEmailAsync(Guid visitTaskId, bool? isHandSend, EmailStoreSendMode emailStoreMode, string sendFileRelativePath)
|
public async Task<string> BaseBusinessScenarioSendEmailAsync(Guid visitTaskId, bool? isHandSend, EmailStoreSendMode emailStoreMode, string sendFileRelativePath)
|
||||||
{
|
{
|
||||||
var isEn_us = _userInfo.IsEn_Us;
|
|
||||||
|
//简单处理,找到该中心的语言 设置工作语言
|
||||||
|
|
||||||
|
var country = _visitTaskRepository.Where(t => t.Id == visitTaskId).Select(t => t.Subject.TrialSite.Country).First();
|
||||||
|
|
||||||
|
var isEn_us = country == StaticData.SiteCountry.US;
|
||||||
|
|
||||||
|
var workLanguage = isEn_us ? UserWorkLanguage.US : UserWorkLanguage.CN;
|
||||||
|
|
||||||
EmailBusinessScenario businessScenarioEnum = EmailBusinessScenario.None;
|
EmailBusinessScenario businessScenarioEnum = EmailBusinessScenario.None;
|
||||||
|
|
||||||
var enrollReplace = "";
|
var enrollReplace = "";
|
||||||
|
|
@ -330,7 +339,7 @@ namespace IRaCIS.Core.Application.Service
|
||||||
{
|
{
|
||||||
var findItem = (await _dictionaryService.GetBasicDataSelect("Trial_Enroll_Report")).Where(t => t.Code == ((int)taskInfo.CriterionType).ToString()).FirstOrDefault();
|
var findItem = (await _dictionaryService.GetBasicDataSelect("Trial_Enroll_Report")).Where(t => t.Code == ((int)taskInfo.CriterionType).ToString()).FirstOrDefault();
|
||||||
|
|
||||||
enrollReplace = _userInfo.IsEn_Us ? findItem.Value : findItem.ValueCN;
|
enrollReplace = isEn_us ? findItem.Value : findItem.ValueCN;
|
||||||
|
|
||||||
//如果其他阅片人已经做了,说明发送了入组确认报告,第二个人做完就不发送了
|
//如果其他阅片人已经做了,说明发送了入组确认报告,第二个人做完就不发送了
|
||||||
|
|
||||||
|
|
@ -348,7 +357,7 @@ namespace IRaCIS.Core.Application.Service
|
||||||
{
|
{
|
||||||
bool isEnroll = false;
|
bool isEnroll = false;
|
||||||
|
|
||||||
(answer, isEnroll) = await DealEnrollAnswer(visitTaskId, (Guid)taskInfo.SourceSubjectVisitId, taskInfo.CriterionType, taskInfo.TrialReadingCriterionId);
|
(answer, isEnroll) = await DealEnrollAnswer(visitTaskId, (Guid)taskInfo.SourceSubjectVisitId, taskInfo.CriterionType, taskInfo.TrialReadingCriterionId, workLanguage);
|
||||||
|
|
||||||
isNeedSend = await DealMedicalReviewTasKGenerateAndIsSendAsync(taskInfo.TrialId, isHandSend, answer, new List<Guid>() { visitTaskId }, minUserIdList);
|
isNeedSend = await DealMedicalReviewTasKGenerateAndIsSendAsync(taskInfo.TrialId, isHandSend, answer, new List<Guid>() { visitTaskId }, minUserIdList);
|
||||||
}
|
}
|
||||||
|
|
@ -357,7 +366,7 @@ namespace IRaCIS.Core.Application.Service
|
||||||
{
|
{
|
||||||
var findItem = (await _dictionaryService.GetBasicDataSelect("Trial_PD_Report")).Where(t => t.Code == ((int)taskInfo.CriterionType).ToString()).FirstOrDefault();
|
var findItem = (await _dictionaryService.GetBasicDataSelect("Trial_PD_Report")).Where(t => t.Code == ((int)taskInfo.CriterionType).ToString()).FirstOrDefault();
|
||||||
|
|
||||||
PdReplace = _userInfo.IsEn_Us ? findItem.Value : findItem.ValueCN;
|
PdReplace = isEn_us ? findItem.Value : findItem.ValueCN;
|
||||||
|
|
||||||
//有序
|
//有序
|
||||||
|
|
||||||
|
|
@ -384,7 +393,7 @@ namespace IRaCIS.Core.Application.Service
|
||||||
if (taskList.Count == 2 && taskList.Count(t => t.ReadingTaskState == ReadingTaskState.HaveSigned && t.ReadingCategory == ReadingCategory.Visit) == 2)
|
if (taskList.Count == 2 && taskList.Count(t => t.ReadingTaskState == ReadingTaskState.HaveSigned && t.ReadingCategory == ReadingCategory.Visit) == 2)
|
||||||
{
|
{
|
||||||
|
|
||||||
answer = await TranslatePdStateAsync(visitTaskId, taskInfo.ReadingCategory, taskInfo.CriterionType);
|
answer = await TranslatePdStateAsync(visitTaskId, taskInfo.ReadingCategory, taskInfo.CriterionType, workLanguage);
|
||||||
|
|
||||||
|
|
||||||
isNeedSend = await DealMedicalReviewTasKGenerateAndIsSendAsync(taskInfo.TrialId, isHandSend, answer, taskList.Select(t => t.Id).ToList(), minUserIdList);
|
isNeedSend = await DealMedicalReviewTasKGenerateAndIsSendAsync(taskInfo.TrialId, isHandSend, answer, taskList.Select(t => t.Id).ToList(), minUserIdList);
|
||||||
|
|
@ -394,7 +403,7 @@ namespace IRaCIS.Core.Application.Service
|
||||||
else if (taskList.Count == 3 && taskList.Count(t => t.ReadingTaskState == ReadingTaskState.HaveSigned) == 3 && taskList.Where(t => t.ReadingCategory == ReadingCategory.Judge).Count() == 1)
|
else if (taskList.Count == 3 && taskList.Count(t => t.ReadingTaskState == ReadingTaskState.HaveSigned) == 3 && taskList.Where(t => t.ReadingCategory == ReadingCategory.Judge).Count() == 1)
|
||||||
{
|
{
|
||||||
var judgeResultId = taskList.Where(t => t.ReadingCategory == ReadingCategory.Judge).First()!.JudgeResultTaskId!.Value;
|
var judgeResultId = taskList.Where(t => t.ReadingCategory == ReadingCategory.Judge).First()!.JudgeResultTaskId!.Value;
|
||||||
answer = await TranslatePdStateAsync(judgeResultId, ReadingCategory.Visit, taskInfo.CriterionType);
|
answer = await TranslatePdStateAsync(judgeResultId, ReadingCategory.Visit, taskInfo.CriterionType, workLanguage);
|
||||||
|
|
||||||
isNeedSend = await DealMedicalReviewTasKGenerateAndIsSendAsync(taskInfo.TrialId, isHandSend, answer, taskList.Where(t => t.ReadingCategory == ReadingCategory.Judge).Select(t => t.Id).ToList(), minUserIdList);
|
isNeedSend = await DealMedicalReviewTasKGenerateAndIsSendAsync(taskInfo.TrialId, isHandSend, answer, taskList.Where(t => t.ReadingCategory == ReadingCategory.Judge).Select(t => t.Id).ToList(), minUserIdList);
|
||||||
|
|
||||||
|
|
@ -431,7 +440,7 @@ namespace IRaCIS.Core.Application.Service
|
||||||
if (taskList.Count == 2 && taskList.Count(t => t.ReadingTaskState == ReadingTaskState.HaveSigned && t.ReadingCategory == ReadingCategory.Global) == 2)
|
if (taskList.Count == 2 && taskList.Count(t => t.ReadingTaskState == ReadingTaskState.HaveSigned && t.ReadingCategory == ReadingCategory.Global) == 2)
|
||||||
{
|
{
|
||||||
|
|
||||||
answer = await TranslatePdStateAsync(visitTaskId, taskInfo.ReadingCategory, taskInfo.CriterionType);
|
answer = await TranslatePdStateAsync(visitTaskId, taskInfo.ReadingCategory, taskInfo.CriterionType, workLanguage);
|
||||||
|
|
||||||
isNeedSend = await DealMedicalReviewTasKGenerateAndIsSendAsync(taskInfo.TrialId, isHandSend, answer, taskList.Select(t => t.Id).ToList(), minUserIdList);
|
isNeedSend = await DealMedicalReviewTasKGenerateAndIsSendAsync(taskInfo.TrialId, isHandSend, answer, taskList.Select(t => t.Id).ToList(), minUserIdList);
|
||||||
}
|
}
|
||||||
|
|
@ -440,7 +449,7 @@ namespace IRaCIS.Core.Application.Service
|
||||||
{
|
{
|
||||||
|
|
||||||
var judgeResultId = taskList.Where(t => t.ReadingCategory == ReadingCategory.Judge).First().JudgeResultTaskId!.Value;
|
var judgeResultId = taskList.Where(t => t.ReadingCategory == ReadingCategory.Judge).First().JudgeResultTaskId!.Value;
|
||||||
answer = await TranslatePdStateAsync(judgeResultId, ReadingCategory.Global, taskInfo.CriterionType);
|
answer = await TranslatePdStateAsync(judgeResultId, ReadingCategory.Global, taskInfo.CriterionType, workLanguage);
|
||||||
|
|
||||||
isNeedSend = await DealMedicalReviewTasKGenerateAndIsSendAsync(taskInfo.TrialId, isHandSend, answer, taskList.Where(t => t.ReadingCategory == ReadingCategory.Judge).Select(t => t.Id).ToList(), minUserIdList);
|
isNeedSend = await DealMedicalReviewTasKGenerateAndIsSendAsync(taskInfo.TrialId, isHandSend, answer, taskList.Where(t => t.ReadingCategory == ReadingCategory.Judge).Select(t => t.Id).ToList(), minUserIdList);
|
||||||
|
|
||||||
|
|
@ -613,7 +622,7 @@ namespace IRaCIS.Core.Application.Service
|
||||||
//先预先生成了邮件,发送预先生成的邮件
|
//先预先生成了邮件,发送预先生成的邮件
|
||||||
sendEmailConfig.EmailAttachMentConfigList.Add(new EmailAttachMentConfig()
|
sendEmailConfig.EmailAttachMentConfigList.Add(new EmailAttachMentConfig()
|
||||||
{
|
{
|
||||||
FileName = $"{attachPrefix}_{Path.GetFileNameWithoutExtension(_userInfo.IsEn_Us ? trialEmailConfig.AttachName : trialEmailConfig!.AttachNameCN)}.pdf",
|
FileName = $"{attachPrefix}_{Path.GetFileNameWithoutExtension(isEn_us ? trialEmailConfig.AttachName : trialEmailConfig!.AttachNameCN)}.pdf",
|
||||||
|
|
||||||
FileStream = File.OpenRead(phyPath),
|
FileStream = File.OpenRead(phyPath),
|
||||||
});
|
});
|
||||||
|
|
@ -639,7 +648,7 @@ namespace IRaCIS.Core.Application.Service
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
var path = FileStoreHelper.GetPhysicalFilePath(_hostEnvironment, _userInfo.IsEn_Us ? trialEmailConfig.AttachPath : trialEmailConfig.AttachCNPath);
|
var path = FileStoreHelper.GetPhysicalFilePath(_hostEnvironment, isEn_us ? trialEmailConfig.AttachPath : trialEmailConfig.AttachCNPath);
|
||||||
|
|
||||||
//获取从word 到 PDF的路径
|
//获取从word 到 PDF的路径
|
||||||
var (serverFilePath, relativePath, fileRealName) = FileStoreHelper.GetSubjectEnrollConfirmOrPDEmailPath(_hostEnvironment, Path.GetFileName(path), taskInfo.TrialId, taskInfo.TrialSiteId, taskInfo.SubjectId, true);
|
var (serverFilePath, relativePath, fileRealName) = FileStoreHelper.GetSubjectEnrollConfirmOrPDEmailPath(_hostEnvironment, Path.GetFileName(path), taskInfo.TrialId, taskInfo.TrialSiteId, taskInfo.SubjectId, true);
|
||||||
|
|
@ -729,7 +738,7 @@ namespace IRaCIS.Core.Application.Service
|
||||||
pdfMemoryStream.Seek(0, SeekOrigin.Begin);
|
pdfMemoryStream.Seek(0, SeekOrigin.Begin);
|
||||||
sendEmailConfig.EmailAttachMentConfigList.Add(new EmailAttachMentConfig()
|
sendEmailConfig.EmailAttachMentConfigList.Add(new EmailAttachMentConfig()
|
||||||
{
|
{
|
||||||
FileName = $"{taskInfo.SubjectCode}_{Path.GetFileNameWithoutExtension(_userInfo.IsEn_Us ? trialEmailConfig.AttachName : trialEmailConfig.AttachNameCN)}.pdf",
|
FileName = $"{taskInfo.SubjectCode}_{Path.GetFileNameWithoutExtension(isEn_us ? trialEmailConfig.AttachName : trialEmailConfig.AttachNameCN)}.pdf",
|
||||||
|
|
||||||
FileStream = pdfMemoryStream
|
FileStream = pdfMemoryStream
|
||||||
});
|
});
|
||||||
|
|
@ -1067,11 +1076,14 @@ namespace IRaCIS.Core.Application.Service
|
||||||
/// <param name="subjectVisitId"></param>
|
/// <param name="subjectVisitId"></param>
|
||||||
/// <param name="criterionType"></param>
|
/// <param name="criterionType"></param>
|
||||||
/// <param name="trialReadingCriterionId"></param>
|
/// <param name="trialReadingCriterionId"></param>
|
||||||
|
/// <param name="userWorkLanguage"></param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
private async Task<(string enrollAnswer, bool isEnroll)> DealEnrollAnswer(Guid visitTaskId, Guid subjectVisitId, CriterionType criterionType, Guid trialReadingCriterionId)
|
private async Task<(string enrollAnswer, bool isEnroll)> DealEnrollAnswer(Guid visitTaskId, Guid subjectVisitId, CriterionType criterionType, Guid trialReadingCriterionId, UserWorkLanguage userWorkLanguage)
|
||||||
{
|
{
|
||||||
|
|
||||||
var enrollAnswer = _userInfo.IsEn_Us ? "No" : "否";
|
var isEn_us = userWorkLanguage == UserWorkLanguage.US;
|
||||||
|
|
||||||
|
var enrollAnswer = isEn_us ? "No" : "否";
|
||||||
var isEnroll = false;
|
var isEnroll = false;
|
||||||
|
|
||||||
switch (criterionType)
|
switch (criterionType)
|
||||||
|
|
@ -1088,7 +1100,7 @@ namespace IRaCIS.Core.Application.Service
|
||||||
if (await _readingTableQuestionAnswerRepository.Where().AnyAsync(x => x.VisitTaskId == visitTaskId && x.Answer == TargetState.Exist.GetEnumInt() &&
|
if (await _readingTableQuestionAnswerRepository.Where().AnyAsync(x => x.VisitTaskId == visitTaskId && x.Answer == TargetState.Exist.GetEnumInt() &&
|
||||||
x.ReadingTableQuestionTrial.QuestionMark == QuestionMark.State && x.ReadingQuestionTrial.LesionType == LesionType.TargetLesion))
|
x.ReadingTableQuestionTrial.QuestionMark == QuestionMark.State && x.ReadingQuestionTrial.LesionType == LesionType.TargetLesion))
|
||||||
{
|
{
|
||||||
enrollAnswer = _userInfo.IsEn_Us ? "Yes" : "是";
|
enrollAnswer = isEn_us ? "Yes" : "是";
|
||||||
isEnroll = true;
|
isEnroll = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1102,7 +1114,7 @@ x.ReadingTableQuestionTrial.QuestionMark == QuestionMark.LesionNumber && x.Readi
|
||||||
bool exists = list.Any(s => int.TryParse(s, out var n) && n >= 1);
|
bool exists = list.Any(s => int.TryParse(s, out var n) && n >= 1);
|
||||||
if (exists)
|
if (exists)
|
||||||
{
|
{
|
||||||
enrollAnswer = _userInfo.IsEn_Us ? "Yes" : "是";
|
enrollAnswer = isEn_us ? "Yes" : "是";
|
||||||
isEnroll = true;
|
isEnroll = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1168,9 +1180,10 @@ x.ReadingTableQuestionTrial.QuestionMark == QuestionMark.LesionNumber && x.Readi
|
||||||
/// <param name="readingCategory"> 任务类型</param>
|
/// <param name="readingCategory"> 任务类型</param>
|
||||||
/// <param name="criterionType">标准类型</param>
|
/// <param name="criterionType">标准类型</param>
|
||||||
/// <param name="IsGlobalGenerate"> 是否是全局产生(区分裁判任务)</param>
|
/// <param name="IsGlobalGenerate"> 是否是全局产生(区分裁判任务)</param>
|
||||||
|
/// <param name="userWorkLanguage"></param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
/// <exception cref="BusinessValidationFailedException"></exception>
|
/// <exception cref="BusinessValidationFailedException"></exception>
|
||||||
private async Task<string> TranslatePdStateAsync(Guid visitTaskId, ReadingCategory readingCategory, CriterionType criterionType, bool? IsGlobalGenerate = null)
|
private async Task<string> TranslatePdStateAsync(Guid visitTaskId, ReadingCategory readingCategory, CriterionType criterionType, UserWorkLanguage userWorkLanguage, bool? IsGlobalGenerate = null )
|
||||||
{
|
{
|
||||||
|
|
||||||
var answer = string.Empty;
|
var answer = string.Empty;
|
||||||
|
|
@ -1361,6 +1374,7 @@ x.ReadingTableQuestionTrial.QuestionMark == QuestionMark.LesionNumber && x.Readi
|
||||||
throw new BusinessValidationFailedException(_localizer["TrialEmailN_InvalidTaskTypeForEmailSending"]);
|
throw new BusinessValidationFailedException(_localizer["TrialEmailN_InvalidTaskTypeForEmailSending"]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var isEn_us = userWorkLanguage == UserWorkLanguage.US;
|
||||||
|
|
||||||
switch (criterionType)
|
switch (criterionType)
|
||||||
{
|
{
|
||||||
|
|
@ -1372,11 +1386,11 @@ x.ReadingTableQuestionTrial.QuestionMark == QuestionMark.LesionNumber && x.Readi
|
||||||
|
|
||||||
if (answer == OverallAssessment.PD.GetEnumInt())
|
if (answer == OverallAssessment.PD.GetEnumInt())
|
||||||
{
|
{
|
||||||
answer = _userInfo.IsEn_Us ? "Yes" : "是";
|
answer = isEn_us ? "Yes" : "是";
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
answer = _userInfo.IsEn_Us ? "No" : "否";
|
answer = isEn_us ? "No" : "否";
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
@ -1384,11 +1398,11 @@ x.ReadingTableQuestionTrial.QuestionMark == QuestionMark.LesionNumber && x.Readi
|
||||||
|
|
||||||
if (answer == OverallAssessment.iCPD.GetEnumInt())
|
if (answer == OverallAssessment.iCPD.GetEnumInt())
|
||||||
{
|
{
|
||||||
answer = _userInfo.IsEn_Us ? "Yes" : "是";
|
answer = isEn_us ? "Yes" : "是";
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
answer = _userInfo.IsEn_Us ? "No" : "否";
|
answer = isEn_us ? "No" : "否";
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
@ -1396,11 +1410,11 @@ x.ReadingTableQuestionTrial.QuestionMark == QuestionMark.LesionNumber && x.Readi
|
||||||
|
|
||||||
if (answer == CTMRIOverallAssessment.PD.GetEnumInt())
|
if (answer == CTMRIOverallAssessment.PD.GetEnumInt())
|
||||||
{
|
{
|
||||||
answer = _userInfo.IsEn_Us ? "Yes" : "是";
|
answer = isEn_us ? "Yes" : "是";
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
answer = _userInfo.IsEn_Us ? "No" : "否";
|
answer = isEn_us ? "No" : "否";
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
@ -1408,11 +1422,11 @@ x.ReadingTableQuestionTrial.QuestionMark == QuestionMark.LesionNumber && x.Readi
|
||||||
|
|
||||||
if (answer == ImagingOverallAssessment_Lugano.PMDPD.GetEnumInt())
|
if (answer == ImagingOverallAssessment_Lugano.PMDPD.GetEnumInt())
|
||||||
{
|
{
|
||||||
answer = _userInfo.IsEn_Us ? "Yes" : "是";
|
answer = isEn_us ? "Yes" : "是";
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
answer = _userInfo.IsEn_Us ? "No" : "否";
|
answer = isEn_us ? "No" : "否";
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
@ -1423,11 +1437,11 @@ x.ReadingTableQuestionTrial.QuestionMark == QuestionMark.LesionNumber && x.Readi
|
||||||
|
|
||||||
if (answer == VisitTumorEvaluation.PD.GetEnumInt())
|
if (answer == VisitTumorEvaluation.PD.GetEnumInt())
|
||||||
{
|
{
|
||||||
answer = _userInfo.IsEn_Us ? "Yes" : "是";
|
answer = isEn_us ? "Yes" : "是";
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
answer = _userInfo.IsEn_Us ? "No" : "否";
|
answer = isEn_us ? "No" : "否";
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1174,6 +1174,7 @@ namespace IRaCIS.Core.Application.Service
|
||||||
throw new BusinessValidationFailedException(_localizer["ReadModule_TumorExists"]);
|
throw new BusinessValidationFailedException(_localizer["ReadModule_TumorExists"]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
if (await _visitTaskRepository.AnyAsync(x => readModuleId == x.SouceReadModuleId && (x.TaskState==TaskState.Effect||x.ReadingTaskState==ReadingTaskState.HaveSigned)))
|
if (await _visitTaskRepository.AnyAsync(x => readModuleId == x.SouceReadModuleId && (x.TaskState==TaskState.Effect||x.ReadingTaskState==ReadingTaskState.HaveSigned)))
|
||||||
{
|
{
|
||||||
//---当前阅片已生成任务,操作失败。
|
//---当前阅片已生成任务,操作失败。
|
||||||
|
|
@ -1183,7 +1184,7 @@ namespace IRaCIS.Core.Application.Service
|
||||||
// 如果生成了 访视级别的阅片期裁判 不让删除
|
// 如果生成了 访视级别的阅片期裁判 不让删除
|
||||||
if (criterionInfo.IsArbitrationReading && criterionInfo.IsReadingPeriod && !criterionInfo.IsGlobalReading && criterionInfo.ArbitrationRule == ArbitrationRule.Reading)
|
if (criterionInfo.IsArbitrationReading && criterionInfo.IsReadingPeriod && !criterionInfo.IsGlobalReading && criterionInfo.ArbitrationRule == ArbitrationRule.Reading)
|
||||||
{
|
{
|
||||||
if (await _visitTaskRepository.AnyAsync(x => x.SourceSubjectVisitId == readModule.SubjectVisitId && x.ReadingCategory == ReadingCategory.Judge))
|
if (await _visitTaskRepository.AnyAsync(x => x.SourceSubjectVisitId == readModule.SubjectVisitId && x.ReadingCategory == ReadingCategory.Judge && (x.TaskState == TaskState.Effect || x.ReadingTaskState == ReadingTaskState.HaveSigned)))
|
||||||
{
|
{
|
||||||
//---当前阅片已生成裁判任务,操作失败。
|
//---当前阅片已生成裁判任务,操作失败。
|
||||||
throw new BusinessValidationFailedException(_localizer["ReadModule_JudgeTaskGenerated"]);
|
throw new BusinessValidationFailedException(_localizer["ReadModule_JudgeTaskGenerated"]);
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue