diff --git a/IRaCIS.Core.Application/Service/Document/TrialEmailNoticeConfigService.cs b/IRaCIS.Core.Application/Service/Document/TrialEmailNoticeConfigService.cs index 46bae4d87..69d9280d6 100644 --- a/IRaCIS.Core.Application/Service/Document/TrialEmailNoticeConfigService.cs +++ b/IRaCIS.Core.Application/Service/Document/TrialEmailNoticeConfigService.cs @@ -19,6 +19,7 @@ using IRaCIS.Core.Infra.EFCore.Common; using IRaCIS.Core.Infrastructure; using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Mvc; +using Microsoft.Extensions.Logging; using Microsoft.Extensions.Options; using Spire.Doc; using System.Linq.Dynamic.Core; @@ -1283,9 +1284,24 @@ x.ReadingTableQuestionTrial.QuestionMark == QuestionMark.LesionNumber && x.Readi break; case CriterionType.PCWG3: - var questionAnsewer = await _readingGlobalTaskInfoRepository.Where(t => t.TaskId == visitTaskId && t.TrialReadingQuestion.QuestionType == QuestionType.SiteVisitForTumorEvaluation).FirstNotNullAsync(); + var questionAnsewer = await _readingGlobalTaskInfoRepository.Where(t => t.TaskId == visitTaskId && t.TrialReadingQuestion.QuestionType == QuestionType.SiteVisitForTumorEvaluation).FirstOrDefaultAsync(); + if (questionAnsewer != null&& questionAnsewer.Answer.IsNotNullOrEmpty()) + { + answer = questionAnsewer.Answer; + } + else + { + var visittaskList=await _visitTaskRepository.Where(t => t.Id == visitTaskId ).Select(x=>x.RelatedVisitTaskIdList).FirstOrDefaultAsync(); - answer = questionAnsewer.Answer; + var task = await _visitTaskRepository.Where(x => visittaskList.Contains(x.Id) && x.ReadingCategory == ReadingCategory.Visit).OrderByDescending(x => x.VisitTaskNum).FirstOrDefaultAsync(); + if (task != null) + { + answer= await _readingTaskQuestionAnswerRepository.Where(t => t.VisitTaskId == task.Id && t.ReadingQuestionTrial.QuestionType == QuestionType.SiteVisitForTumorEvaluation) + .Select(t => t.Answer).FirstOrDefaultAsync(); + } + } + + break; diff --git a/IRaCIS.Core.Application/Service/Reading/Dto/ReadingImageTaskViewModel.cs b/IRaCIS.Core.Application/Service/Reading/Dto/ReadingImageTaskViewModel.cs index a462dbfd6..0af8e743f 100644 --- a/IRaCIS.Core.Application/Service/Reading/Dto/ReadingImageTaskViewModel.cs +++ b/IRaCIS.Core.Application/Service/Reading/Dto/ReadingImageTaskViewModel.cs @@ -1215,7 +1215,7 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto /// /// 问题Id /// - public Guid QuestionId { get; set; } + public Guid? QuestionId { get; set; } /// /// InstanceId diff --git a/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingImageTaskService.cs b/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingImageTaskService.cs index 9549eae8d..ee14737c0 100644 --- a/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingImageTaskService.cs +++ b/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingImageTaskService.cs @@ -1898,6 +1898,24 @@ namespace IRaCIS.Core.Application.Service [HttpPost] public async Task SaveTaskQuestion(ChangeDicomReadingQuestionAnswerInDto inDto, string param) { + // 当 param == -10 时,为自定义标准 需要区分 绑定 更改 标记 + if (param == "-10") + { + var questionMarkList = inDto.QuestionMarkInfoList.Select(x => x.QuestionId).ToList(); + if (!(await _readingTaskQuestionMarkRepository.AnyAsync(x => x.VisitTaskId == inDto.VisitTaskId && questionMarkList.Contains(x.QuestionId))) && inDto.QuestionMarkInfoList.Count() > 0) + { + _userInfo.AuditIdentification = "AddMark"; + } + else if (await _readingTaskQuestionMarkRepository.AnyAsync(x => x.VisitTaskId == inDto.VisitTaskId && questionMarkList.Contains(x.QuestionId))) + { + _userInfo.AuditIdentification = "UpdateMark"; + } + else + { + _userInfo.AuditIdentification = "DeleteMark"; + } + } + var taskinfo = await _visitTaskRepository.Where(x => x.Id == inDto.VisitTaskId).Include(x => x.TrialReadingCriterion).FirstNotNullAsync(); try { @@ -1994,7 +2012,7 @@ namespace IRaCIS.Core.Application.Service }).ToList(); await _readingTaskQuestionAnswerRepository.AddRangeAsync(needAddAnswer); - + if (inDto.UpdateMark) { var questionMarkList = await _readingTaskQuestionMarkRepository.Where(x => x.VisitTaskId == inDto.VisitTaskId).Select(x => new diff --git a/IRaCIS.Core.Infra.EFCore/Common/AuditingData.cs b/IRaCIS.Core.Infra.EFCore/Common/AuditingData.cs index be0dbccb4..755a8a700 100644 --- a/IRaCIS.Core.Infra.EFCore/Common/AuditingData.cs +++ b/IRaCIS.Core.Infra.EFCore/Common/AuditingData.cs @@ -6,6 +6,7 @@ using MassTransit; using Microsoft.EntityFrameworkCore.ChangeTracking; using Microsoft.EntityFrameworkCore.ChangeTracking.Internal; using Newtonsoft.Json; +using Newtonsoft.Json.Linq; namespace IRaCIS.Core.Infra.EFCore.Common @@ -3093,7 +3094,7 @@ namespace IRaCIS.Core.Infra.EFCore.Common //自定义特有标识 if (await _dbContext.ReadingQuestionCriterionTrial.AnyAsync(t => t.Id == firstEntity.ReadingQuestionCriterionTrialId && t.CriterionType == CriterionType.SelfDefine)) { - extraIdentification = "/Self"; + //extraIdentification = "/Self"; //还会把病灶问题答案更新 @@ -3134,6 +3135,19 @@ namespace IRaCIS.Core.Infra.EFCore.Common } + var mark = entitys.Where(x => x.Entity.GetType() == typeof(ReadingTaskQuestionMark)).Select(x=>x.Entity as ReadingTaskQuestionMark).FirstOrDefault(); + + var markName=string.Empty; + if (mark != null && mark.MeasureData.IsNotNullOrEmpty()) + { + // 解析 JSON 字符串 + JObject jsonObject = JObject.Parse(mark.MeasureData); + + // 提取 label 的值 + markName = jsonObject["data"]["label"].ToString(); + } + + await InsertInspection(cloneEntity, type, x => new InspectionConvertDTO() { VisitTaskId = x.VisitTaskId, @@ -3146,6 +3160,9 @@ namespace IRaCIS.Core.Infra.EFCore.Common }, new { + + MarkName= markName, + PicturePath= mark!=null?mark.PicturePath:string.Empty, QuestionAnswerList = taskQuestionAnswerList.Join(quesionList, t => t.ReadingQuestionTrialId, u => u.QuestionId, @@ -3160,7 +3177,7 @@ namespace IRaCIS.Core.Infra.EFCore.Common }).OrderBy(t => t.ShowOrder).ToList() , TableQuestionAndAnswerList = tableQuesionAndAnswerList - } + }, _userInfo.AuditIdentification );