Merge branch 'master' of http://192.168.1.2:8033/IRaCIS_Core_Api
						commit
						ba121827ac
					
				| 
						 | 
				
			
			@ -131,7 +131,9 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
 | 
			
		|||
 | 
			
		||||
        public bool IsConvertedTask { get; set; }
 | 
			
		||||
 | 
			
		||||
        public bool IsAnalysisCreate { get; set; }
 | 
			
		||||
		public Guid? BeforeConvertedTaskId { get; set; }
 | 
			
		||||
 | 
			
		||||
		public bool IsAnalysisCreate { get; set; }
 | 
			
		||||
 | 
			
		||||
        public bool? IsSelfAnalysis { get; set; }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -295,7 +297,13 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
 | 
			
		|||
        public Func<ChangeAllTaskDto,Task> ChangeAllTaskFun { get; set; }
 | 
			
		||||
 | 
			
		||||
        public bool? IsConvertedTask { get; set; }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 是否是正在转化
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public bool IsBeTransforming { get; set; } = false;
 | 
			
		||||
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -117,19 +117,20 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
 | 
			
		|||
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            ReadingCalculateDto readingData = new ReadingCalculateDto()
 | 
			
		||||
            {
 | 
			
		||||
                SubjectId = visitTask.SubjectId,
 | 
			
		||||
                TaskBlindName = visitTask.TaskBlindName,
 | 
			
		||||
                IsConvertedTask = await _visitTaskRepository.Where(x => x.Id == visitTaskId).Select(x => x.IsConvertedTask).FirstOrDefaultAsync(),
 | 
			
		||||
                VisitTaskId = visitTaskId,
 | 
			
		||||
                SubjectVisitId = visitTask.SourceSubjectVisitId!.Value,
 | 
			
		||||
                QuestionInfo = questionInfos,
 | 
			
		||||
                CriterionId = visitTask.TrialReadingCriterionId,
 | 
			
		||||
                TrialId = visitTask.TrialId,
 | 
			
		||||
                IsAnalysisCreate = visitTask.IsAnalysisCreate,
 | 
			
		||||
                IsSelfAnalysis = visitTask.IsSelfAnalysis,
 | 
			
		||||
                IsBaseLine = subjectVisit!.IsBaseLine,
 | 
			
		||||
			ReadingCalculateDto readingData = new ReadingCalculateDto()
 | 
			
		||||
			{
 | 
			
		||||
				SubjectId = visitTask.SubjectId,
 | 
			
		||||
				TaskBlindName = visitTask.TaskBlindName,
 | 
			
		||||
				IsConvertedTask = await _visitTaskRepository.Where(x => x.Id == visitTaskId).Select(x => x.IsConvertedTask).FirstOrDefaultAsync(),
 | 
			
		||||
				BeforeConvertedTaskId = visitTask.BeforeConvertedTaskId,
 | 
			
		||||
				VisitTaskId = visitTaskId,
 | 
			
		||||
				SubjectVisitId = visitTask.SourceSubjectVisitId!.Value,
 | 
			
		||||
				QuestionInfo = questionInfos,
 | 
			
		||||
				CriterionId = visitTask.TrialReadingCriterionId,
 | 
			
		||||
				TrialId = visitTask.TrialId,
 | 
			
		||||
				IsAnalysisCreate = visitTask.IsAnalysisCreate,
 | 
			
		||||
				IsSelfAnalysis = visitTask.IsSelfAnalysis,
 | 
			
		||||
				IsBaseLine = subjectVisit!.IsBaseLine,
 | 
			
		||||
                DoctorUserId = visitTask.DoctorUserId,
 | 
			
		||||
                TrialReadingCriterionId = visitTask.TrialReadingCriterionId,
 | 
			
		||||
                BaseLineTaskId = baseLinetaskId,
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -470,12 +470,18 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
 | 
			
		|||
                // IRECIST靶病灶评估
 | 
			
		||||
                new ReadingCalculateData (){QuestionType=QuestionType.TargetLesion,GetStringFun=GetIRECISTTargetLesionEvaluate,IsConvertedTask=true},
 | 
			
		||||
 | 
			
		||||
                // 转化时靶病灶评估
 | 
			
		||||
			    new ReadingCalculateData (){QuestionType=QuestionType.TargetLesion,GetStringFun=GetConvertingTargetLesionEvaluate,IsConvertedTask=true,IsBeTransforming=true},
 | 
			
		||||
 | 
			
		||||
				//非靶病灶评估
 | 
			
		||||
			    new ReadingCalculateData (){QuestionType=QuestionType.NoTargetLesion,GetStringFun=GetNoTargetLesionEvaluate,IsConvertedTask=false},
 | 
			
		||||
 | 
			
		||||
                //IRECIST非靶病灶评估
 | 
			
		||||
			    new ReadingCalculateData (){QuestionType=QuestionType.NoTargetLesion,GetStringFun=GetIRECISTNoTargetLesionEvaluate,IsConvertedTask=true},
 | 
			
		||||
 | 
			
		||||
                // 转化时非靶病灶评估
 | 
			
		||||
			    new ReadingCalculateData (){QuestionType=QuestionType.NoTargetLesion,GetStringFun=GetConvertingNoTargetLesionEvaluate,IsConvertedTask=true ,IsBeTransforming=true},
 | 
			
		||||
 | 
			
		||||
                // IRECIST新靶病灶评估
 | 
			
		||||
                new ReadingCalculateData (){QuestionType=QuestionType.NewTargetLesion,GetStringFun=GetNewTargetLesionEvaluate,IsConvertedTask=true},
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -506,6 +512,9 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
 | 
			
		|||
                 //IRECIST整体肿瘤评估
 | 
			
		||||
			    new ReadingCalculateData (){QuestionType=QuestionType.Tumor,GetStringFun=GetIRECSITTargetLesionEvaluate,IsConvertedTask=true},
 | 
			
		||||
 | 
			
		||||
                // 转化时整体肿瘤评估
 | 
			
		||||
			   new ReadingCalculateData (){QuestionType=QuestionType.Tumor,GetStringFun=GetConvertingTumor,IsConvertedTask=true,IsBeTransforming=true},
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
                 //IRECIST整体肿瘤评估
 | 
			
		||||
			    new ReadingCalculateData (){QuestionType=QuestionType.Tumor,GetStringFun=GetIRECSITTargetLesionEvaluate,IsConvertedTask=true},
 | 
			
		||||
| 
						 | 
				
			
			@ -517,6 +526,25 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
 | 
			
		|||
            // 过滤转化的
 | 
			
		||||
 | 
			
		||||
            calculateList = calculateList.Where(x => x.IsConvertedTask == inDto.IsConvertedTask||x.IsConvertedTask==null).ToList();
 | 
			
		||||
            if (inDto.IsConvertedTask)
 | 
			
		||||
            {
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
                if (inDto.BeforeConvertedTaskId != null)
 | 
			
		||||
                {
 | 
			
		||||
                    List<QuestionType> questionTypes = calculateList.Where(x => x.IsBeTransforming).Select(x => x.QuestionType).ToList();
 | 
			
		||||
 | 
			
		||||
                    // 排除这几个 且不为正在转化的
 | 
			
		||||
                    calculateList = calculateList.Where(x => !(questionTypes.Contains(x.QuestionType)&& x.IsBeTransforming == false)).ToList();
 | 
			
		||||
 | 
			
		||||
                }
 | 
			
		||||
                else
 | 
			
		||||
                {
 | 
			
		||||
                    calculateList = calculateList.Where(x => x.IsBeTransforming == false).ToList();
 | 
			
		||||
 | 
			
		||||
				}
 | 
			
		||||
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
            // 没有靶病灶只计算最后几个
 | 
			
		||||
            if (inDto.QuestionInfo.Where(x => x.LesionType == LesionType.TargetLesion).Sum(x => x.TableRowInfoList.Count()) == 0)
 | 
			
		||||
| 
						 | 
				
			
			@ -2391,6 +2419,9 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
 | 
			
		|||
		public async Task<string> GetNewLesionIRECSITEvaluate(ReadingCalculateDto inDto)
 | 
			
		||||
		{
 | 
			
		||||
 | 
			
		||||
            // 逻辑改了  现在转变后全部都是NA;
 | 
			
		||||
            return NewLesionAssessment.NA.GetEnumInt();
 | 
			
		||||
 | 
			
		||||
			NewLesionAssessment result = NewLesionAssessment.No;
 | 
			
		||||
			if (inDto.IsBaseLine)
 | 
			
		||||
			{
 | 
			
		||||
| 
						 | 
				
			
			@ -2682,78 +2713,182 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
 | 
			
		|||
 | 
			
		||||
            return result == null ? string.Empty : ((OverallAssessment)result).GetEnumInt();
 | 
			
		||||
        }
 | 
			
		||||
        #endregion
 | 
			
		||||
        #endregion
 | 
			
		||||
		#endregion
 | 
			
		||||
		#endregion
 | 
			
		||||
 | 
			
		||||
		#region 转化时计算
 | 
			
		||||
 | 
			
		||||
		#region 获取转化的靶病灶评估
 | 
			
		||||
		/// <summary>
 | 
			
		||||
		/// 获取转化的靶病灶评估
 | 
			
		||||
		/// </summary>
 | 
			
		||||
		/// <param name="inDto"></param>
 | 
			
		||||
		/// <returns></returns>
 | 
			
		||||
		public async Task<string> GetConvertingTargetLesionEvaluate(ReadingCalculateDto inDto)
 | 
			
		||||
		{
 | 
			
		||||
			var beforeConvertedAnswer = await _readingTaskQuestionAnswerRepository.Where(x => x.VisitTaskId == inDto.BeforeConvertedTaskId && x.ReadingQuestionTrial.QuestionType == QuestionType.TargetLesion).Select(x => x.Answer).FirstOrDefaultAsync();
 | 
			
		||||
 | 
			
		||||
			Dictionary<string, string> answerConverDic = new Dictionary<string, string>()
 | 
			
		||||
			{
 | 
			
		||||
				{TargetAssessment.SD.GetEnumInt(),TargetAssessment.iSD.GetEnumInt() },
 | 
			
		||||
				{TargetAssessment.PR.GetEnumInt(),TargetAssessment.iPR.GetEnumInt() },
 | 
			
		||||
				{TargetAssessment.PD.GetEnumInt(),TargetAssessment.iUPD.GetEnumInt() },
 | 
			
		||||
				{TargetAssessment.CR.GetEnumInt(), TargetAssessment.iCR.GetEnumInt() },
 | 
			
		||||
			};
 | 
			
		||||
 | 
			
		||||
			try
 | 
			
		||||
			{
 | 
			
		||||
				return answerConverDic[beforeConvertedAnswer];
 | 
			
		||||
 | 
			
		||||
			}
 | 
			
		||||
			catch (Exception)
 | 
			
		||||
			{
 | 
			
		||||
 | 
			
		||||
				return beforeConvertedAnswer;
 | 
			
		||||
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
		}
 | 
			
		||||
		#endregion
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        #region 获取靶病灶评估
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 获取靶病灶评估
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="inDto"></param>
 | 
			
		||||
        /// <remarks>
 | 
			
		||||
        /// 靶病灶疗效评估算法-20230306确认版本:
 | 
			
		||||
        ///if(基线没有靶病灶) 
 | 
			
		||||
        ///{
 | 
			
		||||
        ///	靶病灶疗效为 ND
 | 
			
		||||
        ///}else
 | 
			
		||||
        ///{
 | 
			
		||||
        ///	初始化靶病灶疗效为 SD
 | 
			
		||||
        ///
 | 
			
		||||
        ///	if (与基线期SOD相比减小≥30 %)
 | 
			
		||||
        ///	{
 | 
			
		||||
        ///		靶病灶疗效为 PR
 | 
			
		||||
        ///
 | 
			
		||||
        ///    }
 | 
			
		||||
        ///
 | 
			
		||||
        ///if (非淋巴结靶病灶长径之和 == 0 并且所有淋巴结靶病灶的短径 < 10且淋巴结非靶病灶全部消失)
 | 
			
		||||
        ///	{
 | 
			
		||||
        ///    靶病灶疗效为 CR
 | 
			
		||||
        ///
 | 
			
		||||
        ///    }
 | 
			
		||||
        ///
 | 
			
		||||
        ///if (有被评估为NE的单个靶病灶)
 | 
			
		||||
        ///	{
 | 
			
		||||
        ///    靶病灶疗效为 NE
 | 
			
		||||
        ///
 | 
			
		||||
        ///    }
 | 
			
		||||
        ///
 | 
			
		||||
        ///if (最低点SOD > 0)
 | 
			
		||||
        ///{
 | 
			
		||||
        ///    if(比整体访视期间最低点SOD增加≥20 % 且与整个访视期间最低点相比增加的值≥5 mm)
 | 
			
		||||
        ///		{
 | 
			
		||||
        ///        靶病灶疗效为 PD
 | 
			
		||||
        ///
 | 
			
		||||
        ///        }
 | 
			
		||||
        ///}
 | 
			
		||||
        ///else
 | 
			
		||||
        ///{
 | 
			
		||||
        ///    //进入该分支最低点SOD=0
 | 
			
		||||
        ///    if (当前访视SOD > 0 且与整个访视期间最低点相比增加的值≥5 mm)
 | 
			
		||||
        ///		{
 | 
			
		||||
        ///        靶病灶疗效为PD
 | 
			
		||||
        ///
 | 
			
		||||
        ///        }
 | 
			
		||||
        ///}
 | 
			
		||||
        ///
 | 
			
		||||
        ///if(上次访视点评估是CR)
 | 
			
		||||
        ///	{
 | 
			
		||||
        ///    if (当前访视点淋巴结病灶,至少一个淋巴结靶病灶短径≥10 mm 并且该淋巴结靶病灶短径绝对增加值≥5 mm)
 | 
			
		||||
        ///		{
 | 
			
		||||
        ///        靶病灶疗效为 PD
 | 
			
		||||
        ///
 | 
			
		||||
        ///        }
 | 
			
		||||
        ///    if (当前访视点非淋巴结病灶至少一个非淋巴结靶病灶的长径>0 mm。)
 | 
			
		||||
        ///		{
 | 
			
		||||
        ///        靶病灶疗效为 PD
 | 
			
		||||
        ///
 | 
			
		||||
        ///        }
 | 
			
		||||
        ///}
 | 
			
		||||
        ///}
 | 
			
		||||
        /// </remarks>
 | 
			
		||||
        /// <returns></returns>
 | 
			
		||||
        public async Task<string> GetTargetLesionEvaluate(ReadingCalculateDto inDto)
 | 
			
		||||
		#region 获取转化的非靶病灶评估
 | 
			
		||||
 | 
			
		||||
		/// <summary>
 | 
			
		||||
		/// 获取转化的非靶病灶评估
 | 
			
		||||
		/// </summary>
 | 
			
		||||
		/// <param name="inDto"></param>
 | 
			
		||||
		/// <returns></returns>
 | 
			
		||||
		public async Task<string> GetConvertingNoTargetLesionEvaluate(ReadingCalculateDto inDto)
 | 
			
		||||
        {
 | 
			
		||||
			var beforeConvertedAnswer = await _readingTaskQuestionAnswerRepository.Where(x => x.VisitTaskId == inDto.BeforeConvertedTaskId && x.ReadingQuestionTrial.QuestionType == QuestionType.NoTargetLesion).Select(x => x.Answer).FirstOrDefaultAsync();
 | 
			
		||||
 | 
			
		||||
			Dictionary<string, string> answerConverDic = new Dictionary<string, string>()
 | 
			
		||||
			{
 | 
			
		||||
				{NoTargetAssessment.NN.GetEnumInt(),NoTargetAssessment.iNN.GetEnumInt() },
 | 
			
		||||
				{NoTargetAssessment.PD.GetEnumInt(),NoTargetAssessment.iUPD.GetEnumInt() },
 | 
			
		||||
				{NoTargetAssessment.CR.GetEnumInt(), NoTargetAssessment.iCR.GetEnumInt() },
 | 
			
		||||
			};
 | 
			
		||||
 | 
			
		||||
			try
 | 
			
		||||
			{
 | 
			
		||||
				return answerConverDic[beforeConvertedAnswer];
 | 
			
		||||
 | 
			
		||||
			}
 | 
			
		||||
			catch (Exception)
 | 
			
		||||
			{
 | 
			
		||||
 | 
			
		||||
				return beforeConvertedAnswer;
 | 
			
		||||
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		#endregion
 | 
			
		||||
 | 
			
		||||
		#region 获取转化的整体肿瘤评估
 | 
			
		||||
 | 
			
		||||
		/// <summary>
 | 
			
		||||
		/// 获取转化的整体肿瘤评估
 | 
			
		||||
		/// </summary>
 | 
			
		||||
		/// <param name="inDto"></param>
 | 
			
		||||
		/// <returns></returns>
 | 
			
		||||
		public async Task<string> GetConvertingTumor(ReadingCalculateDto inDto)
 | 
			
		||||
		{
 | 
			
		||||
			var beforeConvertedAnswer = await _readingTaskQuestionAnswerRepository.Where(x => x.VisitTaskId == inDto.BeforeConvertedTaskId && x.ReadingQuestionTrial.QuestionType == QuestionType.Tumor).Select(x => x.Answer).FirstOrDefaultAsync();
 | 
			
		||||
 | 
			
		||||
			Dictionary<string, string> answerConverDic = new Dictionary<string, string>()
 | 
			
		||||
			{
 | 
			
		||||
				{OverallAssessment.NN.GetEnumInt(),OverallAssessment.iNN.GetEnumInt() },
 | 
			
		||||
				{OverallAssessment.PD.GetEnumInt(),OverallAssessment.iUPD.GetEnumInt() },
 | 
			
		||||
				{OverallAssessment.CR.GetEnumInt(), OverallAssessment.iCR.GetEnumInt() },
 | 
			
		||||
			    {OverallAssessment.SD.GetEnumInt(), OverallAssessment.iSD.GetEnumInt() },
 | 
			
		||||
			    {OverallAssessment.PR.GetEnumInt(), OverallAssessment.iPR.GetEnumInt() },
 | 
			
		||||
			};
 | 
			
		||||
 | 
			
		||||
			try
 | 
			
		||||
			{
 | 
			
		||||
				return answerConverDic[beforeConvertedAnswer];
 | 
			
		||||
 | 
			
		||||
			}
 | 
			
		||||
			catch (Exception)
 | 
			
		||||
			{
 | 
			
		||||
 | 
			
		||||
				return beforeConvertedAnswer;
 | 
			
		||||
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		#endregion
 | 
			
		||||
		#endregion
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		#region 获取靶病灶评估
 | 
			
		||||
		/// <summary>
 | 
			
		||||
		/// 获取靶病灶评估
 | 
			
		||||
		/// </summary>
 | 
			
		||||
		/// <param name="inDto"></param>
 | 
			
		||||
		/// <remarks>
 | 
			
		||||
		/// 靶病灶疗效评估算法-20230306确认版本:
 | 
			
		||||
		///if(基线没有靶病灶) 
 | 
			
		||||
		///{
 | 
			
		||||
		///	靶病灶疗效为 ND
 | 
			
		||||
		///}else
 | 
			
		||||
		///{
 | 
			
		||||
		///	初始化靶病灶疗效为 SD
 | 
			
		||||
		///
 | 
			
		||||
		///	if (与基线期SOD相比减小≥30 %)
 | 
			
		||||
		///	{
 | 
			
		||||
		///		靶病灶疗效为 PR
 | 
			
		||||
		///
 | 
			
		||||
		///    }
 | 
			
		||||
		///
 | 
			
		||||
		///if (非淋巴结靶病灶长径之和 == 0 并且所有淋巴结靶病灶的短径 < 10且淋巴结非靶病灶全部消失)
 | 
			
		||||
		///	{
 | 
			
		||||
		///    靶病灶疗效为 CR
 | 
			
		||||
		///
 | 
			
		||||
		///    }
 | 
			
		||||
		///
 | 
			
		||||
		///if (有被评估为NE的单个靶病灶)
 | 
			
		||||
		///	{
 | 
			
		||||
		///    靶病灶疗效为 NE
 | 
			
		||||
		///
 | 
			
		||||
		///    }
 | 
			
		||||
		///
 | 
			
		||||
		///if (最低点SOD > 0)
 | 
			
		||||
		///{
 | 
			
		||||
		///    if(比整体访视期间最低点SOD增加≥20 % 且与整个访视期间最低点相比增加的值≥5 mm)
 | 
			
		||||
		///		{
 | 
			
		||||
		///        靶病灶疗效为 PD
 | 
			
		||||
		///
 | 
			
		||||
		///        }
 | 
			
		||||
		///}
 | 
			
		||||
		///else
 | 
			
		||||
		///{
 | 
			
		||||
		///    //进入该分支最低点SOD=0
 | 
			
		||||
		///    if (当前访视SOD > 0 且与整个访视期间最低点相比增加的值≥5 mm)
 | 
			
		||||
		///		{
 | 
			
		||||
		///        靶病灶疗效为PD
 | 
			
		||||
		///
 | 
			
		||||
		///        }
 | 
			
		||||
		///}
 | 
			
		||||
		///
 | 
			
		||||
		///if(上次访视点评估是CR)
 | 
			
		||||
		///	{
 | 
			
		||||
		///    if (当前访视点淋巴结病灶,至少一个淋巴结靶病灶短径≥10 mm 并且该淋巴结靶病灶短径绝对增加值≥5 mm)
 | 
			
		||||
		///		{
 | 
			
		||||
		///        靶病灶疗效为 PD
 | 
			
		||||
		///
 | 
			
		||||
		///        }
 | 
			
		||||
		///    if (当前访视点非淋巴结病灶至少一个非淋巴结靶病灶的长径>0 mm。)
 | 
			
		||||
		///		{
 | 
			
		||||
		///        靶病灶疗效为 PD
 | 
			
		||||
		///
 | 
			
		||||
		///        }
 | 
			
		||||
		///}
 | 
			
		||||
		///}
 | 
			
		||||
		/// </remarks>
 | 
			
		||||
		/// <returns></returns>
 | 
			
		||||
		public async Task<string> GetTargetLesionEvaluate(ReadingCalculateDto inDto)
 | 
			
		||||
        {
 | 
			
		||||
            var tableQuestion = inDto.QuestionInfo.Where(x => x.LesionType == LesionType.TargetLesion).SelectMany(x => x.TableRowInfoList).ToList();
 | 
			
		||||
            if (inDto.IsBaseLine)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue