Merge branch 'Test_IRC_Net8' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Test_IRC_Net8

IRC_NewDev
hang 2024-03-25 13:09:44 +08:00
commit ace39a7f94
12 changed files with 161 additions and 53 deletions

View File

@ -5526,6 +5526,21 @@
是否是第一次转化的任务
</summary>
</member>
<member name="P:IRaCIS.Core.Application.Service.Reading.Dto.GetRelatedVisitTaskOutDto.PTSeriesId">
<summary>
融合的PTSeriesId
</summary>
</member>
<member name="P:IRaCIS.Core.Application.Service.Reading.Dto.GetRelatedVisitTaskOutDto.CTSeriesId">
<summary>
融合的CTSeriesId
</summary>
</member>
<member name="P:IRaCIS.Core.Application.Service.Reading.Dto.GetRelatedVisitTaskOutDto.OtherStudyId">
<summary>
StudyId
</summary>
</member>
<member name="P:IRaCIS.Core.Application.Service.Reading.Dto.GetGlobalReadingInfoInDto.UsingOriginalData">
<summary>
当新答案为空的时候 是否是有原数据

View File

@ -230,7 +230,7 @@ namespace IRaCIS.Core.Application.Service
.WhereIf(inQuery.IsInvalid != null, t => t.IsInvalid == inQuery.IsInvalid)
.WhereIf(inQuery.IsGetBeRead,x=>!x.IsInvalid&&x.AuditState!= MedicalReviewAuditState.HaveSigned)
.WhereIf(inQuery.TrialReadingCriterionId != null, t => t.VisitTask.TrialReadingCriterionId == inQuery.TrialReadingCriterionId)
.OrderBy(x => x.AuditState).ThenBy(x=>x.VisitTask.SubjectId).ThenBy(x=>x.VisitTask.ArmEnum).ThenBy(x=>x.VisitTask.VisitTaskNum)
.OrderBy(x => x.AuditState!= MedicalReviewAuditState.WaitAudit&& x.AuditState != MedicalReviewAuditState.Auditing).ThenBy(x=>x.VisitTask.SubjectId).ThenBy(x=>x.VisitTask.ArmEnum).ThenBy(x=>x.VisitTask.VisitTaskNum)
.ProjectTo<TaskMedicalReviewView>(_mapper.ConfigurationProvider);

View File

@ -34,6 +34,8 @@ namespace IRaCIS.Core.Application.Contracts
public class GetNextQCInfoInDto
{
public Guid TrialId { get; set; }
public Guid? VisitId { get; set; }
}
public class QCVisitSearchDTO : PageInput
@ -50,6 +52,8 @@ namespace IRaCIS.Core.Application.Contracts
public bool? IsUrgent { get; set; }
public Guid TrialId { get; set; }
public Guid? SiteId { get; set; }
public Guid? VisitId { get; set; }
public Guid? SubjectId { get; set; }
public string SubjectInfo { get; set; } = String.Empty;

View File

@ -252,9 +252,9 @@ namespace IRaCIS.Core.Application.Image.QA
{
var result = await GetQCVisitList(new QCVisitSearchDTO()
{
TrialId = inDto.TrialId,
CurrentActionUserId = _userInfo.Id,
VisitId = inDto.VisitId,
PageIndex = 1,
PageSize = 1,
});
@ -431,6 +431,7 @@ namespace IRaCIS.Core.Application.Image.QA
var svExpression = QCCommon.GetSubjectVisitFilter(visitSearchDTO.VisitPlanArray);
var query = _subjectVisitRepository.Where(x => x.TrialId == visitSearchDTO.TrialId)
.WhereIf(visitSearchDTO.VisitId != null, t => t.Id == visitSearchDTO.VisitId)
.WhereIf(visitSearchDTO.CurrentActionUserId != null, t => t.CurrentActionUserId == visitSearchDTO.CurrentActionUserId)
.WhereIf(visitSearchDTO.ChallengeState != null, t => t.ChallengeState == visitSearchDTO.ChallengeState)
.WhereIf(visitSearchDTO.SiteId != null, t => t.SiteId == visitSearchDTO.SiteId)

View File

@ -928,9 +928,15 @@ namespace IRaCIS.Core.Application.Image.QA
return new GetNextIQCQualityOutDto() { };
break;
case TrialQCProcess.SingleAudit:
visitList = await _subjectVisitRepository.Where(x => x.SubmitState == SubmitStateEnum.Submitted && x.TrialId == inDto.TrialId && x.PreliminaryAuditUserId!= _userInfo.Id&&(x.CurrentActionUserId == _userInfo.Id || (x.AuditState != AuditStateEnum.PrimaryQCPassed && !x.IsTake))).Include(x => x.Subject).ToListAsync();
visitList = await _subjectVisitRepository.Where(x => x.SubmitState == SubmitStateEnum.Submitted
&& x.TrialId == inDto.TrialId && x.PreliminaryAuditUserId!= _userInfo.Id&&(x.CurrentActionUserId == _userInfo.Id || (x.AuditState != AuditStateEnum.PrimaryQCPassed && !x.IsTake)))
.Where(x => x.QCChallengeList.Count() == 0 || x.QCChallengeList.Where(y=>!y.IsClosed).OrderByDescending(x => x.CreateTime).FirstOrDefault().CreateUserId != _userInfo.Id)
.Include(x => x.Subject).ToListAsync();
subjectVisit = visitList.Where(x => x.SubjectId == inDto.SubjectId).OrderBy(x=>x.VisitNum).FirstOrDefault();
subjectVisit = visitList.Where(x => x.SubjectId == inDto.SubjectId)
.OrderBy(x=>x.VisitNum).FirstOrDefault();
if(subjectVisit!=null)
{
return new GetNextIQCQualityOutDto() {
@ -957,7 +963,9 @@ namespace IRaCIS.Core.Application.Image.QA
visitList = await _subjectVisitRepository.Where(x => x.SubmitState == SubmitStateEnum.Submitted && x.TrialId == inDto.TrialId &&
((x.CurrentActionUserId == _userInfo.Id)||(!x.IsTake&& x.AuditState != AuditStateEnum.QCPassed&& (x.PreliminaryAuditUserId != _userInfo.Id)))
).Include(x => x.Subject).ToListAsync();
)
.Where(x => x.QCChallengeList.Count() == 0 || x.QCChallengeList.Where(y => !y.IsClosed).OrderByDescending(x => x.CreateTime).FirstOrDefault().CreateUserId !=_userInfo.Id)
.Include(x => x.Subject).ToListAsync();
if (subjectVisit != null)
{
return new GetNextIQCQualityOutDto()

View File

@ -1442,6 +1442,21 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
/// 是否是第一次转化的任务
/// </summary>
public bool IsFirstChangeTask { get; set; } = false;
/// <summary>
/// 融合的PTSeriesId
/// </summary>
public Guid? PTSeriesId { get; set; }
/// <summary>
/// 融合的CTSeriesId
/// </summary>
public Guid? CTSeriesId { get; set; }
/// <summary>
/// StudyId
/// </summary>
public Guid? OtherStudyId { get; set; }
}
public class GetVisitReadingQuestionOutDto

View File

@ -202,13 +202,13 @@ namespace IRaCIS.Application.Services
.OrderBy(x => x.VisitTask.VisitTaskNum).Select(x => new GetPreviousOtherPicturePathOutDto()
{
VisitTaskId = x.VisitTaskId,
PicturePath = x.PicturePath,
PicturePath = x.OtherPicturePath,
TaskBlindName = x.VisitTask.TaskBlindName
}).ToListAsync();
}
return result.Where(x=>x.PicturePath!=string.Empty).ToList();
return result.Where(x => x.PicturePath != string.Empty && x.PicturePath != null).ToList();
}
/// <summary>
@ -612,6 +612,21 @@ namespace IRaCIS.Application.Services
result = result.Where(x => x.VisitTaskId == inDto.VisitTaskId).ToList();
}
var visitaskIds = result.Select(x => x.VisitTaskId).ToList();
var otherStudys = await _readingTableAnswerRowInfoRepository.Where(x => visitaskIds.Contains(x.VisitTaskId))
.Where(x=>x.CTSeriesId!=null&&x.PTSeriesId!=null)
.Select(x => new
{
x.OtherStudyId,
x.CTSeriesId,
x.PTSeriesId,
x.VisitTaskId,
x.UpdateTime
}).ToListAsync();
foreach (var item in result)
{
var clinicalDataList = await _readingClinicalDataService.GetClinicalDataList(new GetReadingOrTaskClinicalDataListInDto()
@ -623,6 +638,14 @@ namespace IRaCIS.Application.Services
});
item.IsExistsClinicalData = clinicalDataList.Count > 0;
var otherStudy = otherStudys.Where(x => x.VisitTaskId == item.VisitTaskId).OrderByDescending(x => x.UpdateTime).FirstOrDefault();
if (otherStudy != null)
{
item.PTSeriesId = otherStudy.PTSeriesId;
item.CTSeriesId = otherStudy.CTSeriesId;
item.OtherStudyId = otherStudy.OtherStudyId;
}
}
@ -1646,7 +1669,8 @@ namespace IRaCIS.Application.Services
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
&&x.SplitOrMergeType!=SplitOrMergeType.Merge && x.SplitOrMergeType != SplitOrMergeType.MergeMain && x.SplitOrMergeType != SplitOrMergeType.MergeMained && x.SplitOrMergeType != SplitOrMergeType.Merged);
&&x.SplitOrMergeType!=SplitOrMergeType.Merge && x.SplitOrMergeType != SplitOrMergeType.MergeMain
&& x.SplitOrMergeType != SplitOrMergeType.Merged);
switch (taskInfo.TrialReadingCriterion.CriterionType)
{
@ -1798,7 +1822,29 @@ namespace IRaCIS.Application.Services
}).ToListAsync();
var markquestionId = inDto.QuestionMarkInfoList.Select(y => y.QuestionId).ToList();
var needDeleteMarkQuestonIds = inDto.Answers.Where(x => x.Answer == string.Empty).Select(x => x.Id).ToList();
await _readingTaskQuestionMarkRepository.BatchUpdateNoTrackingAsync(x =>
(x.QuestionType == QuestionType.SplenicTopPosition || x.QuestionType == QuestionType.SplenicBottomPosition) &&
x.VisitTaskId == inDto.VisitTaskId && needDeleteMarkQuestonIds.Contains(x.QuestionId), x => new ReadingTaskQuestionMark()
{
PicturePath = string.Empty,
MeasureData = string.Empty,
}) ;
await _readingTaskQuestionMarkRepository.BatchUpdateNoTrackingAsync(x =>
(x.QuestionType == QuestionType.LiverSUVmax || x.QuestionType == QuestionType.MediastinumSUVmax) &&
x.VisitTaskId == inDto.VisitTaskId && needDeleteMarkQuestonIds.Contains(x.QuestionId), x => new ReadingTaskQuestionMark()
{
OtherPicturePath = string.Empty,
OtherMeasureData=string.Empty,
});
await _readingTaskQuestionMarkRepository.BatchDeleteNoTrackingAsync(x => x.VisitTaskId == inDto.VisitTaskId && markquestionId.Contains(x.QuestionId));
var datetime = DateTime.Now;
var markList = _mapper.Map<List<QuestionMarkInfo>, List<ReadingTaskQuestionMark>>(inDto.QuestionMarkInfoList);
@ -1851,21 +1897,21 @@ namespace IRaCIS.Application.Services
var index = await _readingCalculateService.GetDeleteLesionStatrIndex(inDto);
await _readingTableQuestionAnswerRepository.UpdatePartialFromQueryAsync(x => x.RowId == inDto.RowId, x => new ReadingTableQuestionAnswer()
await _readingTableQuestionAnswerRepository.BatchUpdateNoTrackingAsync(x => x.RowId == inDto.RowId, x => new ReadingTableQuestionAnswer()
{
IsDeleted = true
});
if (!(await _readingTableAnswerRowInfoRepository.AnyAsync(x => x.SplitRowId == deleteRowInfo.SplitRowId && x.Id != deleteRowInfo.Id)))
{
await _readingTableAnswerRowInfoRepository.UpdatePartialFromQueryAsync(x => x.Id == deleteRowInfo.SplitRowId, x => new ReadingTableAnswerRowInfo()
await _readingTableAnswerRowInfoRepository.BatchUpdateNoTrackingAsync(x => x.Id == deleteRowInfo.SplitRowId, x => new ReadingTableAnswerRowInfo()
{
SplitOrMergeType = null,
});
}
await _readingTableAnswerRowInfoRepository.UpdatePartialFromQueryAsync(x => x.Id == inDto.RowId, x => new ReadingTableAnswerRowInfo()
await _readingTableAnswerRowInfoRepository.BatchUpdateNoTrackingAsync(x => x.Id == inDto.RowId, x => new ReadingTableAnswerRowInfo()
{
IsDeleted = true

View File

@ -1039,7 +1039,7 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
x.RowIndex >= (int)Math.Floor(inDto.RowNumber) && x.RowIndex < ((int)Math.Floor(inDto.RowNumber) + 1) &&
x.ReadingTableQuestionTrial.QuestionMark == QuestionMark.MajorAxis &&
x.QuestionId== targetQuestion.Id
).Select(x => x.Answer).FirstOrDefaultAsync()).IsNullOrEmptyReturn0();
).Select(x => x.Answer).ToListAsync()).Select(x => x.IsNullOrEmptyReturn0()).Sum();
// 短径
var shortAxis = (await _readingTableQuestionAnswerRepository.Where(x =>
@ -1047,7 +1047,7 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
x.RowIndex >= (int)Math.Floor(inDto.RowNumber) && x.RowIndex < ((int)Math.Floor(inDto.RowNumber) + 1) &&
x.ReadingTableQuestionTrial.QuestionMark == QuestionMark.ShortAxis &&
x.QuestionId == targetQuestion.Id
).Select(x => x.Answer).FirstOrDefaultAsync()).IsNullOrEmptyReturn0();
).Select(x => x.Answer).ToListAsync()).Select(x => x.IsNullOrEmptyReturn0()).Sum();
// 找到ppd问题
var ppdQuestion = await _readingTableQuestionTrialRepository.Where(x => x.ReadingQuestionId == targetQuestion.Id && x.QuestionMark == QuestionMark.PPD).FirstOrDefaultAsync();
@ -1107,7 +1107,7 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
// 符合疾病进展
if (accord)
{
await _readingTableQuestionAnswerRepository.UpdatePartialFromQueryAsync(x =>
await _readingTableQuestionAnswerRepository.BatchUpdateNoTrackingAsync(x =>
x.VisitTaskId == inDto.VisitTaskId &&
x.RowIndex == (int)Math.Floor(inDto.RowNumber) &&
x.ReadingTableQuestionTrial.QuestionMark == QuestionMark.State &&
@ -1119,7 +1119,7 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
}
else if (state == TargetState.DiseaseProgression.GetEnumInt())
{
await _readingTableQuestionAnswerRepository.UpdatePartialFromQueryAsync(x =>
await _readingTableQuestionAnswerRepository.BatchUpdateNoTrackingAsync(x =>
x.VisitTaskId == inDto.VisitTaskId &&
x.RowIndex == (int)Math.Floor(inDto.RowNumber) &&
x.ReadingTableQuestionTrial.QuestionMark == QuestionMark.State &&
@ -1374,15 +1374,20 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
var addList = _mapper.Map<List<ReadingTableAnswerRowInfo>>(tableRowAnswers).OrderBy(x => x.RowIndex).ToList();
await _readingTaskQuestionMarkRepository.AddRangeAsync(questionMarkList);
await _readingTableAnswerRowInfoRepository.AddRangeAsync(addList);
await _readingTableQuestionAnswerRepository.AddRangeAsync(tableAnswers);
addList.ForEach(x =>
foreach (var item in addList)
{
x.MergeRow = null;
x.SplitRow = null;
await _readingTableAnswerRowInfoRepository.AddAsync(item);
await _readingTableQuestionAnswerRepository.SaveChangesAsync();
}
await _readingTaskQuestionMarkRepository.AddRangeAsync(questionMarkList);
//await _readingTableAnswerRowInfoRepository.AddRangeAsync(addList);
await _readingTableQuestionAnswerRepository.AddRangeAsync(tableAnswers);
//addList.ForEach(x =>
//{
// x.MergeRow = null;
// x.SplitRow = null;
});
//});
await _readingTableQuestionAnswerRepository.SaveChangesAsync();
}

View File

@ -14,6 +14,9 @@ namespace IRaCIS.Core.Domain.Share
//1st QC进行了操作
InPrimaryQC = 4,
/// <summary>
/// 单审通过
/// </summary>
PrimaryQCPassed = 5,
//2nd QC进行操作

View File

@ -2278,6 +2278,15 @@ public enum SUVChangeVSBaseline
/// </summary>
PSScoreRemarks = 59,
/// <summary>
/// 脾尖位置
/// </summary>
SplenicTopPosition = 60,
/// <summary>
/// 脾底位置
/// </summary>
SplenicBottomPosition = 61,
}

View File

@ -84,7 +84,9 @@ namespace IRaCIS.Core.Domain.Models
public Guid? ForwardUserId { get; set; }
public DateTime? ForwardTime { get; set; }
// 质控领取人
/// <summary>
/// 当前质控领取人
/// </summary>
public Guid? CurrentActionUserId { get; set; }
public DateTime? CurrentActionUserExpireTime { get; set; }