diff --git a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml index 14457fbe..8de62b24 100644 --- a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml +++ b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml @@ -440,6 +440,13 @@ TrialEmailNoticeConfigService + + + 设置项目邮箱 + + + + 同步系统配置的文档到想项目中 @@ -5982,6 +5989,31 @@ TrialEmailNoticeConfigView 列表视图模型 + + + 发件箱账号 + + + + + 发件人 + + + + + 密码/授权码 + + + + + SMTP服务器 + + + + + SMTP端口 + + TrialEmailNoticeConfigQuery 列表查询参数模型 diff --git a/IRaCIS.Core.Application/Service/Document/DTO/TrialEmailNoticeConfigViewModel.cs b/IRaCIS.Core.Application/Service/Document/DTO/TrialEmailNoticeConfigViewModel.cs index 5da355aa..0f8fd191 100644 --- a/IRaCIS.Core.Application/Service/Document/DTO/TrialEmailNoticeConfigViewModel.cs +++ b/IRaCIS.Core.Application/Service/Document/DTO/TrialEmailNoticeConfigViewModel.cs @@ -48,7 +48,44 @@ namespace IRaCIS.Core.Application.ViewModel } + public class GetTrialEmailSetOutDto + { + public Guid TrialId { get; set; } + /// + /// 发件箱账号 + /// + public string EmailFromEmail { get; set; } = string.Empty; + + /// + /// 发件人 + /// + public string EmailFromName { get; set; } = string.Empty; + + /// + /// 密码/授权码 + /// + public string EmailAuthorizationCode { get; set; } = string.Empty; + + /// + /// SMTP服务器 + /// + public string EmailSMTPServerAddress { get; set; } = string.Empty; + + /// + /// SMTP端口 + /// + public int? EmailSMTPServerPort { get; set; } + } + + public class SetTrialEmailInDto : GetTrialEmailSetOutDto + { + + } + public class GetTrialEmailSetInDto + { + public Guid TrialId { get; set; } + } ///TrialEmailNoticeConfigQuery 列表查询参数模型 public class TrialEmailNoticeConfigQuery diff --git a/IRaCIS.Core.Application/Service/Document/TrialEmailNoticeConfigService.cs b/IRaCIS.Core.Application/Service/Document/TrialEmailNoticeConfigService.cs index ce2b4e40..a0f03810 100644 --- a/IRaCIS.Core.Application/Service/Document/TrialEmailNoticeConfigService.cs +++ b/IRaCIS.Core.Application/Service/Document/TrialEmailNoticeConfigService.cs @@ -26,17 +26,79 @@ namespace IRaCIS.Core.Application.Service { private readonly IRepository _trialEmailNoticeConfigRepository; + private readonly IRepository _trialRepository; public IRepository _visitTaskRepository { get; } public IRepository _trialUserRepository { get; } - public TrialEmailNoticeConfigService(IRepository trialEmailNoticeConfigRepository, IRepository visitTaskRepository, IRepository trialUserRepository) + public TrialEmailNoticeConfigService(IRepository trialEmailNoticeConfigRepository, IRepository visitTaskRepository, + IRepository trialRepository, + IRepository trialUserRepository) { _trialEmailNoticeConfigRepository = trialEmailNoticeConfigRepository; _visitTaskRepository = visitTaskRepository; + this._trialRepository = trialRepository; _trialUserRepository = trialUserRepository; } + /// + /// 设置项目邮箱 + /// + /// + /// + [HttpPost] + public async Task GetTrialEmailSet(GetTrialEmailSetInDto inDto) + { + return await _trialRepository.Where(x => x.Id == inDto.TrialId).Select(x => new GetTrialEmailSetOutDto() + { + TrialId = inDto.TrialId, + EmailAuthorizationCode = x.EmailAuthorizationCode, + EmailSMTPServerAddress = x.EmailSMTPServerAddress, + EmailFromEmail = x.EmailFromEmail, + EmailFromName = x.EmailFromEmail, + EmailSMTPServerPort = x.EmailSMTPServerPort + + }).FirstNotNullAsync(); + } + + + public async Task SetTrialEmail(SetTrialEmailInDto inDto) + { + + await TestEmailConfigAsync(new TrialEmailNoticeConfigAddOrEdit() { + + AuthorizationCode=inDto.EmailAuthorizationCode, + FromEmail=inDto.EmailFromEmail, + FileName=inDto.EmailFromName, + SMTPServerAddress=inDto.EmailSMTPServerAddress, + SMTPServerPort= inDto.EmailSMTPServerPort.Value, + + }); + + await _trialRepository.UpdatePartialFromQueryAsync(inDto.TrialId, x => new Trial() + { + + EmailFromEmail = inDto.EmailFromEmail, + EmailFromName = inDto.EmailFromName, + EmailAuthorizationCode = inDto.EmailAuthorizationCode, + EmailSMTPServerAddress = inDto.EmailSMTPServerAddress, + EmailSMTPServerPort = inDto.EmailSMTPServerPort + }); + + + + await _trialEmailNoticeConfigRepository.BatchUpdateNoTrackingAsync(x => x.TrialId == inDto.TrialId, x => new TrialEmailNoticeConfig() + { + AuthorizationCode = inDto.EmailAuthorizationCode, + FromEmail = inDto.EmailFromEmail, + FileName = inDto.EmailFromName, + SMTPServerAddress = inDto.EmailSMTPServerAddress, + SMTPServerPort = inDto.EmailSMTPServerPort.Value, + }); + + await _trialRepository.SaveChangesAsync(); + return ResponseOutput.Ok(); + } /// /// 同步系统配置的文档到想项目中 @@ -750,6 +812,7 @@ namespace IRaCIS.Core.Application.Service var trialEmailNoticeConfigQueryable = _trialEmailNoticeConfigRepository.Where(t => t.TrialId == inQuery.TrialId) .WhereIf(inQuery.CriterionTypeEnum != null, t => t.CriterionTypeEnum == inQuery.CriterionTypeEnum) + .WhereIf(inQuery.CriterionTypeEnum == null, t => t.CriterionTypeEnum == null) .WhereIf(inQuery.BusinessScenarioEnum != null, t => t.BusinessScenarioEnum == inQuery.BusinessScenarioEnum) .ProjectTo(_mapper.ConfigurationProvider); diff --git a/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingJudgeTaskService.cs b/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingJudgeTaskService.cs index a3eca9eb..1568499f 100644 --- a/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingJudgeTaskService.cs +++ b/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingJudgeTaskService.cs @@ -135,7 +135,16 @@ namespace IRaCIS.Application.Services x.TaskBlindName, } ).ToListAsync(); - + var globalVisitTwoTaskIds = await _visitTaskRepository.Where(x => x.Id == taskList[1].Id).Select(x => x.RelatedVisitTaskIdList).FirstNotNullAsync(); + + // 找到所有的的任务 + var globalVisitTwoTasks = await _visitTaskRepository.Where(x => globalVisitTwoTaskIds.Contains(x.Id)).Select(x => new { + x.Id, + x.ArmEnum, + x.VisitTaskNum, + x.SourceSubjectVisitId, + x.TaskBlindName, + }).ToListAsync(); var taskNum = globalVisitTasks.Select(x => x.VisitTaskNum).Distinct().OrderBy(x=>x).ToList(); @@ -153,6 +162,19 @@ namespace IRaCIS.Application.Services }).ToListAsync(); + var judgeQuestionTwoAnswer = await _readingTaskQuestionAnswerRepository.Where(x => globalVisitTwoTaskIds.Contains(x.VisitTaskId) && x.ReadingQuestionTrial.IsJudgeQuestion).OrderBy(x => x.ReadingQuestionTrial.ShowOrder) + .Select(x => new GlobalVisitJudgeQuestion() + { + Answer = x.Answer, + ShowOrder = x.ReadingQuestionTrial.ShowOrder, + VisitTaskId = x.VisitTaskId, + QuestionId = x.ReadingQuestionTrial.Id, + QuestionName = x.ReadingQuestionTrial.QuestionName.LanguageName(x.ReadingQuestionTrial.QuestionEnName, _userInfo.IsEn_Us), + QuestionGenre = x.ReadingQuestionTrial.QuestionGenre, + DictionaryCode = x.ReadingQuestionTrial.DictionaryCode, + + }).ToListAsync(); + foreach (var item in taskNum) { var globalTaskInfos = globalVisitTasks.Where(x => x.VisitTaskNum == item).OrderBy(x => x.ArmEnum).ToList(); @@ -181,6 +203,25 @@ namespace IRaCIS.Application.Services }).ToList(), }); + + + var towtask = globalVisitTwoTasks.Where(x => x.VisitTaskNum == globalitem.VisitTaskNum).FirstOrDefault(); + + judgeReadingInfoDto.VisitTaskInfoList.Add(new JudgeReadingQuestion() + { + ArmEnum = towtask.ArmEnum, + VisitTaskId = towtask.Id, + JudgeQuestionList = judgeQuestionTwoAnswer.Where(x => x.VisitTaskId == towtask.Id).OrderBy(x => x.ShowOrder) + .Select(x => new JudgeQuestion() + { + Answer = x.Answer, + QuestionId = x.QuestionId, + QuestionName = x.QuestionName, + QuestionGenre = x.QuestionGenre, + DictionaryCode = x.DictionaryCode, + + }).ToList(), + }); } judgeInfo.VisitInfoList.Add(judgeReadingInfoDto); } @@ -521,7 +562,7 @@ namespace IRaCIS.Application.Services } } - else + else if(!criterionInfo.IsReadingPeriod) { var query = from questionAnswet in _readingTaskQuestionAnswerRepository.Where(x => visitTaskids.Contains(x.VisitTaskId)) join question in _readingQuestionTrialRepository.Where(x => x.IsJudgeQuestion) on new { ReadingQuestionTrialId = questionAnswet.ReadingQuestionTrialId } equals new { ReadingQuestionTrialId = question.Id } diff --git a/IRaCIS.Core.Domain/Document/TrialEmailNoticeConfig.cs b/IRaCIS.Core.Domain/Document/TrialEmailNoticeConfig.cs index b527fc35..a4b6029a 100644 --- a/IRaCIS.Core.Domain/Document/TrialEmailNoticeConfig.cs +++ b/IRaCIS.Core.Domain/Document/TrialEmailNoticeConfig.cs @@ -71,7 +71,7 @@ namespace IRaCIS.Core.Domain.Models public CommonDocumentBusinessScenario BusinessScenarioEnum { get; set; } - public CriterionType CriterionTypeEnum { get; set; } + public CriterionType? CriterionTypeEnum { get; set; } [Required] public string FilePath { get; set; } = string.Empty; diff --git a/IRaCIS.Core.Domain/Trial/Trial.cs b/IRaCIS.Core.Domain/Trial/Trial.cs index e9711fb7..e0d5c880 100644 --- a/IRaCIS.Core.Domain/Trial/Trial.cs +++ b/IRaCIS.Core.Domain/Trial/Trial.cs @@ -325,6 +325,33 @@ namespace IRaCIS.Core.Domain.Models public string BlindFollowUpPrefix { get; set; } = "Follow-up"; + #region ʼ + /// + /// ˺ + /// + public string EmailFromEmail { get; set; } = string.Empty; + + /// + /// + /// + public string EmailFromName { get; set; } = string.Empty; + + /// + /// /Ȩ + /// + public string EmailAuthorizationCode { get; set; } = string.Empty; + + /// + /// SMTP + /// + public string EmailSMTPServerAddress { get; set; } = string.Empty; + + /// + /// SMTP˿ + /// + public int? EmailSMTPServerPort { get; set; } + #endregion + ///// ///// ͼǷбע /////