S-49 任务的临床状态维护

IRC_NewDev
he 2023-07-12 15:13:26 +08:00
parent a08cc44cd0
commit 260e29989c
3 changed files with 43 additions and 9 deletions

View File

@ -15,6 +15,7 @@ using IRaCIS.Core.Infrastructure;
using IRaCIS.Core.Domain.Models; using IRaCIS.Core.Domain.Models;
using IRaCIS.Core.Infrastructure.Extention; using IRaCIS.Core.Infrastructure.Extention;
using IRaCIS.Core.Application.Service.Reading.Interface; using IRaCIS.Core.Application.Service.Reading.Interface;
using IRaCIS.Core.Application.Contracts;
namespace IRaCIS.Core.Application.Service namespace IRaCIS.Core.Application.Service
{ {
@ -51,6 +52,8 @@ namespace IRaCIS.Core.Application.Service
private readonly IClinicalQuestionService _iClinicalQuestionService; private readonly IClinicalQuestionService _iClinicalQuestionService;
private readonly IReadingClinicalDataService _iReadingClinicalDataService;
public ClinicalAnswerService(IRepository<TrialClinicalQuestion> trialClinicalQuestionRepository, public ClinicalAnswerService(IRepository<TrialClinicalQuestion> trialClinicalQuestionRepository,
IRepository<SystemClinicalTableQuestion> systemClinicalTableQuestionRepository, IRepository<SystemClinicalTableQuestion> systemClinicalTableQuestionRepository,
@ -58,6 +61,7 @@ namespace IRaCIS.Core.Application.Service
IRepository<ReadingClinicalData> readingClinicalDataRepository, IRepository<ReadingClinicalData> readingClinicalDataRepository,
IRepository<ClinicalForm> clinicalFormRepository, IRepository<ClinicalForm> clinicalFormRepository,
IRepository<Subject> subjectRepository, IRepository<Subject> subjectRepository,
IReadingClinicalDataService iReadingClinicalDataService
IRepository<ReadModuleCriterionFrom> readModuleCriterionFromRepository, IRepository<ReadModuleCriterionFrom> readModuleCriterionFromRepository,
IRepository<ReadModule> readModuleRepository, IRepository<ReadModule> readModuleRepository,
IRepository<SubjectVisit> subjectVisitRepository, IRepository<SubjectVisit> subjectVisitRepository,
@ -78,7 +82,7 @@ namespace IRaCIS.Core.Application.Service
_trialClinicalTableQuestionRepository = trialClinicalTableQuestionRepository; _trialClinicalTableQuestionRepository = trialClinicalTableQuestionRepository;
_systemClinicalQuestionRepository = systemClinicalQuestionRepository; _systemClinicalQuestionRepository = systemClinicalQuestionRepository;
_clinicalDataTrialSetRepository = clinicalDataTrialSetRepository; _clinicalDataTrialSetRepository = clinicalDataTrialSetRepository;
_iReadingClinicalDataService = iReadingClinicalDataService;
_clinicalFormRepository = clinicalFormRepository; _clinicalFormRepository = clinicalFormRepository;
this._subjectRepository = subjectRepository; this._subjectRepository = subjectRepository;
this._readModuleCriterionFromRepository = readModuleCriterionFromRepository; this._readModuleCriterionFromRepository = readModuleCriterionFromRepository;
@ -860,6 +864,8 @@ namespace IRaCIS.Core.Application.Service
{ {
IsPMConfirm = true IsPMConfirm = true
}); });
await _readModuleRepository.SaveChangesAsync();
await _iReadingClinicalDataService.DealVisiTaskClinicalDataSignedAsync(inDto.TrialId, inDto.SubjectId, inDto.ReadModuleId, false, readModuleData.TrialReadingCriterionId);
} }
else else
{ {
@ -870,11 +876,13 @@ namespace IRaCIS.Core.Application.Service
}); });
await _readModuleCriterionFromRepository.BatchDeleteNoTrackingAsync(x=>x.ReadModuleId== x.Id); await _readModuleCriterionFromRepository.BatchDeleteNoTrackingAsync(x=>x.ReadModuleId== x.Id);
await _readModuleRepository.SaveChangesAsync();
} }
await _readModuleRepository.SaveChangesAsync();
return ResponseOutput.Ok(true); return ResponseOutput.Ok(true);
} }

View File

@ -303,7 +303,7 @@ namespace IRaCIS.Application.Services
} }
//处理 任务 临床数据是否签名 //处理 任务 临床数据是否签名
private async Task DealVisiTaskClinicalDataSignedAsync(Guid trialId, Guid subjectId, Guid readingId, bool isVisit, Guid trialReadingCritrialId) public async Task DealVisiTaskClinicalDataSignedAsync(Guid trialId, Guid subjectId, Guid readingId, bool isVisit, Guid trialReadingCritrialId)
{ {
//获取确认的临床数据配置 //获取确认的临床数据配置
var trialClinicalDataSetList = _clinicalDataTrialSetRepository.Where(t => t.TrialId == trialId && t.IsConfirm).Include(t => t.TrialClinicalDataSetCriteriaList).ToList(); var trialClinicalDataSetList = _clinicalDataTrialSetRepository.Where(t => t.TrialId == trialId && t.IsConfirm).Include(t => t.TrialClinicalDataSetCriteriaList).ToList();
@ -321,6 +321,8 @@ namespace IRaCIS.Application.Services
{ {
var isBaseLine = await _subjectVisitRepository.Where(t => t.Id == readingId).Select(t => t.IsBaseLine).FirstOrDefaultAsync(); var isBaseLine = await _subjectVisitRepository.Where(t => t.Id == readingId).Select(t => t.IsBaseLine).FirstOrDefaultAsync();
//判断是否基线 //判断是否基线
if (isBaseLine) if (isBaseLine)
{ {
@ -349,21 +351,43 @@ namespace IRaCIS.Application.Services
else else
{ {
//判断是影像学 还是肿瘤学阅片 //判断是影像学 还是肿瘤学阅片
var readingSetType = await _readModuleRepository.Where(t => t.Id == readingId).Select(t => t.ReadingSetType).FirstOrDefaultAsync(); var readModule = await _readModuleRepository.Where(t => t.Id == readingId).FirstNotNullAsync();
//CRC 阅片期自定义结构化录入是否签名
bool crcReadModuleSign = true;
//影像学 //影像学
if (readingSetType == ReadingSetType.ImageReading) if (readModule.ReadingSetType == ReadingSetType.ImageReading)
{ {
needSignCount = trialClinicalDataSetList.Where(t => t.TrialClinicalDataSetCriteriaList.Any(c => c.TrialReadingCriterionId == trialReadingCritrialId) && t.ClinicalDataLevel == ClinicalLevel.ImageRead).Count(); needSignCount = trialClinicalDataSetList.Where(t => t.TrialClinicalDataSetCriteriaList.Any(c => c.TrialReadingCriterionId == trialReadingCritrialId) && t.ClinicalDataLevel == ClinicalLevel.ImageRead).Count();
// 不存在需要CRC上传的临床数据 或者 PM已确认
crcReadModuleSign =
!trialClinicalDataSetList.Any(x =>
x.UploadRole == UploadRole.CRC
&& x.ClinicalDataLevel == ClinicalLevel.ImageRead
&& x.ClinicalUploadType == ClinicalUploadType.Structuring
&& x.TrialClinicalDataSetCriteriaList.Any(c => c.TrialReadingCriterionId == trialReadingCritrialId)) || readModule.IsPMConfirm;
} }
//肿瘤学 //肿瘤学
else else
{ {
needSignCount = trialClinicalDataSetList.Where(t => t.TrialClinicalDataSetCriteriaList.Any(c => c.TrialReadingCriterionId == trialReadingCritrialId) && t.ClinicalDataLevel == ClinicalLevel.OncologyRead).Count(); needSignCount = trialClinicalDataSetList.Where(t => t.TrialClinicalDataSetCriteriaList.Any(c => c.TrialReadingCriterionId == trialReadingCritrialId) && t.ClinicalDataLevel == ClinicalLevel.OncologyRead).Count();
// 不存在需要CRC上传的临床数据 或者 PM已确认
crcReadModuleSign =
!trialClinicalDataSetList.Any(x =>
x.UploadRole == UploadRole.CRC
&& x.ClinicalDataLevel == ClinicalLevel.OncologyRead
&& x.ClinicalUploadType == ClinicalUploadType.Structuring
&& x.TrialClinicalDataSetCriteriaList.Any(c => c.TrialReadingCriterionId == trialReadingCritrialId)) || readModule.IsPMConfirm;
} }
//可能仅仅CRC 基线 没有PM //可能仅仅CRC 基线 没有PM
if (needSignCount == haveSignedCount /*&& needSignCount != 0*/) if (needSignCount == haveSignedCount && crcReadModuleSign/*&& needSignCount != 0*/)
{ {
//将该标准 该subject 该阅片期|肿瘤学 任务临床数据状态变更 //将该标准 该subject 该阅片期|肿瘤学 任务临床数据状态变更
await _visitTaskRepository.BatchUpdateNoTrackingAsync(t => t.TrialId == trialId && t.SubjectId == subjectId && t.TrialReadingCriterionId == trialReadingCritrialId && t.SouceReadModuleId == readingId, u => new VisitTask() await _visitTaskRepository.BatchUpdateNoTrackingAsync(t => t.TrialId == trialId && t.SubjectId == subjectId && t.TrialReadingCriterionId == trialReadingCritrialId && t.SouceReadModuleId == readingId, u => new VisitTask()

View File

@ -23,5 +23,7 @@ namespace IRaCIS.Core.Application.Contracts
// Task<(List<GetReadingClinicalDataListOutDto>, object)> GetReadingClinicalDataList(GetReadingClinicalDataListIndto inDto); // Task<(List<GetReadingClinicalDataListOutDto>, object)> GetReadingClinicalDataList(GetReadingClinicalDataListIndto inDto);
Task<List<GetReadingClinicalDataListOutDto>> GetReadingClinicalList(GetReadingClinicalDataListIndto inDto); Task<List<GetReadingClinicalDataListOutDto>> GetReadingClinicalList(GetReadingClinicalDataListIndto inDto);
Task DealVisiTaskClinicalDataSignedAsync(Guid trialId, Guid subjectId, Guid readingId, bool isVisit, Guid trialReadingCritrialId);
} }
} }