Merge branch 'master' of http://192.168.1.2:8033/IRaCIS_Core_Api
						commit
						23673ba60c
					
				| 
						 | 
				
			
			@ -254,6 +254,24 @@ namespace IRaCIS.Core.API.Controllers
 | 
			
		|||
            return result;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// CRC撤销临床数据
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="opt"></param>
 | 
			
		||||
        /// <returns></returns>
 | 
			
		||||
        [HttpPost, Route("Inspection/ClinicalAnswer/CRCCancelConfirmClinical")]
 | 
			
		||||
        [TypeFilter(typeof(TrialResourceFilter), Arguments = new object[] { "AfterStopCannNotOpt" })]
 | 
			
		||||
 | 
			
		||||
        [UnitOfWork]
 | 
			
		||||
        public async Task<IResponseOutput> CRCCancelConfirmClinical(DataInspectionDto<CRCCancelConfirmClinicalInDto> opt)
 | 
			
		||||
        {
 | 
			
		||||
            var singid = await _inspectionService.RecordSing(opt.SignInfo);
 | 
			
		||||
            var result = await _clinicalAnswerService.CRCCancelConfirmClinical(opt.Data);
 | 
			
		||||
            await _inspectionService.CompletedSign(singid, result);
 | 
			
		||||
            return result;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// PM确认临床数据
 | 
			
		||||
        /// </summary>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -146,6 +146,13 @@
 | 
			
		|||
            <param name="opt"></param>
 | 
			
		||||
            <returns></returns>
 | 
			
		||||
        </member>
 | 
			
		||||
        <member name="M:IRaCIS.Core.API.Controllers.InspectionController.CRCCancelConfirmClinical(IRaCIS.Core.Application.Service.Inspection.DTO.DataInspectionDto{IRaCIS.Core.Application.Service.Reading.Dto.CRCCancelConfirmClinicalInDto})">
 | 
			
		||||
            <summary>
 | 
			
		||||
            CRC撤销临床数据
 | 
			
		||||
            </summary>
 | 
			
		||||
            <param name="opt"></param>
 | 
			
		||||
            <returns></returns>
 | 
			
		||||
        </member>
 | 
			
		||||
        <member name="M:IRaCIS.Core.API.Controllers.InspectionController.PMConfirmClinical(IRaCIS.Core.Application.Service.Inspection.DTO.DataInspectionDto{IRaCIS.Core.Application.Service.Reading.Dto.CRCConfirmClinicalInDto})">
 | 
			
		||||
            <summary>
 | 
			
		||||
            PM确认临床数据
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -414,8 +414,8 @@ var abp = abp || {};
 | 
			
		|||
 | 
			
		||||
        //Inputs
 | 
			
		||||
        createInput(modalUxContent, 'tenancyName', 'Tenancy Name (Leave empty for Host)');
 | 
			
		||||
        createInput(modalUxContent, 'userName', 'Username or email address','text','admin');
 | 
			
		||||
        createInput(modalUxContent, 'password', 'Password','password');
 | 
			
		||||
        createInput(modalUxContent, 'userName', 'Username or email address','text','cyldev');
 | 
			
		||||
        createInput(modalUxContent, 'password', 'Password','password','123456');
 | 
			
		||||
 | 
			
		||||
        //Buttons
 | 
			
		||||
        var authBtnWrapper = document.createElement('div');
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -2806,6 +2806,11 @@
 | 
			
		|||
            模块名称
 | 
			
		||||
            </summary>
 | 
			
		||||
        </member>
 | 
			
		||||
        <member name="P:IRaCIS.Core.Application.Service.Reading.Dto.GetCRCConfirmListOutDto.IsCRCApplicationRevoke">
 | 
			
		||||
            <summary>
 | 
			
		||||
            CRC是否正在申请撤回
 | 
			
		||||
            </summary>
 | 
			
		||||
        </member>
 | 
			
		||||
        <member name="P:IRaCIS.Core.Application.Service.Reading.Dto.GetCRCConfirmListOutDto.LatestScanDate">
 | 
			
		||||
            <summary>
 | 
			
		||||
            最晚拍片日期
 | 
			
		||||
| 
						 | 
				
			
			@ -3156,6 +3161,11 @@
 | 
			
		|||
            最大长度
 | 
			
		||||
            </summary>
 | 
			
		||||
        </member>
 | 
			
		||||
        <member name="P:IRaCIS.Core.Application.Service.Reading.Dto.ClinicalQuestionBase.MaxQuestionCount">
 | 
			
		||||
            <summary>
 | 
			
		||||
            最大行数
 | 
			
		||||
            </summary>
 | 
			
		||||
        </member>
 | 
			
		||||
        <member name="P:IRaCIS.Core.Application.Service.Reading.Dto.ClinicalQuestionBase.ClinicalOptionTypeEnum">
 | 
			
		||||
            <summary>
 | 
			
		||||
            临床数据选项类型(无,自定义)
 | 
			
		||||
| 
						 | 
				
			
			@ -3881,6 +3891,21 @@
 | 
			
		|||
            路径
 | 
			
		||||
            </summary>
 | 
			
		||||
        </member>
 | 
			
		||||
        <member name="P:IRaCIS.Core.Application.Service.Reading.Dto.GetReadingOrTaskClinicalDataListInDto.ClinicalDataTrialSetId">
 | 
			
		||||
            <summary>
 | 
			
		||||
            临床数据类型Id
 | 
			
		||||
            </summary>
 | 
			
		||||
        </member>
 | 
			
		||||
        <member name="P:IRaCIS.Core.Application.Service.Reading.Dto.GetReadingOrTaskClinicalDataListInDto.GetClinicalType">
 | 
			
		||||
            <summary>
 | 
			
		||||
            1 PM上传的所有的  2CRC上传的所有已确认的    3 所有已经签名的
 | 
			
		||||
            </summary>
 | 
			
		||||
        </member>
 | 
			
		||||
        <member name="P:IRaCIS.Core.Application.Service.Reading.Dto.GetReadingOrTaskClinicalDataListInDto.IsOnlyGetCRCReadModule">
 | 
			
		||||
            <summary>
 | 
			
		||||
            只获取CRC上传的阅片模块结构化录入
 | 
			
		||||
            </summary>
 | 
			
		||||
        </member>
 | 
			
		||||
        <member name="P:IRaCIS.Core.Application.Service.Reading.Dto.GetReadingOrTaskClinicalDataListInDto.SelectIsSign">
 | 
			
		||||
            <summary>
 | 
			
		||||
            只查询已经签名的临床数据
 | 
			
		||||
| 
						 | 
				
			
			@ -3891,6 +3916,16 @@
 | 
			
		|||
            获取访视列表
 | 
			
		||||
            </summary>
 | 
			
		||||
        </member>
 | 
			
		||||
        <member name="P:IRaCIS.Core.Application.Service.Reading.Dto.GetReadingClinicalDataListIndto.ClinicalDataTrialSetId">
 | 
			
		||||
            <summary>
 | 
			
		||||
            临床数据类型Id
 | 
			
		||||
            </summary>
 | 
			
		||||
        </member>
 | 
			
		||||
        <member name="P:IRaCIS.Core.Application.Service.Reading.Dto.GetReadingClinicalDataListIndto.GetClinicalType">
 | 
			
		||||
            <summary>
 | 
			
		||||
            1 PM上传的所有的  2CRC上传的所有已确认的    3 所有已经签名的
 | 
			
		||||
            </summary>
 | 
			
		||||
        </member>
 | 
			
		||||
        <member name="P:IRaCIS.Core.Application.Service.Reading.Dto.GetReadingClinicalDataListIndto.IsVisit">
 | 
			
		||||
            <summary>
 | 
			
		||||
            是否是访视
 | 
			
		||||
| 
						 | 
				
			
			@ -3956,6 +3991,11 @@
 | 
			
		|||
            访视Id  或者模块Id
 | 
			
		||||
            </summary>
 | 
			
		||||
        </member>
 | 
			
		||||
        <member name="P:IRaCIS.Core.Application.Service.Reading.Dto.GetReadingClinicalDataListOutDto.IsCRCApplicationRevoke">
 | 
			
		||||
            <summary>
 | 
			
		||||
            CRC是否正在申请撤回
 | 
			
		||||
            </summary>
 | 
			
		||||
        </member>
 | 
			
		||||
        <member name="P:IRaCIS.Core.Application.Service.Reading.Dto.GetReadingClinicalDataListOutDto.ClinicalDataSetName">
 | 
			
		||||
            <summary>
 | 
			
		||||
            项目配置临床类型Name
 | 
			
		||||
| 
						 | 
				
			
			@ -4026,6 +4066,16 @@
 | 
			
		|||
            文件数量
 | 
			
		||||
            </summary>
 | 
			
		||||
        </member>
 | 
			
		||||
        <member name="P:IRaCIS.Core.Application.Service.Reading.Dto.ClinicalFromData.ClinicalFormId">
 | 
			
		||||
            <summary>
 | 
			
		||||
            表单Id
 | 
			
		||||
            </summary>
 | 
			
		||||
        </member>
 | 
			
		||||
        <member name="P:IRaCIS.Core.Application.Service.Reading.Dto.ClinicalFromData.CheckDate">
 | 
			
		||||
            <summary>
 | 
			
		||||
            检查日期
 | 
			
		||||
            </summary>
 | 
			
		||||
        </member>
 | 
			
		||||
        <member name="P:IRaCIS.Core.Application.Service.Reading.Dto.GetFileDto.Id">
 | 
			
		||||
            <summary>
 | 
			
		||||
            Id
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -459,6 +459,13 @@ namespace IRaCIS.Core.Application.Service
 | 
			
		|||
            var haveSignedCount = _readingClinicalDataRepository
 | 
			
		||||
                .Where(t => t.TrialId == trialId && t.IsSign && t.ReadingClinicalDataState == ReadingClinicalDataStatus.HaveSigned && t.ReadingId == readingId && t.ClinicalDataTrialSet.UploadRole == UploadRole.PM).Count();
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
            var readModule =  _readModuleRepository.Where(t => t.Id == readingId).FirstOrDefault();
 | 
			
		||||
            //CRC 阅片期自定义结构化录入是否签名
 | 
			
		||||
            bool crcReadModuleSign = true;
 | 
			
		||||
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
            //访视
 | 
			
		||||
            if (readingCategory == ReadingCategory.Visit)
 | 
			
		||||
            {
 | 
			
		||||
| 
						 | 
				
			
			@ -478,16 +485,37 @@ namespace IRaCIS.Core.Application.Service
 | 
			
		|||
            {
 | 
			
		||||
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            //阅片期
 | 
			
		||||
            else if (readingCategory == ReadingCategory.Global)
 | 
			
		||||
            {
 | 
			
		||||
                needSignCount = trialClinicalDataSetList.Where(t => t.TrialClinicalDataSetCriteriaList.Any(c => c.TrialReadingCriterionId == trialReadingCriterionId) && t.ClinicalDataLevel == ClinicalLevel.ImageRead && t.UploadRole == UploadRole.PM).Count();
 | 
			
		||||
 | 
			
		||||
                if (readModule != null)
 | 
			
		||||
                {
 | 
			
		||||
                    // 不存在需要CRC上传的临床数据 或者 PM已确认
 | 
			
		||||
                    crcReadModuleSign =
 | 
			
		||||
                    !trialClinicalDataSetList.Any(x =>
 | 
			
		||||
                     x.UploadRole == UploadRole.CRC
 | 
			
		||||
                    && x.ClinicalDataLevel == ClinicalLevel.ImageRead
 | 
			
		||||
                    && x.ClinicalUploadType == ClinicalUploadType.Structuring
 | 
			
		||||
                    && x.TrialClinicalDataSetCriteriaList.Any(c => c.TrialReadingCriterionId == trialReadingCriterionId)) || readModule.IsPMConfirm;
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            // 肿瘤学
 | 
			
		||||
            else if (readingCategory == ReadingCategory.Oncology)
 | 
			
		||||
            {
 | 
			
		||||
                return trialClinicalDataSetList.Any(t => t.TrialClinicalDataSetCriteriaList.Any(c => c.TrialReadingCriterionId == trialReadingCriterionId) && t.ClinicalDataLevel == ClinicalLevel.OncologyRead);
 | 
			
		||||
                needSignCount= trialClinicalDataSetList.Where(t => t.TrialClinicalDataSetCriteriaList.Any(c => c.TrialReadingCriterionId == trialReadingCriterionId) && t.ClinicalDataLevel == ClinicalLevel.OncologyRead && t.UploadRole == UploadRole.PM).Count();
 | 
			
		||||
                if (readModule != null)
 | 
			
		||||
                {
 | 
			
		||||
                    // 不存在需要CRC上传的临床数据 或者 PM已确认
 | 
			
		||||
                    crcReadModuleSign =
 | 
			
		||||
                    !trialClinicalDataSetList.Any(x =>
 | 
			
		||||
                     x.UploadRole == UploadRole.CRC
 | 
			
		||||
                    && x.ClinicalDataLevel == ClinicalLevel.OncologyRead
 | 
			
		||||
                    && x.ClinicalUploadType == ClinicalUploadType.Structuring
 | 
			
		||||
                    && x.TrialClinicalDataSetCriteriaList.Any(c => c.TrialReadingCriterionId == trialReadingCriterionId)) || readModule.IsPMConfirm;
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            else
 | 
			
		||||
            {
 | 
			
		||||
| 
						 | 
				
			
			@ -495,7 +523,7 @@ namespace IRaCIS.Core.Application.Service
 | 
			
		|||
            }
 | 
			
		||||
 | 
			
		||||
            //可能仅仅CRC 基线   没有PM
 | 
			
		||||
            if (needSignCount == haveSignedCount /*&& needSignCount != 0*/)
 | 
			
		||||
            if (needSignCount == haveSignedCount && crcReadModuleSign )
 | 
			
		||||
            {
 | 
			
		||||
                isClinicalDataSign = true;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -15,6 +15,7 @@ using IRaCIS.Core.Infrastructure;
 | 
			
		|||
using IRaCIS.Core.Domain.Models;
 | 
			
		||||
using IRaCIS.Core.Infrastructure.Extention;
 | 
			
		||||
using IRaCIS.Core.Application.Service.Reading.Interface;
 | 
			
		||||
using IRaCIS.Core.Application.Contracts;
 | 
			
		||||
 | 
			
		||||
namespace IRaCIS.Core.Application.Service
 | 
			
		||||
{
 | 
			
		||||
| 
						 | 
				
			
			@ -51,6 +52,8 @@ namespace IRaCIS.Core.Application.Service
 | 
			
		|||
 | 
			
		||||
		private readonly IClinicalQuestionService _iClinicalQuestionService;
 | 
			
		||||
 | 
			
		||||
        private readonly IReadingClinicalDataService _iReadingClinicalDataService;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        public ClinicalAnswerService(IRepository<TrialClinicalQuestion> trialClinicalQuestionRepository,
 | 
			
		||||
            IRepository<SystemClinicalTableQuestion> systemClinicalTableQuestionRepository,
 | 
			
		||||
| 
						 | 
				
			
			@ -58,6 +61,7 @@ namespace IRaCIS.Core.Application.Service
 | 
			
		|||
			IRepository<ReadingClinicalData> readingClinicalDataRepository,
 | 
			
		||||
		IRepository<ClinicalForm> clinicalFormRepository,
 | 
			
		||||
		IRepository<Subject> subjectRepository,
 | 
			
		||||
        IReadingClinicalDataService iReadingClinicalDataService,
 | 
			
		||||
            IRepository<ReadModuleCriterionFrom> readModuleCriterionFromRepository,
 | 
			
		||||
			IRepository<ReadModule> readModuleRepository,
 | 
			
		||||
		IRepository<SubjectVisit> subjectVisitRepository,
 | 
			
		||||
| 
						 | 
				
			
			@ -78,7 +82,7 @@ namespace IRaCIS.Core.Application.Service
 | 
			
		|||
            _trialClinicalTableQuestionRepository = trialClinicalTableQuestionRepository;
 | 
			
		||||
            _systemClinicalQuestionRepository = systemClinicalQuestionRepository;
 | 
			
		||||
            _clinicalDataTrialSetRepository = clinicalDataTrialSetRepository;
 | 
			
		||||
		
 | 
			
		||||
            _iReadingClinicalDataService = iReadingClinicalDataService;
 | 
			
		||||
                _clinicalFormRepository = clinicalFormRepository;
 | 
			
		||||
			this._subjectRepository = subjectRepository;
 | 
			
		||||
			this._readModuleCriterionFromRepository = readModuleCriterionFromRepository;
 | 
			
		||||
| 
						 | 
				
			
			@ -128,7 +132,14 @@ namespace IRaCIS.Core.Application.Service
 | 
			
		|||
 | 
			
		||||
			var clinicalDataList =await _readingClinicalDataRepository
 | 
			
		||||
				   .WhereIf(inDto.SubjectId != null, x => x.SubjectId == inDto.SubjectId)
 | 
			
		||||
				.Where(x =>x.TrialId==inDto.TrialId&&x.ClinicalDataTrialSet.UploadRole== UploadRole.CRC).IgnoreAutoIncludes().ToListAsync();
 | 
			
		||||
				.Where(x =>x.TrialId==inDto.TrialId&&x.ClinicalDataTrialSet.UploadRole== UploadRole.CRC)
 | 
			
		||||
                .Select(x=>new 
 | 
			
		||||
                {
 | 
			
		||||
                    ClinicalDataTrialSetId=x.ClinicalDataTrialSetId,
 | 
			
		||||
                    SubjectId=x.SubjectId,
 | 
			
		||||
                    x.ReadingId,
 | 
			
		||||
 | 
			
		||||
                }).ToListAsync();
 | 
			
		||||
 | 
			
		||||
            List<ReadingClinicalData> readingClinicalDatas = new List<ReadingClinicalData>();
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -184,8 +195,8 @@ namespace IRaCIS.Core.Application.Service
 | 
			
		|||
				   }).ToList());
 | 
			
		||||
			});
 | 
			
		||||
 | 
			
		||||
			await _readingClinicalDataRepository.AddRangeAsync(readingClinicalDatas);
 | 
			
		||||
          
 | 
			
		||||
            await _readingClinicalDataRepository.AddRangeAsync(readingClinicalDatas);
 | 
			
		||||
            await _readingClinicalDataRepository.SaveChangesAsync();
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -347,13 +358,17 @@ namespace IRaCIS.Core.Application.Service
 | 
			
		|||
				ReadingId = inDto.ReadingId,
 | 
			
		||||
			};
 | 
			
		||||
 | 
			
		||||
            if (inDto.ClinicalFormId!=null&&(await _readModuleCriterionFromRepository.AnyAsync(x => x.ClinicalFormId == inDto.ClinicalFormId.Value)))
 | 
			
		||||
            {
 | 
			
		||||
                throw new BusinessValidationFailedException("当前表单已确认,无法修改!");
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            var existsClinical = await _clinicalFormRepository.Where(x =>
 | 
			
		||||
            x.SubjectId == inDto.SubjectId
 | 
			
		||||
            && x.ClinicalDataTrialSetId == inDto.ClinicalDataTrialSetId
 | 
			
		||||
            ).WhereIf(inDto.ReadingId != null, x => x.ReadingId == inDto.ReadingId)
 | 
			
		||||
            .Where(x => x.ClinicalDataTrialSet.UploadRole != UploadRole.CRC && (x.ClinicalDataTrialSet.ClinicalDataLevel != ClinicalLevel.ImageRead
 | 
			
		||||
            || x.ClinicalDataTrialSet.ClinicalDataLevel != ClinicalLevel.OncologyRead)).AnyAsync();
 | 
			
		||||
            .Where(x => x.ClinicalDataTrialSet.UploadRole != UploadRole.CRC && !(x.ClinicalDataTrialSet.ClinicalDataLevel == ClinicalLevel.ImageRead
 | 
			
		||||
            || x.ClinicalDataTrialSet.ClinicalDataLevel == ClinicalLevel.OncologyRead)).AnyAsync();
 | 
			
		||||
 | 
			
		||||
            if (existsClinical)
 | 
			
		||||
            {
 | 
			
		||||
| 
						 | 
				
			
			@ -433,13 +448,13 @@ namespace IRaCIS.Core.Application.Service
 | 
			
		|||
                await _clinicalAnswerRowInfoRepository.BatchDeleteNoTrackingAsync(x => x.ClinicalFormId == inDto.ClinicalFormId);
 | 
			
		||||
                await _clinicalTableAnswerRepository.BatchDeleteNoTrackingAsync(x => x.ClinicalFormId == inDto.ClinicalFormId);
 | 
			
		||||
            }
 | 
			
		||||
            if(inDto.ReadingId!=null)
 | 
			
		||||
            {
 | 
			
		||||
                await _readingClinicalDataRepository.UpdatePartialFromQueryAsync(x => x.ReadingId == inDto.ReadingId && x.ClinicalDataTrialSetId == inDto.ClinicalDataTrialSetId, x => new ReadingClinicalData()
 | 
			
		||||
                {
 | 
			
		||||
                    IsSign = true
 | 
			
		||||
                });
 | 
			
		||||
            }
 | 
			
		||||
            //if(inDto.ReadingId!=null)
 | 
			
		||||
            //{
 | 
			
		||||
            //    await _readingClinicalDataRepository.UpdatePartialFromQueryAsync(x => x.ReadingId == inDto.ReadingId && x.ClinicalDataTrialSetId == inDto.ClinicalDataTrialSetId, x => new ReadingClinicalData()
 | 
			
		||||
            //    {
 | 
			
		||||
            //        IsSign = true
 | 
			
		||||
            //    });
 | 
			
		||||
            //}
 | 
			
		||||
            await _clinicalFormRepository.AddAsync(clinicalForm);
 | 
			
		||||
            await _clinicalQuestionAnswerRepository.AddRangeAsync(clinicalQuestionAnswers);
 | 
			
		||||
            await _clinicalAnswerRowInfoRepository.AddRangeAsync(clinicalAnswerRowInfos);
 | 
			
		||||
| 
						 | 
				
			
			@ -511,6 +526,7 @@ namespace IRaCIS.Core.Application.Service
 | 
			
		|||
                 
 | 
			
		||||
                    SubjectId = x.SubjectId,
 | 
			
		||||
                    IsCRCConfirm = x.IsCRCConfirm,
 | 
			
		||||
                    IsCRCApplicationRevoke=x.IsCRCApplicationRevoke,
 | 
			
		||||
                    VisitBlindName=x.SubjectVisit.BlindName,
 | 
			
		||||
                    LatestScanDate = x.SubjectVisit.LatestScanDate,
 | 
			
		||||
                    ReadingSetType = x.ReadingSetType,
 | 
			
		||||
| 
						 | 
				
			
			@ -641,11 +657,13 @@ namespace IRaCIS.Core.Application.Service
 | 
			
		|||
			})).CurrentPageData.SelectMany(x => x.ClinicalFormList).ToList();
 | 
			
		||||
 | 
			
		||||
           var clinicalDataTrialSetIds  = confirmList.Select(x => x.ClinicalDataTrialSetId).Distinct().ToList();
 | 
			
		||||
            var clinicalFormIds = confirmList.Select(x => x.ClinicalFormId).ToList();
 | 
			
		||||
 | 
			
		||||
            var questionList = await _trialClinicalQuestionRepository.Where(x => clinicalDataTrialSetIds.Contains( x.TrialClinicalId)
 | 
			
		||||
			&& x.ClinicalQuestionType != ReadingQestionType.Group
 | 
			
		||||
			&& x.ClinicalQuestionType != ReadingQestionType.Table).OrderBy(x=>x.TrialClinicalId).ThenBy(x => x.ShowOrder)
 | 
			
		||||
			   .ProjectTo<TrialClinicalQuestionDto>(_mapper.ConfigurationProvider).ToListAsync();
 | 
			
		||||
			var answers = await _clinicalQuestionAnswerRepository.Where(x => x.SubjectId == readModule.SubjectId && clinicalDataTrialSetIds.Contains( x.ClinicalDataTrialSetId))
 | 
			
		||||
			var answers = await _clinicalQuestionAnswerRepository.Where(x => clinicalFormIds.Contains(x.ClinicalFormId))
 | 
			
		||||
			.Select(x => new
 | 
			
		||||
			{
 | 
			
		||||
                x.ClinicalDataTrialSetId,
 | 
			
		||||
| 
						 | 
				
			
			@ -734,19 +752,18 @@ namespace IRaCIS.Core.Application.Service
 | 
			
		|||
 | 
			
		||||
            var readModule = await _readModuleRepository.Where(x => x.Id == inDto.ReadModuleId).FirstNotNullAsync();
 | 
			
		||||
 | 
			
		||||
            var dataList =(await this.GetCRCConfirmList(new GetCRCConfirmListInDto()
 | 
			
		||||
            var confirmlist = (await this.GetCRCConfirmList(new GetCRCConfirmListInDto()
 | 
			
		||||
            {
 | 
			
		||||
                TrialId = inDto.TrialId,
 | 
			
		||||
                SubjectId= readModule.SubjectId,
 | 
			
		||||
                TrialReadingCriterionId= readModule.TrialReadingCriterionId,
 | 
			
		||||
                ReadModuleId= inDto.ReadModuleId,
 | 
			
		||||
                TrialReadingCriterionId = readModule.TrialReadingCriterionId,
 | 
			
		||||
                PageIndex=1,
 | 
			
		||||
                PageSize=9999,
 | 
			
		||||
			})).CurrentPageData;
 | 
			
		||||
 | 
			
		||||
            var presentData = dataList.Where(x => x.ReadModuleId == inDto.ReadModuleId).First();
 | 
			
		||||
            var confirmlist=  dataList.Where(x =>(x.LatestScanDate < presentData.LatestScanDate && x.ReadingSetType == presentData.ReadingSetType) 
 | 
			
		||||
            || x.ReadModuleId == presentData.ReadModuleId).Where(x => !x.IsCRCConfirm).ToList();
 | 
			
		||||
 | 
			
		||||
            await _readModuleCriterionFromRepository.BatchDeleteNoTrackingAsync(x=>x.ReadModuleId== inDto.ReadModuleId);
 | 
			
		||||
            List<ReadModuleCriterionFrom> needAddList = new List<ReadModuleCriterionFrom>()
 | 
			
		||||
            {
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -811,10 +828,10 @@ namespace IRaCIS.Core.Application.Service
 | 
			
		|||
 | 
			
		||||
			await _readModuleRepository.UpdatePartialFromQueryAsync(x => presentData.ReadModuleId==x.Id, x => new ReadModule()
 | 
			
		||||
			{
 | 
			
		||||
				IsCRCConfirm = false
 | 
			
		||||
				IsCRCApplicationRevoke = true
 | 
			
		||||
			});
 | 
			
		||||
 | 
			
		||||
			await _readModuleCriterionFromRepository.BatchDeleteNoTrackingAsync(x=>x.ReadModuleId== presentData.ReadModuleId);
 | 
			
		||||
			//await _readModuleCriterionFromRepository.BatchDeleteNoTrackingAsync(x=>x.ReadModuleId== presentData.ReadModuleId);
 | 
			
		||||
 | 
			
		||||
			await _readModuleCriterionFromRepository.SaveChangesAsync();
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -833,16 +850,45 @@ namespace IRaCIS.Core.Application.Service
 | 
			
		|||
            var readModuleData = await _readModuleRepository.Where(x => x.Id == inDto.ReadModuleId).FirstNotNullAsync();
 | 
			
		||||
            if (!readModuleData.IsCRCConfirm)
 | 
			
		||||
            {
 | 
			
		||||
				throw new BusinessValidationFailedException("CRC还未确认数据,PM无法确认");
 | 
			
		||||
				throw new BusinessValidationFailedException("CRC还未确认数据,PM无法操作");
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
            if (readModuleData.IsCRCApplicationRevoke && inDto.IsConfirm)
 | 
			
		||||
            {
 | 
			
		||||
                throw new BusinessValidationFailedException("CRC正在申请退回,PM无法确认");
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            if (!readModuleData.IsCRCApplicationRevoke && !inDto.IsConfirm)
 | 
			
		||||
            {
 | 
			
		||||
                throw new BusinessValidationFailedException("CRC未申请退回,PM无法撤销");
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            if (inDto.IsConfirm)
 | 
			
		||||
            {
 | 
			
		||||
                await _readModuleRepository.UpdatePartialFromQueryAsync(x => inDto.ReadModuleId == x.Id, x => new ReadModule()
 | 
			
		||||
                {
 | 
			
		||||
                    IsPMConfirm = true
 | 
			
		||||
                });
 | 
			
		||||
                await _readModuleRepository.SaveChangesAsync();
 | 
			
		||||
                await _iReadingClinicalDataService.DealVisiTaskClinicalDataSignedAsync(inDto.TrialId, inDto.SubjectId, inDto.ReadModuleId, false, readModuleData.TrialReadingCriterionId);
 | 
			
		||||
            }
 | 
			
		||||
            else
 | 
			
		||||
            {
 | 
			
		||||
                await _readModuleRepository.UpdatePartialFromQueryAsync(x => inDto.ReadModuleId == x.Id, x => new ReadModule()
 | 
			
		||||
                {
 | 
			
		||||
                    IsCRCConfirm = false,
 | 
			
		||||
                    IsCRCApplicationRevoke=false,
 | 
			
		||||
                });
 | 
			
		||||
                await _readModuleCriterionFromRepository.BatchDeleteNoTrackingAsync(x=>x.ReadModuleId== x.Id);
 | 
			
		||||
 | 
			
		||||
                await _readModuleRepository.SaveChangesAsync();
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
            }
 | 
			
		||||
          
 | 
			
		||||
 | 
			
		||||
			
 | 
			
		||||
 | 
			
		||||
			return ResponseOutput.Ok(true);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -144,6 +144,8 @@ namespace IRaCIS.Application.Services
 | 
			
		|||
              .WhereIf(indto.Id != null, x => x.Id != indto.Id)
 | 
			
		||||
              .Where(x => x.ClinicalDataSetName == indto.ClinicalDataSetName||x.ClinicalDataSetEnName==indto.ClinicalDataSetEnName);
 | 
			
		||||
 | 
			
		||||
       
 | 
			
		||||
 | 
			
		||||
            if (await existsQuery.AnyAsync())
 | 
			
		||||
            {
 | 
			
		||||
                //---存在同类型的临床数据,操作失败
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -233,6 +233,16 @@ namespace IRaCIS.Core.Application.Service
 | 
			
		|||
                return ResponseOutput.NotOk(_localizer["ClinicalQuestion_Repeat"]);
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            if (await _trialClinicalQuestionRepository.AnyAsync(x => x.TrialClinicalId == inDto.TrialClinicalId && x.Id != inDto.Id && x.ShowOrder == inDto.ShowOrder))
 | 
			
		||||
            {
 | 
			
		||||
                return ResponseOutput.NotOk("问题序号存在重复!");
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            if (await _trialClinicalQuestionRepository.AnyAsync(x => x.TrialClinicalId == inDto.TrialClinicalId && x.Id != inDto.Id && x.IsCheckDate == inDto.IsCheckDate&&inDto.IsCheckDate))
 | 
			
		||||
            {
 | 
			
		||||
                return ResponseOutput.NotOk("已经添加过类型为检查日期的问题!");
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            var entity = await _trialClinicalQuestionRepository.InsertOrUpdateAsync(inDto, true);
 | 
			
		||||
            return ResponseOutput.Ok(entity.Id.ToString());
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -293,6 +303,7 @@ namespace IRaCIS.Core.Application.Service
 | 
			
		|||
        {
 | 
			
		||||
 | 
			
		||||
            var systemClinicalQuestionQueryable = _systemClinicalQuestionRepository
 | 
			
		||||
                .Where(x=>x.SystemClinicalId==inQuery.SystemClinicalId)
 | 
			
		||||
                .WhereIf(!inQuery.QuestionName.IsNullOrEmpty(), x => x.QuestionName.Contains(inQuery.QuestionName) || x.QuestionEnName.Contains(inQuery.QuestionName))
 | 
			
		||||
             .ProjectTo<SystemClinicalQuestionDto>(_mapper.ConfigurationProvider);
 | 
			
		||||
            var pageList = await systemClinicalQuestionQueryable
 | 
			
		||||
| 
						 | 
				
			
			@ -315,6 +326,15 @@ namespace IRaCIS.Core.Application.Service
 | 
			
		|||
            {
 | 
			
		||||
                return ResponseOutput.NotOk(_localizer["ClinicalQuestion_Repeat"]);
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            if (await _systemClinicalQuestionRepository.AnyAsync(x => x.SystemClinicalId == inDto.SystemClinicalId && x.Id != inDto.Id && x.ShowOrder == inDto.ShowOrder))
 | 
			
		||||
            {
 | 
			
		||||
                return ResponseOutput.NotOk("问题序号存在重复!");
 | 
			
		||||
            }
 | 
			
		||||
            if (await _systemClinicalQuestionRepository.AnyAsync(x => x.SystemClinicalId == inDto.SystemClinicalId && x.Id != inDto.Id && x.IsCheckDate == inDto.IsCheckDate && inDto.IsCheckDate))
 | 
			
		||||
            {
 | 
			
		||||
                return ResponseOutput.NotOk("已经添加过类型为检查日期的问题!");
 | 
			
		||||
            }
 | 
			
		||||
            var entity = await _systemClinicalQuestionRepository.InsertOrUpdateAsync(inDto, true);
 | 
			
		||||
            return ResponseOutput.Ok(entity.Id.ToString());
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -401,6 +421,11 @@ namespace IRaCIS.Core.Application.Service
 | 
			
		|||
                return ResponseOutput.NotOk(_localizer["ClinicalQuestion_Repeat"]);
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            if (await _systemClinicalTableQuestionRepository.AnyAsync(x => x.QuestionId == inDto.QuestionId && x.Id != inDto.Id && x.ShowOrder == inDto.ShowOrder))
 | 
			
		||||
            {
 | 
			
		||||
                return ResponseOutput.NotOk("问题序号存在重复!");
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            var entity = await _systemClinicalTableQuestionRepository.InsertOrUpdateAsync(inDto, true);
 | 
			
		||||
 | 
			
		||||
            return ResponseOutput.Ok(entity.Id.ToString());
 | 
			
		||||
| 
						 | 
				
			
			@ -455,6 +480,11 @@ namespace IRaCIS.Core.Application.Service
 | 
			
		|||
            {
 | 
			
		||||
                return ResponseOutput.NotOk(_localizer["ClinicalQuestion_Repeat"]);
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            if (await _trialClinicalTableQuestionRepository.AnyAsync(x => x.QuestionId == inDto.QuestionId && x.Id != inDto.Id && x.ShowOrder == inDto.ShowOrder))
 | 
			
		||||
            {
 | 
			
		||||
                return ResponseOutput.NotOk("问题序号存在重复!");
 | 
			
		||||
            }
 | 
			
		||||
            var entity = await _trialClinicalTableQuestionRepository.InsertOrUpdateAsync(inDto, true);
 | 
			
		||||
 | 
			
		||||
            return ResponseOutput.Ok(entity.Id.ToString());
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -25,6 +25,7 @@ namespace IRaCIS.Application.Services
 | 
			
		|||
        private readonly IRepository<SubjectVisit> _subjectVisitRepository;
 | 
			
		||||
        private readonly IRepository<PreviousHistory> _previousHistoryRepository;
 | 
			
		||||
        private readonly IRepository<ReadModuleCriterionFrom> _readModuleCriterionFromRepository;
 | 
			
		||||
        private readonly IRepository<ClinicalForm> _clinicalFormRepository;
 | 
			
		||||
        private readonly IRepository<PreviousOther> _previousOtherRepository;
 | 
			
		||||
        private readonly IRepository<PreviousSurgery> _previousSurgeryRepository;
 | 
			
		||||
        private readonly IRepository<ReadingQuestionCriterionTrial> _readingQuestionCriterionTrialRepository;
 | 
			
		||||
| 
						 | 
				
			
			@ -39,6 +40,7 @@ namespace IRaCIS.Application.Services
 | 
			
		|||
             IRepository<SubjectVisit> subjectVisitRepository,
 | 
			
		||||
             IRepository<PreviousHistory> previousHistoryRepository,
 | 
			
		||||
             IRepository<ReadModuleCriterionFrom> readModuleCriterionFromRepository,
 | 
			
		||||
              IRepository<ClinicalForm> clinicalFormRepository,
 | 
			
		||||
             IRepository<PreviousOther> previousOtherRepository,
 | 
			
		||||
             IRepository<PreviousSurgery> previousSurgeryRepository,
 | 
			
		||||
                IRepository<ReadingQuestionCriterionTrial> readingQuestionCriterionTrialRepository,
 | 
			
		||||
| 
						 | 
				
			
			@ -55,6 +57,7 @@ namespace IRaCIS.Application.Services
 | 
			
		|||
            this._subjectVisitRepository = subjectVisitRepository;
 | 
			
		||||
            this._previousHistoryRepository = previousHistoryRepository;
 | 
			
		||||
            this._readModuleCriterionFromRepository = readModuleCriterionFromRepository;
 | 
			
		||||
            this._clinicalFormRepository = clinicalFormRepository;
 | 
			
		||||
            this._previousOtherRepository = previousOtherRepository;
 | 
			
		||||
            this._previousSurgeryRepository = previousSurgeryRepository;
 | 
			
		||||
            this._readingQuestionCriterionTrialRepository = readingQuestionCriterionTrialRepository;
 | 
			
		||||
| 
						 | 
				
			
			@ -181,12 +184,6 @@ namespace IRaCIS.Application.Services
 | 
			
		|||
        [HttpPost]
 | 
			
		||||
        public async Task<List<GetCRCClinicalDataOutDto>> GetCRCClinicalData(GetCRCClinicalDataInDto inDto)
 | 
			
		||||
        {
 | 
			
		||||
            //if (_userInfo.UserTypeEnumInt == (int)UserTypeEnum.ClinicalResearchCoordinator)
 | 
			
		||||
            //{
 | 
			
		||||
            //    await this.AddCRCClinicalData(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)
 | 
			
		||||
                 .WhereIf(!inDto.IsBaseline, x => x.ClinicalDataTrialSet.ClinicalDataLevel == ClinicalLevel.SubjectVisit)
 | 
			
		||||
| 
						 | 
				
			
			@ -203,21 +200,19 @@ namespace IRaCIS.Application.Services
 | 
			
		|||
                    Path = x.ClinicalDataTrialSet.Path,
 | 
			
		||||
                    IsBlind = x.IsBlind,
 | 
			
		||||
                    IsComplete = x.IsComplete,
 | 
			
		||||
                    ClinicalFromList=x.Subject.ClinicalFormList.Where(y=>y.ReadingId==x.ReadingId&&y.ClinicalDataTrialSetId==x.ClinicalDataTrialSetId).Select(y=> new ClinicalFromData() { 
 | 
			
		||||
                    CheckDate=y.CheckDate,
 | 
			
		||||
                    ClinicalFormId=y.Id
 | 
			
		||||
                    }).ToList(),
 | 
			
		||||
                    PDFFileList = x.ReadingClinicalDataPDFList.Select(y => new GetFileDto()
 | 
			
		||||
                    {
 | 
			
		||||
                        Id = y.Id,
 | 
			
		||||
                        FileName = y.FileName,
 | 
			
		||||
                        Path = y.Path,
 | 
			
		||||
                        CreateTime = y.CreateTime,
 | 
			
		||||
                    }).ToList()
 | 
			
		||||
                }).ToListAsync();
 | 
			
		||||
                    }).ToList(),
 | 
			
		||||
                 
 | 
			
		||||
            List<GetReadingClinicalDataListOutDto> clinicalData = (await this.GetReadingClinicalDataList(new GetReadingClinicalDataListIndto()
 | 
			
		||||
            {
 | 
			
		||||
                SubjectId = inDto.SubjectId,
 | 
			
		||||
                ReadingId = inDto.SubjectVisitId,
 | 
			
		||||
                TrialId = inDto.TrialId,
 | 
			
		||||
            })).Item1;
 | 
			
		||||
                }).ToListAsync();
 | 
			
		||||
 | 
			
		||||
            var previousHistoryList = await _previousHistoryRepository.Where(x => x.SubjectVisitId == inDto.SubjectVisitId).ProjectTo<PreviousHistoryView>(_mapper.ConfigurationProvider).ToListAsync();
 | 
			
		||||
            var previousOtherList = await _previousOtherRepository.Where(x => x.SubjectVisitId == inDto.SubjectVisitId).ProjectTo<PreviousOtherView>(_mapper.ConfigurationProvider).ToListAsync();
 | 
			
		||||
| 
						 | 
				
			
			@ -225,7 +220,6 @@ namespace IRaCIS.Application.Services
 | 
			
		|||
 | 
			
		||||
            foreach (var item in cRCClinicalDataList)
 | 
			
		||||
            {
 | 
			
		||||
                //item.PDFFileList = clinicalData.Where(y => y.ClinicalDataTrialSetId == item.ClinicalDataTrialSetId).SelectMany(x => x.FileList).ToList();
 | 
			
		||||
                item.ClinicalTableData = new ClinicalDataTable()
 | 
			
		||||
                {
 | 
			
		||||
                    PreviousHistoryList = previousHistoryList.Where(x => x.ClinicalDataTrialSetId == item.ClinicalDataTrialSetId).ToList(),
 | 
			
		||||
| 
						 | 
				
			
			@ -312,7 +306,7 @@ namespace IRaCIS.Application.Services
 | 
			
		|||
        }
 | 
			
		||||
 | 
			
		||||
        //处理 任务  临床数据是否签名
 | 
			
		||||
        private async Task DealVisiTaskClinicalDataSignedAsync(Guid trialId, Guid subjectId, Guid readingId, bool isVisit, Guid trialReadingCritrialId)
 | 
			
		||||
        public async Task DealVisiTaskClinicalDataSignedAsync(Guid trialId, Guid subjectId, Guid readingId, bool isVisit, Guid trialReadingCritrialId)
 | 
			
		||||
        {
 | 
			
		||||
            //获取确认的临床数据配置
 | 
			
		||||
             var trialClinicalDataSetList = _clinicalDataTrialSetRepository.Where(t => t.TrialId == trialId && t.IsConfirm).Include(t => t.TrialClinicalDataSetCriteriaList).ToList();
 | 
			
		||||
| 
						 | 
				
			
			@ -330,6 +324,8 @@ namespace IRaCIS.Application.Services
 | 
			
		|||
            {
 | 
			
		||||
                var isBaseLine = await _subjectVisitRepository.Where(t => t.Id == readingId).Select(t => t.IsBaseLine).FirstOrDefaultAsync();
 | 
			
		||||
 | 
			
		||||
              
 | 
			
		||||
 | 
			
		||||
                //判断是否基线
 | 
			
		||||
                if (isBaseLine)
 | 
			
		||||
                {
 | 
			
		||||
| 
						 | 
				
			
			@ -358,21 +354,43 @@ namespace IRaCIS.Application.Services
 | 
			
		|||
            else
 | 
			
		||||
            {
 | 
			
		||||
                //判断是影像学 还是肿瘤学阅片
 | 
			
		||||
                var readingSetType = await _readModuleRepository.Where(t => t.Id == readingId).Select(t => t.ReadingSetType).FirstOrDefaultAsync();
 | 
			
		||||
                var readModule = await _readModuleRepository.Where(t => t.Id == readingId).FirstNotNullAsync();
 | 
			
		||||
 | 
			
		||||
                //CRC 阅片期自定义结构化录入是否签名
 | 
			
		||||
                bool crcReadModuleSign = true;
 | 
			
		||||
 | 
			
		||||
                //影像学
 | 
			
		||||
                if (readingSetType == ReadingSetType.ImageReading)
 | 
			
		||||
                if (readModule.ReadingSetType == ReadingSetType.ImageReading)
 | 
			
		||||
                {
 | 
			
		||||
                    needSignCount = trialClinicalDataSetList.Where(t => t.TrialClinicalDataSetCriteriaList.Any(c => c.TrialReadingCriterionId == trialReadingCritrialId) && t.ClinicalDataLevel == ClinicalLevel.ImageRead).Count();
 | 
			
		||||
 | 
			
		||||
                    // 不存在需要CRC上传的临床数据 或者 PM已确认
 | 
			
		||||
                    crcReadModuleSign =
 | 
			
		||||
                    !trialClinicalDataSetList.Any(x =>
 | 
			
		||||
                     x.UploadRole == UploadRole.CRC
 | 
			
		||||
                    && x.ClinicalDataLevel == ClinicalLevel.ImageRead
 | 
			
		||||
                    && x.ClinicalUploadType == ClinicalUploadType.Structuring
 | 
			
		||||
                    && x.TrialClinicalDataSetCriteriaList.Any(c => c.TrialReadingCriterionId == trialReadingCritrialId)) || readModule.IsPMConfirm;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
                }
 | 
			
		||||
                //肿瘤学
 | 
			
		||||
                else
 | 
			
		||||
                {
 | 
			
		||||
                    needSignCount = trialClinicalDataSetList.Where(t => t.TrialClinicalDataSetCriteriaList.Any(c => c.TrialReadingCriterionId == trialReadingCritrialId) && t.ClinicalDataLevel == ClinicalLevel.OncologyRead).Count();
 | 
			
		||||
 | 
			
		||||
                    // 不存在需要CRC上传的临床数据 或者 PM已确认
 | 
			
		||||
                    crcReadModuleSign =
 | 
			
		||||
                    !trialClinicalDataSetList.Any(x =>
 | 
			
		||||
                     x.UploadRole == UploadRole.CRC
 | 
			
		||||
                    && x.ClinicalDataLevel == ClinicalLevel.OncologyRead
 | 
			
		||||
                    && x.ClinicalUploadType == ClinicalUploadType.Structuring
 | 
			
		||||
                    && x.TrialClinicalDataSetCriteriaList.Any(c => c.TrialReadingCriterionId == trialReadingCritrialId)) || readModule.IsPMConfirm;
 | 
			
		||||
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                //可能仅仅CRC 基线   没有PM
 | 
			
		||||
                if (needSignCount == haveSignedCount /*&& needSignCount != 0*/)
 | 
			
		||||
                if (needSignCount == haveSignedCount && crcReadModuleSign/*&& needSignCount != 0*/)
 | 
			
		||||
                {
 | 
			
		||||
                    //将该标准  该subject 该阅片期|肿瘤学 任务临床数据状态变更
 | 
			
		||||
                    await _visitTaskRepository.BatchUpdateNoTrackingAsync(t => t.TrialId == trialId && t.SubjectId == subjectId && t.TrialReadingCriterionId == trialReadingCritrialId && t.SouceReadModuleId == readingId, u => new VisitTask()
 | 
			
		||||
| 
						 | 
				
			
			@ -608,10 +626,6 @@ namespace IRaCIS.Application.Services
 | 
			
		|||
 | 
			
		||||
            var clinicalDataList = await this.GetTrialClinicalDataSelect(getTrialClinicalDataSelectIndto);
 | 
			
		||||
 | 
			
		||||
            if (_userInfo.UserTypeEnumInt == (int)UserTypeEnum.ClinicalResearchCoordinator || _userInfo.UserTypeEnumInt == (int)UserTypeEnum.IQC)
 | 
			
		||||
            {
 | 
			
		||||
                inDto.UploadRole = UploadRole.CRC;
 | 
			
		||||
            }
 | 
			
		||||
            var isBaseLine = await _subjectVisitRepository.AnyAsync(x => x.Id == inDto.ReadingId && x.IsBaseLine);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -648,9 +662,9 @@ namespace IRaCIS.Application.Services
 | 
			
		|||
                inDto.ReadingId = visitTask.SouceReadModuleId ?? visitTask.SourceSubjectVisitId;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
            var resultQuery = _readingClinicalDataRepository.Where(x => x.SubjectId == inDto.SubjectId)
 | 
			
		||||
                 .WhereIf(inDto.ReadingClinicalDataId != null, x => x.Id == inDto.ReadingClinicalDataId)
 | 
			
		||||
                     .WhereIf(inDto.ClinicalDataTrialSetId != null, x => x.ClinicalDataTrialSetId == inDto.ClinicalDataTrialSetId)
 | 
			
		||||
                 .WhereIf(inDto.SelectIsSign, x => x.IsSign == true)
 | 
			
		||||
                 .Where(x => x.ReadingId == inDto.ReadingId || (x.SubjectId == inDto.SubjectId && x.ClinicalDataTrialSet.ClinicalDataLevel == ClinicalLevel.Subject))
 | 
			
		||||
                 .Select(x => new GetReadingClinicalDataListOutDto()
 | 
			
		||||
| 
						 | 
				
			
			@ -658,13 +672,13 @@ namespace IRaCIS.Application.Services
 | 
			
		|||
                     ClinicalDataLevel = x.ClinicalDataTrialSet.ClinicalDataLevel,
 | 
			
		||||
                     SubjectId = x.SubjectId,
 | 
			
		||||
                     ReadingId = x.ReadingId,
 | 
			
		||||
                     ClinicalDataSetEnName=x.ClinicalDataTrialSet.ClinicalDataSetEnName,
 | 
			
		||||
                     ClinicalDataSetEnName = x.ClinicalDataTrialSet.ClinicalDataSetEnName,
 | 
			
		||||
                     ClinicalDataSetName = x.ClinicalDataTrialSet.ClinicalDataSetName.LanguageName(x.ClinicalDataTrialSet.ClinicalDataSetEnName, _userInfo.IsEn_Us),
 | 
			
		||||
                     ClinicalDataTrialSetId = x.ClinicalDataTrialSetId,
 | 
			
		||||
                     IsSign = x.IsSign,
 | 
			
		||||
                     ClinicalUploadType = x.ClinicalDataTrialSet.ClinicalUploadType,
 | 
			
		||||
                     CriterionEnumList = x.ClinicalDataTrialSet.CriterionEnumList,
 | 
			
		||||
                     TrialClinicalDataSetCriteriaList=x.ClinicalDataTrialSet.TrialClinicalDataSetCriteriaList,
 | 
			
		||||
                     TrialClinicalDataSetCriteriaList = x.ClinicalDataTrialSet.TrialClinicalDataSetCriteriaList,
 | 
			
		||||
                     Id = x.Id,
 | 
			
		||||
                     UploadRole = x.ClinicalDataTrialSet.UploadRole,
 | 
			
		||||
                     IsCRCUpload = x.ClinicalDataTrialSet.UploadRole == UploadRole.CRC,
 | 
			
		||||
| 
						 | 
				
			
			@ -677,10 +691,23 @@ namespace IRaCIS.Application.Services
 | 
			
		|||
                     }).ToList()
 | 
			
		||||
                 });
 | 
			
		||||
 | 
			
		||||
            var result = new List<GetReadingClinicalDataListOutDto>();
 | 
			
		||||
            if (!inDto.IsOnlyGetCRCReadModule)
 | 
			
		||||
            {
 | 
			
		||||
                 result = await resultQuery.ToListAsync();
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            var readingIds = result.Select(x => x.ReadingId).ToList();
 | 
			
		||||
            var clinical = await _clinicalFormRepository.Where(x => readingIds.Contains(x.ReadingId??default(Guid))).ToListAsync();
 | 
			
		||||
            result.Where(x => x.ClinicalUploadType == ClinicalUploadType.Structuring).ForEach(x => {
 | 
			
		||||
 | 
			
		||||
            var result = await resultQuery.ToListAsync();
 | 
			
		||||
 | 
			
		||||
                x.ClinicalFromList = clinical.Where(y => y.ReadingId == x.ReadingId&&y.ClinicalDataTrialSetId==x.ClinicalDataTrialSetId).Select(y => new ClinicalFromData()
 | 
			
		||||
                {
 | 
			
		||||
                    CheckDate = y.CheckDate,
 | 
			
		||||
                    ClinicalFormId = y.Id
 | 
			
		||||
                }).ToList();
 | 
			
		||||
                x.FileCount = x.ClinicalFromList.Count();
 | 
			
		||||
            });
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
            // 这里处理CRC上传 阅片期的临床数据
 | 
			
		||||
| 
						 | 
				
			
			@ -690,7 +717,9 @@ namespace IRaCIS.Application.Services
 | 
			
		|||
				.FirstOrDefaultAsync();
 | 
			
		||||
            if (readModule != null)
 | 
			
		||||
            {
 | 
			
		||||
                var moduleCriterionFromList = await _readModuleCriterionFromRepository.Where(x => x.ReadModuleId == readModule.Id).Select(x => new{
 | 
			
		||||
                var moduleCriterionFromList = await _readModuleCriterionFromRepository
 | 
			
		||||
                    .WhereIf(inDto.ClinicalDataTrialSetId != null, x => x.ClinicalForm.ClinicalDataTrialSetId == inDto.ClinicalDataTrialSetId)
 | 
			
		||||
                    .Where(x => x.ReadModuleId == readModule.Id).Select(x => new{
 | 
			
		||||
					ClinicalFormId=  x.ClinicalFormId,
 | 
			
		||||
					CheckDate= x.ClinicalForm.CheckDate,
 | 
			
		||||
					ClinicalDataTrialSetId= x.ClinicalForm.ClinicalDataTrialSetId
 | 
			
		||||
| 
						 | 
				
			
			@ -701,12 +730,16 @@ namespace IRaCIS.Application.Services
 | 
			
		|||
                var setIds = moduleCriterionFromList.Select(x=>x.ClinicalDataTrialSetId).Distinct().ToList();
 | 
			
		||||
                var clinicalresult = await _clinicalDataTrialSetRepository.Where(x => x.UploadRole == UploadRole.CRC && (x.ClinicalDataLevel == ClinicalLevel.OncologyRead || x.ClinicalDataLevel == ClinicalLevel.ImageRead))
 | 
			
		||||
                    .Where(x => setIds.Contains(x.Id))
 | 
			
		||||
                 
 | 
			
		||||
                  .Select(x => new GetReadingClinicalDataListOutDto()
 | 
			
		||||
                  {
 | 
			
		||||
 | 
			
		||||
                      ClinicalDataLevel = x.ClinicalDataLevel,
 | 
			
		||||
                      SubjectId = inDto.SubjectId,
 | 
			
		||||
                      ReadingId = default(Guid),
 | 
			
		||||
                      IsCRCApplicationRevoke=readModule.IsCRCApplicationRevoke,
 | 
			
		||||
                      IsCRCConfirm= readModule.IsCRCConfirm,
 | 
			
		||||
                      IsPMConfirm= readModule.IsPMConfirm,
 | 
			
		||||
                      ClinicalDataSetName = x.ClinicalDataSetName.LanguageName(x.ClinicalDataSetEnName, _userInfo.IsEn_Us),
 | 
			
		||||
                      ClinicalDataSetEnName = x.ClinicalDataSetEnName,
 | 
			
		||||
                      ClinicalDataTrialSetId = x.Id,
 | 
			
		||||
| 
						 | 
				
			
			@ -740,7 +773,7 @@ namespace IRaCIS.Application.Services
 | 
			
		|||
                        ClinicalFormId = x.ClinicalFormId
 | 
			
		||||
 | 
			
		||||
                    }).ToList();
 | 
			
		||||
 | 
			
		||||
                    x.IsSign = readModule.IsPMConfirm ? true : false;
 | 
			
		||||
                    x.ReadingClinicalDataState = readModule.IsPMConfirm ? ReadingClinicalDataStatus.HaveSigned : ReadingClinicalDataStatus.HaveChecked;
 | 
			
		||||
 | 
			
		||||
                });
 | 
			
		||||
| 
						 | 
				
			
			@ -755,24 +788,41 @@ namespace IRaCIS.Application.Services
 | 
			
		|||
            {
 | 
			
		||||
                var visitTaskInfo = await _visitTaskRepository.FirstOrDefaultAsync(x => x.Id == inDto.VisitTaskId);
 | 
			
		||||
 | 
			
		||||
                result = result.Where(x => x.TrialClinicalDataSetCriteriaList.Any(z=>z.TrialReadingCriterionId==visitTaskInfo.TrialReadingCriterionId)).ToList();
 | 
			
		||||
                result = result.Where(x => x.TrialClinicalDataSetCriteriaList.Any(z => z.TrialReadingCriterionId == visitTaskInfo.TrialReadingCriterionId)).ToList();
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
            result = result.Where(x => !(x.ClinicalUploadType == ClinicalUploadType.PDF && x.FileList.Count() == 0)).ToList();
 | 
			
		||||
            // 需要排除表格为空的数据
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
            var readingIds = result.Select(x => x.ReadingId).ToList();
 | 
			
		||||
 | 
			
		||||
            var tablecount = (await _previousHistoryRepository.Where(x => readingIds.Contains(x.SubjectVisitId)).CountAsync()) +
 | 
			
		||||
                (await _previousOtherRepository.Where(x => readingIds.Contains(x.SubjectVisitId)).CountAsync()) +
 | 
			
		||||
                (await _previousSurgeryRepository.Where(x => readingIds.Contains(x.SubjectVisitId)).CountAsync());
 | 
			
		||||
 | 
			
		||||
            if (tablecount == 0)
 | 
			
		||||
            if (inDto.GetClinicalType != null)
 | 
			
		||||
            {
 | 
			
		||||
                result = result.Where(x => x.ClinicalUploadType != ClinicalUploadType.Table).ToList();
 | 
			
		||||
                switch (inDto.GetClinicalType)
 | 
			
		||||
                {
 | 
			
		||||
                    case GetClinicalType.PMUpload:
 | 
			
		||||
                        result = result.Where(x => x.UploadRole == UploadRole.PM).ToList();
 | 
			
		||||
                        break;
 | 
			
		||||
                    case GetClinicalType.CRCConfirm:
 | 
			
		||||
                        result = result.Where(x => x.UploadRole == UploadRole.CRC&&x.IsCRCConfirm&&!x.IsPMConfirm).ToList();
 | 
			
		||||
                        break;
 | 
			
		||||
                    case GetClinicalType.HasSign:
 | 
			
		||||
                        result = result.Where(x => x.IsSign).ToList();
 | 
			
		||||
                        break;
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
            //result = result.Where(x => !(x.ClinicalUploadType == ClinicalUploadType.PDF && x.FileList.Count() == 0)).ToList();
 | 
			
		||||
            //// 需要排除表格为空的数据
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
            //var readingIds = result.Select(x => x.ReadingId).ToList();
 | 
			
		||||
 | 
			
		||||
            //var tablecount = (await _previousHistoryRepository.Where(x => readingIds.Contains(x.SubjectVisitId)).CountAsync()) +
 | 
			
		||||
            //    (await _previousOtherRepository.Where(x => readingIds.Contains(x.SubjectVisitId)).CountAsync()) +
 | 
			
		||||
            //    (await _previousSurgeryRepository.Where(x => readingIds.Contains(x.SubjectVisitId)).CountAsync());
 | 
			
		||||
 | 
			
		||||
            //if (tablecount == 0)
 | 
			
		||||
            //{
 | 
			
		||||
            //    result = result.Where(x => x.ClinicalUploadType != ClinicalUploadType.Table).ToList();
 | 
			
		||||
            //}
 | 
			
		||||
 | 
			
		||||
            return result;
 | 
			
		||||
        }
 | 
			
		||||
| 
						 | 
				
			
			@ -785,14 +835,9 @@ namespace IRaCIS.Application.Services
 | 
			
		|||
        [NonDynamicMethod]
 | 
			
		||||
        public async Task<List<GetReadingClinicalDataListOutDto>> GetReadingClinicalList(GetReadingClinicalDataListIndto inDto)
 | 
			
		||||
        {
 | 
			
		||||
 | 
			
		||||
            //var criterionType = await _readingQuestionCriterionTrialRepository.Where(x => x.Id == inDto.TrialReadingCriterionId).Select(x => x.CriterionType).FirstNotNullAsync();
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
            var resultQuery = _readingClinicalDataRepository.Where(x => x.SubjectId == inDto.SubjectId)
 | 
			
		||||
             .Where(x => x.ReadingId == inDto.ReadingId || (x.SubjectId == inDto.SubjectId && x.ClinicalDataTrialSet.ClinicalDataLevel == ClinicalLevel.Subject))
 | 
			
		||||
              //.WhereIf(inDto.UploadRole == UploadRole.CRC, x => x.ClinicalDataTrialSet.UploadRole == UploadRole.CRC)
 | 
			
		||||
 | 
			
		||||
             .Where(x => x.ReadingId == inDto.ReadingId)
 | 
			
		||||
              .WhereIf(inDto.ClinicalDataTrialSetId!=null, x=>x.ClinicalDataTrialSetId==inDto.TrialReadingCriterionId)
 | 
			
		||||
              .Where(x => x.ClinicalDataTrialSet.TrialClinicalDataSetCriteriaList.Any(t=>t.TrialReadingCriterionId==inDto.TrialReadingCriterionId))
 | 
			
		||||
              .Select(x => new GetReadingClinicalDataListOutDto()
 | 
			
		||||
              {
 | 
			
		||||
| 
						 | 
				
			
			@ -824,13 +869,28 @@ namespace IRaCIS.Application.Services
 | 
			
		|||
 | 
			
		||||
            var result = await resultQuery.ToListAsync();
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
            var readingIds = result.Select(x => x.ReadingId).ToList();
 | 
			
		||||
            var clinical = await _clinicalFormRepository.Where(x => readingIds.Contains(x.ReadingId ?? default(Guid))).ToListAsync();
 | 
			
		||||
            result.Where(x => x.ClinicalUploadType == ClinicalUploadType.Structuring).ForEach(x => {
 | 
			
		||||
 | 
			
		||||
                x.ClinicalFromList = clinical.Where(y => y.ReadingId == x.ReadingId && y.ClinicalDataTrialSetId == x.ClinicalDataTrialSetId).Select(y => new ClinicalFromData()
 | 
			
		||||
                {
 | 
			
		||||
                    CheckDate = y.CheckDate,
 | 
			
		||||
                    ClinicalFormId = y.Id
 | 
			
		||||
                }).ToList();
 | 
			
		||||
                x.FileCount = x.ClinicalFromList.Count();
 | 
			
		||||
            });
 | 
			
		||||
 | 
			
		||||
            // 这里处理CRC上传 阅片期的临床数据
 | 
			
		||||
            var readModule = await _readModuleRepository.Where(x => x.Id == inDto.ReadingId&&x.IsCRCConfirm)
 | 
			
		||||
                
 | 
			
		||||
                .FirstOrDefaultAsync();
 | 
			
		||||
            if (readModule != null)
 | 
			
		||||
            {
 | 
			
		||||
				var moduleCriterionFromList = await _readModuleCriterionFromRepository.Where(x => x.ReadModuleId == readModule.Id).Select(x => new {
 | 
			
		||||
				var moduleCriterionFromList = await _readModuleCriterionFromRepository.Where(x => x.ReadModuleId == readModule.Id)
 | 
			
		||||
 | 
			
		||||
                     .WhereIf(inDto.ClinicalDataTrialSetId != null, x => x.ClinicalForm.ClinicalDataTrialSetId == inDto.TrialReadingCriterionId)
 | 
			
		||||
                    .Select(x => new {
 | 
			
		||||
					ClinicalFormId = x.ClinicalFormId,
 | 
			
		||||
					CheckDate = x.ClinicalForm.CheckDate,
 | 
			
		||||
					ClinicalDataTrialSetId = x.ClinicalForm.ClinicalDataTrialSetId
 | 
			
		||||
| 
						 | 
				
			
			@ -847,6 +907,10 @@ namespace IRaCIS.Application.Services
 | 
			
		|||
					  ClinicalDataLevel = x.ClinicalDataLevel,
 | 
			
		||||
					  SubjectId = inDto.SubjectId,
 | 
			
		||||
					  ReadingId = default(Guid),
 | 
			
		||||
                      IsCRCApplicationRevoke= readModule.IsCRCApplicationRevoke,
 | 
			
		||||
                      IsCRCConfirm = readModule.IsCRCConfirm,
 | 
			
		||||
                      IsPMConfirm=readModule.IsPMConfirm,
 | 
			
		||||
 | 
			
		||||
                      ClinicalDataSetName = x.ClinicalDataSetName.LanguageName(x.ClinicalDataSetEnName, _userInfo.IsEn_Us),
 | 
			
		||||
					  ClinicalDataSetEnName = x.ClinicalDataSetEnName,
 | 
			
		||||
					  ClinicalDataTrialSetId = x.Id,
 | 
			
		||||
| 
						 | 
				
			
			@ -881,6 +945,7 @@ namespace IRaCIS.Application.Services
 | 
			
		|||
 | 
			
		||||
					}).ToList();
 | 
			
		||||
 | 
			
		||||
                    x.IsSign = readModule.IsPMConfirm ?true : false;
 | 
			
		||||
                    x.ReadingClinicalDataState = readModule.IsPMConfirm ? ReadingClinicalDataStatus.HaveSigned : ReadingClinicalDataStatus.HaveChecked;
 | 
			
		||||
 | 
			
		||||
				});
 | 
			
		||||
| 
						 | 
				
			
			@ -889,8 +954,23 @@ namespace IRaCIS.Application.Services
 | 
			
		|||
			}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
            if (inDto.GetClinicalType != null)
 | 
			
		||||
            {
 | 
			
		||||
                switch (inDto.GetClinicalType)
 | 
			
		||||
                {
 | 
			
		||||
                    case GetClinicalType.PMUpload:
 | 
			
		||||
                        result = result.Where(x => x.UploadRole == UploadRole.PM).ToList();
 | 
			
		||||
                        break;
 | 
			
		||||
                    case GetClinicalType.CRCConfirm:
 | 
			
		||||
                        result = result.Where(x => x.UploadRole == UploadRole.CRC&&x.IsCRCConfirm&&!x.IsPMConfirm).ToList();
 | 
			
		||||
                        break;
 | 
			
		||||
                    case GetClinicalType.HasSign:
 | 
			
		||||
                        result = result.Where(x => x.IsSign).ToList();
 | 
			
		||||
                        break;
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
          
 | 
			
		||||
            //result = result.Where(x => !(x.UploadRole == UploadRole.CRC && x.ClinicalUploadType == ClinicalUploadType.PDF && x.FileList.Count() == 0)).ToList();
 | 
			
		||||
            return result;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -221,6 +221,9 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
 | 
			
		|||
		public Guid SubjectId { get; set; }
 | 
			
		||||
 | 
			
		||||
		public Guid ReadModuleId { get; set; }
 | 
			
		||||
 | 
			
		||||
        public bool IsConfirm { get; set; }
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -272,6 +275,12 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
 | 
			
		|||
 | 
			
		||||
		public bool IsCRCConfirm { get; set; } = false;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// CRC是否正在申请撤回
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public bool IsCRCApplicationRevoke { get; set; } = false;
 | 
			
		||||
 | 
			
		||||
        public string SubjectCode { get; set; }
 | 
			
		||||
 | 
			
		||||
		public bool IsHaveTableQuestion
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -181,6 +181,11 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
 | 
			
		|||
        /// </summary>
 | 
			
		||||
        public int? MaxAnswerLength { get; set; }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 最大行数
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public int? MaxQuestionCount { get; set; }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 临床数据选项类型(无,自定义)
 | 
			
		||||
        /// </summary>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -113,6 +113,8 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
 | 
			
		|||
		/// </summary>
 | 
			
		||||
		public bool? IsComplete { get; set; }
 | 
			
		||||
 | 
			
		||||
        public List<ClinicalFromData> ClinicalFromList { get; set; }
 | 
			
		||||
 | 
			
		||||
        //public List<GetReadingClinicalDataListOutDto> ReadingClinicalDataList { get; set; }
 | 
			
		||||
 | 
			
		||||
        public List<GetFileDto> PDFFileList { get; set; } = new List<GetFileDto>();
 | 
			
		||||
| 
						 | 
				
			
			@ -182,10 +184,25 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
 | 
			
		|||
 | 
			
		||||
		public Guid? ReadingId { get; set; }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 临床数据类型Id
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public Guid? ClinicalDataTrialSetId { get; set; }
 | 
			
		||||
 | 
			
		||||
        public Guid? VisitTaskId { get; set; }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 1 PM上传的所有的  2CRC上传的所有已确认的    3 所有已经签名的
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public GetClinicalType? GetClinicalType { get; set; }
 | 
			
		||||
 | 
			
		||||
        public Guid? ReadingClinicalDataId { get; set; }
 | 
			
		||||
 | 
			
		||||
		/// <summary>
 | 
			
		||||
		/// 只获取CRC上传的阅片模块结构化录入
 | 
			
		||||
		/// </summary>
 | 
			
		||||
		public bool IsOnlyGetCRCReadModule { get; set; } = false;
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 只查询已经签名的临床数据
 | 
			
		||||
        /// </summary>
 | 
			
		||||
| 
						 | 
				
			
			@ -202,7 +219,15 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
 | 
			
		|||
		[NotDefault]
 | 
			
		||||
		public Guid ReadingId { get; set; }
 | 
			
		||||
 | 
			
		||||
		public UploadRole? UploadRole { get; set; }
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 临床数据类型Id
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public Guid? ClinicalDataTrialSetId { get; set; }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 1 PM上传的所有的  2CRC上传的所有已确认的    3 所有已经签名的
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public GetClinicalType? GetClinicalType { get; set; }
 | 
			
		||||
 | 
			
		||||
        [NotDefault]
 | 
			
		||||
		public Guid TrialReadingCriterionId { get; set; }
 | 
			
		||||
| 
						 | 
				
			
			@ -310,6 +335,13 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
 | 
			
		|||
		/// </summary>
 | 
			
		||||
		public Guid ReadingId { get; set; }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// CRC是否正在申请撤回
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public bool IsCRCApplicationRevoke { get; set; } = false;
 | 
			
		||||
        public bool IsCRCConfirm { get; set; } = false;
 | 
			
		||||
 | 
			
		||||
        public bool IsPMConfirm { get; set; } = false;
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 项目配置临床类型Name
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -17,5 +17,7 @@ namespace IRaCIS.Core.Application.Service.Reading.Interface
 | 
			
		|||
 | 
			
		||||
        Task<IResponseOutput> SubmitClinicalForm(SubmitClinicalFormInDto inDto);
 | 
			
		||||
 | 
			
		||||
        Task<IResponseOutput> CRCCancelConfirmClinical(CRCCancelConfirmClinicalInDto inDto);
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -23,5 +23,7 @@ namespace IRaCIS.Core.Application.Contracts
 | 
			
		|||
       // Task<(List<GetReadingClinicalDataListOutDto>, object)> GetReadingClinicalDataList(GetReadingClinicalDataListIndto inDto);
 | 
			
		||||
 | 
			
		||||
        Task<List<GetReadingClinicalDataListOutDto>> GetReadingClinicalList(GetReadingClinicalDataListIndto inDto);
 | 
			
		||||
 | 
			
		||||
        Task DealVisiTaskClinicalDataSignedAsync(Guid trialId, Guid subjectId, Guid readingId, bool isVisit, Guid trialReadingCritrialId);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -2211,6 +2211,7 @@ namespace IRaCIS.Application.Services
 | 
			
		|||
                SubjectId = taskInfo.SubjectId,
 | 
			
		||||
                TrialId = taskInfo.TrialId,
 | 
			
		||||
                VisitTaskId = taskInfo.Id,
 | 
			
		||||
                
 | 
			
		||||
            });
 | 
			
		||||
 | 
			
		||||
            var isBaseLine = false;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -203,6 +203,7 @@ namespace IRaCIS.Core.Application
 | 
			
		|||
        [HttpPost]
 | 
			
		||||
        public async Task<IResponseOutput> AsyncTrialCriterionDictionary(AsyncTrialCriterionDictionaryInDto inDto)
 | 
			
		||||
        {
 | 
			
		||||
 | 
			
		||||
            var trialCriterion = await _readingQuestionCriterionTrialRepository.Where(x => x.Id == inDto.TrialReadingCriterionId).FirstNotNullAsync();
 | 
			
		||||
 | 
			
		||||
            if (trialCriterion.ReadingQuestionCriterionSystemId != null)
 | 
			
		||||
| 
						 | 
				
			
			@ -1041,9 +1042,17 @@ namespace IRaCIS.Core.Application
 | 
			
		|||
            //}); ;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
            var result = await _repository.SaveChangesAsync();
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
            return ResponseOutput.Ok(await _repository.SaveChangesAsync());
 | 
			
		||||
            var criterionTrialList = await _readingQuestionCriterionTrialRepository.Where(x =>x.IsConfirm&& x.TrialId == trialConfig.TrialId&&x.ReadingQuestionCriterionSystemId!=null&&x.SynchronizeOriginalTime==null).ToListAsync();
 | 
			
		||||
            foreach (var item in criterionTrialList)
 | 
			
		||||
            {
 | 
			
		||||
                await AsyncTrialCriterionDictionary(new AsyncTrialCriterionDictionaryInDto()
 | 
			
		||||
                {
 | 
			
		||||
                    TrialReadingCriterionId = item.Id
 | 
			
		||||
                });
 | 
			
		||||
            }
 | 
			
		||||
            return ResponseOutput.Ok(result);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -98,36 +98,36 @@ namespace IRaCIS.Core.Application.Triggers
 | 
			
		|||
 | 
			
		||||
            }
 | 
			
		||||
            // 触发临床数据
 | 
			
		||||
            if (context.ChangeType == ChangeType.Added)
 | 
			
		||||
            {
 | 
			
		||||
                var cRCClinicalDatas = await _clinicalDataTrialSetRepository.Where(x => x.TrialId == context.Entity.TrialId && x.UploadRole == UploadRole.CRC && x.IsConfirm)
 | 
			
		||||
            //if (context.ChangeType == ChangeType.Added)
 | 
			
		||||
            //{
 | 
			
		||||
            //    var cRCClinicalDatas = await _clinicalDataTrialSetRepository.Where(x => x.TrialId == context.Entity.TrialId && x.UploadRole == UploadRole.CRC && x.IsConfirm)
 | 
			
		||||
 | 
			
		||||
                  .Select(x => new
 | 
			
		||||
                  {
 | 
			
		||||
                      x.Id,
 | 
			
		||||
                      x.ClinicalDataLevel,
 | 
			
		||||
                  }).ToListAsync();
 | 
			
		||||
            //      .Select(x => new
 | 
			
		||||
            //      {
 | 
			
		||||
            //          x.Id,
 | 
			
		||||
            //          x.ClinicalDataLevel,
 | 
			
		||||
            //      }).ToListAsync();
 | 
			
		||||
 | 
			
		||||
                List<ReadingClinicalData> readingClinicals = new List<ReadingClinicalData>();
 | 
			
		||||
                readingClinicals.AddRange(
 | 
			
		||||
            //    List<ReadingClinicalData> readingClinicals = new List<ReadingClinicalData>();
 | 
			
		||||
            //    readingClinicals.AddRange(
 | 
			
		||||
 | 
			
		||||
                       cRCClinicalDatas.WhereIf(!context.Entity.IsBaseLine, x => x.ClinicalDataLevel == ClinicalLevel.SubjectVisit).Select(x => new ReadingClinicalData()
 | 
			
		||||
                       {
 | 
			
		||||
                           ClinicalDataTrialSetId = x.Id,
 | 
			
		||||
                           IsVisit = true,
 | 
			
		||||
                           SubjectId = context.Entity.SubjectId,
 | 
			
		||||
                           ReadingId = context.Entity.Id,
 | 
			
		||||
                           TrialId = context.Entity.TrialId
 | 
			
		||||
            //           cRCClinicalDatas.WhereIf(!context.Entity.IsBaseLine, x => x.ClinicalDataLevel == ClinicalLevel.SubjectVisit).Select(x => new ReadingClinicalData()
 | 
			
		||||
            //           {
 | 
			
		||||
            //               ClinicalDataTrialSetId = x.Id,
 | 
			
		||||
            //               IsVisit = true,
 | 
			
		||||
            //               SubjectId = context.Entity.SubjectId,
 | 
			
		||||
            //               ReadingId = context.Entity.Id,
 | 
			
		||||
            //               TrialId = context.Entity.TrialId
 | 
			
		||||
 | 
			
		||||
                       }).ToList()
 | 
			
		||||
            //           }).ToList()
 | 
			
		||||
 | 
			
		||||
               );
 | 
			
		||||
            //   );
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
                await _readingClinicalDataRepository.AddRangeAsync(readingClinicals);
 | 
			
		||||
                await _readingClinicalDataRepository.SaveChangesAsync();
 | 
			
		||||
            //    await _readingClinicalDataRepository.AddRangeAsync(readingClinicals);
 | 
			
		||||
            //    await _readingClinicalDataRepository.SaveChangesAsync();
 | 
			
		||||
 | 
			
		||||
            }
 | 
			
		||||
            //}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -16,6 +16,29 @@ namespace IRaCIS.Core.Domain.Share
 | 
			
		|||
        public static readonly string Group = "group";
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    /// <summary>
 | 
			
		||||
    /// GetClinicalType
 | 
			
		||||
    /// </summary>
 | 
			
		||||
    public enum GetClinicalType
 | 
			
		||||
    {
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// PM上传
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        PMUpload = 1,
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// CRC 上传 过确认
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        CRCConfirm = 2,
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 已审核
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        HasSign = 3
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /// <summary>
 | 
			
		||||
    /// 临床表格问题标识
 | 
			
		||||
    /// </summary>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -97,6 +97,8 @@ namespace IRaCIS.Core.Domain.Models
 | 
			
		|||
		public List<ReadingClinicalDataPDF> ReadingClinicalDataPDFList { get; set; }
 | 
			
		||||
 | 
			
		||||
       
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -48,6 +48,11 @@ namespace IRaCIS.Core.Domain.Models
 | 
			
		|||
        /// </summary>
 | 
			
		||||
        public int? MaxAnswerLength { get; set; }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 最大行数
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public int? MaxQuestionCount { get; set; }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 临床数据选项类型(无,自定义)
 | 
			
		||||
        /// </summary>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -48,6 +48,11 @@ namespace IRaCIS.Core.Domain.Models
 | 
			
		|||
        /// </summary>
 | 
			
		||||
        public int? MaxAnswerLength { get; set; }
 | 
			
		||||
        
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 最大行数
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public int? MaxQuestionCount { get; set; }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 临床数据选项类型(无,自定义)
 | 
			
		||||
        /// </summary>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -54,6 +54,10 @@ namespace IRaCIS.Core.Domain.Models
 | 
			
		|||
		[ForeignKey("ClinicalDataTrialSetId")]
 | 
			
		||||
		public ClinicalDataTrialSet ClinicalDataTrialSet { get; set; }
 | 
			
		||||
 | 
			
		||||
        [JsonIgnore]
 | 
			
		||||
        [ForeignKey("SubjectId")]
 | 
			
		||||
        public Subject Subject { get; set; }
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}	 
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -79,6 +79,11 @@ namespace IRaCIS.Core.Domain.Models
 | 
			
		|||
		public bool IsCRCConfirm { get; set; } = false;
 | 
			
		||||
 | 
			
		||||
		public bool IsPMConfirm { get; set; } = false;
 | 
			
		||||
 | 
			
		||||
		/// <summary>
 | 
			
		||||
		/// CRC是否正在申请撤回
 | 
			
		||||
		/// </summary>
 | 
			
		||||
		public bool IsCRCApplicationRevoke { get; set; } = false;
 | 
			
		||||
        public bool IsDeleted { get; set; }
 | 
			
		||||
 | 
			
		||||
		public DateTime? DeletedTime { get; set; }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -121,6 +121,8 @@ namespace IRaCIS.Core.Domain.Models
 | 
			
		|||
        public Guid? DeleteUserId { get; set; }
 | 
			
		||||
 | 
			
		||||
        public bool IsReReadingOrBackInfluenceAnalysis { get; set; }
 | 
			
		||||
        [JsonIgnore]
 | 
			
		||||
        public List<ClinicalForm> ClinicalFormList { get; set; }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        //是否分配了读片医生
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -0,0 +1,27 @@
 | 
			
		|||
using IRaCIS.Core.Domain.Models;
 | 
			
		||||
using Microsoft.EntityFrameworkCore.Metadata.Builders;
 | 
			
		||||
using Microsoft.EntityFrameworkCore;
 | 
			
		||||
using System;
 | 
			
		||||
using System.Collections.Generic;
 | 
			
		||||
using System.Linq;
 | 
			
		||||
using System.Text;
 | 
			
		||||
using System.Threading.Tasks;
 | 
			
		||||
 | 
			
		||||
namespace IRaCIS.Core.Infra.EFCore.EntityConfigration
 | 
			
		||||
{
 | 
			
		||||
    //public class ClinicalFromConfigration : IEntityTypeConfiguration<ClinicalForm>
 | 
			
		||||
    //{
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    //    public void Configure(EntityTypeBuilder<ClinicalForm> builder)
 | 
			
		||||
    //    {
 | 
			
		||||
    //       builder
 | 
			
		||||
    //      .HasOne(s => s.ReadingClinicalData)
 | 
			
		||||
    //      .WithMany(c => c.ClinicalFormList)
 | 
			
		||||
    //      .HasForeignKey(s => new { s.SubjectId, s.ReadingId })
 | 
			
		||||
    //      .HasPrincipalKey(c => new { c.SubjectId, c.ReadingId });
 | 
			
		||||
    //    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    //}
 | 
			
		||||
}
 | 
			
		||||
		Loading…
	
		Reference in New Issue