重阅申请表 增加TrialId 字段冗余 方便查询

Uat_Study
hang 2023-06-13 11:11:47 +08:00
parent 44ad83790d
commit fa58ac7419
8 changed files with 281 additions and 89 deletions

View File

@ -226,7 +226,7 @@ namespace IRaCIS.Api.Controllers
if (!await _userRepository.AnyAsync(t => t.Id == Guid.Parse(userId) && t.EmailToken == token && t.IsFirstAdd)) if (!await _userRepository.AnyAsync(t => t.Id == Guid.Parse(userId) && t.EmailToken == token && t.IsFirstAdd))
{ {
decodeUrl = errorUrl+ $"?ErrorMessage={System.Web.HttpUtility.UrlEncode(lang=="zh"? "": "ErrorThe initialization link has expired. Return")} "; decodeUrl = errorUrl+ $"?lang={lang}&ErrorMessage={System.Web.HttpUtility.UrlEncode(lang=="zh"? "": "ErrorThe initialization link has expired. Return")} ";
} }
return Redirect(decodeUrl); return Redirect(decodeUrl);

View File

@ -8,7 +8,7 @@
<div style='padding-left: 40px;background: #f6f6f6'> <div style='padding-left: 40px;background: #f6f6f6'>
<div style='padding-top: 20px;'> <div style='padding-top: 20px;'>
<div style='line-height: 40px;font-size: 18px'> <div style='line-height: 40px;font-size: 18px'>
Dear {0}, 亲爱的用户 {0},
</div> </div>
<div style='line-height: 40px;padding-left: 40px;margin-bottom: 10px;'> <div style='line-height: 40px;padding-left: 40px;margin-bottom: 10px;'>
感谢您使用展影云平台。 感谢您使用展影云平台。

View File

@ -8,7 +8,7 @@
<div style='padding-left: 40px;background: #f6f6f6'> <div style='padding-left: 40px;background: #f6f6f6'>
<div style='padding-top: 20px;'> <div style='padding-top: 20px;'>
<div style='line-height: 40px;font-size: 18px'> <div style='line-height: 40px;font-size: 18px'>
Dear {0}, Dear Sir or Madam {0},
</div> </div>
<div style='line-height: 40px;padding-left: 40px;margin-bottom: 10px;'> <div style='line-height: 40px;padding-left: 40px;margin-bottom: 10px;'>
Thank you for using our IRC imaging system. Thank you for using our IRC imaging system.

View File

@ -9922,6 +9922,7 @@
</summary> </summary>
<param name="inQuery"></param> <param name="inQuery"></param>
<param name="_subjectVisitRepository"></param> <param name="_subjectVisitRepository"></param>
<param name="_trialRepository"></param>
<returns></returns> <returns></returns>
</member> </member>
<member name="M:IRaCIS.Core.Application.PersonalWorkstation.GetReReadingApplyToBeDoneList(IRaCIS.Core.Application.Contracts.ReReadingApplyToBeDoneQuery,IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.VisitTaskReReading},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.Trial})"> <member name="M:IRaCIS.Core.Application.PersonalWorkstation.GetReReadingApplyToBeDoneList(IRaCIS.Core.Application.Contracts.ReReadingApplyToBeDoneQuery,IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.VisitTaskReReading},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.Trial})">
@ -9929,6 +9930,8 @@
重阅申请待审核 重阅申请待审核
</summary> </summary>
<param name="inQuery"></param> <param name="inQuery"></param>
<param name="_visitTaskReReadingRepository"></param>
<param name="_trialRepository"></param>
<returns></returns> <returns></returns>
</member> </member>
<member name="M:IRaCIS.Core.Application.PersonalWorkstation.GetReviewerSelectToBeDoneList(IRaCIS.Core.Application.Contracts.ReviewerSelectToBeDoneQuery,IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.Enroll},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.Trial})"> <member name="M:IRaCIS.Core.Application.PersonalWorkstation.GetReviewerSelectToBeDoneList(IRaCIS.Core.Application.Contracts.ReviewerSelectToBeDoneQuery,IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.Enroll},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.Trial})">
@ -9936,6 +9939,8 @@
阅片人筛选 阅片人筛选
</summary> </summary>
<param name="inQuery"></param> <param name="inQuery"></param>
<param name="_enrollRepository"></param>
<param name="_trialRepository"></param>
<returns></returns> vvv <returns></returns> vvv
</member> </member>
<member name="M:IRaCIS.Core.Application.PersonalWorkstation.GetReReadingApprovalToBeDoneToBeDoneList(IRaCIS.Core.Application.Contracts.ReReadingApprovalToBeDoneQuery,IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.VisitTaskReReading},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.Trial})"> <member name="M:IRaCIS.Core.Application.PersonalWorkstation.GetReReadingApprovalToBeDoneToBeDoneList(IRaCIS.Core.Application.Contracts.ReReadingApprovalToBeDoneQuery,IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.VisitTaskReReading},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.Trial})">
@ -9943,6 +9948,8 @@
重阅审批 重阅审批
</summary> </summary>
<param name="inQuery"></param> <param name="inQuery"></param>
<param name="_visitTaskReReadingRepository"></param>
<param name="_trialRepository"></param>
<returns></returns> <returns></returns>
</member> </member>
<member name="M:IRaCIS.Core.Application.PersonalWorkstation.GetImageClinicalDataToBeDoneList(IRaCIS.Core.Application.Contracts.ImageClinicalDataToBeDoneQuery,IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.SubjectVisit},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.Trial})"> <member name="M:IRaCIS.Core.Application.PersonalWorkstation.GetImageClinicalDataToBeDoneList(IRaCIS.Core.Application.Contracts.ImageClinicalDataToBeDoneQuery,IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.SubjectVisit},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.Trial})">
@ -9959,6 +9966,7 @@
</summary> </summary>
<param name="inQuery"></param> <param name="inQuery"></param>
<param name="_subjectVisitRepository"></param> <param name="_subjectVisitRepository"></param>
<param name="_trialRepository"></param>
<returns></returns> <returns></returns>
</member> </member>
<member name="M:IRaCIS.Core.Application.PersonalWorkstation.GetImageCheckQuestionToBeDoneList(IRaCIS.Core.Application.Contracts.ImageCheckQuestionToBeDoneQuery,IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.SubjectVisit},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.Trial})"> <member name="M:IRaCIS.Core.Application.PersonalWorkstation.GetImageCheckQuestionToBeDoneList(IRaCIS.Core.Application.Contracts.ImageCheckQuestionToBeDoneQuery,IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.SubjectVisit},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.Trial})">
@ -10003,7 +10011,7 @@
</member> </member>
<member name="M:IRaCIS.Core.Application.PersonalWorkstation.GetIRImageReadingToBeDoneList(IRaCIS.Core.Application.Contracts.IRImageReadingToBeDoneQuery,IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.VisitTask},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.ReadingQuestionCriterionTrial},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.Trial})"> <member name="M:IRaCIS.Core.Application.PersonalWorkstation.GetIRImageReadingToBeDoneList(IRaCIS.Core.Application.Contracts.IRImageReadingToBeDoneQuery,IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.VisitTask},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.ReadingQuestionCriterionTrial},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.Trial})">
<summary> <summary>
IR 影像阅片 待阅量 复杂 --未完成 IR 影像阅片 待阅量
</summary> </summary>
<param name="inQuery"></param> <param name="inQuery"></param>
<param name="_visitTaskRepository"></param> <param name="_visitTaskRepository"></param>

View File

@ -1416,7 +1416,7 @@ namespace IRaCIS.Core.Application.Service.Allocation
//添加申请记录 //添加申请记录
var visitTaskReReading = await _visitTaskReReadingRepository.AddAsync(new VisitTaskReReading() var visitTaskReReading = await _visitTaskReReadingRepository.AddAsync(new VisitTaskReReading()
{ {
TrialId=applyReReadingCommand.TrialId,
RootReReadingTaskId = rootReReadingTaskId == Guid.Empty ? task.Id : rootReReadingTaskId, RootReReadingTaskId = rootReReadingTaskId == Guid.Empty ? task.Id : rootReReadingTaskId,
OriginalReReadingTaskId = task.Id, OriginalReReadingTaskId = task.Id,
RequestReReadingTime = DateTime.Now, RequestReReadingTime = DateTime.Now,

View File

@ -175,7 +175,7 @@ namespace IRaCIS.Core.Application.Contracts
public string CriterionName { get; set; } public string CriterionName { get; set; }
public int? UrgentCount { get; set; } public int? UrgentCount { get; set; }
public int? ToBeDealedCount { get; set; } public int? ToBeReplyedCount { get; set; }
} }
public class ImageCheckQuestionToBeDoneQuery : PageInput public class ImageCheckQuestionToBeDoneQuery : PageInput
@ -187,7 +187,7 @@ namespace IRaCIS.Core.Application.Contracts
{ {
public int? UrgentCount { get; set; } public int? UrgentCount { get; set; }
public int? ToBeDealedCount { get; set; } public int? ToBeReplyedCount { get; set; }
} }
public class ImageSubmittedToBeDoneQuery : PageInput public class ImageSubmittedToBeDoneQuery : PageInput
@ -228,7 +228,7 @@ namespace IRaCIS.Core.Application.Contracts
{ {
public int? UrgentCount { get; set; } public int? UrgentCount { get; set; }
public int? ToBeDealedCount { get; set; } public int? ToBeReUploadCount { get; set; }
} }
public class ImageClinicalDataToBeDoneQuery : PageInput public class ImageClinicalDataToBeDoneQuery : PageInput
@ -243,7 +243,37 @@ namespace IRaCIS.Core.Application.Contracts
public int? ToBeDealedCount { get; set; } public int? ToBeDealedCount { get; set; }
} }
public class TrialToBeDoneQuery : PageInput
{
public string ExperimentName { get; set; } = string.Empty;
public string Code { get; set; } = string.Empty;
public string ResearchProgramNo { get; set; } = string.Empty;
public Guid? SponsorId { get; set; }
}
public class TrialToBeDoneDto : TrialBaseInfoDto
{
public Guid Id => TrialId;
public DateTime? CreateTime { get; set; }
public string Sponsor { get; set; }
public string TrialStatusStr { get; set; }
public int? ExpetiedTaskCount { get; set; }
public int? ReReadingApprovalCount { get; set; }
}

View File

@ -1,4 +1,6 @@
using IRaCIS.Core.Application.Contracts; using IRaCIS.Application.Contracts;
using IRaCIS.Core.Application.Contracts;
using IRaCIS.Core.Domain.Models;
using IRaCIS.Core.Domain.Share; using IRaCIS.Core.Domain.Share;
using IRaCIS.Core.Infrastructure.Extention; using IRaCIS.Core.Infrastructure.Extention;
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
@ -164,19 +166,22 @@ namespace IRaCIS.Core.Application
#region PM APM 待办 #region PM APM 待办
/// <summary> /// <summary>
/// 一致性核查待处理 /// 一致性核查待处理
/// </summary> /// </summary>
/// <param name="inQuery"></param> /// <param name="inQuery"></param>
/// <param name="_subjectVisitRepository"></param> /// <param name="_subjectVisitRepository"></param>
/// <param name="_trialRepository"></param>
/// <returns></returns> /// <returns></returns>
[HttpPost] [HttpPost]
public async Task<PageOutput<CheckToBeDoneDto>> GetCheckToBeDoneList(CheckToBeDoneQuery inQuery, public async Task<IResponseOutput<PageOutput<CheckToBeDoneDto>>> GetCheckToBeDoneList(CheckToBeDoneQuery inQuery,
[FromServices] IRepository<SubjectVisit> _subjectVisitRepository, [FromServices] IRepository<SubjectVisit> _subjectVisitRepository,
[FromServices] IRepository<Trial> _trialRepository) [FromServices] IRepository<Trial> _trialRepository)
{ {
var query = _trialRepository var query = _trialRepository
.Where(t => t.TrialUserList.Any(t => t.UserId == _userInfo.Id))
.Select(t => new CheckToBeDoneDto() .Select(t => new CheckToBeDoneDto()
{ {
TrialId = t.Id, TrialId = t.Id,
@ -184,14 +189,25 @@ namespace IRaCIS.Core.Application
ExperimentName = t.ExperimentName, ExperimentName = t.ExperimentName,
TrialCode = t.TrialCode, TrialCode = t.TrialCode,
UrgentCount = t.SubjectVisitList.Where(u => (u.CheckState == CheckStateEnum.ToCheck || u.CheckState == CheckStateEnum.CVIng) && u.IsUrgent).Count(), UrgentCount = t.SubjectVisitList.Where(u => (u.CheckState == CheckStateEnum.ToCheck || u.CheckState == CheckStateEnum.CVIng) && u.IsUrgent).Count(),
ToBeCheckedCount = t.SubjectVisitList.Where(u => u.CheckState == CheckStateEnum.ToCheck).Count(), ToBeCheckedCount = t.SubjectVisitList.Where(u => u.CheckState == CheckStateEnum.ToCheck).Count(),
ToBeRepliedCount = t.SubjectVisitList.Where(u => u.CheckState == CheckStateEnum.ToCheck && ToBeRepliedCount = t.SubjectVisitList.Where(u => u.CheckState == CheckStateEnum.ToCheck &&
u.CheckChallengeDialogList.Any(t => t.UserTypeEnum == UserTypeEnum.ClinicalResearchCoordinator)).Count(), u.CheckChallengeDialogList.Any(t => t.UserTypeEnum == UserTypeEnum.ClinicalResearchCoordinator)).Count(),
}); });
var result = await query.ToPagedListAsync(inQuery.PageIndex, inQuery.PageSize, inQuery.SortField, inQuery.Asc); var result = await query.ToPagedListAsync(inQuery.PageIndex, inQuery.PageSize, inQuery.SortField, inQuery.Asc);
return result; var totalToBeCheckedCount = await _subjectVisitRepository.Where(t => t.Trial.TrialUserList.Any(t => t.UserId == _userInfo.Id))
.Where(u => u.CheckState == CheckStateEnum.ToCheck).CountAsync();
var totalToBeRepliedCount = await _subjectVisitRepository.Where(t => t.Trial.TrialUserList.Any(t => t.UserId == _userInfo.Id))
.Where(u => u.CheckState == CheckStateEnum.ToCheck &&
u.CheckChallengeDialogList.Any(t => t.UserTypeEnum == UserTypeEnum.ClinicalResearchCoordinator)).CountAsync();
return ResponseOutput.Ok(result, new { TotalToBeCheckedCount = totalToBeCheckedCount, TotalToBeRepliedCount = totalToBeRepliedCount });
} }
@ -199,14 +215,18 @@ namespace IRaCIS.Core.Application
/// 重阅申请待审核 /// 重阅申请待审核
/// </summary> /// </summary>
/// <param name="inQuery"></param> /// <param name="inQuery"></param>
/// <param name="_visitTaskReReadingRepository"></param>
/// <param name="_trialRepository"></param>
/// <returns></returns> /// <returns></returns>
[HttpPost] [HttpPost]
public async Task<PageOutput<ReReadingApplyToBeDoneDto>> GetReReadingApplyToBeDoneList(ReReadingApplyToBeDoneQuery inQuery, public async Task<IResponseOutput<PageOutput<ReReadingApplyToBeDoneDto>>> GetReReadingApplyToBeDoneList(ReReadingApplyToBeDoneQuery inQuery,
[FromServices] IRepository<VisitTaskReReading> _visitTaskReReadingRepository, [FromServices] IRepository<VisitTaskReReading> _visitTaskReReadingRepository,
[FromServices] IRepository<Trial> _trialRepository) [FromServices] IRepository<Trial> _trialRepository)
{ {
var query = _visitTaskReReadingRepository.Where(t => t.OriginalReReadingTask.ReReadingApplyState == ReReadingApplyState.DocotorHaveApplyed) var query = _visitTaskReReadingRepository
.Where(t => t.OriginalReReadingTask.Trial.TrialUserList.Any(t => t.UserId == _userInfo.Id))
.Where(t => t.OriginalReReadingTask.ReReadingApplyState == ReReadingApplyState.DocotorHaveApplyed)
.GroupBy(t => new { t.OriginalReReadingTask.Trial.ExperimentName, t.OriginalReReadingTask.Trial.ResearchProgramNo, t.OriginalReReadingTask.Trial.TrialCode, t.OriginalReReadingTask.TrialId }) .GroupBy(t => new { t.OriginalReReadingTask.Trial.ExperimentName, t.OriginalReReadingTask.Trial.ResearchProgramNo, t.OriginalReReadingTask.Trial.TrialCode, t.OriginalReReadingTask.TrialId })
.Select(g => new ReReadingApplyToBeDoneDto() .Select(g => new ReReadingApplyToBeDoneDto()
{ {
@ -222,11 +242,17 @@ namespace IRaCIS.Core.Application
var result = await query.ToPagedListAsync(inQuery.PageIndex, inQuery.PageSize, inQuery.SortField, inQuery.Asc); var result = await query.ToPagedListAsync(inQuery.PageIndex, inQuery.PageSize, inQuery.SortField, inQuery.Asc);
return result;
var toBeApprovalCount = _visitTaskReReadingRepository
.Where(t => t.OriginalReReadingTask.Trial.TrialUserList.Any(t => t.UserId == _userInfo.Id))
.Where(t => t.OriginalReReadingTask.ReReadingApplyState == ReReadingApplyState.DocotorHaveApplyed).Count();
return ResponseOutput.Ok(result, new { TotalToBeApprovalCount = toBeApprovalCount });
} }
#endregion #endregion
@ -236,13 +262,16 @@ namespace IRaCIS.Core.Application
/// 阅片人筛选 /// 阅片人筛选
/// </summary> /// </summary>
/// <param name="inQuery"></param> /// <param name="inQuery"></param>
/// <param name="_enrollRepository"></param>
/// <param name="_trialRepository"></param>
/// <returns></returns> vvv /// <returns></returns> vvv
[HttpPost] [HttpPost]
public async Task<PageOutput<ReviewerSelectToBeDoneDto>> GetReviewerSelectToBeDoneList(ReviewerSelectToBeDoneQuery inQuery public async Task<IResponseOutput<PageOutput<ReviewerSelectToBeDoneDto>>> GetReviewerSelectToBeDoneList(ReviewerSelectToBeDoneQuery inQuery
, [FromServices] IRepository<Enroll> _enrollRepository, , [FromServices] IRepository<Enroll> _enrollRepository,
[FromServices] IRepository<Trial> _trialRepository) [FromServices] IRepository<Trial> _trialRepository)
{ {
var query = _trialRepository var query = _trialRepository
.Where(t => t.TrialUserList.Any(t => t.UserId == _userInfo.Id))
.Select(t => new ReviewerSelectToBeDoneDto() .Select(t => new ReviewerSelectToBeDoneDto()
{ {
TrialId = t.Id, TrialId = t.Id,
@ -256,7 +285,10 @@ namespace IRaCIS.Core.Application
var result = await query.ToPagedListAsync(inQuery.PageIndex, inQuery.PageSize, inQuery.SortField, inQuery.Asc); var result = await query.ToPagedListAsync(inQuery.PageIndex, inQuery.PageSize, inQuery.SortField, inQuery.Asc);
return result; var toBeApprovalCount = await _enrollRepository.Where(t => t.Trial.TrialUserList.Any(t => t.UserId == _userInfo.Id))
.Where(u => u.EnrollStatus == EnrollStatus.HasCommittedToCRO).CountAsync();
return ResponseOutput.Ok(result, new { ToBeApprovalCount = toBeApprovalCount }); ;
} }
@ -264,14 +296,18 @@ namespace IRaCIS.Core.Application
/// 重阅审批 /// 重阅审批
/// </summary> /// </summary>
/// <param name="inQuery"></param> /// <param name="inQuery"></param>
/// <param name="_visitTaskReReadingRepository"></param>
/// <param name="_trialRepository"></param>
/// <returns></returns> /// <returns></returns>
[HttpPost] [HttpPost]
public async Task<PageOutput<ReReadingApprovalToBeDoneDto>> GetReReadingApprovalToBeDoneToBeDoneList(ReReadingApprovalToBeDoneQuery inQuery, public async Task<IResponseOutput<PageOutput<ReReadingApprovalToBeDoneDto>>> GetReReadingApprovalToBeDoneToBeDoneList(ReReadingApprovalToBeDoneQuery inQuery,
[FromServices] IRepository<VisitTaskReReading> _visitTaskReReadingRepository, [FromServices] IRepository<VisitTaskReReading> _visitTaskReReadingRepository,
[FromServices] IRepository<Trial> _trialRepository) [FromServices] IRepository<Trial> _trialRepository)
{ {
var query = _visitTaskReReadingRepository.Where(t => t.OriginalReReadingTask.ReReadingApplyState == ReReadingApplyState.TrialGroupHaveApplyed) var query = _visitTaskReReadingRepository
.Where(t => t.OriginalReReadingTask.Trial.TrialUserList.Any(t => t.UserId == _userInfo.Id))
.Where(t => t.OriginalReReadingTask.ReReadingApplyState == ReReadingApplyState.TrialGroupHaveApplyed)
.GroupBy(t => new { t.OriginalReReadingTask.Trial.ExperimentName, t.OriginalReReadingTask.Trial.ResearchProgramNo, t.OriginalReReadingTask.Trial.TrialCode, t.OriginalReReadingTask.TrialId }) .GroupBy(t => new { t.OriginalReReadingTask.Trial.ExperimentName, t.OriginalReReadingTask.Trial.ResearchProgramNo, t.OriginalReReadingTask.Trial.TrialCode, t.OriginalReReadingTask.TrialId })
.Select(g => new ReReadingApprovalToBeDoneDto() .Select(g => new ReReadingApprovalToBeDoneDto()
{ {
@ -287,7 +323,11 @@ namespace IRaCIS.Core.Application
var result = await query.ToPagedListAsync(inQuery.PageIndex, inQuery.PageSize, inQuery.SortField, inQuery.Asc); var result = await query.ToPagedListAsync(inQuery.PageIndex, inQuery.PageSize, inQuery.SortField, inQuery.Asc);
return result; var toBeApprovalCount = _visitTaskReReadingRepository
.Where(t => t.OriginalReReadingTask.Trial.TrialUserList.Any(t => t.UserId == _userInfo.Id))
.Where(t => t.OriginalReReadingTask.ReReadingApplyState == ReReadingApplyState.TrialGroupHaveApplyed).Count();
return ResponseOutput.Ok(result, new { TotalToBeApprovalCount = toBeApprovalCount });
} }
@ -304,12 +344,13 @@ namespace IRaCIS.Core.Application
/// <param name="_subjectVisitRepository"></param> /// <param name="_subjectVisitRepository"></param>
/// <returns></returns> /// <returns></returns>
[HttpPost] [HttpPost]
public async Task<PageOutput<ImageClinicalDataToBeDoneDto>> GetImageClinicalDataToBeDoneList(ImageClinicalDataToBeDoneQuery inQuery, public async Task<IResponseOutput<PageOutput<ImageClinicalDataToBeDoneDto>>> GetImageClinicalDataToBeDoneList(ImageClinicalDataToBeDoneQuery inQuery,
[FromServices] IRepository<SubjectVisit> _subjectVisitRepository, [FromServices] IRepository<SubjectVisit> _subjectVisitRepository,
[FromServices] IRepository<Trial> _trialRepository) [FromServices] IRepository<Trial> _trialRepository)
{ {
var query = _trialRepository var query = _trialRepository
.Where(t => t.TrialUserList.Any(t => t.UserId == _userInfo.Id))
.Where(t => t.clinicalDataTrialSets.Any(t => t.ClinicalDataLevel == ClinicalLevel.Subject && t.IsConfirm)) .Where(t => t.clinicalDataTrialSets.Any(t => t.ClinicalDataLevel == ClinicalLevel.Subject && t.IsConfirm))
.Select(t => new ImageClinicalDataToBeDoneDto() .Select(t => new ImageClinicalDataToBeDoneDto()
{ {
@ -324,7 +365,11 @@ namespace IRaCIS.Core.Application
var result = await query.ToPagedListAsync(inQuery.PageIndex, inQuery.PageSize, inQuery.SortField, inQuery.Asc); var result = await query.ToPagedListAsync(inQuery.PageIndex, inQuery.PageSize, inQuery.SortField, inQuery.Asc);
return result; var toBeDealedCount = _subjectVisitRepository
.Where(t => t.Trial.TrialUserList.Any(t => t.UserId == _userInfo.Id) && t.Trial.clinicalDataTrialSets.Any(t => t.ClinicalDataLevel == ClinicalLevel.Subject && t.IsConfirm))
.Where(u => u.IsBaseLine && u.SubmitState != SubmitStateEnum.Submitted).Count();
return ResponseOutput.Ok(result, new { TotalToBeDealedCount = toBeDealedCount });
} }
@ -337,14 +382,16 @@ namespace IRaCIS.Core.Application
/// </summary> /// </summary>
/// <param name="inQuery"></param> /// <param name="inQuery"></param>
/// <param name="_subjectVisitRepository"></param> /// <param name="_subjectVisitRepository"></param>
/// <param name="_trialRepository"></param>
/// <returns></returns> /// <returns></returns>
[HttpPost] [HttpPost]
public async Task<PageOutput<ImageQuestionToBeDoneDto>> GetCRCImageQuestionToBeDoneList(ImageQuestionToBeDoneQuery inQuery, public async Task<IResponseOutput<PageOutput<ImageQuestionToBeDoneDto>>> GetCRCImageQuestionToBeDoneList(ImageQuestionToBeDoneQuery inQuery,
[FromServices] IRepository<SubjectVisit> _subjectVisitRepository, [FromServices] IRepository<SubjectVisit> _subjectVisitRepository,
[FromServices] IRepository<Trial> _trialRepository) [FromServices] IRepository<Trial> _trialRepository)
{ {
var query = _trialRepository var query = _trialRepository
.Where(t => t.TrialUserList.Any(t => t.UserId == _userInfo.Id))
.Select(t => new ImageQuestionToBeDoneDto() .Select(t => new ImageQuestionToBeDoneDto()
{ {
TrialId = t.Id, TrialId = t.Id,
@ -353,6 +400,7 @@ namespace IRaCIS.Core.Application
TrialCode = t.TrialCode, TrialCode = t.TrialCode,
UrgentCount = t.SubjectVisitList.SelectMany(c => c.QCChallengeList) UrgentCount = t.SubjectVisitList.SelectMany(c => c.QCChallengeList)
.Where(u => u.IsClosed == false && u.LatestReplyUser.UserTypeEnum == UserTypeEnum.IQC && u.SubjectVisit.IsUrgent).Count(), .Where(u => u.IsClosed == false && u.LatestReplyUser.UserTypeEnum == UserTypeEnum.IQC && u.SubjectVisit.IsUrgent).Count(),
ToBeDealedCount = t.SubjectVisitList.SelectMany(c => c.QCChallengeList) ToBeDealedCount = t.SubjectVisitList.SelectMany(c => c.QCChallengeList)
.Where(u => u.IsClosed == false && u.LatestReplyUser.UserTypeEnum == UserTypeEnum.IQC).Count(), .Where(u => u.IsClosed == false && u.LatestReplyUser.UserTypeEnum == UserTypeEnum.IQC).Count(),
@ -361,7 +409,12 @@ namespace IRaCIS.Core.Application
var result = await query.ToPagedListAsync(inQuery.PageIndex, inQuery.PageSize, inQuery.SortField, inQuery.Asc); var result = await query.ToPagedListAsync(inQuery.PageIndex, inQuery.PageSize, inQuery.SortField, inQuery.Asc);
return result; var toBeDealedCount = _subjectVisitRepository
.Where(t => t.Trial.TrialUserList.Any(t => t.UserId == _userInfo.Id))
.SelectMany(c => c.QCChallengeList)
.Where(u => u.IsClosed == false && u.LatestReplyUser.UserTypeEnum == UserTypeEnum.IQC).Count();
return ResponseOutput.Ok(result, new { TotalToBeDealedCount = toBeDealedCount });
} }
@ -372,12 +425,13 @@ namespace IRaCIS.Core.Application
/// <param name="_subjectVisitRepository"></param> /// <param name="_subjectVisitRepository"></param>
/// <returns></returns> /// <returns></returns>
[HttpPost] [HttpPost]
public async Task<PageOutput<ImageCheckQuestionToBeDoneDto>> GetImageCheckQuestionToBeDoneList(ImageCheckQuestionToBeDoneQuery inQuery, public async Task<IResponseOutput<PageOutput<ImageCheckQuestionToBeDoneDto>>> GetImageCheckQuestionToBeDoneList(ImageCheckQuestionToBeDoneQuery inQuery,
[FromServices] IRepository<SubjectVisit> _subjectVisitRepository, [FromServices] IRepository<SubjectVisit> _subjectVisitRepository,
[FromServices] IRepository<Trial> _trialRepository) [FromServices] IRepository<Trial> _trialRepository)
{ {
var query = _trialRepository var query = _trialRepository
.Where(t => t.TrialUserList.Any(t => t.UserId == _userInfo.Id))
.Select(t => new ImageCheckQuestionToBeDoneDto() .Select(t => new ImageCheckQuestionToBeDoneDto()
{ {
TrialId = t.Id, TrialId = t.Id,
@ -385,13 +439,21 @@ namespace IRaCIS.Core.Application
ExperimentName = t.ExperimentName, ExperimentName = t.ExperimentName,
TrialCode = t.TrialCode, TrialCode = t.TrialCode,
UrgentCount = t.SubjectVisitList.Where(u => u.CheckState == CheckStateEnum.CVIng && u.CheckChallengeState == CheckChanllengeTypeEnum.PMWaitCRCReply && u.IsUrgent).Count(), UrgentCount = t.SubjectVisitList.Where(u => u.CheckState == CheckStateEnum.CVIng && u.CheckChallengeState == CheckChanllengeTypeEnum.PMWaitCRCReply && u.IsUrgent).Count(),
ToBeDealedCount = t.SubjectVisitList.Where(u => u.CheckState == CheckStateEnum.CVIng && u.CheckChallengeState == CheckChanllengeTypeEnum.PMWaitCRCReply).Count() ToBeReplyedCount = t.SubjectVisitList.Where(u => u.CheckState == CheckStateEnum.CVIng && u.CheckChallengeState == CheckChanllengeTypeEnum.PMWaitCRCReply).Count()
}); });
var result = await query.ToPagedListAsync(inQuery.PageIndex, inQuery.PageSize, inQuery.SortField, inQuery.Asc); var result = await query.ToPagedListAsync(inQuery.PageIndex, inQuery.PageSize, inQuery.SortField, inQuery.Asc);
return result; var toBeDealedCount = _subjectVisitRepository
.Where(t => t.Trial.TrialUserList.Any(t => t.UserId == _userInfo.Id))
.Where(u => u.CheckState == CheckStateEnum.CVIng && u.CheckChallengeState == CheckChanllengeTypeEnum.PMWaitCRCReply).Count();
return ResponseOutput.Ok(result, new { TotalToBeReplyedCount = toBeDealedCount });
} }
@ -403,12 +465,13 @@ namespace IRaCIS.Core.Application
/// <param name="_subjectVisitRepository"></param> /// <param name="_subjectVisitRepository"></param>
/// <returns></returns> /// <returns></returns>
[HttpPost] [HttpPost]
public async Task<PageOutput<ImageReUploadToBeDoneDto>> GetImageReUploadToBeDoneList(ImageReUploadToBeDoneQuery inQuery, public async Task<IResponseOutput<PageOutput<ImageReUploadToBeDoneDto>>> GetImageReUploadToBeDoneList(ImageReUploadToBeDoneQuery inQuery,
[FromServices] IRepository<SubjectVisit> _subjectVisitRepository, [FromServices] IRepository<SubjectVisit> _subjectVisitRepository,
[FromServices] IRepository<Trial> _trialRepository) [FromServices] IRepository<Trial> _trialRepository)
{ {
var query = _trialRepository var query = _trialRepository
.Where(t => t.TrialUserList.Any(t => t.UserId == _userInfo.Id))
.Select(t => new ImageReUploadToBeDoneDto() .Select(t => new ImageReUploadToBeDoneDto()
{ {
TrialId = t.Id, TrialId = t.Id,
@ -416,13 +479,17 @@ namespace IRaCIS.Core.Application
ExperimentName = t.ExperimentName, ExperimentName = t.ExperimentName,
TrialCode = t.TrialCode, TrialCode = t.TrialCode,
UrgentCount = t.SubjectVisitList.Where(u => u.SubmitState == SubmitStateEnum.ToSubmit && u.IsUrgent && u.IsPMBackOrReReading).Count(), UrgentCount = t.SubjectVisitList.Where(u => u.SubmitState == SubmitStateEnum.ToSubmit && u.IsUrgent && u.IsPMBackOrReReading).Count(),
ToBeDealedCount = t.SubjectVisitList.Where(u => u.SubmitState == SubmitStateEnum.ToSubmit && u.IsPMBackOrReReading).Count(), ToBeReUploadCount = t.SubjectVisitList.Where(u => u.SubmitState == SubmitStateEnum.ToSubmit && u.IsPMBackOrReReading).Count(),
}); });
var result = await query.ToPagedListAsync(inQuery.PageIndex, inQuery.PageSize, inQuery.SortField, inQuery.Asc); var result = await query.ToPagedListAsync(inQuery.PageIndex, inQuery.PageSize, inQuery.SortField, inQuery.Asc);
return result; var toBeDealedCount = _subjectVisitRepository
.Where(t => t.Trial.TrialUserList.Any(t => t.UserId == _userInfo.Id))
.Where(u => u.SubmitState == SubmitStateEnum.ToSubmit && u.IsPMBackOrReReading).Count();
return ResponseOutput.Ok(result, new { TotalToBeReUploadCount = toBeDealedCount });
} }
@ -436,12 +503,13 @@ namespace IRaCIS.Core.Application
/// <param name="_subjectVisitRepository"></param> /// <param name="_subjectVisitRepository"></param>
/// <returns></returns> /// <returns></returns>
[HttpPost] [HttpPost]
public async Task<PageOutput<ImageSubmittedToBeDoneDto>> GetImageSubmittedToBeDoneList(ImageSubmittedToBeDoneQuery inQuery, public async Task<IResponseOutput<PageOutput<ImageSubmittedToBeDoneDto>>> GetImageSubmittedToBeDoneList(ImageSubmittedToBeDoneQuery inQuery,
[FromServices] IRepository<SubjectVisit> _subjectVisitRepository, [FromServices] IRepository<SubjectVisit> _subjectVisitRepository,
[FromServices] IRepository<Trial> _trialRepository) [FromServices] IRepository<Trial> _trialRepository)
{ {
var query = _trialRepository var query = _trialRepository
.Where(t => t.TrialUserList.Any(t => t.UserId == _userInfo.Id))
.Select(t => new ImageSubmittedToBeDoneDto() .Select(t => new ImageSubmittedToBeDoneDto()
{ {
TrialId = t.Id, TrialId = t.Id,
@ -455,7 +523,11 @@ namespace IRaCIS.Core.Application
var result = await query.ToPagedListAsync(inQuery.PageIndex, inQuery.PageSize, inQuery.SortField, inQuery.Asc); var result = await query.ToPagedListAsync(inQuery.PageIndex, inQuery.PageSize, inQuery.SortField, inQuery.Asc);
return result; var toBeDealedCount = _subjectVisitRepository
.Where(t => t.Trial.TrialUserList.Any(t => t.UserId == _userInfo.Id))
.Where(u => u.SubmitState == SubmitStateEnum.ToSubmit).Count();
return ResponseOutput.Ok(result, new { TotalToBeReUploadCount = toBeDealedCount });
} }
@ -474,12 +546,14 @@ namespace IRaCIS.Core.Application
/// <param name="_subjectVisitRepository"></param> /// <param name="_subjectVisitRepository"></param>
/// <returns></returns> /// <returns></returns>
[HttpPost] [HttpPost]
public async Task<PageOutput<ImageQualityToBeDoneDto>> GetImageQualityToBeDoneList(ImageQualityToBeDoneQuery inQuery, public async Task<IResponseOutput<PageOutput<ImageQualityToBeDoneDto>>> GetImageQualityToBeDoneList(ImageQualityToBeDoneQuery inQuery,
[FromServices] IRepository<SubjectVisit> _subjectVisitRepository, [FromServices] IRepository<SubjectVisit> _subjectVisitRepository,
[FromServices] IRepository<Trial> _trialRepository) [FromServices] IRepository<Trial> _trialRepository)
{ {
var query = _trialRepository.Where(t => t.QCProcessEnum != TrialQCProcess.NotAudit) var query = _trialRepository
.Where(t => t.TrialUserList.Any(t => t.UserId == _userInfo.Id))
.Where(t => t.QCProcessEnum != TrialQCProcess.NotAudit)
.Select(t => new ImageQualityToBeDoneDto() .Select(t => new ImageQualityToBeDoneDto()
{ {
TrialId = t.Id, TrialId = t.Id,
@ -501,7 +575,12 @@ namespace IRaCIS.Core.Application
var result = await query.ToPagedListAsync(inQuery.PageIndex, inQuery.PageSize, inQuery.SortField, inQuery.Asc); var result = await query.ToPagedListAsync(inQuery.PageIndex, inQuery.PageSize, inQuery.SortField, inQuery.Asc);
return result;
var toBeDealedCount = _subjectVisitRepository
.Where(t => t.Trial.TrialUserList.Any(t => t.UserId == _userInfo.Id))
.Where(u => u.SubmitState == SubmitStateEnum.ToSubmit).Count();
return ResponseOutput.Ok(result, new { TotalToBeReUploadCount = toBeDealedCount });
} }
@ -513,12 +592,13 @@ namespace IRaCIS.Core.Application
/// <param name="_subjectVisitRepository"></param> /// <param name="_subjectVisitRepository"></param>
/// <returns></returns> /// <returns></returns>
[HttpPost] [HttpPost]
public async Task<PageOutput<ImageQuestionToBeDoneDto>> GetQCImageQuestionToBeDoneList(ImageQuestionToBeDoneQuery inQuery, public async Task<IResponseOutput<PageOutput<ImageQuestionToBeDoneDto>>> GetQCImageQuestionToBeDoneList(ImageQuestionToBeDoneQuery inQuery,
[FromServices] IRepository<SubjectVisit> _subjectVisitRepository, [FromServices] IRepository<SubjectVisit> _subjectVisitRepository,
[FromServices] IRepository<Trial> _trialRepository) [FromServices] IRepository<Trial> _trialRepository)
{ {
var query = _trialRepository var query = _trialRepository
.Where(t => t.TrialUserList.Any(t => t.UserId == _userInfo.Id))
.Select(t => new ImageQuestionToBeDoneDto() .Select(t => new ImageQuestionToBeDoneDto()
{ {
TrialId = t.Id, TrialId = t.Id,
@ -534,7 +614,12 @@ namespace IRaCIS.Core.Application
var result = await query.ToPagedListAsync(inQuery.PageIndex, inQuery.PageSize, inQuery.SortField, inQuery.Asc); var result = await query.ToPagedListAsync(inQuery.PageIndex, inQuery.PageSize, inQuery.SortField, inQuery.Asc);
return result; var toBeDealedCount = _subjectVisitRepository
.Where(t => t.Trial.TrialUserList.Any(t => t.UserId == _userInfo.Id))
.SelectMany(c => c.QCChallengeList)
.Where(u => u.IsClosed == false && u.LatestReplyUser.UserTypeEnum == UserTypeEnum.ClinicalResearchCoordinator).Count();
return ResponseOutput.Ok(result, new { TotalToBeReUploadCount = toBeDealedCount });
} }
@ -544,7 +629,7 @@ namespace IRaCIS.Core.Application
#region IR待办 #region IR待办
/// <summary> /// <summary>
/// IR 影像阅片 待阅量 复杂 --未完成 /// IR 影像阅片 待阅量
/// </summary> /// </summary>
/// <param name="inQuery"></param> /// <param name="inQuery"></param>
/// <param name="_visitTaskRepository"></param> /// <param name="_visitTaskRepository"></param>
@ -552,39 +637,12 @@ namespace IRaCIS.Core.Application
/// <param name="_trialRepository"></param> /// <param name="_trialRepository"></param>
/// <returns></returns> /// <returns></returns>
[HttpPost] [HttpPost]
public async Task<PageOutput<IRImageReadingToBeDoneDto>> GetIRImageReadingToBeDoneList(IRImageReadingToBeDoneQuery inQuery, public async Task<IResponseOutput<PageOutput<IRImageReadingToBeDoneDto>>> GetIRImageReadingToBeDoneList(IRImageReadingToBeDoneQuery inQuery,
[FromServices] IRepository<VisitTask> _visitTaskRepository, [FromServices] IRepository<VisitTask> _visitTaskRepository,
[FromServices] IRepository<ReadingQuestionCriterionTrial> _trialReadingCriterionRepository, [FromServices] IRepository<ReadingQuestionCriterionTrial> _trialReadingCriterionRepository,
[FromServices] IRepository<Trial> _trialRepository) [FromServices] IRepository<Trial> _trialRepository)
{ {
//var query = _trialRepository
// .Select(t => new IRImageReadingToBeDoneDto()
// {
// TrialId = t.Id,
// ResearchProgramNo = t.ResearchProgramNo,
// ExperimentName = t.ExperimentName,
// TrialCode = t.TrialCode,
// UrgentCount = t.SubjectVisitList.SelectMany(c => c.QCChallengeList)
// .Where(u => u.IsClosed == false && u.LatestReplyUser.UserTypeEnum == UserTypeEnum.ClinicalResearchCoordinator && u.SubjectVisit.IsUrgent).Count(),
// UnReadCount=t.VisitTaskList.Where(t => t.DoctorUserId == _userInfo.Id && t.ReadingTaskState != ReadingTaskState.HaveSigned && t.TaskState == TaskState.Effect)
// // 前序 不存在 未一致性核查未通过的
// .Where(t => !t.Subject.SubjectVisitList.Any(sv => sv.CheckState != CheckStateEnum.CVPassed && t.VisitTaskNum > sv.VisitNum))
// //前序 不存在 未生成任务的访视
// .Where(t=>t.TrialReadingCriterion.IsAutoCreate == false? !t.Subject.SubjectCriteriaEvaluationVisitFilterList.Where(d => d.TrialReadingCriterionId == t.TrialReadingCriterionId).Any(f => f.IsGeneratedTask == false && t.VisitTaskNum > f.SubjectVisit.VisitNum):true)
// .Where(y=>y.IsFrontTaskNeedSignButNotSign == false && (y.IsNeedClinicalDataSign == false || y.IsClinicalDataSign == true))
// .Count(),
// HaveSignedCount = t.VisitTaskList.Where(t => t.DoctorUserId == _userInfo.Id
// && (t.TaskState == TaskState.Effect || t.TaskState == TaskState.Freeze)
// && t.ReadingTaskState==ReadingTaskState.HaveSigned).Count()
// });
var newQuery = _trialReadingCriterionRepository.Where(t => t.IsConfirm == true && t.Trial.TrialUserList.Any(t => t.UserId == _userInfo.Id)) var newQuery = _trialReadingCriterionRepository.Where(t => t.IsConfirm == true && t.Trial.TrialUserList.Any(t => t.UserId == _userInfo.Id))
.Select(c => new IRImageReadingToBeDoneDto() .Select(c => new IRImageReadingToBeDoneDto()
@ -624,9 +682,35 @@ namespace IRaCIS.Core.Application
; ;
#region 废弃
//var query = _trialRepository
// .Select(t => new IRImageReadingToBeDoneDto()
// {
// TrialId = t.Id,
// ResearchProgramNo = t.ResearchProgramNo,
// ExperimentName = t.ExperimentName,
// TrialCode = t.TrialCode,
// UrgentCount = t.SubjectVisitList.SelectMany(c => c.QCChallengeList)
// .Where(u => u.IsClosed == false && u.LatestReplyUser.UserTypeEnum == UserTypeEnum.ClinicalResearchCoordinator && u.SubjectVisit.IsUrgent).Count(),
// UnReadCount=t.VisitTaskList.Where(t => t.DoctorUserId == _userInfo.Id && t.ReadingTaskState != ReadingTaskState.HaveSigned && t.TaskState == TaskState.Effect)
// // 前序 不存在 未一致性核查未通过的
// .Where(t => !t.Subject.SubjectVisitList.Any(sv => sv.CheckState != CheckStateEnum.CVPassed && t.VisitTaskNum > sv.VisitNum))
// //前序 不存在 未生成任务的访视
// .Where(t=>t.TrialReadingCriterion.IsAutoCreate == false? !t.Subject.SubjectCriteriaEvaluationVisitFilterList.Where(d => d.TrialReadingCriterionId == t.TrialReadingCriterionId).Any(f => f.IsGeneratedTask == false && t.VisitTaskNum > f.SubjectVisit.VisitNum):true)
// .Where(y=>y.IsFrontTaskNeedSignButNotSign == false && (y.IsNeedClinicalDataSign == false || y.IsClinicalDataSign == true))
// .Count(),
// HaveSignedCount = t.VisitTaskList.Where(t => t.DoctorUserId == _userInfo.Id
// && (t.TaskState == TaskState.Effect || t.TaskState == TaskState.Freeze)
// && t.ReadingTaskState==ReadingTaskState.HaveSigned).Count()
// });
// 不能对包含聚合或子查询的表达式执行聚合函数
//var query = _visitTaskRepository.Where(t => t.DoctorUserId == _userInfo.Id && (t.TaskState == TaskState.Effect || t.TaskState == TaskState.Freeze)) //var query = _visitTaskRepository.Where(t => t.DoctorUserId == _userInfo.Id && (t.TaskState == TaskState.Effect || t.TaskState == TaskState.Freeze))
// .GroupBy(t => new { t.TrialId, t.Trial.ResearchProgramNo, t.Trial.TrialCode, t.Trial.ExperimentName, t.TrialReadingCriterionId, t.TrialReadingCriterion.CriterionName, t.TrialReadingCriterion.IsAutoCreate }) // .GroupBy(t => new { t.TrialId, t.Trial.ResearchProgramNo, t.Trial.TrialCode, t.Trial.ExperimentName, t.TrialReadingCriterionId, t.TrialReadingCriterion.CriterionName, t.TrialReadingCriterion.IsAutoCreate })
@ -662,10 +746,25 @@ namespace IRaCIS.Core.Application
// && t.ReadingTaskState == ReadingTaskState.HaveSigned).Count(), // && t.ReadingTaskState == ReadingTaskState.HaveSigned).Count(),
// }); // });
#endregion
var result = await newQuery.ToPagedListAsync(inQuery.PageIndex, inQuery.PageSize, string.IsNullOrEmpty(inQuery.SortField) ? nameof(IRImageReadingToBeDoneDto.TrialId) : inQuery.SortField, inQuery.Asc); var result = await newQuery.ToPagedListAsync(inQuery.PageIndex, inQuery.PageSize, string.IsNullOrEmpty(inQuery.SortField) ? nameof(IRImageReadingToBeDoneDto.TrialId) : inQuery.SortField, inQuery.Asc);
return result; var toBeDealedCount = _trialRepository
.Where(t => t.TrialUserList.Any(t => t.UserId == _userInfo.Id))
.SelectMany(t => t.VisitTaskList)
.Where(t => t.DoctorUserId == _userInfo.Id && t.ReadingTaskState != ReadingTaskState.HaveSigned && t.TaskState == TaskState.Effect)
// 前序 不存在 未一致性核查未通过的
.Where(t => !t.Subject.SubjectVisitList.Any(sv => sv.CheckState != CheckStateEnum.CVPassed && t.VisitTaskNum > sv.VisitNum))
//前序 不存在 未生成任务的访视
.Where(t => t.TrialReadingCriterion.IsAutoCreate == false ? !t.Subject.SubjectCriteriaEvaluationVisitFilterList.Where(d => d.TrialReadingCriterionId == t.TrialReadingCriterionId).Any(f => f.IsGeneratedTask == false && t.VisitTaskNum > f.SubjectVisit.VisitNum) : true)
.Where(y => y.IsFrontTaskNeedSignButNotSign == false && (y.IsNeedClinicalDataSign == false || y.IsClinicalDataSign == true))
.Count();
return ResponseOutput.Ok(result, new { TotalUnReadCount = toBeDealedCount });
} }
@ -677,11 +776,12 @@ namespace IRaCIS.Core.Application
/// <returns></returns> /// <returns></returns>
[HttpPost] [HttpPost]
public async Task<PageOutput<MedicalCommentsToBeDoneDto>> GetIRMedicalCommentsToBeDoneList(MedicalCommentsToBeDoneQuery inQuery, public async Task<IResponseOutput<PageOutput<MedicalCommentsToBeDoneDto>>> GetIRMedicalCommentsToBeDoneList(MedicalCommentsToBeDoneQuery inQuery,
[FromServices] IRepository<TaskMedicalReview> _taskMedicalReviewRepository) [FromServices] IRepository<TaskMedicalReview> _taskMedicalReviewRepository)
{ {
var query = _taskMedicalReviewRepository var query = _taskMedicalReviewRepository
.Where(t => t.Trial.TrialUserList.Any(t => t.UserId == _userInfo.Id))
.Where(t => t.IsClosedDialog == false) .Where(t => t.IsClosedDialog == false)
.GroupBy(t => new .GroupBy(t => new
{ {
@ -703,14 +803,19 @@ namespace IRaCIS.Core.Application
UrgentCount = g.Where(u => u.VisitTask.IsUrgent UrgentCount = g.Where(u => u.VisitTask.IsUrgent
&& u.ReadingMedicalReviewDialogList.OrderByDescending(l => l.CreateTime).First().UserTypeEnumInt == (int)UserTypeEnum.MIM).Count(), && u.ReadingMedicalReviewDialogList.OrderByDescending(l => l.CreateTime).First().UserTypeEnumInt == (int)UserTypeEnum.MIM).Count(),
ToBeDealedCount = g.Where(u => ToBeReplyedCount = g.Where(u =>
u.ReadingMedicalReviewDialogList.OrderByDescending(l => l.CreateTime).First().UserTypeEnumInt == (int)UserTypeEnum.MIM).Count(), u.ReadingMedicalReviewDialogList.OrderByDescending(l => l.CreateTime).First().UserTypeEnumInt == (int)UserTypeEnum.MIM).Count(),
}); });
var result = await query.ToPagedListAsync(inQuery.PageIndex, inQuery.PageSize, inQuery.SortField, inQuery.Asc); var result = await query.ToPagedListAsync(inQuery.PageIndex, inQuery.PageSize, inQuery.SortField, inQuery.Asc);
return result; var toBeDealedCount = _taskMedicalReviewRepository
.Where(t => t.Trial.TrialUserList.Any(t => t.UserId == _userInfo.Id))
.Where(t => t.IsClosedDialog == false)
.Where(u => u.ReadingMedicalReviewDialogList.OrderByDescending(l => l.CreateTime).First().UserTypeEnumInt == (int)UserTypeEnum.MIM).Count();
return ResponseOutput.Ok(result, new { TotalToBeReUploadCount = toBeDealedCount });
} }
@ -728,11 +833,12 @@ namespace IRaCIS.Core.Application
/// <returns></returns> /// <returns></returns>
[HttpPost] [HttpPost]
public async Task<PageOutput<MedicalCommentsToBeDoneDto>> GetMIMMedicalCommentsToBeDoneList(MedicalCommentsToBeDoneQuery inQuery, public async Task<IResponseOutput<PageOutput<MedicalCommentsToBeDoneDto>>> GetMIMMedicalCommentsToBeDoneList(MedicalCommentsToBeDoneQuery inQuery,
[FromServices] IRepository<TaskMedicalReview> _taskMedicalReviewRepository) [FromServices] IRepository<TaskMedicalReview> _taskMedicalReviewRepository)
{ {
var query = _taskMedicalReviewRepository var query = _taskMedicalReviewRepository
.Where(t => t.Trial.TrialUserList.Any(t => t.UserId == _userInfo.Id))
.Where(t => t.IsClosedDialog == false) .Where(t => t.IsClosedDialog == false)
.GroupBy(t => new .GroupBy(t => new
{ {
@ -754,15 +860,63 @@ namespace IRaCIS.Core.Application
UrgentCount = g.Where(u => u.VisitTask.IsUrgent UrgentCount = g.Where(u => u.VisitTask.IsUrgent
&& u.ReadingMedicalReviewDialogList.OrderByDescending(l => l.CreateTime).First().UserTypeEnumInt == (int)UserTypeEnum.IndependentReviewer).Count(), && u.ReadingMedicalReviewDialogList.OrderByDescending(l => l.CreateTime).First().UserTypeEnumInt == (int)UserTypeEnum.IndependentReviewer).Count(),
ToBeDealedCount = g.Where(u => ToBeReplyedCount = g.Where(u =>
u.ReadingMedicalReviewDialogList.OrderByDescending(l => l.CreateTime).First().UserTypeEnumInt == (int)UserTypeEnum.IndependentReviewer).Count(), u.ReadingMedicalReviewDialogList.OrderByDescending(l => l.CreateTime).First().UserTypeEnumInt == (int)UserTypeEnum.IndependentReviewer).Count(),
}); });
var result = await query.ToPagedListAsync(inQuery.PageIndex, inQuery.PageSize, inQuery.SortField, inQuery.Asc); var result = await query.ToPagedListAsync(inQuery.PageIndex, inQuery.PageSize, inQuery.SortField, inQuery.Asc);
return result; var toBeDealedCount = _taskMedicalReviewRepository
.Where(t => t.Trial.TrialUserList.Any(t => t.UserId == _userInfo.Id))
.Where(t => t.IsClosedDialog == false)
.Where(u => u.ReadingMedicalReviewDialogList.OrderByDescending(l => l.CreateTime).First().UserTypeEnumInt == (int)UserTypeEnum.IndependentReviewer).Count();
return ResponseOutput.Ok(result, new { TotalToBeReUploadCount = toBeDealedCount });
}
#endregion
#region 项目列表查询
[HttpPost]
public async Task<IResponseOutput<PageOutput<TrialToBeDoneDto>>> GetTrialToBeDoneList(TrialToBeDoneQuery inQuery,
[FromServices] IRepository<TaskMedicalReview> _taskMedicalReviewRepository)
{
var query = _trialRepository.AsQueryable().IgnoreQueryFilters()
.WhereIf(inQuery.SponsorId != null, o => o.SponsorId == inQuery.SponsorId)
.WhereIf(!string.IsNullOrEmpty(inQuery.Code), o => o.TrialCode.Contains(inQuery.Code))
.WhereIf(!string.IsNullOrEmpty(inQuery.ResearchProgramNo), o => o.ResearchProgramNo.Contains(inQuery.ResearchProgramNo))
.WhereIf(!string.IsNullOrWhiteSpace(inQuery.ExperimentName), o => o.ExperimentName.Contains(inQuery.ExperimentName))
.WhereIf(_userInfo.UserTypeEnumInt != (int)UserTypeEnum.SuperAdmin, t => t.TrialUserList.Any(t => t.UserId == _userInfo.Id && t.IsDeleted == false) && t.IsDeleted == false)
.Select(t => new TrialToBeDoneDto()
{
TrialId = t.Id,
ResearchProgramNo = t.ResearchProgramNo,
ExperimentName = t.ExperimentName,
TrialCode = t.TrialCode,
CreateTime=t.CreateTime,
Sponsor= _userInfo.IsEn_Us? t.Sponsor.SponsorName:t.Sponsor.SponsorNameCN,
TrialStatusStr=t.TrialStatusStr,
});
//.ProjectTo<TrialDetailDTO>(_mapper.ConfigurationProvider, new { userTypeEnumInt = _userInfo.UserTypeEnumInt, userId = _userInfo.Id });
var result= await query.ToPagedListAsync(inQuery.PageIndex, inQuery.PageSize, string.IsNullOrWhiteSpace(inQuery.SortField) ? "CreateTime" : inQuery.SortField, inQuery.Asc);
return ResponseOutput.Ok(result, new { TotalToBeReUploadCount = 0 });
} }
#endregion #endregion

View File

@ -17,7 +17,7 @@ namespace IRaCIS.Core.Domain.Models
[Table("VisitTaskReReading")] [Table("VisitTaskReReading")]
public class VisitTaskReReading : Entity, IAuditUpdate, IAuditAdd public class VisitTaskReReading : Entity, IAuditUpdate, IAuditAdd
{ {
public Guid TrialId { get; set; }
//重阅原始任务Id 重阅会产生新的任务 //重阅原始任务Id 重阅会产生新的任务
public Guid OriginalReReadingTaskId { get; set; } public Guid OriginalReReadingTaskId { get; set; }