访视查询条件修改提交

Test.EIImageViewer
hang 2022-04-21 10:18:26 +08:00
parent bbba502fdd
commit 5a29212580
2 changed files with 98 additions and 17 deletions

View File

@ -19,7 +19,9 @@ namespace IRaCIS.Core.Application.Contracts
public bool? IsUrgent { get; set; } public bool? IsUrgent { get; set; }
public string SubjectInfo { get; set; } = string.Empty; public string SubjectInfo { get; set; } = string.Empty;
public string VisitPlanInfo { get; set; } = string.Empty; //public string VisitPlanInfo { get; set; } = string.Empty;
public string[] VisitPlanArray { get; set; }
} }
@ -36,7 +38,9 @@ namespace IRaCIS.Core.Application.Contracts
public Guid? SubjectId { get; set; } public Guid? SubjectId { get; set; }
public string SubjectInfo { get; set; } = String.Empty; public string SubjectInfo { get; set; } = String.Empty;
public string VisitPlanInfo { get; set; } = String.Empty;
public string[] VisitPlanArray { get; set; }
//public string VisitPlanInfo { get; set; } = String.Empty;
public Guid? HandleUserId { get; set; } public Guid? HandleUserId { get; set; }
} }
@ -147,7 +151,9 @@ namespace IRaCIS.Core.Application.Contracts
[NotDefault] [NotDefault]
public Guid TrialId { get; set; } public Guid TrialId { get; set; }
public string VisitPlanInfo { get; set; } = String.Empty; public string[] VisitPlanArray { get; set; }
//public string VisitPlanInfo { get; set; } = String.Empty;
public string SubjectCode { get; set; } = String.Empty; public string SubjectCode { get; set; } = String.Empty;
public QCChanllengeReuploadEnum? ReuploadEnum { get; set; } public QCChanllengeReuploadEnum? ReuploadEnum { get; set; }
public bool? IsUrgent { get; set; } public bool? IsUrgent { get; set; }
@ -244,7 +250,9 @@ namespace IRaCIS.Core.Application.Contracts
public class CheckQuery : PageInput public class CheckQuery : PageInput
{ {
public string SubjectInfo { get; set; } = String.Empty; public string SubjectInfo { get; set; } = String.Empty;
public string VisitPlanInfo { get; set; } = String.Empty;
//public string VisitPlanInfo { get; set; } = String.Empty;
public string[] VisitPlanArray { get; set; }
//核查状态 //核查状态
public CheckStateEnum? CheckState { get; set; } public CheckStateEnum? CheckState { get; set; }
@ -263,7 +271,10 @@ namespace IRaCIS.Core.Application.Contracts
public Guid? SiteId { get; set; } public Guid? SiteId { get; set; }
public string SubjectInfo { get; set; } = String.Empty; public string SubjectInfo { get; set; } = String.Empty;
public string VisitPlanInfo { get; set; } = String.Empty;
public string[] VisitPlanArray { get; set; }
//public string VisitPlanInfo { get; set; } = String.Empty;
public ForwardStateEnum? ForwardState { get; set; } public ForwardStateEnum? ForwardState { get; set; }
} }

View File

@ -4,6 +4,7 @@ using IRaCIS.Core.Infrastructure.ExpressionExtend;
using IRaCIS.Core.Domain.Share; using IRaCIS.Core.Domain.Share;
using IRaCIS.Core.Application.Contracts.DTO; using IRaCIS.Core.Application.Contracts.DTO;
using IRaCIS.Core.Infra.EFCore; using IRaCIS.Core.Infra.EFCore;
using System.Linq.Expressions;
namespace IRaCIS.Core.Application.Image.QA namespace IRaCIS.Core.Application.Image.QA
{ {
@ -18,6 +19,60 @@ namespace IRaCIS.Core.Application.Image.QA
_subjectVisitRepository = subjectVisitRepository; _subjectVisitRepository = subjectVisitRepository;
} }
private Expression<Func<SubjectVisit, bool>> GetSubjectVisitFilter(string[]? VisitPlanArray)
{
Expression<Func<SubjectVisit, bool>> svExpression = x => true;
bool isNeedVisitSearch = VisitPlanArray != null && VisitPlanArray?.Length > 0;
if (isNeedVisitSearch)
{
var inPlanArray = VisitPlanArray.Where(t => !t.Contains('.')).Select(t => decimal.Parse(t)).ToArray();
var isSelectOutPlan = VisitPlanArray.Any(t => t.Contains('.'));
if (isSelectOutPlan)
{
svExpression = svExpression.And(t => t.InPlan == false);
}
if (inPlanArray.Length > 0)
{
svExpression.Or(t => inPlanArray.Contains(t.VisitNum));
}
}
return svExpression;
}
private Expression<Func<QCChallenge, bool>> GetQCChallengeFilter(string[]? VisitPlanArray)
{
Expression<Func<QCChallenge, bool>> svExpression = x => true;
bool isNeedVisitSearch = VisitPlanArray != null && VisitPlanArray?.Length > 0;
if (isNeedVisitSearch)
{
var inPlanArray = VisitPlanArray.Where(t => !t.Contains('.')).Select(t => decimal.Parse(t)).ToArray();
var isSelectOutPlan = VisitPlanArray.Any(t => t.Contains('.'));
if (isSelectOutPlan)
{
svExpression = svExpression.And(t => t.SubjectVisit.InPlan == false);
}
if (inPlanArray.Length > 0)
{
svExpression.Or(t => inPlanArray.Contains(t.SubjectVisit.VisitNum));
}
}
return svExpression;
}
#region CRC上传、质疑页面 #region CRC上传、质疑页面
/// <summary> /// <summary>
/// CRC 访视上传列表 /// CRC 访视上传列表
@ -27,12 +82,15 @@ namespace IRaCIS.Core.Application.Image.QA
[HttpPost] [HttpPost]
public async Task<IResponseOutput<PageOutput<QCCRCVisitViewModel>, TrialSubjectAndSVConfig>> GetCRCVisitList(CRCVisitSearchDTO visitSearchDTO) public async Task<IResponseOutput<PageOutput<QCCRCVisitViewModel>, TrialSubjectAndSVConfig>> GetCRCVisitList(CRCVisitSearchDTO visitSearchDTO)
{ {
var svExpression= GetSubjectVisitFilter(visitSearchDTO.VisitPlanArray);
var query = _repository.Where<SubjectVisit>(x => x.TrialId == visitSearchDTO.TrialId) var query = _repository.Where<SubjectVisit>(x => x.TrialId == visitSearchDTO.TrialId)
.WhereIf(visitSearchDTO.SiteId != null, t => t.SiteId == visitSearchDTO.SiteId) .WhereIf(visitSearchDTO.SiteId != null, t => t.SiteId == visitSearchDTO.SiteId)
.WhereIf(visitSearchDTO.SubjectId != null, t => t.Subject.Id == visitSearchDTO.SubjectId) .WhereIf(visitSearchDTO.SubjectId != null, t => t.Subject.Id == visitSearchDTO.SubjectId)
.WhereIf(!string.IsNullOrEmpty(visitSearchDTO.SubjectInfo), t => t.Subject.Code.Contains(visitSearchDTO.SubjectInfo)) .WhereIf(!string.IsNullOrEmpty(visitSearchDTO.SubjectInfo), t => t.Subject.Code.Contains(visitSearchDTO.SubjectInfo))
.WhereIf(!string.IsNullOrEmpty(visitSearchDTO.VisitPlanInfo), visitSearchDTO.VisitPlanInfo.Contains('.') ? t => t.InPlan == false : t => t.VisitNum == decimal.Parse(visitSearchDTO.VisitPlanInfo))
.WhereIf(visitSearchDTO.VisitPlanArray != null && visitSearchDTO.VisitPlanArray?.Length > 0, svExpression)
//.WhereIf(!string.IsNullOrEmpty(visitSearchDTO.VisitPlanInfo), visitSearchDTO.VisitPlanInfo.Contains('.') ? t => t.InPlan == false : t => t.VisitNum == decimal.Parse(visitSearchDTO.VisitPlanInfo))
.WhereIf(visitSearchDTO.AuditStateArray != null && visitSearchDTO.AuditStateArray?.Length > 0, t => visitSearchDTO.AuditStateArray!.Contains(t.AuditState)) .WhereIf(visitSearchDTO.AuditStateArray != null && visitSearchDTO.AuditStateArray?.Length > 0, t => visitSearchDTO.AuditStateArray!.Contains(t.AuditState))
.WhereIf(visitSearchDTO.SubmitState != null, t => t.SubmitState == visitSearchDTO.SubmitState) .WhereIf(visitSearchDTO.SubmitState != null, t => t.SubmitState == visitSearchDTO.SubmitState)
.WhereIf(visitSearchDTO.ChallengeState != null, t => t.ChallengeState == visitSearchDTO.ChallengeState) .WhereIf(visitSearchDTO.ChallengeState != null, t => t.ChallengeState == visitSearchDTO.ChallengeState)
@ -94,6 +152,7 @@ namespace IRaCIS.Core.Application.Image.QA
// }; // };
#endregion #endregion
var svExpression = GetQCChallengeFilter(challengeQuery.VisitPlanArray);
var query2 = _repository.Where<QCChallenge>(x => x.TrialId == challengeQuery.TrialId) var query2 = _repository.Where<QCChallenge>(x => x.TrialId == challengeQuery.TrialId)
.WhereIf(challengeQuery.ReuploadEnum != null, t => t.ReuploadEnum == challengeQuery.ReuploadEnum) .WhereIf(challengeQuery.ReuploadEnum != null, t => t.ReuploadEnum == challengeQuery.ReuploadEnum)
@ -102,7 +161,8 @@ namespace IRaCIS.Core.Application.Image.QA
.WhereIf(challengeQuery.SubjectId != null, t => t.SubjectVisit.SubjectId == challengeQuery.SubjectId) .WhereIf(challengeQuery.SubjectId != null, t => t.SubjectVisit.SubjectId == challengeQuery.SubjectId)
.WhereIf(challengeQuery.CreateUserId != null, t => t.CreateUserId == challengeQuery.CreateUserId) .WhereIf(challengeQuery.CreateUserId != null, t => t.CreateUserId == challengeQuery.CreateUserId)
.WhereIf(challengeQuery.SubjectCode != null, t => t.SubjectVisit.Subject.Code.Contains(challengeQuery.SubjectCode!)) .WhereIf(challengeQuery.SubjectCode != null, t => t.SubjectVisit.Subject.Code.Contains(challengeQuery.SubjectCode!))
.WhereIf(!string.IsNullOrEmpty(challengeQuery.VisitPlanInfo), challengeQuery.VisitPlanInfo.Contains('.') ? t => t.SubjectVisit.VisitNum.ToString().Contains(".") : t => t.SubjectVisit.VisitNum == decimal.Parse(challengeQuery.VisitPlanInfo)) .WhereIf(challengeQuery.VisitPlanArray != null && challengeQuery.VisitPlanArray?.Length > 0, svExpression)
//.WhereIf(!string.IsNullOrEmpty(challengeQuery.VisitPlanInfo), challengeQuery.VisitPlanInfo.Contains('.') ? t => t.SubjectVisit.VisitNum.ToString().Contains(".") : t => t.SubjectVisit.VisitNum == decimal.Parse(challengeQuery.VisitPlanInfo))
.WhereIf(challengeQuery.IsOverTime != null, t => DateTime.Now > t.DeadlineTime) .WhereIf(challengeQuery.IsOverTime != null, t => DateTime.Now > t.DeadlineTime)
.WhereIf(challengeQuery.IsUrgent != null, t => t.SubjectVisit.IsUrgent == challengeQuery.IsUrgent) .WhereIf(challengeQuery.IsUrgent != null, t => t.SubjectVisit.IsUrgent == challengeQuery.IsUrgent)
.WhereIf(_userInfo.UserTypeEnumInt == (int)UserTypeEnum.ClinicalResearchCoordinator, t => t.SubjectVisit.TrialSite.CRCUserList.Any(t => t.UserId == _userInfo.Id)) .WhereIf(_userInfo.UserTypeEnumInt == (int)UserTypeEnum.ClinicalResearchCoordinator, t => t.SubjectVisit.TrialSite.CRCUserList.Any(t => t.UserId == _userInfo.Id))
@ -181,6 +241,8 @@ namespace IRaCIS.Core.Application.Image.QA
// }; // };
#endregion #endregion
var svExpression = GetQCChallengeFilter(challengeQuery.VisitPlanArray);
var query = _repository.Where<QCChallenge>(x => x.TrialId == challengeQuery.TrialId) var query = _repository.Where<QCChallenge>(x => x.TrialId == challengeQuery.TrialId)
.WhereIf(challengeQuery.ReuploadEnum != null, t => t.ReuploadEnum == challengeQuery.ReuploadEnum) .WhereIf(challengeQuery.ReuploadEnum != null, t => t.ReuploadEnum == challengeQuery.ReuploadEnum)
.WhereIf(challengeQuery.IsClosed != null, t => t.IsClosed == challengeQuery.IsClosed) .WhereIf(challengeQuery.IsClosed != null, t => t.IsClosed == challengeQuery.IsClosed)
@ -188,7 +250,8 @@ namespace IRaCIS.Core.Application.Image.QA
.WhereIf(challengeQuery.SubjectId != null, t => t.SubjectVisit.SubjectId == challengeQuery.SubjectId) .WhereIf(challengeQuery.SubjectId != null, t => t.SubjectVisit.SubjectId == challengeQuery.SubjectId)
.WhereIf(challengeQuery.CreateUserId != null, t => t.CreateUserId == challengeQuery.CreateUserId) .WhereIf(challengeQuery.CreateUserId != null, t => t.CreateUserId == challengeQuery.CreateUserId)
.WhereIf(!string.IsNullOrEmpty(challengeQuery.SubjectCode), t => t.SubjectVisit.Subject.Code.Contains(challengeQuery.SubjectCode)) .WhereIf(!string.IsNullOrEmpty(challengeQuery.SubjectCode), t => t.SubjectVisit.Subject.Code.Contains(challengeQuery.SubjectCode))
.WhereIf(!string.IsNullOrEmpty(challengeQuery.VisitPlanInfo), challengeQuery.VisitPlanInfo.Contains('.') ? t => t.SubjectVisit.InPlan == false : t => t.SubjectVisit.VisitNum == decimal.Parse(challengeQuery.VisitPlanInfo)) .WhereIf(challengeQuery.VisitPlanArray != null && challengeQuery.VisitPlanArray?.Length > 0, svExpression)
//.WhereIf(!string.IsNullOrEmpty(challengeQuery.VisitPlanInfo), challengeQuery.VisitPlanInfo.Contains('.') ? t => t.SubjectVisit.InPlan == false : t => t.SubjectVisit.VisitNum == decimal.Parse(challengeQuery.VisitPlanInfo))
.WhereIf(challengeQuery.IsUrgent != null, t => t.SubjectVisit.IsUrgent == challengeQuery.IsUrgent) .WhereIf(challengeQuery.IsUrgent != null, t => t.SubjectVisit.IsUrgent == challengeQuery.IsUrgent)
.WhereIf(challengeQuery.IsOverTime != null, t => DateTime.Now > t.DeadlineTime) .WhereIf(challengeQuery.IsOverTime != null, t => DateTime.Now > t.DeadlineTime)
.ProjectTo<QCCRCChallengeViewModel>(_mapper.ConfigurationProvider); .ProjectTo<QCCRCChallengeViewModel>(_mapper.ConfigurationProvider);
@ -366,11 +429,13 @@ namespace IRaCIS.Core.Application.Image.QA
#endregion #endregion
var svExpression = GetSubjectVisitFilter(visitSearchDTO.VisitPlanArray);
var query = _subjectVisitRepository.Where(x => x.TrialId == visitSearchDTO.TrialId) var query = _subjectVisitRepository.Where(x => x.TrialId == visitSearchDTO.TrialId)
.WhereIf(visitSearchDTO.SiteId != null, t => t.SiteId == visitSearchDTO.SiteId) .WhereIf(visitSearchDTO.SiteId != null, t => t.SiteId == visitSearchDTO.SiteId)
.WhereIf(visitSearchDTO.SubjectId != null, t => t.Subject.Id == visitSearchDTO.SubjectId) .WhereIf(visitSearchDTO.SubjectId != null, t => t.Subject.Id == visitSearchDTO.SubjectId)
.WhereIf(!string.IsNullOrEmpty(visitSearchDTO.SubjectInfo), t => /*t.Subject.FirstName.Contains(subjectInfo) || t.Subject.LastName.Contains(subjectInfo) ||*/ t.Subject.Code.Contains(visitSearchDTO.SubjectInfo)) .WhereIf(!string.IsNullOrEmpty(visitSearchDTO.SubjectInfo), t => /*t.Subject.FirstName.Contains(subjectInfo) || t.Subject.LastName.Contains(subjectInfo) ||*/ t.Subject.Code.Contains(visitSearchDTO.SubjectInfo))
.WhereIf(!string.IsNullOrEmpty(visitSearchDTO.VisitPlanInfo), visitSearchDTO.VisitPlanInfo.Contains('.') ? t => t.VisitNum.ToString().Contains(".") : t => t.VisitNum == decimal.Parse(visitSearchDTO.VisitPlanInfo)) .WhereIf(visitSearchDTO.VisitPlanArray != null && visitSearchDTO.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(visitSearchDTO.AuditState != null, t => t.AuditState == visitSearchDTO.AuditState) //.WhereIf(visitSearchDTO.AuditState != null, t => t.AuditState == visitSearchDTO.AuditState)
.WhereIf(visitSearchDTO.AuditStateArray != null && visitSearchDTO.AuditStateArray?.Length > 0, t => visitSearchDTO.AuditStateArray!.Contains(t.AuditState)) .WhereIf(visitSearchDTO.AuditStateArray != null && visitSearchDTO.AuditStateArray?.Length > 0, t => visitSearchDTO.AuditStateArray!.Contains(t.AuditState))
@ -450,13 +515,15 @@ namespace IRaCIS.Core.Application.Image.QA
// }; // };
#endregion #endregion
var svExpression = GetSubjectVisitFilter(checkQuery.VisitPlanArray);
var query = _subjectVisitRepository.Where(x => x.TrialId == checkQuery.TrialId) var query = _subjectVisitRepository.Where(x => x.TrialId == checkQuery.TrialId)
.Where(x => x.AuditState == AuditStateEnum.QCPassed) //一致性核查中的,或者还没一致性核查的 .Where(x => x.AuditState == AuditStateEnum.QCPassed) //一致性核查中的,或者还没一致性核查的
.WhereIf(checkQuery.CheckState != null, t => t.CheckState == checkQuery.CheckState) .WhereIf(checkQuery.CheckState != null, t => t.CheckState == checkQuery.CheckState)
.WhereIf(checkQuery.SiteId != null, t => t.SiteId == checkQuery.SiteId) .WhereIf(checkQuery.SiteId != null, t => t.SiteId == checkQuery.SiteId)
.WhereIf(!string.IsNullOrEmpty(checkQuery.SubjectInfo), t => t.Subject.Code.Contains(checkQuery.SubjectInfo)) .WhereIf(!string.IsNullOrEmpty(checkQuery.SubjectInfo), t => t.Subject.Code.Contains(checkQuery.SubjectInfo))
.WhereIf(!string.IsNullOrEmpty(checkQuery.VisitPlanInfo), checkQuery.VisitPlanInfo.Contains('.') ? t => t.InPlan == false : t => t.VisitNum == decimal.Parse(checkQuery.VisitPlanInfo)) .WhereIf(checkQuery.VisitPlanArray != null && checkQuery.VisitPlanArray?.Length > 0, svExpression)
//.WhereIf(!string.IsNullOrEmpty(checkQuery.VisitPlanInfo), checkQuery.VisitPlanInfo.Contains('.') ? t => t.InPlan == false : t => t.VisitNum == decimal.Parse(checkQuery.VisitPlanInfo))
.WhereIf(_userInfo.UserTypeEnumInt == (int)UserTypeEnum.ClinicalResearchCoordinator, t => t.TrialSite.CRCUserList.Any(t => t.UserId == _userInfo.Id))//CRC 过滤负责的site .WhereIf(_userInfo.UserTypeEnumInt == (int)UserTypeEnum.ClinicalResearchCoordinator, t => t.TrialSite.CRCUserList.Any(t => t.UserId == _userInfo.Id))//CRC 过滤负责的site
.ProjectTo<QCCheckViewModel>(_mapper.ConfigurationProvider); .ProjectTo<QCCheckViewModel>(_mapper.ConfigurationProvider);
@ -494,12 +561,15 @@ namespace IRaCIS.Core.Application.Image.QA
{ {
//var trialConfig = _trialReposioty.Select(t => new { TrialId = t.Id, t.QCProcessEnum, t.IsImageConsistencyVerification }).FirstOrDefault(t => t.TrialId == forwardQuery.TrialId); //var trialConfig = _trialReposioty.Select(t => new { TrialId = t.Id, t.QCProcessEnum, t.IsImageConsistencyVerification }).FirstOrDefault(t => t.TrialId == forwardQuery.TrialId);
var svExpression = GetSubjectVisitFilter(forwardQuery.VisitPlanArray);
var query = _subjectVisitRepository.Where(x => x.TrialId == forwardQuery.TrialId) var query = _subjectVisitRepository.Where(x => x.TrialId == forwardQuery.TrialId)
.Where(t => t.CheckState == CheckStateEnum.CVPassed) .Where(t => t.CheckState == CheckStateEnum.CVPassed)
.WhereIf(forwardQuery.ForwardState != null, t => t.ForwardState == forwardQuery.ForwardState) .WhereIf(forwardQuery.ForwardState != null, t => t.ForwardState == forwardQuery.ForwardState)
.WhereIf(forwardQuery.SiteId != null, t => t.SiteId == forwardQuery.SiteId) .WhereIf(forwardQuery.SiteId != null, t => t.SiteId == forwardQuery.SiteId)
.WhereIf(!string.IsNullOrEmpty(forwardQuery.SubjectInfo), t => t.Subject.Code.Contains(forwardQuery.SubjectInfo)) .WhereIf(!string.IsNullOrEmpty(forwardQuery.SubjectInfo), t => t.Subject.Code.Contains(forwardQuery.SubjectInfo))
.WhereIf(!string.IsNullOrEmpty(forwardQuery.VisitPlanInfo), forwardQuery.VisitPlanInfo.Contains('.') ? t => t.InPlan == false : t => t.VisitNum == decimal.Parse(forwardQuery.VisitPlanInfo)) .WhereIf(forwardQuery.VisitPlanArray != null && forwardQuery.VisitPlanArray?.Length > 0, svExpression)
//.WhereIf(!string.IsNullOrEmpty(forwardQuery.VisitPlanInfo), forwardQuery.VisitPlanInfo.Contains('.') ? t => t.InPlan == false : t => t.VisitNum == decimal.Parse(forwardQuery.VisitPlanInfo))
//.WhereIf(_userInfo.UserTypeEnumInt == (int)UserType.ClinicalResearchCoordinator, t => t.TrialSite.CRCUserList.Any(t => t.UserId == _userInfo.Id))//CRC 过滤负责的site //.WhereIf(_userInfo.UserTypeEnumInt == (int)UserType.ClinicalResearchCoordinator, t => t.TrialSite.CRCUserList.Any(t => t.UserId == _userInfo.Id))//CRC 过滤负责的site
.ProjectTo<ForWardViewModel>(_mapper.ConfigurationProvider); .ProjectTo<ForWardViewModel>(_mapper.ConfigurationProvider);