修改附加评估提交

Uat_Study
hang 2023-03-23 15:06:09 +08:00
parent bd028771b6
commit c28fbf0093
11 changed files with 324 additions and 91 deletions

View File

@ -441,6 +441,12 @@
</summary> </summary>
<returns></returns> <returns></returns>
</member> </member>
<member name="M:IRaCIS.Core.Application.Service.Allocation.VisitTaskService.InfluenceAddtioncalEvaluationCritrionAsync(IRaCIS.Core.Domain.Models.VisitTask)">
<summary>
如果是基线退回 影响附加评估标准 是否参与评估
</summary>
<returns></returns>
</member>
<member name="M:IRaCIS.Core.Application.Service.Allocation.VisitTaskService.GetReReadingOrBackInfluenceTaskList(System.Guid,System.Boolean,System.Nullable{System.Guid})"> <member name="M:IRaCIS.Core.Application.Service.Allocation.VisitTaskService.GetReReadingOrBackInfluenceTaskList(System.Guid,System.Boolean,System.Nullable{System.Guid})">
<summary> <summary>
影响提示列表 重阅仅仅针对已完成的任务申请 退回针对的是未完成的(退回仅仅针对是访视类型的) 影响提示列表 重阅仅仅针对已完成的任务申请 退回针对的是未完成的(退回仅仅针对是访视类型的)
@ -2249,6 +2255,20 @@
</summary> </summary>
<returns></returns> <returns></returns>
</member> </member>
<member name="M:IRaCIS.Core.Application.Service.SubjectCriteriaEvaluationService.GetCriteriaVisitBackInfluenceTaskList(IRaCIS.Core.Application.ViewModel.CriteriaVisitBackCommand)">
<summary>
附加评估标准 PM 退回某一访视 影响任务列表
</summary>
<param name="command"></param>
<returns></returns>
</member>
<member name="M:IRaCIS.Core.Application.Service.SubjectCriteriaEvaluationService.ConfirmBackCriteriaVisitTask(IRaCIS.Core.Application.ViewModel.CriteriaVisitBackCommand)">
<summary>
退回任务
</summary>
<param name="command"></param>
<returns></returns>
</member>
<member name="P:IRaCIS.Core.Application.Service.Reading.Dto.ClinicalDataTrialSetAddOrEdit.ClinicalDataSetName"> <member name="P:IRaCIS.Core.Application.Service.Reading.Dto.ClinicalDataTrialSetAddOrEdit.ClinicalDataSetName">
<summary> <summary>
名称 名称
@ -10482,7 +10502,7 @@
<param name="inDto"></param> <param name="inDto"></param>
<returns></returns> <returns></returns>
</member> </member>
<member name="M:IRaCIS.Application.Services.ReadingImageTaskService.FindChildQuestion(IRaCIS.Core.Application.Service.Reading.Dto.TrialReadQuestionData,System.Collections.Generic.List{IRaCIS.Core.Application.Service.Reading.Dto.TrialReadQuestionData},System.Collections.Generic.List{IRaCIS.Core.Application.Service.Reading.Dto.TableQuestionTrial},System.Collections.Generic.List{IRaCIS.Core.Application.Service.Reading.Dto.ReadingTableQuestionAnswerInfo},System.Collections.Generic.List{IRaCIS.Core.Application.Service.Reading.Dto.TableAnsweRowInfo},System.Collections.Generic.List{IRaCIS.Core.Domain.Models.OrganInfo},System.Collections.Generic.List{IRaCIS.Core.Domain.Models.ReadingTableQuestionAnswer})"> <member name="M:IRaCIS.Application.Services.ReadingImageTaskService.FindChildQuestion(IRaCIS.Core.Application.Service.Reading.Dto.TrialReadQuestionData,System.Collections.Generic.List{IRaCIS.Core.Application.Service.Reading.Dto.TrialReadQuestionData},System.Collections.Generic.List{IRaCIS.Core.Application.Service.Reading.Dto.TableQuestionTrial},System.Collections.Generic.List{IRaCIS.Core.Application.Service.Reading.Dto.ReadingTableQuestionAnswerInfo},System.Collections.Generic.List{IRaCIS.Core.Application.Service.Reading.Dto.TableAnsweRowInfo},System.Collections.Generic.List{IRaCIS.Core.Domain.Models.OrganInfo},System.Collections.Generic.List{IRaCIS.Core.Domain.Models.ReadingTableQuestionAnswer},System.Boolean)">
<summary> <summary>
获取子元素 获取子元素
</summary> </summary>

View File

@ -42,10 +42,13 @@ namespace IRaCIS.Core.Application.Service.Allocation
private readonly IRepository<VisitTaskReReading> _visitTaskReReadingRepository; private readonly IRepository<VisitTaskReReading> _visitTaskReReadingRepository;
private readonly IRepository<TaskMedicalReview> _taskMedicalReviewRepository; private readonly IRepository<TaskMedicalReview> _taskMedicalReviewRepository;
private readonly IRepository<ReadingTaskQuestionAnswer> _readingTaskQuestionAnswerRepository; private readonly IRepository<ReadingTaskQuestionAnswer> _readingTaskQuestionAnswerRepository;
private readonly IRepository<ReadingQuestionCriterionTrial> _trialReadingCriterionRepository;
private readonly IRepository<ReadingClinicalData> _readingClinicalDataReposiotry; private readonly IRepository<ReadingClinicalData> _readingClinicalDataReposiotry;
private readonly IRepository<SubjectCriteriaEvaluation> _subjectCriteriaEvaluationRepository;
private readonly IRepository<SubjectCriteriaEvaluationVisitFilter> _subjectCriteriaEvaluationVisitFilterRepository;
private readonly IRepository<ReadingQuestionCriterionTrial> _trialReadingCriterionRepository;
private readonly IRepository<SubjectCriteriaEvaluationVisitStudyFilter> _subjectCriteriaEvaluationVisitStudyFilterRepository;
public VisitTaskService(IRepository<SubjectVisit> subjectVisitRepository, IRepository<VisitTask> visitTaskRepository, IRepository<Trial> trialRepository, public VisitTaskService(IRepository<SubjectVisit> subjectVisitRepository, IRepository<VisitTask> visitTaskRepository, IRepository<Trial> trialRepository,
IRepository<Subject> subjectRepository, IRepository<SubjectUser> subjectUserRepository, IRepository<TaskAllocationRule> taskAllocationRuleRepository, IRepository<Subject> subjectRepository, IRepository<SubjectUser> subjectUserRepository, IRepository<TaskAllocationRule> taskAllocationRuleRepository,
@ -53,7 +56,10 @@ namespace IRaCIS.Core.Application.Service.Allocation
IRepository<TaskMedicalReview> taskMedicalReviewRepository, IRepository<TaskMedicalReview> taskMedicalReviewRepository,
IRepository<ReadingTaskQuestionAnswer> readingTaskQuestionAnswerRepository IRepository<ReadingTaskQuestionAnswer> readingTaskQuestionAnswerRepository
, IRepository<ReadingQuestionCriterionTrial> trialReadingCriterionRepository, , IRepository<ReadingQuestionCriterionTrial> trialReadingCriterionRepository,
IRepository<ReadingClinicalData> readingClinicalDataReposiotry IRepository<ReadingClinicalData> readingClinicalDataReposiotry,
IRepository<SubjectCriteriaEvaluation> subjectCriteriaEvaluationRepository,
IRepository<SubjectCriteriaEvaluationVisitFilter> subjectCriteriaEvaluationVisitFilterRepository,
IRepository<SubjectCriteriaEvaluationVisitStudyFilter> subjectCriteriaEvaluationVisitStudyFilterRepository
) )
{ {
_readingClinicalDataReposiotry = readingClinicalDataReposiotry; _readingClinicalDataReposiotry = readingClinicalDataReposiotry;
@ -69,6 +75,9 @@ namespace IRaCIS.Core.Application.Service.Allocation
_readingTaskQuestionAnswerRepository = readingTaskQuestionAnswerRepository; _readingTaskQuestionAnswerRepository = readingTaskQuestionAnswerRepository;
_trialReadingCriterionRepository = trialReadingCriterionRepository; _trialReadingCriterionRepository = trialReadingCriterionRepository;
_subjectCriteriaEvaluationRepository = subjectCriteriaEvaluationRepository;
_subjectCriteriaEvaluationVisitFilterRepository = subjectCriteriaEvaluationVisitFilterRepository;
_subjectCriteriaEvaluationVisitStudyFilterRepository = subjectCriteriaEvaluationVisitStudyFilterRepository;
} }
/// <summary> /// <summary>
@ -90,12 +99,12 @@ namespace IRaCIS.Core.Application.Service.Allocation
return await _visitTaskRepository.SaveChangesAsync(); return await _visitTaskRepository.SaveChangesAsync();
} }
public async Task<List<TrialReadingCriterionDto>> GetTrialCriterionList(Guid trialId, bool isHaveSigned = true,bool? isAutoCreate = null) public async Task<List<TrialReadingCriterionDto>> GetTrialCriterionList(Guid trialId, bool isHaveSigned = true, bool? isAutoCreate = null)
{ {
var list = await _repository.Where<ReadingQuestionCriterionTrial>(t => t.TrialId == trialId && t.IsConfirm) var list = await _repository.Where<ReadingQuestionCriterionTrial>(t => t.TrialId == trialId && t.IsConfirm)
.OrderBy(t => t.ShowOrder) .OrderBy(t => t.ShowOrder)
.Select(t => new TrialReadingCriterionDto() { TrialReadingCriterionId = t.Id, IsAutoCreate=t.IsAutoCreate,IsAdditionalAssessment=t.IsAdditionalAssessment, TrialReadingCriterionName = t.CriterionName, CriterionType = t.CriterionType, ReadingType = t.ReadingType, ReadingInfoSignTime = t.ReadingInfoSignTime }) .Select(t => new TrialReadingCriterionDto() { TrialReadingCriterionId = t.Id, IsAutoCreate = t.IsAutoCreate, IsAdditionalAssessment = t.IsAdditionalAssessment, TrialReadingCriterionName = t.CriterionName, CriterionType = t.CriterionType, ReadingType = t.ReadingType, ReadingInfoSignTime = t.ReadingInfoSignTime })
.ToListAsync(); .ToListAsync();
if (list.Count == 0) if (list.Count == 0)
@ -119,11 +128,16 @@ namespace IRaCIS.Core.Application.Service.Allocation
[HttpPost] [HttpPost]
public async Task<(PageOutput<SubjectAssignStat>, object?)> GetSubjectAssignAndTaskStatList(SubjectAssignStatQuery querySubjectAssign) public async Task<(PageOutput<SubjectAssignStat>, object?)> GetSubjectAssignAndTaskStatList(SubjectAssignStatQuery querySubjectAssign)
{ {
var isAddtinoarlCriterion = await _trialReadingCriterionRepository.AnyAsync(t => t.Id == querySubjectAssign.TrialReadingCriterionId && t.IsAutoCreate == false);
var subjectQuery = _subjectRepository.Where(t => t.TrialId == querySubjectAssign.TrialId && t.SubjectVisitTaskList.Any()) var subjectQuery = _subjectRepository.Where(t => t.TrialId == querySubjectAssign.TrialId && t.SubjectVisitTaskList.Any())
.WhereIf(querySubjectAssign.SiteId != null, t => t.SiteId == querySubjectAssign.SiteId) .WhereIf(querySubjectAssign.SiteId != null, t => t.SiteId == querySubjectAssign.SiteId)
.WhereIf(querySubjectAssign.SubjectId != null, t => t.Id == querySubjectAssign.SubjectId) .WhereIf(querySubjectAssign.SubjectId != null, t => t.Id == querySubjectAssign.SubjectId)
.WhereIf(querySubjectAssign.DoctorUserId != null, t => t.SubjectDoctorList.Any(t => t.DoctorUserId == querySubjectAssign.DoctorUserId && t.TrialReadingCriterionId == querySubjectAssign.TrialReadingCriterionId)) .WhereIf(querySubjectAssign.DoctorUserId != null, t => t.SubjectDoctorList.Any(t => t.DoctorUserId == querySubjectAssign.DoctorUserId && t.TrialReadingCriterionId == querySubjectAssign.TrialReadingCriterionId))
.WhereIf(!string.IsNullOrEmpty(querySubjectAssign.SubjectCode), t => t.Code.Contains(querySubjectAssign.SubjectCode)) .WhereIf(!string.IsNullOrEmpty(querySubjectAssign.SubjectCode), t => t.Code.Contains(querySubjectAssign.SubjectCode))
.WhereIf(isAddtinoarlCriterion, t => t.SubjectCriteriaEvaluationList.Where(t=>t.TrialReadingCriterionId==querySubjectAssign.TrialReadingCriterionId).Any(t=>t.IsJoinEvaluation))
.ProjectTo<SubjectAssignStat>(_mapper.ConfigurationProvider, new { trialReadingCriterionId = querySubjectAssign.TrialReadingCriterionId }); .ProjectTo<SubjectAssignStat>(_mapper.ConfigurationProvider, new { trialReadingCriterionId = querySubjectAssign.TrialReadingCriterionId });
@ -740,7 +754,7 @@ namespace IRaCIS.Core.Application.Service.Allocation
var trialTaskConfig = _trialRepository.Where(t => t.Id == queryVisitTask.TrialId).ProjectTo<TrialUrgentConfig>(_mapper.ConfigurationProvider).FirstOrDefault(); var trialTaskConfig = _trialRepository.Where(t => t.Id == queryVisitTask.TrialId).ProjectTo<TrialUrgentConfig>(_mapper.ConfigurationProvider).FirstOrDefault();
return (pageList,trialTaskConfig); return (pageList, trialTaskConfig);
} }
@ -1468,6 +1482,8 @@ namespace IRaCIS.Core.Application.Service.Allocation
{ {
//执行类似一致性核查回退流程 //执行类似一致性核查回退流程
await VisitBackAsync(origenalTask.SourceSubjectVisitId); await VisitBackAsync(origenalTask.SourceSubjectVisitId);
await InfluenceAddtioncalEvaluationCritrionAsync(origenalTask);
} }
else else
{ {
@ -1929,6 +1945,10 @@ namespace IRaCIS.Core.Application.Service.Allocation
} }
} }
} }
@ -1959,9 +1979,9 @@ namespace IRaCIS.Core.Application.Service.Allocation
var criterionConfig = (await _trialReadingCriterionRepository.Where(x => x.Id == task.TrialReadingCriterionId).Select(x => new { x.ReadingTool, x.IsAutoCreate, x.IsReadingTaskViewInOrder }).FirstOrDefaultAsync()).IfNullThrowException(); var criterionConfig = (await _trialReadingCriterionRepository.Where(x => x.Id == task.TrialReadingCriterionId).Select(x => new { x.ReadingTool, x.IsAutoCreate, x.IsReadingTaskViewInOrder }).FirstOrDefaultAsync()).IfNullThrowException();
if (criterionConfig.IsAutoCreate==false) if (criterionConfig.IsAutoCreate == false)
{ {
return ResponseOutput.NotOk("手动生成任务的不允许影像退回"); return ResponseOutput.NotOk("手动生成任务的不允许在此入口影像退回");
} }
if (task.TaskState != TaskState.Effect || task.ReadingCategory != ReadingCategory.Visit || task.ReadingTaskState == ReadingTaskState.HaveSigned) if (task.TaskState != TaskState.Effect || task.ReadingCategory != ReadingCategory.Visit || task.ReadingTaskState == ReadingTaskState.HaveSigned)
@ -1970,7 +1990,7 @@ namespace IRaCIS.Core.Application.Service.Allocation
} }
if( await _subjectVisitRepository.AnyAsync(t=>t.Id==task.SourceSubjectVisitId && t.CheckState!= CheckStateEnum.CVPassed)) if (await _subjectVisitRepository.AnyAsync(t => t.Id == task.SourceSubjectVisitId && t.CheckState != CheckStateEnum.CVPassed))
{ {
return ResponseOutput.NotOk("当前访视已回退到影像上传,不允许继续回退!"); return ResponseOutput.NotOk("当前访视已回退到影像上传,不允许继续回退!");
} }
@ -2252,11 +2272,39 @@ namespace IRaCIS.Core.Application.Service.Allocation
return ResponseOutput.NotOk("仅PM 可以进行回退操作"); return ResponseOutput.NotOk("仅PM 可以进行回退操作");
} }
await InfluenceAddtioncalEvaluationCritrionAsync(task);
await _visitTaskRepository.SaveChangesAsync(); await _visitTaskRepository.SaveChangesAsync();
return ResponseOutput.Ok(); return ResponseOutput.Ok();
} }
/// <summary>
/// 如果是基线退回 影响附加评估标准 是否参与评估
/// </summary>
/// <returns></returns>
private async Task InfluenceAddtioncalEvaluationCritrionAsync(VisitTask task)
{
if (_subjectVisitRepository.Any(t => t.Id == task.SourceSubjectVisitId && t.IsBaseLine))
{
await _subjectCriteriaEvaluationRepository.UpdatePartialFromQueryAsync(t => t.TrialReadingCriterion.IsAutoCreate == false && t.SubjectId == task.SubjectId, u => new SubjectCriteriaEvaluation()
{
IsJoinEvaluation = false
});
//删除筛选的访视数据
await _subjectCriteriaEvaluationVisitFilterRepository.BatchDeleteNoTrackingAsync(t => t.TrialReadingCriterion.IsAutoCreate == false && t.SubjectId == task.SubjectId);
//删除筛选的序列数据
await _subjectCriteriaEvaluationVisitStudyFilterRepository.BatchDeleteNoTrackingAsync(t => t.TrialReadingCriterion.IsAutoCreate == false && t.SubjectVisit.SubjectId == task.SubjectId);
}
}
//包括临床数据签名状态 //包括临床数据签名状态
private async Task VisitBackAsync(Guid? subjectVisitId) private async Task VisitBackAsync(Guid? subjectVisitId)
{ {
@ -2512,7 +2560,6 @@ namespace IRaCIS.Core.Application.Service.Allocation
{ {
// 当前任务及其之后的所有访视任务 两个阅片人的 // 当前任务及其之后的所有访视任务 两个阅片人的
// 1.后续访视不处理
//2.当前任务未完成,不会产生全局任务。后续任务均为访视任务,且均为待阅片,取消分配; //2.当前任务未完成,不会产生全局任务。后续任务均为访视任务,且均为待阅片,取消分配;
filterExpression = filterExpression.And(t => t.VisitTaskNum >= filterObj.VisitTaskNum); filterExpression = filterExpression.And(t => t.VisitTaskNum >= filterObj.VisitTaskNum);
@ -2686,6 +2733,8 @@ namespace IRaCIS.Core.Application.Service.Allocation
} }
/// <summary> /// <summary>
/// 获取已影响的列表 /// 获取已影响的列表
/// </summary> /// </summary>

View File

@ -35,7 +35,7 @@ namespace IRaCIS.Core.Application.ViewModel
public List<EvaluationInfo> FinalEvaluationList { get; set; }=new List<EvaluationInfo>(); public List<EvaluationInfo> FinalEvaluationList { get; set; }=new List<EvaluationInfo>();
public List<EvaluationInfo> ReadingEvaluationList { get; set; } public List<EvaluationInfo> ReadingEvaluationList { get; set; }=new List<EvaluationInfo>();
} }

View File

@ -19,7 +19,11 @@ namespace IRaCIS.Core.Application.ViewModel
public DateTime? UpdateTime { get; set; } public DateTime? UpdateTime { get; set; }
public Guid? Id { get; set; } public Guid? Id { get; set; }
public Guid TrialId { get; set; }
public Guid SubjectId { get; set; } public Guid SubjectId { get; set; }
public string SubjectCode { get; set; }
public Guid TrialReadingCriterionId { get; set; } public Guid TrialReadingCriterionId { get; set; }
public Guid SubjectVisitId { get; set; } public Guid SubjectVisitId { get; set; }
@ -78,6 +82,22 @@ namespace IRaCIS.Core.Application.ViewModel
public List<Guid> SubjectVisitIdList { get; set; }=new List<Guid>(); public List<Guid> SubjectVisitIdList { get; set; }=new List<Guid>();
} }
public class CriteriaVisitBackCommand
{
[NotDefault]
public Guid TrialReadingCriterionId { get; set; }
[NotDefault]
public Guid TrialId { get; set; }
[NotDefault]
public Guid SubjectId { get; set; }
[NotDefault]
public Guid SubjectVisitId { get; set; }
}
public class VisitStudyAndSeriesQuery public class VisitStudyAndSeriesQuery
{ {
[NotDefault] [NotDefault]

View File

@ -18,6 +18,7 @@ using Panda.DynamicWebApi.Attributes;
using IRaCIS.Core.Domain.Share.Reading; using IRaCIS.Core.Domain.Share.Reading;
using System.Runtime.InteropServices; using System.Runtime.InteropServices;
using DocumentFormat.OpenXml.Bibliography; using DocumentFormat.OpenXml.Bibliography;
using System.Linq.Expressions;
namespace IRaCIS.Core.Application.Service namespace IRaCIS.Core.Application.Service
{ {
@ -38,12 +39,15 @@ namespace IRaCIS.Core.Application.Service
private readonly IRepository<ReadingQuestionTrial> _trialReadingQuestionRepository; private readonly IRepository<ReadingQuestionTrial> _trialReadingQuestionRepository;
private readonly IRepository<VisitTask> _visitTaskRepository;
private readonly IVisitTaskHelpeService _IVisitTaskHelpeService; private readonly IVisitTaskHelpeService _IVisitTaskHelpeService;
private readonly IRepository<TaskMedicalReview> _taskMedicalReviewRepository;
public SubjectCriteriaEvaluationService(IRepository<SubjectCriteriaEvaluation> subjectCriteriaEvaluationRepository, IRepository<Subject> subjectRepository, public SubjectCriteriaEvaluationService(IRepository<SubjectCriteriaEvaluation> subjectCriteriaEvaluationRepository, IRepository<Subject> subjectRepository,
IRepository<SubjectCriteriaEvaluationVisitFilter> subjectCriteriaEvaluationVisitFilterRepository, IRepository<SubjectVisit> subjectVisitRepository, IRepository<SubjectCriteriaEvaluationVisitFilter> subjectCriteriaEvaluationVisitFilterRepository, IRepository<SubjectVisit> subjectVisitRepository,
IRepository<SubjectCriteriaEvaluationVisitStudyFilter> subjectCriteriaEvaluationVisitStudyFilterRepository, IRepository<SubjectCriteriaEvaluationVisitStudyFilter> subjectCriteriaEvaluationVisitStudyFilterRepository,
IRepository<ReadingQuestionCriterionTrial> trialReadingCriterionRepository, IVisitTaskHelpeService IVisitTaskHelpeService, IRepository<ReadingQuestionTrial> trialReadingQuestionRepository) IRepository<ReadingQuestionCriterionTrial> trialReadingCriterionRepository, IVisitTaskHelpeService IVisitTaskHelpeService, IRepository<ReadingQuestionTrial> trialReadingQuestionRepository, IRepository<VisitTask> visitTaskRepository, IRepository<TaskMedicalReview> taskMedicalReviewRepository)
{ {
_subjectCriteriaEvaluationRepository = subjectCriteriaEvaluationRepository; _subjectCriteriaEvaluationRepository = subjectCriteriaEvaluationRepository;
_subjectRepository = subjectRepository; _subjectRepository = subjectRepository;
@ -55,7 +59,8 @@ namespace IRaCIS.Core.Application.Service
_IVisitTaskHelpeService = IVisitTaskHelpeService; _IVisitTaskHelpeService = IVisitTaskHelpeService;
_trialReadingQuestionRepository = trialReadingQuestionRepository; _trialReadingQuestionRepository = trialReadingQuestionRepository;
_visitTaskRepository = visitTaskRepository;
_taskMedicalReviewRepository = taskMedicalReviewRepository;
} }
@ -65,7 +70,7 @@ namespace IRaCIS.Core.Application.Service
/// <param name="inQuery"></param> /// <param name="inQuery"></param>
/// <returns></returns> /// <returns></returns>
[HttpPost] [HttpPost]
public async Task<(PageOutput<SubjectCriteriaEvaluationView>,object)> GetSubjectCriteriaEvaluationList(SubjectCriteriaEvaluationQuery inQuery) public async Task<(PageOutput<SubjectCriteriaEvaluationView>, object)> GetSubjectCriteriaEvaluationList(SubjectCriteriaEvaluationQuery inQuery)
{ {
var trialReadingCritionList = _trialReadingCriterionRepository.Where(t => t.TrialId == inQuery.TrialId).ToList(); var trialReadingCritionList = _trialReadingCriterionRepository.Where(t => t.TrialId == inQuery.TrialId).ToList();
@ -89,15 +94,15 @@ namespace IRaCIS.Core.Application.Service
var addtionalQustionInfoList = _trialReadingQuestionRepository.Where(t => t.ReadingQuestionCriterionTrialId == resultTrialReadingCriterionId && t.IsAdditional == true && t.Type != "group").IgnoreQueryFilters().Select(t => new var addtionalQustionInfoList = _trialReadingQuestionRepository.Where(t => t.ReadingQuestionCriterionTrialId == resultTrialReadingCriterionId && t.IsAdditional == true && t.Type != "group").IgnoreQueryFilters().Select(t => new
{ {
QuestionId= t.Id, QuestionId = t.Id,
t.QuestionEnName, t.QuestionEnName,
t.QuestionName t.QuestionName
}).ToList(); }).ToList();
var questionIdList= addtionalQustionInfoList.Select(t=>t.QuestionId).ToList(); var questionIdList = addtionalQustionInfoList.Select(t => t.QuestionId).ToList();
var subjectCriteriaEvaluationQueryable = from subject in _subjectRepository.Where(t=>t.TrialId==inQuery.TrialId) var subjectCriteriaEvaluationQueryable = from subject in _subjectRepository.Where(t => t.TrialId == inQuery.TrialId)
.WhereIf(!string.IsNullOrWhiteSpace(inQuery.SubjectCode), t => t.Code.Contains(inQuery.SubjectCode)) .WhereIf(!string.IsNullOrWhiteSpace(inQuery.SubjectCode), t => t.Code.Contains(inQuery.SubjectCode))
.WhereIf(!string.IsNullOrWhiteSpace(inQuery.TrialSiteCode), t => t.TrialSite.TrialSiteCode.Contains(inQuery.TrialSiteCode)) .WhereIf(!string.IsNullOrWhiteSpace(inQuery.TrialSiteCode), t => t.TrialSite.TrialSiteCode.Contains(inQuery.TrialSiteCode))
.WhereIf(inQuery.SubjectStatus != null, t => t.Status == inQuery.SubjectStatus) .WhereIf(inQuery.SubjectStatus != null, t => t.Status == inQuery.SubjectStatus)
@ -120,25 +125,18 @@ namespace IRaCIS.Core.Application.Service
IsJoinEvaluation = subjectCriteriaEvaluation.IsJoinEvaluation, IsJoinEvaluation = subjectCriteriaEvaluation.IsJoinEvaluation,
ReadingEvaluationList= subject.ReadingTaskQuestionAnswerList ReadingEvaluationList = subject.ReadingTaskQuestionAnswerList
.Where(t=>t.ReadingQuestionCriterionTrialId == resultTrialReadingCriterionId && .Where(t => t.ReadingQuestionCriterionTrialId == resultTrialReadingCriterionId &&
questionIdList.Contains(t.ReadingQuestionTrialId) questionIdList.Contains(t.ReadingQuestionTrialId)
&& t.VisitTask.TaskState==TaskState.Effect) && t.VisitTask.TaskState == TaskState.Effect)
.Select(u=>new EvaluationInfo() .Select(u => new EvaluationInfo()
{ {
QuestionId=u.ReadingQuestionTrialId, QuestionId = u.ReadingQuestionTrialId,
Answer=u.Answer, Answer = u.Answer,
FinalTranslateDictionaryCode=u.ReadingQuestionTrial.DictionaryCode FinalTranslateDictionaryCode = u.ReadingQuestionTrial.DictionaryCode
}).ToList() }).ToList()
//EvaluationList=subject
//.SubjectAdditionalEvaluationResult
//.Where(t=>t.IsFinalResult && t.TrialReadingCriterionId==resultTrialReadingCriterionId)
//.Select(u=>new EvaluationInfo()
//{ Answer=u.Answer,FinalTranslateDictionaryCode=u.FinalTranslateDictionaryCode,QuestioName=u.TrialReadingQuestion .QuestionName,QuestioNameEn=u.TrialReadingQuestion.QuestionEnName}).ToList()
}; };
var pageList = await subjectCriteriaEvaluationQueryable.ToPagedListAsync(inQuery.PageIndex, inQuery.PageSize, inQuery.SortField == string.Empty ? nameof(SubjectCriteriaEvaluationView.SubjectCode) : inQuery.SortField, inQuery.Asc); var pageList = await subjectCriteriaEvaluationQueryable.ToPagedListAsync(inQuery.PageIndex, inQuery.PageSize, inQuery.SortField == string.Empty ? nameof(SubjectCriteriaEvaluationView.SubjectCode) : inQuery.SortField, inQuery.Asc);
@ -153,23 +151,29 @@ namespace IRaCIS.Core.Application.Service
if (resultTrialReadingCriterion.ReadingType == ReadingMethod.Double) if (resultTrialReadingCriterion.ReadingType == ReadingMethod.Double)
{ {
if (item.ReadingEvaluationList.Count==2) if (item.ReadingEvaluationList.Count == 2)
{ {
if (item.ReadingEvaluationList.All(t => t.Answer == 1.ToString())) if (item.ReadingEvaluationList.All(t => t.Answer == 1.ToString()))
{ {
item.FinalEvaluationList.Add(new EvaluationInfo() { QuestionId=item.ReadingEvaluationList.First().QuestionId, Answer = ((int)BrainMetastasisResult.Yes).ToString(), FinalTranslateDictionaryCode = nameof(BrainMetastasisResult) item.FinalEvaluationList.Add(new EvaluationInfo()
{
QuestionId = item.ReadingEvaluationList.First().QuestionId,
Answer = ((int)BrainMetastasisResult.Yes).ToString(),
FinalTranslateDictionaryCode = nameof(BrainMetastasisResult)
}); });
} }
else if (item.ReadingEvaluationList.All(t => t.Answer == 0.ToString())) else if (item.ReadingEvaluationList.All(t => t.Answer == 0.ToString()))
{ {
item.FinalEvaluationList.Add(new EvaluationInfo() { item.FinalEvaluationList.Add(new EvaluationInfo()
{
QuestionId = item.ReadingEvaluationList.First().QuestionId, QuestionId = item.ReadingEvaluationList.First().QuestionId,
Answer = ((int)BrainMetastasisResult.No).ToString(), FinalTranslateDictionaryCode = nameof(BrainMetastasisResult) Answer = ((int)BrainMetastasisResult.No).ToString(),
FinalTranslateDictionaryCode = nameof(BrainMetastasisResult)
}); });
} }
else if (item.ReadingEvaluationList.First().Answer != item.ReadingEvaluationList.Last().Answer) else if (item.ReadingEvaluationList.First().Answer != item.ReadingEvaluationList.Last().Answer)
{ {
item.FinalEvaluationList.Add(new EvaluationInfo() { QuestionId = item.ReadingEvaluationList.First().QuestionId, Answer = ((int)BrainMetastasisResult.Maybe).ToString(), FinalTranslateDictionaryCode = nameof(BrainMetastasisResult)}); item.FinalEvaluationList.Add(new EvaluationInfo() { QuestionId = item.ReadingEvaluationList.First().QuestionId, Answer = ((int)BrainMetastasisResult.Maybe).ToString(), FinalTranslateDictionaryCode = nameof(BrainMetastasisResult) });
} }
else else
{ {
@ -179,7 +183,7 @@ namespace IRaCIS.Core.Application.Service
} }
else else
{ {
item.FinalEvaluationList.Add(new EvaluationInfo() { QuestionId= addtionalQustionInfoList.FirstOrDefault()?.QuestionId, Answer = ((int)BrainMetastasisResult.Unknown).ToString(), FinalTranslateDictionaryCode = nameof(BrainMetastasisResult) }); item.FinalEvaluationList.Add(new EvaluationInfo() { QuestionId = addtionalQustionInfoList.FirstOrDefault()?.QuestionId, Answer = ((int)BrainMetastasisResult.Unknown).ToString(), FinalTranslateDictionaryCode = nameof(BrainMetastasisResult) });
} }
} }
else if (resultTrialReadingCriterion.ReadingType == ReadingMethod.Single) else if (resultTrialReadingCriterion.ReadingType == ReadingMethod.Single)
@ -246,7 +250,7 @@ namespace IRaCIS.Core.Application.Service
//找到一致性核查通过的访视 并且没有 自动影像筛选的数据 //找到一致性核查通过的访视 并且没有 自动影像筛选的数据
var subjectVisitIdList = await _subjectVisitRepository.Where(t => t.SubjectId == addOrEditSubjectCriteriaEvaluation.SubjectId && t.CheckState == CheckStateEnum.CVPassed var subjectVisitIdList = await _subjectVisitRepository.Where(t => t.SubjectId == addOrEditSubjectCriteriaEvaluation.SubjectId && t.CheckState == CheckStateEnum.CVPassed
&& !t.SubjectCriteriaEvaluationVisitFilterList.Any(t=>t.TrialReadingCriterionId==addOrEditSubjectCriteriaEvaluation.TrialReadingCriterionId && t.SubjectId==addOrEditSubjectCriteriaEvaluation.SubjectId)).Select(t => t.Id) && !t.SubjectCriteriaEvaluationVisitFilterList.Any(t => t.TrialReadingCriterionId == addOrEditSubjectCriteriaEvaluation.TrialReadingCriterionId && t.SubjectId == addOrEditSubjectCriteriaEvaluation.SubjectId)).Select(t => t.Id)
.ToListAsync(); .ToListAsync();
@ -419,9 +423,11 @@ namespace IRaCIS.Core.Application.Service
select new SubjectCriteriaEvaluationVisitFilterView() select new SubjectCriteriaEvaluationVisitFilterView()
{ {
VisitName = subjectVisit.VisitName, VisitName = subjectVisit.VisitName,
VisitNum=subjectVisit.VisitNum, VisitNum = subjectVisit.VisitNum,
SubjectVisitId = subjectVisit.Id, SubjectVisitId = subjectVisit.Id,
TrialId = subjectVisit.TrialId,
SubjectId = subjectVisit.SubjectId, SubjectId = subjectVisit.SubjectId,
SubjectCode= subjectVisit.Subject.Code,
TrialReadingCriterionId = inQuery.TrialReadingCriterionId, TrialReadingCriterionId = inQuery.TrialReadingCriterionId,
LatestScanDate = subjectVisit.LatestScanDate, LatestScanDate = subjectVisit.LatestScanDate,
EarliestScanDate = subjectVisit.LatestScanDate, EarliestScanDate = subjectVisit.LatestScanDate,
@ -431,14 +437,14 @@ namespace IRaCIS.Core.Application.Service
Id = subjectCriteriaEvaluationVisitFilter.Id, Id = subjectCriteriaEvaluationVisitFilter.Id,
CreateTime = subjectCriteriaEvaluationVisitFilter.CreateTime, CreateTime = subjectCriteriaEvaluationVisitFilter.CreateTime,
CreateUserId=subjectCriteriaEvaluationVisitFilter.CreateUserId, CreateUserId = subjectCriteriaEvaluationVisitFilter.CreateUserId,
UpdateTime= subjectCriteriaEvaluationVisitFilter.UpdateTime, UpdateTime = subjectCriteriaEvaluationVisitFilter.UpdateTime,
UpdateUserId= subjectCriteriaEvaluationVisitFilter.UpdateUserId, UpdateUserId = subjectCriteriaEvaluationVisitFilter.UpdateUserId,
}; };
return await subjectCriteriaEvaluationVisitFilterQueryable.OrderBy(t=>t.VisitNum).ToListAsync(); return await subjectCriteriaEvaluationVisitFilterQueryable.OrderBy(t => t.VisitNum).ToListAsync();
} }
/// <summary> /// <summary>
@ -467,28 +473,20 @@ namespace IRaCIS.Core.Application.Service
&& t.TrialReadingCriterionId == batchGenerateTaskCommand.TrialReadingCriterionId && t.TrialReadingCriterionId == batchGenerateTaskCommand.TrialReadingCriterionId
&& batchGenerateTaskCommand.SubjectVisitIdList.Contains(t.SubjectVisitId), u => new SubjectCriteriaEvaluationVisitFilter { IsGeneratedTask = true }); && batchGenerateTaskCommand.SubjectVisitIdList.Contains(t.SubjectVisitId), u => new SubjectCriteriaEvaluationVisitFilter { IsGeneratedTask = true });
await _IVisitTaskHelpeService.BaseCritrionGenerateVisitTask(batchGenerateTaskCommand.TrialId, batchGenerateTaskCommand.TrialReadingCriterionId, true, batchGenerateTaskCommand.SubjectVisitIdList); //自动生成任务
var idList = batchGenerateTaskCommand.SubjectVisitIdList.Select(t => (Guid?)t).ToList();
//存在任务的访视
var haveGenerateVisitIdList = await _repository.Where<VisitTask>(t => idList.Contains(t.SourceSubjectVisitId) && t.TrialReadingCriterionId == batchGenerateTaskCommand.TrialReadingCriterionId && t.TaskState == TaskState.Effect)
.Select(t => t.SourceSubjectVisitId).ToListAsync();
var generateVisitIdList = idList.Except(haveGenerateVisitIdList);
await _IVisitTaskHelpeService.BaseCritrionGenerateVisitTask(batchGenerateTaskCommand.TrialId, batchGenerateTaskCommand.TrialReadingCriterionId, true, generateVisitIdList.Select(t => (Guid)t).ToList());
} }
///// <summary>
///// 评估访视 判断结果 影像筛选状态 手动添加/编辑接口
///// </summary>
///// <param name="addOrEditSubjectCriteriaEvaluationVisitFilter"></param>
///// <returns></returns>
//public async Task<IResponseOutput> AddOrUpdateSubjectCriteriaEvaluationVisitFilter(SubjectCriteriaEvaluationVisitFilterAddOrEdit addOrEditSubjectCriteriaEvaluationVisitFilter)
//{
// var entity = await _subjectCriteriaEvaluationVisitFilterRepository.InsertOrUpdateAsync(addOrEditSubjectCriteriaEvaluationVisitFilter, true);
// return ResponseOutput.Ok(entity.Id.ToString());
//}
/// <summary> /// <summary>
/// 获取dicom 访视检查列表 (序列的 Id CreateTime 是否为空 代表了记录是否创建、IsConfirmed 代表 保存 确认) /// 获取dicom 访视检查列表 (序列的 Id CreateTime 是否为空 代表了记录是否创建、IsConfirmed 代表 保存 确认)
/// </summary> /// </summary>
@ -516,7 +514,7 @@ namespace IRaCIS.Core.Application.Service
SeriesNumber = series.SeriesNumber, SeriesNumber = series.SeriesNumber,
SeriesTime = series.SeriesTime, SeriesTime = series.SeriesTime,
InstanceCount=series.InstanceCount, InstanceCount = series.InstanceCount,
StudyTime = series.DicomStudy.StudyTime, StudyTime = series.DicomStudy.StudyTime,
StudyId = series.StudyId, StudyId = series.StudyId,
SeriesId = series.Id, SeriesId = series.Id,
@ -524,7 +522,7 @@ namespace IRaCIS.Core.Application.Service
TrialReadingCriterionId = inQuery.TrialReadingCriterionId, TrialReadingCriterionId = inQuery.TrialReadingCriterionId,
IsReading=visitStudyFilter.IsReading, IsReading = visitStudyFilter.IsReading,
Id = visitStudyFilter.Id, Id = visitStudyFilter.Id,
CreateTime = visitStudyFilter.CreateTime, CreateTime = visitStudyFilter.CreateTime,
IsConfirmed = visitStudyFilter.IsConfirmed, IsConfirmed = visitStudyFilter.IsConfirmed,
@ -576,13 +574,122 @@ namespace IRaCIS.Core.Application.Service
//[HttpDelete("{subjectCriteriaEvaluationId:guid}")] /// <summary>
// public async Task<IResponseOutput> DeleteSubjectCriteriaEvaluation(Guid subjectCriteriaEvaluationId) /// 附加评估标准 PM 退回某一访视 影响任务列表
//{ /// </summary>
// var success = await _subjectCriteriaEvaluationRepository.DeleteFromQueryAsync(t => t.Id == subjectCriteriaEvaluationId,true); /// <param name="command"></param>
// return ResponseOutput.Ok(); /// <returns></returns>
//} [HttpPost]
public async Task<List<InfluenceTaskInfo>> GetCriteriaVisitBackInfluenceTaskList(CriteriaVisitBackCommand command)
{
var filterExpression = await GetTaskExpressionAsync(command);
var list = await _visitTaskRepository.Where(filterExpression)
.OrderBy(t => t.VisitTaskNum).ProjectTo<InfluenceTaskInfo>(_mapper.ConfigurationProvider).ToListAsync();
return list;
}
private async Task<Expression<Func<VisitTask, bool>>> GetTaskExpressionAsync(CriteriaVisitBackCommand command)
{
var criterionConfig = (await _trialReadingCriterionRepository.Where(x => x.Id == command.TrialReadingCriterionId).Select(x => new { x.ReadingTool, x.IsReadingTaskViewInOrder }).FirstOrDefaultAsync()).IfNullThrowException();
var subjectVisit = await _subjectVisitRepository.FirstOrDefaultAsync(t => t.Id == command.SubjectVisitId);
//仅仅影响该标准自己的任务
Expression<Func<VisitTask, bool>> filterExpression = t => t.TrialId == command.TrialId && t.SubjectId == command.SubjectId && t.TaskState == TaskState.Effect && t.TaskAllocationState == TaskAllocationState.Allocated
&& t.TrialReadingCriterionId == command.TrialReadingCriterionId;
//有序
if (criterionConfig.IsReadingTaskViewInOrder)
{
filterExpression = filterExpression.And(t => t.VisitTaskNum >= subjectVisit.VisitNum);
}
else
{
filterExpression = filterExpression.And(t => t.VisitTaskNum == subjectVisit.VisitNum);
}
return filterExpression;
}
/// <summary>
/// 退回任务
/// </summary>
/// <param name="command"></param>
/// <returns></returns>
public async Task ConfirmBackCriteriaVisitTask(CriteriaVisitBackCommand command)
{
var filterExpression = await GetTaskExpressionAsync(command);
var influenceTaskList = await _visitTaskRepository.Where(filterExpression, true).ToListAsync();
var subjectVisit = await _subjectVisitRepository.FindAsync(command.SubjectVisitId);
foreach (var influenceTask in influenceTaskList)
{
//申请的访视 要不是重阅重置,要不就是失效 不会存在取消分配
if (influenceTask.ReadingCategory == ReadingCategory.Visit && influenceTask.VisitTaskNum != subjectVisit.VisitNum)
{
//后续访视处理访视
if (influenceTask.ReadingTaskState == ReadingTaskState.HaveSigned)
{
influenceTask.TaskState = TaskState.HaveReturned;
} }
else if (influenceTask.ReadingTaskState == ReadingTaskState.Reading)
{
influenceTask.TaskState = TaskState.Adbandon;
}
else
{
influenceTask.DoctorUserId = null;
influenceTask.AllocateTime = null;
influenceTask.SuggesteFinishedTime = null;
influenceTask.TaskAllocationState = TaskAllocationState.NotAllocate;
}
}
else
{
//申请的访视 全局肿瘤学
if (influenceTask.ReadingTaskState == ReadingTaskState.HaveSigned)
{
influenceTask.TaskState = TaskState.HaveReturned;
}
else
{
influenceTask.TaskState = TaskState.Adbandon;
}
}
}
var taskIdList = influenceTaskList.Select(t => t.Id).ToList();
var subjectVisitIdLsit = influenceTaskList.Where(t => t.SourceSubjectVisitId != null).Select(t => t.SourceSubjectVisitId).ToList();
//医学审核任务失效
await _taskMedicalReviewRepository.UpdatePartialFromQueryAsync(t => taskIdList.Contains(t.VisitTaskId) && t.AuditState != MedicalReviewAuditState.HaveSigned, u => new TaskMedicalReview() { IsInvalid = true });
//将筛选的访视 序列状态重置
//重置访视数据
await _subjectCriteriaEvaluationVisitFilterRepository.BatchUpdateNoTrackingAsync(t => t.TrialReadingCriterionId== command.TrialReadingCriterionId && t.SubjectId == command.SubjectId && subjectVisitIdLsit.Contains(t.SubjectVisitId) ,
t=>new SubjectCriteriaEvaluationVisitFilter()
{
ImageFilterState=ImageFilterState.None,
ImageDeterminationResultState=ImageDeterminationResultState.None
});
//删除序列数据
await _subjectCriteriaEvaluationVisitStudyFilterRepository.BatchDeleteNoTrackingAsync(t => t.TrialReadingCriterionId == command.TrialReadingCriterionId && subjectVisitIdLsit.Contains(t.SubjectVisitId));
await _visitTaskRepository.SaveChangesAsync();
}
}
} }

View File

@ -30,6 +30,9 @@ namespace IRaCIS.Core.Application.Services
private readonly IRepository<ReadingPeriodPlan> _readingPeriodPlanRepository; private readonly IRepository<ReadingPeriodPlan> _readingPeriodPlanRepository;
private readonly IRepository<Subject> _subjectRepository; private readonly IRepository<Subject> _subjectRepository;
private readonly IRepository<ReadingQuestionCriterionTrial> _trialReadingCriterionRepository;
private readonly IRepository<SubjectCriteriaEvaluationVisitStudyFilter> _subjectCriteriaEvaluationVisitStudyFilterRepository;
public SubjectVisitService(IRepository<SubjectVisit> subjectVisitRepository, public SubjectVisitService(IRepository<SubjectVisit> subjectVisitRepository,
IRepository<ClinicalDataTrialSet> clinicalDataTrialSetRepository, IRepository<ClinicalDataTrialSet> clinicalDataTrialSetRepository,
IRepository<ReadingClinicalData> readingClinicalDataRepository, IRepository<ReadingClinicalData> readingClinicalDataRepository,
@ -42,7 +45,11 @@ namespace IRaCIS.Core.Application.Services
IRepository<ReadingTableAnswerRowInfo> readingTableAnswerRowInfoRepository, IRepository<ReadingTableAnswerRowInfo> readingTableAnswerRowInfoRepository,
IRepository<NoneDicomStudyFile> noneDicomStudyFileRepository, IRepository<NoneDicomStudyFile> noneDicomStudyFileRepository,
IRepository<ReadingPeriodPlan> readingPeriodPlanRepository, IRepository<ReadingPeriodPlan> readingPeriodPlanRepository,
IRepository<Subject> subjectRepository) IRepository<Subject> subjectRepository,
IRepository<ReadingQuestionCriterionTrial> trialReadingCriterionRepository,
IRepository<SubjectCriteriaEvaluationVisitStudyFilter> subjectCriteriaEvaluationVisitStudyFilterRepository
)
{ {
_subjectVisitRepository = subjectVisitRepository; _subjectVisitRepository = subjectVisitRepository;
this._clinicalDataTrialSetRepository = clinicalDataTrialSetRepository; this._clinicalDataTrialSetRepository = clinicalDataTrialSetRepository;
@ -57,6 +64,10 @@ namespace IRaCIS.Core.Application.Services
this._noneDicomStudyFileRepository = noneDicomStudyFileRepository; this._noneDicomStudyFileRepository = noneDicomStudyFileRepository;
this._readingPeriodPlanRepository = readingPeriodPlanRepository; this._readingPeriodPlanRepository = readingPeriodPlanRepository;
_subjectRepository = subjectRepository; _subjectRepository = subjectRepository;
_trialReadingCriterionRepository = trialReadingCriterionRepository;
_subjectCriteriaEvaluationVisitStudyFilterRepository = subjectCriteriaEvaluationVisitStudyFilterRepository;
} }
[HttpPost] [HttpPost]
@ -411,7 +422,13 @@ namespace IRaCIS.Core.Application.Services
} }
var studyList = await _repository.Where<DicomStudy>(t => t.TrialId == indto.TrialId && t.SubjectVisitId == indto.SujectVisitId).Select(k => new VisitStudyDTO() //如果是手动生成的标准,需要过滤检查和序列数据
var isManualGenerate = await _trialReadingCriterionRepository.AnyAsync(t => t.Id == taskInfo.TrialReadingCriterionId && t.IsAutoCreate == false);
var studyList = await _repository.Where<DicomStudy>(t => t.TrialId == indto.TrialId && t.SubjectVisitId == indto.SujectVisitId)
.WhereIf(isManualGenerate,t=>t.SubjectCriteriaEvaluationVisitStudyFilterList.Any(t=>t.TrialReadingCriterionId==taskInfo.TrialReadingCriterionId && t.IsConfirmed &&t.IsReading ))
.Select(k => new VisitStudyDTO()
{ {
InstanceCount = k.InstanceCount, InstanceCount = k.InstanceCount,
Modalities = k.Modalities, Modalities = k.Modalities,
@ -427,7 +444,10 @@ namespace IRaCIS.Core.Application.Services
List<DicomSeriesDTO> seriesLists = await _repository.Where<DicomSeries>(s => studyIds.Contains(s.StudyId) && s.IsReading).OrderBy(s => s.SeriesNumber). List<DicomSeriesDTO> seriesLists = await _repository.Where<DicomSeries>(s => studyIds.Contains(s.StudyId) /*&& s.IsReading*/)
.WhereIf(isManualGenerate==false, t => t.IsReading)
.WhereIf(isManualGenerate, t => t.SubjectCriteriaEvaluationVisitStudyFilterList.Any(t => t.TrialReadingCriterionId == taskInfo.TrialReadingCriterionId && t.IsConfirmed && t.IsReading))
.OrderBy(s => s.SeriesNumber).
ThenBy(s => s.SeriesTime) ThenBy(s => s.SeriesTime)
.ProjectTo<DicomSeriesDTO>(_mapper.ConfigurationProvider).ToListAsync(); .ProjectTo<DicomSeriesDTO>(_mapper.ConfigurationProvider).ToListAsync();
foreach (var t in studyList) foreach (var t in studyList)
@ -533,7 +553,6 @@ namespace IRaCIS.Core.Application.Services
result = result.Where(x => x.SeriesCount > 0).ToList(); result = result.Where(x => x.SeriesCount > 0).ToList();
return result; return result;
//return ResponseOutput.Ok(studyList.Where(t => t.SeriesList.Count > 0).ToList());
} }

View File

@ -15,6 +15,9 @@ namespace IRaCIS.Core.Domain.Models
[JsonIgnore] [JsonIgnore]
public List<DicomInstance> DicomInstanceList { get; set; } public List<DicomInstance> DicomInstanceList { get; set; }
[JsonIgnore]
public List<SubjectCriteriaEvaluationVisitStudyFilter> SubjectCriteriaEvaluationVisitStudyFilterList { get; set; }
[DatabaseGenerated(DatabaseGeneratedOption.Identity)] [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public Guid SeqId { get; set; } public Guid SeqId { get; set; }

View File

@ -19,6 +19,9 @@ namespace IRaCIS.Core.Domain.Models
[JsonIgnore] [JsonIgnore]
public Site Site { get; set; } public Site Site { get; set; }
[JsonIgnore]
public List<SubjectCriteriaEvaluationVisitStudyFilter> SubjectCriteriaEvaluationVisitStudyFilterList { get; set; }
[DatabaseGenerated(DatabaseGeneratedOption.Identity)] [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public Guid SeqId { get; set; } public Guid SeqId { get; set; }

View File

@ -20,6 +20,10 @@ namespace IRaCIS.Core.Domain.Models
[JsonIgnore] [JsonIgnore]
public Subject subject { get; set; } public Subject subject { get; set; }
[JsonIgnore]
[ForeignKey("TrialReadingCriterionId")]
public ReadingQuestionCriterionTrial TrialReadingCriterion { get; set; }
/// <summary> /// <summary>
/// SubjectId /// SubjectId
/// </summary> /// </summary>

View File

@ -16,9 +16,15 @@ namespace IRaCIS.Core.Domain.Models
public class SubjectCriteriaEvaluationVisitFilter : Entity, IAuditUpdate, IAuditAdd public class SubjectCriteriaEvaluationVisitFilter : Entity, IAuditUpdate, IAuditAdd
{ {
[JsonIgnore]
[ForeignKey("TrialReadingCriterionId")]
public ReadingQuestionCriterionTrial TrialReadingCriterion { get; set; }
[JsonIgnore]
public SubjectCriteriaEvaluation SubjectCriteriaEvaluation { get; set; } public SubjectCriteriaEvaluation SubjectCriteriaEvaluation { get; set; }
[JsonIgnore]
public SubjectVisit SubjectVisit { get; set; }
public Guid SubjectId { get; set; } public Guid SubjectId { get; set; }

View File

@ -15,7 +15,9 @@ namespace IRaCIS.Core.Domain.Models
[Table("SubjectCriteriaEvaluationVisitStudyFilter")] [Table("SubjectCriteriaEvaluationVisitStudyFilter")]
public class SubjectCriteriaEvaluationVisitStudyFilter : Entity, IAuditUpdate, IAuditAdd public class SubjectCriteriaEvaluationVisitStudyFilter : Entity, IAuditUpdate, IAuditAdd
{ {
[JsonIgnore]
[ForeignKey("TrialReadingCriterionId")]
public ReadingQuestionCriterionTrial TrialReadingCriterion { get; set; }
[JsonIgnore] [JsonIgnore]
public SubjectVisit SubjectVisit { get; set; } public SubjectVisit SubjectVisit { get; set; }