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));
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));
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 IsSubjectQuit { get; set; }
#region 标准配置
public Guid TrialReadingCriterionId { get; set; }
@ -237,6 +239,7 @@ namespace IRaCIS.Core.Application.ViewModel
//重阅原始编号
//public string ReReadingOriginalTaskCode { get; set; }
public string ApplicantName { get; set; }
public Guid Id { get; set; }

View File

@ -763,7 +763,7 @@ public class VisitTaskService(IRepository<VisitTask> _visitTaskRepository,
.WhereIf(inQuery.BeginSignTime != null, t => t.SignTime > inQuery.BeginSignTime)
.WhereIf(inQuery.EndSignTime != null, t => t.SignTime < inQuery.EndSignTime)
.WhereIf(inQuery.RandomOrder != null, t => t.RandomOrder == inQuery.RandomOrder)
.WhereIf(inQuery.IsRandomOrderList == true, t => (t.ReadingTaskState == ReadingTaskState.WaitReading || t.ReadingTaskState==ReadingTaskState.Reading) && t.TaskAllocationState==TaskAllocationState.Allocated)
.WhereIf(inQuery.IsRandomOrderList == true, t => (t.ReadingTaskState == ReadingTaskState.WaitReading || t.ReadingTaskState == ReadingTaskState.Reading) && t.TaskAllocationState == TaskAllocationState.Allocated)
.ProjectTo<ReadingTaskView>(_mapper.ConfigurationProvider);
var defalutSortArray = new string[] { nameof(ReadingTaskView.IsUrgent) + " desc", nameof(ReadingTaskView.SubjectCode), nameof(ReadingTaskView.VisitTaskNum) };
@ -964,7 +964,7 @@ public class VisitTaskService(IRepository<VisitTask> _visitTaskRepository,
//随机阅片
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);
iRUnReadOut = new IRUnReadOutDto()
@ -1008,7 +1008,7 @@ public class VisitTaskService(IRepository<VisitTask> _visitTaskRepository,
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)
//前序 不存在 未生成任务的访视
@ -3008,7 +3008,7 @@ public class VisitTaskService(IRepository<VisitTask> _visitTaskRepository,
}
else
{
if(!_visitTaskRepository.Any(t => t.TrialId == inCommand.TrialId && t.TrialReadingCriterionId == inCommand.TrialReadingCriterionId && t.DoctorUserId == inCommand.DoctorUserId
if (!_visitTaskRepository.Any(t => t.TrialId == inCommand.TrialId && t.TrialReadingCriterionId == inCommand.TrialReadingCriterionId && t.DoctorUserId == inCommand.DoctorUserId
&& t.TaskAllocationState == TaskAllocationState.Allocated && t.ReadingTaskState == ReadingTaskState.WaitReading && (t.TaskState == TaskState.Effect || t.TaskState == TaskState.Freeze)
&& t.RandomOrder == item.RandomOrder))
{

View File

@ -2,6 +2,7 @@
using IRaCIS.Application.Contracts;
using IRaCIS.Core.Application.ViewModel;
using IRaCIS.Core.Domain.Share;
using IRaCIS.Core.Infra.EFCore.Migrations;
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.DigitPlaces, t => t.MapFrom(u => u.TrialReadingCriterion.DigitPlaces))
.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>()
@ -163,6 +166,7 @@ namespace IRaCIS.Core.Application.Service
.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.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.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.MedicalNo, t => t.MapFrom(u => u.VisitTask.Subject.MedicalNo))
.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[]? VisitPlanArray { get; set; }
public bool? IsSubjectQuit { get; set; }
}
public class GetNextQCInfoInDto
@ -96,6 +96,8 @@ namespace IRaCIS.Core.Application.Contracts
public DateTime? BeginAuditTime { get; set; }
public DateTime? EndAuditTime { get; set; }
public bool? IsSubjectQuit { get; set; }
}
public class GetNextIQCQualityInDto
@ -1752,6 +1754,7 @@ namespace IRaCIS.Core.Application.Contracts
public class ImageBackViewModel
{
public bool IsSubjectQuit { get; set; }
public Guid Id { get; set; }
public DateTime CreateTime { get; set; }
@ -1867,6 +1870,8 @@ namespace IRaCIS.Core.Application.Contracts
public class QCCRCChallengeViewModel
{
public bool IsSubjectQuit { get; set; }
public Guid? PreliminaryAuditUserId { get; set; }
public Guid? CurrentActionUserId { get; set; }
@ -2068,6 +2073,7 @@ namespace IRaCIS.Core.Application.Contracts
public class QCCheckViewModel
{
public bool IsSubjectQuit { get; set; }
public string? TalkContent { get; set; } = String.Empty;
public string BlindName { get; set; } = String.Empty;
public bool IsUrgent { get; set; }
@ -2161,6 +2167,7 @@ namespace IRaCIS.Core.Application.Contracts
public class QCVisitBasicListViewModel
{
public bool IsSubjectQuit { get; set; }
public ChallengeStateEnum ChallengeState { get; set; }
public bool? IsConfirmedClinicalData { 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.SubjectId != null, t => t.Subject.Id == inQuery.SubjectId)
.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(!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.TrialSiteId != null, t => t.TrialSiteId == inQuery.TrialSiteId)
.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(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))

View File

@ -6,6 +6,7 @@ using IRaCIS.Core.Application.Contracts.DTO;
using IRaCIS.Core.Application.MassTransit.Command;
using IRaCIS.Core.Application.ViewModel;
using IRaCIS.Core.Domain.Share;
using IRaCIS.Core.Infra.EFCore.Migrations;
using NPOI.SS.Formula.Functions;
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.QCProcessEnum, u => u.MapFrom(s => s.Trial.QCProcessEnum))
.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.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.QCProcessEnum, u => u.MapFrom(s => s.Trial.QCProcessEnum))
.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.Sex, u => u.MapFrom(s => s.Subject.Sex))
.ForMember(d => d.Age, u => u.MapFrom(t => t.Subject.Age))
@ -571,6 +574,7 @@ namespace IRaCIS.Core.Application.Service
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.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));
CreateMap<SubjectVisit, QCCheckWithModalityView>().IncludeBase<SubjectVisit, QCCheckViewModel>()
@ -681,9 +685,10 @@ namespace IRaCIS.Core.Application.Service
.ForMember(d => d.PreliminaryAuditUserId, u => u.MapFrom(s => s.SubjectVisit.PreliminaryAuditUserId))
.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.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.AuditState, u => u.MapFrom(s => s.SubjectVisit.AuditState))
.ForMember(d => d.IsUrgent, u => u.MapFrom(s => s.SubjectVisit.IsUrgent))
@ -748,6 +753,7 @@ namespace IRaCIS.Core.Application.Service
CreateMap<SubjectVisitImageBackRecord, ImageBackViewModel>()
.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.TrialSiteCode, u => u.MapFrom(s => s.SubjectVisit.TrialSite.TrialSiteCode))
.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 SubjectStatus SubjectStatus { get; set; }
public bool IsSubjectQuit { get; set; }
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? IsJoinEvaluation { get; set; }
public bool? IsSubjectQuit { get; set; }
}
///<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.TrialSiteCode), t => t.TrialSite.TrialSiteCode.Contains(inQuery.TrialSiteCode))
.WhereIf(inQuery.SubjectStatus != null, t => t.Status == inQuery.SubjectStatus)
.WhereIf(inQuery.IsSubjectQuit != null, t => t.IsSubjectQuit == inQuery.IsSubjectQuit)
join subjectCriteriaEvaluation in _subjectCriteriaEvaluationRepository
.Where(t => t.TrialReadingCriterionId == inQuery.TrialReadingCriterionId)
@ -90,6 +91,7 @@ namespace IRaCIS.Core.Application.Service
SubjectCode = subject.Code,
SubjectId = subject.Id,
SubjectStatus = subject.Status,
IsSubjectQuit = subject.IsSubjectQuit,
TrialSiteCode = subject.TrialSite.TrialSiteCode,
Id = subjectCriteriaEvaluation.Id,

View File

@ -259,6 +259,7 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
public string? TrialSiteCode { get; set; }
public bool IsSubjectQuit { 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 bool IsSubjectQuit { get; set; }
public Guid Id { get; set; }
public bool IsUrgent { get; set; }

View File

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

View File

@ -53,8 +53,8 @@ namespace IRaCIS.Core.Application.Service
decimal thisVisitNum = 0;
var readModule = await _readModuleRepository.Where(x => x.Id == inDto.Id).Include(x=>x.SubjectVisit).FirstOrDefaultAsync();
if(readModule!=null)
var readModule = await _readModuleRepository.Where(x => x.Id == inDto.Id).Include(x => x.SubjectVisit).FirstOrDefaultAsync();
if (readModule != null)
{
thisVisitNum = readModule.SubjectVisit.VisitNum;
}
@ -66,7 +66,7 @@ namespace IRaCIS.Core.Application.Service
var readModulequery = _readModuleRepository.AsQueryable().Where(x => x.TrialReadingCriterionId == inDto.TrialReadingCriterionId);
var resultlist = await visitQuery.WhereIf(finalVisitNum != null && finalVisitNum != 0, x => x.VisitNum <= finalVisitNum)
.Where(x => x.VisitNum > mixReadVisitNum|| x.VisitNum==thisVisitNum)
.Where(x => x.VisitNum > mixReadVisitNum || x.VisitNum == thisVisitNum)
//.Where(x => !x.IsBaseLine) // 排除基线
.WhereIf(inDto.ReadingSetType == ReadingSetType.TumorReading, x => readModulequery.Where(y => y.SubjectVisitId == x.Id && y.TrialReadingCriterionId == inDto.TrialReadingCriterionId && y.ReadingSetType == ReadingSetType.ImageReading).Count() > 0)
.WhereIf(inDto.ReadingSetType == ReadingSetType.ImageReading, x => readModulequery.Where(y => y.Id != inDto.Id && y.SubjectVisitId == x.Id && y.TrialReadingCriterionId == inDto.TrialReadingCriterionId && y.ReadingSetType == ReadingSetType.ImageReading).Count() == 0)
@ -526,6 +526,7 @@ namespace IRaCIS.Core.Application.Service
#region 方式二
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()
{
Id = sv.Id,
@ -533,6 +534,7 @@ namespace IRaCIS.Core.Application.Service
PDState = sv.PDState,
IsBaseLine = sv.IsBaseLine,
SubjectCode = sv.Subject.Code,
IsSubjectQuit = sv.Subject.IsSubjectQuit,
IsEnrollmentConfirm = sv.IsEnrollmentConfirm,
IsFinalVisit = sv.IsFinalVisit,
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)
.Where(t => t.Subject.IsSubjectQuit == false || (t.Subject.IsSubjectQuit == true && t.SubjectVisit.SubmitState == SubmitStateEnum.Submitted))
.Select(rm => new ReadModuleView()
{
Id = rm.Id,
@ -607,6 +610,7 @@ namespace IRaCIS.Core.Application.Service
PDState = PDStateEnum.None,
IsBaseLine = false,
SubjectCode = rm.SubjectVisit.Subject.Code,
IsSubjectQuit = rm.SubjectVisit.Subject.IsSubjectQuit,
IsEnrollmentConfirm = false,
IsFinalVisit = false,
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 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()
{
TrialSiteCode = x.Key.TrialSiteCode,
TrialSiteId = x.Key.TrialSiteId,
SubjectCode = x.Key.SubjectCode,
SubjectId = x.Key.SubjectId,
IsSubjectQuit = x.Key.IsSubjectQuit,
Data = x.OrderBy(x => x.ModuleType).ThenBy(x => x.VisitNum).ToList(),
}).ToList();
@ -929,7 +934,7 @@ namespace IRaCIS.Core.Application.Service
/// <param name="dto"></param>
/// <returns></returns>
[HttpPost]
[TrialGlobalLimit( "AfterStopCannNotOpt" )]
[TrialGlobalLimit("AfterStopCannNotOpt")]
public async Task<IResponseOutput> AddReadModule(ReadModuleAddDto dto)
{
@ -1095,7 +1100,7 @@ namespace IRaCIS.Core.Application.Service
/// <param name="readModuleId"></param>
/// <returns></returns>
[HttpDelete("{readModuleId:guid}")]
[TrialGlobalLimit( "AfterStopCannNotOpt" )]
[TrialGlobalLimit("AfterStopCannNotOpt")]
public async Task<IResponseOutput> DeleteReadModule(Guid readModuleId)
{

View File

@ -156,6 +156,7 @@ namespace IRaCIS.Application.Contracts
public bool? IsMissingImages { get; set; }
public Guid? TrialSiteId { 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.Sex), t => t.Sex.Contains(inQuery.Sex))
.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)
// CRC 只负责他管理site的受试者