IsClinicalDataSign IsNeedClinicalDataSign

Uat_Study
{872297557@qq.com} 2023-01-10 15:08:44 +08:00
parent 64605dfa25
commit 3eaa8a1078
8 changed files with 238 additions and 65 deletions

View File

@ -288,7 +288,7 @@ namespace IRaCIS.Core.Application.ViewModel
public String VisitName { get; set; } public String VisitName { get; set; }
public String BlindName { get; set; } public bool IsBaseLine { get; set; }
public DateTime? CheckPassedTime { get; set; } public DateTime? CheckPassedTime { get; set; }

View File

@ -137,6 +137,9 @@ namespace IRaCIS.Core.Application.ViewModel
public string BlindSubjectCode { get; set; } = string.Empty; public string BlindSubjectCode { get; set; } = string.Empty;
public string BlindTrialSiteCode { get; set; } = string.Empty; public string BlindTrialSiteCode { get; set; } = string.Empty;
public bool IsNeedClinicalDataSign { get; set; }
public bool IsClinicalDataSign { get; set; }
} }
public class VisitTaskSimpleDTO :VisitTaskGroupSimpleDTO public class VisitTaskSimpleDTO :VisitTaskGroupSimpleDTO

View File

@ -519,7 +519,10 @@ namespace IRaCIS.Core.Application.Service
SouceReadModuleId = c.SouceReadModuleId, SouceReadModuleId = c.SouceReadModuleId,
TrialReadingCriterionId=c.TrialReadingCriterionId, TrialReadingCriterionId=c.TrialReadingCriterionId,
IsClinicalDataSign = c.IsClinicalDataSign,
IsNeedClinicalDataSign = c.IsNeedClinicalDataSign,
//自身一致性才有意义 //自身一致性才有意义
//IsHaveGeneratedTask = c.Subject.SubjectVisitTaskList.Any(t => t.ConsistentAnalysisOriginalTaskId == c.Id), //IsHaveGeneratedTask = c.Subject.SubjectVisitTaskList.Any(t => t.ConsistentAnalysisOriginalTaskId == c.Id),
@ -539,6 +542,10 @@ namespace IRaCIS.Core.Application.Service
TrialId = c.TrialId, TrialId = c.TrialId,
SourceSubjectVisitId = c.SourceSubjectVisitId, SourceSubjectVisitId = c.SourceSubjectVisitId,
SouceReadModuleId = c.SouceReadModuleId, SouceReadModuleId = c.SouceReadModuleId,
TrialReadingCriterionId = c.TrialReadingCriterionId,
IsClinicalDataSign = c.IsClinicalDataSign,
IsNeedClinicalDataSign = c.IsNeedClinicalDataSign,
}).ToList(), }).ToList(),
}).ToList() }).ToList()
@ -629,7 +636,10 @@ namespace IRaCIS.Core.Application.Service
SourceSubjectVisitId = c.SourceSubjectVisitId, SourceSubjectVisitId = c.SourceSubjectVisitId,
SouceReadModuleId = c.SouceReadModuleId, SouceReadModuleId = c.SouceReadModuleId,
TrialReadingCriterionId = c.TrialReadingCriterionId, TrialReadingCriterionId = c.TrialReadingCriterionId,
IsClinicalDataSign = c.IsClinicalDataSign,
IsNeedClinicalDataSign = c.IsNeedClinicalDataSign,
}).ToList() }).ToList()

View File

@ -39,13 +39,18 @@ namespace IRaCIS.Core.Application.Service
private readonly IRepository<ReadingQuestionCriterionTrial> _trialReadingCriterionRepository; private readonly IRepository<ReadingQuestionCriterionTrial> _trialReadingCriterionRepository;
private readonly IRepository<ClinicalDataTrialSet> _trialClinicalDataSetRepository;
public VisitTaskHelpeService(IRepository<VisitTask> visitTaskRepository, IRepository<SubjectUser> subjectUserRepository, IRepository<Trial> trialRepository, IEasyCachingProvider provider, public VisitTaskHelpeService(IRepository<VisitTask> visitTaskRepository, IRepository<SubjectUser> subjectUserRepository, IRepository<Trial> trialRepository, IEasyCachingProvider provider,
IRepository<SubjectVisit> subjectVisitRepository, IRepository<SubjectVisit> subjectVisitRepository,
IRepository<ReadModule> readModuleRepository, IRepository<ReadModule> readModuleRepository,
IRepository<ReadingJudgeInfo> readingJudgeInfoRepository, IRepository<ReadingJudgeInfo> readingJudgeInfoRepository,
IRepository<TaskAllocationRule> taskAllocationRuleRepository, IMapper mapper, IUserInfo userInfo, IRepository<VisitTaskReReading> visitTaskReReadingRepository, IRepository<ReadingQuestionCriterionTrial> trialReadingCriterionRepository) IRepository<TaskAllocationRule> taskAllocationRuleRepository, IMapper mapper, IUserInfo userInfo, IRepository<VisitTaskReReading> visitTaskReReadingRepository,
IRepository<ReadingQuestionCriterionTrial> trialReadingCriterionRepository, IRepository<ClinicalDataTrialSet> trialClinicalDataSetRepository)
{ {
_trialClinicalDataSetRepository = trialClinicalDataSetRepository;
_visitTaskRepository = visitTaskRepository; _visitTaskRepository = visitTaskRepository;
_trialRepository = trialRepository; _trialRepository = trialRepository;
this._readModuleRepository = readModuleRepository; this._readModuleRepository = readModuleRepository;
@ -252,16 +257,59 @@ namespace IRaCIS.Core.Application.Service
} }
private bool IsNeedClinicalDataSign(ReadingCategory readingCategory, bool isbaseLine, CriterionType criterionType ,List<ClinicalDataTrialSet> trialClinicalDataSetList)
{
//访视
if (readingCategory==ReadingCategory.Visit)
{
if (isbaseLine)
{
//return trialClinicalDataSetList.Where(t=>t.CriterionEnumList.Any(c=>c==(int)criterionType) && (t.ClinicalDataLevel == ClinicalLevel.Subject || t.ClinicalDataLevel == ClinicalLevel.SubjectVisit)).Count()> 0;
return trialClinicalDataSetList.Any(t => t.CriterionEnumList.Any(c => c == (int)criterionType) && (t.ClinicalDataLevel == ClinicalLevel.Subject || t.ClinicalDataLevel == ClinicalLevel.SubjectVisit));
}
else
{
return trialClinicalDataSetList.Any(t => t.CriterionEnumList.Any(c => c == (int)criterionType) && t.ClinicalDataLevel == ClinicalLevel.SubjectVisit);
}
}
else if (readingCategory == ReadingCategory.Judge)
{
return false;
}
//阅片期
else if (readingCategory == ReadingCategory.Global)
{
return trialClinicalDataSetList.Any(t => t.CriterionEnumList.Any(c => c == (int)criterionType) && t.ClinicalDataLevel == ClinicalLevel.ImageRead);
}
// 肿瘤学
else if (readingCategory == ReadingCategory.Oncology)
{
return trialClinicalDataSetList.Any(t => t.CriterionEnumList.Any(c => c == (int)criterionType) && t.ClinicalDataLevel == ClinicalLevel.OncologyRead);
}
else
{
return false;
}
}
public async Task AddTaskAsync(GenerateTaskCommand generateTaskCommand) public async Task AddTaskAsync(GenerateTaskCommand generateTaskCommand)
{ {
var trialId = generateTaskCommand.TrialId; var trialId = generateTaskCommand.TrialId;
var isAssignSubjectToDoctor = generateTaskCommand.IsAssignSubjectToDoctor; var isAssignSubjectToDoctor = generateTaskCommand.IsAssignSubjectToDoctor;
var trialReadingCriterionConfigList = _trialReadingCriterionRepository.Where(t => t.TrialId == trialId && t.ReadingInfoSignTime != null).Select(t => new { TrialReadingCriterionId = t.Id, t.ReadingTool, t.ReadingType, t.IsReadingTaskViewInOrder, t.IsFollowVisitAutoAssign, t.IsFollowGlobalVisitAutoAssign, t.FollowGlobalVisitAutoAssignDefaultState, t.FollowVisitAutoAssignDefaultState, t.TaskAllocateObjEnum }).ToList(); var trialReadingCriterionConfigList = _trialReadingCriterionRepository.Where(t => t.TrialId == trialId && t.ReadingInfoSignTime != null).Select(t => new { TrialReadingCriterionId = t.Id, t.ReadingTool, t.ReadingType, t.IsReadingTaskViewInOrder, t.IsFollowVisitAutoAssign, t.IsFollowGlobalVisitAutoAssign, t.FollowGlobalVisitAutoAssignDefaultState, t.FollowVisitAutoAssignDefaultState, t.TaskAllocateObjEnum,t.CriterionType }).ToList();
var visitBlindConfig = _trialRepository.Where(t => t.Id == trialId).Select(t => new { t.BlindBaseLineName, t.BlindFollowUpPrefix }).FirstOrDefault(); var visitBlindConfig = _trialRepository.Where(t => t.Id == trialId).Select(t => new { t.BlindBaseLineName, t.BlindFollowUpPrefix }).FirstOrDefault();
//获取确认的临床数据配置
var clinicalDataConfirmList = _trialClinicalDataSetRepository.Where(t => t.TrialId == trialId && t.IsConfirm).ToList();
var dbMaxCode = _visitTaskRepository.Where(t => t.TrialId == trialId).Select(t => t.Code).DefaultIfEmpty().Max(); var dbMaxCode = _visitTaskRepository.Where(t => t.TrialId == trialId).Select(t => t.Code).DefaultIfEmpty().Max();
var cacheMaxCodeInt = _provider.Get<int>($"{trialId}_{StaticData.CacheKey.TaskMaxCode}").Value; var cacheMaxCodeInt = _provider.Get<int>($"{trialId}_{StaticData.CacheKey.TaskMaxCode}").Value;
@ -330,8 +378,9 @@ namespace IRaCIS.Core.Application.Service
TaskCode = AppSettings.GetCodeStr(currentMaxCodeInt + 1, nameof(VisitTask)), TaskCode = AppSettings.GetCodeStr(currentMaxCodeInt + 1, nameof(VisitTask)),
ReadingCategory = ReadingCategory.Visit, ReadingCategory = ReadingCategory.Visit,
TrialReadingCriterionId = trialReadingCriterionConfig.TrialReadingCriterionId TrialReadingCriterionId = trialReadingCriterionConfig.TrialReadingCriterionId,
}); IsNeedClinicalDataSign = IsNeedClinicalDataSign(ReadingCategory.Visit, subjectVisit.IsBaseLine, trialReadingCriterionConfig.CriterionType, clinicalDataConfirmList)
}); ;
var task2 = await _visitTaskRepository.AddAsync(new VisitTask() var task2 = await _visitTaskRepository.AddAsync(new VisitTask()
{ {
@ -348,7 +397,8 @@ namespace IRaCIS.Core.Application.Service
TaskCode = AppSettings.GetCodeStr(currentMaxCodeInt + 2, nameof(VisitTask)), TaskCode = AppSettings.GetCodeStr(currentMaxCodeInt + 2, nameof(VisitTask)),
ReadingCategory = ReadingCategory.Visit, ReadingCategory = ReadingCategory.Visit,
TrialReadingCriterionId = trialReadingCriterionConfig.TrialReadingCriterionId TrialReadingCriterionId = trialReadingCriterionConfig.TrialReadingCriterionId,
IsNeedClinicalDataSign = IsNeedClinicalDataSign(ReadingCategory.Visit, subjectVisit.IsBaseLine, trialReadingCriterionConfig.CriterionType, clinicalDataConfirmList)
}); });
currentMaxCodeInt = currentMaxCodeInt + 2; currentMaxCodeInt = currentMaxCodeInt + 2;
@ -478,7 +528,8 @@ namespace IRaCIS.Core.Application.Service
AllocateTime = DateTime.Now, AllocateTime = DateTime.Now,
DoctorUserId = task1.DoctorUserId, DoctorUserId = task1.DoctorUserId,
SuggesteFinishedTime = DateTime.Now.AddDays(7), SuggesteFinishedTime = DateTime.Now.AddDays(7),
TrialReadingCriterionId = latestTask.TrialReadingCriterionId TrialReadingCriterionId = latestTask.TrialReadingCriterionId,
IsNeedClinicalDataSign = latestTask.IsNeedClinicalDataSign,
}); });
currentMaxCodeInt = currentMaxCodeInt + 1; currentMaxCodeInt = currentMaxCodeInt + 1;
@ -533,7 +584,8 @@ namespace IRaCIS.Core.Application.Service
DoctorUserId = task2.DoctorUserId, DoctorUserId = task2.DoctorUserId,
SuggesteFinishedTime = DateTime.Now.AddDays(7), SuggesteFinishedTime = DateTime.Now.AddDays(7),
TrialReadingCriterionId = latestTask.TrialReadingCriterionId TrialReadingCriterionId = latestTask.TrialReadingCriterionId,
IsNeedClinicalDataSign = latestTask.IsNeedClinicalDataSign,
}); });
currentMaxCodeInt = currentMaxCodeInt + 1; currentMaxCodeInt = currentMaxCodeInt + 1;
@ -609,7 +661,9 @@ namespace IRaCIS.Core.Application.Service
SourceSubjectVisitId = subjectVisit.Id, SourceSubjectVisitId = subjectVisit.Id,
TaskCode = AppSettings.GetCodeStr(currentMaxCodeInt + 1, nameof(VisitTask)), TaskCode = AppSettings.GetCodeStr(currentMaxCodeInt + 1, nameof(VisitTask)),
ReadingCategory = ReadingCategory.Visit, ReadingCategory = ReadingCategory.Visit,
TrialReadingCriterionId = trialReadingCriterionConfig.TrialReadingCriterionId
TrialReadingCriterionId = trialReadingCriterionConfig.TrialReadingCriterionId,
IsNeedClinicalDataSign = IsNeedClinicalDataSign(ReadingCategory.Visit, subjectVisit.IsBaseLine, trialReadingCriterionConfig.CriterionType, clinicalDataConfirmList)
}); });
@ -732,7 +786,11 @@ namespace IRaCIS.Core.Application.Service
IsSelfAnalysis = latestTask.IsSelfAnalysis, IsSelfAnalysis = latestTask.IsSelfAnalysis,
TaskAllocationState = TaskAllocationState.Allocated, TaskAllocationState = TaskAllocationState.Allocated,
AllocateTime = DateTime.Now, AllocateTime = DateTime.Now,
DoctorUserId = singleTask.DoctorUserId DoctorUserId = singleTask.DoctorUserId,
TrialReadingCriterionId = latestTask.TrialReadingCriterionId,
IsNeedClinicalDataSign = latestTask.IsNeedClinicalDataSign,
}); });
currentMaxCodeInt = currentMaxCodeInt + 1; currentMaxCodeInt = currentMaxCodeInt + 1;
@ -823,7 +881,6 @@ namespace IRaCIS.Core.Application.Service
var newTask = await _visitTaskRepository.AddAsync(new VisitTask() var newTask = await _visitTaskRepository.AddAsync(new VisitTask()
{ {
TrialReadingCriterionId = reReadingVisitTask.TrialReadingCriterionId,
TrialId = reReadingVisitTask.TrialId, TrialId = reReadingVisitTask.TrialId,
SubjectId = reReadingVisitTask.SubjectId, SubjectId = reReadingVisitTask.SubjectId,
@ -847,6 +904,9 @@ namespace IRaCIS.Core.Application.Service
BlindTrialSiteCode = reReadingVisitTask.BlindTrialSiteCode, BlindTrialSiteCode = reReadingVisitTask.BlindTrialSiteCode,
TrialReadingCriterionId = reReadingVisitTask.TrialReadingCriterionId,
IsNeedClinicalDataSign=reReadingVisitTask.IsNeedClinicalDataSign,
IsClinicalDataSign= reReadingVisitTask.IsClinicalDataSign,
// TaskAllocationState = reReadingVisitTask.TaskAllocationState, // TaskAllocationState = reReadingVisitTask.TaskAllocationState,
// AllocateTime = DateTime.Now, // AllocateTime = DateTime.Now,
@ -914,13 +974,16 @@ namespace IRaCIS.Core.Application.Service
SouceReadModuleId = task.SouceReadModuleId, SouceReadModuleId = task.SouceReadModuleId,
SourceSubjectVisitId = task.SourceSubjectVisitId, SourceSubjectVisitId = task.SourceSubjectVisitId,
BlindTrialSiteCode = task.BlindTrialSiteCode,
BlindSubjectCode = task.BlindSubjectCode,
ConsistentAnalysisOriginalTaskId = task.Id, ConsistentAnalysisOriginalTaskId = task.Id,
IsAnalysisCreate = true, IsAnalysisCreate = true,
IsSelfAnalysis = true, IsSelfAnalysis = true,
TrialReadingCriterionId = task.TrialReadingCriterionId, TrialReadingCriterionId = task.TrialReadingCriterionId,
BlindTrialSiteCode = task.BlindTrialSiteCode,
BlindSubjectCode = task.BlindSubjectCode,
IsNeedClinicalDataSign =task.IsNeedClinicalDataSign,
IsClinicalDataSign=task.IsClinicalDataSign
}; };
await _visitTaskRepository.AddAsync(consistentTask); await _visitTaskRepository.AddAsync(consistentTask);
@ -965,6 +1028,8 @@ namespace IRaCIS.Core.Application.Service
TrialReadingCriterionId = task.TrialReadingCriterionId, TrialReadingCriterionId = task.TrialReadingCriterionId,
BlindTrialSiteCode = task.BlindTrialSiteCode, BlindTrialSiteCode = task.BlindTrialSiteCode,
BlindSubjectCode = task.BlindSubjectCode, BlindSubjectCode = task.BlindSubjectCode,
IsNeedClinicalDataSign = task.IsNeedClinicalDataSign,
IsClinicalDataSign = task.IsClinicalDataSign
}; };
@ -1033,6 +1098,8 @@ namespace IRaCIS.Core.Application.Service
var originalTaskInfo = await _visitTaskRepository.Where(x => x.Id == generateTaskCommand.OriginalVisitId).Include(x => x.TrialReadingCriterion).FirstNotNullAsync(); var originalTaskInfo = await _visitTaskRepository.Where(x => x.Id == generateTaskCommand.OriginalVisitId).Include(x => x.TrialReadingCriterion).FirstNotNullAsync();
var criterionType = await _trialReadingCriterionRepository.Where(t => t.Id == originalTaskInfo.TrialReadingCriterionId).Select(t => t.CriterionType).FirstOrDefaultAsync();
// 需要添加全局任务再添加 // 需要添加全局任务再添加
if (originalTaskInfo.TrialReadingCriterion.IsGlobalReading) if (originalTaskInfo.TrialReadingCriterion.IsGlobalReading)
{ {
@ -1060,6 +1127,7 @@ namespace IRaCIS.Core.Application.Service
ReadingCategory = item.ReadingCategory, ReadingCategory = item.ReadingCategory,
TrialReadingCriterionId = originalTaskInfo.TrialReadingCriterionId, TrialReadingCriterionId = originalTaskInfo.TrialReadingCriterionId,
IsNeedClinicalDataSign = IsNeedClinicalDataSign(ReadingCategory.Global, false, criterionType, clinicalDataConfirmList)
}); });
currentMaxCodeInt = currentMaxCodeInt + 1; currentMaxCodeInt = currentMaxCodeInt + 1;
@ -1073,7 +1141,7 @@ namespace IRaCIS.Core.Application.Service
originalTaskInfo = await _visitTaskRepository.Where(x => x.Id == generateTaskCommand.OriginalVisitId).FirstNotNullAsync(); originalTaskInfo = await _visitTaskRepository.Where(x => x.Id == generateTaskCommand.OriginalVisitId).FirstNotNullAsync();
criterionType = await _trialReadingCriterionRepository.Where(t => t.Id == originalTaskInfo.TrialReadingCriterionId).Select(t => t.CriterionType).FirstOrDefaultAsync();
foreach (var item in generateTaskCommand.ReadingGenerataTaskList) foreach (var item in generateTaskCommand.ReadingGenerataTaskList)
{ {
@ -1105,6 +1173,9 @@ namespace IRaCIS.Core.Application.Service
ReadingCategory = item.ReadingCategory, ReadingCategory = item.ReadingCategory,
TrialReadingCriterionId = originalTaskInfo.TrialReadingCriterionId, TrialReadingCriterionId = originalTaskInfo.TrialReadingCriterionId,
IsNeedClinicalDataSign = IsNeedClinicalDataSign(ReadingCategory.Oncology, false, criterionType, clinicalDataConfirmList)
}); });
singleTask.AllocateTime = DateTime.Now; singleTask.AllocateTime = DateTime.Now;

View File

@ -1669,33 +1669,33 @@ namespace IRaCIS.Core.Application.Service.Allocation
newTask.SuggesteFinishedTime = DateTime.Now.AddDays(7); newTask.SuggesteFinishedTime = DateTime.Now.AddDays(7);
//拷贝后续表单 //拷贝后续表单
//if (visitTaskReReadingAppply.IsCopyFollowForms && origenalTask.VisitTaskNum != influenceTask.VisitTaskNum) if (visitTaskReReadingAppply.IsCopyFollowForms && origenalTask.VisitTaskNum != influenceTask.VisitTaskNum)
//{ {
// if (origenalTask.ReadingCategory == ReadingCategory.Visit) if (origenalTask.ReadingCategory == ReadingCategory.Visit)
// { {
// var list = _readingTaskQuestionAnswerRepository.Where(t => t.VisitTaskId == origenalTask.Id).ToList(); var list = _readingTaskQuestionAnswerRepository.Where(t => t.VisitTaskId == origenalTask.Id).ToList();
// foreach (var item in list) foreach (var item in list)
// { {
// item.Id = Guid.Empty; item.Id = Guid.Empty;
// item.VisitTaskId = newTask.Id; item.VisitTaskId = newTask.Id;
// } }
// _ = _readingTaskQuestionAnswerRepository.AddRangeAsync(list).Result; _ = _readingTaskQuestionAnswerRepository.AddRangeAsync(list).Result;
// } }
// else if (origenalTask.ReadingCategory == ReadingCategory.Global) //else if (origenalTask.ReadingCategory == ReadingCategory.Global)
// { //{
// var list = _repository.Where<ReadingGlobalTaskInfo>(t => t.GlobalTaskId == origenalTask.Id).ToList(); // var list = _repository.Where<ReadingGlobalTaskInfo>(t => t.GlobalTaskId == origenalTask.Id).ToList();
// foreach (var item in list) // foreach (var item in list)
// { // {
// item.Id = Guid.Empty; // item.Id = Guid.Empty;
// item.GlobalTaskId = newTask.Id; // item.GlobalTaskId = newTask.Id;
// } // }
// _ = _repository.AddRangeAsync(list).Result; // _ = _repository.AddRangeAsync(list).Result;
// } //}
//} }
} }
}); });
@ -1799,18 +1799,18 @@ namespace IRaCIS.Core.Application.Service.Allocation
_ = _readingTaskQuestionAnswerRepository.AddRangeAsync(list).Result; _ = _readingTaskQuestionAnswerRepository.AddRangeAsync(list).Result;
} }
else if (origenalTask.ReadingCategory == ReadingCategory.Global) //else if (origenalTask.ReadingCategory == ReadingCategory.Global)
{ //{
var list = _repository.Where<ReadingGlobalTaskInfo>(t => t.GlobalTaskId == origenalTask.Id).ToList(); // var list = _repository.Where<ReadingGlobalTaskInfo>(t => t.GlobalTaskId == origenalTask.Id).ToList();
foreach (var item in list) // foreach (var item in list)
{ // {
item.Id = Guid.Empty; // item.Id = Guid.Empty;
item.GlobalTaskId = newTask.Id; // item.GlobalTaskId = newTask.Id;
} // }
_ = _repository.AddRangeAsync(list).Result; // _ = _repository.AddRangeAsync(list).Result;
} //}
} }

View File

@ -272,6 +272,9 @@ namespace IRaCIS.Core.Application.Service.Inspection.DTO
/// 阅片临床数据ID /// 阅片临床数据ID
/// </summary> /// </summary>
public Guid ReadingClinicalDataId { get; set; } public Guid ReadingClinicalDataId { get; set; }
[NotDefault]
public Guid TrialReadingCriterionId { get; set; }
} }
/// <summary> /// <summary>

View File

@ -19,7 +19,7 @@ namespace IRaCIS.Application.Services
private readonly IRepository<ClinicalDataTrialSet> _clinicalDataTrialSetRepository; private readonly IRepository<ClinicalDataTrialSet> _clinicalDataTrialSetRepository;
private readonly IRepository<VisitTask> _visitTaskRepository; private readonly IRepository<VisitTask> _visitTaskRepository;
private readonly IRepository<PreviousPDF> _previousPDFRepository; private readonly IRepository<PreviousPDF> _previousPDFRepository;
private readonly IRepository<SubjectVisit> _subjectVisitRepository; private readonly IRepository<SubjectVisit> _subjectVisitRepository;
private readonly IRepository<PreviousHistory> _previousHistoryRepository; private readonly IRepository<PreviousHistory> _previousHistoryRepository;
private readonly IRepository<PreviousOther> _previousOtherRepository; private readonly IRepository<PreviousOther> _previousOtherRepository;
@ -35,7 +35,7 @@ namespace IRaCIS.Application.Services
IRepository<PreviousPDF> previousPDFRepository, IRepository<PreviousPDF> previousPDFRepository,
IRepository<SubjectVisit> subjectVisitRepository, IRepository<SubjectVisit> subjectVisitRepository,
IRepository<PreviousHistory> previousHistoryRepository, IRepository<PreviousHistory> previousHistoryRepository,
IRepository<PreviousOther> previousOtherRepository, IRepository<PreviousOther> previousOtherRepository,
IRepository<PreviousSurgery> previousSurgeryRepository, IRepository<PreviousSurgery> previousSurgeryRepository,
IRepository<ReadingQuestionCriterionTrial> readingQuestionCriterionTrialRepository, IRepository<ReadingQuestionCriterionTrial> readingQuestionCriterionTrialRepository,
@ -161,7 +161,7 @@ namespace IRaCIS.Application.Services
{ {
await this.AddCRCClinicalData(inDto); await this.AddCRCClinicalData(inDto);
} }
List<GetCRCClinicalDataOutDto> cRCClinicalDataList = await _readingClinicalDataRepository.Where(x => x.ReadingId == inDto.SubjectVisitId) List<GetCRCClinicalDataOutDto> cRCClinicalDataList = await _readingClinicalDataRepository.Where(x => x.ReadingId == inDto.SubjectVisitId)
.Where(x => x.ClinicalDataTrialSet.TrialId == inDto.TrialId && x.ClinicalDataTrialSet.UploadRole == UploadRole.CRC && x.ClinicalDataTrialSet.ClinicalDataLevel != ClinicalLevel.ImageRead && x.ClinicalDataTrialSet.ClinicalDataLevel != ClinicalLevel.OncologyRead) .Where(x => x.ClinicalDataTrialSet.TrialId == inDto.TrialId && x.ClinicalDataTrialSet.UploadRole == UploadRole.CRC && x.ClinicalDataTrialSet.ClinicalDataLevel != ClinicalLevel.ImageRead && x.ClinicalDataTrialSet.ClinicalDataLevel != ClinicalLevel.OncologyRead)
@ -248,11 +248,16 @@ namespace IRaCIS.Application.Services
public async Task<IResponseOutput> ReadClinicalDataSign(ReadingClinicalDataSignIndto inDto) public async Task<IResponseOutput> ReadClinicalDataSign(ReadingClinicalDataSignIndto inDto)
{ {
await _readingClinicalDataRepository.UpdatePartialFromQueryAsync(x => x.Id == inDto.ReadingClinicalDataId, x => new ReadingClinicalData() var data = await _readingClinicalDataRepository.FirstOrDefaultAsync(t => t.Id == inDto.ReadingClinicalDataId);
{
IsSign = true, data.IsSign = true;
ReadingClinicalDataState = ReadingClinicalDataStatus.HaveSigned data.ReadingClinicalDataState = ReadingClinicalDataStatus.HaveSigned;
});
//await _readingClinicalDataRepository.UpdatePartialFromQueryAsync(x => x.Id == inDto.ReadingClinicalDataId, x => new ReadingClinicalData()
//{
// IsSign = true,
// ReadingClinicalDataState = ReadingClinicalDataStatus.HaveSigned
//});
var result = await _readingClinicalDataRepository.SaveChangesAsync(); var result = await _readingClinicalDataRepository.SaveChangesAsync();
@ -261,9 +266,83 @@ namespace IRaCIS.Application.Services
await this.iServiceProvider.GetService<IReadingImageTaskService>().AddOncologyTask(readingId); await this.iServiceProvider.GetService<IReadingImageTaskService>().AddOncologyTask(readingId);
await DealVisiTaskClinicalDataSignedAsync(data.TrialId, data.SubjectId, data.ReadingId, data.IsVisit, inDto.TrialReadingCriterionId);
return ResponseOutput.Result(result); return ResponseOutput.Result(result);
} }
//处理 任务 临床数据是否签名
private async Task DealVisiTaskClinicalDataSignedAsync(Guid trialId, Guid subjectId, Guid readingId, bool isVisit, Guid trialReadingCritrialId)
{
//获取确认的临床数据配置
var trialClinicalDataSetList = _clinicalDataTrialSetRepository.Where(t => t.TrialId == trialId && t.IsConfirm).ToList();
var criterionType = await _readingQuestionCriterionTrialRepository.Where(t => t.Id == trialReadingCritrialId).Select(t => t.CriterionType).FirstOrDefaultAsync();
// 获取确认的项目标准 废弃 签名的时候 传递标准Id
//var confirmedCtritrialList = _repository.Where<ReadingQuestionCriterionTrial>(t => t.TrialId == trialId && t.ReadingInfoSignTime != null).Select(t => new { t.Id, t.CriterionType }).ToList();
var needSignCount = 0;
var haveSignedCount = _readingClinicalDataRepository.Where(t => t.IsSign && t.ReadingClinicalDataState == ReadingClinicalDataStatus.HaveSigned && t.ReadingId == readingId && t.ClinicalDataTrialSet.UploadRole == UploadRole.PM).Count();
if (isVisit)
{
var isBaseLine = await _subjectVisitRepository.Where(t => t.Id == readingId).Select(t => t.IsBaseLine).FirstOrDefaultAsync();
//判断是否基线
if (isBaseLine)
{
//CRC 的自动签名 不用管 只用处理PM 的就好
needSignCount = trialClinicalDataSetList.Where(t => t.CriterionEnumList.Any(c => c == (int)criterionType) && (t.ClinicalDataLevel == ClinicalLevel.Subject || t.ClinicalDataLevel == ClinicalLevel.SubjectVisit) && t.UploadRole == UploadRole.PM).Count();
}
else
{
needSignCount = trialClinicalDataSetList.Where(t => t.CriterionEnumList.Any(c => c == (int)criterionType) && t.ClinicalDataLevel == ClinicalLevel.SubjectVisit && t.UploadRole == UploadRole.PM).Count();
}
if (needSignCount == haveSignedCount )
{
//将该标准 该subject 该访视 任务临床数据状态变更
await _visitTaskRepository.BatchUpdateNoTrackingAsync(t => t.TrialId == trialId && t.SubjectId == subjectId && t.TrialReadingCriterionId == trialReadingCritrialId && t.SourceSubjectVisitId == readingId, u => new VisitTask()
{
IsClinicalDataSign = true
});
}
}
else
{
//判断是影像学 还是肿瘤学阅片
var readingSetType = await _readModuleRepository.Where(t => t.Id == readingId).Select(t => t.ReadingPeriodSet.ReadingSetType).FirstOrDefaultAsync();
//影像学
if (readingSetType == ReadingSetType.ImageReading)
{
needSignCount = trialClinicalDataSetList.Where(t => t.CriterionEnumList.Any(c => c == (int)criterionType) && t.ClinicalDataLevel == ClinicalLevel.ImageRead).Count();
}
//肿瘤学
else
{
needSignCount = trialClinicalDataSetList.Where(t => t.CriterionEnumList.Any(c => c == (int)criterionType) && t.ClinicalDataLevel == ClinicalLevel.OncologyRead).Count();
}
if (needSignCount == haveSignedCount)
{
//将该标准 该subject 该阅片期|肿瘤学 任务临床数据状态变更
await _visitTaskRepository.BatchUpdateNoTrackingAsync(t => t.TrialId == trialId && t.SubjectId == subjectId && t.TrialReadingCriterionId == trialReadingCritrialId && t.SouceReadModuleId == readingId, u => new VisitTask()
{
IsClinicalDataSign = true
});
}
}
}
[HttpPut] [HttpPut]
public async Task<IResponseOutput> PMClinicalDataConfirm(PMClinicalDataConfirmCommand command) public async Task<IResponseOutput> PMClinicalDataConfirm(PMClinicalDataConfirmCommand command)
{ {
@ -329,7 +408,7 @@ namespace IRaCIS.Application.Services
.WhereIf(inDto.IsVisit && !inDto.IsBaseLine, x => x.ClinicalDataLevel == ClinicalLevel.SubjectVisit) .WhereIf(inDto.IsVisit && !inDto.IsBaseLine, x => x.ClinicalDataLevel == ClinicalLevel.SubjectVisit)
.WhereIf(!inDto.IsVisit, x => x.ClinicalDataLevel == ClinicalLevel.ImageRead || x.ClinicalDataLevel == ClinicalLevel.OncologyRead) .WhereIf(!inDto.IsVisit, x => x.ClinicalDataLevel == ClinicalLevel.ImageRead || x.ClinicalDataLevel == ClinicalLevel.OncologyRead)
.WhereIf(readModule != null, x => x.ClinicalDataLevel == keyValuePairs[readModule.ModuleType]) .WhereIf(readModule != null, x => x.ClinicalDataLevel == keyValuePairs[readModule.ModuleType])
//.WhereIf(criterion!=null,x=>x.CriterionEnumList.Contains((int)criterion.CriterionType)) .WhereIf(criterion!=null,x=>x.CriterionEnumList.Contains((int)criterion.CriterionType))
.Select(x => new GetTrialClinicalDataSelectOutDto() .Select(x => new GetTrialClinicalDataSelectOutDto()
{ {
ClinicalDataLevel = x.ClinicalDataLevel, ClinicalDataLevel = x.ClinicalDataLevel,
@ -422,7 +501,7 @@ namespace IRaCIS.Application.Services
} }
var isBaseLine = await _subjectVisitRepository.AnyAsync(x => x.Id == inDto.ReadingId && x.IsBaseLine); var isBaseLine = await _subjectVisitRepository.AnyAsync(x => x.Id == inDto.ReadingId && x.IsBaseLine);
var result = await this.GetReadingClinicalList(inDto); var result = await this.GetReadingClinicalList(inDto);
var readingIds = result.Select(x => x.ReadingId).ToList(); var readingIds = result.Select(x => x.ReadingId).ToList();
@ -465,12 +544,12 @@ namespace IRaCIS.Application.Services
{ {
ClinicalDataLevel = x.ClinicalDataTrialSet.ClinicalDataLevel, ClinicalDataLevel = x.ClinicalDataTrialSet.ClinicalDataLevel,
SubjectId = x.SubjectId, SubjectId = x.SubjectId,
ReadingId= x.ReadingId, ReadingId = x.ReadingId,
ClinicalDataSetName = x.ClinicalDataTrialSet.ClinicalDataSetName, ClinicalDataSetName = x.ClinicalDataTrialSet.ClinicalDataSetName,
ClinicalDataTrialSetId = x.ClinicalDataTrialSetId, ClinicalDataTrialSetId = x.ClinicalDataTrialSetId,
IsSign = x.IsSign, IsSign = x.IsSign,
ClinicalUploadType = x.ClinicalDataTrialSet.ClinicalUploadType, ClinicalUploadType = x.ClinicalDataTrialSet.ClinicalUploadType,
CriterionEnumList= x.ClinicalDataTrialSet.CriterionEnumList, CriterionEnumList = x.ClinicalDataTrialSet.CriterionEnumList,
Id = x.Id, Id = x.Id,
UploadRole = x.ClinicalDataTrialSet.UploadRole, UploadRole = x.ClinicalDataTrialSet.UploadRole,
IsCRCUpload = x.ClinicalDataTrialSet.UploadRole == UploadRole.CRC, IsCRCUpload = x.ClinicalDataTrialSet.UploadRole == UploadRole.CRC,
@ -488,11 +567,11 @@ namespace IRaCIS.Application.Services
// 根据标准 // 根据标准
if (inDto.VisitTaskId != null) if (inDto.VisitTaskId != null)
{ {
var criterionType = await _visitTaskRepository.Where(x => x.Id == inDto.VisitTaskId).Include(x=>x.TrialReadingCriterion).Select(x => x.TrialReadingCriterion.CriterionType).FirstNotNullAsync(); var criterionType = await _visitTaskRepository.Where(x => x.Id == inDto.VisitTaskId).Include(x => x.TrialReadingCriterion).Select(x => x.TrialReadingCriterion.CriterionType).FirstNotNullAsync();
result = result.Where(x => x.CriterionEnumList.Contains((int)criterionType)).ToList(); result = result.Where(x => x.CriterionEnumList.Contains((int)criterionType)).ToList();
} }
result = result.Where(x => !(x.ClinicalUploadType == ClinicalUploadType.PDF && x.FileList.Count() == 0)).ToList(); result = result.Where(x => !(x.ClinicalUploadType == ClinicalUploadType.PDF && x.FileList.Count() == 0)).ToList();
// 需要排除表格为空的数据 // 需要排除表格为空的数据
@ -521,18 +600,18 @@ namespace IRaCIS.Application.Services
{ {
var criterionType = await _readingQuestionCriterionTrialRepository.Where(x => x.Id == inDto.TrialReadingCriterionId).Select(x => x.CriterionType).FirstNotNullAsync(); var criterionType = await _readingQuestionCriterionTrialRepository.Where(x => x.Id == inDto.TrialReadingCriterionId).Select(x => x.CriterionType).FirstNotNullAsync();
var resultQuery = _readingClinicalDataRepository.Where(x => x.SubjectId == inDto.SubjectId).Include(x => x.ClinicalDataTrialSet) var resultQuery = _readingClinicalDataRepository.Where(x => x.SubjectId == inDto.SubjectId).Include(x => x.ClinicalDataTrialSet)
.Where(x => x.ReadingId == inDto.ReadingId || (x.SubjectId == inDto.SubjectId && x.ClinicalDataTrialSet.ClinicalDataLevel == ClinicalLevel.Subject)) .Where(x => x.ReadingId == inDto.ReadingId || (x.SubjectId == inDto.SubjectId && x.ClinicalDataTrialSet.ClinicalDataLevel == ClinicalLevel.Subject))
//.WhereIf(inDto.UploadRole == UploadRole.CRC, x => x.ClinicalDataTrialSet.UploadRole == UploadRole.CRC) //.WhereIf(inDto.UploadRole == UploadRole.CRC, x => x.ClinicalDataTrialSet.UploadRole == UploadRole.CRC)
.Where(x=>x.ClinicalDataTrialSet.CriterionEnumListStr.Contains(((int)criterionType).ToString())) .Where(x => x.ClinicalDataTrialSet.CriterionEnumListStr.Contains(((int)criterionType).ToString()))
.Select(x => new GetReadingClinicalDataListOutDto() .Select(x => new GetReadingClinicalDataListOutDto()
{ {
ClinicalDataLevel = x.ClinicalDataTrialSet.ClinicalDataLevel, ClinicalDataLevel = x.ClinicalDataTrialSet.ClinicalDataLevel,
SubjectId = x.SubjectId, SubjectId = x.SubjectId,
ReadingId=x.ReadingId, ReadingId = x.ReadingId,
ClinicalDataSetName = x.ClinicalDataTrialSet.ClinicalDataSetName, ClinicalDataSetName = x.ClinicalDataTrialSet.ClinicalDataSetName,
ClinicalDataTrialSetId = x.ClinicalDataTrialSetId, ClinicalDataTrialSetId = x.ClinicalDataTrialSetId,
IsSign = x.IsSign, IsSign = x.IsSign,

View File

@ -222,6 +222,13 @@ namespace IRaCIS.Core.Domain.Models
#endregion #endregion
//临床数据
public bool IsNeedClinicalDataSign { get; set; }
public bool IsClinicalDataSign { get; set; }
[JsonIgnore] [JsonIgnore]
public Trial Trial { get; set; } public Trial Trial { get; set; }