From 9eda07b25336637c7422b037957f050a3594ff8a Mon Sep 17 00:00:00 2001 From: hang <872297557@qq.com> Date: Thu, 31 Aug 2023 16:20:47 +0800 Subject: [PATCH 01/12] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=90=AF=E5=8A=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- IRaCIS.Core.API/Startup.cs | 14 ++++++++++---- .../Service/Management/UserTypeService.cs | 2 +- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/IRaCIS.Core.API/Startup.cs b/IRaCIS.Core.API/Startup.cs index 769f9c9b7..b095f6b07 100644 --- a/IRaCIS.Core.API/Startup.cs +++ b/IRaCIS.Core.API/Startup.cs @@ -27,6 +27,8 @@ using Microsoft.AspNetCore.StaticFiles; using IRaCIS.Application.Services.BackGroundJob; using IRaCIS.Core.Application.Helper; using Microsoft.AspNetCore.Http; +using Autofac.Core; +using DocumentFormat.OpenXml.InkML; namespace IRaCIS.Core.API { @@ -92,7 +94,7 @@ namespace IRaCIS.Core.API }) .AddNewtonsoftJsonSetup(); // NewtonsoftJson 序列化 处理 - services.AddOptions().Configure( _configuration.GetSection("SystemEmailSendConfig")); + services.AddOptions().Configure(_configuration.GetSection("SystemEmailSendConfig")); services.AddOptions().Configure(_configuration.GetSection("BasicSystemConfig")); @@ -165,7 +167,7 @@ namespace IRaCIS.Core.API } // This method gets called by the runtime. Use this method to configure the HTTP request pipeline. - public void Configure(IApplicationBuilder app, IWebHostEnvironment env) + public async void Configure(IApplicationBuilder app, IWebHostEnvironment env) { //app.UsePathBase(PathString.FromUriComponent("/api")); @@ -213,7 +215,7 @@ namespace IRaCIS.Core.API app.UseStatusCodePagesWithReExecute("/Error/{0}"); SwaggerSetup.Configure(app, env); - + ////serilog 记录请求的用户信息 @@ -242,7 +244,11 @@ namespace IRaCIS.Core.API }); - HangfireJobHelper.NotImmediatelyOnceOnlyJob(t => t.InitHangfireJobTaskAsync(),TimeSpan.FromSeconds(1)); + var hangfireJobService = app.ApplicationServices.GetRequiredService(); + + await hangfireJobService.InitHangfireJobTaskAsync(); + //有的时候每调用 + //HangfireJobHelper.NotImmediatelyOnceOnlyJob(t => t.InitHangfireJobTaskAsync(),TimeSpan.FromSeconds(1)); } diff --git a/IRaCIS.Core.Application/Service/Management/UserTypeService.cs b/IRaCIS.Core.Application/Service/Management/UserTypeService.cs index c6b5a168e..fb534f4e9 100644 --- a/IRaCIS.Core.Application/Service/Management/UserTypeService.cs +++ b/IRaCIS.Core.Application/Service/Management/UserTypeService.cs @@ -119,7 +119,7 @@ namespace IRaCIS.Core.Application.Contracts } else { - userTypeEnums = new List() { UserTypeEnum.PI, UserTypeEnum.MIM }; + userTypeEnums = new List() { UserTypeEnum.PI, UserTypeEnum.MIM , UserTypeEnum.IQC}; } } From 5cbefec0b0cdb56af44d9ae9941108d47a4eb225 Mon Sep 17 00:00:00 2001 From: hang <872297557@qq.com> Date: Thu, 31 Aug 2023 16:33:34 +0800 Subject: [PATCH 02/12] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=8F=90=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/UploadDownLoadController.cs | 39 ++++++++++++------- 1 file changed, 26 insertions(+), 13 deletions(-) diff --git a/IRaCIS.Core.API/Controllers/UploadDownLoadController.cs b/IRaCIS.Core.API/Controllers/UploadDownLoadController.cs index d66dc26b7..c8f7d9249 100644 --- a/IRaCIS.Core.API/Controllers/UploadDownLoadController.cs +++ b/IRaCIS.Core.API/Controllers/UploadDownLoadController.cs @@ -991,6 +991,7 @@ namespace IRaCIS.Core.API.Controllers if (!fileName.EndsWith(".xlsx", StringComparison.OrdinalIgnoreCase)) { + // 璇风敤鎻愪緵鏍煎紡鐨勬ā鏉縠xcel涓婁紶闇瑕佸鐞嗙殑鏁版嵁 throw new BusinessValidationFailedException(StaticData.International("UploadDownLoad_TemplateUploadData")); } @@ -1006,32 +1007,41 @@ namespace IRaCIS.Core.API.Controllers if (excelList.Any(t => string.IsNullOrWhiteSpace(t.TrialSiteCode) || string.IsNullOrWhiteSpace(t.FirstName) || string.IsNullOrWhiteSpace(t.LastName) || string.IsNullOrWhiteSpace(t.Email) || string.IsNullOrWhiteSpace(t.UserTypeStr))) { + //璇风‘淇滶xcel涓 姣忎竴琛岀殑 涓績缂栧彿锛屽鍚嶏紝閭锛岀敤鎴风被鍨嬫暟鎹褰曞畬鏁村啀杩涜涓婁紶 throw new BusinessValidationFailedException(StaticData.International("UploadDownLoad_EnsureCompleteData")); } var siteCodeList = excelList.Select(t => t.TrialSiteCode.Trim().ToUpper()).Distinct().ToList(); - - if (_trialSiteRepository.Where(t => t.TrialId==trialId && siteCodeList.Contains(t.TrialSiteCode.ToUpper())).Count() != siteCodeList.Count) + + if (_trialSiteRepository.Where(t => t.TrialId == trialId && siteCodeList.Contains(t.TrialSiteCode.ToUpper())).Count() != siteCodeList.Count) { + //鍦ㄩ」鐩腑鏈壘鍒拌Excel涓儴鍒嗘垨鍏ㄩ儴涓績 throw new BusinessValidationFailedException(StaticData.International("UploadDownLoad_InvalidCenters")); } if (excelList.GroupBy(t => new { t.UserTypeStr, t.Email }).Any(g => g.Count() > 1)) { + // 鍚屼竴閭锛屽悓涓鐢ㄦ埛绫诲瀷锛屽彧鑳界敓鎴愪竴涓处鎴,璇锋牳鏌xcel鏁版嵁 + throw new BusinessValidationFailedException(StaticData.International("UploadDownLoad_CheckDuplicateAccounts")); } if (excelList.Any(t => !t.Email.Contains("@"))) { + //鏈夐偖绠变笉绗﹀悎閭鏍煎紡,璇锋牳鏌xcel鏁版嵁 throw new BusinessValidationFailedException(StaticData.International("UploadDownLoad_InvalidEmail")); } var generateUserTypeList = new List() { "CRC", "SR", "CRA" }; if (excelList.Any(t => !generateUserTypeList.Contains(t.UserTypeStr.ToUpper()))) { + //鐢ㄦ埛绫诲瀷浠呰兘涓 CRC,SR,CRA 璇锋牳鏌xcel鏁版嵁 throw new BusinessValidationFailedException(StaticData.International("UploadDownLoad_InvalidUserType")); } - + if (excelList.Count == 0) + { + throw new BusinessValidationFailedException(StaticData.International("UploadDownLoad_NoValiddata")); + } //澶勭悊濂 鐢ㄦ埛绫诲瀷 鍜岀敤鎴风被鍨嬫灇涓 var sysUserTypeList = _usertypeRepository.Where(t => t.UserTypeEnum == UserTypeEnum.CRA || t.UserTypeEnum == UserTypeEnum.ClinicalResearchCoordinator || t.UserTypeEnum == UserTypeEnum.SR).Select(t => new { UserTypeId = t.Id, t.UserTypeEnum }).ToList(); var siteList = _trialSiteRepository.Where(t => t.TrialId == trialId && siteCodeList.Contains(t.TrialSiteCode)).Select(t => new { t.TrialSiteCode, t.SiteId }).ToList(); @@ -1061,10 +1071,13 @@ namespace IRaCIS.Core.API.Controllers item.SiteId = siteList.FirstOrDefault(t => t.TrialSiteCode.ToUpper() == item.TrialSiteCode.ToUpper()).SiteId; } + + await _trialSiteSurveyService.ImportGenerateAccountAndJoinTrialAsync(trialId, baseUrl, routeUrl, excelList.ToList()); return ResponseOutput.Ok(); + } @@ -1202,15 +1215,15 @@ namespace IRaCIS.Core.API.Controllers public enum UploadFileType { - DataUpload=1, + DataUpload = 1, - DataDownload=2, + DataDownload = 2, - EmailAttachment=3, + EmailAttachment = 3, - EmailBodyHtml=4, + EmailBodyHtml = 4, - Other=5 + Other = 5 } /// @@ -1225,17 +1238,17 @@ namespace IRaCIS.Core.API.Controllers IResponseOutput result = null; switch (fileType) - { + { case UploadFileType.DataUpload: - result= await SingleFileUploadAsync((fileName) => FileStoreHelper.GetSystemFileUploadPath(_hostEnvironment, StaticData.Folder.DataTemplate,fileName)); + result = await SingleFileUploadAsync((fileName) => FileStoreHelper.GetSystemFileUploadPath(_hostEnvironment, StaticData.Folder.DataTemplate, fileName)); break; case UploadFileType.DataDownload: - result= await SingleFileUploadAsync((fileName) => FileStoreHelper.GetSystemFileUploadPath(_hostEnvironment, StaticData.Folder.DataTemplate,fileName)); + result = await SingleFileUploadAsync((fileName) => FileStoreHelper.GetSystemFileUploadPath(_hostEnvironment, StaticData.Folder.DataTemplate, fileName)); break; case UploadFileType.EmailAttachment: - result = await SingleFileUploadAsync((fileName) => FileStoreHelper.GetSystemFileUploadPath(_hostEnvironment, StaticData.Folder.EmailTemplate, fileName)); + result = await SingleFileUploadAsync((fileName) => FileStoreHelper.GetSystemFileUploadPath(_hostEnvironment, StaticData.Folder.EmailTemplate, fileName)); break; @@ -1245,7 +1258,7 @@ namespace IRaCIS.Core.API.Controllers default: result = await SingleFileUploadAsync((fileName) => FileStoreHelper.GetOtherFileUploadPath(_hostEnvironment, StaticData.Folder.TempFile, fileName)); - + break; } From 62f8d5823f65ce274253cfb4cab81423af41b3b3 Mon Sep 17 00:00:00 2001 From: hang <872297557@qq.com> Date: Thu, 31 Aug 2023 17:00:01 +0800 Subject: [PATCH 03/12] =?UTF-8?q?=E8=B0=83=E7=A0=94=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- IRaCIS.Core.API/Controllers/UploadDownLoadController.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/IRaCIS.Core.API/Controllers/UploadDownLoadController.cs b/IRaCIS.Core.API/Controllers/UploadDownLoadController.cs index c8f7d9249..9e706e45f 100644 --- a/IRaCIS.Core.API/Controllers/UploadDownLoadController.cs +++ b/IRaCIS.Core.API/Controllers/UploadDownLoadController.cs @@ -1019,7 +1019,7 @@ namespace IRaCIS.Core.API.Controllers throw new BusinessValidationFailedException(StaticData.International("UploadDownLoad_InvalidCenters")); } - if (excelList.GroupBy(t => new { t.UserTypeStr, t.Email }).Any(g => g.Count() > 1)) + if (excelList.GroupBy(t => new {t.TrialSiteCode, t.UserTypeStr, t.Email }).Any(g => g.Count() > 1)) { // 鍚屼竴閭锛屽悓涓鐢ㄦ埛绫诲瀷锛屽彧鑳界敓鎴愪竴涓处鎴,璇锋牳鏌xcel鏁版嵁 From 6b1a6a81eb19735668d83dbe8664feb3c61268bd Mon Sep 17 00:00:00 2001 From: hang <872297557@qq.com> Date: Fri, 1 Sep 2023 10:35:13 +0800 Subject: [PATCH 04/12] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E9=82=AE=E4=BB=B6--034?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Service/Document/EmailSendService.cs | 102 ++++++++++++------ .../Common/EmailScenarioEnum.cs | 2 + 2 files changed, 71 insertions(+), 33 deletions(-) diff --git a/IRaCIS.Core.Application/Service/Document/EmailSendService.cs b/IRaCIS.Core.Application/Service/Document/EmailSendService.cs index 76263b36f..63226680a 100644 --- a/IRaCIS.Core.Application/Service/Document/EmailSendService.cs +++ b/IRaCIS.Core.Application/Service/Document/EmailSendService.cs @@ -1,5 +1,6 @@ 锘縰sing DocumentFormat.OpenXml.EMMA; using DocumentFormat.OpenXml.Spreadsheet; +using IRaCIS.Application.Contracts; using IRaCIS.Core.Application.Contracts; using IRaCIS.Core.Application.Helper; using IRaCIS.Core.Application.Service.Reading.Dto; @@ -39,6 +40,9 @@ namespace IRaCIS.Core.Application.Service private readonly IRepository _trialRepository; private readonly IOptionsMonitor _SystemEmailSendConfig; + + public readonly static string EmailNamePlaceholder="EmailNamePlaceholder"; + public EmailSendService(IRepository trialEmailNoticeConfigRepository, IRepository emailNoticeConfigRepository, IRepository trialRepository, IOptionsMonitor systemEmailSendConfig) { _trialEmailNoticeConfigRepository = trialEmailNoticeConfigRepository; @@ -80,31 +84,33 @@ namespace IRaCIS.Core.Application.Service }).FirstNotNullAsync(); - var resultStr = _userInfo.IsEn_Us ? (result == true ? "Yes" : "No") : (result == true ? "鏄" : "鍚"); + var isEn_us = _userInfo.IsEn_Us; + + var resultStr = isEn_us ? (result == true ? "Yes" : "No") : (result == true ? "鏄" : "鍚"); if (isEnrollment == true) { - Func topicAndHtmlFunc = trialEmailConfig => + Func topicAndHtmlFunc = trialEmailConfig => { - var topicStr = string.Format(_userInfo.IsEn_Us ? trialEmailConfig.EmailTopic : trialEmailConfig.EmailTopicCN, taskInfo.ResearchProgramNo, taskInfo.SubjectCode); + var topicStr = string.Format(isEn_us ? trialEmailConfig.EmailTopic : trialEmailConfig.EmailTopicCN, taskInfo.ResearchProgramNo, taskInfo.SubjectCode); - var htmlBodyStr = string.Format(_userInfo.IsEn_Us ? trialEmailConfig.EmailHtmlContent : trialEmailConfig.EmailHtmlContentCN, - _userInfo.UserName, taskInfo.ResearchProgramNo, taskInfo.SubjectCode, resultStr); - return (topicStr, htmlBodyStr,null); + var htmlBodyStr = string.Format(isEn_us ? trialEmailConfig.EmailHtmlContent : trialEmailConfig.EmailHtmlContentCN, + EmailNamePlaceholder, taskInfo.ResearchProgramNo, taskInfo.SubjectCode, resultStr); + return (topicStr, htmlBodyStr,isEn_us, null); }; await SendTrialEmailAsync(taskInfo.TrialId, businessScenarioEnum, topicAndHtmlFunc); } else { - Func topicAndHtmlFunc = trialEmailConfig => + Func topicAndHtmlFunc = trialEmailConfig => { - var topicStr = string.Format(_userInfo.IsEn_Us ? trialEmailConfig.EmailTopic : trialEmailConfig.EmailTopicCN, taskInfo.ResearchProgramNo, taskInfo.SubjectCode, taskInfo.VisitName); + var topicStr = string.Format(isEn_us ? trialEmailConfig.EmailTopic : trialEmailConfig.EmailTopicCN, taskInfo.ResearchProgramNo, taskInfo.SubjectCode, taskInfo.VisitName); - var htmlBodyStr = string.Format(_userInfo.IsEn_Us ? trialEmailConfig.EmailHtmlContent : trialEmailConfig.EmailHtmlContentCN, - _userInfo.UserName, taskInfo.ResearchProgramNo, taskInfo.SubjectCode, taskInfo.VisitName, resultStr); + var htmlBodyStr = string.Format(isEn_us ? trialEmailConfig.EmailHtmlContent : trialEmailConfig.EmailHtmlContentCN, + EmailNamePlaceholder, taskInfo.ResearchProgramNo, taskInfo.SubjectCode, taskInfo.VisitName, resultStr); - return (topicStr, htmlBodyStr,null); + return (topicStr, htmlBodyStr, isEn_us, null); }; await SendTrialEmailAsync(taskInfo.TrialId, businessScenarioEnum, topicAndHtmlFunc); @@ -120,6 +126,7 @@ namespace IRaCIS.Core.Application.Service /// public async Task SendTrialImageQCTaskEmailAsync(Guid trialId) { + var isEn_us = false; var trialInfo = await _repository.Where(t => t.Id == trialId).Select(t => new { t.ResearchProgramNo, t.ExperimentName, t.TrialCode, t.TrialStatusStr }).FirstNotNullAsync(); //鎵惧埌 璇ラ」鐩殑IQC 鐢ㄦ埛Id @@ -151,12 +158,12 @@ namespace IRaCIS.Core.Application.Service if (sendStat != null && (sendStat.ToBeClaimedCount > 0 || sendStat.ToBeReviewedCount > 0)) { - Func topicAndHtmlFunc = trialEmailConfig => + Func topicAndHtmlFunc = trialEmailConfig => { - var topicStr = string.Format(_userInfo.IsEn_Us ? trialEmailConfig.EmailTopic : trialEmailConfig.EmailTopicCN, trialInfo.ResearchProgramNo); - var htmlBodyStr = string.Format(_userInfo.IsEn_Us ? trialEmailConfig.EmailHtmlContent : trialEmailConfig.EmailHtmlContentCN, + var topicStr = string.Format(isEn_us ? trialEmailConfig.EmailTopic : trialEmailConfig.EmailTopicCN, trialInfo.ResearchProgramNo); + var htmlBodyStr = string.Format(isEn_us ? trialEmailConfig.EmailHtmlContent : trialEmailConfig.EmailHtmlContentCN, user.FullName, DateTime.Now, sendStat.ToBeClaimedCount, sendStat.ToBeReviewedCount, _SystemEmailSendConfig.CurrentValue.SiteUrl); - return (topicStr, htmlBodyStr, userId); + return (topicStr, htmlBodyStr, false,userId); }; await SendTrialEmailAsync(trialId, EmailBusinessScenario.QCTask, topicAndHtmlFunc); @@ -171,7 +178,8 @@ namespace IRaCIS.Core.Application.Service /// public async Task SendTrialQCQuestionEmailAsync(Guid trialId) { - var trialInfo = _repository.Where(t => t.Id == trialId).Select(t => new { t.ResearchProgramNo, t.ExperimentName, t.TrialCode, t.TrialStatusStr }).FirstOrDefault(); + var isEn_us = false; + var trialInfo = _repository.Where(t => t.Id == trialId).Select(t => new { t.ResearchProgramNo, t.ExperimentName, t.TrialCode, t.TrialStatusStr,t.DeclarationTypeEnumList }).FirstOrDefault(); //鎵惧埌 璇ラ」鐩殑IQC 鐢ㄦ埛Id var userList = await _repository.Where(t => t.TrialId == trialId).Where(t => t.User.UserTypeEnum == UserTypeEnum.IQC).Select(t => new { t.UserId, t.User.FullName }).ToListAsync(); @@ -201,13 +209,13 @@ namespace IRaCIS.Core.Application.Service if (sendStat != null && (sendStat.ToBeDealedCount > 0 || sendStat.ReUploadTobeDealedCount > 0)) { - Func topicAndHtmlFunc = trialEmailConfig => + Func topicAndHtmlFunc = trialEmailConfig => { - var topicStr = string.Format(_userInfo.IsEn_Us ? trialEmailConfig.EmailTopic : trialEmailConfig.EmailTopicCN, trialInfo.ResearchProgramNo); - var htmlBodyStr = string.Format(_userInfo.IsEn_Us ? trialEmailConfig.EmailHtmlContent : trialEmailConfig.EmailHtmlContentCN, + var topicStr = string.Format(isEn_us ? trialEmailConfig.EmailTopic : trialEmailConfig.EmailTopicCN, trialInfo.ResearchProgramNo); + var htmlBodyStr = string.Format(isEn_us ? trialEmailConfig.EmailHtmlContent : trialEmailConfig.EmailHtmlContentCN, user.FullName, DateTime.Now, sendStat.ToBeDealedCount- sendStat.ReUploadTobeDealedCount, sendStat.ReUploadTobeDealedCount, _SystemEmailSendConfig.CurrentValue.SiteUrl); - return (topicStr, htmlBodyStr, userId); + return (topicStr, htmlBodyStr, false, userId); }; await SendTrialEmailAsync(trialId, EmailBusinessScenario.QCQuestion, topicAndHtmlFunc); @@ -222,6 +230,8 @@ namespace IRaCIS.Core.Application.Service /// public async Task SendTrialImageQuestionAsync(Guid trialId) { + var isEn_us = false; + var trialInfo = _repository.Where(t => t.Id == trialId).Select(t => new { t.ResearchProgramNo, t.ExperimentName, t.TrialCode, t.TrialStatusStr }).FirstOrDefault(); //鎵惧埌 璇ラ」鐩殑CRC 鐢ㄦ埛Id @@ -249,12 +259,12 @@ namespace IRaCIS.Core.Application.Service if (sendStat != null && (sendStat.ToBeDealedCount > 0)) { - Func topicAndHtmlFunc = trialEmailConfig => + Func topicAndHtmlFunc = trialEmailConfig => { - var topicStr = string.Format(_userInfo.IsEn_Us ? trialEmailConfig.EmailTopic : trialEmailConfig.EmailTopicCN, trialInfo.ResearchProgramNo); - var htmlBodyStr = string.Format(_userInfo.IsEn_Us ? trialEmailConfig.EmailHtmlContent : trialEmailConfig.EmailHtmlContentCN, + var topicStr = string.Format(isEn_us ? trialEmailConfig.EmailTopic : trialEmailConfig.EmailTopicCN, trialInfo.ResearchProgramNo); + var htmlBodyStr = string.Format(isEn_us ? trialEmailConfig.EmailHtmlContent : trialEmailConfig.EmailHtmlContentCN, user.FullName, DateTime.Now, sendStat.ToBeDealedCount, _SystemEmailSendConfig.CurrentValue.SiteUrl); - return (topicStr, htmlBodyStr,userId); + return (topicStr, htmlBodyStr, isEn_us, userId); }; await SendTrialEmailAsync(trialId, EmailBusinessScenario.ImageQuestion, topicAndHtmlFunc); @@ -266,24 +276,47 @@ namespace IRaCIS.Core.Application.Service //涓村簥鏁版嵁璐ㄨ public async Task SendClinicalDataQuestionAsync(Guid visitTaskId, string content) { + + var isEn_us = _userInfo.IsEn_Us; + var info = await _repository.Where(t => t.Id == visitTaskId, ignoreQueryFilters: true).Select(t => new { t.TrialId, t.Trial.ResearchProgramNo, t.Trial.TrialCode, t.SourceSubjectVisit.VisitName, t.Subject.Code }).FirstOrDefaultAsync(); - Func topicAndHtmlFunc = trialEmailConfig => + Func topicAndHtmlFunc = trialEmailConfig => { - var topicStr = string.Format(_userInfo.IsEn_Us ? trialEmailConfig.EmailTopic : trialEmailConfig.EmailTopicCN, info.ResearchProgramNo,info.Code,info.VisitName); - var htmlBodyStr = string.Format(_userInfo.IsEn_Us ? trialEmailConfig.EmailHtmlContent : trialEmailConfig.EmailHtmlContentCN, - _userInfo.UserName, info.ResearchProgramNo, info.Code, info.VisitName,_userInfo.UserName,content, _SystemEmailSendConfig.CurrentValue.SiteUrl); - return (topicStr, htmlBodyStr,null); + var topicStr = string.Format(isEn_us ? trialEmailConfig.EmailTopic : trialEmailConfig.EmailTopicCN, info.ResearchProgramNo,info.Code,info.VisitName); + var htmlBodyStr = string.Format(isEn_us ? trialEmailConfig.EmailHtmlContent : trialEmailConfig.EmailHtmlContentCN, + EmailNamePlaceholder, info.ResearchProgramNo, info.Code, info.VisitName,_userInfo.UserName,content, _SystemEmailSendConfig.CurrentValue.SiteUrl); + return (topicStr, htmlBodyStr, isEn_us, null); }; await SendTrialEmailAsync(info.TrialId, EmailBusinessScenario.ClinicalDataQuestion, topicAndHtmlFunc); } + public async Task SendPIAuditResultAsync(Guid visitTaskId) + { + var isEn_us = _userInfo.IsEn_Us; + + var info = await _repository.Where(t => t.Id == visitTaskId, ignoreQueryFilters: true).Select(t => new { t.TrialId, t.Trial.ResearchProgramNo, t.Trial.TrialCode, t.SourceSubjectVisit.VisitName, t.Subject.Code }).FirstOrDefaultAsync(); - public async Task SendTrialEmailAsync(Guid trialId, EmailBusinessScenario businessScenario, Func topicAndHtmlFunc, Guid? trialReadingCriterionId = null, Guid? subjectId = null) + var piResult=string.Empty; + + Func topicAndHtmlFunc = trialEmailConfig => + { + var topicStr = string.Format(isEn_us ? trialEmailConfig.EmailTopic : trialEmailConfig.EmailTopicCN, info.ResearchProgramNo, info.Code, info.VisitName); + var htmlBodyStr = string.Format(isEn_us ? trialEmailConfig.EmailHtmlContent : trialEmailConfig.EmailHtmlContentCN, + EmailNamePlaceholder, info.ResearchProgramNo, info.Code, info.VisitName, _userInfo.UserName, piResult, _SystemEmailSendConfig.CurrentValue.SiteUrl); + return (topicStr, htmlBodyStr, isEn_us, null); + }; + + await SendTrialEmailAsync(info.TrialId, EmailBusinessScenario.PIAuditResutl, topicAndHtmlFunc); + } + + + + public async Task SendTrialEmailAsync(Guid trialId, EmailBusinessScenario businessScenario, Func topicAndHtmlFunc, Guid? trialReadingCriterionId = null, Guid? subjectId = null) { //鎵惧埌閰嶇疆 var trialEmailConfig = await _trialEmailNoticeConfigRepository.Where(t => t.TrialId == trialId && t.TrialReadingCriterionId == trialReadingCriterionId && t.BusinessScenarioEnum == businessScenario, ignoreQueryFilters: true) @@ -294,12 +327,11 @@ namespace IRaCIS.Core.Application.Service { return; } - else { var sendEmailConfig = new SMTPEmailConfig(); - var (topicStr, htmlBodyStr, onlyToUserId) = topicAndHtmlFunc(trialEmailConfig); + var (topicStr, htmlBodyStr, isEn_us,onlyToUserId) = topicAndHtmlFunc(trialEmailConfig); sendEmailConfig.TopicDescription = topicStr; @@ -335,6 +367,10 @@ namespace IRaCIS.Core.Application.Service { toUserList= toUserList.Where(t=>t.UserId == onlyToUserId).ToList(); } + else + { + htmlBodyStr = htmlBodyStr.Replace(EmailNamePlaceholder, string.Join(isEn_us ? ", " : "銆", toUserList.Select(t => t.FullName).ToList())); + } if (toUserList.Count() == 0) { @@ -348,7 +384,7 @@ namespace IRaCIS.Core.Application.Service sendEmailConfig.FromEmailAddress = new MimeKit.MailboxAddress(trialEmailConfig.FromName, trialEmailConfig.FromEmail); sendEmailConfig.AuthorizationCode = trialEmailConfig.AuthorizationCode; - sendEmailConfig.UserName = trialEmailConfig.FromEmail; + sendEmailConfig.UserName = trialEmailConfig.FromName; sendEmailConfig.Host = trialEmailConfig.SMTPServerAddress; sendEmailConfig.Port = trialEmailConfig.SMTPServerPort; diff --git a/IRaCIS.Core.Domain.Share/Common/EmailScenarioEnum.cs b/IRaCIS.Core.Domain.Share/Common/EmailScenarioEnum.cs index 88c6db1f5..b85e862bc 100644 --- a/IRaCIS.Core.Domain.Share/Common/EmailScenarioEnum.cs +++ b/IRaCIS.Core.Domain.Share/Common/EmailScenarioEnum.cs @@ -57,6 +57,8 @@ namespace IRaCIS.Core.Domain.Share ImageQuestion = 7, ClinicalDataQuestion = 8, + + PIAuditResutl=9 } From 4ba2aa4769764de668bc9643475ea7df3c728fac Mon Sep 17 00:00:00 2001 From: hang <872297557@qq.com> Date: Fri, 1 Sep 2023 11:54:52 +0800 Subject: [PATCH 05/12] =?UTF-8?q?=E4=BF=AE=E6=94=B9PI=20=E5=AE=A1=E6=A0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Allocation/DTO/VisitTaskViewModel.cs | 12 +++++-- .../Service/Allocation/VisitTaskService.cs | 2 +- .../Service/Allocation/_MapConfig.cs | 6 ++-- .../Service/Document/EmailSendService.cs | 4 ++- .../Triggers/VisitTaskIAfterSignTrigger.cs | 31 +++++++++++++------ 5 files changed, 40 insertions(+), 15 deletions(-) diff --git a/IRaCIS.Core.Application/Service/Allocation/DTO/VisitTaskViewModel.cs b/IRaCIS.Core.Application/Service/Allocation/DTO/VisitTaskViewModel.cs index d013c1460..07b84d660 100644 --- a/IRaCIS.Core.Application/Service/Allocation/DTO/VisitTaskViewModel.cs +++ b/IRaCIS.Core.Application/Service/Allocation/DTO/VisitTaskViewModel.cs @@ -200,8 +200,16 @@ namespace IRaCIS.Core.Application.ViewModel //浠诲姟鏉ユ簮璁胯Id 鏂逛究鍥炴洿璁胯璇荤墖鐘舵 public Guid? SourceSubjectVisitId { get; set; } public Guid? SouceReadModuleId { get; set; } - + + public List PIReadingResultList { get; set; } + } + + public class PIReadingResult + { + public string QuestionName { get; set; } + + public string Answer { get; set; } } @@ -478,7 +486,7 @@ namespace IRaCIS.Core.Application.ViewModel public Guid CreateUserId { get; set; } - public string CreateUserName { get; set; } + public string CreateUserName { get; set; } public DateTime CreateTime { get; set; } diff --git a/IRaCIS.Core.Application/Service/Allocation/VisitTaskService.cs b/IRaCIS.Core.Application/Service/Allocation/VisitTaskService.cs index b690812ce..8f21aa567 100644 --- a/IRaCIS.Core.Application/Service/Allocation/VisitTaskService.cs +++ b/IRaCIS.Core.Application/Service/Allocation/VisitTaskService.cs @@ -362,7 +362,7 @@ namespace IRaCIS.Core.Application.Service.Allocation public async Task>> GetReadingTaskList(VisitTaskQuery queryVisitTask) { var visitTaskQueryable = GetReadingTaskQueryable(queryVisitTask) - .ProjectTo(_mapper.ConfigurationProvider); + .ProjectTo(_mapper.ConfigurationProvider,new { isEn_Us =_userInfo.IsEn_Us }); var defalutSortArray = new string[] { nameof(VisitTask.IsUrgent) + " desc", nameof(VisitTask.SubjectId), nameof(VisitTask.VisitTaskNum) }; diff --git a/IRaCIS.Core.Application/Service/Allocation/_MapConfig.cs b/IRaCIS.Core.Application/Service/Allocation/_MapConfig.cs index 49a81e3f2..6ea9d691b 100644 --- a/IRaCIS.Core.Application/Service/Allocation/_MapConfig.cs +++ b/IRaCIS.Core.Application/Service/Allocation/_MapConfig.cs @@ -74,14 +74,16 @@ namespace IRaCIS.Core.Application.Service .ForMember(o => o.PDState, t => t.MapFrom(u => u.SourceSubjectVisit.PDState)) ; - + var isEn_Us = true; CreateMap().IncludeBase() .ForMember(o => o.HistoryReadingDoctorUserList, t => t.MapFrom(u => u.JudgeVisitList)); - CreateMap().IncludeBase(); + CreateMap().IncludeBase() + .ForMember(t=>t.PIReadingResultList,u=>u.MapFrom(c=>c.ReadingTaskQuestionAnswerList + .Where(t=>t.ReadingQuestionTrial.IsJudgeQuestion==true ).Select(d=>new PIReadingResult() { QuestionName= isEn_Us?d.ReadingQuestionTrial.QuestionEnName:d.ReadingQuestionTrial.QuestionName,Answer=d.Answer}))); CreateMap().IncludeBase() .ForMember(o => o.FirstAuditUserName, t => t.MapFrom(u => u.FirstAuditUser.UserName)) diff --git a/IRaCIS.Core.Application/Service/Document/EmailSendService.cs b/IRaCIS.Core.Application/Service/Document/EmailSendService.cs index 63226680a..d92aeb43d 100644 --- a/IRaCIS.Core.Application/Service/Document/EmailSendService.cs +++ b/IRaCIS.Core.Application/Service/Document/EmailSendService.cs @@ -29,6 +29,7 @@ namespace IRaCIS.Core.Application.Service Task SendTrialQCQuestionEmailAsync(Guid trialId); Task SendTrialImageQuestionAsync(Guid trialId); + Task SendPIAuditResultAsync(Guid visitTaskId); } public class EmailSendService : BaseService, IEmailSendService @@ -299,8 +300,9 @@ namespace IRaCIS.Core.Application.Service var isEn_us = _userInfo.IsEn_Us; var info = await _repository.Where(t => t.Id == visitTaskId, ignoreQueryFilters: true).Select(t => new { t.TrialId, t.Trial.ResearchProgramNo, t.Trial.TrialCode, t.SourceSubjectVisit.VisitName, t.Subject.Code }).FirstOrDefaultAsync(); + var answerList= await _repository.Where(t => t.Id == visitTaskId, ignoreQueryFilters: true).SelectMany(t=>t.ReadingTaskQuestionAnswerList).Select(t=>new { QuestionName= isEn_us? t.ReadingQuestionTrial.QuestionEnName:t.ReadingQuestionTrial.QuestionName,t.Answer}).ToListAsync(); - + //var template = "
Role: {2}
"; var piResult=string.Empty; Func topicAndHtmlFunc = trialEmailConfig => diff --git a/IRaCIS.Core.Application/Triggers/VisitTaskIAfterSignTrigger.cs b/IRaCIS.Core.Application/Triggers/VisitTaskIAfterSignTrigger.cs index 95f5e3954..ab1171212 100644 --- a/IRaCIS.Core.Application/Triggers/VisitTaskIAfterSignTrigger.cs +++ b/IRaCIS.Core.Application/Triggers/VisitTaskIAfterSignTrigger.cs @@ -10,33 +10,33 @@ using System.Linq.Expressions; namespace IRaCIS.Core.Application.Triggers { - public class VisitTaskIAfterSignTrigger : IAfterSaveTrigger + public class VisitTaskIAfterSignTrigger : IAfterSaveTrigger,IBeforeSaveTrigger { private readonly IRepository _visitTaskRepository; private readonly IRepository _subjectRepository; + private readonly IUserInfo _userInfo; + private readonly IEmailSendService _emailSendService; + - - public VisitTaskIAfterSignTrigger(IRepository visitTaskRepository, IRepository subjectRepository) + public VisitTaskIAfterSignTrigger(IRepository visitTaskRepository, IRepository subjectRepository, IUserInfo userInfo, IEmailSendService emailSendService) { _visitTaskRepository = visitTaskRepository; _subjectRepository = subjectRepository; + _userInfo = userInfo; + + _emailSendService = emailSendService; } - //娣诲姞浠诲姟鐨勬椂鍊 濡傛灉闇瑕佺鍚 骞朵笖宸茬粡绛惧悕浜 public async Task AfterSave(ITriggerContext context, CancellationToken cancellationToken) { var visitTask = context.Entity; - if (visitTask.SignTime != null && visitTask.ReadingTaskState == ReadingTaskState.HaveSigned - - //&& _subjectRepository.Where(t=>t.Id==visitTask.SubjectId).SelectMany(c=>c.SubjectVisitList) - //.Any(t=>t.Id==visitTask.SourceSubjectVisitId && t.IsBaseLine) - ) + if (visitTask.SignTime != null && visitTask.ReadingTaskState == ReadingTaskState.HaveSigned ) { //浠诲姟闃呯墖瀹屾垚 鑷姩閲婃斁 await _visitTaskRepository.BatchUpdateNoTrackingAsync(t => t.SubjectId == visitTask.SubjectId && t.TrialReadingCriterionId==visitTask.TrialReadingCriterionId , t=>new VisitTask() { SubjectCriterionClaimUserId=null}); @@ -45,6 +45,19 @@ namespace IRaCIS.Core.Application.Triggers } + public async Task BeforeSave(ITriggerContext context, CancellationToken cancellationToken) + { + var visitTask = context.Entity; + if (_userInfo.UserTypeEnumInt == (int)UserTypeEnum.PI) + { + visitTask.PIAuditState = PIAuditState.PIAgree; + } + + if (context.ChangeType == ChangeType.Modified && visitTask.PIAuditState!=context.UnmodifiedEntity.PIAuditState && visitTask.PIAuditState==PIAuditState.PIAgree) + { + await _emailSendService.SendPIAuditResultAsync(visitTask.Id); + } + } } } \ No newline at end of file From 13fbf36de04a9096ee790276d18fa22bef6869af Mon Sep 17 00:00:00 2001 From: hang <872297557@qq.com> Date: Fri, 1 Sep 2023 14:00:54 +0800 Subject: [PATCH 06/12] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=9F=A5=E8=AF=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Service/Allocation/DTO/VisitTaskViewModel.cs | 2 +- .../Service/Allocation/VisitTaskService.cs | 5 +++++ IRaCIS.Core.Application/Service/Allocation/_MapConfig.cs | 2 +- .../Service/Document/EmailSendService.cs | 6 ++++-- .../Service/TrialSiteUser/DTO/TrialConfigDTO.cs | 2 +- 5 files changed, 12 insertions(+), 5 deletions(-) diff --git a/IRaCIS.Core.Application/Service/Allocation/DTO/VisitTaskViewModel.cs b/IRaCIS.Core.Application/Service/Allocation/DTO/VisitTaskViewModel.cs index 07b84d660..74f089551 100644 --- a/IRaCIS.Core.Application/Service/Allocation/DTO/VisitTaskViewModel.cs +++ b/IRaCIS.Core.Application/Service/Allocation/DTO/VisitTaskViewModel.cs @@ -207,7 +207,7 @@ namespace IRaCIS.Core.Application.ViewModel public class PIReadingResult { - public string QuestionName { get; set; } + public Guid QuestionId { get; set; } public string Answer { get; set; } } diff --git a/IRaCIS.Core.Application/Service/Allocation/VisitTaskService.cs b/IRaCIS.Core.Application/Service/Allocation/VisitTaskService.cs index 8f21aa567..932f0edf0 100644 --- a/IRaCIS.Core.Application/Service/Allocation/VisitTaskService.cs +++ b/IRaCIS.Core.Application/Service/Allocation/VisitTaskService.cs @@ -370,6 +370,11 @@ namespace IRaCIS.Core.Application.Service.Allocation var trialTaskConfig = _trialRepository.Where(t => t.Id == queryVisitTask.TrialId).ProjectTo(_mapper.ConfigurationProvider).FirstOrDefault(); + var questionList = _trialReadingCriterionRepository.Where(t => t.TrialId == queryVisitTask.TrialId && t.Id == queryVisitTask.TrialReadingCriterionId).SelectMany(d => d.ReadingQuestionTrialList) + .Where(t => t.IsJudgeQuestion == true) + .Select(t => new { QuestionId = t.Id, QuestionName = _userInfo.IsEn_Us ? t.QuestionEnName : t.QuestionName }).ToList(); + + trialTaskConfig!.OtherObj = questionList; return ResponseOutput.Ok(pageList, trialTaskConfig); } diff --git a/IRaCIS.Core.Application/Service/Allocation/_MapConfig.cs b/IRaCIS.Core.Application/Service/Allocation/_MapConfig.cs index 6ea9d691b..7e60cc7ac 100644 --- a/IRaCIS.Core.Application/Service/Allocation/_MapConfig.cs +++ b/IRaCIS.Core.Application/Service/Allocation/_MapConfig.cs @@ -83,7 +83,7 @@ namespace IRaCIS.Core.Application.Service CreateMap().IncludeBase() .ForMember(t=>t.PIReadingResultList,u=>u.MapFrom(c=>c.ReadingTaskQuestionAnswerList - .Where(t=>t.ReadingQuestionTrial.IsJudgeQuestion==true ).Select(d=>new PIReadingResult() { QuestionName= isEn_Us?d.ReadingQuestionTrial.QuestionEnName:d.ReadingQuestionTrial.QuestionName,Answer=d.Answer}))); + .Where(t=>t.ReadingQuestionTrial.IsJudgeQuestion==true ).Select(d=>new PIReadingResult() { QuestionId= d.ReadingQuestionTrialId,Answer=d.Answer}))); CreateMap().IncludeBase() .ForMember(o => o.FirstAuditUserName, t => t.MapFrom(u => u.FirstAuditUser.UserName)) diff --git a/IRaCIS.Core.Application/Service/Document/EmailSendService.cs b/IRaCIS.Core.Application/Service/Document/EmailSendService.cs index d92aeb43d..66c16aee1 100644 --- a/IRaCIS.Core.Application/Service/Document/EmailSendService.cs +++ b/IRaCIS.Core.Application/Service/Document/EmailSendService.cs @@ -302,8 +302,10 @@ namespace IRaCIS.Core.Application.Service var info = await _repository.Where(t => t.Id == visitTaskId, ignoreQueryFilters: true).Select(t => new { t.TrialId, t.Trial.ResearchProgramNo, t.Trial.TrialCode, t.SourceSubjectVisit.VisitName, t.Subject.Code }).FirstOrDefaultAsync(); var answerList= await _repository.Where(t => t.Id == visitTaskId, ignoreQueryFilters: true).SelectMany(t=>t.ReadingTaskQuestionAnswerList).Select(t=>new { QuestionName= isEn_us? t.ReadingQuestionTrial.QuestionEnName:t.ReadingQuestionTrial.QuestionName,t.Answer}).ToListAsync(); - //var template = "
Role: {2}
"; - var piResult=string.Empty; + var template = "
{0}: {1}
"; + + + var piResult= string.Join(' ', answerList.Select(t => string.Format(template, t.QuestionName, t.Answer))) ; Func topicAndHtmlFunc = trialEmailConfig => { diff --git a/IRaCIS.Core.Application/Service/TrialSiteUser/DTO/TrialConfigDTO.cs b/IRaCIS.Core.Application/Service/TrialSiteUser/DTO/TrialConfigDTO.cs index ba9cedd59..3bdb1e9c5 100644 --- a/IRaCIS.Core.Application/Service/TrialSiteUser/DTO/TrialConfigDTO.cs +++ b/IRaCIS.Core.Application/Service/TrialSiteUser/DTO/TrialConfigDTO.cs @@ -333,7 +333,7 @@ namespace IRaCIS.Core.Application.Contracts public UserTypeEnum? PDProgressDefaultUserType { get; set; } - + public object OtherObj { get; set; } } public class TrialStateChangeDTO From a42986dcab0f3deea94e3037a17552a821ad2c79 Mon Sep 17 00:00:00 2001 From: hang <872297557@qq.com> Date: Fri, 1 Sep 2023 14:10:45 +0800 Subject: [PATCH 07/12] =?UTF-8?q?=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Service/Allocation/VisitTaskService.cs | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/IRaCIS.Core.Application/Service/Allocation/VisitTaskService.cs b/IRaCIS.Core.Application/Service/Allocation/VisitTaskService.cs index 932f0edf0..0ead5142b 100644 --- a/IRaCIS.Core.Application/Service/Allocation/VisitTaskService.cs +++ b/IRaCIS.Core.Application/Service/Allocation/VisitTaskService.cs @@ -44,6 +44,7 @@ namespace IRaCIS.Core.Application.Service.Allocation private readonly IRepository _visitTaskReReadingRepository; private readonly IRepository _taskMedicalReviewRepository; private readonly IRepository _readingTaskQuestionAnswerRepository; + private readonly IRepository _readingQuestionTrialRepository; private readonly IRepository _readingClinicalDataReposiotry; @@ -59,7 +60,8 @@ namespace IRaCIS.Core.Application.Service.Allocation IRepository readingTaskQuestionAnswerRepository , IRepository trialReadingCriterionRepository, IRepository readingClinicalDataReposiotry, - IRepository PIAuditRepository + IRepository PIAuditRepository, + IRepository teadingQuestionTrialRepository ) { _PIAuditRepository = PIAuditRepository; @@ -73,7 +75,7 @@ namespace IRaCIS.Core.Application.Service.Allocation _taskMedicalReviewRepository = taskMedicalReviewRepository; _readingTaskQuestionAnswerRepository = readingTaskQuestionAnswerRepository; _trialReadingCriterionRepository = trialReadingCriterionRepository; - + _readingQuestionTrialRepository = _readingQuestionTrialRepository; } /// @@ -232,6 +234,11 @@ namespace IRaCIS.Core.Application.Service.Allocation var trialTaskConfig = _trialRepository.Where(t => t.Id == queryVisitTask.TrialId).ProjectTo(_mapper.ConfigurationProvider).FirstOrDefault(); + var questionList = _readingQuestionTrialRepository.Where(t => t.TrialId == queryVisitTask.TrialId && t.Id == queryVisitTask.TrialReadingCriterionId) + .Where(t => t.IsJudgeQuestion == true) + .Select(t => new { QuestionId = t.Id, QuestionName = _userInfo.IsEn_Us ? t.QuestionEnName : t.QuestionName }).ToList(); + + trialTaskConfig!.OtherObj = questionList; return ResponseOutput.Ok(pageList, trialTaskConfig); } @@ -370,7 +377,7 @@ namespace IRaCIS.Core.Application.Service.Allocation var trialTaskConfig = _trialRepository.Where(t => t.Id == queryVisitTask.TrialId).ProjectTo(_mapper.ConfigurationProvider).FirstOrDefault(); - var questionList = _trialReadingCriterionRepository.Where(t => t.TrialId == queryVisitTask.TrialId && t.Id == queryVisitTask.TrialReadingCriterionId).SelectMany(d => d.ReadingQuestionTrialList) + var questionList = _readingQuestionTrialRepository.Where(t => t.TrialId == queryVisitTask.TrialId && t.Id == queryVisitTask.TrialReadingCriterionId) .Where(t => t.IsJudgeQuestion == true) .Select(t => new { QuestionId = t.Id, QuestionName = _userInfo.IsEn_Us ? t.QuestionEnName : t.QuestionName }).ToList(); From 83d6859347c0e91f6dbc8ec7e5b2640884fc2a86 Mon Sep 17 00:00:00 2001 From: hang <872297557@qq.com> Date: Fri, 1 Sep 2023 14:19:39 +0800 Subject: [PATCH 08/12] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Service/Allocation/VisitTaskService.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/IRaCIS.Core.Application/Service/Allocation/VisitTaskService.cs b/IRaCIS.Core.Application/Service/Allocation/VisitTaskService.cs index 0ead5142b..36e9ef449 100644 --- a/IRaCIS.Core.Application/Service/Allocation/VisitTaskService.cs +++ b/IRaCIS.Core.Application/Service/Allocation/VisitTaskService.cs @@ -61,7 +61,7 @@ namespace IRaCIS.Core.Application.Service.Allocation , IRepository trialReadingCriterionRepository, IRepository readingClinicalDataReposiotry, IRepository PIAuditRepository, - IRepository teadingQuestionTrialRepository + IRepository readingQuestionTrialRepository ) { _PIAuditRepository = PIAuditRepository; @@ -75,7 +75,7 @@ namespace IRaCIS.Core.Application.Service.Allocation _taskMedicalReviewRepository = taskMedicalReviewRepository; _readingTaskQuestionAnswerRepository = readingTaskQuestionAnswerRepository; _trialReadingCriterionRepository = trialReadingCriterionRepository; - _readingQuestionTrialRepository = _readingQuestionTrialRepository; + _readingQuestionTrialRepository = readingQuestionTrialRepository; } /// From c7571570e96bf67198121c46c5537afc65805145 Mon Sep 17 00:00:00 2001 From: hang <872297557@qq.com> Date: Fri, 1 Sep 2023 14:23:16 +0800 Subject: [PATCH 09/12] x --- IRaCIS.Core.Application/Service/Allocation/VisitTaskService.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/IRaCIS.Core.Application/Service/Allocation/VisitTaskService.cs b/IRaCIS.Core.Application/Service/Allocation/VisitTaskService.cs index 36e9ef449..a238a072d 100644 --- a/IRaCIS.Core.Application/Service/Allocation/VisitTaskService.cs +++ b/IRaCIS.Core.Application/Service/Allocation/VisitTaskService.cs @@ -234,7 +234,7 @@ namespace IRaCIS.Core.Application.Service.Allocation var trialTaskConfig = _trialRepository.Where(t => t.Id == queryVisitTask.TrialId).ProjectTo(_mapper.ConfigurationProvider).FirstOrDefault(); - var questionList = _readingQuestionTrialRepository.Where(t => t.TrialId == queryVisitTask.TrialId && t.Id == queryVisitTask.TrialReadingCriterionId) + var questionList = _readingQuestionTrialRepository.Where(t => t.TrialId == queryVisitTask.TrialId && t.ReadingQuestionCriterionTrialId == queryVisitTask.TrialReadingCriterionId) .Where(t => t.IsJudgeQuestion == true) .Select(t => new { QuestionId = t.Id, QuestionName = _userInfo.IsEn_Us ? t.QuestionEnName : t.QuestionName }).ToList(); From 47277086ac5e887c3ea5cf51c7d254e1bd6ade31 Mon Sep 17 00:00:00 2001 From: hang <872297557@qq.com> Date: Fri, 1 Sep 2023 14:29:54 +0800 Subject: [PATCH 10/12] xx --- .../Service/Allocation/VisitTaskService.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/IRaCIS.Core.Application/Service/Allocation/VisitTaskService.cs b/IRaCIS.Core.Application/Service/Allocation/VisitTaskService.cs index a238a072d..b2c80894a 100644 --- a/IRaCIS.Core.Application/Service/Allocation/VisitTaskService.cs +++ b/IRaCIS.Core.Application/Service/Allocation/VisitTaskService.cs @@ -236,7 +236,7 @@ namespace IRaCIS.Core.Application.Service.Allocation var questionList = _readingQuestionTrialRepository.Where(t => t.TrialId == queryVisitTask.TrialId && t.ReadingQuestionCriterionTrialId == queryVisitTask.TrialReadingCriterionId) .Where(t => t.IsJudgeQuestion == true) - .Select(t => new { QuestionId = t.Id, QuestionName = _userInfo.IsEn_Us ? t.QuestionEnName : t.QuestionName }).ToList(); + .Select(t => new { QuestionId = t.Id, QuestionName = _userInfo.IsEn_Us ? t.QuestionEnName : t.QuestionName ,t.DictionaryCode}).ToList(); trialTaskConfig!.OtherObj = questionList; return ResponseOutput.Ok(pageList, trialTaskConfig); @@ -379,7 +379,7 @@ namespace IRaCIS.Core.Application.Service.Allocation var questionList = _readingQuestionTrialRepository.Where(t => t.TrialId == queryVisitTask.TrialId && t.Id == queryVisitTask.TrialReadingCriterionId) .Where(t => t.IsJudgeQuestion == true) - .Select(t => new { QuestionId = t.Id, QuestionName = _userInfo.IsEn_Us ? t.QuestionEnName : t.QuestionName }).ToList(); + .Select(t => new { QuestionId = t.Id, QuestionName = _userInfo.IsEn_Us ? t.QuestionEnName : t.QuestionName, t.DictionaryCode }).ToList(); trialTaskConfig!.OtherObj = questionList; return ResponseOutput.Ok(pageList, trialTaskConfig); From a60e00159d0e4100347bb99ac2eaa72fe4edb34a Mon Sep 17 00:00:00 2001 From: hang <872297557@qq.com> Date: Fri, 1 Sep 2023 15:16:25 +0800 Subject: [PATCH 11/12] =?UTF-8?q?=E9=82=AE=E4=BB=B6=E5=8F=91=E9=80=81?= =?UTF-8?q?=E7=BF=BB=E8=AF=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/UploadDownLoadController.cs | 2 ++ .../Service/Document/EmailSendService.cs | 20 ++++++++++++++++--- 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/IRaCIS.Core.API/Controllers/UploadDownLoadController.cs b/IRaCIS.Core.API/Controllers/UploadDownLoadController.cs index 9e706e45f..d8028d2b1 100644 --- a/IRaCIS.Core.API/Controllers/UploadDownLoadController.cs +++ b/IRaCIS.Core.API/Controllers/UploadDownLoadController.cs @@ -997,6 +997,8 @@ namespace IRaCIS.Core.API.Controllers (serverFilePath, relativePath) = FileStoreHelper.GetOtherFileUploadPath(_hostEnvironment, StaticData.Folder.TempFile, fileName); + //FileStoreHelper.UploadOOS(serverFilePath, "testc/test", true); + return serverFilePath; }); diff --git a/IRaCIS.Core.Application/Service/Document/EmailSendService.cs b/IRaCIS.Core.Application/Service/Document/EmailSendService.cs index 66c16aee1..1f4aa82e5 100644 --- a/IRaCIS.Core.Application/Service/Document/EmailSendService.cs +++ b/IRaCIS.Core.Application/Service/Document/EmailSendService.cs @@ -1,6 +1,7 @@ 锘縰sing DocumentFormat.OpenXml.EMMA; using DocumentFormat.OpenXml.Spreadsheet; using IRaCIS.Application.Contracts; +using IRaCIS.Application.Interfaces; using IRaCIS.Core.Application.Contracts; using IRaCIS.Core.Application.Helper; using IRaCIS.Core.Application.Service.Reading.Dto; @@ -40,16 +41,18 @@ namespace IRaCIS.Core.Application.Service private readonly IRepository _trialRepository; + private readonly IDictionaryService _dictionaryService; private readonly IOptionsMonitor _SystemEmailSendConfig; public readonly static string EmailNamePlaceholder="EmailNamePlaceholder"; - public EmailSendService(IRepository trialEmailNoticeConfigRepository, IRepository emailNoticeConfigRepository, IRepository trialRepository, IOptionsMonitor systemEmailSendConfig) + public EmailSendService(IRepository trialEmailNoticeConfigRepository, IRepository emailNoticeConfigRepository, IRepository trialRepository, IOptionsMonitor systemEmailSendConfig, IDictionaryService dictionaryService) { _trialEmailNoticeConfigRepository = trialEmailNoticeConfigRepository; _emailNoticeConfigRepository = emailNoticeConfigRepository; _trialRepository = trialRepository; _SystemEmailSendConfig = systemEmailSendConfig; + _dictionaryService = dictionaryService; } //鍏ョ粍纭/PD纭 @@ -300,12 +303,23 @@ namespace IRaCIS.Core.Application.Service var isEn_us = _userInfo.IsEn_Us; var info = await _repository.Where(t => t.Id == visitTaskId, ignoreQueryFilters: true).Select(t => new { t.TrialId, t.Trial.ResearchProgramNo, t.Trial.TrialCode, t.SourceSubjectVisit.VisitName, t.Subject.Code }).FirstOrDefaultAsync(); - var answerList= await _repository.Where(t => t.Id == visitTaskId, ignoreQueryFilters: true).SelectMany(t=>t.ReadingTaskQuestionAnswerList).Select(t=>new { QuestionName= isEn_us? t.ReadingQuestionTrial.QuestionEnName:t.ReadingQuestionTrial.QuestionName,t.Answer}).ToListAsync(); + var answerList= await _repository.Where(t => t.Id == visitTaskId, ignoreQueryFilters: true).SelectMany(t=>t.ReadingTaskQuestionAnswerList).Select(t=>new { QuestionName= isEn_us? t.ReadingQuestionTrial.QuestionEnName:t.ReadingQuestionTrial.QuestionName, t.ReadingQuestionTrial.DictionaryCode, t.Answer}).ToListAsync(); var template = "
{0}: {1}
"; + var needTranslateDicNameList=answerList.Where(t=>!string.IsNullOrEmpty(t.DictionaryCode)).Select(t=>t.DictionaryCode).ToList(); - var piResult= string.Join(' ', answerList.Select(t => string.Format(template, t.QuestionName, t.Answer))) ; + var translateDataList = await _dictionaryService.GetBasicDataSelect(needTranslateDicNameList.ToArray()); + + + Func transFunc = (bool isNeedTranslate, string dicCode, string answer) => + { + var result = translateDataList[dicCode].Where(t => t.Code.ToLower() == answer.ToLower()).Select(t => isEn_us ? t.Value : t.ValueCN).FirstOrDefault(); + + return result; + }; + + var piResult= string.Join(' ', answerList.Select(t => string.Format(template, t.QuestionName, transFunc(!string.IsNullOrEmpty(t.DictionaryCode),t.DictionaryCode,t.Answer ) ))) ; Func topicAndHtmlFunc = trialEmailConfig => { From 5956d32c366798a8240b77c5de55912147ed19c3 Mon Sep 17 00:00:00 2001 From: hang <872297557@qq.com> Date: Fri, 1 Sep 2023 15:45:20 +0800 Subject: [PATCH 12/12] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E4=B8=AD=E5=BF=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Service/Institution/DTO/SiteModel.cs | 2 +- .../Service/Institution/SiteService.cs | 1 + IRaCIS.Core.Domain/Institution/Site.cs | 8 ++++---- 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/IRaCIS.Core.Application/Service/Institution/DTO/SiteModel.cs b/IRaCIS.Core.Application/Service/Institution/DTO/SiteModel.cs index 43f027200..0675dad98 100644 --- a/IRaCIS.Core.Application/Service/Institution/DTO/SiteModel.cs +++ b/IRaCIS.Core.Application/Service/Institution/DTO/SiteModel.cs @@ -12,7 +12,7 @@ namespace IRaCIS.Application.Contracts { public Guid? Id { get; set; } public string SiteName { get; set; } = String.Empty; - + public string SiteNameCN { get; set; } = String.Empty; public int Code { get; set; } public string SiteCode { get; set; } = String.Empty; diff --git a/IRaCIS.Core.Application/Service/Institution/SiteService.cs b/IRaCIS.Core.Application/Service/Institution/SiteService.cs index 2f3cc4391..3ccc8139f 100644 --- a/IRaCIS.Core.Application/Service/Institution/SiteService.cs +++ b/IRaCIS.Core.Application/Service/Institution/SiteService.cs @@ -31,6 +31,7 @@ namespace IRaCIS.Application.Services .WhereIf(!string.IsNullOrWhiteSpace(searchModel.AliasName), t => t.AliasName.Contains(searchModel.AliasName)) .WhereIf(!string.IsNullOrWhiteSpace(searchModel.City), t => t.City.Contains(searchModel.City)) .WhereIf(!string.IsNullOrWhiteSpace(searchModel.Country), t => t.Country.Contains(searchModel.Country)) + .WhereIf(!string.IsNullOrWhiteSpace(searchModel.Province), t => t.Country.Contains(searchModel.Province)) .ProjectTo(_mapper.ConfigurationProvider); diff --git a/IRaCIS.Core.Domain/Institution/Site.cs b/IRaCIS.Core.Domain/Institution/Site.cs index 7465935fa..feeeaa044 100644 --- a/IRaCIS.Core.Domain/Institution/Site.cs +++ b/IRaCIS.Core.Domain/Institution/Site.cs @@ -9,15 +9,15 @@ namespace IRaCIS.Core.Domain.Models { [JsonIgnore] public Hospital Hospital { get; set; } - public string SiteName { get; set; } - + public string SiteName { get; set; } = string.Empty; + public string SiteNameCN{ get; set; } = string.Empty; public string AliasName { get; set; } = string.Empty; public string SiteCode { get; set; } public int Code { get; set; } - public string City { get; set; } - public string Country { get; set; } + public string City { get; set; } = string.Empty; + public string Country { get; set; } = string.Empty; public Guid? HospitalId { get; set; } public int State { get; set; }