Merge branch 'master' of http://192.168.1.2:8033/IRaCIS_Core_Api
						commit
						cb8b603296
					
				| 
						 | 
				
			
			@ -14,6 +14,7 @@ using IRaCIS.Core.Infrastructure;
 | 
			
		|||
using AutoMapper;
 | 
			
		||||
using MassTransit;
 | 
			
		||||
using IRaCIS.Core.Infra.EFCore.Common;
 | 
			
		||||
using System.Linq.Expressions;
 | 
			
		||||
 | 
			
		||||
namespace IRaCIS.Core.Application.Service
 | 
			
		||||
{
 | 
			
		||||
| 
						 | 
				
			
			@ -40,15 +41,17 @@ namespace IRaCIS.Core.Application.Service
 | 
			
		|||
        private readonly IRepository<ReadingQuestionCriterionTrial> _trialReadingCriterionRepository;
 | 
			
		||||
 | 
			
		||||
        private readonly IRepository<ClinicalDataTrialSet> _trialClinicalDataSetRepository;
 | 
			
		||||
 | 
			
		||||
        private readonly IRepository<ReadingClinicalData> _readingClinicalDataRepository;
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
        public VisitTaskHelpeService(IRepository<VisitTask> visitTaskRepository, IRepository<SubjectUser> subjectUserRepository, IRepository<Trial> trialRepository, IEasyCachingProvider provider,
 | 
			
		||||
             IRepository<SubjectVisit> subjectVisitRepository,
 | 
			
		||||
             IRepository<ReadModule> readModuleRepository,
 | 
			
		||||
             IRepository<ReadingJudgeInfo> readingJudgeInfoRepository,
 | 
			
		||||
             IRepository<TaskAllocationRule> taskAllocationRuleRepository, IMapper mapper, IUserInfo userInfo, IRepository<VisitTaskReReading> visitTaskReReadingRepository,
 | 
			
		||||
             IRepository<ReadingQuestionCriterionTrial> trialReadingCriterionRepository, IRepository<ClinicalDataTrialSet> trialClinicalDataSetRepository)
 | 
			
		||||
             IRepository<ReadingQuestionCriterionTrial> trialReadingCriterionRepository, IRepository<ClinicalDataTrialSet> trialClinicalDataSetRepository, IRepository<ReadingClinicalData> readingClinicalDataRepository)
 | 
			
		||||
        {
 | 
			
		||||
            _readingClinicalDataRepository = readingClinicalDataRepository;
 | 
			
		||||
            _trialClinicalDataSetRepository = trialClinicalDataSetRepository;
 | 
			
		||||
 | 
			
		||||
            _visitTaskRepository = visitTaskRepository;
 | 
			
		||||
| 
						 | 
				
			
			@ -119,7 +122,8 @@ namespace IRaCIS.Core.Application.Service
 | 
			
		|||
                {
 | 
			
		||||
                    var blindTaskName = string.Empty;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
                    var isNeedClinicalDataSign = IsNeedClinicalDataSign(ReadingCategory.Visit, subjectVisit.IsBaseLine, trialReadingCriterionConfig.CriterionType, clinicalDataConfirmList);
 | 
			
		||||
                    var isClinicalDataSign = IsClinicalDataSign(ReadingCategory.Visit, subjectVisit.IsBaseLine, trialReadingCriterionConfig.CriterionType, clinicalDataConfirmList, subjectVisit.Id, trialId);
 | 
			
		||||
 | 
			
		||||
                    if (visitNumList.IndexOf(subjectVisit.VisitNum) == 0)
 | 
			
		||||
                    {
 | 
			
		||||
| 
						 | 
				
			
			@ -157,7 +161,8 @@ namespace IRaCIS.Core.Application.Service
 | 
			
		|||
                            ReadingCategory = ReadingCategory.Visit,
 | 
			
		||||
 | 
			
		||||
                            TrialReadingCriterionId = trialReadingCriterionConfig.TrialReadingCriterionId,
 | 
			
		||||
                            IsNeedClinicalDataSign = IsNeedClinicalDataSign(ReadingCategory.Visit, subjectVisit.IsBaseLine, trialReadingCriterionConfig.CriterionType, clinicalDataConfirmList)
 | 
			
		||||
                            IsNeedClinicalDataSign = isNeedClinicalDataSign,
 | 
			
		||||
                            IsClinicalDataSign = isClinicalDataSign
 | 
			
		||||
                        });
 | 
			
		||||
 | 
			
		||||
                        var task2 = await _visitTaskRepository.AddAsync(new VisitTask()
 | 
			
		||||
| 
						 | 
				
			
			@ -176,7 +181,8 @@ namespace IRaCIS.Core.Application.Service
 | 
			
		|||
                            ReadingCategory = ReadingCategory.Visit,
 | 
			
		||||
 | 
			
		||||
                            TrialReadingCriterionId = trialReadingCriterionConfig.TrialReadingCriterionId,
 | 
			
		||||
                            IsNeedClinicalDataSign = IsNeedClinicalDataSign(ReadingCategory.Visit, subjectVisit.IsBaseLine, trialReadingCriterionConfig.CriterionType, clinicalDataConfirmList)
 | 
			
		||||
                            IsNeedClinicalDataSign = isNeedClinicalDataSign,
 | 
			
		||||
                            IsClinicalDataSign = isClinicalDataSign
 | 
			
		||||
                        });
 | 
			
		||||
 | 
			
		||||
                        currentMaxCodeInt = currentMaxCodeInt + 2;
 | 
			
		||||
| 
						 | 
				
			
			@ -226,7 +232,8 @@ namespace IRaCIS.Core.Application.Service
 | 
			
		|||
                            TaskCode = AppSettings.GetCodeStr(currentMaxCodeInt + 1, nameof(VisitTask)),
 | 
			
		||||
                            ReadingCategory = ReadingCategory.Visit,
 | 
			
		||||
                            TrialReadingCriterionId = trialReadingCriterionConfig.TrialReadingCriterionId,
 | 
			
		||||
                            IsNeedClinicalDataSign = IsNeedClinicalDataSign(ReadingCategory.Visit, subjectVisit.IsBaseLine, trialReadingCriterionConfig.CriterionType, clinicalDataConfirmList)
 | 
			
		||||
                            IsNeedClinicalDataSign = isNeedClinicalDataSign,
 | 
			
		||||
                            IsClinicalDataSign = isClinicalDataSign
 | 
			
		||||
                        });
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -302,6 +309,65 @@ namespace IRaCIS.Core.Application.Service
 | 
			
		|||
        
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        // 有可能在任务生成之前 就签名完了临床数据
 | 
			
		||||
        private bool IsClinicalDataSign(ReadingCategory readingCategory, bool isbaseLine, CriterionType criterionType, List<ClinicalDataTrialSet> trialClinicalDataSetList,Guid readingId, Guid trialId)
 | 
			
		||||
        {
 | 
			
		||||
            var isClinicalDataSign = false;
 | 
			
		||||
 | 
			
		||||
            var needSignCount = 0;
 | 
			
		||||
 | 
			
		||||
            //CRC 的自动签名  不用管  只用处理PM的就好
 | 
			
		||||
            var haveSignedCount = _readingClinicalDataRepository
 | 
			
		||||
                .Where(t => t.TrialId == trialId && t.IsSign && t.ReadingClinicalDataState == ReadingClinicalDataStatus.HaveSigned && t.ReadingId == readingId && t.ClinicalDataTrialSet.UploadRole == UploadRole.PM).Count();
 | 
			
		||||
 | 
			
		||||
            //访视
 | 
			
		||||
            if (readingCategory == ReadingCategory.Visit)
 | 
			
		||||
            {
 | 
			
		||||
                if (isbaseLine)
 | 
			
		||||
                {
 | 
			
		||||
                    //CRC 的自动签名   不用管 只用处理PM 的就好
 | 
			
		||||
                    needSignCount = trialClinicalDataSetList.Where(t => t.CriterionEnumList.Any(c => c == (int)criterionType) && (t.ClinicalDataLevel == ClinicalLevel.Subject || t.ClinicalDataLevel == ClinicalLevel.SubjectVisit) && t.UploadRole == UploadRole.PM).Count();
 | 
			
		||||
                }
 | 
			
		||||
                else
 | 
			
		||||
                {
 | 
			
		||||
                    needSignCount = trialClinicalDataSetList.Where(t => t.CriterionEnumList.Any(c => c == (int)criterionType) && t.ClinicalDataLevel == ClinicalLevel.SubjectVisit && t.UploadRole == UploadRole.PM).Count();
 | 
			
		||||
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            else if (readingCategory == ReadingCategory.Judge)
 | 
			
		||||
            {
 | 
			
		||||
 | 
			
		||||
            }
 | 
			
		||||
            //阅片期
 | 
			
		||||
            else if (readingCategory == ReadingCategory.Global)
 | 
			
		||||
            {
 | 
			
		||||
                needSignCount = trialClinicalDataSetList.Where(t => t.CriterionEnumList.Any(c => c == (int)criterionType) && t.ClinicalDataLevel == ClinicalLevel.ImageRead && t.UploadRole == UploadRole.PM).Count();
 | 
			
		||||
 | 
			
		||||
            }
 | 
			
		||||
            // 肿瘤学
 | 
			
		||||
            else if (readingCategory == ReadingCategory.Oncology)
 | 
			
		||||
            {
 | 
			
		||||
                return trialClinicalDataSetList.Any(t => t.CriterionEnumList.Any(c => c == (int)criterionType) && t.ClinicalDataLevel == ClinicalLevel.OncologyRead);
 | 
			
		||||
            }
 | 
			
		||||
            else
 | 
			
		||||
            {
 | 
			
		||||
                needSignCount = trialClinicalDataSetList.Where(t => t.CriterionEnumList.Any(c => c == (int)criterionType) && t.ClinicalDataLevel == ClinicalLevel.OncologyRead && t.UploadRole == UploadRole.PM).Count();
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            if (needSignCount == haveSignedCount && needSignCount != 0)
 | 
			
		||||
            {
 | 
			
		||||
                isClinicalDataSign = true;
 | 
			
		||||
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            return isClinicalDataSign;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        public async Task AddTaskAsync(GenerateTaskCommand generateTaskCommand)
 | 
			
		||||
        {
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -346,6 +412,9 @@ namespace IRaCIS.Core.Application.Service
 | 
			
		|||
 | 
			
		||||
                                var blindTaskName = string.Empty;
 | 
			
		||||
 | 
			
		||||
                                var isNeedClinicalDataSign = IsNeedClinicalDataSign(ReadingCategory.Visit, subjectVisit.IsBaseLine, trialReadingCriterionConfig.CriterionType, clinicalDataConfirmList);
 | 
			
		||||
                                var isClinicalDataSign = IsClinicalDataSign(ReadingCategory.Visit, subjectVisit.IsBaseLine, trialReadingCriterionConfig.CriterionType, clinicalDataConfirmList, subjectVisit.Id, trialId);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
                                if (visitNumList.IndexOf(subjectVisit.VisitNum) == 0)
 | 
			
		||||
                                {
 | 
			
		||||
| 
						 | 
				
			
			@ -385,7 +454,8 @@ namespace IRaCIS.Core.Application.Service
 | 
			
		|||
                                        ReadingCategory = ReadingCategory.Visit,
 | 
			
		||||
 | 
			
		||||
                                        TrialReadingCriterionId = trialReadingCriterionConfig.TrialReadingCriterionId,
 | 
			
		||||
                                        IsNeedClinicalDataSign = IsNeedClinicalDataSign(ReadingCategory.Visit, subjectVisit.IsBaseLine, trialReadingCriterionConfig.CriterionType, clinicalDataConfirmList)
 | 
			
		||||
                                        IsNeedClinicalDataSign = isNeedClinicalDataSign,
 | 
			
		||||
                                        IsClinicalDataSign = isClinicalDataSign
 | 
			
		||||
                                    }); ;
 | 
			
		||||
 | 
			
		||||
                                    var task2 = await _visitTaskRepository.AddAsync(new VisitTask()
 | 
			
		||||
| 
						 | 
				
			
			@ -404,7 +474,8 @@ namespace IRaCIS.Core.Application.Service
 | 
			
		|||
                                        ReadingCategory = ReadingCategory.Visit,
 | 
			
		||||
 | 
			
		||||
                                        TrialReadingCriterionId = trialReadingCriterionConfig.TrialReadingCriterionId,
 | 
			
		||||
                                        IsNeedClinicalDataSign = IsNeedClinicalDataSign(ReadingCategory.Visit, subjectVisit.IsBaseLine, trialReadingCriterionConfig.CriterionType, clinicalDataConfirmList)
 | 
			
		||||
                                        IsNeedClinicalDataSign = isNeedClinicalDataSign,
 | 
			
		||||
                                        IsClinicalDataSign=isClinicalDataSign
 | 
			
		||||
                                    });
 | 
			
		||||
 | 
			
		||||
                                    currentMaxCodeInt = currentMaxCodeInt + 2;
 | 
			
		||||
| 
						 | 
				
			
			@ -536,6 +607,7 @@ namespace IRaCIS.Core.Application.Service
 | 
			
		|||
                                                                        SuggesteFinishedTime = DateTime.Now.AddDays(7),
 | 
			
		||||
                                                                        TrialReadingCriterionId = latestTask.TrialReadingCriterionId,
 | 
			
		||||
                                                                        IsNeedClinicalDataSign = latestTask.IsNeedClinicalDataSign,
 | 
			
		||||
                                                                        IsClinicalDataSign=latestTask.IsClinicalDataSign
 | 
			
		||||
                                                                    });
 | 
			
		||||
 | 
			
		||||
                                                                    currentMaxCodeInt = currentMaxCodeInt + 1;
 | 
			
		||||
| 
						 | 
				
			
			@ -592,6 +664,7 @@ namespace IRaCIS.Core.Application.Service
 | 
			
		|||
 | 
			
		||||
                                                                        TrialReadingCriterionId = latestTask.TrialReadingCriterionId,
 | 
			
		||||
                                                                        IsNeedClinicalDataSign = latestTask.IsNeedClinicalDataSign,
 | 
			
		||||
                                                                        IsClinicalDataSign = latestTask.IsClinicalDataSign
 | 
			
		||||
                                                                    });
 | 
			
		||||
 | 
			
		||||
                                                                    currentMaxCodeInt = currentMaxCodeInt + 1;
 | 
			
		||||
| 
						 | 
				
			
			@ -669,7 +742,8 @@ namespace IRaCIS.Core.Application.Service
 | 
			
		|||
                                        ReadingCategory = ReadingCategory.Visit,
 | 
			
		||||
 | 
			
		||||
                                        TrialReadingCriterionId = trialReadingCriterionConfig.TrialReadingCriterionId,
 | 
			
		||||
                                        IsNeedClinicalDataSign = IsNeedClinicalDataSign(ReadingCategory.Visit, subjectVisit.IsBaseLine, trialReadingCriterionConfig.CriterionType, clinicalDataConfirmList)
 | 
			
		||||
                                        IsNeedClinicalDataSign = isNeedClinicalDataSign,
 | 
			
		||||
                                        IsClinicalDataSign = isClinicalDataSign
 | 
			
		||||
                                    });
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -796,6 +870,7 @@ namespace IRaCIS.Core.Application.Service
 | 
			
		|||
 | 
			
		||||
                                                                                TrialReadingCriterionId = latestTask.TrialReadingCriterionId,
 | 
			
		||||
                                                                                IsNeedClinicalDataSign = latestTask.IsNeedClinicalDataSign,
 | 
			
		||||
                                                                                IsClinicalDataSign = latestTask.IsClinicalDataSign
 | 
			
		||||
 | 
			
		||||
                                                                            });
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1133,7 +1208,8 @@ namespace IRaCIS.Core.Application.Service
 | 
			
		|||
                                ReadingCategory = item.ReadingCategory,
 | 
			
		||||
 | 
			
		||||
                                TrialReadingCriterionId = originalTaskInfo.TrialReadingCriterionId,
 | 
			
		||||
                                IsNeedClinicalDataSign = IsNeedClinicalDataSign(ReadingCategory.Global, false, criterionType, clinicalDataConfirmList)
 | 
			
		||||
                                IsNeedClinicalDataSign = IsNeedClinicalDataSign(ReadingCategory.Global, false, criterionType, clinicalDataConfirmList),
 | 
			
		||||
                                IsClinicalDataSign=IsClinicalDataSign(ReadingCategory.Global, false, criterionType, clinicalDataConfirmList,item.ReadModuleId,trialId)
 | 
			
		||||
                            });
 | 
			
		||||
 | 
			
		||||
                            currentMaxCodeInt = currentMaxCodeInt + 1;
 | 
			
		||||
| 
						 | 
				
			
			@ -1180,7 +1256,8 @@ namespace IRaCIS.Core.Application.Service
 | 
			
		|||
 | 
			
		||||
                            TrialReadingCriterionId = originalTaskInfo.TrialReadingCriterionId,
 | 
			
		||||
 | 
			
		||||
                            IsNeedClinicalDataSign = IsNeedClinicalDataSign(ReadingCategory.Oncology, false, criterionType, clinicalDataConfirmList)
 | 
			
		||||
                            IsNeedClinicalDataSign = IsNeedClinicalDataSign(ReadingCategory.Oncology, false, criterionType, clinicalDataConfirmList),
 | 
			
		||||
                            IsClinicalDataSign = IsClinicalDataSign(ReadingCategory.Oncology, false, criterionType, clinicalDataConfirmList, item.ReadModuleId, trialId)
 | 
			
		||||
 | 
			
		||||
                        });
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1103,6 +1103,9 @@ namespace IRaCIS.Core.Application.Image.QA
 | 
			
		|||
        [Authorize(Policy = IRaCISPolicy.CRC)]
 | 
			
		||||
        public async Task<IResponseOutput> CRCRequestToQC(CRCRequestToQCCommand cRCRequestToQCCommand)
 | 
			
		||||
        {
 | 
			
		||||
 | 
			
		||||
            var trialId = cRCRequestToQCCommand.TrialId;
 | 
			
		||||
 | 
			
		||||
            var trialConfig = (await _trialRepository
 | 
			
		||||
                .Select(t => new { TrialId = t.Id, t.QCProcessEnum, t.IsImageConsistencyVerification, t.IsUrgent, t.IsHaveFirstGiveMedicineDate, t.ClinicalInformationTransmissionEnum })
 | 
			
		||||
                .FirstOrDefaultAsync(t => t.TrialId == cRCRequestToQCCommand.TrialId)).IfNullThrowException();
 | 
			
		||||
| 
						 | 
				
			
			@ -1131,7 +1134,8 @@ namespace IRaCIS.Core.Application.Image.QA
 | 
			
		|||
                return ResponseOutput.NotOk("当前批量提交访视的影像数据,其中部分已由其他CRC提交。", 3, ApiResponseCodeEnum.NeedTips);
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
            //获取确认的临床数据配置
 | 
			
		||||
            var clinicalDataConfirmList = _repository.Where<ClinicalDataTrialSet>(t => t.TrialId == trialId && t.IsConfirm).ToList();
 | 
			
		||||
 | 
			
		||||
            // 别人未提交的
 | 
			
		||||
            foreach (var dbSubjectVisit in dbSubjectVisitList)
 | 
			
		||||
| 
						 | 
				
			
			@ -1144,8 +1148,37 @@ namespace IRaCIS.Core.Application.Image.QA
 | 
			
		|||
                }
 | 
			
		||||
 | 
			
		||||
                //基线  且配置了临床数据  
 | 
			
		||||
                if (trialConfig.ClinicalInformationTransmissionEnum != 0 && dbSubjectVisit.IsBaseLine/*&&dbSubjectVisit.ClinicalDataSignUserId==null*/)
 | 
			
		||||
                if (trialConfig.ClinicalInformationTransmissionEnum != 0 /*&& dbSubjectVisit.IsBaseLine*//*&&dbSubjectVisit.ClinicalDataSignUserId==null*/)
 | 
			
		||||
                {
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
                    ////找到需要确认的PDF 临床数据  如果没有CRC 没有上传  那么就添加一条没有文件的记录
 | 
			
		||||
 | 
			
		||||
                    //var crcNeedConfirmClinicalDataSetList = clinicalDataConfirmList.Where(t => t.UploadRole == UploadRole.CRC && t.ClinicalUploadType == ClinicalUploadType.PDF).ToList();
 | 
			
		||||
 | 
			
		||||
                    //// 找到CRC 已经自己添加的临床PDF数据文件
 | 
			
		||||
 | 
			
		||||
                    //var crcAddClinicalDataIdList = _readingClinicalDataRepository.Where(t => t.ReadingId == dbSubjectVisit.Id && t.ClinicalDataTrialSet.UploadRole == UploadRole.CRC && t.ClinicalDataTrialSet.ClinicalUploadType == ClinicalUploadType.PDF)
 | 
			
		||||
                    //    .Select(t => new { t.ClinicalDataTrialSetId }).ToList();
 | 
			
		||||
 | 
			
		||||
                    //foreach (var crcNeedConfirmClinicalDataSet in crcNeedConfirmClinicalDataSetList)
 | 
			
		||||
                    //{
 | 
			
		||||
                    //    if (!crcAddClinicalDataIdList.Any(t => t.ClinicalDataTrialSetId == crcNeedConfirmClinicalDataSet.Id))
 | 
			
		||||
                    //    {
 | 
			
		||||
                    //        await _repository.AddAsync(new ReadingClinicalData()
 | 
			
		||||
                    //        {
 | 
			
		||||
                    //            TrialId = dbSubjectVisit.TrialId,
 | 
			
		||||
                    //            SubjectId = dbSubjectVisit.SubjectId,
 | 
			
		||||
                    //            ReadingId = dbSubjectVisit.Id,
 | 
			
		||||
                    //            ClinicalDataTrialSetId = crcNeedConfirmClinicalDataSet.Id,
 | 
			
		||||
                    //            IsVisit = true,
 | 
			
		||||
                    //            IsSign = true,
 | 
			
		||||
                    //            ReadingClinicalDataState = ReadingClinicalDataStatus.HaveSigned
 | 
			
		||||
 | 
			
		||||
                    //        });
 | 
			
		||||
                    //    }
 | 
			
		||||
                    //}
 | 
			
		||||
 | 
			
		||||
                    //已确认临床数据完整性
 | 
			
		||||
                    dbSubjectVisit.IsConfirmedClinicalData = true;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1158,6 +1191,8 @@ namespace IRaCIS.Core.Application.Image.QA
 | 
			
		|||
                        ReadingClinicalDataState = ReadingClinicalDataStatus.HaveSigned
 | 
			
		||||
                    });
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
                    //var signSuccess = await _repository.UpdateFromQueryAsync<TrialSign>(t => t.Id == cRCRequestToQCCommand.SignId, u => new TrialSign() { IsCompleted = true });
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue