IsClinicalDataSign IsNeedClinicalDataSign
parent
64605dfa25
commit
3eaa8a1078
|
@ -288,7 +288,7 @@ namespace IRaCIS.Core.Application.ViewModel
|
|||
|
||||
public String VisitName { get; set; }
|
||||
|
||||
public String BlindName { get; set; }
|
||||
public bool IsBaseLine { get; set; }
|
||||
|
||||
public DateTime? CheckPassedTime { get; set; }
|
||||
|
||||
|
|
|
@ -137,6 +137,9 @@ namespace IRaCIS.Core.Application.ViewModel
|
|||
|
||||
public string BlindSubjectCode { 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
|
||||
|
|
|
@ -519,7 +519,10 @@ namespace IRaCIS.Core.Application.Service
|
|||
SouceReadModuleId = c.SouceReadModuleId,
|
||||
|
||||
|
||||
|
||||
TrialReadingCriterionId=c.TrialReadingCriterionId,
|
||||
IsClinicalDataSign = c.IsClinicalDataSign,
|
||||
IsNeedClinicalDataSign = c.IsNeedClinicalDataSign,
|
||||
|
||||
//自身一致性才有意义
|
||||
//IsHaveGeneratedTask = c.Subject.SubjectVisitTaskList.Any(t => t.ConsistentAnalysisOriginalTaskId == c.Id),
|
||||
|
@ -539,6 +542,10 @@ namespace IRaCIS.Core.Application.Service
|
|||
TrialId = c.TrialId,
|
||||
SourceSubjectVisitId = c.SourceSubjectVisitId,
|
||||
SouceReadModuleId = c.SouceReadModuleId,
|
||||
|
||||
TrialReadingCriterionId = c.TrialReadingCriterionId,
|
||||
IsClinicalDataSign = c.IsClinicalDataSign,
|
||||
IsNeedClinicalDataSign = c.IsNeedClinicalDataSign,
|
||||
}).ToList(),
|
||||
|
||||
}).ToList()
|
||||
|
@ -629,7 +636,10 @@ namespace IRaCIS.Core.Application.Service
|
|||
|
||||
SourceSubjectVisitId = c.SourceSubjectVisitId,
|
||||
SouceReadModuleId = c.SouceReadModuleId,
|
||||
|
||||
TrialReadingCriterionId = c.TrialReadingCriterionId,
|
||||
IsClinicalDataSign = c.IsClinicalDataSign,
|
||||
IsNeedClinicalDataSign = c.IsNeedClinicalDataSign,
|
||||
|
||||
}).ToList()
|
||||
|
||||
|
|
|
@ -39,13 +39,18 @@ namespace IRaCIS.Core.Application.Service
|
|||
|
||||
private readonly IRepository<ReadingQuestionCriterionTrial> _trialReadingCriterionRepository;
|
||||
|
||||
private readonly IRepository<ClinicalDataTrialSet> _trialClinicalDataSetRepository;
|
||||
|
||||
|
||||
public VisitTaskHelpeService(IRepository<VisitTask> visitTaskRepository, IRepository<SubjectUser> subjectUserRepository, IRepository<Trial> trialRepository, IEasyCachingProvider provider,
|
||||
IRepository<SubjectVisit> subjectVisitRepository,
|
||||
IRepository<ReadModule> readModuleRepository,
|
||||
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;
|
||||
_trialRepository = trialRepository;
|
||||
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)
|
||||
{
|
||||
|
||||
var trialId = generateTaskCommand.TrialId;
|
||||
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 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 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)),
|
||||
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()
|
||||
{
|
||||
|
@ -348,7 +397,8 @@ namespace IRaCIS.Core.Application.Service
|
|||
TaskCode = AppSettings.GetCodeStr(currentMaxCodeInt + 2, nameof(VisitTask)),
|
||||
ReadingCategory = ReadingCategory.Visit,
|
||||
|
||||
TrialReadingCriterionId = trialReadingCriterionConfig.TrialReadingCriterionId
|
||||
TrialReadingCriterionId = trialReadingCriterionConfig.TrialReadingCriterionId,
|
||||
IsNeedClinicalDataSign = IsNeedClinicalDataSign(ReadingCategory.Visit, subjectVisit.IsBaseLine, trialReadingCriterionConfig.CriterionType, clinicalDataConfirmList)
|
||||
});
|
||||
|
||||
currentMaxCodeInt = currentMaxCodeInt + 2;
|
||||
|
@ -478,7 +528,8 @@ namespace IRaCIS.Core.Application.Service
|
|||
AllocateTime = DateTime.Now,
|
||||
DoctorUserId = task1.DoctorUserId,
|
||||
SuggesteFinishedTime = DateTime.Now.AddDays(7),
|
||||
TrialReadingCriterionId = latestTask.TrialReadingCriterionId
|
||||
TrialReadingCriterionId = latestTask.TrialReadingCriterionId,
|
||||
IsNeedClinicalDataSign = latestTask.IsNeedClinicalDataSign,
|
||||
});
|
||||
|
||||
currentMaxCodeInt = currentMaxCodeInt + 1;
|
||||
|
@ -533,7 +584,8 @@ namespace IRaCIS.Core.Application.Service
|
|||
DoctorUserId = task2.DoctorUserId,
|
||||
SuggesteFinishedTime = DateTime.Now.AddDays(7),
|
||||
|
||||
TrialReadingCriterionId = latestTask.TrialReadingCriterionId
|
||||
TrialReadingCriterionId = latestTask.TrialReadingCriterionId,
|
||||
IsNeedClinicalDataSign = latestTask.IsNeedClinicalDataSign,
|
||||
});
|
||||
|
||||
currentMaxCodeInt = currentMaxCodeInt + 1;
|
||||
|
@ -609,7 +661,9 @@ namespace IRaCIS.Core.Application.Service
|
|||
SourceSubjectVisitId = subjectVisit.Id,
|
||||
TaskCode = AppSettings.GetCodeStr(currentMaxCodeInt + 1, nameof(VisitTask)),
|
||||
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,
|
||||
TaskAllocationState = TaskAllocationState.Allocated,
|
||||
AllocateTime = DateTime.Now,
|
||||
DoctorUserId = singleTask.DoctorUserId
|
||||
DoctorUserId = singleTask.DoctorUserId,
|
||||
|
||||
TrialReadingCriterionId = latestTask.TrialReadingCriterionId,
|
||||
IsNeedClinicalDataSign = latestTask.IsNeedClinicalDataSign,
|
||||
|
||||
});
|
||||
|
||||
currentMaxCodeInt = currentMaxCodeInt + 1;
|
||||
|
@ -823,7 +881,6 @@ namespace IRaCIS.Core.Application.Service
|
|||
|
||||
var newTask = await _visitTaskRepository.AddAsync(new VisitTask()
|
||||
{
|
||||
TrialReadingCriterionId = reReadingVisitTask.TrialReadingCriterionId,
|
||||
|
||||
TrialId = reReadingVisitTask.TrialId,
|
||||
SubjectId = reReadingVisitTask.SubjectId,
|
||||
|
@ -847,6 +904,9 @@ namespace IRaCIS.Core.Application.Service
|
|||
BlindTrialSiteCode = reReadingVisitTask.BlindTrialSiteCode,
|
||||
|
||||
|
||||
TrialReadingCriterionId = reReadingVisitTask.TrialReadingCriterionId,
|
||||
IsNeedClinicalDataSign=reReadingVisitTask.IsNeedClinicalDataSign,
|
||||
IsClinicalDataSign= reReadingVisitTask.IsClinicalDataSign,
|
||||
|
||||
// TaskAllocationState = reReadingVisitTask.TaskAllocationState,
|
||||
// AllocateTime = DateTime.Now,
|
||||
|
@ -914,13 +974,16 @@ namespace IRaCIS.Core.Application.Service
|
|||
|
||||
SouceReadModuleId = task.SouceReadModuleId,
|
||||
SourceSubjectVisitId = task.SourceSubjectVisitId,
|
||||
BlindTrialSiteCode = task.BlindTrialSiteCode,
|
||||
BlindSubjectCode = task.BlindSubjectCode,
|
||||
|
||||
ConsistentAnalysisOriginalTaskId = task.Id,
|
||||
IsAnalysisCreate = true,
|
||||
IsSelfAnalysis = true,
|
||||
|
||||
TrialReadingCriterionId = task.TrialReadingCriterionId,
|
||||
BlindTrialSiteCode = task.BlindTrialSiteCode,
|
||||
BlindSubjectCode = task.BlindSubjectCode,
|
||||
IsNeedClinicalDataSign =task.IsNeedClinicalDataSign,
|
||||
IsClinicalDataSign=task.IsClinicalDataSign
|
||||
};
|
||||
|
||||
await _visitTaskRepository.AddAsync(consistentTask);
|
||||
|
@ -965,6 +1028,8 @@ namespace IRaCIS.Core.Application.Service
|
|||
TrialReadingCriterionId = task.TrialReadingCriterionId,
|
||||
BlindTrialSiteCode = task.BlindTrialSiteCode,
|
||||
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 criterionType = await _trialReadingCriterionRepository.Where(t => t.Id == originalTaskInfo.TrialReadingCriterionId).Select(t => t.CriterionType).FirstOrDefaultAsync();
|
||||
|
||||
// 需要添加全局任务再添加
|
||||
if (originalTaskInfo.TrialReadingCriterion.IsGlobalReading)
|
||||
{
|
||||
|
@ -1060,6 +1127,7 @@ namespace IRaCIS.Core.Application.Service
|
|||
ReadingCategory = item.ReadingCategory,
|
||||
|
||||
TrialReadingCriterionId = originalTaskInfo.TrialReadingCriterionId,
|
||||
IsNeedClinicalDataSign = IsNeedClinicalDataSign(ReadingCategory.Global, false, criterionType, clinicalDataConfirmList)
|
||||
});
|
||||
|
||||
currentMaxCodeInt = currentMaxCodeInt + 1;
|
||||
|
@ -1073,7 +1141,7 @@ namespace IRaCIS.Core.Application.Service
|
|||
|
||||
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)
|
||||
{
|
||||
|
@ -1105,6 +1173,9 @@ namespace IRaCIS.Core.Application.Service
|
|||
ReadingCategory = item.ReadingCategory,
|
||||
|
||||
TrialReadingCriterionId = originalTaskInfo.TrialReadingCriterionId,
|
||||
|
||||
IsNeedClinicalDataSign = IsNeedClinicalDataSign(ReadingCategory.Oncology, false, criterionType, clinicalDataConfirmList)
|
||||
|
||||
});
|
||||
|
||||
singleTask.AllocateTime = DateTime.Now;
|
||||
|
|
|
@ -1669,33 +1669,33 @@ namespace IRaCIS.Core.Application.Service.Allocation
|
|||
newTask.SuggesteFinishedTime = DateTime.Now.AddDays(7);
|
||||
|
||||
//拷贝后续表单
|
||||
//if (visitTaskReReadingAppply.IsCopyFollowForms && origenalTask.VisitTaskNum != influenceTask.VisitTaskNum)
|
||||
//{
|
||||
// if (origenalTask.ReadingCategory == ReadingCategory.Visit)
|
||||
// {
|
||||
// var list = _readingTaskQuestionAnswerRepository.Where(t => t.VisitTaskId == origenalTask.Id).ToList();
|
||||
if (visitTaskReReadingAppply.IsCopyFollowForms && origenalTask.VisitTaskNum != influenceTask.VisitTaskNum)
|
||||
{
|
||||
if (origenalTask.ReadingCategory == ReadingCategory.Visit)
|
||||
{
|
||||
var list = _readingTaskQuestionAnswerRepository.Where(t => t.VisitTaskId == origenalTask.Id).ToList();
|
||||
|
||||
// foreach (var item in list)
|
||||
// {
|
||||
// item.Id = Guid.Empty;
|
||||
// item.VisitTaskId = newTask.Id;
|
||||
// }
|
||||
foreach (var item in list)
|
||||
{
|
||||
item.Id = Guid.Empty;
|
||||
item.VisitTaskId = newTask.Id;
|
||||
}
|
||||
|
||||
// _ = _readingTaskQuestionAnswerRepository.AddRangeAsync(list).Result;
|
||||
// }
|
||||
// else if (origenalTask.ReadingCategory == ReadingCategory.Global)
|
||||
// {
|
||||
// var list = _repository.Where<ReadingGlobalTaskInfo>(t => t.GlobalTaskId == origenalTask.Id).ToList();
|
||||
_ = _readingTaskQuestionAnswerRepository.AddRangeAsync(list).Result;
|
||||
}
|
||||
//else if (origenalTask.ReadingCategory == ReadingCategory.Global)
|
||||
//{
|
||||
// var list = _repository.Where<ReadingGlobalTaskInfo>(t => t.GlobalTaskId == origenalTask.Id).ToList();
|
||||
|
||||
// foreach (var item in list)
|
||||
// {
|
||||
// item.Id = Guid.Empty;
|
||||
// item.GlobalTaskId = newTask.Id;
|
||||
// }
|
||||
// foreach (var item in list)
|
||||
// {
|
||||
// item.Id = Guid.Empty;
|
||||
// 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;
|
||||
}
|
||||
else if (origenalTask.ReadingCategory == ReadingCategory.Global)
|
||||
{
|
||||
var list = _repository.Where<ReadingGlobalTaskInfo>(t => t.GlobalTaskId == origenalTask.Id).ToList();
|
||||
//else if (origenalTask.ReadingCategory == ReadingCategory.Global)
|
||||
//{
|
||||
// var list = _repository.Where<ReadingGlobalTaskInfo>(t => t.GlobalTaskId == origenalTask.Id).ToList();
|
||||
|
||||
foreach (var item in list)
|
||||
{
|
||||
item.Id = Guid.Empty;
|
||||
item.GlobalTaskId = newTask.Id;
|
||||
}
|
||||
// foreach (var item in list)
|
||||
// {
|
||||
// item.Id = Guid.Empty;
|
||||
// item.GlobalTaskId = newTask.Id;
|
||||
// }
|
||||
|
||||
_ = _repository.AddRangeAsync(list).Result;
|
||||
}
|
||||
// _ = _repository.AddRangeAsync(list).Result;
|
||||
//}
|
||||
|
||||
|
||||
}
|
||||
|
|
|
@ -272,6 +272,9 @@ namespace IRaCIS.Core.Application.Service.Inspection.DTO
|
|||
/// 阅片临床数据ID
|
||||
/// </summary>
|
||||
public Guid ReadingClinicalDataId { get; set; }
|
||||
|
||||
[NotDefault]
|
||||
public Guid TrialReadingCriterionId { get; set; }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
|
|
@ -248,11 +248,16 @@ namespace IRaCIS.Application.Services
|
|||
|
||||
public async Task<IResponseOutput> ReadClinicalDataSign(ReadingClinicalDataSignIndto inDto)
|
||||
{
|
||||
await _readingClinicalDataRepository.UpdatePartialFromQueryAsync(x => x.Id == inDto.ReadingClinicalDataId, x => new ReadingClinicalData()
|
||||
{
|
||||
IsSign = true,
|
||||
ReadingClinicalDataState = ReadingClinicalDataStatus.HaveSigned
|
||||
});
|
||||
var data = await _readingClinicalDataRepository.FirstOrDefaultAsync(t => t.Id == inDto.ReadingClinicalDataId);
|
||||
|
||||
data.IsSign = true;
|
||||
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();
|
||||
|
||||
|
@ -261,9 +266,83 @@ namespace IRaCIS.Application.Services
|
|||
|
||||
await this.iServiceProvider.GetService<IReadingImageTaskService>().AddOncologyTask(readingId);
|
||||
|
||||
await DealVisiTaskClinicalDataSignedAsync(data.TrialId, data.SubjectId, data.ReadingId, data.IsVisit, inDto.TrialReadingCriterionId);
|
||||
|
||||
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]
|
||||
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, x => x.ClinicalDataLevel == ClinicalLevel.ImageRead || x.ClinicalDataLevel == ClinicalLevel.OncologyRead)
|
||||
.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()
|
||||
{
|
||||
ClinicalDataLevel = x.ClinicalDataLevel,
|
||||
|
@ -465,12 +544,12 @@ namespace IRaCIS.Application.Services
|
|||
{
|
||||
ClinicalDataLevel = x.ClinicalDataTrialSet.ClinicalDataLevel,
|
||||
SubjectId = x.SubjectId,
|
||||
ReadingId= x.ReadingId,
|
||||
ReadingId = x.ReadingId,
|
||||
ClinicalDataSetName = x.ClinicalDataTrialSet.ClinicalDataSetName,
|
||||
ClinicalDataTrialSetId = x.ClinicalDataTrialSetId,
|
||||
IsSign = x.IsSign,
|
||||
ClinicalUploadType = x.ClinicalDataTrialSet.ClinicalUploadType,
|
||||
CriterionEnumList= x.ClinicalDataTrialSet.CriterionEnumList,
|
||||
CriterionEnumList = x.ClinicalDataTrialSet.CriterionEnumList,
|
||||
Id = x.Id,
|
||||
UploadRole = x.ClinicalDataTrialSet.UploadRole,
|
||||
IsCRCUpload = x.ClinicalDataTrialSet.UploadRole == UploadRole.CRC,
|
||||
|
@ -488,7 +567,7 @@ namespace IRaCIS.Application.Services
|
|||
// 根据标准
|
||||
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();
|
||||
}
|
||||
|
||||
|
@ -527,12 +606,12 @@ namespace IRaCIS.Application.Services
|
|||
.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)
|
||||
|
||||
.Where(x=>x.ClinicalDataTrialSet.CriterionEnumListStr.Contains(((int)criterionType).ToString()))
|
||||
.Where(x => x.ClinicalDataTrialSet.CriterionEnumListStr.Contains(((int)criterionType).ToString()))
|
||||
.Select(x => new GetReadingClinicalDataListOutDto()
|
||||
{
|
||||
ClinicalDataLevel = x.ClinicalDataTrialSet.ClinicalDataLevel,
|
||||
SubjectId = x.SubjectId,
|
||||
ReadingId=x.ReadingId,
|
||||
ReadingId = x.ReadingId,
|
||||
ClinicalDataSetName = x.ClinicalDataTrialSet.ClinicalDataSetName,
|
||||
ClinicalDataTrialSetId = x.ClinicalDataTrialSetId,
|
||||
IsSign = x.IsSign,
|
||||
|
|
|
@ -222,6 +222,13 @@ namespace IRaCIS.Core.Domain.Models
|
|||
#endregion
|
||||
|
||||
|
||||
//临床数据
|
||||
|
||||
public bool IsNeedClinicalDataSign { get; set; }
|
||||
|
||||
public bool IsClinicalDataSign { get; set; }
|
||||
|
||||
|
||||
[JsonIgnore]
|
||||
|
||||
public Trial Trial { get; set; }
|
||||
|
|
Loading…
Reference in New Issue