diff --git a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml
index 532cdd2da..e51bf5247 100644
--- a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml
+++ b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml
@@ -3202,7 +3202,7 @@
- 自动添加CRC临床数据
+ 自动添加CRC临床数据 (不包括检查级别)
@@ -12337,7 +12337,7 @@
-
+
配置流程验证
diff --git a/IRaCIS.Core.Application/Service/ImageAndDoc/StudyService.cs b/IRaCIS.Core.Application/Service/ImageAndDoc/StudyService.cs
index 57e7a8cec..c74549364 100644
--- a/IRaCIS.Core.Application/Service/ImageAndDoc/StudyService.cs
+++ b/IRaCIS.Core.Application/Service/ImageAndDoc/StudyService.cs
@@ -139,7 +139,11 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
}
-
+ ///
+ /// 上传临床数据
+ ///
+ ///
+ ///
[TypeFilter(typeof(TrialResourceFilter), Arguments = new object[] { "AfterStopCannNotOpt" })]
public async Task AddOrUpdateArchiveStudy(NewArchiveStudyCommand incommand)
{
diff --git a/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalAnswerService.cs b/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalAnswerService.cs
index 761800f5b..1bfd22237 100644
--- a/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalAnswerService.cs
+++ b/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalAnswerService.cs
@@ -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 _subjectRepository;
private readonly IRepository _readModuleCriterionFromRepository;
private readonly IRepository _readModuleRepository;
+ private readonly IRepository _dicomStudyRepository;
private readonly IRepository _clinicalQuestionAnswerRepository;
private readonly IRepository _clinicalTableAnswerRepository;
@@ -64,6 +66,7 @@ namespace IRaCIS.Core.Application.Service
IReadingClinicalDataService iReadingClinicalDataService,
IRepository readModuleCriterionFromRepository,
IRepository readModuleRepository,
+ IRepository dicomStudyRepository,
IRepository subjectVisitRepository,
IRepository clinicalTableAnswerRepository,
IRepository 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
}
///
- /// 自动添加CRC临床数据
+ /// 删除检查级别临床数据
///
///
///
- public async Task AutoAddCRCClinical(AutoAddClinicalInDto inDto)
+ public async Task DeleteStudyClinical(DeleteStudyClinicalInDto inDto)
+ {
+ await _readingClinicalDataRepository.BatchDeleteNoTrackingAsync(x => x.StudyId == inDto.StudyId);
+
+ }
+
+ ///
+ /// 添加检查级别临床数据
+ ///
+ ///
+ ///
+ public async Task AddStudyClinical(AddStudyClinicalInDto inDto)
+ {
+ var studyInfo = await _dicomStudyRepository.Where(x => x.Id == inDto.StudyId).FirstNotNullAsync();
+
+ List clinicals = await _clinicalDataTrialSetRepository.Where(x =>
+ x.TrialId == studyInfo.TrialId && x.IsConfirm&&x.ClinicalDataLevel== ClinicalLevel.Study).ToListAsync();
+
+ List datas = new List();
+
+ 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();
+
+ }
+
+ ///
+ /// 自动添加CRC临床数据 (不包括检查级别)
+ ///
+ ///
+ ///
+ 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());
});
diff --git a/IRaCIS.Core.Application/Service/Reading/ClinicalData/ReadingClinicalDataService.cs b/IRaCIS.Core.Application/Service/Reading/ClinicalData/ReadingClinicalDataService.cs
index b144be19e..e451debc9 100644
--- a/IRaCIS.Core.Application/Service/Reading/ClinicalData/ReadingClinicalDataService.cs
+++ b/IRaCIS.Core.Application/Service/Reading/ClinicalData/ReadingClinicalDataService.cs
@@ -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 相关
- ///
- /// 获取CRC上传的文件
- ///
- ///
- ///
- [HttpPost]
+
+ ///
+ /// 获取CRC上传的文件
+ ///
+ ///
+ ///
+ [HttpPost]
public async Task> GetCRCClinicalData(GetCRCClinicalDataInDto inDto)
{
- List 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 cRCClinicalDataList = await query
+ .Select(x => new GetCRCClinicalDataOutDto()
{
Id = x.Id,
ClinicalDataSetName = x.ClinicalDataTrialSet.ClinicalDataSetName.LanguageName(x.ClinicalDataTrialSet.ClinicalDataSetEnName, _userInfo.IsEn_Us) ,
diff --git a/IRaCIS.Core.Application/Service/Reading/Dto/ClinicalAnswerDto.cs b/IRaCIS.Core.Application/Service/Reading/Dto/ClinicalAnswerDto.cs
index fb669cb58..c09cbbf25 100644
--- a/IRaCIS.Core.Application/Service/Reading/Dto/ClinicalAnswerDto.cs
+++ b/IRaCIS.Core.Application/Service/Reading/Dto/ClinicalAnswerDto.cs
@@ -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; }
diff --git a/IRaCIS.Core.Application/Service/Reading/Dto/ReadingClinicalDataDto.cs b/IRaCIS.Core.Application/Service/Reading/Dto/ReadingClinicalDataDto.cs
index 39262facc..f697a924a 100644
--- a/IRaCIS.Core.Application/Service/Reading/Dto/ReadingClinicalDataDto.cs
+++ b/IRaCIS.Core.Application/Service/Reading/Dto/ReadingClinicalDataDto.cs
@@ -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; }
+
+
}
///
diff --git a/IRaCIS.Core.Application/Service/Reading/Interface/IClinicalAnswerService.cs b/IRaCIS.Core.Application/Service/Reading/Interface/IClinicalAnswerService.cs
index 0553e985a..c3decdd72 100644
--- a/IRaCIS.Core.Application/Service/Reading/Interface/IClinicalAnswerService.cs
+++ b/IRaCIS.Core.Application/Service/Reading/Interface/IClinicalAnswerService.cs
@@ -11,7 +11,13 @@ namespace IRaCIS.Core.Application.Service.Reading.Interface
{
Task CRCSignClinicalData(CRCSignClinicalDataInDto inDto);
- Task AutoAddCRCClinical(AutoAddClinicalInDto inDto);
+
+ Task DeleteStudyClinical(DeleteStudyClinicalInDto inDto);
+
+ Task AddStudyClinical(AddStudyClinicalInDto inDto);
+
+
+ Task AutoAddCRCClinical(AutoAddClinicalInDto inDto);
Task PMConfirmClinical(CRCConfirmClinicalInDto inDto);
diff --git a/IRaCIS.Core.Application/Triggers/SubjectVisitTrigger.cs b/IRaCIS.Core.Application/Triggers/SubjectVisitTrigger.cs
index 979c1f779..5a14814f2 100644
--- a/IRaCIS.Core.Application/Triggers/SubjectVisitTrigger.cs
+++ b/IRaCIS.Core.Application/Triggers/SubjectVisitTrigger.cs
@@ -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, IAfterSaveTrigger, IAfterSaveTrigger
{
private readonly IRepository _subjectVisitRepository;
- private readonly IRepository _repository;
+ private readonly IClinicalAnswerService _iClinicalAnswerService;
+ private readonly IRepository _repository;
- public SubjectVisitTrigger(IRepository subjectVisitRepository,IRepository repository)
+ public SubjectVisitTrigger(IRepository 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,
+ });
+ }
}
diff --git a/IRaCIS.Core.Domain/Reading/ClinicalData/ReadingClinicalData.cs b/IRaCIS.Core.Domain/Reading/ClinicalData/ReadingClinicalData.cs
index bdcb87f34..8d78e35d4 100644
--- a/IRaCIS.Core.Domain/Reading/ClinicalData/ReadingClinicalData.cs
+++ b/IRaCIS.Core.Domain/Reading/ClinicalData/ReadingClinicalData.cs
@@ -24,6 +24,8 @@ namespace IRaCIS.Core.Domain.Models
///
public Guid ReadingId { get; set; }
+ public Guid? StudyId { get; set; }
+
///
/// 受试者ID
///