diff --git a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml index d815c27fd..c292bb7f1 100644 --- a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml +++ b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml @@ -1108,6 +1108,14 @@ + + + 添加转化任务病灶信息 + + + + + 获取阅片报告任务List @@ -2157,6 +2165,14 @@ + + + 添加转化任务病灶信息 + + + + + 自动计算 并修改值 diff --git a/IRaCIS.Core.Application/Resources/en-US.json b/IRaCIS.Core.Application/Resources/en-US.json index 78a67f193..676cd6d63 100644 --- a/IRaCIS.Core.Application/Resources/en-US.json +++ b/IRaCIS.Core.Application/Resources/en-US.json @@ -140,10 +140,14 @@ // ------------------------------------------------------------Doctor-------------------------------------------------------------------- //DoctorService + "Doctor_DupPhoneOrEmail": "current phone or email number already existed", + "Doctor_DupPhone": "The current phone number already existed!", + "Doctor_DupEmail": "The current email already existed!", "Doctor_StandardDuplicateFileTypeError": "This type of file has already been added to the current criterion.", "Doctor_RequiredDocumentsError": "Resume & Consultant Agreement must be upload ", + // ------------------------------------------------------------Document-------------------------------------------------------------------- //SystemDocumentService "SystemD_DuplicateFile": "A file of the same type and name already exists in the system.", @@ -432,9 +436,11 @@ "TrialSite_ParticipantJoined": "The subjects has been added to this site, and couldn't be disable.", "TrialSite_CodeDuplicate": "Code is not allowed to be repeated", "TrialSite_CannotDeleteAssociatedCRC": "The site has been associated with CRC, and couldn't be deleted.", + "TrialSite_CannotDeleteAssociatedSubject": "The subjects has been added to this site, and couldn't be deleted.", "TrialSite_CannotDeleteUploadedData": "The site has been uploaded study, and couldn't be deleted.", + // ------------------------------------------------------------Visit-------------------------------------------------------------------- //SubjectService "Subject_NoConfirmedPlan": "The visit plan of the project is not confirmed. Please contact the program Manager to confirm the visit plan before adding subjects.", diff --git a/IRaCIS.Core.Application/Resources/zh-CN.json b/IRaCIS.Core.Application/Resources/zh-CN.json index 622fcef29..5ed57bd95 100644 --- a/IRaCIS.Core.Application/Resources/zh-CN.json +++ b/IRaCIS.Core.Application/Resources/zh-CN.json @@ -131,9 +131,13 @@ "Mail_AccountPasswordResetReminder": "[来自展影IRC] 关于重置账户密码的提醒", "Mail_InvitationEmail": "[来自展影IRC] [{0}]邀请信", // ------------------------------------------------------------Doctor-------------------------------------------------------------------- + "Doctor_DupPhoneOrEmail": "当前的电话或电子邮件号码已经存在", + "Doctor_DupPhone": "当前的电话号码已经存在!", + "Doctor_DupEmail": "当前的邮箱已经存在!", "Doctor_StandardDuplicateFileTypeError": "当前标准已添加过此类型文件", "Doctor_RequiredDocumentsError": "简历及顾问协议必须上传", + // ------------------------------------------------------------Document-------------------------------------------------------------------- //SystemDocumentService "SystemD_DuplicateFile": "系统中已存在同类型的同名文件。", @@ -410,8 +414,10 @@ "TrialSite_ParticipantJoined": "已有受试者加入中心,无法禁用", "TrialSite_CodeDuplicate": "代码不能重复", "TrialSite_CannotDeleteAssociatedCRC": "中心已经和CRC关联,不能删除", + "TrialSite_CannotDeleteAssociatedSubject": "受试者已经添加,不能删除", "TrialSite_CannotDeleteUploadedData": "中心已经上传调研,无法删除", + // ------------------------------------------------------------Visit-------------------------------------------------------------------- //SubjectService "Subject_NoConfirmedPlan": "项目访视计划没有确认。请联系项目经理确认项目访视计划后,再添加受试者。", diff --git a/IRaCIS.Core.Application/Service/Allocation/VisitTaskHelpeService.cs b/IRaCIS.Core.Application/Service/Allocation/VisitTaskHelpeService.cs index 94304bd12..4c2c108ff 100644 --- a/IRaCIS.Core.Application/Service/Allocation/VisitTaskHelpeService.cs +++ b/IRaCIS.Core.Application/Service/Allocation/VisitTaskHelpeService.cs @@ -115,7 +115,7 @@ namespace IRaCIS.Core.Application.Service public async Task AddConvertedTask(Guid taskId) { - var originalTask = await _visitTaskRepository.Where(x => x.Id == taskId).Include(x => x.TrialReadingCriterion).FirstNotNullAsync(); + var taskInfo = await _visitTaskRepository.Where(x => x.Id == taskId).IgnoreAutoIncludes().AsNoTracking().FirstNotNullAsync(); taskInfo.ReadingTaskState = ReadingTaskState.Reading; @@ -144,126 +144,7 @@ namespace IRaCIS.Core.Application.Service }); - var taskAnswer = await _readingTaskQuestionAnswerRepository.Where(x => x.VisitTaskId == taskId && x.ReadingQuestionTrial.Type != "calculation").IgnoreAutoIncludes().AsNoTracking().ToListAsync(); - - taskAnswer.ForEach(x => { - - x.VisitTaskId = taskInfo.Id; - - x.Id = NewId.NextGuid(); - }); - - - var tableRowAnswers = await _readingTableAnswerRowInfoRepository.Where(x => x.VisitTaskId == taskId).AsNoTracking().ProjectTo(_mapper.ConfigurationProvider).IgnoreAutoIncludes().ToListAsync(); - - tableRowAnswers.ForEach(x => - { - x.VisitTaskId = taskInfo.Id; - x.IsCurrentTaskAdd = false; - x.FristAddTaskId = taskInfo.Id; - x.Id = NewId.NextGuid(); - }); - - tableRowAnswers.ForEach(x => - { - x.SplitRowId = tableRowAnswers.Where(y => y.OriginalId == x.SplitRowId).Select(y => y.Id).FirstOrDefault(); - x.MergeRowId = tableRowAnswers.Where(y => y.OriginalId == x.MergeRowId).Select(y => y.Id).FirstOrDefault(); - - }); - - var tableAnswer = await _readingTableQuestionAnswerRepository.Where(x => x.VisitTaskId == taskId).IgnoreAutoIncludes().AsNoTracking().ToListAsync(); - - tableAnswer.ForEach(x => - { - x.Id = NewId.NextGuid(); - x.VisitTaskId = taskInfo.Id; - x.RowId = tableRowAnswers.Where(y => y.OriginalId == x.RowId).Select(x => x.Id).FirstOrDefault(); - }); - var addrowInfo = _mapper.Map>(tableRowAnswers); - switch (originalTask.TrialReadingCriterion.CriterionType) - { - case CriterionType.IRECIST1Point1: - //非靶病灶全部数据复制,不可更改。支持如果状态为:显著增大需要自动改为: 显著增大(iUPD) - var stateQuestionId = await _readingTableQuestionTrialRepository.Where(x => x.TrialCriterionId == originalTask.TrialReadingCriterionId - && x.ReadingQuestionTrial.LesionType == LesionType.NonTargetLesions && x.QuestionMark == QuestionMark.State).Select(x => x.Id).FirstOrDefaultAsync(); - - tableAnswer.ForEach(x => - { - if (x.TableQuestionId == stateQuestionId && x.Answer.EqEnum(NoTargetState.Increase)) - { - x.Answer = NoTargetState.IUPD.GetEnumInt(); - } - }); - - // 新转换为其它既往新病灶: 状态为消失、疑似、无法评估的新病灶自动转换为:其它既往新病灶,且不可以编辑 - - // 找到新病灶问题 - var newLesionQuestion = await _readingQuestionTrialRepository.Where(x => x.ReadingQuestionCriterionTrialId == originalTask.TrialReadingCriterionId && x.LesionType == LesionType.NewLesions).FirstOrDefaultAsync(); - - - // 找到其他既往新病灶 - var otherLesionQuestion = await _readingQuestionTrialRepository.Where(x => x.ReadingQuestionCriterionTrialId == originalTask.TrialReadingCriterionId && x.LesionType == LesionType.OtherPreviousNewLesion).FirstOrDefaultAsync(); - - - - if (newLesionQuestion != null && otherLesionQuestion != null) - { - // 找到表格问题 - var newLesionTableQuestionList = await _readingTableQuestionTrialRepository.Where(x => x.ReadingQuestionId == newLesionQuestion.Id).ToListAsync(); - - // 找到表格问题 - var otherLesionTableQuestionList = await _readingTableQuestionTrialRepository.Where(x => x.ReadingQuestionId == otherLesionQuestion.Id).ToListAsync(); - - // 找到病灶状态 - var newstateQuestionId = newLesionTableQuestionList.Where(x => x.QuestionMark == QuestionMark.State).Select(x => x.Id).FirstOrDefault(); - - - var stateAnswers = new List() { - NewLesionState.Loss.GetEnumInt(), - NewLesionState.Suspected.GetEnumInt(), - NewLesionState.UnableEvaluate.GetEnumInt() - }; - - var needRowIds = tableAnswer.Where(x => x.TableQuestionId == newstateQuestionId && stateAnswers.Contains(x.Answer)).Select(x => x.RowId).Distinct().ToList(); - - - - - addrowInfo.ForEach(x => - { - if (needRowIds.Contains(x.Id)) - { - x.QuestionId = otherLesionQuestion.Id; - x.OrderMark = otherLesionQuestion.OrderMark; - x.RowMark = otherLesionQuestion.OrderMark + x.RowIndex.GetLesionMark(); - } - - - }); - - tableAnswer.ForEach(x => - { - if (needRowIds.Contains(x.RowId)) - { - x.QuestionId = otherLesionQuestion.Id; - - var newLesionTableQuestion = newLesionTableQuestionList.Where(y => y.Id == x.TableQuestionId).FirstOrDefault(); - if (newLesionTableQuestion != null) - { - x.TableQuestionId = otherLesionTableQuestionList.Where(y => y.QuestionMark == newLesionTableQuestion.QuestionMark).Select(x => x.Id).FirstOrDefault(); - - } - - } - - }); - } - - break; - } - await _readingTaskQuestionAnswerRepository.AddRangeAsync(taskAnswer); - await _readingTableAnswerRowInfoRepository.AddRangeAsync(addrowInfo); - await _readingTableQuestionAnswerRepository.AddRangeAsync(tableAnswer); + await _visitTaskRepository.SaveChangesAsync(); } diff --git a/IRaCIS.Core.Application/Service/Doctor/DoctorService.cs b/IRaCIS.Core.Application/Service/Doctor/DoctorService.cs index ece38e7e0..6a1b78599 100644 --- a/IRaCIS.Core.Application/Service/Doctor/DoctorService.cs +++ b/IRaCIS.Core.Application/Service/Doctor/DoctorService.cs @@ -60,7 +60,8 @@ namespace IRaCIS.Application.Services { Expression> verifyExp = t => t.Phone == basicInfoModel.Phone || t.EMail == basicInfoModel.EMail; - var verifyPair = new KeyValuePair>, string>(verifyExp, "current phone or email number already existed"); + //---current phone or email number already existed + var verifyPair = new KeyValuePair>, string>(verifyExp, _localizer["Doctor_DupPhoneOrEmail"]); if (basicInfoModel.Id == Guid.Empty || basicInfoModel.Id == null) { @@ -70,12 +71,14 @@ namespace IRaCIS.Application.Services //验证用户手机号 if (await _doctorRepository.AnyAsync(t => t.Phone == doctor.Phone)) { - return ResponseOutput.NotOk("The current phone number already existed!", new DoctorBasicInfoCommand()); + //---The current phone number already existed! + return ResponseOutput.NotOk(_localizer["Doctor_DupPhone"], new DoctorBasicInfoCommand()); } if (await _doctorRepository.AnyAsync(t => t.EMail == doctor.EMail)) { - return ResponseOutput.NotOk("The current email already existed!", new DoctorBasicInfoCommand()); + //---The current email already existed! + return ResponseOutput.NotOk(_localizer["Doctor_DupEmail"], new DoctorBasicInfoCommand()); } doctor.Code = (await _doctorRepository.MaxAsync(t => t.Code)) + 1; @@ -105,12 +108,14 @@ namespace IRaCIS.Application.Services var phone = updateModel.Phone.Trim(); if ((await _doctorRepository.FirstOrDefaultAsync(t => t.Phone == phone && t.Id != updateModel.Id)) != null) { - return ResponseOutput.NotOk("The current phone number already existed!", new DoctorBasicInfoCommand()); + //---The current phone number already existed! + return ResponseOutput.NotOk(_localizer["Doctor_DupPhone"], new DoctorBasicInfoCommand()); } var email = updateModel.EMail.Trim(); if (await _doctorRepository.AnyAsync(t => t.EMail == email && t.Id != updateModel.Id)) { - return ResponseOutput.NotOk("The current email already existed!", new DoctorBasicInfoCommand()); + //---The current email already existed! + return ResponseOutput.NotOk(_localizer["Doctor_DupEmail"], new DoctorBasicInfoCommand()); } var doctor = await _doctorRepository.FirstOrDefaultAsync(t => t.Id == updateModel.Id).IfNullThrowException(); diff --git a/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingImageTaskService.cs b/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingImageTaskService.cs index c99b3cbd0..16a2fe9f6 100644 --- a/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingImageTaskService.cs +++ b/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingImageTaskService.cs @@ -2436,24 +2436,43 @@ namespace IRaCIS.Application.Services // 既往任务Id List pastResultTaskIdList = new List(); + // 冻结任务Id + List reportRelatedTaskIdList = new List(); + if (isReadingTaskViewInOrder) { pastResultTaskIdList = await _visitTaskRepository.Where(x => x.TrialId == taskInfo.TrialId && x.SubjectId == taskInfo.SubjectId && - x.VisitTaskNum <= taskInfo.VisitTaskNum && + x.VisitTaskNum < taskInfo.VisitTaskNum && x.ArmEnum == taskInfo.ArmEnum && x.DoctorUserId == taskInfo.DoctorUserId && x.TrialReadingCriterionId == taskInfo.TrialReadingCriterionId && x.ReadingTaskState == ReadingTaskState.HaveSigned && - (x.TaskState == TaskState.Effect||x.TaskState== TaskState.Freeze) && + x.TaskState == TaskState.Effect && x.IsSelfAnalysis == taskInfo.IsSelfAnalysis && x.IsAnalysisCreate == taskInfo.IsAnalysisCreate && x.ReadingCategory == taskInfo.ReadingCategory && x.Id != taskInfo.Id ).OrderBy(x=>x.VisitTaskNum).ThenBy(x=>x.TaskState).Select(x => x.Id).ToListAsync(); + + reportRelatedTaskIdList = await _visitTaskRepository.Where(x => + x.TrialId == taskInfo.TrialId && + x.SubjectId == taskInfo.SubjectId && + x.VisitTaskNum <= taskInfo.VisitTaskNum && + x.ArmEnum == taskInfo.ArmEnum && + x.DoctorUserId == taskInfo.DoctorUserId && + x.TrialReadingCriterionId == taskInfo.TrialReadingCriterionId && + x.ReadingTaskState == ReadingTaskState.HaveSigned && + (x.TaskState == TaskState.Effect||x.TaskState==TaskState.Freeze) && + x.IsSelfAnalysis == taskInfo.IsSelfAnalysis && + x.IsAnalysisCreate == taskInfo.IsAnalysisCreate && + x.ReadingCategory == taskInfo.ReadingCategory && + x.Id != taskInfo.Id + ).OrderBy(x => x.VisitTaskNum).ThenBy(x => x.TaskState).Select(x => x.Id).ToListAsync(); + switch (taskInfo.ReadingCategory) { case ReadingCategory.Visit: @@ -2485,7 +2504,7 @@ namespace IRaCIS.Application.Services { - + ReportRelatedTaskIds = JsonConvert.SerializeObject(reportRelatedTaskIdList), PastResultTaskIds = JsonConvert.SerializeObject(pastResultTaskIdList), RelatedVisitTaskIds = JsonConvert.SerializeObject(relatedVisitTaskIdList), }); @@ -2504,6 +2523,13 @@ namespace IRaCIS.Application.Services RelevanceType = RelevanceType.Related, })); + await _readingTaskRelationRepository.AddRangeAsync(reportRelatedTaskIdList.Select(x => new ReadingTaskRelation() + { + RelevanceTaskId = x, + TaskId = visitTaskId, + RelevanceType = RelevanceType.ReportResult, + })); + await _visitTaskRepository.SaveChangesAsync(); } diff --git a/IRaCIS.Core.Application/Service/ReadingCalculate/General/GeneralCalculateService.cs b/IRaCIS.Core.Application/Service/ReadingCalculate/General/GeneralCalculateService.cs index 48e8ee2a7..691faa5e9 100644 --- a/IRaCIS.Core.Application/Service/ReadingCalculate/General/GeneralCalculateService.cs +++ b/IRaCIS.Core.Application/Service/ReadingCalculate/General/GeneralCalculateService.cs @@ -1,6 +1,7 @@ using IRaCIS.Core.Application.Service.Reading.Dto; using IRaCIS.Core.Domain.Share; using IRaCIS.Core.Infra.EFCore.Common; +using MassTransit; using System; using System.Collections.Generic; using System.Linq; @@ -141,6 +142,140 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate return readingData; } + + /// + /// 添加转化任务病灶信息 + /// + /// + /// + /// + public async Task AddConvertedTaskFocus(Guid visitTaskId, Guid beforeConvertedTaskId) + { + var originalTask = await _visitTaskRepository.Where(x => x.Id == beforeConvertedTaskId).Include(x => x.TrialReadingCriterion).FirstNotNullAsync(); + + var taskAnswer = await _readingTaskQuestionAnswerRepository.Where(x => x.VisitTaskId == visitTaskId && x.ReadingQuestionTrial.Type != "calculation").IgnoreAutoIncludes().AsNoTracking().ToListAsync(); + + taskAnswer.ForEach(x => { + + x.VisitTaskId = beforeConvertedTaskId; + + x.Id = NewId.NextGuid(); + }); + + + var tableRowAnswers = await _readingTableAnswerRowInfoRepository.Where(x => x.VisitTaskId == visitTaskId).AsNoTracking().ProjectTo(_mapper.ConfigurationProvider).IgnoreAutoIncludes().ToListAsync(); + + tableRowAnswers.ForEach(x => + { + x.VisitTaskId = beforeConvertedTaskId; + x.IsCurrentTaskAdd = false; + x.FristAddTaskId = beforeConvertedTaskId; + x.Id = NewId.NextGuid(); + }); + + tableRowAnswers.ForEach(x => + { + x.SplitRowId = tableRowAnswers.Where(y => y.OriginalId == x.SplitRowId).Select(y => y.Id).FirstOrDefault(); + x.MergeRowId = tableRowAnswers.Where(y => y.OriginalId == x.MergeRowId).Select(y => y.Id).FirstOrDefault(); + + }); + + var tableAnswer = await _readingTableQuestionAnswerRepository.Where(x => x.VisitTaskId == visitTaskId).IgnoreAutoIncludes().AsNoTracking().ToListAsync(); + + tableAnswer.ForEach(x => + { + x.Id = NewId.NextGuid(); + x.VisitTaskId = beforeConvertedTaskId; + x.RowId = tableRowAnswers.Where(y => y.OriginalId == x.RowId).Select(x => x.Id).FirstOrDefault(); + }); + var addrowInfo = _mapper.Map>(tableRowAnswers); + switch (originalTask.TrialReadingCriterion.CriterionType) + { + case CriterionType.IRECIST1Point1: + //非靶病灶全部数据复制,不可更改。支持如果状态为:显著增大需要自动改为: 显著增大(iUPD) + var stateQuestionId = await _readingTableQuestionTrialRepository.Where(x => x.TrialCriterionId == originalTask.TrialReadingCriterionId + && x.ReadingQuestionTrial.LesionType == LesionType.NonTargetLesions && x.QuestionMark == QuestionMark.State).Select(x => x.Id).FirstOrDefaultAsync(); + + tableAnswer.ForEach(x => + { + if (x.TableQuestionId == stateQuestionId && x.Answer.EqEnum(NoTargetState.Increase)) + { + x.Answer = NoTargetState.IUPD.GetEnumInt(); + } + }); + + // 新转换为其它既往新病灶: 状态为消失、疑似、无法评估的新病灶自动转换为:其它既往新病灶,且不可以编辑 + + // 找到新病灶问题 + var newLesionQuestion = await _readingQuestionTrialRepository.Where(x => x.ReadingQuestionCriterionTrialId == originalTask.TrialReadingCriterionId && x.LesionType == LesionType.NewLesions).FirstOrDefaultAsync(); + + + // 找到其他既往新病灶 + var otherLesionQuestion = await _readingQuestionTrialRepository.Where(x => x.ReadingQuestionCriterionTrialId == originalTask.TrialReadingCriterionId && x.LesionType == LesionType.OtherPreviousNewLesion).FirstOrDefaultAsync(); + + + + if (newLesionQuestion != null && otherLesionQuestion != null) + { + // 找到表格问题 + var newLesionTableQuestionList = await _readingTableQuestionTrialRepository.Where(x => x.ReadingQuestionId == newLesionQuestion.Id).ToListAsync(); + + // 找到表格问题 + var otherLesionTableQuestionList = await _readingTableQuestionTrialRepository.Where(x => x.ReadingQuestionId == otherLesionQuestion.Id).ToListAsync(); + + // 找到病灶状态 + var newstateQuestionId = newLesionTableQuestionList.Where(x => x.QuestionMark == QuestionMark.State).Select(x => x.Id).FirstOrDefault(); + + + var stateAnswers = new List() { + NewLesionState.Loss.GetEnumInt(), + NewLesionState.Suspected.GetEnumInt(), + NewLesionState.UnableEvaluate.GetEnumInt() + }; + + var needRowIds = tableAnswer.Where(x => x.TableQuestionId == newstateQuestionId && stateAnswers.Contains(x.Answer)).Select(x => x.RowId).Distinct().ToList(); + + + + + addrowInfo.ForEach(x => + { + if (needRowIds.Contains(x.Id)) + { + x.QuestionId = otherLesionQuestion.Id; + x.OrderMark = otherLesionQuestion.OrderMark; + x.RowMark = otherLesionQuestion.OrderMark + x.RowIndex.GetLesionMark(); + } + + + }); + + tableAnswer.ForEach(x => + { + if (needRowIds.Contains(x.RowId)) + { + x.QuestionId = otherLesionQuestion.Id; + + var newLesionTableQuestion = newLesionTableQuestionList.Where(y => y.Id == x.TableQuestionId).FirstOrDefault(); + if (newLesionTableQuestion != null) + { + x.TableQuestionId = otherLesionTableQuestionList.Where(y => y.QuestionMark == newLesionTableQuestion.QuestionMark).Select(x => x.Id).FirstOrDefault(); + + } + + } + + }); + } + + break; + } + await _readingTaskQuestionAnswerRepository.AddRangeAsync(taskAnswer); + await _readingTableAnswerRowInfoRepository.AddRangeAsync(addrowInfo); + await _readingTableQuestionAnswerRepository.AddRangeAsync(tableAnswer); + await _readingTableQuestionAnswerRepository.SaveChangesAsync(); + } + /// /// 获取阅片报告任务List /// @@ -165,7 +300,7 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate ); if(visitTaskInfo.ReadingTaskState==ReadingTaskState.HaveSigned) { - taskquery = _visitTaskRepository.Where(x => visitTaskInfo.RelatedVisitTaskIdList.Contains(x.Id)||x.Id==visitTaskInfo.Id); + taskquery = _visitTaskRepository.Where(x => visitTaskInfo.ReportRelatedTaskIdList.Contains(x.Id)||x.Id==visitTaskInfo.Id); } diff --git a/IRaCIS.Core.Application/Service/ReadingCalculate/IRECIST1Point1CalculateService.cs b/IRaCIS.Core.Application/Service/ReadingCalculate/IRECIST1Point1CalculateService.cs index 756f1d7b1..4ef0ef9d7 100644 --- a/IRaCIS.Core.Application/Service/ReadingCalculate/IRECIST1Point1CalculateService.cs +++ b/IRaCIS.Core.Application/Service/ReadingCalculate/IRECIST1Point1CalculateService.cs @@ -444,8 +444,8 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate //非靶病灶评估 new ReadingCalculateData (){QuestionType=QuestionType.NoTargetLesion,GetStringFun=GetNoTargetLesionEvaluate}, - //是否存在新病灶 - new ReadingCalculateData (){QuestionType=QuestionType.NewLesions,GetStringFun=GetNewLesionEvaluate}, + //新病灶评估 + new ReadingCalculateData (){QuestionType=QuestionType.NewLesionEvaluation,GetStringFun=GetNewLesionEvaluate}, //整体肿瘤评估 new ReadingCalculateData (){QuestionType=QuestionType.Tumor,GetStringFun=GetTumor}, @@ -730,89 +730,98 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate // 判断当前任务是否是基线 if (taskinfo.SourceSubjectVisitId != baseLineVisitId) { + // 判断当前任务是是否有表格问题答案 if (!(await _readingTableQuestionAnswerRepository.AnyAsync(x => x.VisitTaskId == visitTaskId))) { - - var LastVisitTaskId = await _visitTaskRepository.Where(x =>( x.ReadingCategory == ReadingCategory.Visit && - x.TrialReadingCriterionId == taskinfo.TrialReadingCriterionId && - x.IsAnalysisCreate== taskinfo.IsAnalysisCreate&& - x.DoctorUserId == taskinfo.DoctorUserId && - x.IsSelfAnalysis== taskinfo.IsSelfAnalysis && - x.SubjectId == taskinfo.SubjectId && x.ReadingTaskState == ReadingTaskState.HaveSigned && x.ArmEnum == taskinfo.ArmEnum - && x.VisitTaskNum < taskinfo.VisitTaskNum && x.TaskState == TaskState.Effect)||(x.Id==taskinfo.BeforeConvertedTaskId) - ).OrderByDescending(x => x.VisitTaskNum).Select(x => x.Id).FirstOrDefaultAsync(); - - - - var copyTableAnswers = await _readingTableQuestionAnswerRepository.Where(x => x.VisitTaskId == LastVisitTaskId).Select(x => new CopyTableAnswerDto() + if (taskinfo.BeforeConvertedTaskId != null) { - Answer = x.Answer, - QuestionId = x.QuestionId, - RowId = x.RowId, - QuestionMark = x.ReadingTableQuestionTrial.QuestionMark, - TableQuestionId = x.TableQuestionId, - RowIndex = x.RowIndex, - TrialId = x.TrialId - }).ToListAsync(); + await _generalCalculateService.AddConvertedTaskFocus(taskinfo.Id, taskinfo.BeforeConvertedTaskId.Value); + } + else - var tableRowAnswers = await _readingTableAnswerRowInfoRepository.Where(x => x.VisitTaskId == LastVisitTaskId).ProjectTo(_mapper.ConfigurationProvider).ToListAsync(); - - - tableRowAnswers.ForEach(x => { - x.VisitTaskId = visitTaskId; - x.IsCurrentTaskAdd = false; - x.Id = NewId.NextGuid(); - x.SeriesId = null; - x.InstanceId = null; - x.MeasureData = string.Empty; - x.PicturePath= string.Empty; - }); + var LastVisitTaskId = await _visitTaskRepository.Where(x => (x.ReadingCategory == ReadingCategory.Visit && + x.TrialReadingCriterionId == taskinfo.TrialReadingCriterionId && + x.IsAnalysisCreate == taskinfo.IsAnalysisCreate && + x.DoctorUserId == taskinfo.DoctorUserId && + x.IsSelfAnalysis == taskinfo.IsSelfAnalysis && + x.SubjectId == taskinfo.SubjectId && x.ReadingTaskState == ReadingTaskState.HaveSigned && x.ArmEnum == taskinfo.ArmEnum + && x.VisitTaskNum < taskinfo.VisitTaskNum && x.TaskState == TaskState.Effect) || (x.Id == taskinfo.BeforeConvertedTaskId) + ).OrderByDescending(x => x.VisitTaskNum).Select(x => x.Id).FirstOrDefaultAsync(); - tableRowAnswers.ForEach(x => - { - x.SplitRowId = tableRowAnswers.Where(y => y.OriginalId == x.SplitRowId).Select(y => y.Id).FirstOrDefault(); - x.MergeRowId = tableRowAnswers.Where(y => y.OriginalId == x.MergeRowId).Select(y => y.Id).FirstOrDefault(); - }); - List notNeedCopyMarks = new List() + var copyTableAnswers = await _readingTableQuestionAnswerRepository.Where(x => x.VisitTaskId == LastVisitTaskId).Select(x => new CopyTableAnswerDto() + { + Answer = x.Answer, + QuestionId = x.QuestionId, + RowId = x.RowId, + QuestionMark = x.ReadingTableQuestionTrial.QuestionMark, + TableQuestionId = x.TableQuestionId, + RowIndex = x.RowIndex, + TrialId = x.TrialId + }).ToListAsync(); + + var tableRowAnswers = await _readingTableAnswerRowInfoRepository.Where(x => x.VisitTaskId == LastVisitTaskId).ProjectTo(_mapper.ConfigurationProvider).ToListAsync(); + + + tableRowAnswers.ForEach(x => + { + x.VisitTaskId = visitTaskId; + x.IsCurrentTaskAdd = false; + x.Id = NewId.NextGuid(); + x.SeriesId = null; + x.InstanceId = null; + x.MeasureData = string.Empty; + x.PicturePath = string.Empty; + }); + + tableRowAnswers.ForEach(x => + { + x.SplitRowId = tableRowAnswers.Where(y => y.OriginalId == x.SplitRowId).Select(y => y.Id).FirstOrDefault(); + x.MergeRowId = tableRowAnswers.Where(y => y.OriginalId == x.MergeRowId).Select(y => y.Id).FirstOrDefault(); + + }); + + List notNeedCopyMarks = new List() { QuestionMark.MajorAxis, QuestionMark.ShortAxis, QuestionMark.State, }; - if (taskinfo.IsConvertedTask) - { - notNeedCopyMarks = new List() + if (taskinfo.IsConvertedTask) + { + notNeedCopyMarks = new List() { QuestionMark.MajorAxis, QuestionMark.ShortAxis, }; + } + + var tableAnswers = copyTableAnswers.Select(x => new ReadingTableQuestionAnswer + { + Id = NewId.NextGuid(), + Answer = notNeedCopyMarks.Contains(x.QuestionMark) ? string.Empty : x.Answer, + QuestionId = x.QuestionId, + RowIndex = x.RowIndex, + RowId = tableRowAnswers.Where(y => y.OriginalId == x.RowId).Select(x => x.Id).FirstOrDefault(), + TableQuestionId = x.TableQuestionId, + TrialId = x.TrialId, + VisitTaskId = visitTaskId, + }); + + + + + var addList = _mapper.Map>(tableRowAnswers); + + await _readingTableAnswerRowInfoRepository.AddRangeAsync(addList); + await _readingTableQuestionAnswerRepository.AddRangeAsync(tableAnswers); + await _readingTableQuestionAnswerRepository.SaveChangesAsync(); } - - var tableAnswers = copyTableAnswers.Select(x => new ReadingTableQuestionAnswer - { - Id = NewId.NextGuid(), - Answer = notNeedCopyMarks.Contains(x.QuestionMark) ? string.Empty : x.Answer, - QuestionId = x.QuestionId, - RowIndex = x.RowIndex, - RowId = tableRowAnswers.Where(y => y.OriginalId == x.RowId).Select(x => x.Id).FirstOrDefault(), - TableQuestionId = x.TableQuestionId, - TrialId = x.TrialId, - VisitTaskId = visitTaskId, - }); - - - - - var addList= _mapper.Map>(tableRowAnswers); - - await _readingTableAnswerRowInfoRepository.AddRangeAsync(addList); - await _readingTableQuestionAnswerRepository.AddRangeAsync(tableAnswers); - await _readingTableQuestionAnswerRepository.SaveChangesAsync(); + } } diff --git a/IRaCIS.Core.Application/Service/ReadingCalculate/Interface/IGeneralCalculateService.cs b/IRaCIS.Core.Application/Service/ReadingCalculate/Interface/IGeneralCalculateService.cs index d287260a8..15c06d6d6 100644 --- a/IRaCIS.Core.Application/Service/ReadingCalculate/Interface/IGeneralCalculateService.cs +++ b/IRaCIS.Core.Application/Service/ReadingCalculate/Interface/IGeneralCalculateService.cs @@ -23,5 +23,13 @@ namespace IRaCIS.Core.Application.Service /// /// Task> GetReadingReportTaskList(Guid visitTaskId); + + /// + /// 添加转化任务病灶信息 + /// + /// + /// + /// + Task AddConvertedTaskFocus(Guid visitTaskId, Guid beforeConvertedTaskId); } } diff --git a/IRaCIS.Core.Application/Service/TrialSiteUser/TrialExternalUserService.cs b/IRaCIS.Core.Application/Service/TrialSiteUser/TrialExternalUserService.cs index b8d5c918a..aaebe9c38 100644 --- a/IRaCIS.Core.Application/Service/TrialSiteUser/TrialExternalUserService.cs +++ b/IRaCIS.Core.Application/Service/TrialSiteUser/TrialExternalUserService.cs @@ -1,4 +1,4 @@ -//-------------------------------------------------------------------- +//-------------------------------------------------------------------- // 此代码由T4模板自动生成 byzhouhang 20210918 // 生成时间 2022-03-04 13:33:56 // 对此文件的更改可能会导致不正确的行为,并且如果重新生成代码,这些更改将会丢失。 @@ -81,7 +81,8 @@ namespace IRaCIS.Core.Application.Service { if (existSysUser.LastName != addOrEditTrialExternalUser.LastName || existSysUser.FirstName != addOrEditTrialExternalUser.FirstName) { - return ResponseOutput.NotOk($"该用户在系统中的用户名为:{existSysUser.LastName + " / " + existSysUser.FirstName} 电话:{existSysUser.Phone},与填写信息存在不一致项, 请将界面信息修改为与系统一致,再进行保存", new { existSysUser.LastName, existSysUser.FirstName, existSysUser.Phone, existSysUser.IsZhiZhun, existSysUser.IsTestUser }, ApiResponseCodeEnum.NeedTips); + //$"该用户在系统中的用户名为:{existSysUser.LastName + " / " + existSysUser.FirstName} 电话:{existSysUser.Phone},与填写信息存在不一致项, 请将界面信息修改为与系统一致,再进行保存", + return ResponseOutput.NotOk(_localizer["TrialExternalUser_Inconsistency", existSysUser.LastName + " / " + existSysUser.FirstName, existSysUser.Phone], new { existSysUser.LastName, existSysUser.FirstName, existSysUser.Phone, existSysUser.IsZhiZhun, existSysUser.IsTestUser }, ApiResponseCodeEnum.NeedTips); } } @@ -92,7 +93,8 @@ namespace IRaCIS.Core.Application.Service t.Email == addOrEditTrialExternalUser.Email && t.UserTypeId == addOrEditTrialExternalUser.UserTypeId && t.TrialId == addOrEditTrialExternalUser.TrialId)) { - return ResponseOutput.NotOk("系统已经存在与列表中填写的邮箱和用户类型相同的账户,请确认。"); + //---系统已经存在与列表中填写的邮箱和用户类型相同的账户,请确认。 + return ResponseOutput.NotOk(_localizer["TrialExternalUser_EmailTypeDuplicate"]); } @@ -157,7 +159,8 @@ namespace IRaCIS.Core.Application.Service if (existUser.IsTestUser) { - throw new BusinessValidationFailedException("正式类型 、培训类型的项目 不允许加入测试用户 "); + //---正式类型 、培训类型的项目 不允许加入测试用户 + throw new BusinessValidationFailedException(_localizer["TrialExternalUser_TestUserNotAllowed"]); } } @@ -167,7 +170,8 @@ namespace IRaCIS.Core.Application.Service if (existUser.IsTestUser == false ) { - throw new BusinessValidationFailedException("测试项目 不允许加入正式用户 "); + //---测试项目 不允许加入正式用户 + throw new BusinessValidationFailedException(_localizer["TrialExternalUser_FormalUserNotAllowed"]); } } @@ -204,7 +208,8 @@ namespace IRaCIS.Core.Application.Service } else { - return ResponseOutput.NotOk("人员信息不支持编辑,请删除后重新添加。"); + //---人员信息不支持编辑,请删除后重新添加。 + return ResponseOutput.NotOk(_localizer["TrialExternalUser_NotEditable"]); } } @@ -220,7 +225,8 @@ namespace IRaCIS.Core.Application.Service if (await _trialUserRepository.AnyAsync(t => t.TrialId == trialExternalUser.TrialId && t.UserId == trialExternalUser.SystemUserId)) { - return ResponseOutput.NotOk("当前用户已参与到项目,不允许删除"); + //---当前用户已参与到项目,不允许删除 + return ResponseOutput.NotOk(_localizer["TrialExternalUser_CannotDelete"]); } @@ -314,7 +320,11 @@ namespace IRaCIS.Core.Application.Service {sysUserInfo.LastName + "/" + sysUserInfo.FirstName}:
- 您好,展影医疗作为 实验方案号:{trialInfo.ResearchProgramNo} 项目的IRC供应商,诚邀您参加该项目IRC相关工作,欢迎您提供指导和建议,非常感谢! + { + //您好,展影医疗作为 实验方案号:{trialInfo.ResearchProgramNo} 项目的IRC供应商,诚邀您参加该项目IRC相关工作,欢迎您提供指导和建议,非常感谢! + _localizer["TrialExternalUser_IRCInvitation", trialInfo.ResearchProgramNo] + } +
@@ -377,7 +387,8 @@ namespace IRaCIS.Core.Application.Service if (DateTime.Now > needUpdate.ExpireTime) { - return ResponseOutput.NotOk("邀请加入时间已过期,重新被邀请后才可以进行确认操作"); + //---邀请加入时间已过期,重新被邀请后才可以进行确认操作 + return ResponseOutput.NotOk(_localizer["TrialExternalUser_InvitationExpired"]); } _mapper.Map(editTrialUserPreparation, needUpdate); @@ -409,7 +420,8 @@ namespace IRaCIS.Core.Application.Service //收件地址 messageToSend.To.Add(new MailboxAddress(String.Empty, needUpdate.Email)); //主题 - messageToSend.Subject = $"[来自展影IRC] [{trialInfo.ResearchProgramNo}] 账户信息"; + //$"[来自展影IRC] [{trialInfo.ResearchProgramNo}] 账户信息"; + messageToSend.Subject = _localizer["TrialExternalUser_AccountInfo", trialInfo.ResearchProgramNo]; var builder = new BodyBuilder(); @@ -430,30 +442,63 @@ namespace IRaCIS.Core.Application.Service
{sysUserInfo.LastName + "/" + sysUserInfo.FirstName}:
-
- 您好,欢迎您参加项目 实验方案号:{trialInfo.ResearchProgramNo}IRC相关工作。该项目采用电子化工作流,系统及您的账号信息如下: +
+{ + // 您好,欢迎您参加项目 实验方案号:{trialInfo.ResearchProgramNo}IRC相关工作。该项目采用电子化工作流,系统及您的账号信息如下: + _localizer["TrialExternalUser_Welcome", trialInfo.ResearchProgramNo] + } +
- 项目编号: {trialInfo.TrialCode} + +{ + // 项目编号: {trialInfo.TrialCode} + _localizer["TrialExternalUser_ProjectNumber", trialInfo.TrialCode] + }
- 试验方案号: {trialInfo.ResearchProgramNo} + +{ + // 试验方案号: {trialInfo.ResearchProgramNo} + _localizer["TrialExternalUser_ExperimentPlanNumber", trialInfo.ResearchProgramNo] + }
- 试验名称: {trialInfo.ExperimentName} + +{ + // 试验名称: {trialInfo.ExperimentName} + _localizer["TrialExternalUser_ExperimentName", trialInfo.ExperimentName] + }
- 用户名: {sysUserInfo.UserName} + +{ + // 用户名: {sysUserInfo.UserName} + _localizer["TrialExternalUser_Username", sysUserInfo.UserName] + }
- 密码: {(sysUserInfo.IsFirstAdd ? verificationCode.ToString() + "(请在登录后进行修改)" : "***(您已有账号, 若忘记密码, 请通过邮箱找回)")} -
+ + +{ + // 密码: {(sysUserInfo.IsFirstAdd ? verificationCode.ToString() + "(请在登录后进行修改)" : "***(您已有账号, 若忘记密码, 请通过邮箱找回)")} + _localizer["TrialExternalUser_Password", verificationCode.ToString()] + } +
- 角色: {sysUserInfo.UserTypeRole.UserTypeShortName} + +{ + // 角色: {sysUserInfo.UserTypeRole.UserTypeShortName} + _localizer["TrialExternalUser_Role", sysUserInfo.UserTypeRole.UserTypeShortName] + }
系统登录地址: {editTrialUserPreparation.BaseUrl} +{ + // 系统登录地址: {editTrialUserPreparation.BaseUrl} + _localizer["TrialExternalUser_LoginUrl", editTrialUserPreparation.BaseUrl] + }
@@ -539,7 +584,8 @@ namespace IRaCIS.Core.Application.Service if (DateTime.Now > needUpdate.ExpireTime) { - return ResponseOutput.NotOk("邀请加入时间已过期,重新被邀请后才可以进行确认操作"); + //---邀请加入时间已过期,重新被邀请后才可以进行确认操作 + return ResponseOutput.NotOk(_localizer["TrialExternalUser_InvitationExpired"]); } _mapper.Map(editInfo, needUpdate); @@ -549,7 +595,8 @@ namespace IRaCIS.Core.Application.Service if (needUpdate.SystemUserId == null) { - return ResponseOutput.NotOk("调研表系统用户Id 存储有问题"); + //---调研表系统用户Id 存储有问题 + return ResponseOutput.NotOk(_localizer["TrialExternalUser_UserIdStorageProblem"]); } var trialId = needUpdate.TrialSiteSurvey.TrialId; @@ -579,7 +626,8 @@ namespace IRaCIS.Core.Application.Service //收件地址 messageToSend.To.Add(new MailboxAddress(String.Empty, editInfo.IsJoin == true ? needUpdate.Email : revieweUser.EMail)); //主题 - messageToSend.Subject = $"[来自展影IRC] [{trialInfo.ResearchProgramNo}] 账户信息"; + // $"[来自展影IRC] [{trialInfo.ResearchProgramNo}] 账户信息"; + messageToSend.Subject = _localizer["TrialExternalUser_IRCAccountInfo", trialInfo.ResearchProgramNo]; var builder = new BodyBuilder(); diff --git a/IRaCIS.Core.Application/Service/TrialSiteUser/TrialMaintenanceService.cs b/IRaCIS.Core.Application/Service/TrialSiteUser/TrialMaintenanceService.cs index 02ba57fe7..2a360d85d 100644 --- a/IRaCIS.Core.Application/Service/TrialSiteUser/TrialMaintenanceService.cs +++ b/IRaCIS.Core.Application/Service/TrialSiteUser/TrialMaintenanceService.cs @@ -219,7 +219,8 @@ namespace IRaCIS.Application.Services if (await _repository.AnyAsync(t => t.UserId == trialUser.UserId && t.TrialId == trialUser.TrialId)) { - return ResponseOutput.NotOk("Participant has participated in site maintenance"); + //---人员已加入现场维护 + return ResponseOutput.NotOk(_localizer["TrialMaint_PersonnelJoined"]); } if (_userInfo.UserTypeEnumInt == (int)UserTypeEnum.IQC && isDelete) diff --git a/IRaCIS.Core.Application/Service/TrialSiteUser/TrialService.cs b/IRaCIS.Core.Application/Service/TrialSiteUser/TrialService.cs index f9fbf7ccf..78cd34c0c 100644 --- a/IRaCIS.Core.Application/Service/TrialSiteUser/TrialService.cs +++ b/IRaCIS.Core.Application/Service/TrialSiteUser/TrialService.cs @@ -137,20 +137,23 @@ namespace IRaCIS.Application.Services // 到时候 策略授权 统一改 归类 if (!(_userInfo.UserTypeEnumInt == (int)UserTypeEnum.APM || _userInfo.UserTypeEnumInt == (int)UserTypeEnum.ProjectManager || _userInfo.UserTypeEnumInt == (int)UserTypeEnum.SuperAdmin)) { - throw new BusinessValidationFailedException("只有PM/APM拥有操作权限!"); + //---只有PM/APM拥有操作权限! + throw new BusinessValidationFailedException(_localizer["Trial_PMApmPermission"]); } //测试用户 只能创建非正式项目 if (_userInfo.IsTestUser && trialAddModel.TrialType != TrialType.NoneOfficial) { - throw new BusinessValidationFailedException("测试用户 只能创建非正式项目"); + //---测试用户 只能创建非正式项目 + throw new BusinessValidationFailedException(_localizer["Trial_TestUserCreateOnlyNonFormal"]); } if (trialAddModel.Id == Guid.Empty || trialAddModel.Id == null) { if (await _trialRepository.AnyAsync(u => u.TrialCode == trialAddModel.TrialCode)) { - throw new BusinessValidationFailedException("已经存在相同的项目编号。"); + //---已经存在相同的项目编号。 + throw new BusinessValidationFailedException(_localizer["Trial_DuplicateProjectNumber"]); } var dbMaxCode = await _trialRepository.Where(t => t.CreateTime.Year == DateTime.Now.Year && t.TrialType == trialAddModel.TrialType).Select(t => t.Code).DefaultIfEmpty().MaxAsync(); @@ -205,13 +208,15 @@ namespace IRaCIS.Application.Services if (!await _repository.AnyAsync(u => u.Id == trialAddModel.Id && (u.TrialStatusStr == StaticData.TrialState.TrialInitializing || u.TrialStatusStr == StaticData.TrialState.TrialOngoing))) { - throw new BusinessValidationFailedException("项目状态只有处于:初始化或者进行中时,才允许操作。"); + //---项目状态只有处于:初始化或者进行中时,才允许操作。 + throw new BusinessValidationFailedException(_localizer["Trial_InvalidProjectStatus"]); } // 判断项目Id 是否已经存在 if (await _repository.AnyAsync(u => u.TrialCode == updateModel.TrialCode && u.Id != updateModel.Id)) { - throw new BusinessValidationFailedException("已经存在相同的项目编号。"); + //---已经存在相同的项目编号。 + throw new BusinessValidationFailedException(_localizer["Trial_DuplicateProjectNumber"]); } @@ -539,7 +544,8 @@ namespace IRaCIS.Application.Services else { - return ResponseOutput.NotOk("当前运行环境下,不允许删除项目数据。"); + //---当前运行环境下,不允许删除项目数据。 + return ResponseOutput.NotOk(_localizer["Trial_CannotDeleteProject"]); } @@ -668,4 +674,4 @@ namespace IRaCIS.Application.Services } -} \ No newline at end of file +} diff --git a/IRaCIS.Core.Application/Service/TrialSiteUser/TrialSiteService.cs b/IRaCIS.Core.Application/Service/TrialSiteUser/TrialSiteService.cs index 075481164..9b1b6ed71 100644 --- a/IRaCIS.Core.Application/Service/TrialSiteUser/TrialSiteService.cs +++ b/IRaCIS.Core.Application/Service/TrialSiteUser/TrialSiteService.cs @@ -250,17 +250,20 @@ namespace IRaCIS.Core.Application.Services //if (await _repository.AnyAsync(t => t.TrialId == trialId && t.SiteId == siteId)) //{ - // return ResponseOutput.NotOk("The site has been associated with CRC, and couldn't be deleted."); + //---The site has been associated with CRC, and couldn't be deleted. + // return ResponseOutput.NotOk(_localizer["TrialSite_CannotDeleteAssociatedCRC"]); //} if (await _repository.AnyAsync(t => t.SiteId == siteId && t.TrialId == trialId)) { - return ResponseOutput.NotOk("The subjects has been added to this site, and couldn't be disable."); + //---The subjects has been added to this site, and couldn't be disable. + return ResponseOutput.NotOk(_localizer["TrialSite_ParticipantJoined"]); } //if (await _repository.AnyAsync(t => t.SiteId == siteId && t.TrialId == trialId)) //{ - // return ResponseOutput.NotOk("The site has been uploaded study, and couldn't be deleted."); + //---The site has been uploaded study, and couldn't be deleted. + // return ResponseOutput.NotOk(_localizer["TrialSite_CannotDeleteUploadedData"]); //} @@ -269,7 +272,8 @@ namespace IRaCIS.Core.Application.Services { if (await _trialSiteRepository.AnyAsync(t => t.Id != editTrialSiteCommand.Id && t.TrialSiteCode == editTrialSiteCommand.TrialSiteCode && t.TrialId == editTrialSiteCommand.TrialId)) { - return ResponseOutput.NotOk("Code is not allowed to be repeated"); + //---Code is not allowed to be repeated + return ResponseOutput.NotOk(_localizer["TrialSite_CodeDuplicate"]); } } @@ -360,16 +364,19 @@ namespace IRaCIS.Core.Application.Services if (await _repository.AnyAsync(t => t.TrialId == trialId && t.SiteId == siteId)) { - return ResponseOutput.NotOk("The site has been associated with CRC, and couldn't be deleted."); + //---The site has been associated with CRC, and couldn't be deleted. + return ResponseOutput.NotOk(_localizer["TrialSite_CannotDeleteAssociatedCRC"]); } if (await _repository.AnyAsync(t => t.SiteId == siteId && t.TrialId == trialId)) { - return ResponseOutput.NotOk("The subjects has been added to this site, and couldn't be deleted."); + //---The subjects has been added to this site, and couldn't be deleted. + return ResponseOutput.NotOk(_localizer["TrialSite_CannotDeleteAssociatedSubject"]); } if (await _repository.AnyAsync(t => t.SiteId == siteId && t.TrialId == trialId)) { - return ResponseOutput.NotOk("The site has been uploaded study, and couldn't be deleted."); + //---The site has been uploaded study, and couldn't be deleted. + return ResponseOutput.NotOk(_localizer["TrialSite_CannotDeleteUploadedData"]); } await _repository.DeleteAsync(relation); @@ -379,4 +386,4 @@ namespace IRaCIS.Core.Application.Services } -} \ No newline at end of file +} diff --git a/IRaCIS.Core.Application/Service/Visit/SubjectService.cs b/IRaCIS.Core.Application/Service/Visit/SubjectService.cs index e6ba5f65d..3c20b6b25 100644 --- a/IRaCIS.Core.Application/Service/Visit/SubjectService.cs +++ b/IRaCIS.Core.Application/Service/Visit/SubjectService.cs @@ -34,13 +34,15 @@ namespace IRaCIS.Application.Services var svlist = new List(); if (await _repository.AnyAsync(t => t.Id == subjectCommand.TrialId && !t.VisitPlanConfirmed)) { - return ResponseOutput.NotOk("项目访视计划没有确认。请联系项目经理确认项目访视计划后,再添加受试者。"); + //---项目访视计划没有确认。请联系项目经理确认项目访视计划后,再添加受试者。 + return ResponseOutput.NotOk(_localizer["Subject_NoConfirmedPlan"]); } var verifyExp1 = new EntityVerifyExp() { VerifyExp = u => u.Code == subjectCommand.Code && u.TrialId == subjectCommand.TrialId, - VerifyMsg = "已存在具有相关受试者编号的受试者。" + //---已存在具有相关受试者编号的受试者。 + VerifyMsg = _localizer["Subject_DuplicateSubjectNum"] }; @@ -91,7 +93,8 @@ namespace IRaCIS.Application.Services if (await _subjectVisitRepository.AnyAsync(u => u.SubjectId == id && u.VisitExecuted == VisitExecutedEnum.Executed)) { - return ResponseOutput.NotOk("该受试者已经有访视已经上传影像,不允许删除。"); + //---该受试者已经有访视已经上传影像,不允许删除。 + return ResponseOutput.NotOk(_localizer["Subject_UploadedVisitNoDelete"]); } await _subjectRepository.UpdatePartialFromQueryAsync(id, x => new Subject diff --git a/IRaCIS.Core.Application/Service/Visit/SubjectVisitService.cs b/IRaCIS.Core.Application/Service/Visit/SubjectVisitService.cs index ae384aa17..a9c07be8f 100644 --- a/IRaCIS.Core.Application/Service/Visit/SubjectVisitService.cs +++ b/IRaCIS.Core.Application/Service/Visit/SubjectVisitService.cs @@ -80,20 +80,23 @@ namespace IRaCIS.Core.Application.Services var verifyExp1 = new EntityVerifyExp() { VerifyExp = t => t.VisitNum == svCommand.VisitNum && t.SubjectId == svCommand.SubjectId, - VerifyMsg = "该受试者的访视计划中已经包含一个具有相同访视号的访视。" + //---该受试者的访视计划中已经包含一个具有相同访视号的访视。 + VerifyMsg = _localizer["Visit_DuplicateVisitNo"] }; var verifyExp2 = new EntityVerifyExp() { VerifyExp = t => t.SubjectId == svCommand.SubjectId && t.IsFinalVisit, - VerifyMsg = "该受试者已经有访视设置为末次访视,不允许将当前访视设置为末次访视。", + //---该受试者已经有访视设置为末次访视,不允许将当前访视设置为末次访视。 + VerifyMsg = _localizer["Visit_LastVisitNoChange"], IsVerify = svCommand.IsFinalVisit }; var verifyExp3 = new EntityVerifyExp() { VerifyExp = t => t.SubjectId == svCommand.SubjectId && t.VisitName == svCommand.VisitName, - VerifyMsg = "该受试者的访视计划中已经包含一个具有相同访视名称的访视。" + //---该受试者的访视计划中已经包含一个具有相同访视名称的访视。 + VerifyMsg = _localizer["Visit_DuplicateVisitName"] }; @@ -113,12 +116,14 @@ namespace IRaCIS.Core.Application.Services { if (await _subjectVisitRepository.AnyAsync(t => t.SubjectId == svCommand.SubjectId && t.IsFinalVisit)) { - throw new BusinessValidationFailedException("设置末次评估后,不允许添加计划外访视。"); + //---设置末次评估后,不允许添加计划外访视。 + throw new BusinessValidationFailedException(_localizer["Visit_NoExtraVisitAfterLast"]); } if (await _repository.AnyAsync(t => t.SubjectId == svCommand.SubjectId && t.TaskState == TaskState.Effect && t.VisitTaskNum > svCommand.VisitNum && t.SignTime != null && t.TrialReadingCriterion.IsReadingTaskViewInOrder)) { - throw new BusinessValidationFailedException("该受试者后续访视已有任务完成阅片(有序阅片标准),不允许在此添加,如果确实需要,请回退"); + //---该受试者后续访视已有任务完成阅片(有序阅片标准),不允许在此添加,如果确实需要,请回退 + throw new BusinessValidationFailedException(_localizer["Visit_FinishedTasksNoAdd"]); } } @@ -150,19 +155,22 @@ namespace IRaCIS.Core.Application.Services if (svCommand.PDState != dbBeforeEntity.PDState && dbBeforeEntity.SubmitState == SubmitStateEnum.Submitted) { - throw new BusinessValidationFailedException("当前访视影像提交后,不允许修改PD确认状态。"); + //---当前访视影像提交后,不允许修改PD确认状态。 + throw new BusinessValidationFailedException(_localizer["Visit_NoPDStatusChangeAfterSubmission"]); } if (svCommand.PDState != dbBeforeEntity.PDState && dbBeforeEntity.RequestBackState == RequestBackStateEnum.PM_AgressBack) { - throw new BusinessValidationFailedException("当前访视为回退的访视,不允许修改PD确认状态。"); + //---当前访视影像提交后,不允许修改PD确认状态。 + throw new BusinessValidationFailedException(_localizer["Visit_NoPDStatusChangeAfterSubmission"]); } if (svCommand.IsLostVisit) { if (await _subjectVisitRepository.AnyAsync(t => t.Id == svCommand.Id && t.SubmitState == SubmitStateEnum.ToSubmit)) { - throw new BusinessValidationFailedException("当前访视已经有有影像上传,不允许设置为失访。"); + //---当前访视已经有影像上传,不允许设置为失访。 + throw new BusinessValidationFailedException(_localizer["Visit_UploadedNoLost"]); } } @@ -211,15 +219,18 @@ namespace IRaCIS.Core.Application.Services { if (await _repository.AnyAsync(t => t.SubjectVisitId == id)) { - return ResponseOutput.NotOk("当前访视已经有影像上传,不允许删除。"); + //---当前访视已经有影像上传,不允许删除。 + return ResponseOutput.NotOk(_localizer["Visit_UploadedNoDelete"]); } if (await _subjectVisitRepository.AnyAsync(t => t.Id == id && t.InPlan)) { - return ResponseOutput.NotOk("计划内的访视不允许删除。"); + //---计划内的访视不允许删除。 + return ResponseOutput.NotOk(_localizer["Visit_PlanVisitNoDelete"]); } if (await _subjectVisitRepository.AnyAsync(t => t.OutPlanPreviousVisitId == id)) { - return ResponseOutput.NotOk("当前访视已经被设置为另一访视的上一访视,不允许删除。"); + //---当前访视已经被设置为另一访视的上一访视,不允许删除。 + return ResponseOutput.NotOk(_localizer["Visit_PreviousVisitNoDelete"]); } await _subjectVisitRepository.DeleteFromQueryAsync(s => s.Id == id, true); diff --git a/IRaCIS.Core.Application/Service/Visit/VisitPlanService.cs b/IRaCIS.Core.Application/Service/Visit/VisitPlanService.cs index ddcc327aa..6a868048b 100644 --- a/IRaCIS.Core.Application/Service/Visit/VisitPlanService.cs +++ b/IRaCIS.Core.Application/Service/Visit/VisitPlanService.cs @@ -128,7 +128,8 @@ namespace IRaCIS.Application.Services //比当前 visitNum小的 visitDay的最大值 还小 不允许添加 if (visitPlan.VisitDay <= visitPlanList.Where(t => t.VisitNum < visitPlan.VisitNum).Select(t => t.VisitDay).Max()) { - throw new BusinessValidationFailedException("访视计划中,访视号大的访视,其访视间隔也应该比访视号小的访视大。"); + //---访视计划中,访视号大的访视,其访视间隔也应该比访视号小的访视大。 + throw new BusinessValidationFailedException(_localizer["VisitPlan_LargerVisitNumLargerInterval"]); } } @@ -137,7 +138,8 @@ namespace IRaCIS.Application.Services { if (visitPlan.VisitDay >= visitPlanList.Where(t => t.VisitNum > visitPlan.VisitNum).Select(t => t.VisitDay).Min()) { - throw new BusinessValidationFailedException("访视计划中,访视号大的计划访视,其访视间隔也应该比访视号小的计划访视大。"); + //---访视计划中,访视号大的计划访视,其访视间隔也应该比访视号小的计划访视大。 + throw new BusinessValidationFailedException(_localizer["VisitPlan_LargerPlanNumLargerInterval"]); } } @@ -148,12 +150,14 @@ namespace IRaCIS.Application.Services if (await _visitStageRepository.AnyAsync(t => t.TrialId == visitPlan.TrialId && (t.VisitName == visitPlan.VisitName || t.VisitNum == visitPlan.VisitNum), true)) { - throw new BusinessValidationFailedException("访视计划中已经存在具有项目访视名称或者访视号的计划访视模板。"); + //---访视计划中已经存在具有项目访视名称或者访视号的计划访视模板。 + throw new BusinessValidationFailedException(_localizer["VisitPlan_ExistNameOrNumTemplate"]); } if (await _visitStageRepository.AnyAsync(t => t.TrialId == visitPlan.TrialId && t.IsBaseLine, true) && visitPlan.IsBaseLine) { - throw new BusinessValidationFailedException("访视计划中已经存在基线。"); + //---访视计划中已经存在基线。 + throw new BusinessValidationFailedException(_localizer["VisitPlan_ExistBaseline"]); } //不用前端传递的值 @@ -171,12 +175,14 @@ namespace IRaCIS.Application.Services if (await _visitStageRepository.AnyAsync(t => t.TrialId == visitPlan.TrialId && (t.VisitName == visitPlan.VisitName || t.VisitNum == visitPlan.VisitNum) && t.Id != visitPlan.Id, true)) { - throw new BusinessValidationFailedException("访视计划中已经存在具有项目访视名称或者访视号的计划访视模板。"); + //---访视计划中已经存在具有项目访视名称或者访视号的计划访视模板。 + throw new BusinessValidationFailedException(_localizer["VisitPlan_ExistNameOrNumTemplate"]); } if (await _visitStageRepository.AnyAsync(t => t.TrialId == visitPlan.TrialId && t.IsBaseLine && t.Id != visitPlan.Id, true) && visitPlan.IsBaseLine) { - throw new BusinessValidationFailedException("访视计划中已经存在基线。"); + //---访视计划中已经存在基线。 + throw new BusinessValidationFailedException(_localizer["VisitPlan_ExistBaseline"]); } visitPlan.IsConfirmed = false; @@ -189,7 +195,8 @@ namespace IRaCIS.Application.Services { if (await _repository.Where(t => t.TrialId == visitPlan.TrialId).AnyAsync(v => v.IsBaseLine && v.SubmitState >= SubmitStateEnum.ToSubmit)) { - throw new BusinessValidationFailedException("有受试者的基线已经上传了影像数据,不允许修改基线访视。"); + //---有受试者的基线已经上传了影像数据,不允许修改基线访视。 + throw new BusinessValidationFailedException(_localizer["VisitPlan_ExistBaselineImgNoModify"]); } } @@ -213,24 +220,28 @@ namespace IRaCIS.Application.Services { if (!await _trialRepository.AnyAsync(t => t.Id == trialId && (t.TrialStatusStr == StaticData.TrialState.TrialInitializing || t.TrialStatusStr == StaticData.TrialState.TrialOngoing))) { - return ResponseOutput.NotOk("仅仅在项目初始化或者进行中时,才允许修改确认"); + //---仅仅在项目初始化或者进行中时,才允许修改确认 + return ResponseOutput.NotOk(_localizer["VisitPlan_OnlyInitOrOngoingModifyConfirm"]); } if (!await _visitStageRepository.AnyAsync(t => t.TrialId == trialId && t.IsBaseLine)) { - return ResponseOutput.NotOk("没有基线,不允许确认"); + //---没有基线,不允许确认 + return ResponseOutput.NotOk(_localizer["VisitPlan_NoBaselineNotConfirm"]); } if (!await _trialRepository.AnyAsync(t => t.Id == trialId && t.IsTrialBasicLogicConfirmed && t.IsTrialProcessConfirmed && t.IsTrialUrgentConfirmed)) { - return ResponseOutput.NotOk("项目配置未确认,不允许确认访视计划"); + //---项目配置未确认,不允许确认访视计划 + return ResponseOutput.NotOk(_localizer["VisitPlan_ConfigNotConfirmNotConfirm"]); } var svList = await _visitStageRepository.Where(t => t.TrialId == trialId).Select(u => new { u.VisitDay, u.IsBaseLine }).ToListAsync(); if (svList.Min(t => t.VisitDay) != svList.Where(t => t.IsBaseLine).FirstOrDefault()?.VisitDay) { - return ResponseOutput.NotOk("基线VisitDay 不是最小的, 不允许确认"); + //---基线VisitDay 不是最小的, 不允许确认 + return ResponseOutput.NotOk(_localizer["VisitPlan_BaselineNotMinDayNotConfirm"]); } @@ -480,7 +491,8 @@ namespace IRaCIS.Application.Services var result = await exporter.ExportAsByteArray(list); - return new XlsxFileResult(bytes: result, fileDownloadName: $"检查导出_{DateTime.Now.ToString("yyyy-MM-dd:hh:mm:ss")}.xlsx"); + //$"检查导出_{DateTime.Now.ToString("yyyy-MM-dd:hh:mm:ss")}.xlsx" + return new XlsxFileResult(bytes: result, fileDownloadName: _localizer["VisitPlan_CheckExport", DateTime.Now.ToString("yyyy-MM-dd:hh:mm:ss")]); } @@ -498,7 +510,8 @@ namespace IRaCIS.Application.Services if (visitPlan == null) return Null404NotFound(visitPlan); if (await _repository.AnyAsync(t => t.VisitName == visitPlan.VisitName && t.TrialId == visitPlan.TrialId && t.VisitExecuted == VisitExecutedEnum.Executed)) { - return ResponseOutput.NotOk("The visit plan has been assigned to the subjects and executed."); + //---The visit plan has been assigned to the subjects and executed. + return ResponseOutput.NotOk(_localizer["VisitPlan_Assigned"]); } await _repository.BatchDeleteAsync(t => t.TrialId == visitPlan.TrialId && t.VisitName == visitPlan.VisitName); @@ -510,4 +523,4 @@ namespace IRaCIS.Application.Services } -} \ No newline at end of file +} diff --git a/IRaCIS.Core.Application/Service/WorkLoad/DoctorWorkloadService.cs b/IRaCIS.Core.Application/Service/WorkLoad/DoctorWorkloadService.cs index 38a259d45..4c44f29b0 100644 --- a/IRaCIS.Core.Application/Service/WorkLoad/DoctorWorkloadService.cs +++ b/IRaCIS.Core.Application/Service/WorkLoad/DoctorWorkloadService.cs @@ -128,7 +128,8 @@ namespace IRaCIS.Application.Services if (readingCategoryList.Except(inDto.ReadingCategorys).Count() > 0) { - return ResponseOutput.NotOk("已分配任务,不允许减少阅片类型"); + //---已分配任务,不允许减少阅片类型 + return ResponseOutput.NotOk(_localizer["DoctorWorkload_AssignType"]); } @@ -658,7 +659,8 @@ namespace IRaCIS.Application.Services if (await _doctorWorkloadRepository.AnyAsync(workloadLambda)) { - return ResponseOutput.NotOk("This type of data can only have one"); + //---This type of data can only have one + return ResponseOutput.NotOk(_localizer["DoctorWorkload_Unique"]); } } @@ -669,7 +671,8 @@ namespace IRaCIS.Application.Services doctorworkloadLambda = doctorworkloadLambda.And(t => t.DataFrom == (int)WorkLoadFromStatus.Doctor); if (await _doctorWorkloadRepository.AnyAsync(doctorworkloadLambda)) { - return ResponseOutput.NotOk("This type of data can only have one"); + //---This type of data can only have one + return ResponseOutput.NotOk(_localizer["DoctorWorkload_Unique"]); } } @@ -698,7 +701,8 @@ namespace IRaCIS.Application.Services if (isLocked) { - return ResponseOutput.NotOk("Expenses have been settled and workload cannot be modified."); + //---Expenses have been settled and workload cannot be modified. + return ResponseOutput.NotOk(_localizer["DoctorWorkload_FeeSettled"]); } diff --git a/IRaCIS.Core.Application/Service/WorkLoad/EnrollService.cs b/IRaCIS.Core.Application/Service/WorkLoad/EnrollService.cs index a0eee033a..cddcbe244 100644 --- a/IRaCIS.Core.Application/Service/WorkLoad/EnrollService.cs +++ b/IRaCIS.Core.Application/Service/WorkLoad/EnrollService.cs @@ -259,7 +259,8 @@ namespace IRaCIS.Application.Services } return ResponseOutput.Result(await _enrollRepository.SaveChangesAsync()); } - return ResponseOutput.NotOk($"Cannot find trial {trialId}"); + //$"Cannot find trial {trialId}" + return ResponseOutput.NotOk(_localizer["Enroll_NotFound", trialId]); } /// @@ -387,7 +388,8 @@ namespace IRaCIS.Application.Services if (errorList.Count() > 0) { - return ResponseOutput.NotOk(string.Join(',', errorList.Select(c => c.LastName+" / "+c.FirstName)) +"邮箱格式存在问题") ; + // errorList.Select(c => c.LastName+" / "+c.FirstName)) +"邮箱格式存在问题" + return ResponseOutput.NotOk(string.Join(',', _localizer["Enroll_EmailFormat"], errorList.Select(c => c.LastName + " / " + c.FirstName))) ; } if (confirmReviewerCommand.ConfirmState == 1) //确认入组 @@ -489,7 +491,8 @@ namespace IRaCIS.Application.Services u.Downtime); if (sum != 0) { - return ResponseOutput.NotOk("Reviewers with workload cannot go back"); + //---Reviewers with workload cannot go back + return ResponseOutput.NotOk(_localizer["Enroll_CannotRollback"]); } intoGroupItem.EnrollStatus = EnrollStatus.InviteIntoGroup; diff --git a/IRaCIS.Core.Application/Triggers/AddlTrialUserTrigger.cs b/IRaCIS.Core.Application/Triggers/AddlTrialUserTrigger.cs index 795223969..b89ffbf42 100644 --- a/IRaCIS.Core.Application/Triggers/AddlTrialUserTrigger.cs +++ b/IRaCIS.Core.Application/Triggers/AddlTrialUserTrigger.cs @@ -11,7 +11,7 @@ namespace IRaCIS.Core.Application.Triggers { // 统一处理 外部用户、中心调研(先添加 再发送邮件)、参与医生加入到项目 ----废弃 - public class AddlTrialUserTrigger : IBeforeSaveTrigger + public class AddlTrialUserTrigger :BaseService, IBeforeSaveTrigger { private readonly IRepository _trialRepository; @@ -41,7 +41,8 @@ namespace IRaCIS.Core.Application.Triggers if (user.IsTestUser) { - throw new BusinessValidationFailedException("正式类型 、培训类型的项目 不允许加入测试用户 "); + //---正式类型 、培训类型的项目 不允许加入测试用户 + throw new BusinessValidationFailedException(_localizer["AddlTrialUser_NoTestUser"]); } } @@ -51,7 +52,8 @@ namespace IRaCIS.Core.Application.Triggers if (user.IsTestUser == false ) { - throw new BusinessValidationFailedException("测试项目 不允许加入正式用户 "); + //---测试项目 不允许加入正式用户 + throw new BusinessValidationFailedException(_localizer["AddlTrialUser_NoFormalUser"]); } } @@ -60,4 +62,4 @@ namespace IRaCIS.Core.Application.Triggers } -} \ No newline at end of file +} diff --git a/IRaCIS.Core.Application/Triggers/SubjectStateTrigger.cs b/IRaCIS.Core.Application/Triggers/SubjectStateTrigger.cs index 7983ca9d7..a6e41756f 100644 --- a/IRaCIS.Core.Application/Triggers/SubjectStateTrigger.cs +++ b/IRaCIS.Core.Application/Triggers/SubjectStateTrigger.cs @@ -9,7 +9,7 @@ namespace IRaCIS.Core.Application.Triggers /// /// /// - public class SubjectStateTrigger : IAfterSaveTrigger + public class SubjectStateTrigger :BaseService, IAfterSaveTrigger { private readonly IRepository _subjectVisitRepository; private readonly IRepository _repository; @@ -67,7 +67,8 @@ namespace IRaCIS.Core.Application.Triggers { throw new BusinessValidationFailedException( - "该受试者已经有访视被设置为末次访视,不允许将当前访视设置为末次访视。"); + //---该受试者已经有访视被设置为末次访视,不允许将当前访视设置为末次访视。 + _localizer["SubjectState_CannotSetCurrentAsLastVisit"]); } var sv = await _subjectVisitRepository.FirstOrDefaultAsync(t => t.Id == dbSubject.FinalSubjectVisitId).IfNullThrowException(); @@ -76,7 +77,8 @@ namespace IRaCIS.Core.Application.Triggers { throw new BusinessValidationFailedException( - "该受试者当前访视后有访视的影像已上传,当前访视不允许设置为末次访视。"); + //---该受试者当前访视后有访视的影像已上传,当前访视不允许设置为末次访视。 + _localizer["SubjectState_CannotSetAsLastVisitWithImage"]); } @@ -95,4 +97,4 @@ namespace IRaCIS.Core.Application.Triggers } } -} \ No newline at end of file +} diff --git a/IRaCIS.Core.Application/Triggers/SubjectVisitFinalVisitTrigger.cs b/IRaCIS.Core.Application/Triggers/SubjectVisitFinalVisitTrigger.cs index 4f9665048..7483c9b7b 100644 --- a/IRaCIS.Core.Application/Triggers/SubjectVisitFinalVisitTrigger.cs +++ b/IRaCIS.Core.Application/Triggers/SubjectVisitFinalVisitTrigger.cs @@ -10,7 +10,7 @@ namespace IRaCIS.Core.Application.Triggers /// /// 处理 访视 末次评估 会影响Subject 状态 /// - public class SubjectVisitFinalVisitTrigger : IAfterSaveTrigger + public class SubjectVisitFinalVisitTrigger :BaseService, IAfterSaveTrigger { private readonly IRepository _subjectVisitRepository; private readonly IRepository _readingPeriodSetRepository; @@ -180,7 +180,8 @@ namespace IRaCIS.Core.Application.Triggers if (await _subjectVisitRepository.AnyAsync(t => t.SubjectId == subjectVisit.SubjectId && t.VisitNum > subjectVisit.VisitNum && (t.SubmitState == SubmitStateEnum.ToSubmit || t.SubmitState == SubmitStateEnum.Submitted))) { - throw new BusinessValidationFailedException("该受试者已有后续访视已上传影像或已提交,当前访视不允许设置为末次访视。"); + //---该受试者已有后续访视已上传影像或已提交,当前访视不允许设置为末次访视。 + throw new BusinessValidationFailedException(_localizer["SubjectVisit_CannotSetAsLastVisit"]); } } diff --git a/IRaCIS.Core.Domain.Share/Reading/ReadEnum.cs b/IRaCIS.Core.Domain.Share/Reading/ReadEnum.cs index ed3ed7236..aeb673415 100644 --- a/IRaCIS.Core.Domain.Share/Reading/ReadEnum.cs +++ b/IRaCIS.Core.Domain.Share/Reading/ReadEnum.cs @@ -49,6 +49,11 @@ namespace IRaCIS.Core.Domain.Share /// 既往任务Id 不包括自己 /// PastResult = 1, + + /// + /// 报告 包括自己 + /// + ReportResult = 2, } /// @@ -1194,10 +1199,15 @@ namespace IRaCIS.Core.Domain.Share /// DaysBetween = 22, + /// + /// 新病灶评估 + /// + NewLesionEvaluation = 30, + /// /// 是否脑转移 /// - IsBrainMetastasis=43, + IsBrainMetastasis =43, /// /// 是否转变之后表格问题 diff --git a/IRaCIS.Core.Domain/Allocation/VisitTask.cs b/IRaCIS.Core.Domain/Allocation/VisitTask.cs index 3bffaa9b3..bc75a527c 100644 --- a/IRaCIS.Core.Domain/Allocation/VisitTask.cs +++ b/IRaCIS.Core.Domain/Allocation/VisitTask.cs @@ -200,7 +200,7 @@ namespace IRaCIS.Core.Domain.Models public string RelatedVisitTaskIds { get; set; } = "[]"; /// - /// 关联的访视任务ID (当前任务是访视任务的话会有自己)集合 不包括冻结 + /// 关联的访视任务ID (当前任务是访视任务的话会有自己)集合 /// [NotMapped] public List RelatedVisitTaskIdList @@ -223,7 +223,35 @@ namespace IRaCIS.Core.Domain.Models } /// - /// 既往任务Id 不包括自己 包括冻结 + /// 报告任务关系 包含冻结 + /// + public string ReportRelatedTaskIds { get; set; } = "[]"; + + /// + /// 报告任务关系 包含冻结 + /// + [NotMapped] + public List ReportRelatedTaskIdList + { + get + { + + try + { + + return JsonConvert.DeserializeObject>(this.ReportRelatedTaskIds); + } + catch (Exception) + { + + return new List(); + } + + } + } + + /// + /// 既往任务Id 不包括自己 /// public string PastResultTaskIds { get; set; } = "[]"; @@ -231,7 +259,7 @@ namespace IRaCIS.Core.Domain.Models /// - /// 既往任务Id 不包括自己集合 包括冻结 + /// 既往任务Id 不包括自己集合 /// [NotMapped] public List PastResultTaskIdList diff --git a/IRaCIS.Core.Domain/SQLFile/Test.sql b/IRaCIS.Core.Domain/SQLFile/Test.sql index 8c0052b90..c34d0981a 100644 --- a/IRaCIS.Core.Domain/SQLFile/Test.sql +++ b/IRaCIS.Core.Domain/SQLFile/Test.sql @@ -1001,4 +1001,20 @@ update ReadingQuestionSystem set GroupId= (select top 1 id from ReadingQuestio -----------------维护快捷键 update ShortcutKey set Text='Page Up' where Text='PageUp' -update ShortcutKey set Text='Page Down' where Text='PageDown' \ No newline at end of file +update ShortcutKey set Text='Page Down' where Text='PageDown' + + +---------------------维护Groupid + +update ReadingQuestionTrial set GroupId= (select top 1 id from ReadingQuestionTrial a where a.Type='group' and a.GroupName=ReadingQuestionTrial.GroupName and a.ReadingQuestionCriterionTrialId=ReadingQuestionTrial.ReadingQuestionCriterionTrialId) where ReadingQuestionTrial.Type!='group' and GroupId is null + +update ReadingQuestionSystem set GroupId= (select top 1 id from ReadingQuestionSystem a where a.Type='group' and a.GroupName=ReadingQuestionSystem.GroupName and a.ReadingQuestionCriterionSystemId=ReadingQuestionSystem.ReadingQuestionCriterionSystemId) where ReadingQuestionSystem.Type!='group' and GroupId is null + +------------------------------------------------------------------------------------------------------------------------------维护报告数据 +update VisitTask set ReportRelatedTaskIds=RelatedVisitTaskIds where ReadingCategory=1 and RelatedVisitTaskIds!='[]' + + +delete ReadingTaskRelation where RelevanceType=2 + +INSERT INTO ReadingTaskRelation(Id, TaskId, RelevanceTaskId, RelevanceType, CreateTime,CreateUserId) +SELECT NEWID(), TaskId, RelevanceTaskId, 2,ReadingTaskRelation.CreateTime ,ReadingTaskRelation.CreateUserId FROM ReadingTaskRelation inner join VisitTask on VisitTask.Id=ReadingTaskRelation.TaskId WHERE RelevanceType = 1 and ReadingCategory=1 diff --git a/IRaCIS.Core.Infrastructure/_IRaCIS/Output/ResponseOutput.cs b/IRaCIS.Core.Infrastructure/_IRaCIS/Output/ResponseOutput.cs index dd5e40098..d11078b18 100644 --- a/IRaCIS.Core.Infrastructure/_IRaCIS/Output/ResponseOutput.cs +++ b/IRaCIS.Core.Infrastructure/_IRaCIS/Output/ResponseOutput.cs @@ -152,10 +152,10 @@ namespace IRaCIS.Core.Infrastructure.Extention return new ResponseOutput().NotOk(msg, data, code); } - public static IResponseOutput NotOk( T data = default, ApiResponseCodeEnum code = ApiResponseCodeEnum.BusinessValidationFailed) - { - return new ResponseOutput().NotOk("", data, code); - } + //public static IResponseOutput NotOk( T data = default, ApiResponseCodeEnum code = ApiResponseCodeEnum.BusinessValidationFailed) + //{ + // return new ResponseOutput().NotOk("", data, code); + //} /// /// 失败 diff --git a/后端提示语.xlsx b/后端提示语.xlsx index 1d9b077f2..ccb26eee1 100644 Binary files a/后端提示语.xlsx and b/后端提示语.xlsx differ