IRC_NewDev
parent
146fc916d1
commit
b3178e6f8d
|
@ -3202,7 +3202,7 @@
|
|||
</member>
|
||||
<member name="M:IRaCIS.Core.Application.Service.ClinicalAnswerService.AutoAddCRCClinical(IRaCIS.Core.Application.Service.Reading.Dto.AutoAddClinicalInDto)">
|
||||
<summary>
|
||||
自动添加CRC临床数据
|
||||
自动添加CRC临床数据 (不包括检查级别)
|
||||
</summary>
|
||||
<param name="inDto"></param>
|
||||
<returns></returns>
|
||||
|
@ -12337,7 +12337,7 @@
|
|||
<param name="trialConfig"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:IRaCIS.Core.Application.TrialConfigService.ConfigTrialProcessInfoVerification(IRaCIS.Core.Application.Contracts.TrialProcessConfig)">
|
||||
<member name="M:IRaCIS.Core.Application.TrialConfigService.ConfigTrialProcessInfoVerification(IRaCIS.Core.Application.Contracts.ConfigTrialProcessInfoVerificationInDto)">
|
||||
<summary>
|
||||
配置流程验证
|
||||
</summary>
|
||||
|
|
|
@ -139,7 +139,11 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
|
|||
}
|
||||
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 上传临床数据
|
||||
/// </summary>
|
||||
/// <param name="incommand"></param>
|
||||
/// <returns></returns>
|
||||
[TypeFilter(typeof(TrialResourceFilter), Arguments = new object[] { "AfterStopCannNotOpt" })]
|
||||
public async Task<IResponseOutput> AddOrUpdateArchiveStudy(NewArchiveStudyCommand incommand)
|
||||
{
|
||||
|
|
|
@ -16,6 +16,7 @@ using IRaCIS.Core.Domain.Models;
|
|||
using IRaCIS.Core.Infrastructure.Extention;
|
||||
using IRaCIS.Core.Application.Service.Reading.Interface;
|
||||
using IRaCIS.Core.Application.Contracts;
|
||||
using OfficeOpenXml.FormulaParsing.Excel.Functions.Information;
|
||||
|
||||
namespace IRaCIS.Core.Application.Service
|
||||
{
|
||||
|
@ -41,6 +42,7 @@ namespace IRaCIS.Core.Application.Service
|
|||
private readonly IRepository<Subject> _subjectRepository;
|
||||
private readonly IRepository<ReadModuleCriterionFrom> _readModuleCriterionFromRepository;
|
||||
private readonly IRepository<ReadModule> _readModuleRepository;
|
||||
private readonly IRepository<DicomStudy> _dicomStudyRepository;
|
||||
private readonly IRepository<ClinicalQuestionAnswer> _clinicalQuestionAnswerRepository;
|
||||
|
||||
private readonly IRepository<ClinicalTableAnswer> _clinicalTableAnswerRepository;
|
||||
|
@ -64,6 +66,7 @@ namespace IRaCIS.Core.Application.Service
|
|||
IReadingClinicalDataService iReadingClinicalDataService,
|
||||
IRepository<ReadModuleCriterionFrom> readModuleCriterionFromRepository,
|
||||
IRepository<ReadModule> readModuleRepository,
|
||||
IRepository<DicomStudy> dicomStudyRepository,
|
||||
IRepository<SubjectVisit> subjectVisitRepository,
|
||||
IRepository<ClinicalTableAnswer> clinicalTableAnswerRepository,
|
||||
IRepository<ClinicalQuestionAnswer> clinicalQuestionAnswerRepository,
|
||||
|
@ -87,6 +90,7 @@ namespace IRaCIS.Core.Application.Service
|
|||
this._subjectRepository = subjectRepository;
|
||||
this._readModuleCriterionFromRepository = readModuleCriterionFromRepository;
|
||||
this._readModuleRepository = readModuleRepository;
|
||||
this._dicomStudyRepository = dicomStudyRepository;
|
||||
_clinicalTableAnswerRepository = clinicalTableAnswerRepository;
|
||||
_iClinicalQuestionService = iClinicalQuestionService;
|
||||
}
|
||||
|
@ -111,11 +115,56 @@ namespace IRaCIS.Core.Application.Service
|
|||
}
|
||||
|
||||
/// <summary>
|
||||
/// 自动添加CRC临床数据
|
||||
/// 删除检查级别临床数据
|
||||
/// </summary>
|
||||
/// <param name="inDto"></param>
|
||||
/// <returns></returns>
|
||||
public async Task AutoAddCRCClinical(AutoAddClinicalInDto inDto)
|
||||
public async Task DeleteStudyClinical(DeleteStudyClinicalInDto inDto)
|
||||
{
|
||||
await _readingClinicalDataRepository.BatchDeleteNoTrackingAsync(x => x.StudyId == inDto.StudyId);
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 添加检查级别临床数据
|
||||
/// </summary>
|
||||
/// <param name="inDto"></param>
|
||||
/// <returns></returns>
|
||||
public async Task AddStudyClinical(AddStudyClinicalInDto inDto)
|
||||
{
|
||||
var studyInfo = await _dicomStudyRepository.Where(x => x.Id == inDto.StudyId).FirstNotNullAsync();
|
||||
|
||||
List<ClinicalDataTrialSet> clinicals = await _clinicalDataTrialSetRepository.Where(x =>
|
||||
x.TrialId == studyInfo.TrialId && x.IsConfirm&&x.ClinicalDataLevel== ClinicalLevel.Study).ToListAsync();
|
||||
|
||||
List<ReadingClinicalData> datas = new List<ReadingClinicalData>();
|
||||
|
||||
clinicals.ForEach(x =>
|
||||
{
|
||||
datas.Add(new ReadingClinicalData()
|
||||
{
|
||||
ClinicalDataTrialSetId = x.Id,
|
||||
IsVisit = true,
|
||||
SubjectId = studyInfo.SubjectId,
|
||||
ReadingId = studyInfo.SubjectVisitId,
|
||||
TrialId = studyInfo.TrialId,
|
||||
StudyId = studyInfo.Id
|
||||
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
await _readingClinicalDataRepository.AddRangeAsync(datas);
|
||||
await _readingClinicalDataRepository.SaveChangesAsync();
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 自动添加CRC临床数据 (不包括检查级别)
|
||||
/// </summary>
|
||||
/// <param name="inDto"></param>
|
||||
/// <returns></returns>
|
||||
public async Task AutoAddCRCClinical(AutoAddClinicalInDto inDto)
|
||||
{
|
||||
var dataTrialSetList = await _clinicalDataTrialSetRepository.Where(x =>x.TrialId == inDto.TrialId && x.UploadRole == UploadRole.CRC && x.IsConfirm)
|
||||
.IgnoreAutoIncludes().ToListAsync();
|
||||
|
@ -194,16 +243,16 @@ namespace IRaCIS.Core.Application.Service
|
|||
TrialId = inDto.TrialId
|
||||
}).ToList());
|
||||
|
||||
readingClinicalDatas.AddRange(
|
||||
dataTrialSetList.Where(x => x.ClinicalDataLevel == ClinicalLevel.Study).Where(x => clinicalDataList.Where(y => y.ClinicalDataTrialSetId == x.Id && y.ReadingId == n.VisitId).Count() == 0)
|
||||
.Select(x => new ReadingClinicalData()
|
||||
{
|
||||
ClinicalDataTrialSetId = x.Id,
|
||||
IsVisit = true,
|
||||
SubjectId = n.SubjectId,
|
||||
ReadingId = n.VisitId,
|
||||
TrialId = inDto.TrialId
|
||||
}).ToList());
|
||||
//readingClinicalDatas.AddRange(
|
||||
// dataTrialSetList.Where(x => x.ClinicalDataLevel == ClinicalLevel.Study).Where(x => clinicalDataList.Where(y => y.ClinicalDataTrialSetId == x.Id && y.ReadingId == n.VisitId).Count() == 0)
|
||||
// .Select(x => new ReadingClinicalData()
|
||||
// {
|
||||
// ClinicalDataTrialSetId = x.Id,
|
||||
// IsVisit = true,
|
||||
// SubjectId = n.SubjectId,
|
||||
// ReadingId = n.VisitId,
|
||||
// TrialId = inDto.TrialId
|
||||
// }).ToList());
|
||||
});
|
||||
|
||||
|
||||
|
|
|
@ -9,6 +9,7 @@ using Microsoft.Extensions.DependencyInjection;
|
|||
using System.Linq.Expressions;
|
||||
using IRaCIS.Core.Infrastructure;
|
||||
using System.Linq.Dynamic.Core;
|
||||
using Microsoft.Extensions.Logging;
|
||||
|
||||
namespace IRaCIS.Application.Services
|
||||
{
|
||||
|
@ -178,19 +179,33 @@ namespace IRaCIS.Application.Services
|
|||
|
||||
#region 临床数据CRC 相关
|
||||
|
||||
/// <summary>
|
||||
/// 获取CRC上传的文件
|
||||
/// </summary>
|
||||
/// <param name="inDto"></param>
|
||||
/// <returns></returns>
|
||||
[HttpPost]
|
||||
|
||||
/// <summary>
|
||||
/// 获取CRC上传的文件
|
||||
/// </summary>
|
||||
/// <param name="inDto"></param>
|
||||
/// <returns></returns>
|
||||
[HttpPost]
|
||||
public async Task<List<GetCRCClinicalDataOutDto>> GetCRCClinicalData(GetCRCClinicalDataInDto inDto)
|
||||
{
|
||||
List<GetCRCClinicalDataOutDto> cRCClinicalDataList = await _readingClinicalDataRepository.Where(x => x.ReadingId == inDto.SubjectVisitId)
|
||||
.WhereIf(inDto.IsBaseline, x => x.ClinicalDataTrialSet.ClinicalDataLevel == ClinicalLevel.Subject || x.ClinicalDataTrialSet.ClinicalDataLevel == ClinicalLevel.SubjectVisit|| x.ClinicalDataTrialSet.ClinicalDataLevel == ClinicalLevel.Study)
|
||||
.WhereIf(!inDto.IsBaseline, x => x.ClinicalDataTrialSet.ClinicalDataLevel == ClinicalLevel.SubjectVisit || x.ClinicalDataTrialSet.ClinicalDataLevel == ClinicalLevel.Study)
|
||||
.Where(x => x.ClinicalDataTrialSet.TrialId == inDto.TrialId && x.ClinicalDataTrialSet.UploadRole == UploadRole.CRC)
|
||||
.Select(x => new GetCRCClinicalDataOutDto()
|
||||
|
||||
var query = _readingClinicalDataRepository.AsQueryable();
|
||||
if (inDto.StudyId != null)
|
||||
{
|
||||
query = query.Where(x => x.StudyId == inDto.StudyId.Value);
|
||||
}
|
||||
else
|
||||
{
|
||||
query = query.Where(x => x.ReadingId == inDto.SubjectVisitId)
|
||||
.WhereIf(inDto.IsBaseline, x => x.ClinicalDataTrialSet.ClinicalDataLevel == ClinicalLevel.Subject || x.ClinicalDataTrialSet.ClinicalDataLevel == ClinicalLevel.SubjectVisit)
|
||||
.WhereIf(!inDto.IsBaseline, x => x.ClinicalDataTrialSet.ClinicalDataLevel == ClinicalLevel.SubjectVisit)
|
||||
.Where(x => x.ClinicalDataTrialSet.TrialId == inDto.TrialId && x.ClinicalDataTrialSet.UploadRole == UploadRole.CRC);
|
||||
|
||||
}
|
||||
|
||||
|
||||
List<GetCRCClinicalDataOutDto> cRCClinicalDataList = await query
|
||||
.Select(x => new GetCRCClinicalDataOutDto()
|
||||
{
|
||||
Id = x.Id,
|
||||
ClinicalDataSetName = x.ClinicalDataTrialSet.ClinicalDataSetName.LanguageName(x.ClinicalDataTrialSet.ClinicalDataSetEnName, _userInfo.IsEn_Us) ,
|
||||
|
|
|
@ -12,7 +12,19 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
|
|||
{
|
||||
public Guid ReadingClinicalDataId { get; set; }
|
||||
}
|
||||
public class AutoAddClinicalInDto
|
||||
|
||||
|
||||
public class DeleteStudyClinicalInDto
|
||||
{
|
||||
public Guid StudyId { get; set; }
|
||||
}
|
||||
|
||||
public class AddStudyClinicalInDto
|
||||
{
|
||||
public Guid StudyId { get; set; }
|
||||
}
|
||||
|
||||
public class AutoAddClinicalInDto
|
||||
{
|
||||
public Guid? SubjectId { get; set; }
|
||||
|
||||
|
|
|
@ -143,16 +143,17 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
|
|||
|
||||
public class GetCRCClinicalDataInDto
|
||||
{
|
||||
[NotDefault]
|
||||
public Guid SubjectVisitId { get; set; }
|
||||
|
||||
[NotDefault]
|
||||
public Guid TrialId { get; set; }
|
||||
|
||||
[NotDefault]
|
||||
public Guid SubjectId { get; set; }
|
||||
|
||||
public bool IsBaseline { get; set; }
|
||||
|
||||
public Guid? StudyId { get; set; }
|
||||
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
|
|
@ -11,7 +11,13 @@ namespace IRaCIS.Core.Application.Service.Reading.Interface
|
|||
{
|
||||
Task<IResponseOutput> CRCSignClinicalData(CRCSignClinicalDataInDto inDto);
|
||||
|
||||
Task AutoAddCRCClinical(AutoAddClinicalInDto inDto);
|
||||
|
||||
Task DeleteStudyClinical(DeleteStudyClinicalInDto inDto);
|
||||
|
||||
Task AddStudyClinical(AddStudyClinicalInDto inDto);
|
||||
|
||||
|
||||
Task AutoAddCRCClinical(AutoAddClinicalInDto inDto);
|
||||
|
||||
Task<IResponseOutput> PMConfirmClinical(CRCConfirmClinicalInDto inDto);
|
||||
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
using EntityFrameworkCore.Triggered;
|
||||
using IRaCIS.Core.Application.Service.Reading.Interface;
|
||||
using IRaCIS.Core.Domain.Share;
|
||||
|
||||
namespace IRaCIS.Core.Application.Triggers
|
||||
|
@ -9,13 +10,14 @@ namespace IRaCIS.Core.Application.Triggers
|
|||
public class SubjectVisitTrigger : IAfterSaveTrigger<NoneDicomStudy>, IAfterSaveTrigger<DicomStudy>, IAfterSaveTrigger<NoneDicomStudyFile>
|
||||
{
|
||||
private readonly IRepository<SubjectVisit> _subjectVisitRepository;
|
||||
private readonly IRepository _repository;
|
||||
private readonly IClinicalAnswerService _iClinicalAnswerService;
|
||||
private readonly IRepository _repository;
|
||||
|
||||
public SubjectVisitTrigger(IRepository<SubjectVisit> subjectVisitRepository,IRepository repository)
|
||||
public SubjectVisitTrigger(IRepository<SubjectVisit> subjectVisitRepository, IClinicalAnswerService iClinicalAnswerService,IRepository repository)
|
||||
{
|
||||
_subjectVisitRepository = subjectVisitRepository;
|
||||
|
||||
_repository = repository;
|
||||
this._iClinicalAnswerService = iClinicalAnswerService;
|
||||
_repository = repository;
|
||||
}
|
||||
|
||||
//注意删除不能用扩展方法,必须用EF跟踪的实体 否则不能取到 SubjectVisitId
|
||||
|
@ -65,13 +67,33 @@ namespace IRaCIS.Core.Application.Triggers
|
|||
|
||||
await UpdateSubjectVisitSubmitStateAsync(subjectVisitId);
|
||||
|
||||
//添加检查级别临床数据
|
||||
|
||||
// 检查类型 ModalityForEdit
|
||||
// 检查模态 Modalities
|
||||
var modalityForEdit = context.Entity.ModalityForEdit;
|
||||
if (modalityForEdit.Contains("PT") && modalityForEdit.Contains("CT"))
|
||||
{
|
||||
await _iClinicalAnswerService.AddStudyClinical(new Service.Reading.Dto.AddStudyClinicalInDto()
|
||||
{
|
||||
StudyId = studyId,
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
if (context.ChangeType == ChangeType.Deleted)
|
||||
{
|
||||
await UpdateSubjectVisitImageDateAsync(subjectVisitId);
|
||||
await UpdateSubjectVisitSubmitStateAsync(subjectVisitId);
|
||||
}
|
||||
|
||||
//删除检查级别临床数据
|
||||
await _iClinicalAnswerService.DeleteStudyClinical(new Service.Reading.Dto.DeleteStudyClinicalInDto()
|
||||
{
|
||||
StudyId = context.Entity.Id,
|
||||
});
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
|
|
@ -24,6 +24,8 @@ namespace IRaCIS.Core.Domain.Models
|
|||
/// </summary>
|
||||
public Guid ReadingId { get; set; }
|
||||
|
||||
public Guid? StudyId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 受试者ID
|
||||
/// </summary>
|
||||
|
|
Loading…
Reference in New Issue