Merge branch 'Test.Study' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Test.Study
continuous-integration/drone/push Build is passing
Details
continuous-integration/drone/push Build is passing
Details
commit
35be7f3144
|
@ -226,6 +226,9 @@
|
|||
<param name="trialId"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:IRaCIS.Core.API.Controllers.UploadDownLoadController.DownloadCommonFile(System.String,IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.CommonDocument})">
|
||||
<summary> 通用文件下载 </summary>
|
||||
</member>
|
||||
<member name="M:IRaCIS.Core.API.Controllers.UploadDownLoadController.UploadCommonDoc">
|
||||
<summary>
|
||||
上传通用文档 比如一致性核查的 比如导出的excel 模板
|
||||
|
|
|
@ -34,7 +34,10 @@
|
|||
角色: {5}
|
||||
</div>
|
||||
<div>
|
||||
系统登录地址:{6}
|
||||
系统登录地址:
|
||||
<a href='{6}' style='margin-left:30px;font-size:14px;text-decoration: none;display: inline-block;color:#00D1B2;border-radius: 5px;line-height: 40px;text-align: center;'>
|
||||
点击跳转
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
|
|
@ -34,7 +34,10 @@
|
|||
Role: {5}
|
||||
</div>
|
||||
<div>
|
||||
Login URL: {6}
|
||||
Login URL:
|
||||
<a href='{6}' style='margin-left:30px;font-size:14px;text-decoration: none;display: inline-block;color:#00D1B2;border-radius: 5px;line-height: 40px;text-align: center;'>
|
||||
click redirect
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
|
|
@ -34,7 +34,10 @@
|
|||
角色: {5}
|
||||
</div>
|
||||
<div>
|
||||
系统登录地址:{6}
|
||||
系统登录地址:
|
||||
<a href='{6}' style='margin-left:30px;font-size:14px;text-decoration: none;display: inline-block;color:#00D1B2;border-radius: 5px;line-height: 40px;text-align: center;'>
|
||||
点击跳转
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
|
|
@ -34,7 +34,10 @@
|
|||
Role: {5}
|
||||
</div>
|
||||
<div>
|
||||
Login URL: {6}
|
||||
Login URL:
|
||||
<a href='{6}' style='margin-left:30px;font-size:14px;text-decoration: none;display: inline-block;color:#00D1B2;border-radius: 5px;line-height: 40px;text-align: center;'>
|
||||
click redirect
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
|
|
@ -100,12 +100,6 @@
|
|||
医学审核生成规则 废弃
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:IRaCIS.Core.Application.Service.TaskMedicalReviewRuleService.GenerateMedicalReviewTask(IRaCIS.Core.Application.ViewModel.GenerateMedicalReviewTaskCommand)">
|
||||
<summary>
|
||||
产生医学审核
|
||||
</summary>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="T:IRaCIS.Core.Application.Service.TaskMedicalReviewService">
|
||||
<summary>
|
||||
任务医学审核
|
||||
|
|
|
@ -78,120 +78,7 @@ namespace IRaCIS.Core.Application.Service
|
|||
return ResponseOutput.Ok();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 产生医学审核
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
[Obsolete]
|
||||
public async Task<IResponseOutput> GenerateMedicalReviewTask(GenerateMedicalReviewTaskCommand generateCommand)
|
||||
{
|
||||
var trialId = generateCommand.TrialId;
|
||||
|
||||
//var mimUserList = await _trialUserRepository.Where(t => t.User.UserTypeEnum == Domain.Share.UserTypeEnum.MIM && t.TrialId == trialId).Select(t => t.User).ProjectTo<UserSimpleInfo>(_mapper.ConfigurationProvider).ToListAsync();
|
||||
|
||||
|
||||
|
||||
Guid? defalutMIMUserId = null /*mimUserList.FirstOrDefault()?.UserId*/;
|
||||
|
||||
//获取当前医生数据 已经生成的,和配置的数量
|
||||
var taskTaskMedicalReviewRuleList = await _taskMedicalReviewRuleRepository.Where(t => t.TrialId == trialId).ProjectTo<TaskMedicalReviewRuleView>(_mapper.ConfigurationProvider).ToListAsync();
|
||||
|
||||
foreach (var item in taskTaskMedicalReviewRuleList)
|
||||
{
|
||||
|
||||
if (item.IsEnable)
|
||||
{
|
||||
|
||||
if (item.PlanGlobalCount > item.GeneratedGlobalCount)
|
||||
{
|
||||
var needGenerateCount = item.PlanGlobalCount - item.GeneratedGlobalCount;
|
||||
|
||||
var canGenerateCount = item.ActualGlobalCount - item.GeneratedGlobalCount;
|
||||
|
||||
var toGenerateCount = canGenerateCount > needGenerateCount ? needGenerateCount : canGenerateCount;
|
||||
|
||||
//分配给MIM
|
||||
|
||||
if (toGenerateCount > 0)
|
||||
{
|
||||
var toGenerateTaskList = item.ActualGlobalTaskList.ExceptBy(item.GeneratedGlobalTaskList.Select(t => t.TaskId), t => t.TaskId).Take(toGenerateCount).ToList();
|
||||
|
||||
foreach (var toGenerateTask in toGenerateTaskList)
|
||||
{
|
||||
await _taskMedicalReviewRepository.AddAsync(new TaskMedicalReview() { DoctorUserId = toGenerateTask.DoctorUserId!.Value, TrialId = toGenerateTask.TrialId, VisitTaskId = toGenerateTask.TaskId, MedicalManagerUserId = defalutMIMUserId });
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
if (item.PlanJudgeCount > item.GeneratedJudgeCount)
|
||||
{
|
||||
var needGenerateCount = item.PlanJudgeCount - item.GeneratedJudgeCount;
|
||||
|
||||
var canGenerateCount = item.ActualJudgeCount - item.GeneratedGlobalCount;
|
||||
|
||||
var toGenerateCount = canGenerateCount > needGenerateCount ? needGenerateCount : canGenerateCount;
|
||||
|
||||
if (toGenerateCount > 0)
|
||||
{
|
||||
var toGenerateTaskList = item.ActualJudgeTaskList.ExceptBy(item.GeneratedJudgeTaskList.Select(t => t.TaskId), t => t.TaskId).Take(toGenerateCount).ToList();
|
||||
|
||||
foreach (var toGenerateTask in toGenerateTaskList)
|
||||
{
|
||||
await _taskMedicalReviewRepository.AddAsync(new TaskMedicalReview() { DoctorUserId = toGenerateTask.DoctorUserId!.Value, TrialId = toGenerateTask.TrialId, VisitTaskId = toGenerateTask.TaskId, MedicalManagerUserId = defalutMIMUserId });
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
if (item.PlanTumorCount > item.GeneratedTumorCount)
|
||||
{
|
||||
var needGenerateCount = item.PlanTumorCount - item.GeneratedTumorCount;
|
||||
|
||||
var canGenerateCount = item.ActualTumorCount - item.GeneratedGlobalCount;
|
||||
|
||||
var toGenerateCount = canGenerateCount > needGenerateCount ? needGenerateCount : canGenerateCount;
|
||||
|
||||
if (toGenerateCount > 0)
|
||||
{
|
||||
var toGenerateTaskList = item.ActualTumorTaskList.ExceptBy(item.GeneratedTumorTaskList.Select(t => t.TaskId), t => t.TaskId).Take(toGenerateCount).ToList();
|
||||
|
||||
foreach (var toGenerateTask in toGenerateTaskList)
|
||||
{
|
||||
await _taskMedicalReviewRepository.AddAsync(new TaskMedicalReview() { DoctorUserId = toGenerateTask.DoctorUserId!.Value, TrialId = toGenerateTask.TrialId, VisitTaskId = toGenerateTask.TaskId, MedicalManagerUserId = defalutMIMUserId });
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
if (item.PlanVisitCount > item.GeneratedVisitCount)
|
||||
{
|
||||
var needGenerateCount = item.PlanVisitCount - item.GeneratedVisitCount;
|
||||
|
||||
var canGenerateCount = item.ActualVisitCount - item.GeneratedGlobalCount;
|
||||
|
||||
var toGenerateCount = canGenerateCount > needGenerateCount ? needGenerateCount : canGenerateCount;
|
||||
|
||||
if (toGenerateCount > 0)
|
||||
{
|
||||
|
||||
var toGenerateTaskList = item.ActualVisitTaskList.ExceptBy(item.GeneratedVisitTaskList.Select(t => t.TaskId), t => t.TaskId).Take(toGenerateCount).ToList();
|
||||
|
||||
foreach (var toGenerateTask in toGenerateTaskList)
|
||||
{
|
||||
await _taskMedicalReviewRepository.AddAsync(new TaskMedicalReview() { DoctorUserId = toGenerateTask.DoctorUserId!.Value, TrialId = toGenerateTask.TrialId, VisitTaskId = toGenerateTask.TaskId, MedicalManagerUserId = defalutMIMUserId });
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
await _taskMedicalReviewRepository.SaveChangesAsync();
|
||||
return ResponseOutput.Ok();
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
|
|
@ -233,83 +233,8 @@ namespace IRaCIS.Core.Application.Service
|
|||
&& t.TrialReadingCriterionId == trialReadingCriterionConfig.TrialReadingCriterionId && t.TaskState == TaskState.Effect
|
||||
&& t.SourceSubjectVisitId == subjectVisit.Id).ToList();
|
||||
|
||||
if (trialReadingCriterionConfig.ReadingType == ReadingMethod.Double)
|
||||
{
|
||||
|
||||
|
||||
VisitTask? task1 = existCurrentVisitTaskList.FirstOrDefault(t => t.ArmEnum == Arm.DoubleReadingArm1);
|
||||
VisitTask? task2 = existCurrentVisitTaskList.FirstOrDefault(t => t.ArmEnum == Arm.DoubleReadingArm2);
|
||||
|
||||
if (!existCurrentVisitTaskList.Any(t => t.ArmEnum == Arm.DoubleReadingArm1))
|
||||
{
|
||||
currentMaxCodeInt = currentMaxCodeInt + 1;
|
||||
|
||||
|
||||
|
||||
|
||||
task1 = await _visitTaskRepository.AddAsync(new VisitTask()
|
||||
{
|
||||
TrialId = trialId,
|
||||
SubjectId = subjectVisit.SubjectId,
|
||||
IsUrgent = subjectVisit.IsUrgent,
|
||||
TaskBlindName = blindTaskName,
|
||||
TaskName = subjectVisit.VisitName,
|
||||
VisitTaskNum = subjectVisit.VisitNum,
|
||||
TaskUrgentType = taskUrgentType,
|
||||
IsCanEditUrgentState = isCanEditUrgentState,
|
||||
//CheckPassedTime = subjectVisit.CheckPassedTime,
|
||||
ArmEnum = Arm.DoubleReadingArm1,//特殊
|
||||
Code = currentMaxCodeInt,
|
||||
SourceSubjectVisitId = subjectVisit.Id,
|
||||
TaskCode = AppSettings.GetCodeStr(currentMaxCodeInt, nameof(VisitTask)),
|
||||
ReadingCategory = ReadingCategory.Visit,
|
||||
|
||||
TrialReadingCriterionId = trialReadingCriterionConfig.TrialReadingCriterionId,
|
||||
IsNeedClinicalDataSign = isNeedClinicalDataSign,
|
||||
IsClinicalDataSign = isClinicalDataSign
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
if (!existCurrentVisitTaskList.Any(t => t.ArmEnum == Arm.DoubleReadingArm2))
|
||||
{
|
||||
currentMaxCodeInt = currentMaxCodeInt + 1;
|
||||
|
||||
|
||||
task2 = await _visitTaskRepository.AddAsync(new VisitTask()
|
||||
{
|
||||
TrialId = trialId,
|
||||
SubjectId = subjectVisit.SubjectId,
|
||||
IsUrgent = subjectVisit.IsUrgent,
|
||||
TaskBlindName = blindTaskName,
|
||||
TaskName = subjectVisit.VisitName,
|
||||
TaskUrgentType = taskUrgentType,
|
||||
IsCanEditUrgentState = isCanEditUrgentState,
|
||||
VisitTaskNum = subjectVisit.VisitNum,
|
||||
//CheckPassedTime = subjectVisit.CheckPassedTime,
|
||||
ArmEnum = Arm.DoubleReadingArm2,//特殊
|
||||
Code = currentMaxCodeInt,
|
||||
SourceSubjectVisitId = subjectVisit.Id,
|
||||
TaskCode = AppSettings.GetCodeStr(currentMaxCodeInt, nameof(VisitTask)),
|
||||
ReadingCategory = ReadingCategory.Visit,
|
||||
|
||||
TrialReadingCriterionId = trialReadingCriterionConfig.TrialReadingCriterionId,
|
||||
IsNeedClinicalDataSign = isNeedClinicalDataSign,
|
||||
IsClinicalDataSign = isClinicalDataSign
|
||||
});
|
||||
|
||||
|
||||
}
|
||||
|
||||
_provider.Set<int>($"{trialId}_{StaticData.CacheKey.TaskMaxCode}", currentMaxCodeInt, TimeSpan.FromMinutes(30));
|
||||
|
||||
|
||||
|
||||
|
||||
var defaultState = trialReadingCriterionConfig.FollowVisitAutoAssignDefaultState == TaskAllocateDefaultState.InitAllocated ? TaskAllocationState.InitAllocated : TaskAllocationState.Allocated;
|
||||
|
||||
}
|
||||
else if (trialReadingCriterionConfig.ReadingType == ReadingMethod.Single)
|
||||
//只有单重阅片
|
||||
if (trialReadingCriterionConfig.ReadingType == ReadingMethod.Single)
|
||||
{
|
||||
|
||||
VisitTask? singleTask = existCurrentVisitTaskList.FirstOrDefault(t => t.ArmEnum == Arm.SingleReadingArm);
|
||||
|
@ -336,8 +261,12 @@ namespace IRaCIS.Core.Application.Service
|
|||
ReadingCategory = ReadingCategory.Visit,
|
||||
TrialReadingCriterionId = trialReadingCriterionConfig.TrialReadingCriterionId,
|
||||
IsNeedClinicalDataSign = isNeedClinicalDataSign,
|
||||
IsClinicalDataSign = isClinicalDataSign
|
||||
});
|
||||
IsClinicalDataSign = isClinicalDataSign,
|
||||
|
||||
SuggesteFinishedTime = GetSuggessFinishTime(true, UrgentType.NotUrget)
|
||||
|
||||
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
|
@ -681,11 +610,11 @@ namespace IRaCIS.Core.Application.Service
|
|||
//之前有回退到影像上传的访视 那么当前访视一致性核查通过的时候,当前访视生成但是不分配出去(排除失访的)
|
||||
var beforeBackVisitTask = await _visitTaskRepository.Where(t => t.TrialId == trialId && t.SubjectId == subjectVisit.SubjectId && t.TrialReadingCriterionId== trialReadingCriterionId && t.VisitTaskNum < subjectVisit.VisitNum && t.ReadingCategory == ReadingCategory.Visit && t.SourceSubjectVisit.CheckState != CheckStateEnum.CVPassed && t.SourceSubjectVisit.IsLostVisit == false).OrderBy(t => t.VisitTaskNum).FirstOrDefaultAsync();
|
||||
|
||||
singleTask.SuggesteFinishedTime = GetSuggessFinishTime(true, UrgentType.NotUrget);
|
||||
|
||||
if (beforeBackVisitTask == null)
|
||||
{
|
||||
|
||||
singleTask.SuggesteFinishedTime = GetSuggessFinishTime(true, UrgentType.NotUrget);
|
||||
|
||||
|
||||
var followBackVisitTask = await _visitTaskRepository.Where(t => t.TrialId == trialId && t.SubjectId == subjectVisit.SubjectId && t.TrialReadingCriterionId == trialReadingCriterionId && t.VisitTaskNum > subjectVisit.VisitNum && t.ReadingCategory == ReadingCategory.Visit && t.SourceSubjectVisit.CheckState != CheckStateEnum.CVPassed && t.SourceSubjectVisit.IsLostVisit == false).OrderBy(t => t.VisitTaskNum).FirstOrDefaultAsync();
|
||||
|
@ -765,7 +694,11 @@ namespace IRaCIS.Core.Application.Service
|
|||
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
singleTask.SuggesteFinishedTime = GetSuggessFinishTime(true, UrgentType.NotUrget);
|
||||
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
|
@ -876,6 +809,8 @@ namespace IRaCIS.Core.Application.Service
|
|||
// AllocateTime = DateTime.Now,
|
||||
//DoctorUserId = reReadingVisitTask.DoctorUserId,
|
||||
|
||||
SuggesteFinishedTime= reReadingVisitTask.SuggesteFinishedTime,
|
||||
|
||||
});
|
||||
|
||||
generateTaskCommand.Action(newTask);
|
||||
|
|
|
@ -466,8 +466,12 @@ namespace IRaCIS.Core.Application.Service
|
|||
{
|
||||
throw new BusinessValidationFailedException(_localizer["MedicalReview_SaveQuestion"]);
|
||||
}
|
||||
var medicalReview = await _taskMedicalReviewRepository.Where(x => x.Id == inDto.TaskMedicalReviewId).FirstNotNullAsync();
|
||||
|
||||
await _taskMedicalReviewRepository.UpdatePartialFromQueryAsync(inDto.TaskMedicalReviewId, x => new TaskMedicalReview()
|
||||
{
|
||||
|
||||
LatestReplyUserId = (inDto.IsSendDialog && !medicalReview.IsSendMessage && inDto.IsHaveQuestion) ? _userInfo.Id : null,
|
||||
IsHaveQuestion = inDto.IsHaveQuestion,
|
||||
Questioning = inDto.Questioning,
|
||||
IsSendMessage = inDto.IsSendDialog && inDto.IsHaveQuestion,
|
||||
|
@ -476,9 +480,8 @@ namespace IRaCIS.Core.Application.Service
|
|||
AuditAdviceEnum = inDto.AuditAdviceEnum,
|
||||
SaveConclusionTime = DateTime.Now,
|
||||
|
||||
});
|
||||
}); ;
|
||||
|
||||
var medicalReview = await _taskMedicalReviewRepository.Where(x => x.Id == inDto.TaskMedicalReviewId).FirstNotNullAsync();
|
||||
if (inDto.IsSendDialog&& !medicalReview.IsSendMessage && inDto.IsHaveQuestion)
|
||||
{
|
||||
|
||||
|
@ -511,6 +514,7 @@ namespace IRaCIS.Core.Application.Service
|
|||
{
|
||||
await _taskMedicalReviewRepository.UpdatePartialFromQueryAsync(inDto.TaskMedicalReviewId, x => new TaskMedicalReview()
|
||||
{
|
||||
LatestReplyUserId=_userInfo.Id,
|
||||
IsClosedDialog = inDto.IsClosedDialog,
|
||||
MedicalDialogCloseEnum=inDto.MedicalDialogCloseEnum,
|
||||
DialogCloseReason=inDto.DialogCloseReason,
|
||||
|
@ -547,6 +551,11 @@ namespace IRaCIS.Core.Application.Service
|
|||
throw new BusinessValidationFailedException(_localizer["MedicalReview_invalid"]);
|
||||
}
|
||||
|
||||
await _taskMedicalReviewRepository.UpdatePartialFromQueryAsync(inDto.TaskMedicalReviewId, x => new TaskMedicalReview()
|
||||
{
|
||||
LatestReplyUserId = _userInfo.Id,
|
||||
});
|
||||
|
||||
var visitTaskId = await _taskMedicalReviewRepository.Where(x => x.Id == inDto.TaskMedicalReviewId).Select(x => x.VisitTaskId).FirstOrDefaultAsync();
|
||||
ReadingMedicalReviewDialog dialog = new ReadingMedicalReviewDialog()
|
||||
{
|
||||
|
@ -600,6 +609,7 @@ namespace IRaCIS.Core.Application.Service
|
|||
|
||||
await _taskMedicalReviewRepository.UpdatePartialFromQueryAsync(x => !x.IsClosedDialog && x.Id == inDto.TaskMedicalReviewId, x => new TaskMedicalReview()
|
||||
{
|
||||
LatestReplyUserId=_userInfo.Id,
|
||||
IsClosedDialog = true,
|
||||
MedicalDialogCloseEnum = MedicalDialogClose.IRApplyReReading,
|
||||
|
||||
|
@ -613,6 +623,7 @@ namespace IRaCIS.Core.Application.Service
|
|||
|
||||
await _taskMedicalReviewRepository.UpdatePartialFromQueryAsync(inDto.TaskMedicalReviewId, x => new TaskMedicalReview()
|
||||
{
|
||||
LatestReplyUserId=_userInfo.Id,
|
||||
DoctorUserIdeaEnum = inDto.DoctorUserIdeaEnum,
|
||||
});
|
||||
ReadingMedicalReviewDialog dialog = new ReadingMedicalReviewDialog()
|
||||
|
@ -740,10 +751,11 @@ namespace IRaCIS.Core.Application.Service
|
|||
|
||||
await _taskMedicalReviewRepository.UpdatePartialFromQueryAsync(inDto.TaskMedicalReviewId, x => new TaskMedicalReview()
|
||||
{
|
||||
LatestReplyUserId = _userInfo.Id,
|
||||
DoctorUserIdeaEnum = inDto.DoctorUserIdeaEnum,
|
||||
DisagreeReason = inDto.DisagreeReason,
|
||||
IsApplyHeavyReading=inDto.IsApplyHeavyReading,
|
||||
});
|
||||
IsApplyHeavyReading = inDto.IsApplyHeavyReading,
|
||||
}); ;
|
||||
|
||||
var visitTaskId = await _taskMedicalReviewRepository.Where(x => x.Id == inDto.TaskMedicalReviewId).Select(x => x.VisitTaskId).FirstOrDefaultAsync();
|
||||
await _readingMedicalReviewDialogRepository.AddAsync(new ReadingMedicalReviewDialog()
|
||||
|
|
|
@ -461,7 +461,7 @@ namespace IRaCIS.Core.Application
|
|||
ToBeDealedCount = t.SubjectVisitList.Where(c => c.TrialSite.CRCUserList.Any(u => u.UserId == _userInfo.Id))
|
||||
.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 || u.LatestReplyUserId==null)).Count(),
|
||||
|
||||
}).Where(x => x.ToBeDealedCount > 0); ;
|
||||
|
||||
|
@ -544,11 +544,11 @@ namespace IRaCIS.Core.Application
|
|||
TrialCode = t.TrialCode,
|
||||
UrgentCount = t.SubjectVisitList
|
||||
.Where(c => c.TrialSite.CRCUserList.Any(u => u.UserId == _userInfo.Id))
|
||||
.Where(u => u.SubmitState == SubmitStateEnum.ToSubmit && u.IsUrgent && u.IsPMBackOrReReading).Count(),
|
||||
.Where(u => u.IsUrgent && ((u.SubmitState == SubmitStateEnum.ToSubmit && u.IsPMBackOrReReading)||u.IsQCConfirmedReupload)).Count(),
|
||||
|
||||
ToBeReUploadCount = t.SubjectVisitList
|
||||
.Where(c => c.TrialSite.CRCUserList.Any(u => u.UserId == _userInfo.Id))
|
||||
.Where(u => u.SubmitState == SubmitStateEnum.ToSubmit && u.IsPMBackOrReReading).Count(),
|
||||
.Where(u => (u.SubmitState == SubmitStateEnum.ToSubmit && u.IsPMBackOrReReading) ||(u.IsQCConfirmedReupload)).Count(),
|
||||
|
||||
}).Where(x => x.ToBeReUploadCount > 0);
|
||||
|
||||
|
@ -556,7 +556,7 @@ namespace IRaCIS.Core.Application
|
|||
|
||||
var toBeDealedCount = _subjectVisitRepository
|
||||
.Where(t => t.Trial.TrialUserList.Any(t => t.UserId == _userInfo.Id))
|
||||
.Where(u => u.SubmitState == SubmitStateEnum.ToSubmit && u.IsPMBackOrReReading).Count();
|
||||
.Where(u => (u.SubmitState == SubmitStateEnum.ToSubmit && u.IsPMBackOrReReading) || (u.IsQCConfirmedReupload)).Count();
|
||||
|
||||
return ResponseOutput.Ok(result, new { TotalToBeReUploadCount = toBeDealedCount });
|
||||
|
||||
|
@ -587,7 +587,7 @@ namespace IRaCIS.Core.Application
|
|||
TrialCode = t.TrialCode,
|
||||
UrgentCount = t.SubjectVisitList
|
||||
.Where(c => c.TrialSite.CRCUserList.Any(u => u.UserId == _userInfo.Id))
|
||||
.Where(u => u.SubmitState == SubmitStateEnum.ToSubmit && u.IsUrgent).Count(),
|
||||
.Where(u => u.SubmitState == SubmitStateEnum.ToSubmit && (u.IsEnrollmentConfirm ||u.PDState==PDStateEnum.PDProgress || u.Trial.IsUrgent ||u.Subject.IsUrgent)/*u.IsUrgent*/).Count(),
|
||||
|
||||
|
||||
ToBeDealedCount = t.SubjectVisitList
|
||||
|
@ -647,7 +647,7 @@ namespace IRaCIS.Core.Application
|
|||
//待审核通过,统计从已领取到QC提交之间的 已领取 待审核 审核中 (审核完成 领取人就会清理 所以只用查询当前领取人是自己的就好了)
|
||||
ToBeReviewedCount = t.SubjectVisitList.Where(u => u.CurrentActionUserId == _userInfo.Id).Count()
|
||||
|
||||
}).Where(x => x.UrgentCount > 0);
|
||||
}).Where(x => x.ToBeClaimedCount+x.ToBeReviewedCount > 0);
|
||||
|
||||
var result = await query.ToPagedListAsync(inQuery.PageIndex, inQuery.PageSize, string.IsNullOrEmpty(inQuery.SortField) ? nameof(ImageQualityToBeDoneDto.TrialId) : inQuery.SortField, inQuery.Asc);
|
||||
|
||||
|
@ -885,6 +885,14 @@ namespace IRaCIS.Core.Application
|
|||
CriterionName = g.Key.CriterionName,
|
||||
TrialReadingCriterionId = g.Key.TrialReadingCriterionId,
|
||||
|
||||
#region 不能对包含聚合或子查询的表达式执行聚合函数
|
||||
|
||||
|
||||
UrgentCount = g.Where(u => u.VisitTask.IsUrgent && u.LatestReplyUser.UserTypeEnum== UserTypeEnum.MIM).Count(),
|
||||
|
||||
ToBeReplyedCount = g.Where(u => u.LatestReplyUser.UserTypeEnum == UserTypeEnum.MIM).Count(),
|
||||
|
||||
#endregion
|
||||
//UrgentCount = g.Where(u => u.VisitTask.IsUrgent
|
||||
//&& u.ReadingMedicalReviewDialogList.OrderByDescending(l => l.CreateTime).First().UserTypeEnumInt == (int)UserTypeEnum.MIM).Count(),
|
||||
|
||||
|
@ -898,7 +906,9 @@ namespace IRaCIS.Core.Application
|
|||
var toBeDealedCount = _taskMedicalReviewRepository
|
||||
.Where(t => t.Trial.TrialUserList.Any(t => t.UserId == _userInfo.Id))
|
||||
.Where(t => t.IsClosedDialog == false && t.VisitTask.DoctorUserId == _userInfo.Id)
|
||||
.Where(u => u.ReadingMedicalReviewDialogList.OrderByDescending(l => l.CreateTime).First().UserTypeEnumInt == (int)UserTypeEnum.MIM).Count();
|
||||
.Where(u => u.LatestReplyUser.UserTypeEnum == UserTypeEnum.MIM)
|
||||
//.Where(u => u.ReadingMedicalReviewDialogList.OrderByDescending(l => l.CreateTime).First().UserTypeEnumInt == (int)UserTypeEnum.MIM)
|
||||
.Count();
|
||||
|
||||
return ResponseOutput.Ok(result, new { TotalToBeReplyedCount = toBeDealedCount });
|
||||
|
||||
|
@ -945,6 +955,10 @@ namespace IRaCIS.Core.Application
|
|||
TrialCode = g.Key.TrialCode,
|
||||
CriterionName = g.Key.CriterionName,
|
||||
|
||||
UrgentCount = g.Where(u => u.VisitTask.IsUrgent).Select(u => u.VisitTask.IsUrgent && u.LatestReplyUser.UserTypeEnum == UserTypeEnum.IndependentReviewer).Count(),
|
||||
|
||||
ToBeReplyedCount = g.Select(u => u.LatestReplyUser.UserTypeEnum == UserTypeEnum.IndependentReviewer).Count(),
|
||||
|
||||
//UrgentCount = g.Where(u => u.VisitTask.IsUrgent).Select(u => u.ReadingMedicalReviewDialogList.OrderByDescending(l => l.CreateTime).First()).Count(t => t.UserTypeEnumInt == (int)UserTypeEnum.IndependentReviewer),
|
||||
|
||||
//ToBeReplyedCount = g.Select(t => t.ReadingMedicalReviewDialogList.OrderByDescending(l => l.CreateTime).First()).Count(t => t.UserTypeEnumInt == (int)UserTypeEnum.IndependentReviewer),
|
||||
|
@ -962,7 +976,9 @@ namespace IRaCIS.Core.Application
|
|||
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);
|
||||
.Where(u => u.LatestReplyUser.UserTypeEnum == UserTypeEnum.IndependentReviewer);
|
||||
|
||||
//.Where(u => u.ReadingMedicalReviewDialogList.OrderByDescending(l => l.CreateTime).First().UserTypeEnumInt == (int)UserTypeEnum.IndependentReviewer);
|
||||
|
||||
var toBeReplyedCount = toBeReplyedQuery.Count();
|
||||
|
||||
|
|
|
@ -19,7 +19,10 @@ namespace IRaCIS.Core.Domain.Models
|
|||
[Table("TaskMedicalReview")]
|
||||
public class TaskMedicalReview : Entity, IAuditUpdate, IAuditAdd
|
||||
{
|
||||
[JsonIgnore]
|
||||
public User LatestReplyUser { get; set; }
|
||||
|
||||
public Guid? LatestReplyUserId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// CreateUserId
|
||||
|
|
Loading…
Reference in New Issue