Uat_Study
he 2023-03-23 13:24:07 +08:00
commit 354dba5de7
4 changed files with 537 additions and 518 deletions

View File

@ -46,13 +46,16 @@ namespace IRaCIS.Core.Application.Service
private readonly IRepository<ClinicalDataTrialSet> _trialClinicalDataSetRepository; private readonly IRepository<ClinicalDataTrialSet> _trialClinicalDataSetRepository;
private readonly IRepository<ReadingClinicalData> _readingClinicalDataRepository; private readonly IRepository<ReadingClinicalData> _readingClinicalDataRepository;
private readonly IRepository<SubjectCriteriaEvaluation> _subjectCriteriaEvaluationRepository;
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<TaskAllocationRule> taskAllocationRuleRepository, IMapper mapper, IUserInfo userInfo, IRepository<VisitTaskReReading> visitTaskReReadingRepository,
IRepository<ReadingQuestionCriterionTrial> trialReadingCriterionRepository, IRepository<ClinicalDataTrialSet> trialClinicalDataSetRepository, IRepository<ReadingClinicalData> readingClinicalDataRepository) IRepository<ReadingQuestionCriterionTrial> trialReadingCriterionRepository, IRepository<ClinicalDataTrialSet> trialClinicalDataSetRepository, IRepository<ReadingClinicalData> readingClinicalDataRepository,
IRepository<SubjectCriteriaEvaluation> subjectCriteriaEvaluationRepository)
{ {
_readingClinicalDataRepository = readingClinicalDataRepository; _readingClinicalDataRepository = readingClinicalDataRepository;
_trialClinicalDataSetRepository = trialClinicalDataSetRepository; _trialClinicalDataSetRepository = trialClinicalDataSetRepository;
@ -68,7 +71,7 @@ namespace IRaCIS.Core.Application.Service
_mapper = mapper; _mapper = mapper;
_userInfo = userInfo; _userInfo = userInfo;
_visitTaskReReadingRepository = visitTaskReReadingRepository; _visitTaskReReadingRepository = visitTaskReReadingRepository;
_subjectCriteriaEvaluationRepository = subjectCriteriaEvaluationRepository;
_trialReadingCriterionRepository = trialReadingCriterionRepository; _trialReadingCriterionRepository = trialReadingCriterionRepository;
} }
@ -116,7 +119,7 @@ namespace IRaCIS.Core.Application.Service
await _visitTaskRepository.AddAsync(taskInfo); await _visitTaskRepository.AddAsync(taskInfo);
await _visitTaskRepository.BatchUpdateNoTrackingAsync(x=>x.Id==taskId, x => new VisitTask() await _visitTaskRepository.BatchUpdateNoTrackingAsync(x => x.Id == taskId, x => new VisitTask()
{ {
TaskState = TaskState.Freeze TaskState = TaskState.Freeze
}); });
@ -137,7 +140,7 @@ namespace IRaCIS.Core.Application.Service
} }
else else
{ {
needGenerateVisit = await _subjectVisitRepository.Where(t=> subjectVisitIdList.Contains(t.Id)).ToListAsync(); needGenerateVisit = await _subjectVisitRepository.Where(t => subjectVisitIdList.Contains(t.Id)).ToListAsync();
} }
@ -232,7 +235,7 @@ namespace IRaCIS.Core.Application.Service
TaskName = subjectVisit.VisitName, TaskName = subjectVisit.VisitName,
VisitTaskNum = subjectVisit.VisitNum, VisitTaskNum = subjectVisit.VisitNum,
TaskUrgentType = taskUrgentType, TaskUrgentType = taskUrgentType,
IsCanEditUrgentState= isCanEditUrgentState, IsCanEditUrgentState = isCanEditUrgentState,
//CheckPassedTime = subjectVisit.CheckPassedTime, //CheckPassedTime = subjectVisit.CheckPassedTime,
ArmEnum = Arm.DoubleReadingArm1,//特殊 ArmEnum = Arm.DoubleReadingArm1,//特殊
Code = currentMaxCodeInt, Code = currentMaxCodeInt,
@ -243,7 +246,7 @@ namespace IRaCIS.Core.Application.Service
TrialReadingCriterionId = trialReadingCriterionConfig.TrialReadingCriterionId, TrialReadingCriterionId = trialReadingCriterionConfig.TrialReadingCriterionId,
IsNeedClinicalDataSign = isNeedClinicalDataSign, IsNeedClinicalDataSign = isNeedClinicalDataSign,
IsClinicalDataSign = isClinicalDataSign IsClinicalDataSign = isClinicalDataSign
}) ; });
} }
@ -291,7 +294,7 @@ namespace IRaCIS.Core.Application.Service
task1.DoctorUserId = assignConfigList.FirstOrDefault(t => t.ArmEnum == Arm.DoubleReadingArm1).DoctorUserId; task1.DoctorUserId = assignConfigList.FirstOrDefault(t => t.ArmEnum == Arm.DoubleReadingArm1).DoctorUserId;
task1.AllocateTime = DateTime.Now; task1.AllocateTime = DateTime.Now;
task1.SuggesteFinishedTime = GetSuggessFinishTime(true,UrgentType.NotUrget); task1.SuggesteFinishedTime = GetSuggessFinishTime(true, UrgentType.NotUrget);
} }
if (assignConfigList.Any(t => t.ArmEnum == Arm.DoubleReadingArm2) && task2 != null) if (assignConfigList.Any(t => t.ArmEnum == Arm.DoubleReadingArm2) && task2 != null)
@ -469,10 +472,10 @@ namespace IRaCIS.Core.Application.Service
} }
public DateTime GetSuggessFinishTime(bool isInOrder, UrgentType urgentType ) public DateTime GetSuggessFinishTime(bool isInOrder, UrgentType urgentType)
{ {
var datetime= new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day , 22, 0, 0).AddDays(7); var datetime = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, 22, 0, 0).AddDays(7);
//switch (urgentType) //switch (urgentType)
@ -522,7 +525,7 @@ namespace IRaCIS.Core.Application.Service
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 && t.IsAutoCreate).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 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.IsAutoCreate, 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();
@ -581,6 +584,12 @@ namespace IRaCIS.Core.Application.Service
foreach (var trialReadingCriterionConfig in trialReadingCriterionConfigList) foreach (var trialReadingCriterionConfig in trialReadingCriterionConfigList)
{
var subjectCriteriaEvaluation = _subjectCriteriaEvaluationRepository.Where(t => t.TrialReadingCriterionId == trialReadingCriterionConfig.TrialReadingCriterionId && t.IsJoinEvaluation && t.SubjectId == subjectVisit.SubjectId).FirstOrDefault();
if (trialReadingCriterionConfig.IsAutoCreate == true || (trialReadingCriterionConfig.IsAutoCreate == false && subjectCriteriaEvaluation != null && subjectCriteriaEvaluation?.IsJoinEvaluation == true))
{ {
var assignConfigList = await _subjectUserRepository.Where(t => t.TrialId == trialId && t.TrialReadingCriterionId == trialReadingCriterionConfig.TrialReadingCriterionId && t.SubjectId == subjectVisit.SubjectId && t.OrignalSubjectUserId == null && t.IsConfirmed).Select(u => new { u.DoctorUserId, u.ArmEnum }).ToListAsync(); var assignConfigList = await _subjectUserRepository.Where(t => t.TrialId == trialId && t.TrialReadingCriterionId == trialReadingCriterionConfig.TrialReadingCriterionId && t.SubjectId == subjectVisit.SubjectId && t.OrignalSubjectUserId == null && t.IsConfirmed).Select(u => new { u.DoctorUserId, u.ArmEnum }).ToListAsync();
@ -679,8 +688,6 @@ namespace IRaCIS.Core.Application.Service
} }
_provider.Set<int>($"{trialId}_{StaticData.CacheKey.TaskMaxCode}", currentMaxCodeInt, TimeSpan.FromMinutes(30)); _provider.Set<int>($"{trialId}_{StaticData.CacheKey.TaskMaxCode}", currentMaxCodeInt, TimeSpan.FromMinutes(30));
@ -1192,6 +1199,7 @@ namespace IRaCIS.Core.Application.Service
} }
}
} }
@ -1215,7 +1223,7 @@ namespace IRaCIS.Core.Application.Service
if (reReadingVisitTask.SourceSubjectVisitId == null) if (reReadingVisitTask.SourceSubjectVisitId == null)
{ {
subjectVisitId= _readModuleRepository.Where(t=>t.Id==reReadingVisitTask.SouceReadModuleId).Select(t=>t.SubjectVisitId).FirstOrDefault(); subjectVisitId = _readModuleRepository.Where(t => t.Id == reReadingVisitTask.SouceReadModuleId).Select(t => t.SubjectVisitId).FirstOrDefault();
} }
else else
{ {
@ -1253,7 +1261,7 @@ namespace IRaCIS.Core.Application.Service
TaskName = reReadingVisitTask.TaskName, TaskName = reReadingVisitTask.TaskName,
TaskBlindName = reReadingVisitTask.TaskBlindName, TaskBlindName = reReadingVisitTask.TaskBlindName,
IsUrgent = reReadingVisitTask.IsAnalysisCreate?false: subjectVisitUrgentInfo.IsUrgent, IsUrgent = reReadingVisitTask.IsAnalysisCreate ? false : subjectVisitUrgentInfo.IsUrgent,
TaskUrgentType = reReadingVisitTask.IsAnalysisCreate ? null : taskUrgent, TaskUrgentType = reReadingVisitTask.IsAnalysisCreate ? null : taskUrgent,
IsCanEditUrgentState = isCanEditUrgent, IsCanEditUrgentState = isCanEditUrgent,
VisitTaskNum = reReadingVisitTask.VisitTaskNum, VisitTaskNum = reReadingVisitTask.VisitTaskNum,
@ -1426,7 +1434,7 @@ namespace IRaCIS.Core.Application.Service
VisitTaskNum = firstTask.VisitTaskNum + ReadingCommon.TaskNumDic[ReadingCategory.Judge], VisitTaskNum = firstTask.VisitTaskNum + ReadingCommon.TaskNumDic[ReadingCategory.Judge],
TrialId = firstTask.TrialId, TrialId = firstTask.TrialId,
Code = currentMaxCodeInt + 1, Code = currentMaxCodeInt + 1,
IsCanEditUrgentState= firstTask.IsCanEditUrgentState, IsCanEditUrgentState = firstTask.IsCanEditUrgentState,
SourceSubjectVisitId = firstTask.SourceSubjectVisitId, SourceSubjectVisitId = firstTask.SourceSubjectVisitId,
SouceReadModuleId = firstTask.SouceReadModuleId, SouceReadModuleId = firstTask.SouceReadModuleId,
TaskCode = AppSettings.GetCodeStr(currentMaxCodeInt + 1, nameof(VisitTask)), TaskCode = AppSettings.GetCodeStr(currentMaxCodeInt + 1, nameof(VisitTask)),
@ -1483,8 +1491,8 @@ namespace IRaCIS.Core.Application.Service
VisitTaskNum = item.VisitNum + ReadingCommon.TaskNumDic[ReadingCategory.Global], VisitTaskNum = item.VisitNum + ReadingCommon.TaskNumDic[ReadingCategory.Global],
TaskName = item.ReadingName, TaskName = item.ReadingName,
ArmEnum = originalTaskInfo.ArmEnum,//特殊 ArmEnum = originalTaskInfo.ArmEnum,//特殊
TaskUrgentType= originalTaskInfo.TaskUrgentType, TaskUrgentType = originalTaskInfo.TaskUrgentType,
IsCanEditUrgentState= originalTaskInfo.IsCanEditUrgentState, IsCanEditUrgentState = originalTaskInfo.IsCanEditUrgentState,
TaskUrgentRemake = originalTaskInfo.TaskUrgentRemake, TaskUrgentRemake = originalTaskInfo.TaskUrgentRemake,
DoctorUserId = originalTaskInfo.DoctorUserId, DoctorUserId = originalTaskInfo.DoctorUserId,
AllocateTime = DateTime.Now, AllocateTime = DateTime.Now,
@ -1492,7 +1500,7 @@ namespace IRaCIS.Core.Application.Service
SuggesteFinishedTime = GetSuggessFinishTime(true, UrgentType.NotUrget), SuggesteFinishedTime = GetSuggessFinishTime(true, UrgentType.NotUrget),
Code = currentMaxCodeInt + 1, Code = currentMaxCodeInt + 1,
TaskBlindName = "G-"+ visitNumList.IndexOf(originalTaskInfo.VisitTaskNum), TaskBlindName = "G-" + visitNumList.IndexOf(originalTaskInfo.VisitTaskNum),
SouceReadModuleId = item.ReadModuleId, SouceReadModuleId = item.ReadModuleId,
TaskCode = AppSettings.GetCodeStr(currentMaxCodeInt + 1, nameof(VisitTask)), TaskCode = AppSettings.GetCodeStr(currentMaxCodeInt + 1, nameof(VisitTask)),
ReadingCategory = item.ReadingCategory, ReadingCategory = item.ReadingCategory,

View File

@ -1173,7 +1173,12 @@ namespace IRaCIS.Core.Application.Service.Allocation
var trialReadingCriterionId = taskList.First()!.TrialReadingCriterionId; var trialReadingCriterionId = taskList.First()!.TrialReadingCriterionId;
var criterionConfig = (await _trialReadingCriterionRepository.Where(x => x.Id == trialReadingCriterionId).Select(x => new { x.ReadingTool, x.IsReadingTaskViewInOrder }).FirstOrDefaultAsync()).IfNullThrowException(); var criterionConfig = (await _trialReadingCriterionRepository.Where(x => x.Id == trialReadingCriterionId).Select(x => new { x.ReadingTool, x.IsAutoCreate, x.IsReadingTaskViewInOrder }).FirstOrDefaultAsync()).IfNullThrowException();
if (criterionConfig.IsAutoCreate == false)
{
return ResponseOutput.NotOk("手动生成任务的不允许PM 申请影像重阅");
}
foreach (var task in taskList) foreach (var task in taskList)
{ {
@ -1952,7 +1957,12 @@ namespace IRaCIS.Core.Application.Service.Allocation
var task = (await _visitTaskRepository.Where(t => t.Id == taskId).FirstOrDefaultAsync()).IfNullThrowException(); var task = (await _visitTaskRepository.Where(t => t.Id == taskId).FirstOrDefaultAsync()).IfNullThrowException();
var criterionConfig = (await _trialReadingCriterionRepository.Where(x => x.Id == task.TrialReadingCriterionId).Select(x => new { x.ReadingTool, x.IsReadingTaskViewInOrder }).FirstOrDefaultAsync()).IfNullThrowException(); var criterionConfig = (await _trialReadingCriterionRepository.Where(x => x.Id == task.TrialReadingCriterionId).Select(x => new { x.ReadingTool, x.IsAutoCreate, x.IsReadingTaskViewInOrder }).FirstOrDefaultAsync()).IfNullThrowException();
if (criterionConfig.IsAutoCreate==false)
{
return ResponseOutput.NotOk("手动生成任务的不允许影像退回");
}
if (task.TaskState != TaskState.Effect || task.ReadingCategory != ReadingCategory.Visit || task.ReadingTaskState == ReadingTaskState.HaveSigned) if (task.TaskState != TaskState.Effect || task.ReadingCategory != ReadingCategory.Visit || task.ReadingTaskState == ReadingTaskState.HaveSigned)
{ {

View File

@ -20,7 +20,7 @@ namespace IRaCIS.Core.Application.Service
CreateMap<TrialDocument, TrialDocumentView>() CreateMap<TrialDocument, TrialDocumentView>()
.ForMember(d => d.FileType, u => u.MapFrom(s => s.FileType.MappedValue)) .ForMember(d => d.FileType, u => u.MapFrom(s => s.FileType.MappedValue))
.ForMember(d => d.IsSomeUserSigned, u => u.MapFrom(s => s.TrialDocConfirmedUserList.Any())) .ForMember(d => d.IsSomeUserSigned, u => u.MapFrom(s => s.TrialDocConfirmedUserList.Any(t=>t.ConfirmTime!=null)))
.ForMember(d => d.FullFilePath, u => u.MapFrom(s => s.Path )); .ForMember(d => d.FullFilePath, u => u.MapFrom(s => s.Path ));

View File

@ -516,13 +516,14 @@ namespace IRaCIS.Core.Application.Service
SeriesNumber = series.SeriesNumber, SeriesNumber = series.SeriesNumber,
SeriesTime = series.SeriesTime, SeriesTime = series.SeriesTime,
InstanceCount=series.InstanceCount,
StudyTime = series.DicomStudy.StudyTime, StudyTime = series.DicomStudy.StudyTime,
StudyId = series.StudyId, StudyId = series.StudyId,
SeriesId = series.Id, SeriesId = series.Id,
SubjectVisitId = series.SubjectVisitId, SubjectVisitId = series.SubjectVisitId,
TrialReadingCriterionId = inQuery.TrialReadingCriterionId, TrialReadingCriterionId = inQuery.TrialReadingCriterionId,
IsReading=visitStudyFilter.IsReading, IsReading=visitStudyFilter.IsReading,
Id = visitStudyFilter.Id, Id = visitStudyFilter.Id,
CreateTime = visitStudyFilter.CreateTime, CreateTime = visitStudyFilter.CreateTime,