diff --git a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml
index f748685ee..d5b02da56 100644
--- a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml
+++ b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml
@@ -2517,6 +2517,13 @@
+
+
+ 获取项目标准其他问题
+
+
+
+
获取系统临床问题
@@ -2545,6 +2552,13 @@
+
+
+ 获取系统其他问题
+
+
+
+
获取系统表格问题
@@ -2587,6 +2601,18 @@
+
+
+ 同步系统问题
+
+
+
+
+
+
+ 是否应用
+
+
名称
@@ -2637,6 +2663,11 @@
文件路径
+
+
+ 是否应用
+
+
枚举
@@ -2817,7 +2848,7 @@
问题英文名称
-
+
临床问题类型(分组,单选。)
@@ -2877,6 +2908,21 @@
显示类型
+
+
+ 是否是检查日期
+
+
+
+
+ 小数点位数
+
+
+
+
+ 单位
+
+
查询临床数据基类
@@ -2947,7 +2993,7 @@
问题英文名称
-
+
临床问题类型(分组,单选。)
@@ -3002,6 +3048,16 @@
外层问题Id
+
+
+ 小数点位数
+
+
+
+
+ 单位
+
+
项目临床数据问题
@@ -3057,6 +3113,21 @@
获取系统临床数据
+
+
+ 系统临床数据Id
+
+
+
+
+ 项目临床数据Id
+
+
+
+
+ 项目临床数据Id
+
+
项目中心Code
@@ -8684,6 +8755,11 @@
ISubjectCriteriaEvaluationService
+
+
+ IClinicalQuestionService
+
+
IOrganInfoService
@@ -10314,14 +10390,23 @@
-
-
- 阅片人筛选
-
-
-
-
- vvv
+
+
+ PM 阅片人筛选
+
+
+
+
+ vvv
+
+
+
+ SPM 阅片人筛选
+
+
+
+
+ vvv
@@ -10411,8 +10496,18 @@
MIM医学反馈
+
+
+
+ 获取某项目 某标准 第一条未读的医学审核
+
+
+
+
+
+
阅片信息签名验证接口
@@ -11350,6 +11445,22 @@
临床数据配置
+
+
+ 应用系统临床数据
+
+
+
+
+
+
+
+ 应用项目临床数据
+
+
+
+
+
新增或者修改(系统)
diff --git a/IRaCIS.Core.Application/Service/Allocation/Interface/ITaskMedicalReviewService.cs b/IRaCIS.Core.Application/Service/Allocation/Interface/ITaskMedicalReviewService.cs
index 81a77a470..6e458fbef 100644
--- a/IRaCIS.Core.Application/Service/Allocation/Interface/ITaskMedicalReviewService.cs
+++ b/IRaCIS.Core.Application/Service/Allocation/Interface/ITaskMedicalReviewService.cs
@@ -17,7 +17,7 @@ namespace IRaCIS.Core.Application.Interfaces
//Task> GetTaskMedicalReviewList(TaskMedicalReviewQuery queryTaskMedicalReview);
-
-
+ Task GetNextMedicalReviewTask(GetNextMedicalReviewTaskInDto inDto);
+ Task>> GetMIMMedicalReviewTaskList(TaskMedicalReviewQuery inQuery);
}
}
diff --git a/IRaCIS.Core.Application/Service/Allocation/TaskMedicalReviewService.cs b/IRaCIS.Core.Application/Service/Allocation/TaskMedicalReviewService.cs
index 0d36cb89a..770d89a9e 100644
--- a/IRaCIS.Core.Application/Service/Allocation/TaskMedicalReviewService.cs
+++ b/IRaCIS.Core.Application/Service/Allocation/TaskMedicalReviewService.cs
@@ -138,7 +138,7 @@ namespace IRaCIS.Core.Application.Service
{
var medicalReview = await _taskMedicalReviewRepository.Where(x => x.Id == inDto.MedicalReviewId).Include(x=>x.VisitTask).FirstNotNullAsync();
- var subjectReview = await GetMIMMedicalReviewTaskList(new TaskMedicalReviewQuery()
+ var subjectReview = (await GetMIMMedicalReviewTaskList(new TaskMedicalReviewQuery()
{
TrialId = medicalReview.TrialId,
@@ -148,14 +148,14 @@ namespace IRaCIS.Core.Application.Service
TrialReadingCriterionId = medicalReview.VisitTask.TrialReadingCriterionId,
PageIndex=1,
PageSize=1,
- });
+ })).Data;
- if (subjectReview.Item1.CurrentPageData.Count == 1)
+ if (subjectReview.CurrentPageData.Count == 1)
{
- return subjectReview.Item1.CurrentPageData[0];
+ return subjectReview.CurrentPageData[0];
}
- var data = await GetMIMMedicalReviewTaskList(new TaskMedicalReviewQuery()
+ var data = (await GetMIMMedicalReviewTaskList(new TaskMedicalReviewQuery()
{
TrialId = medicalReview.TrialId,
@@ -164,11 +164,11 @@ namespace IRaCIS.Core.Application.Service
TrialReadingCriterionId = medicalReview.VisitTask.TrialReadingCriterionId,
PageIndex = 1,
PageSize = 1,
- });
+ })).Data;
- if (data.Item1.CurrentPageData.Count == 1)
+ if (data.CurrentPageData.Count == 1)
{
- return data.Item1.CurrentPageData[0];
+ return data.CurrentPageData[0];
}
else
{
@@ -186,7 +186,7 @@ namespace IRaCIS.Core.Application.Service
///
///
[HttpPost]
- public async Task<(PageOutput, object)> GetMIMMedicalReviewTaskList(TaskMedicalReviewQuery inQuery)
+ public async Task>> GetMIMMedicalReviewTaskList(TaskMedicalReviewQuery inQuery)
{
var taskMedicalReviewQueryable = _taskMedicalReviewRepository.Where(t => t.VisitTask.TrialId == inQuery.TrialId && t.MedicalManagerUserId == _userInfo.Id&&t.VisitTask.TrialReadingCriterionId==inQuery.TrialReadingCriterionId)
@@ -206,7 +206,7 @@ namespace IRaCIS.Core.Application.Service
var pageList = await taskMedicalReviewQueryable.ToPagedListAsync(inQuery.PageIndex, inQuery.PageSize, string.IsNullOrWhiteSpace(inQuery.SortField) ? nameof(TaskMedicalReviewView.Id) : inQuery.SortField, inQuery.Asc);
- return (pageList, new
+ return ResponseOutput.Ok(pageList, new
{
IsConfirmMedicineQuestion = await _readingQuestionCriterionTrialRepository.Where(x => x.Id == inQuery.TrialReadingCriterionId).Select(x => x.IsConfirmMedicineQuestion).FirstOrDefaultAsync()
diff --git a/IRaCIS.Core.Application/Service/TrialSiteUser/DTO/PersonalWorkstationViewModel.cs b/IRaCIS.Core.Application/Service/TrialSiteUser/DTO/PersonalWorkstationViewModel.cs
index 3d6424620..5f446672e 100644
--- a/IRaCIS.Core.Application/Service/TrialSiteUser/DTO/PersonalWorkstationViewModel.cs
+++ b/IRaCIS.Core.Application/Service/TrialSiteUser/DTO/PersonalWorkstationViewModel.cs
@@ -170,6 +170,15 @@ namespace IRaCIS.Core.Application.Contracts
}
+ public class MedicalCommentsFirstToBeDoneQuery
+ {
+ [NotDefault]
+ public Guid TrialId { get; set; }
+
+ [NotDefault]
+ public Guid TrialReadingCriterionId { get; set; }
+ }
+
public class MedicalCommentsToBeDoneDto : TrialBaseInfoDto
{
public Guid TrialReadingCriterionId { get; set; }
@@ -177,6 +186,8 @@ namespace IRaCIS.Core.Application.Contracts
public int? UrgentCount { get; set; }
public int? ToBeReplyedCount { get; set; }
+
+ public int? ToBeReviewedCount { get; set; }
}
public class ImageCheckQuestionToBeDoneQuery : PageInput
@@ -291,7 +302,7 @@ namespace IRaCIS.Core.Application.Contracts
}
- public class TrialUserToBeDoneQuery
+ public class TrialUserToBeDoneQuery
{
[NotDefault]
public Guid TrialId { get; set; }
@@ -337,6 +348,8 @@ namespace IRaCIS.Core.Application.Contracts
public int? Medical_MIM_ToBeDealedCount { get; set; }
+ public int? Medical_MIM_ToBeReviewedCount { get; set; }
+
public int? Medical_IR_ToBeDealedCount { get; set; }
public int UserTotalToBeDoneCount => new[]
@@ -356,7 +369,8 @@ namespace IRaCIS.Core.Application.Contracts
Reading_SPM_ToBeApprovalCount ?? 0,
Reading_PM_ToBeApprovalCount ?? 0,
Medical_MIM_ToBeDealedCount ?? 0,
- Medical_IR_ToBeDealedCount ?? 0
+ Medical_IR_ToBeDealedCount ?? 0,
+ Medical_MIM_ToBeReviewedCount??0
}.Sum();
}
diff --git a/IRaCIS.Core.Application/Service/TrialSiteUser/PersonalWorkstation.cs b/IRaCIS.Core.Application/Service/TrialSiteUser/PersonalWorkstation.cs
index 9717d09dc..e15c0c766 100644
--- a/IRaCIS.Core.Application/Service/TrialSiteUser/PersonalWorkstation.cs
+++ b/IRaCIS.Core.Application/Service/TrialSiteUser/PersonalWorkstation.cs
@@ -1,7 +1,10 @@
using IRaCIS.Application.Contracts;
using IRaCIS.Core.Application.Contracts;
+using IRaCIS.Core.Application.Interfaces;
+using IRaCIS.Core.Application.ViewModel;
using IRaCIS.Core.Domain.Models;
using IRaCIS.Core.Domain.Share;
+using IRaCIS.Core.Infrastructure;
using IRaCIS.Core.Infrastructure.Extention;
using MathNet.Numerics;
using Microsoft.AspNetCore.Mvc;
@@ -255,6 +258,40 @@ namespace IRaCIS.Core.Application
}
+ ///
+ ///PM 阅片人筛选
+ ///
+ ///
+ ///
+ ///
+ /// vvv
+ [HttpPost]
+ public async Task>> GetPM_ReviewerSelectToBeDoneList(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,
+ ResearchProgramNo = t.ResearchProgramNo,
+ ExperimentName = t.ExperimentName,
+ TrialCode = t.TrialCode,
+
+ IsUrgent = t.IsUrgent || t.IsSubjectExpeditedView,
+ ToBeApprovalCount = t.EnrollList.Where(u => u.EnrollStatus == EnrollStatus.InviteIntoGroup).Count()
+ });
+
+ var result = await query.ToPagedListAsync(inQuery.PageIndex, inQuery.PageSize, inQuery.SortField, inQuery.Asc);
+
+ 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 }); ;
+
+ }
+
#endregion
@@ -262,14 +299,14 @@ namespace IRaCIS.Core.Application
#region SPM CPM 待办
///
- /// 阅片人筛选
+ ///SPM 阅片人筛选
///
///
///
///
/// vvv
[HttpPost]
- public async Task>> GetReviewerSelectToBeDoneList(ReviewerSelectToBeDoneQuery inQuery
+ public async Task>> GetSPM_ReviewerSelectToBeDoneList(ReviewerSelectToBeDoneQuery inQuery
, [FromServices] IRepository _enrollRepository,
[FromServices] IRepository _trialRepository)
{
@@ -653,6 +690,10 @@ namespace IRaCIS.Core.Application
}
+
+
+
+
#endregion
@@ -845,7 +886,7 @@ namespace IRaCIS.Core.Application
.Where(t => t.IsClosedDialog == false && t.VisitTask.DoctorUserId == _userInfo.Id)
.Where(u => u.ReadingMedicalReviewDialogList.OrderByDescending(l => l.CreateTime).First().UserTypeEnumInt == (int)UserTypeEnum.MIM).Count();
- return ResponseOutput.Ok(result, new { TotalToBeReUploadCount = toBeDealedCount });
+ return ResponseOutput.Ok(result, new { TotalToBeReplyedCount = toBeDealedCount });
}
@@ -860,6 +901,7 @@ namespace IRaCIS.Core.Application
/// MIM医学反馈
///
///
+ ///
///
[HttpPost]
@@ -893,19 +935,63 @@ namespace IRaCIS.Core.Application
ToBeReplyedCount = g.Where(u =>
u.ReadingMedicalReviewDialogList.OrderByDescending(l => l.CreateTime).First().UserTypeEnumInt == (int)UserTypeEnum.IndependentReviewer).Count(),
+ ToBeReviewedCount=g.Where(u => !u.IsInvalid && u.AuditState != MedicalReviewAuditState.HaveSigned).Count()
+
});
var result = await query.ToPagedListAsync(inQuery.PageIndex, inQuery.PageSize, inQuery.SortField, inQuery.Asc);
- var toBeDealedCount = _taskMedicalReviewRepository
+ var toBeReplyedQuery = _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();
+ .Where(u => u.ReadingMedicalReviewDialogList.OrderByDescending(l => l.CreateTime).First().UserTypeEnumInt == (int)UserTypeEnum.IndependentReviewer);
- return ResponseOutput.Ok(result, new { TotalToBeReUploadCount = toBeDealedCount });
+ var toBeReplyedCount = toBeReplyedQuery.Count();
+
+ var tobeReviewedCount = _taskMedicalReviewRepository
+ .Where(t => t.Trial.TrialUserList.Any(t => t.UserId == _userInfo.Id))
+ .Where(t => t.IsClosedDialog == false)
+ .Where(u => !u.IsInvalid && u.AuditState != MedicalReviewAuditState.HaveSigned).Count();
+
+ //var firstToBeDone = toBeDealedQuery.ProjectTo(_mapper.ConfigurationProvider).FirstOrDefault();
+
+ return ResponseOutput.Ok(result, new { TotalToBeReplyedCount = toBeReplyedCount, TotalTobeReviewedCount = tobeReviewedCount });
}
+
+ ///
+ /// 获取某项目 某标准 第一条未读的医学审核
+ ///
+ ///
+ ///
+ ///
+ ///
+ public async Task GetMedicalCommentsFirstToBeDone(MedicalCommentsFirstToBeDoneQuery inQuery,
+ [FromServices] ITaskMedicalReviewService _taskMedicalReviewService)
+ {
+ var result = await _taskMedicalReviewService.GetMIMMedicalReviewTaskList(new TaskMedicalReviewQuery()
+ {
+ TrialId = inQuery.TrialId,
+ IsGetBeRead = true,
+ PageIndex = 1,
+ PageSize = 1,
+ TrialReadingCriterionId = inQuery.TrialReadingCriterionId
+ });
+
+ if (result.Data.CurrentPageData.Count == 1)
+ {
+ return result.Data.CurrentPageData[0];
+ }
+ else
+ {
+ throw new BusinessValidationFailedException(_localizer["MedicalReview_Finish"]);
+ }
+ }
+
+
+
+
#endregion
@@ -1086,13 +1172,18 @@ namespace IRaCIS.Core.Application
.Where(t => t.IsClosedDialog == false)
.Where(u => u.ReadingMedicalReviewDialogList.OrderByDescending(l => l.CreateTime).First().UserTypeEnumInt == (int)UserTypeEnum.IndependentReviewer).Count() : 0,
+ Medical_MIM_ToBeReviewedCount=
+ (t.User.UserTypeEnum == UserTypeEnum.MIM) ?
+ t.Trial.TaskMedicalReviewList
+ .Where(t => t.IsClosedDialog == false)
+ .Where(u => !u.IsInvalid && u.AuditState != MedicalReviewAuditState.HaveSigned).Count():0
});
var list = await query.ToListAsync();
- var result = list.Where(t => t.UserTotalToBeDoneCount > 0).OrderBy(t=>t.UserType).ToList();
+ var result = list.Where(t => t.UserTotalToBeDoneCount > 0).OrderBy(t => t.UserType).ToList();
//var result= list.GroupBy(t => t.UserType).ToDictionary(g => g.Key, g => g.ToList());