diff --git a/IRaCIS.Core.API/IRaCIS.Core.API.xml b/IRaCIS.Core.API/IRaCIS.Core.API.xml
index eec56cc64..ed6960728 100644
--- a/IRaCIS.Core.API/IRaCIS.Core.API.xml
+++ b/IRaCIS.Core.API/IRaCIS.Core.API.xml
@@ -146,6 +146,13 @@
+
+
+ CRC确认临床数据
+
+
+
+
CRC撤销临床数据
diff --git a/IRaCIS.Core.Application/Service/QC/QCOperationService.cs b/IRaCIS.Core.Application/Service/QC/QCOperationService.cs
index 1a9e7f4e5..d25b4a08c 100644
--- a/IRaCIS.Core.Application/Service/QC/QCOperationService.cs
+++ b/IRaCIS.Core.Application/Service/QC/QCOperationService.cs
@@ -1167,8 +1167,8 @@ namespace IRaCIS.Core.Application.Image.QA
}
//基线 且配置了临床数据
- if (trialConfig.ClinicalInformationTransmissionEnum != 0 /*&& dbSubjectVisit.IsBaseLine*//*&&dbSubjectVisit.ClinicalDataSignUserId==null*/)
- {
+ //if (trialConfig.ClinicalInformationTransmissionEnum != 0 /*&& dbSubjectVisit.IsBaseLine*//*&&dbSubjectVisit.ClinicalDataSignUserId==null*/)
+ //{
////找到需要确认的PDF 临床数据 如果没有CRC 没有上传 那么就添加一条没有文件的记录
@@ -1231,7 +1231,7 @@ namespace IRaCIS.Core.Application.Image.QA
//}
//return ResponseOutput.NotOk("没有签名临床数据,不允许提交");
- }
+ //}
diff --git a/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalAnswerService.cs b/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalAnswerService.cs
index d16354bd0..8bf97a91b 100644
--- a/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalAnswerService.cs
+++ b/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalAnswerService.cs
@@ -225,6 +225,8 @@ namespace IRaCIS.Core.Application.Service
var clinicalData= _readingClinicalDataRepository.Where(x=>x.TrialId == inDto.TrialId&&x.ClinicalDataTrialSet.UploadRole==UploadRole.CRC&&x.ClinicalDataTrialSet.ClinicalDataLevel!= ClinicalLevel.SubjectVisit)
.Where(x=>!x.IsSign)
+ .WhereIf(inDto.SubjectId!=null,x=>x.SubjectId==inDto.SubjectId)
+ .Where(x=> x.ClinicalDataTrialSet.ClinicalDataLevel != ClinicalLevel.Subject)
.Include(x=>x.ClinicalDataTrialSet).Select(x=>new GetCRCSubjectClinicalOutDto() {
SubjectId=x.SubjectId,
SubjectCode=x.Subject.Code,
@@ -526,7 +528,9 @@ namespace IRaCIS.Core.Application.Service
.WhereIf(inDto.IsPMConfirm != null, x => x.IsPMConfirm == inDto.IsPMConfirm)
.WhereIf(inDto.TrialReadingCriterionId != null, x => x.TrialReadingCriterionId == inDto.TrialReadingCriterionId)
.WhereIf(inDto.SubjectId != null, x => x.SubjectId == inDto.SubjectId)
- .Select(x => new GetCRCConfirmListOutDto()
+ .WhereIf(inDto.StartTime != null, x => x.SubjectVisit.LatestScanDate >= inDto.StartTime)
+ .WhereIf(inDto.EndTime != null, x => x.SubjectVisit.LatestScanDate <= inDto.EndTime)
+ .Select(x => new GetCRCConfirmListOutDto()
{
SubjectId = x.SubjectId,
@@ -806,8 +810,8 @@ namespace IRaCIS.Core.Application.Service
await _readModuleCriterionFromRepository.AddRangeAsync(needAddList);
await _readModuleCriterionFromRepository.SaveChangesAsync();
-
- return ResponseOutput.Ok(true);
+ await _iReadingClinicalDataService.DealVisiTaskClinicalDataSignedAsync(inDto.TrialId, inDto.SubjectId, inDto.ReadModuleId, false, readModule.TrialReadingCriterionId);
+ return ResponseOutput.Ok(true);
}
///
@@ -862,8 +866,7 @@ namespace IRaCIS.Core.Application.Service
//await _readModuleCriterionFromRepository.BatchDeleteNoTrackingAsync(x=>x.ReadModuleId== presentData.ReadModuleId);
await _readModuleCriterionFromRepository.SaveChangesAsync();
-
- return ResponseOutput.Ok(true);
+ return ResponseOutput.Ok(true);
}
///
diff --git a/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalQuestionService.cs b/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalQuestionService.cs
index cfab3edde..b7a6831bf 100644
--- a/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalQuestionService.cs
+++ b/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalQuestionService.cs
@@ -228,10 +228,15 @@ namespace IRaCIS.Core.Application.Service
[HttpPost]
public async Task AddOrUpdateTrialClinicalQuestion(TrialClinicalQuestionDto inDto)
{
- if (await _trialClinicalQuestionRepository.AnyAsync(x =>x.TrialClinicalId==inDto.TrialClinicalId && x.Id != inDto.Id && x.QuestionName == inDto.QuestionName))
+ if (inDto.IsVerify)
{
- return ResponseOutput.NotOk(_localizer["ClinicalQuestion_Repeat"]);
+ if (await _trialClinicalQuestionRepository.AnyAsync(x => x.TrialClinicalId == inDto.TrialClinicalId && x.Id != inDto.Id && x.QuestionName == inDto.QuestionName))
+ {
+ return ResponseOutput.NotOk(_localizer["ClinicalQuestion_Repeat"]);
+ }
+ return ResponseOutput.Ok(true);
}
+
if (await _trialClinicalQuestionRepository.AnyAsync(x => x.TrialClinicalId == inDto.TrialClinicalId && x.Id != inDto.Id && x.ShowOrder == inDto.ShowOrder))
{
@@ -322,10 +327,15 @@ namespace IRaCIS.Core.Application.Service
public async Task AddOrUpdateSystemClinicalQuestion(SystemClinicalQuestionDto inDto)
{
- if (await _systemClinicalQuestionRepository.AnyAsync(x => x.SystemClinicalId == inDto.SystemClinicalId && x.Id != inDto.Id && x.QuestionName == inDto.QuestionName))
+ if (inDto.IsVerify)
{
- return ResponseOutput.NotOk(_localizer["ClinicalQuestion_Repeat"]);
+ if (await _systemClinicalQuestionRepository.AnyAsync(x => x.SystemClinicalId == inDto.SystemClinicalId && x.Id != inDto.Id && x.QuestionName == inDto.QuestionName))
+ {
+ return ResponseOutput.NotOk(_localizer["ClinicalQuestion_Repeat"]);
+ }
+ return ResponseOutput.Ok(true);
}
+
if (await _systemClinicalQuestionRepository.AnyAsync(x => x.SystemClinicalId == inDto.SystemClinicalId && x.Id != inDto.Id && x.ShowOrder == inDto.ShowOrder))
{
@@ -416,9 +426,13 @@ namespace IRaCIS.Core.Application.Service
[HttpPost]
public async Task AddOrUpdateSystemClinicalTableQuestion(SystemClinicalTableQuestionDto inDto)
{
- if (await _systemClinicalTableQuestionRepository.AnyAsync(x => x.QuestionId == inDto.QuestionId && x.Id != inDto.Id && x.QuestionName == inDto.QuestionName))
+ if (inDto.IsVerify)
{
- return ResponseOutput.NotOk(_localizer["ClinicalQuestion_Repeat"]);
+ if (await _systemClinicalTableQuestionRepository.AnyAsync(x => x.QuestionId == inDto.QuestionId && x.Id != inDto.Id && x.QuestionName == inDto.QuestionName))
+ {
+ return ResponseOutput.NotOk(_localizer["ClinicalQuestion_Repeat"]);
+ }
+ return ResponseOutput.Ok(true);
}
if (await _systemClinicalTableQuestionRepository.AnyAsync(x => x.QuestionId == inDto.QuestionId && x.Id != inDto.Id && x.ShowOrder == inDto.ShowOrder))
@@ -476,9 +490,13 @@ namespace IRaCIS.Core.Application.Service
[HttpPost]
public async Task AddOrUpdateTrialClinicalTableQuestion(TrialClinicalTableQuestionDto inDto)
{
- if (await _trialClinicalTableQuestionRepository.AnyAsync(x => x.QuestionId == inDto.QuestionId && x.Id != inDto.Id && x.QuestionName == inDto.QuestionName))
+ if (inDto.IsVerify)
{
- return ResponseOutput.NotOk(_localizer["ClinicalQuestion_Repeat"]);
+ if (await _trialClinicalTableQuestionRepository.AnyAsync(x => x.QuestionId == inDto.QuestionId && x.Id != inDto.Id && x.QuestionName == inDto.QuestionName))
+ {
+ return ResponseOutput.NotOk(_localizer["ClinicalQuestion_Repeat"]);
+ }
+ return ResponseOutput.Ok(true);
}
if (await _trialClinicalTableQuestionRepository.AnyAsync(x => x.QuestionId == inDto.QuestionId && x.Id != inDto.Id && x.ShowOrder == inDto.ShowOrder))
diff --git a/IRaCIS.Core.Application/Service/Reading/ClinicalData/ReadingClinicalDataService.cs b/IRaCIS.Core.Application/Service/Reading/ClinicalData/ReadingClinicalDataService.cs
index d02567eb6..cee7930b8 100644
--- a/IRaCIS.Core.Application/Service/Reading/ClinicalData/ReadingClinicalDataService.cs
+++ b/IRaCIS.Core.Application/Service/Reading/ClinicalData/ReadingClinicalDataService.cs
@@ -400,6 +400,13 @@ namespace IRaCIS.Application.Services
}
+ else
+ {
+ await _visitTaskRepository.BatchUpdateNoTrackingAsync(t => t.TrialId == trialId && t.SubjectId == subjectId && t.TrialReadingCriterionId == trialReadingCritrialId && t.SouceReadModuleId == readingId, u => new VisitTask()
+ {
+ IsClinicalDataSign = false
+ });
+ }
}
diff --git a/IRaCIS.Core.Application/Service/Reading/Dto/ClinicalAnswerDto.cs b/IRaCIS.Core.Application/Service/Reading/Dto/ClinicalAnswerDto.cs
index eb05dd111..1b5cf3b6c 100644
--- a/IRaCIS.Core.Application/Service/Reading/Dto/ClinicalAnswerDto.cs
+++ b/IRaCIS.Core.Application/Service/Reading/Dto/ClinicalAnswerDto.cs
@@ -25,6 +25,8 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
public class GetCRCSubjectClinicalInDto:PageInput
{
public Guid TrialId { get; set; }
+
+ public Guid? SubjectId { get; set; }
}
@@ -145,7 +147,10 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
public Guid? SubjectId { get; set; }
- public Guid TrialId { get; set; }
+ public DateTime? StartTime { get; set; }
+ public DateTime? EndTime { get; set; }
+
+ public Guid TrialId { get; set; }
public Guid? ReadModuleId { get; set; }
}
diff --git a/IRaCIS.Core.Application/Service/Reading/Dto/ClinicalQuestionDto.cs b/IRaCIS.Core.Application/Service/Reading/Dto/ClinicalQuestionDto.cs
index d4e381ad3..d5c21ac55 100644
--- a/IRaCIS.Core.Application/Service/Reading/Dto/ClinicalQuestionDto.cs
+++ b/IRaCIS.Core.Application/Service/Reading/Dto/ClinicalQuestionDto.cs
@@ -156,6 +156,9 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
///
public Guid? Id { get; set; }
+
+ public bool IsVerify { get; set; } = false;
+
///
/// 问题名称
///
@@ -365,6 +368,8 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
public Guid? Id { get; set; }
+ public bool IsVerify { get; set; } = false;
+
///
/// 问题名称
///
diff --git a/IRaCIS.Core.Application/Service/TrialSiteUser/PersonalWorkstation.cs b/IRaCIS.Core.Application/Service/TrialSiteUser/PersonalWorkstation.cs
index 2af9ed5ad..91b06c204 100644
--- a/IRaCIS.Core.Application/Service/TrialSiteUser/PersonalWorkstation.cs
+++ b/IRaCIS.Core.Application/Service/TrialSiteUser/PersonalWorkstation.cs
@@ -440,11 +440,50 @@ namespace IRaCIS.Core.Application
ExperimentName = t.ExperimentName,
TrialCode = t.TrialCode,
UrgentCount = t.SubjectVisitList.Where(u => u.IsBaseLine && u.SubmitState != SubmitStateEnum.Submitted && u.IsUrgent).Count(),
- ToBeDealedCount = t.ReadingClinicalDataList.Where(x=>!x.IsSign&& x.ClinicalDataTrialSet.UploadRole == UploadRole.CRC && x.ClinicalDataTrialSet.ClinicalDataLevel != ClinicalLevel.SubjectVisit).Count(),
+ ToBeDealedCount = t.ReadingClinicalDataList.Where(x=>!x.IsSign&& x.ClinicalDataTrialSet.UploadRole == UploadRole.CRC && x.ClinicalDataTrialSet.ClinicalDataLevel != ClinicalLevel.SubjectVisit&& x.ClinicalDataTrialSet.ClinicalDataLevel != ClinicalLevel.Subject).Count(),
ToBeVisitCount= t.ReadingClinicalDataList.Where(x => !x.IsSign && x.ClinicalDataTrialSet.UploadRole == UploadRole.CRC && x.ClinicalDataTrialSet.ClinicalDataLevel == ClinicalLevel.SubjectVisit).Count(),
ToAllCount= t.ReadingClinicalDataList.Where(x => !x.IsSign && x.ClinicalDataTrialSet.UploadRole == UploadRole.CRC ).Count(),
ReadModuleCount =t.ReadModuleList.Where(x=>!x.IsPMConfirm).Count(),
- }).Where(x=>x.ToAllCount > 0);
+ }).Where(x=>x.ToBeDealedCount > 0);
+
+ var result = await query.ToPagedListAsync(inQuery.PageIndex, inQuery.PageSize, string.IsNullOrEmpty(inQuery.SortField) ? nameof(ImageClinicalDataToBeDoneDto.TrialId) : inQuery.SortField, inQuery.Asc);
+
+ var toBeDealedCount = _subjectVisitRepository
+ //.Where(t => t.Trial.TrialUserList.Any(t => t.UserId == _userInfo.Id) && t.Trial.clinicalDataTrialSets.Any(t => t.ClinicalDataLevel == ClinicalLevel.Subject && t.IsConfirm))
+ .Where(u => u.IsBaseLine && u.SubmitState != SubmitStateEnum.Submitted).Count();
+
+ return ResponseOutput.Ok(result, new { TotalToBeDealedCount = toBeDealedCount });
+
+ }
+
+
+ ///
+ /// 临床数据 --CRC 待确认
+ ///
+ ///
+ ///
+ ///
+ [HttpPost]
+ public async Task>> GetImageClinicalDataToBeConfirmList(ImageClinicalDataToBeDoneQuery inQuery,
+ [FromServices] IRepository _subjectVisitRepository,
+ [FromServices] IRepository _trialRepository)
+ {
+
+ var query = _trialRepository
+ .Where(t => t.TrialUserList.Any(t => t.UserId == _userInfo.Id))
+ //.Where(t => t.clinicalDataTrialSets.Any(t => t.ClinicalDataLevel == ClinicalLevel.Subject && t.IsConfirm))
+ .Select(t => new ImageClinicalDataToBeDoneDto()
+ {
+ TrialId = t.Id,
+ ResearchProgramNo = t.ResearchProgramNo,
+ ExperimentName = t.ExperimentName,
+ TrialCode = t.TrialCode,
+ UrgentCount = t.SubjectVisitList.Where(u => u.IsBaseLine && u.SubmitState != SubmitStateEnum.Submitted && u.IsUrgent).Count(),
+ ToBeDealedCount = t.ReadingClinicalDataList.Where(x => !x.IsSign && x.ClinicalDataTrialSet.UploadRole == UploadRole.CRC && x.ClinicalDataTrialSet.ClinicalDataLevel != ClinicalLevel.SubjectVisit && x.ClinicalDataTrialSet.ClinicalDataLevel != ClinicalLevel.Subject).Count(),
+ ToBeVisitCount = t.ReadingClinicalDataList.Where(x => !x.IsSign && x.ClinicalDataTrialSet.UploadRole == UploadRole.CRC && x.ClinicalDataTrialSet.ClinicalDataLevel == ClinicalLevel.SubjectVisit).Count(),
+ ToAllCount = t.ReadingClinicalDataList.Where(x => !x.IsSign && x.ClinicalDataTrialSet.UploadRole == UploadRole.CRC).Count(),
+ ReadModuleCount = t.ReadModuleList.Where(x => !x.IsPMConfirm).Count(),
+ }).Where(x => x.ReadModuleCount > 0);
var result = await query.ToPagedListAsync(inQuery.PageIndex, inQuery.PageSize, string.IsNullOrEmpty(inQuery.SortField) ? nameof(ImageClinicalDataToBeDoneDto.TrialId) : inQuery.SortField, inQuery.Asc);