Uat_Study
			
			
		
		
							parent
							
								
									e66b56af58
								
							
						
					
					
						commit
						02dd9aca32
					
				| 
						 | 
				
			
			@ -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>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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; }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue