diff --git a/IRaCIS.Core.API/Controllers/ExtraController.cs b/IRaCIS.Core.API/Controllers/ExtraController.cs
index 46daf138f..de3d78b2c 100644
--- a/IRaCIS.Core.API/Controllers/ExtraController.cs
+++ b/IRaCIS.Core.API/Controllers/ExtraController.cs
@@ -226,7 +226,7 @@ namespace IRaCIS.Api.Controllers
if (!await _userRepository.AnyAsync(t => t.Id == Guid.Parse(userId) && t.EmailToken == token && t.IsFirstAdd))
{
- decodeUrl = errorUrl+ $"?ErrorMessage={System.Web.HttpUtility.UrlEncode(lang=="zh"? "您的初始化链接已过期": "Error!The initialization link has expired. Return")} ";
+ decodeUrl = errorUrl+ $"?lang={lang}&ErrorMessage={System.Web.HttpUtility.UrlEncode(lang=="zh"? "您的初始化链接已过期": "Error!The initialization link has expired. Return")} ";
}
return Redirect(decodeUrl);
diff --git a/IRaCIS.Core.API/wwwroot/EmailTemplate/UserOptCommon.html b/IRaCIS.Core.API/wwwroot/EmailTemplate/UserOptCommon.html
index da4236584..f9ed9d945 100644
--- a/IRaCIS.Core.API/wwwroot/EmailTemplate/UserOptCommon.html
+++ b/IRaCIS.Core.API/wwwroot/EmailTemplate/UserOptCommon.html
@@ -8,7 +8,7 @@
- Dear {0},
+ 亲爱的用户 {0},
感谢您使用展影云平台。
diff --git a/IRaCIS.Core.API/wwwroot/EmailTemplate/UserOptCommon_US.html b/IRaCIS.Core.API/wwwroot/EmailTemplate/UserOptCommon_US.html
index b9fe3583e..0ec66aabd 100644
--- a/IRaCIS.Core.API/wwwroot/EmailTemplate/UserOptCommon_US.html
+++ b/IRaCIS.Core.API/wwwroot/EmailTemplate/UserOptCommon_US.html
@@ -8,7 +8,7 @@
- Dear {0},
+ Dear Sir or Madam {0},
Thank you for using our IRC imaging system.
diff --git a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml
index 7a9addc24..dcda22ad5 100644
--- a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml
+++ b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml
@@ -9922,6 +9922,7 @@
+
@@ -9929,6 +9930,8 @@
重阅申请待审核
+
+
@@ -9936,6 +9939,8 @@
阅片人筛选
+
+
vvv
@@ -9943,6 +9948,8 @@
重阅审批
+
+
@@ -9959,6 +9966,7 @@
+
@@ -10003,7 +10011,7 @@
- IR 影像阅片 待阅量 复杂 --未完成
+ IR 影像阅片 待阅量
diff --git a/IRaCIS.Core.Application/Service/Allocation/VisitTaskService.cs b/IRaCIS.Core.Application/Service/Allocation/VisitTaskService.cs
index 5c292742b..cd1501d3f 100644
--- a/IRaCIS.Core.Application/Service/Allocation/VisitTaskService.cs
+++ b/IRaCIS.Core.Application/Service/Allocation/VisitTaskService.cs
@@ -1416,7 +1416,7 @@ namespace IRaCIS.Core.Application.Service.Allocation
//添加申请记录
var visitTaskReReading = await _visitTaskReReadingRepository.AddAsync(new VisitTaskReReading()
{
-
+ TrialId=applyReReadingCommand.TrialId,
RootReReadingTaskId = rootReReadingTaskId == Guid.Empty ? task.Id : rootReReadingTaskId,
OriginalReReadingTaskId = task.Id,
RequestReReadingTime = DateTime.Now,
diff --git a/IRaCIS.Core.Application/Service/TrialSiteUser/DTO/PersonalWorkstationViewModel.cs b/IRaCIS.Core.Application/Service/TrialSiteUser/DTO/PersonalWorkstationViewModel.cs
index f017afe8d..d3604a473 100644
--- a/IRaCIS.Core.Application/Service/TrialSiteUser/DTO/PersonalWorkstationViewModel.cs
+++ b/IRaCIS.Core.Application/Service/TrialSiteUser/DTO/PersonalWorkstationViewModel.cs
@@ -175,7 +175,7 @@ namespace IRaCIS.Core.Application.Contracts
public string CriterionName { get; set; }
public int? UrgentCount { get; set; }
- public int? ToBeDealedCount { get; set; }
+ public int? ToBeReplyedCount { get; set; }
}
public class ImageCheckQuestionToBeDoneQuery : PageInput
@@ -187,7 +187,7 @@ namespace IRaCIS.Core.Application.Contracts
{
public int? UrgentCount { get; set; }
- public int? ToBeDealedCount { get; set; }
+ public int? ToBeReplyedCount { get; set; }
}
public class ImageSubmittedToBeDoneQuery : PageInput
@@ -228,7 +228,7 @@ namespace IRaCIS.Core.Application.Contracts
{
public int? UrgentCount { get; set; }
- public int? ToBeDealedCount { get; set; }
+ public int? ToBeReUploadCount { get; set; }
}
public class ImageClinicalDataToBeDoneQuery : PageInput
@@ -243,7 +243,37 @@ namespace IRaCIS.Core.Application.Contracts
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; }
+
+ }
diff --git a/IRaCIS.Core.Application/Service/TrialSiteUser/PersonalWorkstation.cs b/IRaCIS.Core.Application/Service/TrialSiteUser/PersonalWorkstation.cs
index e38888ceb..49710b2be 100644
--- a/IRaCIS.Core.Application/Service/TrialSiteUser/PersonalWorkstation.cs
+++ b/IRaCIS.Core.Application/Service/TrialSiteUser/PersonalWorkstation.cs
@@ -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.Infrastructure.Extention;
using Microsoft.AspNetCore.Mvc;
@@ -164,19 +166,22 @@ namespace IRaCIS.Core.Application
#region PM APM 待办
+
///
/// 一致性核查待处理
///
///
///
+ ///
///
[HttpPost]
- public async Task> GetCheckToBeDoneList(CheckToBeDoneQuery inQuery,
+ public async Task>> GetCheckToBeDoneList(CheckToBeDoneQuery inQuery,
[FromServices] IRepository _subjectVisitRepository,
[FromServices] IRepository _trialRepository)
{
var query = _trialRepository
+ .Where(t => t.TrialUserList.Any(t => t.UserId == _userInfo.Id))
.Select(t => new CheckToBeDoneDto()
{
TrialId = t.Id,
@@ -184,14 +189,25 @@ namespace IRaCIS.Core.Application
ExperimentName = t.ExperimentName,
TrialCode = t.TrialCode,
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(),
+
ToBeRepliedCount = t.SubjectVisitList.Where(u => u.CheckState == CheckStateEnum.ToCheck &&
u.CheckChallengeDialogList.Any(t => t.UserTypeEnum == UserTypeEnum.ClinicalResearchCoordinator)).Count(),
});
+
+
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
/// 重阅申请待审核
///
///
+ ///
+ ///
///
[HttpPost]
- public async Task> GetReReadingApplyToBeDoneList(ReReadingApplyToBeDoneQuery inQuery,
+ public async Task>> GetReReadingApplyToBeDoneList(ReReadingApplyToBeDoneQuery inQuery,
[FromServices] IRepository _visitTaskReReadingRepository,
[FromServices] IRepository _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 })
.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);
- 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
@@ -236,13 +262,16 @@ namespace IRaCIS.Core.Application
/// 阅片人筛选
///
///
+ ///
+ ///
/// vvv
[HttpPost]
- public async Task> GetReviewerSelectToBeDoneList(ReviewerSelectToBeDoneQuery inQuery
+ public async Task>> GetReviewerSelectToBeDoneList(ReviewerSelectToBeDoneQuery inQuery
, [FromServices] IRepository _enrollRepository,
[FromServices] IRepository _trialRepository)
{
var query = _trialRepository
+ .Where(t => t.TrialUserList.Any(t => t.UserId == _userInfo.Id))
.Select(t => new ReviewerSelectToBeDoneDto()
{
TrialId = t.Id,
@@ -256,7 +285,10 @@ namespace IRaCIS.Core.Application
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
/// 重阅审批
///
///
+ ///
+ ///
///
[HttpPost]
- public async Task> GetReReadingApprovalToBeDoneToBeDoneList(ReReadingApprovalToBeDoneQuery inQuery,
+ public async Task>> GetReReadingApprovalToBeDoneToBeDoneList(ReReadingApprovalToBeDoneQuery inQuery,
[FromServices] IRepository _visitTaskReReadingRepository,
[FromServices] IRepository _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 })
.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);
- 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
///
///
[HttpPost]
- public async Task> GetImageClinicalDataToBeDoneList(ImageClinicalDataToBeDoneQuery inQuery,
+ public async Task>> GetImageClinicalDataToBeDoneList(ImageClinicalDataToBeDoneQuery inQuery,
[FromServices] IRepository _subjectVisitRepository,
[FromServices] IRepository _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))
.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);
- 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
///
///
///
+ ///
///
[HttpPost]
- public async Task> GetCRCImageQuestionToBeDoneList(ImageQuestionToBeDoneQuery inQuery,
+ public async Task>> GetCRCImageQuestionToBeDoneList(ImageQuestionToBeDoneQuery inQuery,
[FromServices] IRepository _subjectVisitRepository,
[FromServices] IRepository _trialRepository)
{
var query = _trialRepository
+ .Where(t => t.TrialUserList.Any(t => t.UserId == _userInfo.Id))
.Select(t => new ImageQuestionToBeDoneDto()
{
TrialId = t.Id,
@@ -353,6 +400,7 @@ namespace IRaCIS.Core.Application
TrialCode = t.TrialCode,
UrgentCount = t.SubjectVisitList.SelectMany(c => c.QCChallengeList)
.Where(u => u.IsClosed == false && u.LatestReplyUser.UserTypeEnum == UserTypeEnum.IQC && u.SubjectVisit.IsUrgent).Count(),
+
ToBeDealedCount = t.SubjectVisitList.SelectMany(c => c.QCChallengeList)
.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);
- 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
///
///
[HttpPost]
- public async Task> GetImageCheckQuestionToBeDoneList(ImageCheckQuestionToBeDoneQuery inQuery,
+ public async Task>> GetImageCheckQuestionToBeDoneList(ImageCheckQuestionToBeDoneQuery inQuery,
[FromServices] IRepository _subjectVisitRepository,
[FromServices] IRepository _trialRepository)
{
var query = _trialRepository
+ .Where(t => t.TrialUserList.Any(t => t.UserId == _userInfo.Id))
.Select(t => new ImageCheckQuestionToBeDoneDto()
{
TrialId = t.Id,
@@ -385,13 +439,21 @@ namespace IRaCIS.Core.Application
ExperimentName = t.ExperimentName,
TrialCode = t.TrialCode,
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);
- 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
///
///
[HttpPost]
- public async Task> GetImageReUploadToBeDoneList(ImageReUploadToBeDoneQuery inQuery,
+ public async Task>> GetImageReUploadToBeDoneList(ImageReUploadToBeDoneQuery inQuery,
[FromServices] IRepository _subjectVisitRepository,
[FromServices] IRepository _trialRepository)
{
var query = _trialRepository
+ .Where(t => t.TrialUserList.Any(t => t.UserId == _userInfo.Id))
.Select(t => new ImageReUploadToBeDoneDto()
{
TrialId = t.Id,
@@ -416,13 +479,17 @@ namespace IRaCIS.Core.Application
ExperimentName = t.ExperimentName,
TrialCode = t.TrialCode,
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);
- 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
///
///
[HttpPost]
- public async Task> GetImageSubmittedToBeDoneList(ImageSubmittedToBeDoneQuery inQuery,
+ public async Task>> GetImageSubmittedToBeDoneList(ImageSubmittedToBeDoneQuery inQuery,
[FromServices] IRepository _subjectVisitRepository,
[FromServices] IRepository _trialRepository)
{
var query = _trialRepository
+ .Where(t => t.TrialUserList.Any(t => t.UserId == _userInfo.Id))
.Select(t => new ImageSubmittedToBeDoneDto()
{
TrialId = t.Id,
@@ -455,7 +523,11 @@ namespace IRaCIS.Core.Application
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
///
///
[HttpPost]
- public async Task> GetImageQualityToBeDoneList(ImageQualityToBeDoneQuery inQuery,
+ public async Task>> GetImageQualityToBeDoneList(ImageQualityToBeDoneQuery inQuery,
[FromServices] IRepository _subjectVisitRepository,
[FromServices] IRepository _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()
{
TrialId = t.Id,
@@ -501,7 +575,12 @@ namespace IRaCIS.Core.Application
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
///
///
[HttpPost]
- public async Task> GetQCImageQuestionToBeDoneList(ImageQuestionToBeDoneQuery inQuery,
+ public async Task>> GetQCImageQuestionToBeDoneList(ImageQuestionToBeDoneQuery inQuery,
[FromServices] IRepository _subjectVisitRepository,
[FromServices] IRepository _trialRepository)
{
var query = _trialRepository
+ .Where(t => t.TrialUserList.Any(t => t.UserId == _userInfo.Id))
.Select(t => new ImageQuestionToBeDoneDto()
{
TrialId = t.Id,
@@ -534,7 +614,12 @@ namespace IRaCIS.Core.Application
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待办
///
- /// IR 影像阅片 待阅量 复杂 --未完成
+ /// IR 影像阅片 待阅量
///
///
///
@@ -552,12 +637,52 @@ namespace IRaCIS.Core.Application
///
///
[HttpPost]
- public async Task> GetIRImageReadingToBeDoneList(IRImageReadingToBeDoneQuery inQuery,
+ public async Task>> GetIRImageReadingToBeDoneList(IRImageReadingToBeDoneQuery inQuery,
[FromServices] IRepository _visitTaskRepository,
[FromServices] IRepository _trialReadingCriterionRepository,
[FromServices] IRepository _trialRepository)
{
+
+ var newQuery = _trialReadingCriterionRepository.Where(t => t.IsConfirm == true && t.Trial.TrialUserList.Any(t => t.UserId == _userInfo.Id))
+ .Select(c => new IRImageReadingToBeDoneDto()
+ {
+ TrialId = c.TrialId,
+ ResearchProgramNo = c.Trial.ResearchProgramNo,
+ ExperimentName = c.Trial.ExperimentName,
+ TrialCode = c.Trial.TrialCode,
+ CriterionName = c.CriterionName,
+ TrialReadingCriterionId = c.Id,
+
+ UrgentCount = c.VisitTaskList.AsQueryable().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 => g.Key.IsAutoCreate ? !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(t => t.IsUrgent),
+
+
+ UnReadCount = c.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))
+ //前序 不存在 未生成任务的访视
+ //.WhereIf(g.Key.IsAutoCreate == false, t => !t.Subject.SubjectCriteriaEvaluationVisitFilterList.Where(d => d.TrialReadingCriterionId == t.TrialReadingCriterionId).Any(f => f.IsGeneratedTask == false && t.VisitTaskNum > f.SubjectVisit.VisitNum))
+ //.Where(t => g.Key.IsAutoCreate ? !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 = c.VisitTaskList.Where(t => t.DoctorUserId == _userInfo.Id && (t.TaskState == TaskState.Effect || t.TaskState == TaskState.Freeze)
+ && t.ReadingTaskState == ReadingTaskState.HaveSigned).Count(),
+ })
+
+ ;
+
+ #region 废弃
//var query = _trialRepository
// .Select(t => new IRImageReadingToBeDoneDto()
// {
@@ -585,48 +710,7 @@ namespace IRaCIS.Core.Application
// });
-
- var newQuery= _trialReadingCriterionRepository.Where(t=>t.IsConfirm==true && t.Trial.TrialUserList.Any(t=>t.UserId==_userInfo.Id))
- .Select(c => new IRImageReadingToBeDoneDto()
- {
- TrialId = c.TrialId,
- ResearchProgramNo = c.Trial.ResearchProgramNo,
- ExperimentName = c.Trial.ExperimentName,
- TrialCode = c.Trial.TrialCode,
- CriterionName = c.CriterionName,
- TrialReadingCriterionId = c.Id,
-
- UrgentCount = c.VisitTaskList.AsQueryable().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 => g.Key.IsAutoCreate ? !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(t => t.IsUrgent),
-
-
- UnReadCount = c.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))
- //前序 不存在 未生成任务的访视
- //.WhereIf(g.Key.IsAutoCreate == false, t => !t.Subject.SubjectCriteriaEvaluationVisitFilterList.Where(d => d.TrialReadingCriterionId == t.TrialReadingCriterionId).Any(f => f.IsGeneratedTask == false && t.VisitTaskNum > f.SubjectVisit.VisitNum))
- //.Where(t => g.Key.IsAutoCreate ? !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 = c.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))
// .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(),
// });
+ #endregion
- var result = await newQuery.ToPagedListAsync(inQuery.PageIndex, inQuery.PageSize, string.IsNullOrEmpty(inQuery.SortField) ?nameof(IRImageReadingToBeDoneDto.TrialId): inQuery.SortField, inQuery.Asc);
- return result;
+
+ var result = await newQuery.ToPagedListAsync(inQuery.PageIndex, inQuery.PageSize, string.IsNullOrEmpty(inQuery.SortField) ? nameof(IRImageReadingToBeDoneDto.TrialId) : inQuery.SortField, inQuery.Asc);
+
+ 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
///
[HttpPost]
- public async Task> GetIRMedicalCommentsToBeDoneList(MedicalCommentsToBeDoneQuery inQuery,
+ public async Task>> GetIRMedicalCommentsToBeDoneList(MedicalCommentsToBeDoneQuery inQuery,
[FromServices] IRepository _taskMedicalReviewRepository)
{
var query = _taskMedicalReviewRepository
+ .Where(t => t.Trial.TrialUserList.Any(t => t.UserId == _userInfo.Id))
.Where(t => t.IsClosedDialog == false)
.GroupBy(t => new
{
@@ -703,14 +803,19 @@ namespace IRaCIS.Core.Application
UrgentCount = g.Where(u => u.VisitTask.IsUrgent
&& 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(),
});
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
///
[HttpPost]
- public async Task> GetMIMMedicalCommentsToBeDoneList(MedicalCommentsToBeDoneQuery inQuery,
+ public async Task>> GetMIMMedicalCommentsToBeDoneList(MedicalCommentsToBeDoneQuery inQuery,
[FromServices] IRepository _taskMedicalReviewRepository)
{
var query = _taskMedicalReviewRepository
+ .Where(t => t.Trial.TrialUserList.Any(t => t.UserId == _userInfo.Id))
.Where(t => t.IsClosedDialog == false)
.GroupBy(t => new
{
@@ -754,15 +860,63 @@ namespace IRaCIS.Core.Application
UrgentCount = g.Where(u => u.VisitTask.IsUrgent
&& 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(),
});
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>> GetTrialToBeDoneList(TrialToBeDoneQuery inQuery,
+ [FromServices] IRepository _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(_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
diff --git a/IRaCIS.Core.Domain/Allocation/VisitTaskReReading.cs b/IRaCIS.Core.Domain/Allocation/VisitTaskReReading.cs
index f33650584..55e949d0c 100644
--- a/IRaCIS.Core.Domain/Allocation/VisitTaskReReading.cs
+++ b/IRaCIS.Core.Domain/Allocation/VisitTaskReReading.cs
@@ -17,7 +17,7 @@ namespace IRaCIS.Core.Domain.Models
[Table("VisitTaskReReading")]
public class VisitTaskReReading : Entity, IAuditUpdate, IAuditAdd
{
-
+ public Guid TrialId { get; set; }
//重阅原始任务Id 重阅会产生新的任务
public Guid OriginalReReadingTaskId { get; set; }