diff --git a/IRaCIS.Core.Application/Service/QC/_MapConfig.cs b/IRaCIS.Core.Application/Service/QC/_MapConfig.cs index b220da1c1..5a2f5022c 100644 --- a/IRaCIS.Core.Application/Service/QC/_MapConfig.cs +++ b/IRaCIS.Core.Application/Service/QC/_MapConfig.cs @@ -367,9 +367,10 @@ namespace IRaCIS.Core.Application.Service .ForMember(d => d.CurrentActionUserName, u => u.MapFrom(s => s.CurrentActionUser.UserName)) .ForMember(d => d.PreliminaryAuditUserName, u => u.MapFrom(s => s.PreliminaryAuditUser.UserName)) .ForMember(d => d.ReviewAuditUserName, u => u.MapFrom(s => s.ReviewAuditUser.UserName)) - .ForMember(d => d.IsHaveClinicalData, u => u.MapFrom(t => t.IsBaseLine ? t.PreviousHistoryList.Any() || t.PreviousOtherList.Any() - || t.ReadingClinicalDataList.Any(x => x.ClinicalDataTrialSet.UploadRole == Domain.Share.UploadRole.CRC && x.ReadingClinicalDataPDFList.Count() > 0) - || t.PreviousSurgeryList.Any() : false)) + .ForMember(d => d.IsHaveClinicalData, u => u.MapFrom(t => t.PreviousHistoryList.Any() || t.PreviousOtherList.Any() + || t.Subject.ClinicalFormList.Any(x => x.ClinicalDataTrialSet.UploadRole == UploadRole.CRC && x.ReadingId == t.Id) + || t.ReadingClinicalDataList.Any(x => x.ClinicalDataTrialSet.UploadRole == Domain.Share.UploadRole.CRC && x.ReadingClinicalDataPDFList.Count() > 0) + || t.PreviousSurgeryList.Any())) .ForMember(d => d.DicomStudyCount, u => u.MapFrom(t => t.StudyList.Count())) .ForMember(d => d.NoneDicomStudyCount, u => u.MapFrom(t => t.NoneDicomStudyList.Count(t => t.NoneDicomFileList.Any()))); @@ -385,9 +386,10 @@ namespace IRaCIS.Core.Application.Service .ForMember(d => d.MedicalNo, u => u.MapFrom(s => s.Subject.MedicalNo)) .ForMember(d => d.Sex, u => u.MapFrom(s => s.Subject.Sex)) .ForMember(d => d.Age, u => u.MapFrom(t => t.Subject.Age)) - .ForMember(d => d.IsHaveClinicalData, u => u.MapFrom(t => t.IsBaseLine ? t.PreviousHistoryList.Any() || t.PreviousOtherList.Any() + .ForMember(d => d.IsHaveClinicalData, u => u.MapFrom(t => t.PreviousHistoryList.Any() || t.PreviousOtherList.Any() + || t.Subject.ClinicalFormList.Any(x=>x.ClinicalDataTrialSet.UploadRole==UploadRole.CRC&& x.ReadingId==t.Id) || t.ReadingClinicalDataList.Any(x => x.ClinicalDataTrialSet.UploadRole == Domain.Share.UploadRole.CRC && x.ReadingClinicalDataPDFList.Count() > 0) - || t.PreviousSurgeryList.Any() : false)) + || t.PreviousSurgeryList.Any())) //.ForMember(d => d.VisitName, u => u.MapFrom(t =>t.InPlan? t.VisitStage.VisitName : t.VisitName)) //.ForMember(d => d.VisitNum, u => u.MapFrom(t => t.InPlan ? t.VisitStage.VisitNum : t.VisitNum)) diff --git a/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalAnswerService.cs b/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalAnswerService.cs index 261ca8a12..dcb351d59 100644 --- a/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalAnswerService.cs +++ b/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalAnswerService.cs @@ -541,6 +541,7 @@ namespace IRaCIS.Core.Application.Service var formList = await _clinicalFormRepository.Where(x => x.TrialId == inDto.TrialId) .Where(x => x.ClinicalDataTrialSet.UploadRole == UploadRole.CRC) + .WhereIf(inDto.TrialReadingCriterionId!=null, x=>x.ClinicalDataTrialSet.TrialClinicalDataSetCriteriaList.Any(y=>y.TrialReadingCriterionId== inDto.TrialReadingCriterionId)) .Where(x => x.ClinicalDataTrialSet.ClinicalDataLevel == ClinicalLevel.ImageRead || x.ClinicalDataTrialSet.ClinicalDataLevel == ClinicalLevel.OncologyRead) .Include(x=>x.ClinicalDataTrialSet) .Select(x => new CRCClinicalForm diff --git a/IRaCIS.Core.Application/Service/Reading/ClinicalData/ReadingClinicalDataService.cs b/IRaCIS.Core.Application/Service/Reading/ClinicalData/ReadingClinicalDataService.cs index 9a58f9658..d02567eb6 100644 --- a/IRaCIS.Core.Application/Service/Reading/ClinicalData/ReadingClinicalDataService.cs +++ b/IRaCIS.Core.Application/Service/Reading/ClinicalData/ReadingClinicalDataService.cs @@ -688,7 +688,8 @@ namespace IRaCIS.Application.Services FileName = y.FileName, Path = y.Path, CreateTime = y.CreateTime, - }).ToList() + }).ToList(), + }); var result = new List(); @@ -808,21 +809,20 @@ namespace IRaCIS.Application.Services } } + var previousHistoryList = await _previousHistoryRepository.Where(x => x.SubjectVisitId == inDto.ReadingId).ProjectTo(_mapper.ConfigurationProvider).ToListAsync(); + var previousOtherList = await _previousOtherRepository.Where(x => x.SubjectVisitId == inDto.ReadingId).ProjectTo(_mapper.ConfigurationProvider).ToListAsync(); + var previousSurgeryList = await _previousSurgeryRepository.Where(x => x.SubjectVisitId == inDto.ReadingId).ProjectTo(_mapper.ConfigurationProvider).ToListAsync(); - //result = result.Where(x => !(x.ClinicalUploadType == ClinicalUploadType.PDF && x.FileList.Count() == 0)).ToList(); - //// 需要排除表格为空的数据 + foreach (var item in result) + { + item.ClinicalTableData = new ClinicalDataTable() + { + PreviousHistoryList = previousHistoryList.Where(x => x.ClinicalDataTrialSetId == item.ClinicalDataTrialSetId).ToList(), + PreviousOtherList = previousOtherList.Where(x => x.ClinicalDataTrialSetId == item.ClinicalDataTrialSetId).ToList(), + PreviousSurgeryList = previousSurgeryList.Where(x => x.ClinicalDataTrialSetId == item.ClinicalDataTrialSetId).ToList(), + }; - - //var readingIds = result.Select(x => x.ReadingId).ToList(); - - //var tablecount = (await _previousHistoryRepository.Where(x => readingIds.Contains(x.SubjectVisitId)).CountAsync()) + - // (await _previousOtherRepository.Where(x => readingIds.Contains(x.SubjectVisitId)).CountAsync()) + - // (await _previousSurgeryRepository.Where(x => readingIds.Contains(x.SubjectVisitId)).CountAsync()); - - //if (tablecount == 0) - //{ - // result = result.Where(x => x.ClinicalUploadType != ClinicalUploadType.Table).ToList(); - //} + } return result; } diff --git a/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingImageTaskService.cs b/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingImageTaskService.cs index 18cfbca90..ba791cea0 100644 --- a/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingImageTaskService.cs +++ b/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingImageTaskService.cs @@ -2332,9 +2332,22 @@ namespace IRaCIS.Application.Services } else { - task = await _visitTaskRepository.Where(x => x.TrialId == inDto.TrialId && x.TrialReadingCriterionId == trialReadingCriterionId && x.ReadingTaskState != ReadingTaskState.HaveSigned && x.DoctorUserId == _userInfo.Id + var query = _visitTaskRepository.Where(x => x.TrialId == inDto.TrialId && x.TrialReadingCriterionId == trialReadingCriterionId && x.ReadingTaskState != ReadingTaskState.HaveSigned && x.DoctorUserId == _userInfo.Id && x.TrialReadingCriterionId == trialReadingCriterionId - && x.TaskState == TaskState.Effect).Select(x => new GetReadingTaskDto() + && x.TaskState == TaskState.Effect); + var count = await query.CountAsync(); + if (count == 0) + { + throw new BusinessValidationFailedException(_localizer["ReadingImage_TaskFinish"]); + } + Random random = new Random(); + var skipcount = 0; + if (count >= 2) + { + skipcount = random.Next(0, count - 1); + } + task = await query + .Select(x => new GetReadingTaskDto() { VisitTaskId = x.Id, ArmEnum = x.ArmEnum, @@ -2345,7 +2358,7 @@ namespace IRaCIS.Application.Services SubjectId = x.SubjectId, SubjectCode = x.Subject.Code, TrialReadingCriterionId = x.TrialReadingCriterionId, - }).FirstOrDefaultAsync(); + }).Skip(skipcount).FirstOrDefaultAsync(); } diff --git a/IRaCIS.Core.Application/Service/Reading/ReadingPeriod/ReadModuleService.cs b/IRaCIS.Core.Application/Service/Reading/ReadingPeriod/ReadModuleService.cs index e5dff07f2..959e29a84 100644 --- a/IRaCIS.Core.Application/Service/Reading/ReadingPeriod/ReadModuleService.cs +++ b/IRaCIS.Core.Application/Service/Reading/ReadingPeriod/ReadModuleService.cs @@ -25,6 +25,7 @@ namespace IRaCIS.Application.Services private readonly IRepository _trialRepository; private readonly IVisitTaskHelpeService _visitTaskHelpeService; private readonly IRepository _visitTaskRepository; + private readonly IRepository _readModuleCriterionFromRepository; private readonly IRepository _clinicalDataTrialSetRepository; private readonly IRepository _readModuleViewRepository; private readonly IRepository _readingQuestionCriterionTrialRepository; @@ -41,6 +42,7 @@ namespace IRaCIS.Application.Services IRepository trialRepository, IVisitTaskHelpeService visitTaskHelpeService, IRepository visitTaskRepository, + IRepository readModuleCriterionFromRepository, IRepository clinicalDataTrialSetRepository, IRepository readModuleViewRepository, IRepository readingQuestionCriterionTrialRepository, @@ -57,6 +59,7 @@ namespace IRaCIS.Application.Services this._trialRepository = trialRepository; this._visitTaskHelpeService = visitTaskHelpeService; this._visitTaskRepository = visitTaskRepository; + this._readModuleCriterionFromRepository = readModuleCriterionFromRepository; this._clinicalDataTrialSetRepository = clinicalDataTrialSetRepository; this._readModuleViewRepository = readModuleViewRepository; this._readingQuestionCriterionTrialRepository = readingQuestionCriterionTrialRepository; @@ -480,6 +483,14 @@ namespace IRaCIS.Application.Services return ResponseOutput.NotOk(_localizer["ReadModule_SignedDataCannotDelete"]); } + await _readModuleCriterionFromRepository.BatchDeleteNoTrackingAsync(x => x.ReadModuleId == readModuleId); + + if (await _readModuleCriterionFromRepository.AnyAsync(x => x.ReadModuleId == readModuleId)) + { + //---CRC已经确认临床数据 不允许删除 + return ResponseOutput.NotOk(_localizer["ReadModule_CRCConfirmClinicalData"]); + } + //增加标准 if (readModule.ModuleType==ModuleTypeEnum.Global&&(await _readModuleRepository.AnyAsync(x=>x.ModuleType==ModuleTypeEnum.Oncology&&x.SubjectVisitId== readModule.SubjectVisitId && x.TrialReadingCriterionId==readModule.TrialReadingCriterionId))) { @@ -499,6 +510,7 @@ namespace IRaCIS.Application.Services TaskState = TaskState.Adbandon }); + await _readModuleRepository.UpdatePartialFromQueryAsync(t => t.Id == readModuleId, x => new ReadModule() {