Merge branch 'Test_IRC_Net8' of https://gitea.frp.extimaging.com/XCKJ/irc-netcore-api into Test_IRC_Net8
continuous-integration/drone/push Build is passing Details

Uat_IRC_Net8
he 2025-08-01 16:46:27 +08:00
commit 9a1a4e3451
2 changed files with 55 additions and 30 deletions

View File

@ -870,7 +870,7 @@ namespace IRaCIS.Core.Application.Service
//有可能仅仅只分配了一个Subject 未分配 那么 //有可能仅仅只分配了一个Subject 未分配 那么
if (assignConfigList.Any(t => t.ArmEnum == Arm.DoubleReadingArm1) && task1 != null) if (assignConfigList.Any(t => t.ArmEnum == Arm.DoubleReadingArm1) && task1 != null)
{ {
arm1.TaskAllocationState = TaskAllocationState.Allocated; arm1.TaskAllocationState = TaskAllocationState.Allocated;
arm1.AllocateTime = DateTime.Now; arm1.AllocateTime = DateTime.Now;
arm1.DoctorUserId = task1.DoctorUserId; arm1.DoctorUserId = task1.DoctorUserId;
@ -903,7 +903,7 @@ namespace IRaCIS.Core.Application.Service
BlindTrialSiteCode = latestTask.BlindTrialSiteCode, BlindTrialSiteCode = latestTask.BlindTrialSiteCode,
IsAnalysisCreate = latestTask.IsAnalysisCreate, IsAnalysisCreate = latestTask.IsAnalysisCreate,
IsSelfAnalysis = latestTask.IsSelfAnalysis, IsSelfAnalysis = latestTask.IsSelfAnalysis,
TrialReadingCriterionId = latestTask.TrialReadingCriterionId, TrialReadingCriterionId = latestTask.TrialReadingCriterionId,
IsNeedClinicalDataSign = latestTask.IsNeedClinicalDataSign, IsNeedClinicalDataSign = latestTask.IsNeedClinicalDataSign,
IsClinicalDataSign = latestTask.IsClinicalDataSign IsClinicalDataSign = latestTask.IsClinicalDataSign
@ -913,10 +913,10 @@ namespace IRaCIS.Core.Application.Service
{ {
taskOne.TaskAllocationState = TaskAllocationState.Allocated; taskOne.TaskAllocationState = TaskAllocationState.Allocated;
taskOne.AllocateTime = DateTime.Now; taskOne.AllocateTime = DateTime.Now;
taskOne. DoctorUserId = task1!.DoctorUserId; taskOne.DoctorUserId = task1!.DoctorUserId;
taskOne. SuggesteFinishedTime = GetSuggessFinishTime(true, UrgentType.NotUrget); taskOne.SuggesteFinishedTime = GetSuggessFinishTime(true, UrgentType.NotUrget);
} }
currentMaxCodeInt = currentMaxCodeInt + 1; currentMaxCodeInt = currentMaxCodeInt + 1;
@ -976,7 +976,7 @@ namespace IRaCIS.Core.Application.Service
BlindTrialSiteCode = latestTask.BlindTrialSiteCode, BlindTrialSiteCode = latestTask.BlindTrialSiteCode,
IsAnalysisCreate = latestTask.IsAnalysisCreate, IsAnalysisCreate = latestTask.IsAnalysisCreate,
IsSelfAnalysis = latestTask.IsSelfAnalysis, IsSelfAnalysis = latestTask.IsSelfAnalysis,
TrialReadingCriterionId = latestTask.TrialReadingCriterionId, TrialReadingCriterionId = latestTask.TrialReadingCriterionId,
IsNeedClinicalDataSign = latestTask.IsNeedClinicalDataSign, IsNeedClinicalDataSign = latestTask.IsNeedClinicalDataSign,
IsClinicalDataSign = latestTask.IsClinicalDataSign IsClinicalDataSign = latestTask.IsClinicalDataSign
@ -1409,31 +1409,35 @@ namespace IRaCIS.Core.Application.Service
.Where(x => x.ClinicalDataTrialSet.UploadRole == UploadRole.PM || x.FileCount > 0) .Where(x => x.ClinicalDataTrialSet.UploadRole == UploadRole.PM || x.FileCount > 0)
.Include(t => t.ReadingClinicalDataPDFList).Include(t => t.ClinicalDataTrialSet).ToList(); .Include(t => t.ReadingClinicalDataPDFList).Include(t => t.ClinicalDataTrialSet).ToList();
//防止多标准重复插入
foreach (var clinicalData in clinicalDataList) if (!_readingConsistentClinicalDataRepository.Any(t => t.SubjectId == subjectId))
{ {
var consistnentClinicalData = _mapper.Map<ReadingConsistentClinicalData>(clinicalData); foreach (var clinicalData in clinicalDataList)
var id = NewId.NextSequentialGuid();
consistnentClinicalData.Id = id;
if (consistnentClinicalData.ClinicalDataTrialSet.ClinicalUploadType == ClinicalUploadType.PDF)
{ {
consistnentClinicalData.IsSign = false; var consistnentClinicalData = _mapper.Map<ReadingConsistentClinicalData>(clinicalData);
consistnentClinicalData.IsBlind = false; var id = NewId.NextSequentialGuid();
consistnentClinicalData.IsComplete = true; consistnentClinicalData.Id = id;
consistnentClinicalData.ReadingClinicalDataState = ReadingClinicalDataStatus.HaveUploaded;
consistnentClinicalData.ClinicalDataTrialSet = null; if (consistnentClinicalData.ClinicalDataTrialSet.ClinicalUploadType == ClinicalUploadType.PDF)
{
consistnentClinicalData.IsSign = false;
consistnentClinicalData.IsBlind = false;
consistnentClinicalData.IsComplete = true;
consistnentClinicalData.ReadingClinicalDataState = ReadingClinicalDataStatus.HaveUploaded;
consistnentClinicalData.ClinicalDataTrialSet = null;
}
var consistanClinicalDataPdfList = _mapper.Map<List<ReadingConsistentClinicalDataPDF>>(clinicalData.ReadingClinicalDataPDFList);
consistanClinicalDataPdfList.ForEach(t => { t.ReadingConsistentClinicalDataId = id; t.Id = Guid.Empty; });
consistnentClinicalData.ReadingClinicalDataPDFList = consistanClinicalDataPdfList;
await _readingConsistentClinicalDataRepository.AddAsync(consistnentClinicalData);
} }
var consistanClinicalDataPdfList = _mapper.Map<List<ReadingConsistentClinicalDataPDF>>(clinicalData.ReadingClinicalDataPDFList);
consistanClinicalDataPdfList.ForEach(t => { t.ReadingConsistentClinicalDataId = id; t.Id = Guid.Empty; });
consistnentClinicalData.ReadingClinicalDataPDFList = consistanClinicalDataPdfList;
await _readingConsistentClinicalDataRepository.AddAsync(consistnentClinicalData);
} }
foreach (var task in generateTaskCommand.GenerataConsistentTaskList) foreach (var task in generateTaskCommand.GenerataConsistentTaskList)
{ {

View File

@ -1360,12 +1360,25 @@ namespace IRaCIS.Core.Application.Image.QA
case TrialQCProcess.SingleAudit: case TrialQCProcess.SingleAudit:
var visitList = await _subjectVisitRepository var visitList = await _subjectVisitRepository
.Where(t => t.Subject.Status != SubjectStatus.EndOfVisit) .Where(t => t.Subject.Status != SubjectStatus.EndOfVisit)
//区分类型,当前做的是复核任务
.WhereIf(isDistinguishType, t => isSecondReview == true ? t.SecondReviewState == SecondReviewState.WaitAudit : t.SecondReviewState == SecondReviewState.None) .WhereIf(isDistinguishType, t => isSecondReview == true ? t.SecondReviewState == SecondReviewState.WaitAudit : t.SecondReviewState == SecondReviewState.None)
.WhereIf(isDistinguishType, t => ishaveQCChallenge == true ? t.QCChallengeList.Any() : !t.QCChallengeList.Any()) .WhereIf(isDistinguishType, t => ishaveQCChallenge == true ? t.QCChallengeList.Any() : !t.QCChallengeList.Any())
//区分类型,当前做的不是复核任务
.WhereIf(isDistinguishType && isSecondReview == false, t => t.AuditState != AuditStateEnum.QCPassed)
//不区分任务类型, 当前做完的任何类型都要默认满足下面条件
.WhereIf(isDistinguishType == false, t => (t.SecondReviewState == SecondReviewState.WaitAudit && t.AuditState == AuditStateEnum.QCPassed) || (t.AuditState != AuditStateEnum.QCPassed))
////不区分任务类型 当前不是复核任务
//.WhereIf(isDistinguishType == false && isSecondReview == false, t => (t.SecondReviewState == SecondReviewState.WaitAudit && t.AuditState == AuditStateEnum.QCPassed) || (t.AuditState != AuditStateEnum.QCPassed))
////不区分任务类型 当前是复核任务
//.WhereIf(isDistinguishType == false && isSecondReview == true, t => (t.SecondReviewState == SecondReviewState.WaitAudit && t.AuditState == AuditStateEnum.QCPassed) || (t.AuditState != AuditStateEnum.QCPassed))
.Where(x => !x.SubjectVisitImageBackRecordList.Any(t => t.ImageBackState == ImageBackStateEnum.None)) .Where(x => !x.SubjectVisitImageBackRecordList.Any(t => t.ImageBackState == ImageBackStateEnum.None))
.Where(x => x.SubmitState == SubmitStateEnum.Submitted && x.TrialId == inDto.TrialId && x.CurrentActionUserId == null) .Where(x => x.SubmitState == SubmitStateEnum.Submitted && x.TrialId == inDto.TrialId && x.CurrentActionUserId == null)
//.WhereIf(isSecondReview, t => t.PreliminaryAuditUserId != null) //.WhereIf(isSecondReview, t => t.PreliminaryAuditUserId != null)
.WhereIf(isSecondReview == false, t => t.AuditState != AuditStateEnum.QCPassed)
//.Where(x => x.QCChallengeList.Count() == 0 || x.QCChallengeList.Where(y => !y.IsClosed).OrderByDescending(x => x.CreateTime).FirstOrDefault().CreateUserId != _userInfo.UserRoleId) //.Where(x => x.QCChallengeList.Count() == 0 || x.QCChallengeList.Where(y => !y.IsClosed).OrderByDescending(x => x.CreateTime).FirstOrDefault().CreateUserId != _userInfo.UserRoleId)
.Select(t => new { t.IsUrgent, SubjectCode = t.Subject.Code, t.SubjectId, t.Id, t.VisitNum, IshaveQCChallenge = t.QCChallengeList.Any(), t.SecondReviewState }) .Select(t => new { t.IsUrgent, SubjectCode = t.Subject.Code, t.SubjectId, t.Id, t.VisitNum, IshaveQCChallenge = t.QCChallengeList.Any(), t.SecondReviewState })
.OrderBy(t => t.IshaveQCChallenge).ThenBy(t => t.SecondReviewState).ThenBy(x => x.IsUrgent).ThenBy(x => x.SubjectCode).ThenBy(x => x.VisitNum).ToListAsync(); .OrderBy(t => t.IshaveQCChallenge).ThenBy(t => t.SecondReviewState).ThenBy(x => x.IsUrgent).ThenBy(x => x.SubjectCode).ThenBy(x => x.VisitNum).ToListAsync();
@ -1401,10 +1414,18 @@ namespace IRaCIS.Core.Application.Image.QA
.Where(t => t.Subject.Status != SubjectStatus.EndOfVisit) .Where(t => t.Subject.Status != SubjectStatus.EndOfVisit)
.WhereIf(isDistinguishType, t => isSecondReview == true ? t.SecondReviewState == SecondReviewState.WaitAudit : t.SecondReviewState == SecondReviewState.None) .WhereIf(isDistinguishType, t => isSecondReview == true ? t.SecondReviewState == SecondReviewState.WaitAudit : t.SecondReviewState == SecondReviewState.None)
.WhereIf(isDistinguishType, t => ishaveQCChallenge == true ? t.QCChallengeList.Any() : !t.QCChallengeList.Any()) .WhereIf(isDistinguishType, t => ishaveQCChallenge == true ? t.QCChallengeList.Any() : !t.QCChallengeList.Any())
.Where(x => !x.SubjectVisitImageBackRecordList.Any(t => t.ImageBackState == ImageBackStateEnum.None)) //区分类型,当前做的不是复核任务
.WhereIf(isDistinguishType && isSecondReview == false, t => t.AuditState != AuditStateEnum.QCPassed)
.WhereIf(isDistinguishType && isSecondReview == false, t => t.AuditState >= AuditStateEnum.PrimaryQCPassed ? t.PreliminaryAuditUserId != _userInfo.UserRoleId : true)
//不区分任务类型, 当前做完的任何类型都要默认满足下面条件
.WhereIf(isDistinguishType == false, t => (t.SecondReviewState == SecondReviewState.WaitAudit && t.AuditState == AuditStateEnum.QCPassed) || (t.AuditState != AuditStateEnum.QCPassed))
.Where(x => !x.SubjectVisitImageBackRecordList.Any(t => t.ImageBackState == ImageBackStateEnum.None))
.Where(x => x.SubmitState == SubmitStateEnum.Submitted && x.TrialId == inDto.TrialId && x.CurrentActionUserId == null) .Where(x => x.SubmitState == SubmitStateEnum.Submitted && x.TrialId == inDto.TrialId && x.CurrentActionUserId == null)
.WhereIf(isSecondReview == false, t => t.AuditState >= AuditStateEnum.PrimaryQCPassed ? t.PreliminaryAuditUserId != _userInfo.UserRoleId : true)
.WhereIf(isSecondReview == false, t => t.AuditState != AuditStateEnum.QCPassed)
//.Where(x => x.QCChallengeList.Count() == 0 || x.QCChallengeList.Where(y => !y.IsClosed).OrderByDescending(x => x.CreateTime).FirstOrDefault().CreateUserId != _userInfo.UserRoleId) //.Where(x => x.QCChallengeList.Count() == 0 || x.QCChallengeList.Where(y => !y.IsClosed).OrderByDescending(x => x.CreateTime).FirstOrDefault().CreateUserId != _userInfo.UserRoleId)
.Select(t => new { t.IsUrgent, SubjectCode = t.Subject.Code, t.SubjectId, t.Id, t.VisitNum, IshaveQCChallenge = t.QCChallengeList.Any(), t.SecondReviewState }) .Select(t => new { t.IsUrgent, SubjectCode = t.Subject.Code, t.SubjectId, t.Id, t.VisitNum, IshaveQCChallenge = t.QCChallengeList.Any(), t.SecondReviewState })
.OrderBy(t => t.IshaveQCChallenge).ThenBy(t => t.SecondReviewState).ThenBy(x => x.IsUrgent).ThenBy(x => x.SubjectCode).ThenBy(x => x.VisitNum).ToListAsync(); .OrderBy(t => t.IshaveQCChallenge).ThenBy(t => t.SecondReviewState).ThenBy(x => x.IsUrgent).ThenBy(x => x.SubjectCode).ThenBy(x => x.VisitNum).ToListAsync();