Uat_Study
he 2023-06-28 13:56:11 +08:00
parent e66b56af58
commit 02dd9aca32
2 changed files with 168 additions and 26 deletions

View File

@ -13,6 +13,7 @@ using IRaCIS.Core.Domain.Share;
using MassTransit;
using IRaCIS.Core.Infrastructure;
using IRaCIS.Core.Domain.Models;
using IRaCIS.Core.Infrastructure.Extention;
namespace IRaCIS.Core.Application.Service
{
@ -34,65 +35,186 @@ namespace IRaCIS.Core.Application.Service
private readonly IRepository<ClinicalDataTrialSet> _clinicalDataTrialSetRepository;
private readonly IRepository<ClinicalForm> _clinicalFormRepository;
private readonly IRepository<ClinicalQuestionAnswer> _clinicalQuestionAnswerRepository;
private readonly IRepository<ClinicalForm> _clinicalFormRepository;
private readonly IRepository<Subject> _subjectRepository;
private readonly IRepository<ClinicalQuestionAnswer> _clinicalQuestionAnswerRepository;
private readonly IRepository<ClinicalTableAnswer> _clinicalTableAnswerRepository;
private readonly IRepository<ClinicalAnswerRowInfo> _clinicalAnswerRowInfoRepository;
private readonly IClinicalQuestionService _iClinicalQuestionService;
private readonly IRepository<ReadingClinicalData> _readingClinicalDataRepository;
private readonly IRepository<SubjectVisit> _subjectVisitRepository;
private readonly IClinicalQuestionService _iClinicalQuestionService;
public ClinicalAnswerService(IRepository<TrialClinicalQuestion> trialClinicalQuestionRepository,
IRepository<SystemClinicalTableQuestion> systemClinicalTableQuestionRepository,
IRepository<TrialClinicalTableQuestion> trialClinicalTableQuestionRepository,
IRepository<ClinicalForm> clinicalFormRepository,
IRepository<ClinicalTableAnswer> clinicalTableAnswerRepository,
IRepository<ReadingClinicalData> readingClinicalDataRepository,
IRepository<ClinicalForm> clinicalFormRepository,
IRepository<Subject> subjectRepository,
IRepository<SubjectVisit> subjectVisitRepository,
IRepository<ClinicalTableAnswer> clinicalTableAnswerRepository,
IRepository<ClinicalQuestionAnswer> clinicalQuestionAnswerRepository,
IClinicalQuestionService iClinicalQuestionService,
IRepository<ClinicalAnswerRowInfo> clinicalAnswerRowInfoRepository,
IRepository<ClinicalDataTrialSet> clinicalDataTrialSetRepository,
IRepository<SystemClinicalQuestion> systemClinicalQuestionRepository
IRepository<SystemClinicalQuestion> systemClinicalQuestionRepository
)
{
_clinicalAnswerRowInfoRepository = clinicalAnswerRowInfoRepository;
_subjectVisitRepository = subjectVisitRepository;
_readingClinicalDataRepository = readingClinicalDataRepository;
_clinicalAnswerRowInfoRepository = clinicalAnswerRowInfoRepository;
_clinicalQuestionAnswerRepository = clinicalQuestionAnswerRepository;
_systemClinicalTableQuestionRepository = systemClinicalTableQuestionRepository;
_trialClinicalQuestionRepository = trialClinicalQuestionRepository;
_trialClinicalTableQuestionRepository = trialClinicalTableQuestionRepository;
_systemClinicalQuestionRepository = systemClinicalQuestionRepository;
_clinicalDataTrialSetRepository = clinicalDataTrialSetRepository;
_clinicalFormRepository = clinicalFormRepository;
_clinicalTableAnswerRepository = clinicalTableAnswerRepository;
_clinicalFormRepository = clinicalFormRepository;
this._subjectRepository = subjectRepository;
_clinicalTableAnswerRepository = clinicalTableAnswerRepository;
_iClinicalQuestionService = iClinicalQuestionService;
}
/// <summary>
/// 获取CRC受试者临床数据
/// 自动添加CRC临床数据
/// </summary>
/// <param name="inDto"></param>
/// <returns></returns>
[HttpPost]
public async Task<List<GetCRCSubjectClinicalOutDto>> GetCRCSubjectClinicalList(GetCRCSubjectClinicalInDto inDto)
public async Task AutoAddCRCClinical(AutoAddClinicalInDto inDto)
{
var result =await _clinicalDataTrialSetRepository.Where(x => x.TrialId == inDto.TrialId).OrderBy(x=>x.ClinicalDataSetName).Select(x => new GetCRCSubjectClinicalOutDto()
var dataTrialSetList = await _clinicalDataTrialSetRepository.Where(x =>x.TrialId == inDto.TrialId && x.UploadRole == UploadRole.CRC && x.IsConfirm)
.IgnoreAutoIncludes().ToListAsync();
var baseLine = await _subjectVisitRepository.Where(x => x.TrialId == inDto.TrialId)
.WhereIf(inDto.SubjectId!=null,x=>x.SubjectId==inDto.SubjectId)
.Select(x => new
{
ClinicalDataTrialSetId = x.Id,
ClinicalDataSetName = x.ClinicalDataSetName.LanguageName(x.ClinicalDataSetEnName, _userInfo.IsEn_Us),
x.SubjectId,
VisitId = x.Id,
x.IsBaseLine,
}).ToListAsync();
var clinicalDataList =await _readingClinicalDataRepository.Where(x =>x.TrialId==inDto.TrialId&&x.ClinicalDataTrialSet.UploadRole== UploadRole.CRC).IgnoreAutoIncludes().ToListAsync();
List<ReadingClinicalData> readingClinicalDatas = new List<ReadingClinicalData>();
baseLine.Select(x => x.SubjectId).Distinct().ForEach(n =>
{
var baseLineVisitId = baseLine.Where(x => x.IsBaseLine && x.SubjectId == n).Select(x => x.VisitId).First();
readingClinicalDatas.AddRange(
dataTrialSetList.Where(x => x.ClinicalDataLevel == ClinicalLevel.Subject).Where(x => clinicalDataList.Where(y => y.ClinicalDataTrialSetId == x.Id && y.SubjectId == n).Count() == 0)
.Select(x => new ReadingClinicalData()
{
ClinicalDataTrialSetId = x.Id,
IsVisit = true,
SubjectId = n,
ReadingId = baseLineVisitId,
TrialId = inDto.TrialId
}).ToList());
readingClinicalDatas.AddRange(
dataTrialSetList.Where(x => x.ClinicalDataLevel == ClinicalLevel.ImageRead).Where(x => clinicalDataList.Where(y => y.ClinicalDataTrialSetId == x.Id && y.SubjectId == n).Count() == 0)
.Select(x => new ReadingClinicalData()
{
ClinicalDataTrialSetId = x.Id,
IsVisit = false,
SubjectId = n,
ReadingId = default(Guid),
TrialId = inDto.TrialId
}).ToList());
readingClinicalDatas.AddRange(
dataTrialSetList.Where(x => x.ClinicalDataLevel == ClinicalLevel.OncologyRead).Where(x => clinicalDataList.Where(y => y.ClinicalDataTrialSetId == x.Id && y.SubjectId == n).Count() == 0)
.Select(x => new ReadingClinicalData()
{
ClinicalDataTrialSetId = x.Id,
IsVisit = false,
SubjectId = n,
ReadingId = default(Guid),
TrialId = inDto.TrialId
}).ToList());
});
baseLine.ForEach(n =>
{
readingClinicalDatas.AddRange(
dataTrialSetList.Where(x => x.ClinicalDataLevel == ClinicalLevel.SubjectVisit).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());
});
await _readingClinicalDataRepository.AddRangeAsync(readingClinicalDatas);
await _readingClinicalDataRepository.SaveChangesAsync();
}
/// <summary>
/// 获取CRC受试者临床数据
/// </summary>
/// <param name="inDto"></param>
/// <returns></returns>
[HttpPost]
public async Task<List<GetCRCSubjectClinicalResultDto>> GetCRCSubjectClinicalList(GetCRCSubjectClinicalInDto inDto)
{
await AutoAddCRCClinical(new AutoAddClinicalInDto()
{
TrialId = inDto.TrialId
}) ;
var subjects = await _subjectRepository.Where(x => x.TrialId == inDto.TrialId).Select(x => new GetCRCSubjectClinicalResultDto()
{
SubjectId = x.Id,
SunjectCode = x.ShortName
}).ToListAsync();
var clinicalData = await _clinicalFormRepository.Where(x => x.SubjectId == inDto.TrialId).ToListAsync();
var clinicalData=await _readingClinicalDataRepository.Where(x=>x.TrialId == inDto.TrialId&&x.ClinicalDataTrialSet.UploadRole==UploadRole.CRC&&x.ClinicalDataTrialSet.ClinicalDataLevel!= ClinicalLevel.SubjectVisit)
.Include(x=>x.ClinicalDataTrialSet).Select(x=>new GetCRCSubjectClinicalOutDto() {
SubjectId=x.SubjectId,
ClinicalDataTrialSetId = x.ClinicalDataTrialSet.Id,
ClinicalDataSetName = x.ClinicalDataTrialSet.ClinicalDataSetName.LanguageName(x.ClinicalDataTrialSet.ClinicalDataSetEnName, _userInfo.IsEn_Us),
}).OrderBy(x=>x.ClinicalDataSetName).ToListAsync();
result.ForEach(x =>
var clinicalFormData = await _clinicalFormRepository.Where(x => x.SubjectId == inDto.TrialId).ToListAsync();
subjects.ForEach(x =>
{
x.ClinicalCount = clinicalData.Where(y => y.ClinicalDataTrialSetId == x.ClinicalDataTrialSetId).Count();
x.ClinicalDataList = clinicalData.Where(y => y.SubjectId == x.SubjectId).ToList();
x.ClinicalDataList.ForEach(n =>
{
n.ClinicalCount = clinicalData.Where(y => y.ClinicalDataTrialSetId == n.ClinicalDataTrialSetId && y.SubjectId == n.SubjectId).Count();
});
});
return result;
return subjects;
}
/// <summary>

View File

@ -6,27 +6,47 @@ using System.Threading.Tasks;
namespace IRaCIS.Core.Application.Service.Reading.Dto
{
public class GetCRCSubjectClinicalInDto
{
public Guid SubjectId { get; set; }
public class AutoAddClinicalInDto
{
public Guid? SubjectId { get; set; }
//public Guid? VisitId { get; set; }
public Guid TrialId { get; set; }
}
public class GetCRCSubjectClinicalInDto
{
public Guid TrialId { get; set; }
}
public class GetCRCSubjectClinicalOutDto
{
public Guid ClinicalDataTrialSetId { get; set; }
public Guid SubjectId { get; set; }
public Guid ClinicalDataTrialSetId { get; set; }
public string ClinicalDataSetName { get; set; }
public int ClinicalCount { get; set; }
public int ClinicalCount { get; set; } = 0;
}
public class GetCRCSubjectClinicalResultDto
{
public Guid SubjectId { get; set; }
public string SunjectCode { get; set; }
public List<GetCRCSubjectClinicalOutDto> ClinicalDataList { get; set; }
}
public class GetClinicalQuestionAnswerListInDto
public class GetClinicalQuestionAnswerListInDto
{
public Guid SubjectId { get; set; }