diff --git a/IRaCIS.Core.Application/Service/ImageAndDoc/DicomArchiveService.cs b/IRaCIS.Core.Application/Service/ImageAndDoc/DicomArchiveService.cs index 8fdc6d9c5..967b3d589 100644 --- a/IRaCIS.Core.Application/Service/ImageAndDoc/DicomArchiveService.cs +++ b/IRaCIS.Core.Application/Service/ImageAndDoc/DicomArchiveService.cs @@ -219,12 +219,14 @@ namespace IRaCIS.Core.Application.Services isStudyNeedAdd = true; + //dataset.GetSingleValue(DicomTag.StudyDate) + dataset.GetSingleValue(DicomTag.StudyTime) + dicomStudy = new DicomStudy { Id = studyId, StudyInstanceUid = studyInstanceUid, /* StudyTime = dataset.GetSingleValueOrDefault(DicomTag.StudyDate, DateTime.Now).Add(dataset.GetSingleValueOrDefault(DicomTag.StudyTime, DateTime.Now).TimeOfDay),*///dataset.GetDateTime(DicomTag.StudyDate, DicomTag.StudyTime), - StudyTime = dataset.GetSingleValueOrDefault(DicomTag.StudyDate,(DateTime?)null)?.Add(dataset.GetSingleValueOrDefault(DicomTag.StudyTime, TimeSpan.Zero)), + StudyTime = dataset.GetSingleValueOrDefault(DicomTag.StudyDate,string.Empty)==string.Empty?null: dataset.GetSingleValue(DicomTag.StudyDate).Add(dataset.GetSingleValue(DicomTag.StudyTime).TimeOfDay) , Modalities = dataset.GetSingleValueOrDefault(DicomTag.Modality, string.Empty), Description = dataset.GetSingleValueOrDefault(DicomTag.StudyDescription, string.Empty), InstitutionName = dataset.GetSingleValueOrDefault(DicomTag.InstitutionName, string.Empty), @@ -358,7 +360,8 @@ namespace IRaCIS.Core.Application.Services SeriesInstanceUid = seriesInstanceUid, SeriesNumber = dataset.GetSingleValueOrDefault(DicomTag.SeriesNumber, 1), //SeriesTime = dataset.GetSingleValueOrDefault(DicomTag.SeriesDate, DateTime.Now).Add(dataset.GetSingleValueOrDefault(DicomTag.SeriesTime, DateTime.Now).TimeOfDay), - SeriesTime = dataset.GetSingleValueOrDefault(DicomTag.SeriesDate, (DateTime?)null)?.Add(dataset.GetSingleValueOrDefault(DicomTag.SeriesTime, TimeSpan.Zero)),// dataset.GetDateTime(DicomTag.SeriesDate, DicomTag.SeriesTime), + //SeriesTime = DateTime.TryParse(dataset.GetSingleValue(DicomTag.SeriesDate) + dataset.GetSingleValue(DicomTag.SeriesTime), out DateTime dt) ? dt : null, + SeriesTime = dataset.GetSingleValueOrDefault(DicomTag.SeriesDate, string.Empty) == string.Empty ? null : dataset.GetSingleValue(DicomTag.SeriesDate).Add(dataset.GetSingleValue(DicomTag.SeriesTime).TimeOfDay), Modality = dataset.GetSingleValueOrDefault(DicomTag.Modality, string.Empty), Description = dataset.GetSingleValueOrDefault(DicomTag.SeriesDescription, string.Empty), SliceThickness = dataset.GetSingleValueOrDefault(DicomTag.SliceThickness, string.Empty), @@ -413,7 +416,9 @@ namespace IRaCIS.Core.Application.Services SeriesInstanceUid = dicomSeries.SeriesInstanceUid, SopInstanceUid = sopInstanceUid, InstanceNumber = dataset.GetSingleValueOrDefault(DicomTag.InstanceNumber, 1), - InstanceTime = dataset.GetSingleValueOrDefault(DicomTag.ContentDate,(DateTime?)null)?.Add(dataset.GetSingleValueOrDefault(DicomTag.ContentTime, TimeSpan.Zero)), + InstanceTime = dataset.GetSingleValueOrDefault(DicomTag.ContentDate, string.Empty) == string.Empty ? null : dataset.GetSingleValue(DicomTag.ContentDate).Add(dataset.GetSingleValue(DicomTag.ContentTime).TimeOfDay), + //InstanceTime = DateTime.TryParse(dataset.GetSingleValue(DicomTag.ContentDate) + dataset.GetSingleValue(DicomTag.ContentTime), out DateTime dt) ? dt : null, + //InstanceTime = dataset.GetSingleValueOrDefault(DicomTag.ContentDate,(DateTime?)null)?.Add(dataset.GetSingleValueOrDefault(DicomTag.ContentTime, TimeSpan.Zero)), //dataset.GetSingleValueOrDefault(DicomTag.ContentDate,DateTime.Now);//, DicomTag.ContentTime) CPIStatus = false, ImageRows = dataset.GetSingleValueOrDefault(DicomTag.Rows, 0), diff --git a/IRaCIS.Core.Application/Service/QC/NoneDicomStudyService.cs b/IRaCIS.Core.Application/Service/QC/NoneDicomStudyService.cs index 4fee2dec2..625a96634 100644 --- a/IRaCIS.Core.Application/Service/QC/NoneDicomStudyService.cs +++ b/IRaCIS.Core.Application/Service/QC/NoneDicomStudyService.cs @@ -316,8 +316,11 @@ namespace IRaCIS.Core.Application.Contracts await _repository.AddAsync(new StudyMonitor() { - FileCount = formCollection.Files.Count, FileSize = formCollection.Files.Sum(t => t.Length), IsDicom = false, - IsDicomReUpload = false, StudyId = noneDicomStudyId, + FileCount = formCollection.Files.Count, + FileSize = formCollection.Files.Sum(t => t.Length), IsDicom = false, + IsDicomReUpload = false, + StudyId = noneDicomStudyId, + UploadStartTime = startTime, UploadFinishedTime = DateTime.Now, IP = _userInfo.IP, //TotalMillisecondsInterval = (DateTime.Now - startTime).TotalMilliseconds, TrialId = sv.TrialId, diff --git a/IRaCIS.Core.Application/Service/QC/QCOperationService.cs b/IRaCIS.Core.Application/Service/QC/QCOperationService.cs index 85d4a0b69..552876ba4 100644 --- a/IRaCIS.Core.Application/Service/QC/QCOperationService.cs +++ b/IRaCIS.Core.Application/Service/QC/QCOperationService.cs @@ -1115,6 +1115,11 @@ namespace IRaCIS.Core.Application.Image.QA if (dbSubjectVisit == null) return Null404NotFound(dbSubjectVisit); + var trialConfig = await _trialRepository + .Select(t => new { TrialId = t.Id, t.QCProcessEnum, t.IsImageConsistencyVerification }) + .FirstOrDefaultAsync(t => t.TrialId == trialId) + .IfNullThrowException(); + if (obtaionOrCancel) { @@ -1131,11 +1136,6 @@ namespace IRaCIS.Core.Application.Image.QA #region 处理验证 - var trialConfig = await _trialRepository - .Select(t => new { TrialId = t.Id, t.QCProcessEnum, t.IsImageConsistencyVerification }) - .FirstOrDefaultAsync(t => t.TrialId == trialId) - .IfNullThrowException(); - if (dbSubjectVisit.IsTake) { return ResponseOutput.NotOk("当前已被领取,不允许领取"); @@ -1143,7 +1143,7 @@ namespace IRaCIS.Core.Application.Image.QA if (trialConfig.QCProcessEnum == TrialQCProcess.NotAudit) { - return ResponseOutput.NotOk("项目配置为不审,没有领取或者取消QC Task"); + return ResponseOutput.NotOk("项目配置为不审,没有领取QC Task"); } else if (trialConfig.QCProcessEnum == TrialQCProcess.SingleAudit) { @@ -1198,7 +1198,6 @@ namespace IRaCIS.Core.Application.Image.QA dbSubjectVisit.CurrentActionUserId = _userInfo.Id; - dbSubjectVisit.CurrentActionUserExpireTime = DateTime.Now.AddHours(1); @@ -1207,11 +1206,48 @@ namespace IRaCIS.Core.Application.Image.QA } else { + + if (trialConfig.QCProcessEnum == TrialQCProcess.NotAudit) + { + return ResponseOutput.NotOk("项目配置为不审,没有取消QC Task"); + } + else if (trialConfig.QCProcessEnum == TrialQCProcess.SingleAudit) + { + + if (dbSubjectVisit.SubmitState == SubmitStateEnum.Submitted && dbSubjectVisit.AuditState == AuditStateEnum.InPrimaryQC) + { + dbSubjectVisit.AuditState = AuditStateEnum.ToAudit; + } + + else + { + return ResponseOutput.NotOk("项目配置为单审,不满足SubmmitState:已提交 或者 AuditState:InPrimaryQC, 不允许释放"); + } + } + else if (trialConfig.QCProcessEnum == TrialQCProcess.DoubleAudit) + { + + //提交 并且初审通过 那么领取后进入 复审中 + if (dbSubjectVisit.SubmitState == SubmitStateEnum.Submitted && dbSubjectVisit.AuditState == AuditStateEnum.InSecondaryQC) + { + dbSubjectVisit.AuditState = AuditStateEnum.PrimaryQCPassed; + + } + else if (dbSubjectVisit.SubmitState == SubmitStateEnum.Submitted && dbSubjectVisit.AuditState == AuditStateEnum.InPrimaryQC) + { + dbSubjectVisit.AuditState = AuditStateEnum.ToAudit; + } + + else + { + return ResponseOutput.NotOk("项目配置为复审,不满足提交状态:已提交 或者 审核状态:InPrimaryQC/InSecondaryQC, 不允许领取"); + } + } + dbSubjectVisit.IsTake = false; dbSubjectVisit.CurrentActionUserId = null; - dbSubjectVisit.CurrentActionUserExpireTime = null; } @@ -1433,10 +1469,6 @@ namespace IRaCIS.Core.Application.Image.QA dbSubjectVisit.PreliminaryAuditUserId = _userInfo.Id; dbSubjectVisit.PreliminaryAuditTime = DateTime.Now; - dbSubjectVisit.IsTake = false; - dbSubjectVisit.CurrentActionUserExpireTime = null; - - } else { @@ -1460,8 +1492,7 @@ namespace IRaCIS.Core.Application.Image.QA dbSubjectVisit.PreliminaryAuditUserId = _userInfo.Id; dbSubjectVisit.PreliminaryAuditTime = DateTime.Now; - dbSubjectVisit.IsTake = false; - dbSubjectVisit.CurrentActionUserExpireTime = null; + } else if (dbSubjectVisit.AuditState == AuditStateEnum.InSecondaryQC) { @@ -1481,8 +1512,6 @@ namespace IRaCIS.Core.Application.Image.QA dbSubjectVisit.ReviewAuditTime = DateTime.Now; - dbSubjectVisit.IsTake = false; - dbSubjectVisit.CurrentActionUserExpireTime = null; } else @@ -1529,6 +1558,9 @@ namespace IRaCIS.Core.Application.Image.QA } } + dbSubjectVisit.IsTake = false; + dbSubjectVisit.CurrentActionUserExpireTime = null; + //删除 软删除的物理文件 var instanceIdList = await _repository.Where(t => t.DicomSerie.IsDeleted && t.SubjectVisitId == subjectVisitId)