Merge branch 'master' of http://192.168.1.2:8033/IRaCIS_Core_Api
commit
4606b3980c
|
@ -13,6 +13,7 @@ using IRaCIS.Core.Domain.Share;
|
||||||
using MassTransit;
|
using MassTransit;
|
||||||
using IRaCIS.Core.Infrastructure;
|
using IRaCIS.Core.Infrastructure;
|
||||||
using IRaCIS.Core.Domain.Models;
|
using IRaCIS.Core.Domain.Models;
|
||||||
|
using IRaCIS.Core.Infrastructure.Extention;
|
||||||
|
|
||||||
namespace IRaCIS.Core.Application.Service
|
namespace IRaCIS.Core.Application.Service
|
||||||
{
|
{
|
||||||
|
@ -35,20 +36,26 @@ namespace IRaCIS.Core.Application.Service
|
||||||
private readonly IRepository<ClinicalDataTrialSet> _clinicalDataTrialSetRepository;
|
private readonly IRepository<ClinicalDataTrialSet> _clinicalDataTrialSetRepository;
|
||||||
|
|
||||||
private readonly IRepository<ClinicalForm> _clinicalFormRepository;
|
private readonly IRepository<ClinicalForm> _clinicalFormRepository;
|
||||||
|
private readonly IRepository<Subject> _subjectRepository;
|
||||||
private readonly IRepository<ClinicalQuestionAnswer> _clinicalQuestionAnswerRepository;
|
private readonly IRepository<ClinicalQuestionAnswer> _clinicalQuestionAnswerRepository;
|
||||||
|
|
||||||
private readonly IRepository<ClinicalTableAnswer> _clinicalTableAnswerRepository;
|
private readonly IRepository<ClinicalTableAnswer> _clinicalTableAnswerRepository;
|
||||||
|
|
||||||
private readonly IRepository<ClinicalAnswerRowInfo> _clinicalAnswerRowInfoRepository;
|
private readonly IRepository<ClinicalAnswerRowInfo> _clinicalAnswerRowInfoRepository;
|
||||||
|
|
||||||
|
private readonly IRepository<ReadingClinicalData> _readingClinicalDataRepository;
|
||||||
|
private readonly IRepository<SubjectVisit> _subjectVisitRepository;
|
||||||
|
|
||||||
private readonly IClinicalQuestionService _iClinicalQuestionService;
|
private readonly IClinicalQuestionService _iClinicalQuestionService;
|
||||||
|
|
||||||
|
|
||||||
public ClinicalAnswerService(IRepository<TrialClinicalQuestion> trialClinicalQuestionRepository,
|
public ClinicalAnswerService(IRepository<TrialClinicalQuestion> trialClinicalQuestionRepository,
|
||||||
IRepository<SystemClinicalTableQuestion> systemClinicalTableQuestionRepository,
|
IRepository<SystemClinicalTableQuestion> systemClinicalTableQuestionRepository,
|
||||||
IRepository<TrialClinicalTableQuestion> trialClinicalTableQuestionRepository,
|
IRepository<TrialClinicalTableQuestion> trialClinicalTableQuestionRepository,
|
||||||
|
IRepository<ReadingClinicalData> readingClinicalDataRepository,
|
||||||
IRepository<ClinicalForm> clinicalFormRepository,
|
IRepository<ClinicalForm> clinicalFormRepository,
|
||||||
|
IRepository<Subject> subjectRepository,
|
||||||
|
IRepository<SubjectVisit> subjectVisitRepository,
|
||||||
IRepository<ClinicalTableAnswer> clinicalTableAnswerRepository,
|
IRepository<ClinicalTableAnswer> clinicalTableAnswerRepository,
|
||||||
IRepository<ClinicalQuestionAnswer> clinicalQuestionAnswerRepository,
|
IRepository<ClinicalQuestionAnswer> clinicalQuestionAnswerRepository,
|
||||||
IClinicalQuestionService iClinicalQuestionService,
|
IClinicalQuestionService iClinicalQuestionService,
|
||||||
|
@ -57,6 +64,8 @@ namespace IRaCIS.Core.Application.Service
|
||||||
IRepository<SystemClinicalQuestion> systemClinicalQuestionRepository
|
IRepository<SystemClinicalQuestion> systemClinicalQuestionRepository
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
|
_subjectVisitRepository = subjectVisitRepository;
|
||||||
|
_readingClinicalDataRepository = readingClinicalDataRepository;
|
||||||
_clinicalAnswerRowInfoRepository = clinicalAnswerRowInfoRepository;
|
_clinicalAnswerRowInfoRepository = clinicalAnswerRowInfoRepository;
|
||||||
_clinicalQuestionAnswerRepository = clinicalQuestionAnswerRepository;
|
_clinicalQuestionAnswerRepository = clinicalQuestionAnswerRepository;
|
||||||
_systemClinicalTableQuestionRepository = systemClinicalTableQuestionRepository;
|
_systemClinicalTableQuestionRepository = systemClinicalTableQuestionRepository;
|
||||||
|
@ -64,35 +73,149 @@ namespace IRaCIS.Core.Application.Service
|
||||||
_trialClinicalTableQuestionRepository = trialClinicalTableQuestionRepository;
|
_trialClinicalTableQuestionRepository = trialClinicalTableQuestionRepository;
|
||||||
_systemClinicalQuestionRepository = systemClinicalQuestionRepository;
|
_systemClinicalQuestionRepository = systemClinicalQuestionRepository;
|
||||||
_clinicalDataTrialSetRepository = clinicalDataTrialSetRepository;
|
_clinicalDataTrialSetRepository = clinicalDataTrialSetRepository;
|
||||||
|
|
||||||
_clinicalFormRepository = clinicalFormRepository;
|
_clinicalFormRepository = clinicalFormRepository;
|
||||||
|
this._subjectRepository = subjectRepository;
|
||||||
_clinicalTableAnswerRepository = clinicalTableAnswerRepository;
|
_clinicalTableAnswerRepository = clinicalTableAnswerRepository;
|
||||||
_iClinicalQuestionService = iClinicalQuestionService;
|
_iClinicalQuestionService = iClinicalQuestionService;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <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();
|
||||||
|
var baseLine = await _subjectVisitRepository.Where(x => x.TrialId == inDto.TrialId)
|
||||||
|
.WhereIf(inDto.SubjectId!=null,x=>x.SubjectId==inDto.SubjectId)
|
||||||
|
|
||||||
|
.Select(x => new
|
||||||
|
{
|
||||||
|
|
||||||
|
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>
|
/// <summary>
|
||||||
/// 获取CRC受试者临床数据
|
/// 获取CRC受试者临床数据
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="inDto"></param>
|
/// <param name="inDto"></param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
[HttpPost]
|
[HttpPost]
|
||||||
public async Task<List<GetCRCSubjectClinicalOutDto>> GetCRCSubjectClinicalList(GetCRCSubjectClinicalInDto inDto)
|
public async Task<List<GetCRCSubjectClinicalResultDto>> GetCRCSubjectClinicalList(GetCRCSubjectClinicalInDto inDto)
|
||||||
{
|
{
|
||||||
var result =await _clinicalDataTrialSetRepository.Where(x => x.TrialId == inDto.TrialId).OrderBy(x=>x.ClinicalDataSetName).Select(x => new GetCRCSubjectClinicalOutDto()
|
|
||||||
{
|
|
||||||
ClinicalDataTrialSetId = x.Id,
|
|
||||||
ClinicalDataSetName = x.ClinicalDataSetName.LanguageName(x.ClinicalDataSetEnName, _userInfo.IsEn_Us),
|
|
||||||
|
|
||||||
|
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();
|
}).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)
|
||||||
|
.Where(x=>!x.IsSign)
|
||||||
|
.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>
|
/// <summary>
|
||||||
|
|
|
@ -6,21 +6,41 @@ using System.Threading.Tasks;
|
||||||
|
|
||||||
namespace IRaCIS.Core.Application.Service.Reading.Dto
|
namespace IRaCIS.Core.Application.Service.Reading.Dto
|
||||||
{
|
{
|
||||||
|
|
||||||
|
public class AutoAddClinicalInDto
|
||||||
|
{
|
||||||
|
public Guid? SubjectId { get; set; }
|
||||||
|
|
||||||
|
//public Guid? VisitId { get; set; }
|
||||||
|
|
||||||
|
public Guid TrialId { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
public class GetCRCSubjectClinicalInDto
|
public class GetCRCSubjectClinicalInDto
|
||||||
{
|
{
|
||||||
public Guid SubjectId { get; set; }
|
|
||||||
|
|
||||||
public Guid TrialId { get; set; }
|
public Guid TrialId { get; set; }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public class GetCRCSubjectClinicalOutDto
|
public class GetCRCSubjectClinicalOutDto
|
||||||
{
|
{
|
||||||
|
public Guid SubjectId { get; set; }
|
||||||
public Guid ClinicalDataTrialSetId { get; set; }
|
public Guid ClinicalDataTrialSetId { get; set; }
|
||||||
|
|
||||||
public string ClinicalDataSetName { 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; }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue