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