Merge branch 'master' of http://192.168.1.2:8033/IRaCIS_Core_Api
						commit
						75056923dc
					
				| 
						 | 
				
			
			@ -105,6 +105,11 @@ namespace IRaCIS.Core.Application.ViewModel
 | 
			
		|||
        /// </summary>
 | 
			
		||||
        public bool BaseLineLessThan30 { get; set; }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 非靶病灶中淋巴结病灶全部消失
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public bool NoTargetLymphLoss { get; set; }
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /// <summary>
 | 
			
		||||
| 
						 | 
				
			
			@ -187,6 +192,16 @@ namespace IRaCIS.Core.Application.ViewModel
 | 
			
		|||
        /// 至少有一个新靶病无法评估
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public bool ExixtsUnevaluableState { get; set; }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 当有“存在”状态的淋巴结新靶病灶
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public bool ExixtsLymphTarget { get; set; }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 当有“存在”或“太小”状态的非淋巴结新靶病灶
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public bool ExixtsOrLessNoLymphTarget{ get; set; }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /// <summary>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -487,11 +487,11 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
 | 
			
		|||
                 // 与前一访视SOD相比变化量
 | 
			
		||||
                 new ReadingCalculateData (){QuestionType=QuestionType.LastVisitSODChange,GetDecimalNullFun=GetLastTaskSODChange,IsConvertedTask=true},
 | 
			
		||||
 | 
			
		||||
                 //新靶病灶直径之和(iSOD)
 | 
			
		||||
                 // 新靶病灶直径之和(iSOD)
 | 
			
		||||
                 new ReadingCalculateData (){QuestionType=QuestionType.ISOD,GetDecimalNullFun=GetiSODData,IsConvertedTask=true},
 | 
			
		||||
 | 
			
		||||
                 // 与前一访视相比iSOD变化量
 | 
			
		||||
                new ReadingCalculateData (){QuestionType=QuestionType.LastVisitiSODChange,GetDecimalNullFun=GetISODChange,IsConvertedTask=true},
 | 
			
		||||
                 //  与触发iRECIST访视相比iSOD变化量
 | 
			
		||||
                new ReadingCalculateData (){QuestionType=QuestionType.ComparedTriggeringiSODChange,GetDecimalNullFun=GetComparedTriggeringiSODChange,IsConvertedTask=true},
 | 
			
		||||
 | 
			
		||||
				// 靶病灶评估
 | 
			
		||||
			    new ReadingCalculateData (){QuestionType=QuestionType.TargetLesion,GetStringFun=GetTargetLesionEvaluate,IsConvertedTask=false},
 | 
			
		||||
| 
						 | 
				
			
			@ -578,7 +578,7 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
 | 
			
		|||
                List<QuestionType> questionTypes = new List<QuestionType>()
 | 
			
		||||
                {
 | 
			
		||||
                    QuestionType.ISOD,
 | 
			
		||||
                    QuestionType.LastVisitiSODChange,
 | 
			
		||||
                    QuestionType.ComparedTriggeringiSODChange,
 | 
			
		||||
                    QuestionType.TargetLesion,
 | 
			
		||||
                    QuestionType.NoTargetLesion,
 | 
			
		||||
                    QuestionType.NewLesions,
 | 
			
		||||
| 
						 | 
				
			
			@ -1388,18 +1388,19 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
 | 
			
		|||
        }
 | 
			
		||||
        #endregion
 | 
			
		||||
 | 
			
		||||
        #region 与前一访视相比iSOD变化量
 | 
			
		||||
        #region 与触发iRECIST访视相比iSOD变化量
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///  与前一访视相比iSOD变化量
 | 
			
		||||
        ///  与触发iRECIST访视相比iSOD变化量
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="inDto"></param>
 | 
			
		||||
        /// <returns></returns>
 | 
			
		||||
        public async Task<decimal?> GetISODChange(ReadingCalculateDto inDto)
 | 
			
		||||
        public async Task<decimal?> GetComparedTriggeringiSODChange(ReadingCalculateDto inDto)
 | 
			
		||||
        {
 | 
			
		||||
 | 
			
		||||
            var lastTaskId = await this.GetLastVisitTaskId(inDto);
 | 
			
		||||
            var lastiSOD = (await _readingTaskQuestionAnswerRepository.Where(x => x.VisitTaskId == lastTaskId && x.ReadingQuestionTrial.QuestionType == QuestionType.ISOD).Select(x => x.Answer).FirstOrDefaultAsync()).IsNullOrEmptyReturn0();
 | 
			
		||||
            var firstChangeTaskId = await GetFirstChangeTaskId(inDto);
 | 
			
		||||
          
 | 
			
		||||
            var firstChangeiSOD = (await _readingTaskQuestionAnswerRepository.Where(x => x.VisitTaskId == firstChangeTaskId && x.ReadingQuestionTrial.QuestionType == QuestionType.ISOD).Select(x => x.Answer).FirstOrDefaultAsync()).IsNullOrEmptyReturn0();
 | 
			
		||||
 | 
			
		||||
            var value = await GetiSODData(inDto);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1407,7 +1408,7 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
 | 
			
		|||
            {
 | 
			
		||||
                return null;
 | 
			
		||||
            }
 | 
			
		||||
            return value.NullChange0() - lastiSOD;
 | 
			
		||||
            return value.NullChange0() - firstChangeiSOD;
 | 
			
		||||
        }
 | 
			
		||||
        #endregion
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1702,10 +1703,10 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
 | 
			
		|||
        /// {
 | 
			
		||||
        ///     靶病灶疗效为 NE
 | 
			
		||||
        /// }
 | 
			
		||||
        /// else if (所有非淋巴结靶病灶消失,径线总和为0 mm && 所有淋巴结靶病灶的短径缩小到 < 10 mm)
 | 
			
		||||
        /// else if (所有非淋巴结靶病灶消失,径线总和为0 mm && 所有淋巴结靶病灶的短径缩小到 < 10 mm && 非靶病灶中淋巴结病灶全部消失)
 | 
			
		||||
        /// {
 | 
			
		||||
        ///     靶病灶疗效为 iCR
 | 
			
		||||
        /// } else if (与基线期SOD相比减小≥30 %)
 | 
			
		||||
        /// } else if (与基线期SOD相比减小≥30 %||(所有非淋巴结靶病灶消失,径线总和为0 mm && 所有淋巴结靶病灶的短径缩小到 < 10 mm&&非靶病灶中有淋巴结病灶为非消失))
 | 
			
		||||
        /// {
 | 
			
		||||
        ///     靶病灶疗效为 iPR
 | 
			
		||||
        /// }
 | 
			
		||||
| 
						 | 
				
			
			@ -1721,7 +1722,6 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
 | 
			
		|||
 | 
			
		||||
            var tableQuestion = inDto.QuestionInfo.Where(x => x.LesionType == LesionType.TargetLesion).SelectMany(x => x.TableRowInfoList).ToList();
 | 
			
		||||
            var lastVisitTaskId = await GetLastVisitTaskId(inDto);
 | 
			
		||||
            var firstChangeTaskId = await GetFirstChangeTaskId(inDto);
 | 
			
		||||
            var targetLesionQuestionId = inDto.QuestionInfo.Where(x => x.QuestionType == QuestionType.TargetLesion).Select(x => x.QuestionId).FirstOrDefault();
 | 
			
		||||
 | 
			
		||||
            var sodQuestionId = inDto.QuestionInfo.Where(x => x.QuestionType == QuestionType.SOD).Select(x => x.QuestionId).FirstOrDefault();
 | 
			
		||||
| 
						 | 
				
			
			@ -1738,8 +1738,7 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
 | 
			
		|||
                MeetRECISTPD = (await GetTargetLesionEvaluate(inDto)) == TargetAssessment.PD.GetEnumInt(),
 | 
			
		||||
 | 
			
		||||
                // 本次访视SOD与触发iRECIST访视相比本次访视SOD增加不小于5mm
 | 
			
		||||
                SODTiggerAddGreaterThan5 = firstChangeTaskId==inDto.VisitTaskId ? false : await GetSODData(inDto) - (await _readingTaskQuestionAnswerRepository.Where(x => x.VisitTaskId == firstChangeTaskId && x.ReadingQuestionTrialId == sodQuestionId)
 | 
			
		||||
                .Select(x => x.Answer).FirstOrDefaultAsync()).IsNullOrEmptyReturn0() >= 5,
 | 
			
		||||
                SODTiggerAddGreaterThan5 = inDto.QuestionInfo.Where(x => x.QuestionType == QuestionType.ComparedTriggeringiSODChange).Sum(x => x.Answer.IsNullOrEmptyReturn0()) >= 5,
 | 
			
		||||
 | 
			
		||||
                //比整体访视期间最低点SOD增加≥20 %
 | 
			
		||||
                LowSodAddGreaterThan20Percent = inDto.QuestionInfo.Where(x => x.QuestionType == QuestionType.LowPercent).Sum(x => x.Answer.IsNullOrEmptyReturn0()) >= 20,
 | 
			
		||||
| 
						 | 
				
			
			@ -1761,8 +1760,22 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
 | 
			
		|||
 | 
			
		||||
                // 与基线期SOD相比减小≥30 %
 | 
			
		||||
                BaseLineLessThan30 = inDto.QuestionInfo.Where(x => x.QuestionType == QuestionType.SODPercent).Sum(x => x.Answer.IsNullOrEmptyReturn0()) <= -30,
 | 
			
		||||
 | 
			
		||||
                //非靶病灶中淋巴结病灶全部消失
 | 
			
		||||
                NoTargetLymphLoss = true,
 | 
			
		||||
            };
 | 
			
		||||
 | 
			
		||||
            var noTargetTableQuestion = inDto.QuestionInfo.Where(x => x.LesionType == LesionType.NonTargetLesions).SelectMany(x => x.TableRowInfoList).ToList();
 | 
			
		||||
 | 
			
		||||
            foreach (var item in noTargetTableQuestion)
 | 
			
		||||
            {
 | 
			
		||||
                if (item.TableQuestionList.Any(x => x.QuestionMark == QuestionMark.IsLymph && x.Answer.EqEnum(YesOrNoOrNa.Yes)))
 | 
			
		||||
                {
 | 
			
		||||
                   
 | 
			
		||||
                    resultData.NoTargetLymphLoss = resultData.NoTargetLymphLoss && item.TableQuestionList.Where(x => x.QuestionMark == QuestionMark.State).Select(x => x.Answer).FirstOrDefault() == NoTargetState.Loss.GetEnumInt();
 | 
			
		||||
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            foreach (var item in tableQuestion)
 | 
			
		||||
            {
 | 
			
		||||
| 
						 | 
				
			
			@ -1811,14 +1824,14 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
 | 
			
		|||
                //     靶病灶疗效为 NE
 | 
			
		||||
                result = TargetAssessment.NE;
 | 
			
		||||
             }
 | 
			
		||||
            // else if (所有非淋巴结靶病灶消失,径线总和为0 mm && 所有淋巴结靶病灶的短径缩小到 < 10 mm)
 | 
			
		||||
            else if(resultData.AllLesionVanish&&resultData.AllMinorAxisLessThan10)
 | 
			
		||||
            // else if (所有非淋巴结靶病灶消失,径线总和为0 mm && 所有淋巴结靶病灶的短径缩小到 < 10 mm && 非靶病灶中淋巴结病灶全部消失)
 | 
			
		||||
            else if (resultData.AllLesionVanish&&resultData.AllMinorAxisLessThan10&& resultData.NoTargetLymphLoss)
 | 
			
		||||
            {
 | 
			
		||||
                //     靶病灶疗效为 iCR
 | 
			
		||||
                result = TargetAssessment.iCR;
 | 
			
		||||
            }
 | 
			
		||||
            // else if (与基线期SOD相比减小≥30 %)
 | 
			
		||||
            else if(resultData.BaseLineLessThan30)
 | 
			
		||||
            // else if (与基线期SOD相比减小≥30 %||(所有非淋巴结靶病灶消失,径线总和为0 mm && 所有淋巴结靶病灶的短径缩小到 < 10 mm&&非靶病灶中有淋巴结病灶为非消失))
 | 
			
		||||
            else if (resultData.BaseLineLessThan30||(resultData.AllLesionVanish && resultData.AllMinorAxisLessThan10 && !resultData.NoTargetLymphLoss))
 | 
			
		||||
             {
 | 
			
		||||
                //     靶病灶疗效为 iPR
 | 
			
		||||
                result = TargetAssessment.iPR;
 | 
			
		||||
| 
						 | 
				
			
			@ -1982,11 +1995,11 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
 | 
			
		|||
        /// {
 | 
			
		||||
        ///    疗效为 iCPD
 | 
			
		||||
        /// }
 | 
			
		||||
        /// else if (上一访视新靶病灶评估为“iCPD”&& 有"存在"状态的新靶病灶)
 | 
			
		||||
        /// else if (上一访视新靶病灶评估为“iCPD”&& (当有“存在”状态的淋巴结新靶病灶||当有“存在”或“太小”状态的非淋巴结新靶病灶))
 | 
			
		||||
        /// {
 | 
			
		||||
        ///     疗效为 iCPD
 | 
			
		||||
        /// }
 | 
			
		||||
        /// else if (有存在状态的新靶病灶时评估为该结果)
 | 
			
		||||
        ///  else if (当有“存在”状态的淋巴结新靶病灶||当有“存在”或“太小”状态的非淋巴结新靶病灶)
 | 
			
		||||
        /// {
 | 
			
		||||
        ///     疗效为 iUPD
 | 
			
		||||
        /// }
 | 
			
		||||
| 
						 | 
				
			
			@ -2029,15 +2042,41 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
 | 
			
		|||
                // 至少有一个新靶病无法评估
 | 
			
		||||
                ExixtsUnevaluableState = tableQuestion.SelectMany(x => x.TableQuestionList).Any(x => x.QuestionMark == QuestionMark.State && x.Answer.EqEnum(NewTargetLesionState.NotEvaluable)),
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
                // 当有“存在”状态的淋巴结新靶病灶
 | 
			
		||||
                ExixtsLymphTarget = false,
 | 
			
		||||
 | 
			
		||||
                // 当有“存在”或“太小”状态的非淋巴结新靶病灶
 | 
			
		||||
                ExixtsOrLessNoLymphTarget = false,
 | 
			
		||||
            };
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
            foreach (var item in tableQuestion)
 | 
			
		||||
            {
 | 
			
		||||
                data.AllVanish = data.AllVanish && item.TableQuestionList.Any(x => x.QuestionMark == QuestionMark.State && x.Answer.EqEnum(NewTargetLesionState.Loss));
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
                data.ExixtsLymphTarget = data.ExixtsLymphTarget || 
 | 
			
		||||
                    (
 | 
			
		||||
                    item.TableQuestionList.Any(x => x.QuestionMark == QuestionMark.State && x.Answer.EqEnum(NewTargetLesionState.Exist)) &&
 | 
			
		||||
                item.TableQuestionList.Any(x => x.QuestionMark == QuestionMark.IsLymph && x.Answer.EqEnum(YesOrNoOrNa.Yes))
 | 
			
		||||
                );
 | 
			
		||||
 | 
			
		||||
                data.ExixtsOrLessNoLymphTarget = data.ExixtsLymphTarget || 
 | 
			
		||||
                    (
 | 
			
		||||
                    
 | 
			
		||||
                    (
 | 
			
		||||
                    item.TableQuestionList.Any(x => x.QuestionMark == QuestionMark.State && x.Answer.EqEnum(NewTargetLesionState.Exist)) 
 | 
			
		||||
                    || item.TableQuestionList.Any(x => x.QuestionMark == QuestionMark.State && x.Answer.EqEnum(NewTargetLesionState.TooSmall))
 | 
			
		||||
                    )
 | 
			
		||||
                    
 | 
			
		||||
                    &&
 | 
			
		||||
              item.TableQuestionList.Any(x => x.QuestionMark == QuestionMark.IsLymph && !x.Answer.EqEnum(YesOrNoOrNa.Yes))
 | 
			
		||||
              );
 | 
			
		||||
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            NewTargetLesionAssessment result = NewTargetLesionAssessment.ND;
 | 
			
		||||
            NewTargetLesionAssessment? result = null;
 | 
			
		||||
 | 
			
		||||
            // if(所有新靶病灶消失或一直不存在任何新靶病灶) 
 | 
			
		||||
            if(data.NotExistsNewTargetLesion||data.AllVanish)
 | 
			
		||||
| 
						 | 
				
			
			@ -2051,14 +2090,14 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
 | 
			
		|||
                //    疗效为 iCPD
 | 
			
		||||
                result = NewTargetLesionAssessment.iCPD;
 | 
			
		||||
            }
 | 
			
		||||
            // else if (上一访视新靶病灶评估为“iCPD”&& 有"存在"状态的新靶病灶)
 | 
			
		||||
            else if (data.LastTaskNewTargetLesion.EqEnum(NewTargetLesionAssessment.iCPD) && data.HaveExixtsState)
 | 
			
		||||
            // else if (上一访视新靶病灶评估为“iCPD”&& (当有“存在”状态的淋巴结新靶病灶||当有“存在”或“太小”状态的非淋巴结新靶病灶))
 | 
			
		||||
            else if (data.LastTaskNewTargetLesion.EqEnum(NewTargetLesionAssessment.iCPD) && data.ExixtsLymphTarget && data.ExixtsOrLessNoLymphTarget)
 | 
			
		||||
             {
 | 
			
		||||
                //     疗效为 iCPD
 | 
			
		||||
                result = NewTargetLesionAssessment.iCPD;
 | 
			
		||||
            }
 | 
			
		||||
            // else if (有存在状态的新靶病灶时评估为该结果)
 | 
			
		||||
            else if ( data.HaveExixtsState)
 | 
			
		||||
            // else if (当有“存在”状态的淋巴结新靶病灶||当有“存在”或“太小”状态的非淋巴结新靶病灶)
 | 
			
		||||
            else if ( data.HaveExixtsState||data.ExixtsOrLessNoLymphTarget)
 | 
			
		||||
             {
 | 
			
		||||
                //     疗效为 iUPD
 | 
			
		||||
                result = NewTargetLesionAssessment.iUPD;
 | 
			
		||||
| 
						 | 
				
			
			@ -2070,7 +2109,7 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
 | 
			
		|||
                result = NewTargetLesionAssessment.NE;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            return result.GetEnumInt();
 | 
			
		||||
            return result==null?string.Empty: result.Value.GetEnumInt();
 | 
			
		||||
        }
 | 
			
		||||
        #endregion
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1246,6 +1246,11 @@ namespace IRaCIS.Core.Domain.Share
 | 
			
		|||
        /// 无法评估
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        NotEvaluable=3,
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 太小
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        TooSmall=4,
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /// <summary>
 | 
			
		||||
| 
						 | 
				
			
			@ -1469,9 +1474,9 @@ namespace IRaCIS.Core.Domain.Share
 | 
			
		|||
        ISOD = 24,
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 与前一访视相比iSOD变化量
 | 
			
		||||
        /// 与触发iRECIST访视相比iSOD变化量  Compared with triggering iRECIST visit
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        LastVisitiSODChange = 25,
 | 
			
		||||
        ComparedTriggeringiSODChange = 25,
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 新靶病灶评估
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue