Merge branch 'master' of http://192.168.1.2:8033/IRaCIS_Core_Api
This commit is contained in:
@@ -2197,16 +2197,22 @@
|
||||
<param name="inQuery"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:IRaCIS.Core.Application.Service.SubjectCriteriaEvaluationService.AddOrUpdateSubjectCriteriaEvaluation(IRaCIS.Core.Application.ViewModel.SubjectCriteriaEvaluationAddOrEdit)">
|
||||
<member name="M:IRaCIS.Core.Application.Service.SubjectCriteriaEvaluationService.BatchAddOrUpdateSubjectCriteriaEvaluation(System.Collections.Generic.List{IRaCIS.Core.Application.ViewModel.SubjectCriteriaEvaluationAddOrEdit})">
|
||||
<summary>
|
||||
添加 编辑 是否参与评估
|
||||
</summary>
|
||||
<param name="addOrEditSubjectCriteriaEvaluation"></param>
|
||||
<param name="addOrEditSubjectCriteriaEvaluationList"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:IRaCIS.Core.Application.Service.SubjectCriteriaEvaluationService.AutoSubjectCriteriaEvaluationVisitFilter(System.Guid,System.Guid,System.Guid)">
|
||||
<summary>
|
||||
自动访视筛选 (针对单一访视,重新筛选一遍,可能不存在该接口,仅仅留存)
|
||||
</summary>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:IRaCIS.Core.Application.Service.SubjectCriteriaEvaluationService.GetSubjectCriteriaEvaluationVisitFilterList(IRaCIS.Core.Application.ViewModel.SubjectCriteriaEvaluationVisitFilterQuery)">
|
||||
<summary>
|
||||
评估访视筛选列表
|
||||
评估访视筛选列表(一致性核查通过的访视都会出现 根据条件筛选)
|
||||
</summary>
|
||||
<param name="inQuery"></param>
|
||||
<returns></returns>
|
||||
@@ -2218,16 +2224,15 @@
|
||||
<param name="inQuery"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:IRaCIS.Core.Application.Service.SubjectCriteriaEvaluationService.AddOrUpdateSubjectCriteriaEvaluationVisitFilter(IRaCIS.Core.Application.ViewModel.SubjectCriteriaEvaluationVisitFilterAddOrEdit)">
|
||||
<member name="M:IRaCIS.Core.Application.Service.SubjectCriteriaEvaluationService.BatchGenerateTask(IRaCIS.Core.Application.ViewModel.BatchGenerateTaskCommand)">
|
||||
<summary>
|
||||
评估访视 判断结果 影像筛选状态 手动添加/编辑接口
|
||||
批量勾选 生成该标准的任务
|
||||
</summary>
|
||||
<param name="addOrEditSubjectCriteriaEvaluationVisitFilter"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:IRaCIS.Core.Application.Service.SubjectCriteriaEvaluationService.GetVisitStudyAndSeriesList(IRaCIS.Core.Application.ViewModel.VisitStudyAndSeriesQuery)">
|
||||
<summary>
|
||||
获取dicom 访视检查列表 (序列的 CreateTime 是否为空 代表了记录是否创建、IsConfirmed 代表 保存 确认)
|
||||
获取dicom 访视检查列表 (序列的 Id CreateTime 是否为空 代表了记录是否创建、IsConfirmed 代表 保存 确认)
|
||||
</summary>
|
||||
<returns></returns>
|
||||
</member>
|
||||
|
||||
@@ -15,6 +15,6 @@ namespace IRaCIS.Core.Application.Service
|
||||
|
||||
Task AddTaskAsync(GenerateTaskCommand generateTaskCommand);
|
||||
|
||||
Task BaseCritrionGenerateVisitTask(Guid trialId, Guid confirmedTrialReadingCriterionId);
|
||||
Task BaseCritrionGenerateVisitTask(Guid trialId, Guid confirmedTrialReadingCriterionId,bool? isManualSelectVisit=null,List<Guid>? subjectVisitIdList=null);
|
||||
}
|
||||
}
|
||||
@@ -98,12 +98,21 @@ namespace IRaCIS.Core.Application.Service
|
||||
|
||||
}
|
||||
|
||||
//基于标准签名 产生任务
|
||||
public async Task BaseCritrionGenerateVisitTask(Guid trialId, Guid confirmedTrialReadingCriterionId)
|
||||
//基于标准签名 产生任务 (或者手动选择某些访视生成该标准的任务)
|
||||
public async Task BaseCritrionGenerateVisitTask(Guid trialId, Guid confirmedTrialReadingCriterionId, bool? isManualSelectVisit = null, List<Guid>? subjectVisitIdList = null)
|
||||
{
|
||||
//找到一致性核查通过且没有产生任务的访视
|
||||
var needGenerateVisit = await _subjectVisitRepository.Where(t => t.TrialId == trialId && t.CheckState == CheckStateEnum.CVPassed &&
|
||||
!t.VisitTaskList.Any(u => u.TrialReadingCriterionId == confirmedTrialReadingCriterionId && u.SourceSubjectVisitId == t.Id && u.TaskState==TaskState.Effect && u.IsAnalysisCreate==false)).ToListAsync();
|
||||
var needGenerateVisit = new List<SubjectVisit>();
|
||||
|
||||
if (isManualSelectVisit == null)
|
||||
{
|
||||
//找到一致性核查通过且没有产生任务的访视
|
||||
needGenerateVisit = await _subjectVisitRepository.Where(t => t.TrialId == trialId && t.CheckState == CheckStateEnum.CVPassed &&
|
||||
!t.VisitTaskList.Any(u => u.TrialReadingCriterionId == confirmedTrialReadingCriterionId && u.SourceSubjectVisitId == t.Id && u.TaskState == TaskState.Effect && u.IsAnalysisCreate == false)).ToListAsync();
|
||||
}
|
||||
else
|
||||
{
|
||||
needGenerateVisit = await _subjectVisitRepository.Where(t=> subjectVisitIdList.Contains(t.Id)).ToListAsync();
|
||||
}
|
||||
|
||||
|
||||
var trialReadingCriterionConfig = await _trialReadingCriterionRepository.Where(t => t.Id == confirmedTrialReadingCriterionId).Select(t => new { TrialReadingCriterionId = t.Id, t.ReadingTool, t.ReadingType, t.IsReadingTaskViewInOrder, t.IsFollowVisitAutoAssign, t.IsFollowGlobalVisitAutoAssign, t.FollowGlobalVisitAutoAssignDefaultState, t.FollowVisitAutoAssignDefaultState, t.TaskAllocateObjEnum, t.CriterionType }).FirstOrDefaultAsync();
|
||||
@@ -326,6 +335,7 @@ namespace IRaCIS.Core.Application.Service
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
private bool IsNeedClinicalDataSign(ReadingCategory readingCategory, bool isbaseLine, Guid trialReadingCriterionId, List<ClinicalDataTrialSet> trialClinicalDataSetList)
|
||||
{
|
||||
|
||||
+22
-2
@@ -11,8 +11,11 @@ using System.ComponentModel.DataAnnotations;
|
||||
namespace IRaCIS.Core.Application.ViewModel
|
||||
{
|
||||
/// <summary> SubjectCriteriaEvaluationView 列表视图模型 </summary>
|
||||
public class SubjectCriteriaEvaluationView : SubjectCriteriaEvaluationAddOrEdit
|
||||
public class SubjectCriteriaEvaluationView
|
||||
{
|
||||
public Guid? Id { get; set; }
|
||||
public Guid SubjectId { get; set; }
|
||||
public Guid TrialReadingCriterionId { get; set; }
|
||||
|
||||
public DateTime? CreateTime { get; set; }
|
||||
public Guid? CreateUserId { get; set; }
|
||||
@@ -22,12 +25,26 @@ namespace IRaCIS.Core.Application.ViewModel
|
||||
|
||||
public bool? IsImageFiltering { get; set; }
|
||||
|
||||
public new bool? IsJoinEvaluation { get; set; }
|
||||
public bool? IsJoinEvaluation { get; set; }
|
||||
|
||||
public string SubjectCode { get; set; }
|
||||
|
||||
public string TrialSiteCode { get; set; }
|
||||
public SubjectStatus SubjectStatus { get; set; }
|
||||
|
||||
public List<EvaluationInfo> EvaluationList { get; set; }
|
||||
}
|
||||
|
||||
|
||||
public class EvaluationInfo
|
||||
{
|
||||
public string QuestioName { get; set; }
|
||||
|
||||
public string QuestioNameEn { get; set; }
|
||||
|
||||
public string Answer { get; set; }
|
||||
|
||||
public string FinalTranslateDictionaryCode { get; set; } = string.Empty;
|
||||
}
|
||||
|
||||
|
||||
@@ -35,6 +52,9 @@ namespace IRaCIS.Core.Application.ViewModel
|
||||
///<summary>SubjectCriteriaEvaluationQuery 列表查询参数模型</summary>
|
||||
public class SubjectCriteriaEvaluationQuery : PageInput
|
||||
{
|
||||
[NotDefault]
|
||||
public Guid TrialId { get; set; }
|
||||
|
||||
[NotDefault]
|
||||
public Guid TrialReadingCriterionId { get; set; }
|
||||
public string SubjectCode { get; set; } = string.Empty;
|
||||
|
||||
+21
-4
@@ -18,8 +18,8 @@ namespace IRaCIS.Core.Application.ViewModel
|
||||
public Guid? UpdateUserId { get; set; }
|
||||
public DateTime? UpdateTime { get; set; }
|
||||
|
||||
public new int? ImageFilterState { get; set; }
|
||||
public new int? ImageDeterminationResultState { get; set; }
|
||||
public new ImageFilterState? ImageFilterState { get; set; }
|
||||
public new ImageDeterminationResultState? ImageDeterminationResultState { get; set; }
|
||||
public bool? IsGeneratedTask { get; set; }
|
||||
|
||||
|
||||
@@ -39,9 +39,9 @@ namespace IRaCIS.Core.Application.ViewModel
|
||||
public Guid SubjectId { get; set; }
|
||||
|
||||
|
||||
public int? ImageFilterState { get; set; }
|
||||
public ImageFilterState? ImageFilterState { get; set; }
|
||||
|
||||
public int? ImageDeterminationResultState { get; set; }
|
||||
public ImageDeterminationResultState? ImageDeterminationResultState { get; set; }
|
||||
|
||||
public bool? IsGeneratedTask { get; set; }
|
||||
}
|
||||
@@ -56,6 +56,21 @@ namespace IRaCIS.Core.Application.ViewModel
|
||||
public Guid SubjectId { get; set; }
|
||||
}
|
||||
|
||||
public class BatchGenerateTaskCommand
|
||||
{
|
||||
[NotDefault]
|
||||
public Guid TrialReadingCriterionId { get; set; }
|
||||
|
||||
[NotDefault]
|
||||
public Guid TrialId { get; set; }
|
||||
|
||||
[NotDefault]
|
||||
public Guid SubjectId { get; set; }
|
||||
|
||||
|
||||
public List<Guid> SubjectVisitIdList { get; set; }
|
||||
}
|
||||
|
||||
public class VisitStudyAndSeriesQuery
|
||||
{
|
||||
[NotDefault]
|
||||
@@ -174,6 +189,8 @@ namespace IRaCIS.Core.Application.ViewModel
|
||||
public Guid? SubjectVisitId { get; set; }
|
||||
|
||||
public bool? IsConfirmed { get; set; }
|
||||
|
||||
public bool? IsReading { get; set; }
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
+2
@@ -34,6 +34,8 @@ namespace IRaCIS.Core.Application.ViewModel
|
||||
public Guid SubjectVisitId { get; set; }
|
||||
public Guid StudyId { get; set; }
|
||||
public Guid SeriesId { get; set; }
|
||||
|
||||
public bool IsConfirmed { get; set; }
|
||||
}
|
||||
|
||||
|
||||
|
||||
+4
-4
@@ -15,11 +15,11 @@ namespace IRaCIS.Core.Application.Interfaces
|
||||
|
||||
|
||||
Task<PageOutput<SubjectCriteriaEvaluationView>> GetSubjectCriteriaEvaluationList(SubjectCriteriaEvaluationQuery inQuery);
|
||||
|
||||
Task<IResponseOutput> AddOrUpdateSubjectCriteriaEvaluation(SubjectCriteriaEvaluationAddOrEdit addOrEditSubjectCriteriaEvaluation);
|
||||
|
||||
//Task<IResponseOutput> DeleteSubjectCriteriaEvaluation(Guid subjectCriteriaEvaluationId);
|
||||
//Task<IResponseOutput> AddOrUpdateSubjectCriteriaEvaluation(SubjectCriteriaEvaluationAddOrEdit addOrEditSubjectCriteriaEvaluation);
|
||||
|
||||
|
||||
//Task<IResponseOutput> DeleteSubjectCriteriaEvaluation(Guid subjectCriteriaEvaluationId);
|
||||
|
||||
Task AutoSubjectCriteriaEvaluationVisitFilter(Guid subjectId, Guid subjectVisitId, Guid trialReadingCriterionId);
|
||||
}
|
||||
}
|
||||
|
||||
+215
-20
@@ -11,6 +11,10 @@ using IRaCIS.Core.Application.ViewModel;
|
||||
using IRaCIS.Core.Application.Contracts.DTO;
|
||||
using System.Linq;
|
||||
using System.Linq.Dynamic.Core;
|
||||
using IRaCIS.Core.Domain.Share;
|
||||
using IRaCIS.Core.Application.Contracts;
|
||||
using DocumentFormat.OpenXml.Spreadsheet;
|
||||
using Panda.DynamicWebApi.Attributes;
|
||||
|
||||
namespace IRaCIS.Core.Application.Service
|
||||
{
|
||||
@@ -27,17 +31,23 @@ namespace IRaCIS.Core.Application.Service
|
||||
private readonly IRepository<SubjectCriteriaEvaluationVisitFilter> _subjectCriteriaEvaluationVisitFilterRepository;
|
||||
private readonly IRepository<SubjectCriteriaEvaluationVisitStudyFilter> _subjectCriteriaEvaluationVisitStudyFilterRepository;
|
||||
|
||||
private readonly IRepository<ReadingQuestionCriterionTrial> _trialReadingCriterionRepository;
|
||||
|
||||
private readonly IVisitTaskHelpeService _IVisitTaskHelpeService;
|
||||
|
||||
public SubjectCriteriaEvaluationService(IRepository<SubjectCriteriaEvaluation> subjectCriteriaEvaluationRepository, IRepository<Subject> subjectRepository,
|
||||
IRepository<SubjectCriteriaEvaluationVisitFilter> subjectCriteriaEvaluationVisitFilterRepository, IRepository<SubjectVisit> subjectVisitRepository,
|
||||
IRepository<SubjectCriteriaEvaluationVisitStudyFilter> subjectCriteriaEvaluationVisitStudyFilterRepository)
|
||||
IRepository<SubjectCriteriaEvaluationVisitStudyFilter> subjectCriteriaEvaluationVisitStudyFilterRepository,
|
||||
IRepository<ReadingQuestionCriterionTrial> trialReadingCriterionRepository, IVisitTaskHelpeService IVisitTaskHelpeService)
|
||||
{
|
||||
_subjectCriteriaEvaluationRepository = subjectCriteriaEvaluationRepository;
|
||||
_subjectRepository = subjectRepository;
|
||||
_subjectCriteriaEvaluationVisitFilterRepository = subjectCriteriaEvaluationVisitFilterRepository;
|
||||
_subjectVisitRepository = subjectVisitRepository;
|
||||
_subjectCriteriaEvaluationVisitStudyFilterRepository = subjectCriteriaEvaluationVisitStudyFilterRepository;
|
||||
_trialReadingCriterionRepository = trialReadingCriterionRepository;
|
||||
|
||||
_IVisitTaskHelpeService = IVisitTaskHelpeService;
|
||||
|
||||
}
|
||||
|
||||
@@ -51,7 +61,20 @@ namespace IRaCIS.Core.Application.Service
|
||||
public async Task<PageOutput<SubjectCriteriaEvaluationView>> GetSubjectCriteriaEvaluationList(SubjectCriteriaEvaluationQuery inQuery)
|
||||
{
|
||||
|
||||
var subjectCriteriaEvaluationQueryable = from subject in _subjectRepository
|
||||
var trialReadingCritionList = _trialReadingCriterionRepository.Where(t => t.TrialId == inQuery.TrialId).ToList();
|
||||
|
||||
var resultTrialReadingCriterionId = Guid.Empty;
|
||||
|
||||
//BM 需要找基线 两个人做的结果
|
||||
if (trialReadingCritionList.First(t => t.Id == inQuery.TrialReadingCriterionId).CriterionType == CriterionType.RECIST1Pointt1_MB)
|
||||
{
|
||||
|
||||
resultTrialReadingCriterionId = trialReadingCritionList.First(t => t.CriterionType == CriterionType.RECIST1Point1).Id;
|
||||
}
|
||||
|
||||
|
||||
|
||||
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.TrialSiteCode), t => t.TrialSite.TrialSiteCode.Contains(inQuery.TrialSiteCode))
|
||||
.WhereIf(inQuery.SubjectStatus != null, t => t.Status == inQuery.SubjectStatus)
|
||||
@@ -69,8 +92,12 @@ namespace IRaCIS.Core.Application.Service
|
||||
Id = subjectCriteriaEvaluation.Id,
|
||||
TrialReadingCriterionId = inQuery.TrialReadingCriterionId,
|
||||
|
||||
IsImageFiltering = subjectCriteriaEvaluation.IsImageFiltering,
|
||||
IsImageFiltering = subjectCriteriaEvaluation.SubjectCriteriaEvaluationVisitFilterList.Any(t => t.ImageFilterState == ImageFilterState.None),
|
||||
|
||||
IsJoinEvaluation = subjectCriteriaEvaluation.IsJoinEvaluation,
|
||||
|
||||
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()
|
||||
};
|
||||
|
||||
|
||||
@@ -86,32 +113,182 @@ namespace IRaCIS.Core.Application.Service
|
||||
/// <summary>
|
||||
/// 添加 编辑 是否参与评估
|
||||
/// </summary>
|
||||
/// <param name="addOrEditSubjectCriteriaEvaluation"></param>
|
||||
/// <param name="addOrEditSubjectCriteriaEvaluationList"></param>
|
||||
/// <returns></returns>
|
||||
public async Task<IResponseOutput> AddOrUpdateSubjectCriteriaEvaluation(SubjectCriteriaEvaluationAddOrEdit addOrEditSubjectCriteriaEvaluation)
|
||||
[UnitOfWork]
|
||||
public async Task<IResponseOutput> BatchAddOrUpdateSubjectCriteriaEvaluation(List<SubjectCriteriaEvaluationAddOrEdit> addOrEditSubjectCriteriaEvaluationList)
|
||||
{
|
||||
// 在此处拷贝automapper 映射
|
||||
|
||||
var entity = await _subjectCriteriaEvaluationRepository.InsertOrUpdateAsync(addOrEditSubjectCriteriaEvaluation, true);
|
||||
foreach (var addOrEditSubjectCriteriaEvaluation in addOrEditSubjectCriteriaEvaluationList)
|
||||
{
|
||||
|
||||
|
||||
if (addOrEditSubjectCriteriaEvaluation.Id != null)
|
||||
{
|
||||
var entity = await _subjectCriteriaEvaluationRepository.InsertFromDTOAsync(addOrEditSubjectCriteriaEvaluation);
|
||||
|
||||
//找到一致性核查通过的访视 并且没有 自动影像筛选的数据
|
||||
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)
|
||||
.ToListAsync();
|
||||
|
||||
|
||||
foreach (var subjectVisitId in subjectVisitIdList)
|
||||
{
|
||||
await AutoSubjectCriteriaEvaluationVisitFilter(addOrEditSubjectCriteriaEvaluation.SubjectId, subjectVisitId, addOrEditSubjectCriteriaEvaluation.TrialReadingCriterionId);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
//编辑
|
||||
else
|
||||
{
|
||||
//参与评估
|
||||
if (addOrEditSubjectCriteriaEvaluation.IsJoinEvaluation)
|
||||
{
|
||||
var dbBeforeEntity = await _subjectCriteriaEvaluationRepository.UpdateFromDTOAsync(addOrEditSubjectCriteriaEvaluation);
|
||||
|
||||
//从不评估 改为评估
|
||||
if (addOrEditSubjectCriteriaEvaluation.IsJoinEvaluation != dbBeforeEntity.IsJoinEvaluation)
|
||||
{
|
||||
//找到一致性核查通过的访视 并且没有 自动影像筛选的数据
|
||||
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).ToListAsync();
|
||||
|
||||
|
||||
foreach (var subjectVisitId in subjectVisitIdList)
|
||||
{
|
||||
await AutoSubjectCriteriaEvaluationVisitFilter(addOrEditSubjectCriteriaEvaluation.SubjectId, subjectVisitId, addOrEditSubjectCriteriaEvaluation.TrialReadingCriterionId);
|
||||
}
|
||||
}
|
||||
//未修改 不做任何操作
|
||||
|
||||
|
||||
}
|
||||
//不参与评估
|
||||
else
|
||||
{
|
||||
//删除该Subject 该标准访视的所有 访视筛选记录数据
|
||||
await _subjectCriteriaEvaluationVisitFilterRepository.BatchDeleteNoTrackingAsync(t => t.TrialReadingCriterionId == addOrEditSubjectCriteriaEvaluation.TrialReadingCriterionId && t.SubjectId == addOrEditSubjectCriteriaEvaluation.SubjectId);
|
||||
await _subjectCriteriaEvaluationVisitStudyFilterRepository.BatchDeleteNoTrackingAsync(t => t.TrialReadingCriterionId == addOrEditSubjectCriteriaEvaluation.TrialReadingCriterionId && t.SubjectVisit.SubjectId == addOrEditSubjectCriteriaEvaluation.SubjectId);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
await _subjectCriteriaEvaluationRepository.SaveChangesAsync();
|
||||
return ResponseOutput.Ok();
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 自动访视筛选 (针对单一访视,重新筛选一遍,可能不存在该接口,仅仅留存)
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
[NonDynamicMethod]
|
||||
public async Task AutoSubjectCriteriaEvaluationVisitFilter(Guid subjectId, Guid subjectVisitId, Guid trialReadingCriterionId)
|
||||
{
|
||||
|
||||
if ((await _trialReadingCriterionRepository.FindAsync(trialReadingCriterionId)).CriterionType == CriterionType.RECIST1Pointt1_MB)
|
||||
{
|
||||
//如果所有访视 的所有序列部位都是脑部 那么自动筛选通过,同时需要插入序列的筛选记录
|
||||
|
||||
|
||||
//找到该方式的所有序列
|
||||
var list = await _repository.Where<DicomSeries>(t => t.SubjectVisitId == subjectVisitId && t.SubjectId == subjectId).Select(t => new { SeriesId = t.Id, t.StudyId, t.BodyPartForEdit }).ToListAsync();
|
||||
|
||||
|
||||
//已经自动筛选过
|
||||
if (await _subjectCriteriaEvaluationVisitFilterRepository.AnyAsync(t => t.TrialReadingCriterionId == trialReadingCriterionId && t.SubjectVisitId == subjectVisitId))
|
||||
{
|
||||
await _subjectCriteriaEvaluationVisitFilterRepository.BatchDeleteNoTrackingAsync(t => t.TrialReadingCriterionId == trialReadingCriterionId && t.SubjectVisitId == subjectVisitId);
|
||||
|
||||
await _subjectCriteriaEvaluationVisitStudyFilterRepository.BatchDeleteNoTrackingAsync(t => t.TrialReadingCriterionId == trialReadingCriterionId && t.SubjectVisitId == subjectVisitId);
|
||||
}
|
||||
|
||||
//var existEntity = await _subjectCriteriaEvaluationVisitFilterRepository.FirstOrDefaultAsync(t => t.SubjectId == subjectId && t.SubjectVisitId == subjectVisitId && t.TrialReadingCriterionId == trialReadingCriterionId);
|
||||
|
||||
//有不是脑部的序列
|
||||
if (list.Any(t => t.BodyPartForEdit != "脑部"))
|
||||
{
|
||||
|
||||
|
||||
//if (existEntity == null)
|
||||
{
|
||||
var addItem = new SubjectCriteriaEvaluationVisitFilter
|
||||
{
|
||||
SubjectVisitId = subjectVisitId,
|
||||
SubjectId = subjectId,
|
||||
ImageDeterminationResultState = ImageDeterminationResultState.None,
|
||||
ImageFilterState = ImageFilterState.None,
|
||||
TrialReadingCriterionId = trialReadingCriterionId
|
||||
};
|
||||
|
||||
|
||||
var subjectCriteriaEvaluationVisitFilter = await _subjectCriteriaEvaluationVisitFilterRepository.AddAsync(addItem);
|
||||
}
|
||||
|
||||
}
|
||||
//都是脑部的序列
|
||||
else
|
||||
{
|
||||
|
||||
//if (existEntity == null)
|
||||
{
|
||||
var addItem = new SubjectCriteriaEvaluationVisitFilter
|
||||
{
|
||||
SubjectVisitId = subjectVisitId,
|
||||
SubjectId = subjectId,
|
||||
ImageDeterminationResultState = ImageDeterminationResultState.Passed,
|
||||
ImageFilterState = ImageFilterState.Finished,
|
||||
TrialReadingCriterionId = trialReadingCriterionId,
|
||||
//IsGeneratedTask = true
|
||||
};
|
||||
|
||||
var subjectCriteriaEvaluationVisitFilter = await _subjectCriteriaEvaluationVisitFilterRepository.AddAsync(addItem);
|
||||
|
||||
}
|
||||
|
||||
|
||||
foreach (var item in list)
|
||||
{
|
||||
await _subjectCriteriaEvaluationVisitStudyFilterRepository.AddAsync(new SubjectCriteriaEvaluationVisitStudyFilter { SubjectVisitId = subjectVisitId, SeriesId = item.SeriesId, TrialReadingCriterionId = trialReadingCriterionId, StudyId = item.StudyId, IsConfirmed = true });
|
||||
}
|
||||
|
||||
|
||||
//if(! await _repository.AnyAsync<VisitTask>(t=>t.SourceSubjectVisitId==subjectVisitId && t.TrialReadingCriterionId==trialReadingCriterionId && t.TaskState == TaskState.Effect))
|
||||
//{
|
||||
// var trialId=_subjectVisitRepository.Where(t=>t.Id==subjectVisitId).Select(t=>t.TrialId).FirstOrDefault();
|
||||
|
||||
// await _IVisitTaskHelpeService.BaseCritrionGenerateVisitTask(trialId, trialReadingCriterionId, true, new List<Guid>() { subjectVisitId});
|
||||
//}
|
||||
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
await _subjectCriteriaEvaluationVisitFilterRepository.SaveChangesAsync();
|
||||
|
||||
return ResponseOutput.Ok(entity.Id.ToString());
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 评估访视筛选列表
|
||||
/// 评估访视筛选列表(一致性核查通过的访视都会出现 根据条件筛选)
|
||||
/// </summary>
|
||||
/// <param name="inQuery"></param>
|
||||
/// <returns></returns>
|
||||
[HttpPost]
|
||||
public async Task<List<SubjectCriteriaEvaluationVisitFilterView>> GetSubjectCriteriaEvaluationVisitFilterList(SubjectCriteriaEvaluationVisitFilterQuery inQuery)
|
||||
{
|
||||
|
||||
|
||||
|
||||
|
||||
var subjectCriteriaEvaluationVisitFilterQueryable = from subjectVisit in _subjectVisitRepository.Where(t => t.SubjectId == inQuery.SubjectId)
|
||||
var subjectCriteriaEvaluationVisitFilterQueryable = from subjectVisit in _subjectVisitRepository.Where(t => t.SubjectId == inQuery.SubjectId && t.CheckState == CheckStateEnum.CVPassed)
|
||||
|
||||
|
||||
join subjectCriteriaEvaluationVisitFilter in _subjectCriteriaEvaluationVisitFilterRepository
|
||||
@@ -145,36 +322,54 @@ namespace IRaCIS.Core.Application.Service
|
||||
/// </summary>
|
||||
/// <param name="inQuery"></param>
|
||||
/// <returns></returns>
|
||||
[HttpPost]
|
||||
public async Task<List<HaveGeneratedTaskDto>> GetHaveGeneratedTaskList(HaveGeneratedTaskQuery inQuery)
|
||||
{
|
||||
var list = await _repository.Where<VisitTask>(t => t.TrialReadingCriterionId == inQuery.TrialReadingCriterionId && t.SubjectId == inQuery.SubjectId)
|
||||
var list = await _repository.Where<VisitTask>(t => t.TrialReadingCriterionId == inQuery.TrialReadingCriterionId && t.SubjectId == inQuery.SubjectId && t.TaskState == TaskState.Effect)
|
||||
.ProjectTo<HaveGeneratedTaskDto>(_mapper.ConfigurationProvider).ToListAsync();
|
||||
|
||||
return list;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 评估访视 判断结果 影像筛选状态 手动添加/编辑接口
|
||||
/// 批量勾选 生成该标准的任务
|
||||
/// </summary>
|
||||
/// <param name="addOrEditSubjectCriteriaEvaluationVisitFilter"></param>
|
||||
/// <returns></returns>
|
||||
public async Task<IResponseOutput> AddOrUpdateSubjectCriteriaEvaluationVisitFilter(SubjectCriteriaEvaluationVisitFilterAddOrEdit addOrEditSubjectCriteriaEvaluationVisitFilter)
|
||||
[UnitOfWork]
|
||||
public async Task BatchGenerateTask(BatchGenerateTaskCommand batchGenerateTaskCommand)
|
||||
{
|
||||
|
||||
var entity = await _subjectCriteriaEvaluationVisitFilterRepository.InsertOrUpdateAsync(addOrEditSubjectCriteriaEvaluationVisitFilter, true);
|
||||
|
||||
return ResponseOutput.Ok(entity.Id.ToString());
|
||||
await _subjectCriteriaEvaluationVisitFilterRepository.BatchUpdateNoTrackingAsync(t => t.SubjectId == batchGenerateTaskCommand.SubjectId
|
||||
&& t.TrialReadingCriterionId == batchGenerateTaskCommand.TrialReadingCriterionId
|
||||
&& batchGenerateTaskCommand.SubjectVisitIdList.Contains(t.SubjectVisitId), u => new SubjectCriteriaEvaluationVisitFilter { IsGeneratedTask = true });
|
||||
|
||||
await _IVisitTaskHelpeService.BaseCritrionGenerateVisitTask(batchGenerateTaskCommand.TrialId, batchGenerateTaskCommand.TrialReadingCriterionId, true, batchGenerateTaskCommand.SubjectVisitIdList);
|
||||
}
|
||||
|
||||
|
||||
///// <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>
|
||||
/// 获取dicom 访视检查列表 (序列的 CreateTime 是否为空 代表了记录是否创建、IsConfirmed 代表 保存 确认)
|
||||
/// 获取dicom 访视检查列表 (序列的 Id CreateTime 是否为空 代表了记录是否创建、IsConfirmed 代表 保存 确认)
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
[HttpPost]
|
||||
public async Task<SelctStudySeriesView> GetVisitStudyAndSeriesList(VisitStudyAndSeriesQuery inQuery)
|
||||
{
|
||||
var studyList = await _repository.Where<DicomStudy>(s => s.SubjectVisitId == inQuery.SubjectVisitId).ProjectTo<SelectStudyView>(_mapper.ConfigurationProvider).ToListAsync();
|
||||
@@ -204,6 +399,7 @@ namespace IRaCIS.Core.Application.Service
|
||||
SubjectVisitId = series.SubjectVisitId,
|
||||
TrialReadingCriterionId = inQuery.TrialReadingCriterionId,
|
||||
|
||||
IsReading=visitStudyFilter.IsReading,
|
||||
Id = visitStudyFilter.Id,
|
||||
CreateTime = visitStudyFilter.CreateTime,
|
||||
IsConfirmed = visitStudyFilter.IsConfirmed,
|
||||
@@ -228,9 +424,8 @@ namespace IRaCIS.Core.Application.Service
|
||||
var ids = batchList.Select(t => t.Id).ToList();
|
||||
await _subjectCriteriaEvaluationVisitStudyFilterRepository.BatchDeleteNoTrackingAsync(t => ids.Contains(t.Id));
|
||||
|
||||
await _subjectCriteriaEvaluationVisitStudyFilterRepository.AddRangeAsync(_mapper.Map<List<SubjectCriteriaEvaluationVisitStudyFilter> >(batchList));
|
||||
await _subjectCriteriaEvaluationVisitStudyFilterRepository.AddRangeAsync(_mapper.Map<List<SubjectCriteriaEvaluationVisitStudyFilter>>(batchList));
|
||||
|
||||
//var entity = await _subjectCriteriaEvaluationVisitStudyFilterRepository.InsertOrUpdateAsync(addOrEditSubjectCriteriaEvaluationVisitStudyFilter, true);
|
||||
|
||||
return ResponseOutput.Ok();
|
||||
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
using AutoMapper;
|
||||
using EasyCaching.Core;
|
||||
using EntityFrameworkCore.Triggered;
|
||||
using IRaCIS.Core.Application.Interfaces;
|
||||
using IRaCIS.Core.Application.Service;
|
||||
using IRaCIS.Core.Application.ViewModel;
|
||||
using IRaCIS.Core.Domain.Share;
|
||||
@@ -15,15 +16,22 @@ namespace IRaCIS.Core.Application.Triggers
|
||||
{
|
||||
|
||||
private readonly IVisitTaskHelpeService _visitTaskHelpeService;
|
||||
|
||||
|
||||
private readonly IRepository<Subject> _subjectRepository;
|
||||
private readonly IRepository<ClinicalDataTrialSet> _clinicalDataTrialSetRepository;
|
||||
private readonly IRepository<ReadingClinicalData> _readingClinicalDataRepository;
|
||||
|
||||
private readonly IRepository<ReadingQuestionCriterionTrial> _trialReadingCriterionRepository;
|
||||
|
||||
private readonly IRepository<SubjectCriteriaEvaluationVisitFilter> _SubjectCriteriaEvaluationVisitFilterRepository;
|
||||
|
||||
private readonly ISubjectCriteriaEvaluationService _subjectCriteriaEvaluationService;
|
||||
|
||||
public SubjectVisitCheckPassedTrigger(IRepository<Subject> subjectRepository,
|
||||
IRepository<ClinicalDataTrialSet> clinicalDataTrialSetRepository,
|
||||
IRepository<ReadingClinicalData> readingClinicalDataRepository,
|
||||
IVisitTaskHelpeService visitTaskHelpeService)
|
||||
IVisitTaskHelpeService visitTaskHelpeService, IRepository<ReadingQuestionCriterionTrial> trialReadingCriterionRepository,
|
||||
IRepository<SubjectCriteriaEvaluationVisitFilter> subjectCriteriaEvaluationVisitFilterRepository, ISubjectCriteriaEvaluationService subjectCriteriaEvaluationService)
|
||||
{
|
||||
|
||||
_subjectRepository = subjectRepository;
|
||||
@@ -31,9 +39,12 @@ namespace IRaCIS.Core.Application.Triggers
|
||||
_readingClinicalDataRepository = readingClinicalDataRepository;
|
||||
this._clinicalDataTrialSetRepository = clinicalDataTrialSetRepository;
|
||||
_visitTaskHelpeService = visitTaskHelpeService;
|
||||
_trialReadingCriterionRepository = trialReadingCriterionRepository;
|
||||
_SubjectCriteriaEvaluationVisitFilterRepository = subjectCriteriaEvaluationVisitFilterRepository;
|
||||
_subjectCriteriaEvaluationService = subjectCriteriaEvaluationService;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
public async Task BeforeSave(ITriggerContext<SubjectVisit> context, CancellationToken cancellationToken)
|
||||
{
|
||||
@@ -54,7 +65,21 @@ namespace IRaCIS.Core.Application.Triggers
|
||||
|
||||
context.Entity.IsPMBackOrReReading = false;
|
||||
|
||||
//找到手动生成任务的标准
|
||||
var criterionList = await _trialReadingCriterionRepository.Where(t => t.IsAutoCreate == false && t.IsSigned == true).Select(t => new { t.Id, t.TrialId }).ToListAsync();
|
||||
|
||||
foreach (var criterion in criterionList)
|
||||
{
|
||||
//if(!await _SubjectCriteriaEvaluationVisitFilterRepository.AnyAsync(t=>t.SubjectId==subjectVisit.SubjectId&& t.SubjectVisitId==subjectVisit.Id && t.TrialReadingCriterionId == criterion.Id))
|
||||
//{
|
||||
// await _SubjectCriteriaEvaluationVisitFilterRepository.AddAsync(new SubjectCriteriaEvaluationVisitFilter() { SubjectId = subjectVisit.SubjectId, SubjectVisitId = subjectVisit.Id, TrialReadingCriterionId = criterion.Id });
|
||||
//}
|
||||
|
||||
await _subjectCriteriaEvaluationService.AutoSubjectCriteriaEvaluationVisitFilter(subjectVisit.SubjectId, subjectVisit.Id, criterion.Id);
|
||||
}
|
||||
|
||||
await _visitTaskHelpeService.GenerateVisitTaskAsync(subjectVisit.TrialId, new List<Guid>() { subjectVisit.Id }, true);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@@ -79,7 +104,7 @@ namespace IRaCIS.Core.Application.Triggers
|
||||
SubjectId = context.Entity.SubjectId,
|
||||
ReadingId = context.Entity.Id,
|
||||
TrialId = context.Entity.TrialId
|
||||
|
||||
|
||||
}).ToList()
|
||||
|
||||
);
|
||||
|
||||
Reference in New Issue
Block a user