From 4225014cddd1995499e9541f5d1b194a1e9079d1 Mon Sep 17 00:00:00 2001 From: he <109787524@qq.com> Date: Mon, 10 Nov 2025 09:35:31 +0800 Subject: [PATCH 1/6] =?UTF-8?q?=E4=BB=A3=E7=A0=81=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ReadingPeriod/ReadingPeriodSetService.cs | 16 ++++++++++++++++ .../RECIST1Point1CalculateService.cs | 1 + .../ReadingQuestionCriterionTrial.cs | 5 +++++ 3 files changed, 22 insertions(+) diff --git a/IRaCIS.Core.Application/Service/Reading/ReadingPeriod/ReadingPeriodSetService.cs b/IRaCIS.Core.Application/Service/Reading/ReadingPeriod/ReadingPeriodSetService.cs index 468288bbb..a9e12f96a 100644 --- a/IRaCIS.Core.Application/Service/Reading/ReadingPeriod/ReadingPeriodSetService.cs +++ b/IRaCIS.Core.Application/Service/Reading/ReadingPeriod/ReadingPeriodSetService.cs @@ -223,6 +223,8 @@ namespace IRaCIS.Core.Application.Service List readModuleIds = await _readModuleRepository.Where(x => x.ReadingPeriodSetId == indto.Id).Select(x => x.Id).ToListAsync(); + List visitIds=await _readingPeriodPlanRepository.Where(x => x.ReadingPeriodSetId == indto.Id).Select(x => x.SubjectVisitId).ToListAsync(); + if (await _visitTaskRepository.AnyAsync(x => x.TrialReadingCriterionId == readingPeriodSet.TrialReadingCriterionId && readModuleIds.Contains(x.SouceReadModuleId ?? default(Guid)) && x.TrialReadingCriterionId == readingPeriodSet.TrialReadingCriterionId && x.ReadingTaskState == ReadingTaskState.HaveSigned && x.TaskState == TaskState.Effect)) @@ -231,6 +233,20 @@ namespace IRaCIS.Core.Application.Service throw new BusinessValidationFailedException(_localizer["ReadingPeriodSet_TaskCompletedCannotRevoke"]); } + var criterionInfo = await _readingQuestionCriterionTrialRepository.Where(x => x.Id == readingPeriodSet.TrialReadingCriterionId).FirstNotNullAsync(); + + //产生了 阅片期裁判任务 并且完成了 + if ( criterionInfo.IsArbitrationReading&& criterionInfo.ArbitrationRule== ArbitrationRule.Reading && + await _visitTaskRepository.AnyAsync(x => x.TrialReadingCriterionId == readingPeriodSet.TrialReadingCriterionId && visitIds.Contains(x.SourceSubjectVisitId ?? default(Guid)) + && x.TrialReadingCriterionId == readingPeriodSet.TrialReadingCriterionId + && x.ReadingCategory== ReadingCategory.Judge + && x.ReadingTaskState == ReadingTaskState.HaveSigned && x.TaskState == TaskState.Effect) ) + { + //---当前标准阅片已生成任务并且阅片完成,撤销失败。 + throw new BusinessValidationFailedException(_localizer["ReadingPeriodSet_TaskCompletedCannotRevoke"]); + } + + await _visitTaskRepository.BatchUpdateNoTrackingAsync(x => x.TrialReadingCriterionId == readingPeriodSet.TrialReadingCriterionId && readModuleIds.Contains(x.SouceReadModuleId ?? default(Guid)), x => new VisitTask() { diff --git a/IRaCIS.Core.Application/Service/ReadingCalculate/RECIST1Point1CalculateService.cs b/IRaCIS.Core.Application/Service/ReadingCalculate/RECIST1Point1CalculateService.cs index 58244e6ad..72e112e88 100644 --- a/IRaCIS.Core.Application/Service/ReadingCalculate/RECIST1Point1CalculateService.cs +++ b/IRaCIS.Core.Application/Service/ReadingCalculate/RECIST1Point1CalculateService.cs @@ -754,6 +754,7 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate tableRowAnswers.ForEach(x => { + var rowinfo= tableRowAnswers.Where(y => y.OriginalId == x.SplitRowId).FirstOrDefault(); 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(); diff --git a/IRaCIS.Core.Domain/Reading/ReadingCriterion/ReadingQuestionCriterionTrial.cs b/IRaCIS.Core.Domain/Reading/ReadingCriterion/ReadingQuestionCriterionTrial.cs index 680ebcc75..04f5ef2c3 100644 --- a/IRaCIS.Core.Domain/Reading/ReadingCriterion/ReadingQuestionCriterionTrial.cs +++ b/IRaCIS.Core.Domain/Reading/ReadingCriterion/ReadingQuestionCriterionTrial.cs @@ -116,7 +116,12 @@ public class ReadingQuestionCriterionTrial : BaseAddAuditEntity [Comment("是否签名")] public bool IsSigned { get; set; } = false; + + /// + /// 裁判 + /// [Comment("仲裁阅片")] + public bool IsArbitrationReading { get; set; } = true; [Comment("肿瘤学阅片 原字段 IsClinicalReading")] public bool IsOncologyReading { get; set; } From 9fbee7e0c97a01b156e9d96482d2bbc99305bda3 Mon Sep 17 00:00:00 2001 From: he <109787524@qq.com> Date: Mon, 10 Nov 2025 14:16:06 +0800 Subject: [PATCH 2/6] =?UTF-8?q?=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Reading/ReadingPeriod/ReadingPeriodSetService.cs | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/IRaCIS.Core.Application/Service/Reading/ReadingPeriod/ReadingPeriodSetService.cs b/IRaCIS.Core.Application/Service/Reading/ReadingPeriod/ReadingPeriodSetService.cs index a9e12f96a..1f1ecca50 100644 --- a/IRaCIS.Core.Application/Service/Reading/ReadingPeriod/ReadingPeriodSetService.cs +++ b/IRaCIS.Core.Application/Service/Reading/ReadingPeriod/ReadingPeriodSetService.cs @@ -227,7 +227,8 @@ namespace IRaCIS.Core.Application.Service if (await _visitTaskRepository.AnyAsync(x => x.TrialReadingCriterionId == readingPeriodSet.TrialReadingCriterionId && readModuleIds.Contains(x.SouceReadModuleId ?? default(Guid)) && x.TrialReadingCriterionId == readingPeriodSet.TrialReadingCriterionId - && x.ReadingTaskState == ReadingTaskState.HaveSigned && x.TaskState == TaskState.Effect)) + //&& x.ReadingTaskState == ReadingTaskState.HaveSigned + && x.TaskState == TaskState.Effect)) { //---当前标准阅片已生成任务并且阅片完成,撤销失败。 throw new BusinessValidationFailedException(_localizer["ReadingPeriodSet_TaskCompletedCannotRevoke"]); @@ -239,8 +240,9 @@ namespace IRaCIS.Core.Application.Service if ( criterionInfo.IsArbitrationReading&& criterionInfo.ArbitrationRule== ArbitrationRule.Reading && await _visitTaskRepository.AnyAsync(x => x.TrialReadingCriterionId == readingPeriodSet.TrialReadingCriterionId && visitIds.Contains(x.SourceSubjectVisitId ?? default(Guid)) && x.TrialReadingCriterionId == readingPeriodSet.TrialReadingCriterionId - && x.ReadingCategory== ReadingCategory.Judge - && x.ReadingTaskState == ReadingTaskState.HaveSigned && x.TaskState == TaskState.Effect) ) + && x.ReadingCategory== ReadingCategory.Judge && + // x.ReadingTaskState == ReadingTaskState.HaveSigned && + x.TaskState == TaskState.Effect) ) { //---当前标准阅片已生成任务并且阅片完成,撤销失败。 throw new BusinessValidationFailedException(_localizer["ReadingPeriodSet_TaskCompletedCannotRevoke"]); @@ -712,8 +714,8 @@ namespace IRaCIS.Core.Application.Service SiteIds = inDto.SiteIds, }); - if (await _readingPeriodSetRepository.AnyAsync(x => x.Id != inDto.TrialReadingCriterionId && x.IsTakeEffect != ReadingPeriodStatus.Revocation - && x.TrialId == inDto.TrialId && x.ReadingPeriodName == inDto.ReadingPeriodName && x.TrialReadingCriterionId == inDto.TrialReadingCriterionId)) + if (await _readingPeriodSetRepository.AnyAsync(x => x.Id != inDto.ReadingPeriodSetId && x.IsTakeEffect != ReadingPeriodStatus.Revocation + && x.TrialId == inDto.TrialId && x.ReadingPeriodName == inDto.ReadingPeriodName && x.TrialReadingCriterionId == inDto.TrialReadingCriterionId)) { throw new BusinessValidationFailedException(_localizer["ReadingPeriodSet_NameDup"]); From 93b93f6a3a4125ae263f4a482bf0b70043504150 Mon Sep 17 00:00:00 2001 From: he <109787524@qq.com> Date: Mon, 10 Nov 2025 16:08:12 +0800 Subject: [PATCH 3/6] =?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/Reading/ReadingPeriod/ReadingPeriodSetService.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/IRaCIS.Core.Application/Service/Reading/ReadingPeriod/ReadingPeriodSetService.cs b/IRaCIS.Core.Application/Service/Reading/ReadingPeriod/ReadingPeriodSetService.cs index 1f1ecca50..e1d962666 100644 --- a/IRaCIS.Core.Application/Service/Reading/ReadingPeriod/ReadingPeriodSetService.cs +++ b/IRaCIS.Core.Application/Service/Reading/ReadingPeriod/ReadingPeriodSetService.cs @@ -751,7 +751,7 @@ namespace IRaCIS.Core.Application.Service } var isTakeEffect = await _readingPeriodSetRepository.Where(x => x.Id == inDto.ReadingPeriodSetId).Select(x => x.IsTakeEffect).FirstOrDefaultAsync(); - var readModulequery = _readModuleRepository.AsQueryable(); + var readModulequery = _readModuleRepository.Where(x=>x.TrialReadingCriterionId== inDto.TrialReadingCriterionId).AsQueryable(); // 当前项目 最晚拍片日期不为null 中心筛选 var visitQuery = _subjectVisitRepository.Where(x => x.TrialId == inDto.TrialId && x.LatestScanDate != null && !x.IsLostVisit) @@ -781,6 +781,7 @@ namespace IRaCIS.Core.Application.Service //.Where(x => isChooseVisitIds.Contains(x.Id)); + var subjectIdlist = await visitQuery.OrderBy(x => x.SubjectId).Select(x => x.SubjectId).Distinct().Skip((inDto.PageIndex - 1) * inDto.PageSize).Take(inDto.PageSize).ToListAsync(); From 369805e6c672953034f22bd7c89ed451f579329a Mon Sep 17 00:00:00 2001 From: he <109787524@qq.com> Date: Mon, 10 Nov 2025 17:37:32 +0800 Subject: [PATCH 4/6] =?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/Reading/ReadingPeriod/ReadingPeriodSetService.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/IRaCIS.Core.Application/Service/Reading/ReadingPeriod/ReadingPeriodSetService.cs b/IRaCIS.Core.Application/Service/Reading/ReadingPeriod/ReadingPeriodSetService.cs index e1d962666..fa48da6ee 100644 --- a/IRaCIS.Core.Application/Service/Reading/ReadingPeriod/ReadingPeriodSetService.cs +++ b/IRaCIS.Core.Application/Service/Reading/ReadingPeriod/ReadingPeriodSetService.cs @@ -643,7 +643,7 @@ namespace IRaCIS.Core.Application.Service VisitInfoList = plans.Select(x => new AddReadModuleVisitInfo() { SubjectId = subejctVisits.Where(y=>y.Id==x.SubjectVisitId).Select(x=>x.SubjectId).FirstOrDefault(), - SubjectVisitId = x.Id, + SubjectVisitId = x.SubjectVisitId, ReadingPeriodPlanId= x.Id, IsUrgent = subejctVisits.Where(y => y.Id == x.SubjectVisitId).Select(x => x.IsUrgent).FirstOrDefault(), From 8a004ef35fbf3f28bdcf01737cc1bebfdc29f4c0 Mon Sep 17 00:00:00 2001 From: he <109787524@qq.com> Date: Mon, 10 Nov 2025 18:01:48 +0800 Subject: [PATCH 5/6] =?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/Reading/ReadingPeriod/ReadingPeriodSetService.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/IRaCIS.Core.Application/Service/Reading/ReadingPeriod/ReadingPeriodSetService.cs b/IRaCIS.Core.Application/Service/Reading/ReadingPeriod/ReadingPeriodSetService.cs index fa48da6ee..49966e3c7 100644 --- a/IRaCIS.Core.Application/Service/Reading/ReadingPeriod/ReadingPeriodSetService.cs +++ b/IRaCIS.Core.Application/Service/Reading/ReadingPeriod/ReadingPeriodSetService.cs @@ -764,7 +764,7 @@ namespace IRaCIS.Core.Application.Service visitQuery= visitQuery.Union(chooseVisitQuery); // 已经存在的访视 需要排除 - var existsBubjectVisitsQuery = _readModuleRepository.Where(y => y.ReadingSetType == inDto.ReadingSetType && y.TrialId == inDto.TrialId && y.TrialReadingCriterionId == inDto.TrialReadingCriterionId).Select(x => x.SubjectVisitId); + var existsBubjectVisitsQuery = _readModuleRepository.Where(y => y.ReadingSetType == inDto.ReadingSetType && y.TrialId == inDto.TrialId && y.ReadingPeriodSetId == inDto.ReadingPeriodSetId).Select(x => x.SubjectVisitId); visitQuery = visitQuery From eecfe6dcaec092a121a8b98f295b2fe6e6de7d88 Mon Sep 17 00:00:00 2001 From: he <109787524@qq.com> Date: Mon, 10 Nov 2025 18:06:53 +0800 Subject: [PATCH 6/6] =?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/Reading/ReadingPeriod/ReadingPeriodSetService.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/IRaCIS.Core.Application/Service/Reading/ReadingPeriod/ReadingPeriodSetService.cs b/IRaCIS.Core.Application/Service/Reading/ReadingPeriod/ReadingPeriodSetService.cs index 49966e3c7..e03fd3709 100644 --- a/IRaCIS.Core.Application/Service/Reading/ReadingPeriod/ReadingPeriodSetService.cs +++ b/IRaCIS.Core.Application/Service/Reading/ReadingPeriod/ReadingPeriodSetService.cs @@ -764,11 +764,11 @@ namespace IRaCIS.Core.Application.Service visitQuery= visitQuery.Union(chooseVisitQuery); // 已经存在的访视 需要排除 - var existsBubjectVisitsQuery = _readModuleRepository.Where(y => y.ReadingSetType == inDto.ReadingSetType && y.TrialId == inDto.TrialId && y.ReadingPeriodSetId == inDto.ReadingPeriodSetId).Select(x => x.SubjectVisitId); + var existsBubjectVisitsQuery = _readModuleRepository.Where(y => y.ReadingSetType == inDto.ReadingSetType && y.TrialId == inDto.TrialId && y.TrialReadingCriterionId == inDto.TrialReadingCriterionId).Select(x => x.SubjectVisitId); visitQuery = visitQuery - .Where(x => !existsBubjectVisitsQuery.Contains(x.Id)) + .Where(x => !existsBubjectVisitsQuery.Contains(x.Id)|| isChooseVisitIds.Contains(x.Id)) .WhereIf(inDto.ExpirationDate != null, x => x.LatestScanDate < inDto.ExpirationDate.Value.AddDays(1)) .WhereIf(inDto.ExpirationVisitNum != null, x => x.VisitNum == inDto.ExpirationVisitNum) .WhereIf(inDto.ReadingSetType == ReadingSetType.TumorReading, x => readModulequery.Where(y => y.SubjectVisitId == x.Id && y.ReadingSetType == ReadingSetType.ImageReading).Count() > 0)