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

Test_IRC_Net8
he 2025-06-24 14:03:29 +08:00
commit d9b46437a4
16 changed files with 57 additions and 15 deletions

View File

@ -67,7 +67,7 @@ namespace IRaCIS.Core.Application.MassTransit.Consumer
//subjectVisitLambda2= subjectVisitLambda2.And(x => x.CheckState == CheckStateEnum.ToCheck && x.AuditState == AuditStateEnum.QCPassed || (x.CheckState == CheckStateEnum.CVIng && x.AuditState == AuditStateEnum.QCPassed)); //subjectVisitLambda2= subjectVisitLambda2.And(x => x.CheckState == CheckStateEnum.ToCheck && x.AuditState == AuditStateEnum.QCPassed || (x.CheckState == CheckStateEnum.CVIng && x.AuditState == AuditStateEnum.QCPassed));
Expression<Func<SubjectVisit, bool>> subjectVisitLambda = x => x.TrialId == trialId && Expression<Func<SubjectVisit, bool>> subjectVisitLambda = x => x.TrialId == trialId && x.Subject.IsSubjectQuit == false &&
(x.CheckState == CheckStateEnum.ToCheck && x.AuditState == AuditStateEnum.QCPassed || (x.CheckState == CheckStateEnum.CVIng && x.AuditState == AuditStateEnum.QCPassed)); (x.CheckState == CheckStateEnum.ToCheck && x.AuditState == AuditStateEnum.QCPassed || (x.CheckState == CheckStateEnum.CVIng && x.AuditState == AuditStateEnum.QCPassed));
var dicomQuery = from sv in _subjectVisitRepository.Where(subjectVisitLambda) var dicomQuery = from sv in _subjectVisitRepository.Where(subjectVisitLambda)

View File

@ -71,6 +71,8 @@ namespace IRaCIS.Core.Application.ViewModel
public bool IsPMSetBack { get; set; } public bool IsPMSetBack { get; set; }
public bool IsSubjectQuit { get; set; }
#region 标准配置 #region 标准配置
public Guid TrialReadingCriterionId { get; set; } public Guid TrialReadingCriterionId { get; set; }
@ -237,6 +239,7 @@ namespace IRaCIS.Core.Application.ViewModel
//重阅原始编号 //重阅原始编号
//public string ReReadingOriginalTaskCode { get; set; } //public string ReReadingOriginalTaskCode { get; set; }
public string ApplicantName { get; set; } public string ApplicantName { get; set; }
public Guid Id { get; set; } public Guid Id { get; set; }

View File

@ -964,7 +964,7 @@ public class VisitTaskService(IRepository<VisitTask> _visitTaskRepository,
//随机阅片 //随机阅片
else else
{ {
var taskQuery = _visitTaskRepository.Where(x => x.TrialId == inQuery.TrialId && x.DoctorUserId == _userInfo.UserRoleId && x.TaskState == TaskState.Effect && x.TrialReadingCriterionId == trialReadingCriterionId) var taskQuery = _visitTaskRepository.Where(x => x.TrialId == inQuery.TrialId && x.DoctorUserId == _userInfo.UserRoleId && x.TaskState == TaskState.Effect && x.TrialReadingCriterionId == trialReadingCriterionId && x.Subject.IsSubjectQuit == false)
.Where(x => !x.Subject.IsDeleted).Where(x => (x.IsNeedClinicalDataSign && x.IsClinicalDataSign) || !x.IsNeedClinicalDataSign); .Where(x => !x.Subject.IsDeleted).Where(x => (x.IsNeedClinicalDataSign && x.IsClinicalDataSign) || !x.IsNeedClinicalDataSign);
iRUnReadOut = new IRUnReadOutDto() iRUnReadOut = new IRUnReadOutDto()
@ -1008,7 +1008,7 @@ public class VisitTaskService(IRepository<VisitTask> _visitTaskRepository,
if (critrion.IsReadingTaskViewInOrder == ReadingOrder.InOrder) if (critrion.IsReadingTaskViewInOrder == ReadingOrder.InOrder)
{ {
var visitQuery = _visitTaskRepository.Where(x => x.TrialId == inQuery.TrialId && x.DoctorUserId == _userInfo.UserRoleId && x.TaskState == TaskState.Effect) var visitQuery = _visitTaskRepository.Where(x => x.TrialId == inQuery.TrialId && x.DoctorUserId == _userInfo.UserRoleId && x.TaskState == TaskState.Effect && x.Subject.IsSubjectQuit == false)
.WhereIf(inQuery.SubjectId != null, x => x.SubjectId == inQuery.SubjectId) .WhereIf(inQuery.SubjectId != null, x => x.SubjectId == inQuery.SubjectId)
//前序 不存在 未生成任务的访视 //前序 不存在 未生成任务的访视

View File

@ -2,6 +2,7 @@
using IRaCIS.Application.Contracts; using IRaCIS.Application.Contracts;
using IRaCIS.Core.Application.ViewModel; using IRaCIS.Core.Application.ViewModel;
using IRaCIS.Core.Domain.Share; using IRaCIS.Core.Domain.Share;
using IRaCIS.Core.Infra.EFCore.Migrations;
namespace IRaCIS.Core.Application.Service namespace IRaCIS.Core.Application.Service
{ {
@ -117,7 +118,9 @@ namespace IRaCIS.Core.Application.Service
.ForMember(o => o.IsReadingShowPreviousResults, t => t.MapFrom(u => u.TrialReadingCriterion.IsReadingShowPreviousResults)) .ForMember(o => o.IsReadingShowPreviousResults, t => t.MapFrom(u => u.TrialReadingCriterion.IsReadingShowPreviousResults))
.ForMember(o => o.DigitPlaces, t => t.MapFrom(u => u.TrialReadingCriterion.DigitPlaces)) .ForMember(o => o.DigitPlaces, t => t.MapFrom(u => u.TrialReadingCriterion.DigitPlaces))
.ForMember(o => o.IseCRFShowInDicomReading, t => t.MapFrom(u => u.TrialReadingCriterion.IseCRFShowInDicomReading)) .ForMember(o => o.IseCRFShowInDicomReading, t => t.MapFrom(u => u.TrialReadingCriterion.IseCRFShowInDicomReading))
.ForMember(o => o.CriterionType, t => t.MapFrom(u => u.TrialReadingCriterion.CriterionType)); .ForMember(o => o.CriterionType, t => t.MapFrom(u => u.TrialReadingCriterion.CriterionType))
.ForMember(o => o.IsSubjectQuit, t => t.MapFrom(u => u.Subject.IsSubjectQuit))
;
CreateMap<VisitTask, VisitTaskView>().IncludeBase<VisitTask, VisitTaskViewBasic>() CreateMap<VisitTask, VisitTaskView>().IncludeBase<VisitTask, VisitTaskViewBasic>()
@ -163,6 +166,7 @@ namespace IRaCIS.Core.Application.Service
.ForMember(o => o.ApplicantName, t => t.MapFrom(u => u.CreateUserRole.IdentityUser.FullName)) .ForMember(o => o.ApplicantName, t => t.MapFrom(u => u.CreateUserRole.IdentityUser.FullName))
.ForMember(o => o.ReReadingNewTaskCode, t => t.MapFrom(u => u.NewReReadingTask.TaskCode)) .ForMember(o => o.ReReadingNewTaskCode, t => t.MapFrom(u => u.NewReReadingTask.TaskCode))
.ForMember(o => o.OriginalReReadingTask, t => t.MapFrom(u => u.OriginalReReadingTask)) .ForMember(o => o.OriginalReReadingTask, t => t.MapFrom(u => u.OriginalReReadingTask))
//.ForMember(o => o.IsSubjectQuit, t => t.MapFrom(u => u.OriginalReReadingTask.Subject.IsSubjectQuit))
; ;
@ -222,6 +226,7 @@ namespace IRaCIS.Core.Application.Service
.ForMember(o => o.IseCRFShowInDicomReading, t => t.MapFrom(u => u.VisitTask.TrialReadingCriterion.IseCRFShowInDicomReading)) .ForMember(o => o.IseCRFShowInDicomReading, t => t.MapFrom(u => u.VisitTask.TrialReadingCriterion.IseCRFShowInDicomReading))
.ForMember(o => o.CriterionType, t => t.MapFrom(u => u.VisitTask.TrialReadingCriterion.CriterionType)) .ForMember(o => o.CriterionType, t => t.MapFrom(u => u.VisitTask.TrialReadingCriterion.CriterionType))
.ForMember(o => o.IsSubjectQuit, t => t.MapFrom(u => u.VisitTask.Subject.IsSubjectQuit))
.ForMember(o => o.Id, t => t.MapFrom(u => u.Id)) .ForMember(o => o.Id, t => t.MapFrom(u => u.Id))
.ForMember(o => o.MedicalNo, t => t.MapFrom(u => u.VisitTask.Subject.MedicalNo)) .ForMember(o => o.MedicalNo, t => t.MapFrom(u => u.VisitTask.Subject.MedicalNo))
.ForMember(o => o.DoctorUser, t => t.MapFrom(u => u.VisitTask.DoctorUser)) .ForMember(o => o.DoctorUser, t => t.MapFrom(u => u.VisitTask.DoctorUser))

View File

@ -58,7 +58,7 @@ namespace IRaCIS.Core.Application.Contracts
//public string VisitPlanInfo { get; set; } = string.Empty; //public string VisitPlanInfo { get; set; } = string.Empty;
public string[]? VisitPlanArray { get; set; } public string[]? VisitPlanArray { get; set; }
public bool? IsSubjectQuit { get; set; }
} }
public class GetNextQCInfoInDto public class GetNextQCInfoInDto
@ -96,6 +96,8 @@ namespace IRaCIS.Core.Application.Contracts
public DateTime? BeginAuditTime { get; set; } public DateTime? BeginAuditTime { get; set; }
public DateTime? EndAuditTime { get; set; } public DateTime? EndAuditTime { get; set; }
public bool? IsSubjectQuit { get; set; }
} }
public class GetNextIQCQualityInDto public class GetNextIQCQualityInDto
@ -1752,6 +1754,7 @@ namespace IRaCIS.Core.Application.Contracts
public class ImageBackViewModel public class ImageBackViewModel
{ {
public bool IsSubjectQuit { get; set; }
public Guid Id { get; set; } public Guid Id { get; set; }
public DateTime CreateTime { get; set; } public DateTime CreateTime { get; set; }
@ -1867,6 +1870,8 @@ namespace IRaCIS.Core.Application.Contracts
public class QCCRCChallengeViewModel public class QCCRCChallengeViewModel
{ {
public bool IsSubjectQuit { get; set; }
public Guid? PreliminaryAuditUserId { get; set; } public Guid? PreliminaryAuditUserId { get; set; }
public Guid? CurrentActionUserId { get; set; } public Guid? CurrentActionUserId { get; set; }
@ -2068,6 +2073,7 @@ namespace IRaCIS.Core.Application.Contracts
public class QCCheckViewModel public class QCCheckViewModel
{ {
public bool IsSubjectQuit { get; set; }
public string? TalkContent { get; set; } = String.Empty; public string? TalkContent { get; set; } = String.Empty;
public string BlindName { get; set; } = String.Empty; public string BlindName { get; set; } = String.Empty;
public bool IsUrgent { get; set; } public bool IsUrgent { get; set; }
@ -2161,6 +2167,7 @@ namespace IRaCIS.Core.Application.Contracts
public class QCVisitBasicListViewModel public class QCVisitBasicListViewModel
{ {
public bool IsSubjectQuit { get; set; }
public ChallengeStateEnum ChallengeState { get; set; } public ChallengeStateEnum ChallengeState { get; set; }
public bool? IsConfirmedClinicalData { get; set; } public bool? IsConfirmedClinicalData { get; set; }
public bool IsQCConfirmedReupload { get; set; } public bool IsQCConfirmedReupload { get; set; }

View File

@ -84,6 +84,7 @@ namespace IRaCIS.Core.Application.Image.QA
.WhereIf(inQuery.TrialSiteId != null, t => t.TrialSiteId == inQuery.TrialSiteId) .WhereIf(inQuery.TrialSiteId != null, t => t.TrialSiteId == inQuery.TrialSiteId)
.WhereIf(inQuery.SubjectId != null, t => t.Subject.Id == inQuery.SubjectId) .WhereIf(inQuery.SubjectId != null, t => t.Subject.Id == inQuery.SubjectId)
.WhereIf(!string.IsNullOrEmpty(inQuery.SubjectInfo), t => t.Subject.Code.Contains(inQuery.SubjectInfo)) .WhereIf(!string.IsNullOrEmpty(inQuery.SubjectInfo), t => t.Subject.Code.Contains(inQuery.SubjectInfo))
.WhereIf(inQuery.IsSubjectQuit != null, t => t.Subject.IsSubjectQuit == inQuery.IsSubjectQuit)
.WhereIf(inQuery.VisitPlanArray != null && inQuery.VisitPlanArray?.Length > 0, svExpression) .WhereIf(inQuery.VisitPlanArray != null && inQuery.VisitPlanArray?.Length > 0, svExpression)
//.WhereIf(!string.IsNullOrEmpty(visitSearchDTO.VisitPlanInfo), visitSearchDTO.VisitPlanInfo.Contains('.') ? t => t.InPlan == false : t => t.VisitNum == decimal.Parse(visitSearchDTO.VisitPlanInfo)) //.WhereIf(!string.IsNullOrEmpty(visitSearchDTO.VisitPlanInfo), visitSearchDTO.VisitPlanInfo.Contains('.') ? t => t.InPlan == false : t => t.VisitNum == decimal.Parse(visitSearchDTO.VisitPlanInfo))
@ -273,6 +274,7 @@ namespace IRaCIS.Core.Application.Image.QA
.WhereIf(inQuery.ChallengeState != null, t => t.ChallengeState == inQuery.ChallengeState) .WhereIf(inQuery.ChallengeState != null, t => t.ChallengeState == inQuery.ChallengeState)
.WhereIf(inQuery.TrialSiteId != null, t => t.TrialSiteId == inQuery.TrialSiteId) .WhereIf(inQuery.TrialSiteId != null, t => t.TrialSiteId == inQuery.TrialSiteId)
.WhereIf(inQuery.SubjectId != null, t => t.Subject.Id == inQuery.SubjectId) .WhereIf(inQuery.SubjectId != null, t => t.Subject.Id == inQuery.SubjectId)
.WhereIf(inQuery.IsSubjectQuit != null, t => t.Subject.IsSubjectQuit == inQuery.IsSubjectQuit)
.WhereIf(!string.IsNullOrEmpty(inQuery.SubjectInfo), t => /*t.Subject.FirstName.Contains(subjectInfo) || t.Subject.LastName.Contains(subjectInfo) ||*/ t.Subject.Code.Contains(inQuery.SubjectInfo)) .WhereIf(!string.IsNullOrEmpty(inQuery.SubjectInfo), t => /*t.Subject.FirstName.Contains(subjectInfo) || t.Subject.LastName.Contains(subjectInfo) ||*/ t.Subject.Code.Contains(inQuery.SubjectInfo))
.WhereIf(inQuery.VisitPlanArray != null && inQuery.VisitPlanArray?.Length > 0, svExpression) .WhereIf(inQuery.VisitPlanArray != null && inQuery.VisitPlanArray?.Length > 0, svExpression)
//.WhereIf(!string.IsNullOrEmpty(visitSearchDTO.VisitPlanInfo), visitSearchDTO.VisitPlanInfo.Contains('.') ? t => t.VisitNum.ToString().Contains(".") : t => t.VisitNum == decimal.Parse(visitSearchDTO.VisitPlanInfo)) //.WhereIf(!string.IsNullOrEmpty(visitSearchDTO.VisitPlanInfo), visitSearchDTO.VisitPlanInfo.Contains('.') ? t => t.VisitNum.ToString().Contains(".") : t => t.VisitNum == decimal.Parse(visitSearchDTO.VisitPlanInfo))

View File

@ -6,6 +6,7 @@ using IRaCIS.Core.Application.Contracts.DTO;
using IRaCIS.Core.Application.MassTransit.Command; using IRaCIS.Core.Application.MassTransit.Command;
using IRaCIS.Core.Application.ViewModel; using IRaCIS.Core.Application.ViewModel;
using IRaCIS.Core.Domain.Share; using IRaCIS.Core.Domain.Share;
using IRaCIS.Core.Infra.EFCore.Migrations;
using NPOI.SS.Formula.Functions; using NPOI.SS.Formula.Functions;
using System.Linq; using System.Linq;
@ -521,6 +522,7 @@ namespace IRaCIS.Core.Application.Service
.ForMember(d => d.TrialSiteCode, u => u.MapFrom(s => s.TrialSite.TrialSiteCode)) .ForMember(d => d.TrialSiteCode, u => u.MapFrom(s => s.TrialSite.TrialSiteCode))
.ForMember(d => d.QCProcessEnum, u => u.MapFrom(s => s.Trial.QCProcessEnum)) .ForMember(d => d.QCProcessEnum, u => u.MapFrom(s => s.Trial.QCProcessEnum))
.ForMember(d => d.SubjectStatus, u => u.MapFrom(s => s.Subject.Status)) .ForMember(d => d.SubjectStatus, u => u.MapFrom(s => s.Subject.Status))
.ForMember(d => d.IsSubjectQuit, u => u.MapFrom(t => t.Subject.IsSubjectQuit))
.ForMember(d => d.StudyCount, u => u.MapFrom(s => s.StudyList.Count())) .ForMember(d => d.StudyCount, u => u.MapFrom(s => s.StudyList.Count()))
.ForMember(d => d.SubmitUserName, u => u.MapFrom(s => s.SubmitUser.UserName)) .ForMember(d => d.SubmitUserName, u => u.MapFrom(s => s.SubmitUser.UserName))
@ -546,6 +548,7 @@ namespace IRaCIS.Core.Application.Service
.ForMember(d => d.TrialSiteCode, u => u.MapFrom(s => s.TrialSite.TrialSiteCode)) .ForMember(d => d.TrialSiteCode, u => u.MapFrom(s => s.TrialSite.TrialSiteCode))
.ForMember(d => d.QCProcessEnum, u => u.MapFrom(s => s.Trial.QCProcessEnum)) .ForMember(d => d.QCProcessEnum, u => u.MapFrom(s => s.Trial.QCProcessEnum))
.ForMember(d => d.SubjectId, u => u.MapFrom(t => t.Subject.Id)) .ForMember(d => d.SubjectId, u => u.MapFrom(t => t.Subject.Id))
.ForMember(d => d.IsSubjectQuit, u => u.MapFrom(t => t.Subject.IsSubjectQuit))
.ForMember(d => d.MedicalNo, u => u.MapFrom(s => s.Subject.MedicalNo)) .ForMember(d => d.MedicalNo, u => u.MapFrom(s => s.Subject.MedicalNo))
.ForMember(d => d.Sex, u => u.MapFrom(s => s.Subject.Sex)) .ForMember(d => d.Sex, u => u.MapFrom(s => s.Subject.Sex))
.ForMember(d => d.Age, u => u.MapFrom(t => t.Subject.Age)) .ForMember(d => d.Age, u => u.MapFrom(t => t.Subject.Age))
@ -571,6 +574,7 @@ namespace IRaCIS.Core.Application.Service
CreateMap<SubjectVisit, QCCheckViewModel>() CreateMap<SubjectVisit, QCCheckViewModel>()
.ForMember(d => d.TalkContent, u => u.MapFrom(s => s.CheckChallengeDialogList.OrderByDescending(y => y.CreateTime).Select(x => x.TalkContent).FirstOrDefault())) .ForMember(d => d.TalkContent, u => u.MapFrom(s => s.CheckChallengeDialogList.OrderByDescending(y => y.CreateTime).Select(x => x.TalkContent).FirstOrDefault()))
.ForMember(d => d.SubjectCode, u => u.MapFrom(s => s.Subject.Code)) .ForMember(d => d.SubjectCode, u => u.MapFrom(s => s.Subject.Code))
.ForMember(d => d.IsSubjectQuit, u => u.MapFrom(s => s.Subject.IsSubjectQuit))
.ForMember(d => d.TrialSiteCode, u => u.MapFrom(s => s.TrialSite.TrialSiteCode)); .ForMember(d => d.TrialSiteCode, u => u.MapFrom(s => s.TrialSite.TrialSiteCode));
CreateMap<SubjectVisit, QCCheckWithModalityView>().IncludeBase<SubjectVisit, QCCheckViewModel>() CreateMap<SubjectVisit, QCCheckWithModalityView>().IncludeBase<SubjectVisit, QCCheckViewModel>()
@ -682,8 +686,9 @@ namespace IRaCIS.Core.Application.Service
.ForMember(d => d.CurrentActionUserId, u => u.MapFrom(s => s.SubjectVisit.CurrentActionUserId)) .ForMember(d => d.CurrentActionUserId, u => u.MapFrom(s => s.SubjectVisit.CurrentActionUserId))
.ForMember(d => d.CurrentActionUserName, u => u.MapFrom(s => s.SubjectVisit.CurrentActionUser.UserName)) .ForMember(d => d.CurrentActionUserName, u => u.MapFrom(s => s.SubjectVisit.CurrentActionUser.UserName))
.ForMember(d => d.SubmitState, u => u.MapFrom(s => s.SubjectVisit.SubmitState)) .ForMember(d => d.SubmitState, u => u.MapFrom(s => s.SubjectVisit.SubmitState))
.ForMember(d => d.IsSubjectQuit, u => u.MapFrom(s => s.SubjectVisit.Subject.IsSubjectQuit))
.ForMember(d => d.IsSubjectQuit, u => u.MapFrom(s => s.SubjectVisit.Subject.IsSubjectQuit))
.ForMember(d => d.TrialSiteId, u => u.MapFrom(s => s.SubjectVisit.TrialSiteId)) .ForMember(d => d.TrialSiteId, u => u.MapFrom(s => s.SubjectVisit.TrialSiteId))
.ForMember(d => d.AuditState, u => u.MapFrom(s => s.SubjectVisit.AuditState)) .ForMember(d => d.AuditState, u => u.MapFrom(s => s.SubjectVisit.AuditState))
.ForMember(d => d.IsUrgent, u => u.MapFrom(s => s.SubjectVisit.IsUrgent)) .ForMember(d => d.IsUrgent, u => u.MapFrom(s => s.SubjectVisit.IsUrgent))
@ -748,6 +753,7 @@ namespace IRaCIS.Core.Application.Service
CreateMap<SubjectVisitImageBackRecord, ImageBackViewModel>() CreateMap<SubjectVisitImageBackRecord, ImageBackViewModel>()
.ForMember(d => d.SubjectCode, u => u.MapFrom(s => s.SubjectVisit.Subject.Code)) .ForMember(d => d.SubjectCode, u => u.MapFrom(s => s.SubjectVisit.Subject.Code))
.ForMember(d => d.IsSubjectQuit, u => u.MapFrom(s => s.SubjectVisit.Subject.IsSubjectQuit))
.ForMember(d => d.VisitNum, u => u.MapFrom(t => t.SubjectVisit.VisitNum)) .ForMember(d => d.VisitNum, u => u.MapFrom(t => t.SubjectVisit.VisitNum))
.ForMember(d => d.TrialSiteCode, u => u.MapFrom(s => s.SubjectVisit.TrialSite.TrialSiteCode)) .ForMember(d => d.TrialSiteCode, u => u.MapFrom(s => s.SubjectVisit.TrialSite.TrialSiteCode))
.ForMember(d => d.VisitName, u => u.MapFrom(s => s.SubjectVisit.VisitName)) .ForMember(d => d.VisitName, u => u.MapFrom(s => s.SubjectVisit.VisitName))

View File

@ -30,6 +30,8 @@ namespace IRaCIS.Core.Application.ViewModel
public string TrialSiteCode { get; set; } public string TrialSiteCode { get; set; }
public SubjectStatus SubjectStatus { get; set; } public SubjectStatus SubjectStatus { get; set; }
public bool IsSubjectQuit { get; set; }
public List<EvaluationInfo> FinalEvaluationList { get; set; } = new List<EvaluationInfo>(); public List<EvaluationInfo> FinalEvaluationList { get; set; } = new List<EvaluationInfo>();
@ -66,6 +68,8 @@ namespace IRaCIS.Core.Application.ViewModel
public bool? IsImageFiltering { get; set; } public bool? IsImageFiltering { get; set; }
public bool? IsJoinEvaluation { get; set; } public bool? IsJoinEvaluation { get; set; }
public bool? IsSubjectQuit { get; set; }
} }
///<summary> SubjectCriteriaEvaluationAddOrEdit 列表查询参数模型</summary> ///<summary> SubjectCriteriaEvaluationAddOrEdit 列表查询参数模型</summary>

View File

@ -78,6 +78,7 @@ namespace IRaCIS.Core.Application.Service
.WhereIf(!string.IsNullOrWhiteSpace(inQuery.SubjectCode), t => t.Code.Contains(inQuery.SubjectCode)) .WhereIf(!string.IsNullOrWhiteSpace(inQuery.SubjectCode), t => t.Code.Contains(inQuery.SubjectCode))
.WhereIf(!string.IsNullOrWhiteSpace(inQuery.TrialSiteCode), t => t.TrialSite.TrialSiteCode.Contains(inQuery.TrialSiteCode)) .WhereIf(!string.IsNullOrWhiteSpace(inQuery.TrialSiteCode), t => t.TrialSite.TrialSiteCode.Contains(inQuery.TrialSiteCode))
.WhereIf(inQuery.SubjectStatus != null, t => t.Status == inQuery.SubjectStatus) .WhereIf(inQuery.SubjectStatus != null, t => t.Status == inQuery.SubjectStatus)
.WhereIf(inQuery.IsSubjectQuit != null, t => t.IsSubjectQuit == inQuery.IsSubjectQuit)
join subjectCriteriaEvaluation in _subjectCriteriaEvaluationRepository join subjectCriteriaEvaluation in _subjectCriteriaEvaluationRepository
.Where(t => t.TrialReadingCriterionId == inQuery.TrialReadingCriterionId) .Where(t => t.TrialReadingCriterionId == inQuery.TrialReadingCriterionId)
@ -90,6 +91,7 @@ namespace IRaCIS.Core.Application.Service
SubjectCode = subject.Code, SubjectCode = subject.Code,
SubjectId = subject.Id, SubjectId = subject.Id,
SubjectStatus = subject.Status, SubjectStatus = subject.Status,
IsSubjectQuit = subject.IsSubjectQuit,
TrialSiteCode = subject.TrialSite.TrialSiteCode, TrialSiteCode = subject.TrialSite.TrialSiteCode,
Id = subjectCriteriaEvaluation.Id, Id = subjectCriteriaEvaluation.Id,

View File

@ -259,6 +259,7 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
public string? TrialSiteCode { get; set; } public string? TrialSiteCode { get; set; }
public bool IsSubjectQuit { get; set; }
public Guid? TrialSiteId { get; set; } public Guid? TrialSiteId { get; set; }

View File

@ -172,5 +172,7 @@ namespace IRaCIS.Core.Domain.Models
} }
} }
public bool IsSubjectQuit { get; set; }
} }
} }

View File

@ -99,6 +99,8 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
public class GetIRMedicalFeedbackListOutDto public class GetIRMedicalFeedbackListOutDto
{ {
public bool IsSubjectQuit { get; set; }
public Guid Id { get; set; } public Guid Id { get; set; }
public bool IsUrgent { get; set; } public bool IsUrgent { get; set; }

View File

@ -802,6 +802,7 @@ namespace IRaCIS.Core.Application.Service
.Select(x => new GetIRMedicalFeedbackListOutDto .Select(x => new GetIRMedicalFeedbackListOutDto
{ {
TaskState = x.VisitTask.TaskState, TaskState = x.VisitTask.TaskState,
IsSubjectQuit=x.VisitTask.Subject.IsSubjectQuit,
Id = x.Id, Id = x.Id,
VisitTaskId = x.VisitTaskId, VisitTaskId = x.VisitTaskId,
IsUrgent = x.VisitTask.IsUrgent, IsUrgent = x.VisitTask.IsUrgent,

View File

@ -526,6 +526,7 @@ namespace IRaCIS.Core.Application.Service
#region 方式二 #region 方式二
var subjectVisitQuery = _subjectVisitRepository.Where(t => t.TrialId == inQuery.TrialId)/*.Where(t => t.IsLostVisit == false)*/ var subjectVisitQuery = _subjectVisitRepository.Where(t => t.TrialId == inQuery.TrialId)/*.Where(t => t.IsLostVisit == false)*/
.Where(t => t.Subject.IsSubjectQuit == false || (t.Subject.IsSubjectQuit == true && t.SubmitState == SubmitStateEnum.Submitted))
.Where(sv => sv.Subject.FinalSubjectVisitId == null ? true : sv.VisitNum <= sv.Subject.LatestSubjectVisit.VisitNum).Select(sv => new ReadModuleView() .Where(sv => sv.Subject.FinalSubjectVisitId == null ? true : sv.VisitNum <= sv.Subject.LatestSubjectVisit.VisitNum).Select(sv => new ReadModuleView()
{ {
Id = sv.Id, Id = sv.Id,
@ -533,6 +534,7 @@ namespace IRaCIS.Core.Application.Service
PDState = sv.PDState, PDState = sv.PDState,
IsBaseLine = sv.IsBaseLine, IsBaseLine = sv.IsBaseLine,
SubjectCode = sv.Subject.Code, SubjectCode = sv.Subject.Code,
IsSubjectQuit = sv.Subject.IsSubjectQuit,
IsEnrollmentConfirm = sv.IsEnrollmentConfirm, IsEnrollmentConfirm = sv.IsEnrollmentConfirm,
IsFinalVisit = sv.IsFinalVisit, IsFinalVisit = sv.IsFinalVisit,
SubjectId = sv.SubjectId, SubjectId = sv.SubjectId,
@ -600,6 +602,7 @@ namespace IRaCIS.Core.Application.Service
}); });
var readMouduleQuery = _readModuleRepository.Where(t => t.TrialId == inQuery.TrialId && t.TrialReadingCriterionId == inQuery.TrialReadingCriterionId) var readMouduleQuery = _readModuleRepository.Where(t => t.TrialId == inQuery.TrialId && t.TrialReadingCriterionId == inQuery.TrialReadingCriterionId)
.Where(t => t.Subject.IsSubjectQuit == false || (t.Subject.IsSubjectQuit == true && t.SubjectVisit.SubmitState == SubmitStateEnum.Submitted))
.Select(rm => new ReadModuleView() .Select(rm => new ReadModuleView()
{ {
Id = rm.Id, Id = rm.Id,
@ -607,6 +610,7 @@ namespace IRaCIS.Core.Application.Service
PDState = PDStateEnum.None, PDState = PDStateEnum.None,
IsBaseLine = false, IsBaseLine = false,
SubjectCode = rm.SubjectVisit.Subject.Code, SubjectCode = rm.SubjectVisit.Subject.Code,
IsSubjectQuit = rm.SubjectVisit.Subject.IsSubjectQuit,
IsEnrollmentConfirm = false, IsEnrollmentConfirm = false,
IsFinalVisit = false, IsFinalVisit = false,
SubjectId = rm.SubjectId, SubjectId = rm.SubjectId,
@ -699,13 +703,14 @@ namespace IRaCIS.Core.Application.Service
var viewList = await query.Where(x => subjectIds.Contains(x.SubjectId)).SortToListAsync(inQuery); var viewList = await query.Where(x => subjectIds.Contains(x.SubjectId)).SortToListAsync(inQuery);
var list = viewList.GroupBy(x => new { x.SubjectId, x.TrialSiteId, x.TrialSiteCode, x.SubjectCode }) var list = viewList.GroupBy(x => new { x.SubjectId, x.TrialSiteId, x.TrialSiteCode, x.SubjectCode, x.IsSubjectQuit })
.Select(x => new GetReadModuleDtoOut() .Select(x => new GetReadModuleDtoOut()
{ {
TrialSiteCode = x.Key.TrialSiteCode, TrialSiteCode = x.Key.TrialSiteCode,
TrialSiteId = x.Key.TrialSiteId, TrialSiteId = x.Key.TrialSiteId,
SubjectCode = x.Key.SubjectCode, SubjectCode = x.Key.SubjectCode,
SubjectId = x.Key.SubjectId, SubjectId = x.Key.SubjectId,
IsSubjectQuit = x.Key.IsSubjectQuit,
Data = x.OrderBy(x => x.ModuleType).ThenBy(x => x.VisitNum).ToList(), Data = x.OrderBy(x => x.ModuleType).ThenBy(x => x.VisitNum).ToList(),
}).ToList(); }).ToList();

View File

@ -156,6 +156,7 @@ namespace IRaCIS.Application.Contracts
public bool? IsMissingImages { get; set; } public bool? IsMissingImages { get; set; }
public Guid? TrialSiteId { get; set; } public Guid? TrialSiteId { get; set; }
public SubjectStatus? Status { get; set; } public SubjectStatus? Status { get; set; }
public bool? IsSubjectQuit { get; set; }
} }

View File

@ -110,6 +110,7 @@ namespace IRaCIS.Core.Application.Service
.WhereIf(!string.IsNullOrWhiteSpace(inQuery.Name), t => t.ShortName.Contains(inQuery.Name)) .WhereIf(!string.IsNullOrWhiteSpace(inQuery.Name), t => t.ShortName.Contains(inQuery.Name))
.WhereIf(!string.IsNullOrWhiteSpace(inQuery.Sex), t => t.Sex.Contains(inQuery.Sex)) .WhereIf(!string.IsNullOrWhiteSpace(inQuery.Sex), t => t.Sex.Contains(inQuery.Sex))
.WhereIf(inQuery.Status != null, t => t.Status == inQuery.Status) .WhereIf(inQuery.Status != null, t => t.Status == inQuery.Status)
.WhereIf(inQuery.IsSubjectQuit != null, t => t.IsSubjectQuit == inQuery.IsSubjectQuit)
.WhereIf(inQuery.TrialSiteId != null, t => t.TrialSiteId == inQuery.TrialSiteId) .WhereIf(inQuery.TrialSiteId != null, t => t.TrialSiteId == inQuery.TrialSiteId)
// CRC 只负责他管理site的受试者 // CRC 只负责他管理site的受试者