修改任务查询
continuous-integration/drone/push Build is passing Details

IRC_NewDev
hang 2024-06-12 14:03:38 +08:00
parent f6612286d9
commit 988bf0e92c
5 changed files with 544 additions and 572 deletions

View File

@ -424,11 +424,11 @@
</summary> </summary>
<returns></returns> <returns></returns>
</member> </member>
<member name="M:IRaCIS.Core.Application.Service.Allocation.VisitTaskService.GetOrderReadingIQueryable(IRaCIS.Core.Application.ViewModel.GetOrderReadingIQueryableInDto)"> <member name="M:IRaCIS.Core.Application.Service.Allocation.VisitTaskService.GetSubjectReadingIQueryable(IRaCIS.Core.Application.ViewModel.GetReadingIQueryableInDto)">
<summary> <summary>
获取有序阅片IQuery对象 获取subject序 或者无序阅片IQuery对象
</summary> </summary>
<param name="inDto"></param> <param name="inQuery"></param>
<returns></returns> <returns></returns>
</member> </member>
<member name="M:IRaCIS.Core.Application.Service.Allocation.VisitTaskService.GetIRHaveReadTaskList(IRaCIS.Core.Application.ViewModel.VisitTaskQuery)"> <member name="M:IRaCIS.Core.Application.Service.Allocation.VisitTaskService.GetIRHaveReadTaskList(IRaCIS.Core.Application.ViewModel.VisitTaskQuery)">

View File

@ -370,7 +370,7 @@ namespace IRaCIS.Core.Application.ViewModel
} }
public class GetOrderReadingIQueryableInDto public class GetReadingIQueryableInDto:PageInput
{ {
public Guid TrialId { get; set; } public Guid TrialId { get; set; }
@ -380,8 +380,6 @@ namespace IRaCIS.Core.Application.ViewModel
public string? SubjectCode { get; set; } = null; public string? SubjectCode { get; set; } = null;
public PageInput? Page { get; set; } = null;
} }
public class VisitTaskQuery : PageInput public class VisitTaskQuery : PageInput

View File

@ -16,6 +16,6 @@ namespace IRaCIS.Core.Application.Service
Task<IResponseOutput> ConfirmReReading(ConfirmReReadingCommand agreeReReadingCommand, [FromServices] IVisitTaskHelpeService _visitTaskCommonService); Task<IResponseOutput> ConfirmReReading(ConfirmReReadingCommand agreeReReadingCommand, [FromServices] IVisitTaskHelpeService _visitTaskCommonService);
Task<(int, List<IRUnReadSubjectView>)> GetOrderReadingIQueryable(GetOrderReadingIQueryableInDto inDto); Task<PageOutput<IRUnReadSubjectView>> GetSubjectReadingIQueryable(GetReadingIQueryableInDto inDto);
} }
} }

View File

@ -958,42 +958,22 @@ namespace IRaCIS.Core.Application.Service.Allocation
var isReadingTaskViewInOrder = criterionConfig.IsReadingTaskViewInOrder; var isReadingTaskViewInOrder = criterionConfig.IsReadingTaskViewInOrder;
#region 按照Subject 维度 #region 按照Subject 维度
if (isReadingTaskViewInOrder == ReadingOrder.InOrder) if (isReadingTaskViewInOrder == ReadingOrder.InOrder || isReadingTaskViewInOrder == ReadingOrder.SubjectRandom)
{ {
var visitTaskListInfo = await GetOrderReadingIQueryable(new GetOrderReadingIQueryableInDto() var result = await GetSubjectReadingIQueryable(new GetReadingIQueryableInDto()
{ {
TrialId = trialId, TrialId = trialId,
TrialReadingCriterionId = trialReadingCriterionId, TrialReadingCriterionId = trialReadingCriterionId,
SubjectCode = inQuery.SubjectCode, SubjectCode = inQuery.SubjectCode,
Page = new PageInput()
{
PageIndex = inQuery.PageIndex, PageIndex = inQuery.PageIndex,
PageSize = inQuery.PageSize, PageSize = inQuery.PageSize,
Asc = inQuery.Asc, Asc = inQuery.Asc,
SortField = inQuery.SortField, SortField = inQuery.SortField,
}
}); });
var totalCount = visitTaskListInfo.Item1;
var currentPageData = visitTaskListInfo.Item2;
var result = new PageOutput<IRUnReadSubjectView>()
{
PageSize = inQuery.PageSize,
PageIndex = inQuery.PageIndex,
TotalCount = totalCount,
CurrentPageData = currentPageData,
};
// 封装的方法有问题
//var result = await visitQuery.ToPagedListAsync(iRUnReadSubjectQuery.PageIndex, iRUnReadSubjectQuery.PageSize, String.IsNullOrEmpty(iRUnReadSubjectQuery.SortField) ? nameof(IRUnReadSubjectView.SubjectId) : iRUnReadSubjectQuery.SortField, iRUnReadSubjectQuery.Asc);
return ResponseOutput.Ok(result, new return ResponseOutput.Ok(result, new
{ {
RandomReadInfo = new IRUnReadOutDto(), RandomReadInfo = new IRUnReadOutDto(),
@ -1006,69 +986,7 @@ namespace IRaCIS.Core.Application.Service.Allocation
CriterionType = criterionConfig.CriterionType, CriterionType = criterionConfig.CriterionType,
}); });
} }
else if(isReadingTaskViewInOrder == ReadingOrder.SubjectRandom)
{
var critrion = await _trialReadingCriterionRepository.FindAsync(trialReadingCriterionId);
var visitQuery = _visitTaskRepository.Where(x => x.TrialId == trialId && x.DoctorUserId == _userInfo.Id && x.TaskState == TaskState.Effect)
.WhereIf(!string.IsNullOrEmpty(subjectCode), t => (t.Subject.Code.Contains(subjectCode!) && t.IsAnalysisCreate == false) || (t.BlindSubjectCode.Contains(subjectCode!) && t.IsAnalysisCreate));
var visitGroupQuery = visitQuery.GroupBy(x => new { x.SubjectId, x.Subject.Code, x.BlindSubjectCode });
var visitTaskQuery = visitGroupQuery.Select(x => new IRUnReadSubjectView()
{
SubjectId = x.Key.SubjectId,
SubjectCode = x.Key.BlindSubjectCode == string.Empty ? x.Key.Code : x.Key.BlindSubjectCode,
SuggesteFinishedTime = x.Where(y => y.TrialReadingCriterionId == trialReadingCriterionId && y.ReadingTaskState != ReadingTaskState.HaveSigned).Min(x => x.SuggesteFinishedTime),
//未读任务量
UnReadCanReadTaskCount = x.Where(y => y.TrialReadingCriterionId == trialReadingCriterionId && y.ReadingTaskState != ReadingTaskState.HaveSigned).Count(),
UrgentCount = x.Where(y => y.TrialReadingCriterionId == trialReadingCriterionId && y.ReadingTaskState != ReadingTaskState.HaveSigned).Where(x => x.IsUrgent).Count(),
//已读任务量
HaveReadTaskCount = x.Where(y => y.TrialReadingCriterionId == trialReadingCriterionId && y.ReadingTaskState == ReadingTaskState.HaveSigned).Count(),
ExistReadingApply = x.Any(y => (y.ReReadingApplyState == ReReadingApplyState.DocotorHaveApplyed && y.TrialReadingCriterionId == trialReadingCriterionId) || y.ReReadingApplyState == ReReadingApplyState.TrialGroupHaveApplyed),
UnReadCanReadTaskList = x.Where(y => y.TrialReadingCriterionId == trialReadingCriterionId && y.ReadingTaskState != ReadingTaskState.HaveSigned)
.OrderBy(x => x.VisitTaskNum)
.Select(u => new IRUnreadTaskView()
{
Id = u.Id,
IsUrgent = u.IsUrgent,
VisitNum = u.VisitTaskNum,
TaskBlindName = u.TaskBlindName,
VisistId = u.SourceSubjectVisitId,
SuggesteFinishedTime = u.SuggesteFinishedTime,
ReadingCategory = u.ReadingCategory,
IsAnalysisCreate = u.IsAnalysisCreate,
ArmEnum = u.ArmEnum,
TrialReadingCriterionId = u.TrialReadingCriterionId,
IsNeedClinicalDataSign = u.IsNeedClinicalDataSign,
IsClinicalDataSign = u.IsClinicalDataSign,
IsFrontTaskNeedSignButNotSign = u.IsFrontTaskNeedSignButNotSign
})
.ToList()
}).Where(x => x.UnReadCanReadTaskCount > 0);
var pageList = await visitTaskQuery.ToPagedListAsync(inQuery.PageIndex, inQuery.PageSize, string.IsNullOrWhiteSpace(inQuery.SortField)? nameof(IRUnReadSubjectView.UnReadCanReadTaskCount) : inQuery.SortField, inQuery.Asc );
return ResponseOutput.Ok(pageList, new
{
RandomReadInfo = new IRUnReadOutDto(),
IsReadingTaskViewInOrder = isReadingTaskViewInOrder,
ReadingTool = readingTool,
IseCRFShowInDicomReading = criterionConfig.IseCRFShowInDicomReading,
IsReadingShowSubjectInfo = criterionConfig.IsReadingShowSubjectInfo,
IsReadingShowPreviousResults = criterionConfig.IsReadingShowPreviousResults,
DigitPlaces = criterionConfig.DigitPlaces,
CriterionType = criterionConfig.CriterionType,
});
}
else else
{ {
var taskQuery = _visitTaskRepository.Where(x => x.TrialId == inQuery.TrialId && x.DoctorUserId == _userInfo.Id && x.TaskState == TaskState.Effect && x.TrialReadingCriterionId == trialReadingCriterionId) var taskQuery = _visitTaskRepository.Where(x => x.TrialId == inQuery.TrialId && x.DoctorUserId == _userInfo.Id && x.TaskState == TaskState.Effect && x.TrialReadingCriterionId == trialReadingCriterionId)
@ -1114,21 +1032,23 @@ namespace IRaCIS.Core.Application.Service.Allocation
} }
/// <summary> /// <summary>
/// 获取有序阅片IQuery对象 /// 获取subject序 或者无序阅片IQuery对象
/// </summary> /// </summary>
/// <param name="inDto"></param> /// <param name="inQuery"></param>
/// <returns></returns> /// <returns></returns>
public async Task<(int, List<IRUnReadSubjectView>)> GetOrderReadingIQueryable(GetOrderReadingIQueryableInDto inDto) public async Task<PageOutput<IRUnReadSubjectView>> GetSubjectReadingIQueryable(GetReadingIQueryableInDto inQuery)
{ {
var trialReadingCriterionId = inDto.TrialReadingCriterionId; var trialReadingCriterionId = inQuery.TrialReadingCriterionId;
var subjectCode = inQuery.SubjectCode;
var trialId = inQuery.TrialId;
var critrion = await _trialReadingCriterionRepository.FindAsync(trialReadingCriterionId); var critrion = await _trialReadingCriterionRepository.FindAsync(trialReadingCriterionId);
if (critrion.IsReadingTaskViewInOrder == ReadingOrder.InOrder)
{
var visitQuery = _visitTaskRepository.Where(x => x.TrialId == inQuery.TrialId && x.DoctorUserId == _userInfo.Id && x.TaskState == TaskState.Effect)
var visitQuery = _visitTaskRepository.Where(x => x.TrialId == inDto.TrialId && x.DoctorUserId == _userInfo.Id && x.TaskState == TaskState.Effect) .WhereIf(inQuery.SubjectId != null, x => x.SubjectId == inQuery.SubjectId)
.WhereIf(inDto.SubjectId!=null,x=>x.SubjectId==inDto.SubjectId)
//前序 不存在 未生成任务的访视 //前序 不存在 未生成任务的访视
.WhereIf(critrion.IsAutoCreate == false, t => !t.Subject.SubjectCriteriaEvaluationVisitFilterList.Where(t => t.TrialReadingCriterionId == trialReadingCriterionId).Any(f => f.IsGeneratedTask == false && t.VisitTaskNum > f.SubjectVisit.VisitNum)) .WhereIf(critrion.IsAutoCreate == false, t => !t.Subject.SubjectCriteriaEvaluationVisitFilterList.Where(t => t.TrialReadingCriterionId == trialReadingCriterionId).Any(f => f.IsGeneratedTask == false && t.VisitTaskNum > f.SubjectVisit.VisitNum))
@ -1140,7 +1060,7 @@ namespace IRaCIS.Core.Application.Service.Allocation
//满足前序访视不存在 需要签署但是未签署 sql 相当复杂 同时想查询所有未读的统计数字 就无法统计 byzhouhang //满足前序访视不存在 需要签署但是未签署 sql 相当复杂 同时想查询所有未读的统计数字 就无法统计 byzhouhang
//但是加字段 IsFrontTaskNeedSignButNotSign 那么签名临床数据的时候要对该subject 该标准的有效的任务 这个字段需要在签名的时候维护 采取这种方式 统计数字灵活 //但是加字段 IsFrontTaskNeedSignButNotSign 那么签名临床数据的时候要对该subject 该标准的有效的任务 这个字段需要在签名的时候维护 采取这种方式 统计数字灵活
//.Where(t => t.Subject.SubjectVisitTaskList.AsQueryable().Where(visitTaskLambda).Any(c => c.IsNeedClinicalDataSign == true && c.IsClinicalDataSign == false && c.VisitTaskNum < t.VisitTaskNum)) //.Where(t => t.Subject.SubjectVisitTaskList.AsQueryable().Where(visitTaskLambda).Any(c => c.IsNeedClinicalDataSign == true && c.IsClinicalDataSign == false && c.VisitTaskNum < t.VisitTaskNum))
.WhereIf(!string.IsNullOrEmpty(inDto.SubjectCode), t => (t.Subject.Code.Contains(inDto.SubjectCode!) && t.IsAnalysisCreate == false) || (t.BlindSubjectCode.Contains(inDto.SubjectCode!) && t.IsAnalysisCreate)); .WhereIf(!string.IsNullOrEmpty(inQuery.SubjectCode), t => (t.Subject.Code.Contains(inQuery.SubjectCode!) && t.IsAnalysisCreate == false) || (t.BlindSubjectCode.Contains(inQuery.SubjectCode!) && t.IsAnalysisCreate));
var visitGroupQuery = visitQuery.GroupBy(x => new { x.SubjectId, x.Subject.Code, x.BlindSubjectCode }); var visitGroupQuery = visitQuery.GroupBy(x => new { x.SubjectId, x.Subject.Code, x.BlindSubjectCode });
@ -1222,22 +1142,78 @@ namespace IRaCIS.Core.Application.Service.Allocation
var result = new List<IRUnReadSubjectView>(); var result = new List<IRUnReadSubjectView>();
var propName = string.IsNullOrWhiteSpace(inDto.Page!.SortField) ? nameof(IRUnReadSubjectView.UnReadCanReadTaskCount) : inDto.Page.SortField; var propName = string.IsNullOrWhiteSpace(inQuery!.SortField) ? nameof(IRUnReadSubjectView.UnReadCanReadTaskCount) : inQuery.SortField;
var visitTaskOrderQuery = inQuery.Asc ? visitTaskQuery.OrderBy(propName) : visitTaskQuery.OrderBy(propName + " desc");
var visitTaskOrderQuery = inDto.Page.Asc ? visitTaskQuery.OrderBy(propName) : visitTaskQuery.OrderBy(propName + " desc");
if (inDto.Page != null)
{
result = await visitTaskOrderQuery result = await visitTaskOrderQuery
.Skip((inDto.Page.PageIndex - 1) * inDto.Page.PageSize) .Skip((inQuery.PageIndex - 1) * inQuery.PageSize)
.Take(inDto.Page.PageSize).ToListAsync(); .Take(inQuery.PageSize).ToListAsync();
return new PageOutput<IRUnReadSubjectView>()
{
PageSize = inQuery.PageSize,
PageIndex = inQuery.PageIndex,
TotalCount = count,
CurrentPageData = result,
};
} }
else else
{ {
result = await visitTaskOrderQuery.ToListAsync();
var visitQuery = _visitTaskRepository.Where(x => x.TrialId == trialId && x.DoctorUserId == _userInfo.Id && x.TaskState == TaskState.Effect)
.WhereIf(inQuery.SubjectId != null, x => x.SubjectId == inQuery.SubjectId)
.WhereIf(!string.IsNullOrEmpty(subjectCode), t => (t.Subject.Code.Contains(subjectCode!) && t.IsAnalysisCreate == false) || (t.BlindSubjectCode.Contains(subjectCode!) && t.IsAnalysisCreate));
var visitGroupQuery = visitQuery.GroupBy(x => new { x.SubjectId, x.Subject.Code, x.BlindSubjectCode });
var visitTaskQuery = visitGroupQuery.Select(x => new IRUnReadSubjectView()
{
SubjectId = x.Key.SubjectId,
SubjectCode = x.Key.BlindSubjectCode == string.Empty ? x.Key.Code : x.Key.BlindSubjectCode,
SuggesteFinishedTime = x.Where(y => y.TrialReadingCriterionId == trialReadingCriterionId && y.ReadingTaskState != ReadingTaskState.HaveSigned).Min(x => x.SuggesteFinishedTime),
//未读任务量
UnReadCanReadTaskCount = x.Where(y => y.TrialReadingCriterionId == trialReadingCriterionId && y.ReadingTaskState != ReadingTaskState.HaveSigned).Count(),
UrgentCount = x.Where(y => y.TrialReadingCriterionId == trialReadingCriterionId && y.ReadingTaskState != ReadingTaskState.HaveSigned).Where(x => x.IsUrgent).Count(),
//已读任务量
HaveReadTaskCount = x.Where(y => y.TrialReadingCriterionId == trialReadingCriterionId && y.ReadingTaskState == ReadingTaskState.HaveSigned).Count(),
ExistReadingApply = x.Any(y => (y.ReReadingApplyState == ReReadingApplyState.DocotorHaveApplyed && y.TrialReadingCriterionId == trialReadingCriterionId) || y.ReReadingApplyState == ReReadingApplyState.TrialGroupHaveApplyed),
UnReadCanReadTaskList = x.Where(y => y.TrialReadingCriterionId == trialReadingCriterionId && y.ReadingTaskState != ReadingTaskState.HaveSigned)
.OrderBy(x => x.VisitTaskNum)
.Select(u => new IRUnreadTaskView()
{
Id = u.Id,
IsUrgent = u.IsUrgent,
VisitNum = u.VisitTaskNum,
TaskBlindName = u.TaskBlindName,
VisistId = u.SourceSubjectVisitId,
SuggesteFinishedTime = u.SuggesteFinishedTime,
ReadingCategory = u.ReadingCategory,
IsAnalysisCreate = u.IsAnalysisCreate,
ArmEnum = u.ArmEnum,
TrialReadingCriterionId = u.TrialReadingCriterionId,
IsNeedClinicalDataSign = u.IsNeedClinicalDataSign,
IsClinicalDataSign = u.IsClinicalDataSign,
IsFrontTaskNeedSignButNotSign = u.IsFrontTaskNeedSignButNotSign
})
.ToList()
}).Where(x => x.UnReadCanReadTaskCount > 0);
var pageList = await visitTaskQuery.ToPagedListAsync(inQuery.PageIndex, inQuery.PageSize, string.IsNullOrWhiteSpace(inQuery.SortField) ? nameof(IRUnReadSubjectView.UnReadCanReadTaskCount) : inQuery.SortField, inQuery.Asc);
return pageList;
} }
return (count, result);
} }

View File

@ -194,10 +194,10 @@ namespace IRaCIS.Application.Services
TaskBlindName = x.VisitTask.TaskBlindName TaskBlindName = x.VisitTask.TaskBlindName
}).ToListAsync(); }).ToListAsync();
} }
else if(inDto.VisitTaskId!=null&&inDto.QuestionType!=null) else if (inDto.VisitTaskId != null && inDto.QuestionType != null)
{ {
var taskInfoList = await _generalCalculateService.GetReadingReportTaskList(inDto.VisitTaskId.Value); var taskInfoList = await _generalCalculateService.GetReadingReportTaskList(inDto.VisitTaskId.Value);
var visitTaskIds = taskInfoList.Where(x=>x.VisitTaskId!= inDto.VisitTaskId.Value).Select(x => x.VisitTaskId).ToList(); var visitTaskIds = taskInfoList.Where(x => x.VisitTaskId != inDto.VisitTaskId.Value).Select(x => x.VisitTaskId).ToList();
result = await _readingTaskQuestionMarkRepository.Where(x => x.ReadingQuestionTrial.QuestionType == inDto.QuestionType && visitTaskIds.Contains(x.VisitTaskId)) result = await _readingTaskQuestionMarkRepository.Where(x => x.ReadingQuestionTrial.QuestionType == inDto.QuestionType && visitTaskIds.Contains(x.VisitTaskId))
.OrderBy(x => x.VisitTask.VisitTaskNum).Select(x => new GetPreviousOtherPicturePathOutDto() .OrderBy(x => x.VisitTask.VisitTaskNum).Select(x => new GetPreviousOtherPicturePathOutDto()
@ -245,7 +245,7 @@ namespace IRaCIS.Application.Services
[HttpPost] [HttpPost]
public async Task<List<ReadingCustomTagDto>> GetCustomTag(GetCustomTagInDto inQuery) public async Task<List<ReadingCustomTagDto>> GetCustomTag(GetCustomTagInDto inQuery)
{ {
var result= await _readingCustomTagRepository.Where(x => x.VisitTaskId == inQuery.VisitTaskId).ProjectTo<ReadingCustomTagDto>(_mapper.ConfigurationProvider).ToListAsync(); var result = await _readingCustomTagRepository.Where(x => x.VisitTaskId == inQuery.VisitTaskId).ProjectTo<ReadingCustomTagDto>(_mapper.ConfigurationProvider).ToListAsync();
return result; return result;
} }
@ -270,9 +270,9 @@ namespace IRaCIS.Application.Services
return await _trialDocumentRepository.Where(x => x.TrialId == inDto.TrialId return await _trialDocumentRepository.Where(x => x.TrialId == inDto.TrialId
&& x.TrialDocConfirmedUserList.Any(y => y.ConfirmUserId == _userInfo.Id && y.ConfirmTime != null) && x.TrialDocConfirmedUserList.Any(y => y.ConfirmUserId == _userInfo.Id && y.ConfirmTime != null)
&& x.NeedConfirmedUserTypeList.Any(y => y.NeedConfirmUserTypeId == _userInfo.UserTypeId)) && x.NeedConfirmedUserTypeList.Any(y => y.NeedConfirmUserTypeId == _userInfo.UserTypeId))
.WhereIf(userType== UserTypeEnum.IndependentReviewer, t => t.FileType.Code == "2" || t.FileType.Code == "6") .WhereIf(userType == UserTypeEnum.IndependentReviewer, t => t.FileType.Code == "2" || t.FileType.Code == "6")
.WhereIf(userType == UserTypeEnum.IQC, t => t.FileType.Code == "4" || t.FileType.Code == "5") .WhereIf(userType == UserTypeEnum.IQC, t => t.FileType.Code == "4" || t.FileType.Code == "5")
.WhereIf(!canViewUserType.Contains(userType),t=>false) .WhereIf(!canViewUserType.Contains(userType), t => false)
.IgnoreQueryFilters() .IgnoreQueryFilters()
.Select(x => new GetManualListOutDto() .Select(x => new GetManualListOutDto()
{ {
@ -590,20 +590,20 @@ namespace IRaCIS.Application.Services
taskQuery = _visitTaskRepository.Where(x => taskInfo.RelatedVisitTaskIdList.Contains(x.Id) || x.Id == taskInfo.Id); taskQuery = _visitTaskRepository.Where(x => taskInfo.RelatedVisitTaskIdList.Contains(x.Id) || x.Id == taskInfo.Id);
} }
var result = await taskQuery.Include(x=>x.Subject).OrderBy(x => x.VisitTaskNum).ThenBy(x => x.TaskState) var result = await taskQuery.Include(x => x.Subject).OrderBy(x => x.VisitTaskNum).ThenBy(x => x.TaskState)
.Select(x => new GetRelatedVisitTaskOutDto() .Select(x => new GetRelatedVisitTaskOutDto()
{ {
TaskBlindName = x.TaskBlindName, TaskBlindName = x.TaskBlindName,
TaskName = x.TaskName, TaskName = x.TaskName,
ReadingTaskState = x.ReadingTaskState, ReadingTaskState = x.ReadingTaskState,
VisitId = x.SourceSubjectVisitId, VisitId = x.SourceSubjectVisitId,
SubjectCode=x.Subject.Code, SubjectCode = x.Subject.Code,
VisitTaskId = x.Id, VisitTaskId = x.Id,
VisitTaskNum = x.VisitTaskNum, VisitTaskNum = x.VisitTaskNum,
IsBaseLineTask = x.SourceSubjectVisitId == baselineVisitId, IsBaseLineTask = x.SourceSubjectVisitId == baselineVisitId,
IsCurrentTask = x.Id == inDto.VisitTaskId, IsCurrentTask = x.Id == inDto.VisitTaskId,
IsConvertedTask=x.IsConvertedTask, IsConvertedTask = x.IsConvertedTask,
IsFirstChangeTask=x.BeforeConvertedTaskId!=null, IsFirstChangeTask = x.BeforeConvertedTaskId != null,
}).ToListAsync(); }).ToListAsync();
@ -617,7 +617,7 @@ namespace IRaCIS.Application.Services
var visitaskIds = result.Select(x => x.VisitTaskId).ToList(); var visitaskIds = result.Select(x => x.VisitTaskId).ToList();
var otherStudys = await _readingTableAnswerRowInfoRepository.Where(x => visitaskIds.Contains(x.VisitTaskId)) var otherStudys = await _readingTableAnswerRowInfoRepository.Where(x => visitaskIds.Contains(x.VisitTaskId))
.Where(x=>x.CTSeriesId!=null&&x.PTSeriesId!=null) .Where(x => x.CTSeriesId != null && x.PTSeriesId != null)
.Select(x => new .Select(x => new
{ {
x.OtherStudyId, x.OtherStudyId,
@ -693,8 +693,8 @@ namespace IRaCIS.Application.Services
VisitTaskId = x.Id, VisitTaskId = x.Id,
TaskBlindName = x.TaskBlindName, TaskBlindName = x.TaskBlindName,
TaskName = x.TaskName, TaskName = x.TaskName,
ReadModuleVisitId= x.ReadModule!=null?x.ReadModule.SubjectVisitId:null, ReadModuleVisitId = x.ReadModule != null ? x.ReadModule.SubjectVisitId : null,
VisitName = x.SourceSubjectVisit!=null? x.SourceSubjectVisit.VisitName: x.ReadModule==null?string.Empty: x.ReadModule.SubjectVisit.VisitName, VisitName = x.SourceSubjectVisit != null ? x.SourceSubjectVisit.VisitName : x.ReadModule == null ? string.Empty : x.ReadModule.SubjectVisit.VisitName,
VisitBlindName = x.TaskBlindName, VisitBlindName = x.TaskBlindName,
VisitTaskNum = x.VisitTaskNum, VisitTaskNum = x.VisitTaskNum,
JudgeResultArm = x.JudgeResultTask == null ? null : x.JudgeResultTask.ArmEnum, JudgeResultArm = x.JudgeResultTask == null ? null : x.JudgeResultTask.ArmEnum,
@ -707,7 +707,7 @@ namespace IRaCIS.Application.Services
if (item.ReadModuleVisitId != null) if (item.ReadModuleVisitId != null)
{ {
item.VisitBlindName = (await _visitTaskRepository.Where(x => x.SourceSubjectVisitId == item.ReadModuleVisitId && x.IsSelfAnalysis == taskInfo.IsSelfAnalysis && item.VisitBlindName = (await _visitTaskRepository.Where(x => x.SourceSubjectVisitId == item.ReadModuleVisitId && x.IsSelfAnalysis == taskInfo.IsSelfAnalysis &&
x.IsAnalysisCreate == taskInfo.IsAnalysisCreate ).Select(x => x.TaskBlindName).FirstOrDefaultAsync())??string.Empty; x.IsAnalysisCreate == taskInfo.IsAnalysisCreate).Select(x => x.TaskBlindName).FirstOrDefaultAsync()) ?? string.Empty;
} }
} }
@ -741,7 +741,7 @@ namespace IRaCIS.Application.Services
{ {
VisitTaskId = visitTask.Id, VisitTaskId = visitTask.Id,
SubjectId = visitTask.SubjectId, SubjectId = visitTask.SubjectId,
SubjectCode = visitTask.BlindSubjectCode.IsNullOrEmpty() ? subjectCode??string.Empty : visitTask.BlindSubjectCode, SubjectCode = visitTask.BlindSubjectCode.IsNullOrEmpty() ? subjectCode ?? string.Empty : visitTask.BlindSubjectCode,
ReadingCategory = visitTask.ReadingCategory, ReadingCategory = visitTask.ReadingCategory,
TaskBlindName = visitTask.TaskBlindName, TaskBlindName = visitTask.TaskBlindName,
IsReadingShowPreviousResults = criterionInfo.IsReadingShowPreviousResults, IsReadingShowPreviousResults = criterionInfo.IsReadingShowPreviousResults,
@ -795,9 +795,9 @@ namespace IRaCIS.Application.Services
} }
if (await _visitTaskRepository.AnyAsync(x => x.TrialReadingCriterionId == taskInfo.TrialReadingCriterionId if (await _visitTaskRepository.AnyAsync(x => x.TrialReadingCriterionId == taskInfo.TrialReadingCriterionId
&&x.IsAnalysisCreate&&taskInfo.IsAnalysisCreate && x.IsAnalysisCreate && taskInfo.IsAnalysisCreate
&&x.SubjectId== taskInfo.SubjectId&&x.TaskState==TaskState.Effect&& && x.SubjectId == taskInfo.SubjectId && x.TaskState == TaskState.Effect &&
((x.ReReadingApplyState==ReReadingApplyState.DocotorHaveApplyed && x.DoctorUserId == taskInfo.DoctorUserId)|| x.ReReadingApplyState == ReReadingApplyState.TrialGroupHaveApplyed) ((x.ReReadingApplyState == ReReadingApplyState.DocotorHaveApplyed && x.DoctorUserId == taskInfo.DoctorUserId) || x.ReReadingApplyState == ReReadingApplyState.TrialGroupHaveApplyed)
)) ))
{ {
@ -825,7 +825,7 @@ namespace IRaCIS.Application.Services
{ {
//await AddDefaultValueToTask(inDto.VisitTaskId); //await AddDefaultValueToTask(inDto.VisitTaskId);
var taskInfo = await _visitTaskRepository.Where(x => x.Id == inDto.VisitTaskId).FirstNotNullAsync(); var taskInfo = await _visitTaskRepository.Where(x => x.Id == inDto.VisitTaskId).FirstNotNullAsync();
var result = await GetReadingQuestion(taskInfo.TrialReadingCriterionId, taskInfo.Id, inDto.QuestionClassify,inDto.GroupClassifyList); var result = await GetReadingQuestion(taskInfo.TrialReadingCriterionId, taskInfo.Id, inDto.QuestionClassify, inDto.GroupClassifyList);
@ -854,7 +854,7 @@ namespace IRaCIS.Application.Services
//排除表格问题 //排除表格问题
var questions = await _readingQuestionTrialRepository var questions = await _readingQuestionTrialRepository
.WhereIf(questionClassify!=null,x=>x.QuestionClassify== questionClassify) .WhereIf(questionClassify != null, x => x.QuestionClassify == questionClassify)
.WhereIf(criterionIdInfo.IseCRFShowInDicomReading, x => x.ReadingQuestionCriterionTrialId == trialReadingCriterionId && x.Type != ReadingQestionType.Table) .WhereIf(criterionIdInfo.IseCRFShowInDicomReading, x => x.ReadingQuestionCriterionTrialId == trialReadingCriterionId && x.Type != ReadingQestionType.Table)
.WhereIf(!criterionIdInfo.IseCRFShowInDicomReading, x => x.IsShowInDicom && x.ReadingQuestionCriterionTrialId == trialReadingCriterionId && x.Type != ReadingQestionType.Table) .WhereIf(!criterionIdInfo.IseCRFShowInDicomReading, x => x.IsShowInDicom && x.ReadingQuestionCriterionTrialId == trialReadingCriterionId && x.Type != ReadingQestionType.Table)
@ -892,7 +892,7 @@ namespace IRaCIS.Application.Services
{ {
questions.ForEach(x => questions.ForEach(x =>
{ {
x.IsFirstChangeTask =true; x.IsFirstChangeTask = true;
}); });
} }
} }
@ -910,7 +910,7 @@ namespace IRaCIS.Application.Services
var groupids = questions.Where(x => x.Type != ReadingQestionType.Group).Select(x => x.GroupId).ToList(); var groupids = questions.Where(x => x.Type != ReadingQestionType.Group).Select(x => x.GroupId).ToList();
var result = questions.Where(x => x.Type == ReadingQestionType.Group && groupids.Contains(x.Id)) var result = questions.Where(x => x.Type == ReadingQestionType.Group && groupids.Contains(x.Id))
.WhereIf(groupClassifyList!=null,x=>x.GroupClassify!=null&& groupClassifyList!=null&& groupClassifyList.Contains(x.GroupClassify.Value)) .WhereIf(groupClassifyList != null, x => x.GroupClassify != null && groupClassifyList != null && groupClassifyList.Contains(x.GroupClassify.Value))
.ToList(); .ToList();
foreach (var item in result) foreach (var item in result)
@ -972,7 +972,7 @@ namespace IRaCIS.Application.Services
var taskInfo = await _visitTaskRepository.Where(x => x.Id == inDto.VisitTaskId).ProjectTo<VisitTaskDto>(_mapper.ConfigurationProvider).FirstNotNullAsync(); var taskInfo = await _visitTaskRepository.Where(x => x.Id == inDto.VisitTaskId).ProjectTo<VisitTaskDto>(_mapper.ConfigurationProvider).FirstNotNullAsync();
if (taskInfo.IsConvertedTask &&taskInfo.BeforeConvertedTaskId!=null) if (taskInfo.IsConvertedTask && taskInfo.BeforeConvertedTaskId != null)
{ {
result.ForEach(x => result.ForEach(x =>
{ {
@ -990,7 +990,8 @@ namespace IRaCIS.Application.Services
var questionMark = await _readingTaskQuestionMarkRepository.Where(x => x.VisitTaskId == inDto.VisitTaskId).ProjectTo<GetTableAnswerRowInfoOutDto>(_mapper.ConfigurationProvider).ToListAsync(); var questionMark = await _readingTaskQuestionMarkRepository.Where(x => x.VisitTaskId == inDto.VisitTaskId).ProjectTo<GetTableAnswerRowInfoOutDto>(_mapper.ConfigurationProvider).ToListAsync();
questionMark.ForEach(x => { questionMark.ForEach(x =>
{
x.IsFirstChangeTask = x.VisitTaskId == inDto.VisitTaskId; x.IsFirstChangeTask = x.VisitTaskId == inDto.VisitTaskId;
}); });
@ -1040,7 +1041,7 @@ namespace IRaCIS.Application.Services
TableAnswers = tableAnswers, TableAnswers = tableAnswers,
TableAnsweRowInfos = tableAnsweRowInfos, TableAnsweRowInfos = tableAnsweRowInfos,
OrganInfos = organList, OrganInfos = organList,
QuestionClassify=inDto.QuestionClassify, QuestionClassify = inDto.QuestionClassify,
} }
@ -1051,7 +1052,7 @@ namespace IRaCIS.Application.Services
result.PublicPage = questionPage.PublicPage; result.PublicPage = questionPage.PublicPage;
result.BlindName = visitTaskInfo.TaskBlindName; result.BlindName = visitTaskInfo.TaskBlindName;
result.TaskNum = visitTaskInfo.VisitTaskNum; result.TaskNum = visitTaskInfo.VisitTaskNum;
result.QuestionMarkInfoList=await _readingTaskQuestionMarkRepository.Where(x => x.VisitTaskId == inDto.VisitTaskId).ProjectTo<QuestionMarkInfo>(_mapper.ConfigurationProvider) result.QuestionMarkInfoList = await _readingTaskQuestionMarkRepository.Where(x => x.VisitTaskId == inDto.VisitTaskId).ProjectTo<QuestionMarkInfo>(_mapper.ConfigurationProvider)
.ToListAsync(); .ToListAsync();
var spleenLength = await _readingTaskQuestionAnswerRepository.Where(x => x.VisitTaskId == inDto.VisitTaskId && x.ReadingQuestionTrial.QuestionType == QuestionType.SpleenLength).Select(x => x.Answer).FirstOrDefaultAsync(); var spleenLength = await _readingTaskQuestionAnswerRepository.Where(x => x.VisitTaskId == inDto.VisitTaskId && x.ReadingQuestionTrial.QuestionType == QuestionType.SpleenLength).Select(x => x.Answer).FirstOrDefaultAsync();
@ -1060,7 +1061,7 @@ namespace IRaCIS.Application.Services
readingTaskState = visitTaskInfo.ReadingTaskState, readingTaskState = visitTaskInfo.ReadingTaskState,
FormType = criterionInfo.FormType, FormType = criterionInfo.FormType,
TaskNum = visitTaskInfo.VisitTaskNum, TaskNum = visitTaskInfo.VisitTaskNum,
SpleenLength= spleenLength, SpleenLength = spleenLength,
}); ; }); ;
} }
@ -1096,7 +1097,7 @@ namespace IRaCIS.Application.Services
TableAnsweRowInfos = tableAnsweRowInfos, TableAnsweRowInfos = tableAnsweRowInfos,
IsGetallQuestion = true, IsGetallQuestion = true,
OrganInfos = organList, OrganInfos = organList,
QuestionClassify=inDto.QuestionClassify, QuestionClassify = inDto.QuestionClassify,
} }
), new ), new
@ -1118,7 +1119,7 @@ namespace IRaCIS.Application.Services
var criterionInfo = await _readingQuestionCriterionTrialRepository.Where(x => x.Id == inDto.TrialReadingCriterionId).FirstNotNullAsync(); var criterionInfo = await _readingQuestionCriterionTrialRepository.Where(x => x.Id == inDto.TrialReadingCriterionId).FirstNotNullAsync();
var qusetionList = await _readingQuestionTrialRepository var qusetionList = await _readingQuestionTrialRepository
.WhereIf(inDto.QuestionClassify!=null,x=>x.QuestionClassify==inDto.QuestionClassify) .WhereIf(inDto.QuestionClassify != null, x => x.QuestionClassify == inDto.QuestionClassify)
.Where(x => x.ReadingQuestionCriterionTrialId == inDto.TrialReadingCriterionId).ProjectTo<TrialReadQuestionData>(_mapper.ConfigurationProvider, new .Where(x => x.ReadingQuestionCriterionTrialId == inDto.TrialReadingCriterionId).ProjectTo<TrialReadQuestionData>(_mapper.ConfigurationProvider, new
{ {
@ -1173,7 +1174,7 @@ namespace IRaCIS.Application.Services
} }
if (inDto.TaskId != null ) if (inDto.TaskId != null)
{ {
if (taskInfo.IsConvertedTask) if (taskInfo.IsConvertedTask)
{ {
@ -1246,18 +1247,18 @@ namespace IRaCIS.Application.Services
&& x.VisitTaskNum < taskInfo.VisitTaskNum && x.VisitTaskNum < taskInfo.VisitTaskNum
&& x.ArmEnum == taskInfo.ArmEnum && x.ArmEnum == taskInfo.ArmEnum
&& x.TrialReadingCriterionId == taskInfo.TrialReadingCriterionId && x.TrialReadingCriterionId == taskInfo.TrialReadingCriterionId
&& x.ReadingCategory == ReadingCategory.Visit)||x.Id==taskInfo.BeforeConvertedTaskId && x.ReadingCategory == ReadingCategory.Visit) || x.Id == taskInfo.BeforeConvertedTaskId
).OrderByDescending(x=>x.VisitTaskNum).Select(x => x.Id).FirstOrDefaultAsync(); ).OrderByDescending(x => x.VisitTaskNum).Select(x => x.Id).FirstOrDefaultAsync();
if (criterionInfo.IsReadingTaskViewInOrder != ReadingOrder.InOrder) if (criterionInfo.IsReadingTaskViewInOrder != ReadingOrder.InOrder)
{ {
// 无序的话 不要查 // 无序的话 不要查
laskTaskId = Guid.NewGuid(); laskTaskId = Guid.NewGuid();
} }
lastTaskTableAnswer= await _readingTableQuestionAnswerRepository.Where(x => x.VisitTaskId == laskTaskId).Include(x => x.ReadingTableQuestionTrial).ToListAsync(); lastTaskTableAnswer = await _readingTableQuestionAnswerRepository.Where(x => x.VisitTaskId == laskTaskId).Include(x => x.ReadingTableQuestionTrial).ToListAsync();
if (taskInfo.BeforeConvertedTaskId!=null ) if (taskInfo.BeforeConvertedTaskId != null)
{ {
isFirstChangeTask = true; isFirstChangeTask = true;
@ -1326,7 +1327,7 @@ namespace IRaCIS.Application.Services
/// <param name="isFirstChangeTask"></param> /// <param name="isFirstChangeTask"></param>
/// <param name="lastTaskTableAnswer"></param> /// <param name="lastTaskTableAnswer"></param>
/// <param name="TaskId"></param> /// <param name="TaskId"></param>
private async void FindChildQuestion(TrialReadQuestionData item, List<TrialReadQuestionData> questionlists, List<TableQuestionTrial> tableQuestionLists, List<ReadingTableQuestionAnswerInfo> tableAnswers, List<TableAnsweRowInfo> tableAnsweRowInfos, List<OrganInfo> organInfos, List<ReadingTableQuestionAnswer> baseLineTableAnswer,bool isFirstChangeTask, List<ReadingTableQuestionAnswer> lastTaskTableAnswer,Guid? TaskId) private async void FindChildQuestion(TrialReadQuestionData item, List<TrialReadQuestionData> questionlists, List<TableQuestionTrial> tableQuestionLists, List<ReadingTableQuestionAnswerInfo> tableAnswers, List<TableAnsweRowInfo> tableAnsweRowInfos, List<OrganInfo> organInfos, List<ReadingTableQuestionAnswer> baseLineTableAnswer, bool isFirstChangeTask, List<ReadingTableQuestionAnswer> lastTaskTableAnswer, Guid? TaskId)
{ {
item.Childrens = questionlists.Where(x => x.ParentId == item.Id || (x.GroupId == item.Id && x.ParentId == null)).ToList(); item.Childrens = questionlists.Where(x => x.ParentId == item.Id || (x.GroupId == item.Id && x.ParentId == null)).ToList();
item.TableQuestions = new TrialReadTableQuestion(); item.TableQuestions = new TrialReadTableQuestion();
@ -1458,7 +1459,7 @@ namespace IRaCIS.Application.Services
answers.Add("FromMark", rowInfo.FromMark); answers.Add("FromMark", rowInfo.FromMark);
answers.Add("IsDicomReading", rowInfo.IsDicomReading.ToString()); answers.Add("IsDicomReading", rowInfo.IsDicomReading.ToString());
answers.Add("MeasureData", rowInfo == null ? string.Empty : rowInfo.MeasureData); answers.Add("MeasureData", rowInfo == null ? string.Empty : rowInfo.MeasureData);
answers.Add("OtherMeasureData", rowInfo == null|| rowInfo.OtherMeasureData==null ? string.Empty : rowInfo.OtherMeasureData.ToString()); answers.Add("OtherMeasureData", rowInfo == null || rowInfo.OtherMeasureData == null ? string.Empty : rowInfo.OtherMeasureData.ToString());
answers.Add("OtherStudyId", rowInfo == null || rowInfo.OtherStudyId == null ? string.Empty : rowInfo.OtherStudyId.ToString()); answers.Add("OtherStudyId", rowInfo == null || rowInfo.OtherStudyId == null ? string.Empty : rowInfo.OtherStudyId.ToString());
answers.Add("OtherSeriesId", rowInfo == null || rowInfo.OtherSeriesId == null ? string.Empty : rowInfo.OtherSeriesId.ToString()); answers.Add("OtherSeriesId", rowInfo == null || rowInfo.OtherSeriesId == null ? string.Empty : rowInfo.OtherSeriesId.ToString());
answers.Add("OtherInstanceId", rowInfo == null || rowInfo.OtherInstanceId == null ? string.Empty : rowInfo.OtherInstanceId.ToString()); answers.Add("OtherInstanceId", rowInfo == null || rowInfo.OtherInstanceId == null ? string.Empty : rowInfo.OtherInstanceId.ToString());
@ -1466,11 +1467,11 @@ namespace IRaCIS.Application.Services
answers.Add("OtherNumberOfFrames", rowInfo == null || rowInfo.OtherNumberOfFrames == null ? string.Empty : rowInfo.OtherNumberOfFrames.ToString()); answers.Add("OtherNumberOfFrames", rowInfo == null || rowInfo.OtherNumberOfFrames == null ? string.Empty : rowInfo.OtherNumberOfFrames.ToString());
answers.Add("OtherMarkTool", rowInfo == null || rowInfo.OtherMarkTool == null ? string.Empty : rowInfo.OtherMarkTool.ToString()); answers.Add("OtherMarkTool", rowInfo == null || rowInfo.OtherMarkTool == null ? string.Empty : rowInfo.OtherMarkTool.ToString());
answers.Add("RowIndex", x.ToString()); answers.Add("RowIndex", x.ToString());
answers.Add("RowId", rowInfo==null?string.Empty: rowInfo.Id.ToString()); answers.Add("RowId", rowInfo == null ? string.Empty : rowInfo.Id.ToString());
answers.Add("MarkTool", rowInfo.MarkTool); answers.Add("MarkTool", rowInfo.MarkTool);
answers.Add("StudyId", rowInfo.StudyId.ToString()); answers.Add("StudyId", rowInfo.StudyId.ToString());
answers.Add("OrganInfoId", rowInfo.OrganInfoId.ToString()); answers.Add("OrganInfoId", rowInfo.OrganInfoId.ToString());
answers.Add("IsFristAdd", (rowInfo.FristAddTaskId== TaskId).ToString()); answers.Add("IsFristAdd", (rowInfo.FristAddTaskId == TaskId).ToString());
answers.Add("IsCanEditPosition", rowInfo.IsCanEditPosition.ToString()); answers.Add("IsCanEditPosition", rowInfo.IsCanEditPosition.ToString());
answers.Add("InstanceId", rowInfo == null ? string.Empty : rowInfo.InstanceId.ToString()); answers.Add("InstanceId", rowInfo == null ? string.Empty : rowInfo.InstanceId.ToString());
answers.Add("PTSeriesId", rowInfo == null ? string.Empty : rowInfo.PTSeriesId.ToString()); answers.Add("PTSeriesId", rowInfo == null ? string.Empty : rowInfo.PTSeriesId.ToString());
@ -1479,7 +1480,7 @@ namespace IRaCIS.Application.Services
answers.Add("IsCurrentTaskAdd", rowInfo == null ? false.ToString() : rowInfo.IsCurrentTaskAdd.ToString()); answers.Add("IsCurrentTaskAdd", rowInfo == null ? false.ToString() : rowInfo.IsCurrentTaskAdd.ToString());
answers.Add("SplitOrMergeLesionName", rowInfo == null ? string.Empty : rowInfo.SplitName.IsNullOrEmpty() ? rowInfo.MergeName : rowInfo.SplitName); answers.Add("SplitOrMergeLesionName", rowInfo == null ? string.Empty : rowInfo.SplitName.IsNullOrEmpty() ? rowInfo.MergeName : rowInfo.SplitName);
answers.Add("SplitOrMergeType", rowInfo == null ? string.Empty : rowInfo.SplitOrMergeType == null ? string.Empty : ((int)rowInfo.SplitOrMergeType).ToString()); answers.Add("SplitOrMergeType", rowInfo == null ? string.Empty : rowInfo.SplitOrMergeType == null ? string.Empty : ((int)rowInfo.SplitOrMergeType).ToString());
answers.Add("LastTaskState", lastTaskTableAnswer.Where(n=>n.QuestionId== item.Id&&n.ReadingTableQuestionTrial.QuestionMark==QuestionMark.State&&n.RowIndex==x).Select(n=>n.Answer).FirstOrDefault()??string.Empty); answers.Add("LastTaskState", lastTaskTableAnswer.Where(n => n.QuestionId == item.Id && n.ReadingTableQuestionTrial.QuestionMark == QuestionMark.State && n.RowIndex == x).Select(n => n.Answer).FirstOrDefault() ?? string.Empty);
answers.Add("LastTaskMajorAxis", lastTaskTableAnswer.Where(n => n.QuestionId == item.Id && n.ReadingTableQuestionTrial.QuestionMark == QuestionMark.MajorAxis && n.RowIndex == x).Select(n => n.Answer).FirstOrDefault() ?? string.Empty); answers.Add("LastTaskMajorAxis", lastTaskTableAnswer.Where(n => n.QuestionId == item.Id && n.ReadingTableQuestionTrial.QuestionMark == QuestionMark.MajorAxis && n.RowIndex == x).Select(n => n.Answer).FirstOrDefault() ?? string.Empty);
answers.Add("LastTaskShortAxis", lastTaskTableAnswer.Where(n => n.QuestionId == item.Id && n.ReadingTableQuestionTrial.QuestionMark == QuestionMark.ShortAxis && n.RowIndex == x).Select(n => n.Answer).FirstOrDefault() ?? string.Empty); answers.Add("LastTaskShortAxis", lastTaskTableAnswer.Where(n => n.QuestionId == item.Id && n.ReadingTableQuestionTrial.QuestionMark == QuestionMark.ShortAxis && n.RowIndex == x).Select(n => n.Answer).FirstOrDefault() ?? string.Empty);
if (rowInfo.LesionType == LesionType.BaselineLesions) if (rowInfo.LesionType == LesionType.BaselineLesions)
@ -1535,7 +1536,7 @@ namespace IRaCIS.Application.Services
rowAnswer.SeriesId = null; rowAnswer.SeriesId = null;
rowAnswer.IsCurrentTaskAdd = true; rowAnswer.IsCurrentTaskAdd = true;
rowAnswer.MeasureData = string.Empty; rowAnswer.MeasureData = string.Empty;
rowAnswer.OtherMeasureData =null; rowAnswer.OtherMeasureData = null;
List<QuestionMark?> needSaveMark = new List<QuestionMark?>() List<QuestionMark?> needSaveMark = new List<QuestionMark?>()
{ {
@ -1596,7 +1597,7 @@ namespace IRaCIS.Application.Services
}; };
tableAnswers.ForEach(x => tableAnswers.ForEach(x =>
{ {
x.Answer = needSetNa.Contains(x.QuestionMark) ?"NA" :x.Answer; x.Answer = needSetNa.Contains(x.QuestionMark) ? "NA" : x.Answer;
}); });
break; break;
} }
@ -1630,17 +1631,17 @@ namespace IRaCIS.Application.Services
Answer = TargetState.Loss.GetEnumInt(), Answer = TargetState.Loss.GetEnumInt(),
}); });
await _readingTableQuestionAnswerRepository.BatchUpdateNoTrackingAsync(x => inDto.MergeRowIdList.Contains(x.RowId) &&( x.ReadingTableQuestionTrial.QuestionMark == QuestionMark.MajorAxis || x.ReadingTableQuestionTrial.QuestionMark == QuestionMark.ShortAxis), x => new ReadingTableQuestionAnswer() await _readingTableQuestionAnswerRepository.BatchUpdateNoTrackingAsync(x => inDto.MergeRowIdList.Contains(x.RowId) && (x.ReadingTableQuestionTrial.QuestionMark == QuestionMark.MajorAxis || x.ReadingTableQuestionTrial.QuestionMark == QuestionMark.ShortAxis), x => new ReadingTableQuestionAnswer()
{ {
Answer = "0", Answer = "0",
}); });
await _readingTableAnswerRowInfoRepository.UpdatePartialFromQueryAsync(x=> inDto.MergeRowIdList.Contains(x.Id), x => new ReadingTableAnswerRowInfo() await _readingTableAnswerRowInfoRepository.UpdatePartialFromQueryAsync(x => inDto.MergeRowIdList.Contains(x.Id), x => new ReadingTableAnswerRowInfo()
{ {
MergeRowId=inDto.MergeMainRowId, MergeRowId = inDto.MergeMainRowId,
SplitOrMergeType = SplitOrMergeType.Merge, SplitOrMergeType = SplitOrMergeType.Merge,
}) ; });
await _readingTableAnswerRowInfoRepository.UpdatePartialFromQueryAsync(inDto.MergeMainRowId, x => new ReadingTableAnswerRowInfo() await _readingTableAnswerRowInfoRepository.UpdatePartialFromQueryAsync(inDto.MergeMainRowId, x => new ReadingTableAnswerRowInfo()
{ {
@ -1677,7 +1678,7 @@ namespace IRaCIS.Application.Services
[HttpPost] [HttpPost]
public async Task<List<GetCanMergeLesionOutDto>> GetCanMergeLesion(GetCanMergeLesionInDto inDto) public async Task<List<GetCanMergeLesionOutDto>> GetCanMergeLesion(GetCanMergeLesionInDto inDto)
{ {
var rowinfo = await _readingTableAnswerRowInfoRepository.Where(x => x.Id == inDto.RowId).Include(x=>x.ReadingQuestionTrial).FirstNotNullAsync(); var rowinfo = await _readingTableAnswerRowInfoRepository.Where(x => x.Id == inDto.RowId).Include(x => x.ReadingQuestionTrial).FirstNotNullAsync();
var taskInfo = await _visitTaskRepository.Where(x => x.Id == rowinfo.VisitTaskId).Include(x => x.TrialReadingCriterion).FirstNotNullAsync(); var taskInfo = await _visitTaskRepository.Where(x => x.Id == rowinfo.VisitTaskId).Include(x => x.TrialReadingCriterion).FirstNotNullAsync();
// 需要排除的状态 // 需要排除的状态
@ -1685,7 +1686,7 @@ namespace IRaCIS.Application.Services
var query = _readingTableAnswerRowInfoRepository.Where(x => x.VisitTaskId == rowinfo.VisitTaskId && x.QuestionId == rowinfo.QuestionId && x.Id != rowinfo.Id) var query = _readingTableAnswerRowInfoRepository.Where(x => x.VisitTaskId == rowinfo.VisitTaskId && x.QuestionId == rowinfo.QuestionId && x.Id != rowinfo.Id)
.Where(x => x.SplitOrMergeType != SplitOrMergeType.Split && x.SplitOrMergeType != SplitOrMergeType.SplitMain .Where(x => x.SplitOrMergeType != SplitOrMergeType.Split && x.SplitOrMergeType != SplitOrMergeType.SplitMain
&&x.SplitOrMergeType!=SplitOrMergeType.Merge && x.SplitOrMergeType != SplitOrMergeType.MergeMain && x.SplitOrMergeType != SplitOrMergeType.Merge && x.SplitOrMergeType != SplitOrMergeType.MergeMain
&& x.SplitOrMergeType != SplitOrMergeType.Merged); && x.SplitOrMergeType != SplitOrMergeType.Merged);
switch (taskInfo.TrialReadingCriterion.CriterionType) switch (taskInfo.TrialReadingCriterion.CriterionType)
@ -1714,7 +1715,7 @@ namespace IRaCIS.Application.Services
RowIndex = x.RowIndex, RowIndex = x.RowIndex,
OrderMarkName = x.ReadingQuestionTrial.OrderMark + x.RowIndex.GetLesionMark(), OrderMarkName = x.ReadingQuestionTrial.OrderMark + x.RowIndex.GetLesionMark(),
OrganInfoId = x.OrganInfoId OrganInfoId = x.OrganInfoId
}).OrderBy(x=>x.RowIndex).ToListAsync(); }).OrderBy(x => x.RowIndex).ToListAsync();
var organIds = result.Where(x => x.OrganInfoId != null).Select(x => x.OrganInfoId).Distinct().ToList(); var organIds = result.Where(x => x.OrganInfoId != null).Select(x => x.OrganInfoId).Distinct().ToList();
var organList = await _organInfoRepository.Where(x => organIds.Contains(x.Id)).ToListAsync(); var organList = await _organInfoRepository.Where(x => organIds.Contains(x.Id)).ToListAsync();
@ -1824,10 +1825,11 @@ namespace IRaCIS.Application.Services
if (tumorAnswer != null) if (tumorAnswer != null)
{ {
var isConvertedTask = await _visitTaskRepository.Where(x => x.Id == inDto.VisitTaskId).Select(x => x.IsConvertedTask).FirstOrDefaultAsync(); var isConvertedTask = await _visitTaskRepository.Where(x => x.Id == inDto.VisitTaskId).Select(x => x.IsConvertedTask).FirstOrDefaultAsync();
var reportVerify = await _readingCalculateService.GetReportVerify(new GetReportVerifyInDto() { var reportVerify = await _readingCalculateService.GetReportVerify(new GetReportVerifyInDto()
BeforeConvertedTaskId= taskInfo.BeforeConvertedTaskId, {
IsConvertTask= isConvertedTask, BeforeConvertedTaskId = taskInfo.BeforeConvertedTaskId,
VisitTaskId=inDto.VisitTaskId IsConvertTask = isConvertedTask,
VisitTaskId = inDto.VisitTaskId
}); });
if (tumorAnswer.Answer == reportVerify.TumorEvaluate) if (tumorAnswer.Answer == reportVerify.TumorEvaluate)
@ -1883,14 +1885,14 @@ namespace IRaCIS.Application.Services
{ {
PicturePath = string.Empty, PicturePath = string.Empty,
MeasureData = string.Empty, MeasureData = string.Empty,
}) ; });
await _readingTaskQuestionMarkRepository.BatchUpdateNoTrackingAsync(x => await _readingTaskQuestionMarkRepository.BatchUpdateNoTrackingAsync(x =>
(x.QuestionType == QuestionType.LiverSUVmax || x.QuestionType == QuestionType.MediastinumSUVmax) && (x.QuestionType == QuestionType.LiverSUVmax || x.QuestionType == QuestionType.MediastinumSUVmax) &&
x.VisitTaskId == inDto.VisitTaskId && needDeleteMarkQuestonIds.Contains(x.QuestionId), x => new ReadingTaskQuestionMark() x.VisitTaskId == inDto.VisitTaskId && needDeleteMarkQuestonIds.Contains(x.QuestionId), x => new ReadingTaskQuestionMark()
{ {
OtherPicturePath = string.Empty, OtherPicturePath = string.Empty,
OtherMeasureData=string.Empty, OtherMeasureData = string.Empty,
}); });
@ -1899,7 +1901,8 @@ namespace IRaCIS.Application.Services
var datetime = DateTime.Now; var datetime = DateTime.Now;
var markList = _mapper.Map<List<QuestionMarkInfo>, List<ReadingTaskQuestionMark>>(inDto.QuestionMarkInfoList); var markList = _mapper.Map<List<QuestionMarkInfo>, List<ReadingTaskQuestionMark>>(inDto.QuestionMarkInfoList);
markList.ForEach(x => { markList.ForEach(x =>
{
x.Id = NewId.NextGuid(); x.Id = NewId.NextGuid();
x.VisitTaskId = inDto.VisitTaskId; x.VisitTaskId = inDto.VisitTaskId;
x.CreateTime = datetime; x.CreateTime = datetime;
@ -2083,7 +2086,7 @@ namespace IRaCIS.Application.Services
{ {
IsChangeOtherTask = false, IsChangeOtherTask = false,
VisitTaskId = inDto.VisitTaskId, VisitTaskId = inDto.VisitTaskId,
ComputationTrigger=ComputationTrigger.RemoveLesion, ComputationTrigger = ComputationTrigger.RemoveLesion,
}); });
@ -2444,7 +2447,7 @@ namespace IRaCIS.Application.Services
} }
else else
{ {
await _readingTableAnswerRowInfoRepository.UpdateFromDTOAsync(inDto) ; await _readingTableAnswerRowInfoRepository.UpdateFromDTOAsync(inDto);
foreach (var item in inDto.AnswerList) foreach (var item in inDto.AnswerList)
@ -2629,9 +2632,9 @@ namespace IRaCIS.Application.Services
// 转化后的任务不应该有新病灶 // 转化后的任务不应该有新病灶
var isConvertedTask = await _visitTaskRepository.Where(x => x.Id == inDto.VisitTaskId).Select(x=>x.IsConvertedTask).FirstNotNullAsync(); var isConvertedTask = await _visitTaskRepository.Where(x => x.Id == inDto.VisitTaskId).Select(x => x.IsConvertedTask).FirstNotNullAsync();
if (isConvertedTask&&(await _readingTableAnswerRowInfoRepository.AnyAsync(x => x.ReadingQuestionTrial.LesionType == LesionType.NewLesions && x.VisitTaskId == inDto.VisitTaskId))) if (isConvertedTask && (await _readingTableAnswerRowInfoRepository.AnyAsync(x => x.ReadingQuestionTrial.LesionType == LesionType.NewLesions && x.VisitTaskId == inDto.VisitTaskId)))
{ {
throw new BusinessValidationFailedException(_localizer["ReadingImage_NotNewFocus"]); throw new BusinessValidationFailedException(_localizer["ReadingImage_NotNewFocus"]);
} }
@ -2741,16 +2744,14 @@ namespace IRaCIS.Application.Services
} }
else if (inDto.SubjectId != null && trialReadingCriterion.IsReadingTaskViewInOrder == ReadingOrder.InOrder) else if (inDto.SubjectId != null && trialReadingCriterion.IsReadingTaskViewInOrder == ReadingOrder.InOrder)
{ {
var subjectTaskList = (await _visitTaskService.GetOrderReadingIQueryable(new GetOrderReadingIQueryableInDto() var subjectTaskList = (await _visitTaskService.GetSubjectReadingIQueryable(new GetReadingIQueryableInDto()
{ {
TrialId = inDto.TrialId, TrialId = inDto.TrialId,
TrialReadingCriterionId = trialReadingCriterionId!.Value, TrialReadingCriterionId = trialReadingCriterionId!.Value,
Page = new PageInput()
{
PageIndex = 1, PageIndex = 1,
PageSize = 99999, PageSize = 99999,
}
})).Item2; })).CurrentPageData;
var index = 0; var index = 0;
subjectTaskList.ForEach(x => subjectTaskList.ForEach(x =>
@ -2786,17 +2787,16 @@ namespace IRaCIS.Application.Services
} }
else if (inDto.SubjectId != null && trialReadingCriterion.IsReadingTaskViewInOrder == ReadingOrder.SubjectRandom) else if (inDto.SubjectId != null && trialReadingCriterion.IsReadingTaskViewInOrder == ReadingOrder.SubjectRandom)
{ {
var subjectTaskList = (await _visitTaskService.GetOrderReadingIQueryable(new GetOrderReadingIQueryableInDto() var subjectTaskList = (await _visitTaskService.GetSubjectReadingIQueryable(new GetReadingIQueryableInDto()
{ {
TrialId = inDto.TrialId, TrialId = inDto.TrialId,
SubjectId=inDto.SubjectId, SubjectId = inDto.SubjectId,
TrialReadingCriterionId = trialReadingCriterionId!.Value, TrialReadingCriterionId = trialReadingCriterionId!.Value,
Page = new PageInput()
{
PageIndex = 1, PageIndex = 1,
PageSize = 99999, PageSize = 99999,
}
})).Item2; })).CurrentPageData;
if (subjectTaskList.Count() == 0) if (subjectTaskList.Count() == 0)
{ {
@ -2812,9 +2812,7 @@ namespace IRaCIS.Application.Services
skipcount = random.Next(0, count - 1); skipcount = random.Next(0, count - 1);
} }
var visitTaskId= taskList.Skip(skipcount).FirstOrDefault(); var visitTaskId = taskList.Skip(skipcount).FirstOrDefault();
} }
else else
@ -2951,7 +2949,7 @@ namespace IRaCIS.Application.Services
{ {
return; return;
} }
var startReadingTimeKey = _userInfo.Id.ToString()+ "StartReadingTime"; var startReadingTimeKey = _userInfo.Id.ToString() + "StartReadingTime";
var startRestTimeKey = _userInfo.Id.ToString() + "StartRestTime"; var startRestTimeKey = _userInfo.Id.ToString() + "StartRestTime";
int readingMinute = 120; // 为60整数 int readingMinute = 120; // 为60整数
@ -2968,7 +2966,7 @@ namespace IRaCIS.Application.Services
int timespanMin = (DateTime.Now - cacheStartRestTime).Minutes; int timespanMin = (DateTime.Now - cacheStartRestTime).Minutes;
if (timespanMin <= restMinute) if (timespanMin <= restMinute)
{ {
throw new BusinessValidationFailedException(_localizer["ReadingImage_NeedRest", readingMinute/60m, restMinute]); throw new BusinessValidationFailedException(_localizer["ReadingImage_NeedRest", readingMinute / 60m, restMinute]);
} }
else else
{ {
@ -3003,7 +3001,7 @@ namespace IRaCIS.Application.Services
[HttpPost] [HttpPost]
public async Task ResetReadingRestTime(Guid? userID) public async Task ResetReadingRestTime(Guid? userID)
{ {
if(userID == null) if (userID == null)
{ {
userID = _userInfo.Id; userID = _userInfo.Id;
} }
@ -3048,9 +3046,9 @@ namespace IRaCIS.Application.Services
bool isConverted = false; bool isConverted = false;
var taskinfo = await _visitTaskRepository.Where(x => x.Id == visitTaskId).Include(x=>x.TrialReadingCriterion).FirstNotNullAsync(); var taskinfo = await _visitTaskRepository.Where(x => x.Id == visitTaskId).Include(x => x.TrialReadingCriterion).FirstNotNullAsync();
var isConvertedTask=await _visitTaskRepository.Where(x => x.Id == visitTaskId).Select(x=>x.IsConvertedTask).FirstNotNullAsync(); var isConvertedTask = await _visitTaskRepository.Where(x => x.Id == visitTaskId).Select(x => x.IsConvertedTask).FirstNotNullAsync();
switch (taskinfo.TrialReadingCriterion.CriterionType) switch (taskinfo.TrialReadingCriterion.CriterionType)
{ {
case CriterionType.IRECIST1Point1: case CriterionType.IRECIST1Point1:
@ -3059,7 +3057,7 @@ namespace IRaCIS.Application.Services
if (!isConvertedTask && if (!isConvertedTask &&
(await _readingTaskQuestionAnswerRepository.AnyAsync(x => x.VisitTaskId == visitTaskId (await _readingTaskQuestionAnswerRepository.AnyAsync(x => x.VisitTaskId == visitTaskId
&& x.ReadingQuestionTrial.QuestionType == QuestionType.Tumor && x.Answer==(((int)OverallAssessment.PD)).ToString())) && x.ReadingQuestionTrial.QuestionType == QuestionType.Tumor && x.Answer == (((int)OverallAssessment.PD)).ToString()))
) )
{ {
@ -3154,7 +3152,7 @@ namespace IRaCIS.Application.Services
x.DoctorUserId == taskInfo.DoctorUserId && x.DoctorUserId == taskInfo.DoctorUserId &&
x.TrialReadingCriterionId == taskInfo.TrialReadingCriterionId && x.TrialReadingCriterionId == taskInfo.TrialReadingCriterionId &&
x.ReadingTaskState == ReadingTaskState.HaveSigned && x.ReadingTaskState == ReadingTaskState.HaveSigned &&
(x.TaskState == TaskState.Effect||x.TaskState==TaskState.Freeze) && (x.TaskState == TaskState.Effect || x.TaskState == TaskState.Freeze) &&
x.IsSelfAnalysis == taskInfo.IsSelfAnalysis && x.IsSelfAnalysis == taskInfo.IsSelfAnalysis &&
x.IsAnalysisCreate == taskInfo.IsAnalysisCreate && x.IsAnalysisCreate == taskInfo.IsAnalysisCreate &&
x.ReadingCategory == taskInfo.ReadingCategory && x.ReadingCategory == taskInfo.ReadingCategory &&
@ -3257,7 +3255,7 @@ namespace IRaCIS.Application.Services
case ReadingCategory.Visit: case ReadingCategory.Visit:
needReadList = await _readModuleRepository.Where(x => x.SubjectVisitId == taskInfo.SourceSubjectVisitId && needReadList = await _readModuleRepository.Where(x => x.SubjectVisitId == taskInfo.SourceSubjectVisitId &&
x.TrialReadingCriterionId == taskInfo.TrialReadingCriterionId ) x.TrialReadingCriterionId == taskInfo.TrialReadingCriterionId)
.Select(x => new ReadingGenerataTaskDTO .Select(x => new ReadingGenerataTaskDTO
{ {
IsUrgent = x.IsUrgent ?? false, IsUrgent = x.IsUrgent ?? false,
@ -3270,7 +3268,7 @@ namespace IRaCIS.Application.Services
if (needReadList.Any(x => x.ReadingCategory == ReadingCategory.Global)&& taskInfo.TrialReadingCriterion.IsGlobalReading) if (needReadList.Any(x => x.ReadingCategory == ReadingCategory.Global) && taskInfo.TrialReadingCriterion.IsGlobalReading)
{ {
needReadList = needReadList.Where(x => x.ReadingCategory != ReadingCategory.Oncology).ToList(); needReadList = needReadList.Where(x => x.ReadingCategory != ReadingCategory.Oncology).ToList();
await _visitTaskHelpeService.AddTaskAsync(new GenerateTaskCommand() await _visitTaskHelpeService.AddTaskAsync(new GenerateTaskCommand()
@ -3287,7 +3285,7 @@ namespace IRaCIS.Application.Services
// 添加肿瘤学 // 添加肿瘤学
if (await _visitTaskRepository.AnyAsync(x => x.Id == visitTaskId && x.JudgeVisitTaskId == null)) if (await _visitTaskRepository.AnyAsync(x => x.Id == visitTaskId && x.JudgeVisitTaskId == null))
{ {
await AddOncologyTask(needReadList.Where(x=> x.ReadingCategory == ReadingCategory.Oncology).First().ReadModuleId); await AddOncologyTask(needReadList.Where(x => x.ReadingCategory == ReadingCategory.Oncology).First().ReadModuleId);
} }
} }
//needReadList = needReadList.Where(x => _visitTaskRepository.Where(y => y.SouceReadModuleId == x.ReadModuleId).Count() == 0).ToList(); //needReadList = needReadList.Where(x => _visitTaskRepository.Where(y => y.SouceReadModuleId == x.ReadModuleId).Count() == 0).ToList();