代码修改
							parent
							
								
									2f224047bc
								
							
						
					
					
						commit
						bf54bcfd9b
					
				| 
						 | 
				
			
			@ -22,6 +22,11 @@ namespace IRaCIS.Core.Application.ViewModel
 | 
			
		|||
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
    public class GetSplitPPdInDto
 | 
			
		||||
    {
 | 
			
		||||
		public Guid RowId { get; set; }
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public class ReadingTaskQuestionAnswerDto : ReadingTaskQuestionAnswer
 | 
			
		||||
    {
 | 
			
		||||
        public QuestionType QuestionType { get; set; }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -13,6 +13,7 @@ using MassTransit;
 | 
			
		|||
using System.Reflection.Metadata.Ecma335;
 | 
			
		||||
using System.Linq;
 | 
			
		||||
using NPOI.SS.Formula.Functions;
 | 
			
		||||
using DocumentFormat.OpenXml.Drawing.Charts;
 | 
			
		||||
 | 
			
		||||
namespace IRaCIS.Core.Application.Service.ReadingCalculate
 | 
			
		||||
{
 | 
			
		||||
| 
						 | 
				
			
			@ -885,19 +886,106 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
 | 
			
		|||
                    var stateQuestion = await _readingTableQuestionTrialRepository.Where(x => x.ReadingQuestionId == targetQuestion.Id && x.QuestionMark == QuestionMark.State).FirstOrDefaultAsync();
 | 
			
		||||
                    if (stateQuestion != null)
 | 
			
		||||
                    { 
 | 
			
		||||
 | 
			
		||||
                        // 找到主病灶的状态
 | 
			
		||||
                        var state =await _readingTableQuestionAnswerRepository.Where(x=>x.VisitTaskId==inDto.VisitTaskId&&x.RowIndex== (int)Math.Floor(inDto.RowNumber)&&x.TableQuestionId== stateQuestion.Id).Select(x=>x.Answer).FirstOrDefaultAsync();
 | 
			
		||||
 | 
			
		||||
                        // 长径
 | 
			
		||||
						var majorAxis = (await _readingTableQuestionAnswerRepository.Where(x => 
 | 
			
		||||
                        x.VisitTaskId == inDto.VisitTaskId && 
 | 
			
		||||
                        x.RowIndex == (int)Math.Floor(inDto.RowNumber) && 
 | 
			
		||||
                        x.ReadingTableQuestionTrial.QuestionMark == QuestionMark.MajorAxis &&
 | 
			
		||||
                        x.QuestionId== targetQuestion.Id
 | 
			
		||||
						).Select(x => x.Answer).FirstOrDefaultAsync()).IsNullOrEmptyReturn0();
 | 
			
		||||
 | 
			
		||||
						// 短径
 | 
			
		||||
						var shortAxis = (await _readingTableQuestionAnswerRepository.Where(x =>
 | 
			
		||||
						x.VisitTaskId == inDto.VisitTaskId &&
 | 
			
		||||
						x.RowIndex == (int)Math.Floor(inDto.RowNumber) &&
 | 
			
		||||
						x.ReadingTableQuestionTrial.QuestionMark == QuestionMark.ShortAxis &&
 | 
			
		||||
						x.QuestionId == targetQuestion.Id
 | 
			
		||||
						).Select(x => x.Answer).FirstOrDefaultAsync()).IsNullOrEmptyReturn0();
 | 
			
		||||
 | 
			
		||||
						// 找到ppd问题
 | 
			
		||||
						var ppdQuestion = await _readingTableQuestionTrialRepository.Where(x => x.ReadingQuestionId == targetQuestion.Id && x.QuestionMark == QuestionMark.PPD).FirstOrDefaultAsync();
 | 
			
		||||
 | 
			
		||||
                        if(ppdQuestion!=null)
 | 
			
		||||
                        {
 | 
			
		||||
                            var ppdAnswerList= await _readingTableQuestionAnswerRepository.Where(x => x.VisitTaskId == inDto.VisitTaskId  && x.TableQuestionId == stateQuestion.Id)
 | 
			
		||||
                                .Where(x=>  x.RowIndex >= (int)Math.Floor(inDto.RowNumber) && x.RowIndex< ((int)Math.Floor(inDto.RowNumber)+1))
 | 
			
		||||
                                .Select(x => x.Answer).ToListAsync();
 | 
			
		||||
                            var ppdAnswerList= await _readingTableQuestionAnswerRepository.Where(x =>
 | 
			
		||||
                               x.VisitTaskId == inDto.VisitTaskId &&
 | 
			
		||||
							   x.ReadingTableQuestionTrial.QuestionMark == QuestionMark.PPD &&
 | 
			
		||||
						       x.QuestionId == targetQuestion.Id &&
 | 
			
		||||
							   x.RowIndex >= (int)Math.Floor(inDto.RowNumber) && x.RowIndex < ((int)Math.Floor(inDto.RowNumber) + 1)
 | 
			
		||||
							   ).Select(x => x.Answer).ToListAsync();
 | 
			
		||||
 | 
			
		||||
                            var allPPd = ppdAnswerList.Select(x => x.IsNullOrEmptyReturn0()).Sum();
 | 
			
		||||
 | 
			
		||||
                            // 是否符合疾病进展
 | 
			
		||||
                            var accord = false;
 | 
			
		||||
 | 
			
		||||
                            var lowPPDInfo = await GetLowPPDInfo(new GetPPDInfoInDto()
 | 
			
		||||
                            {
 | 
			
		||||
                                RowIndex = (int)Math.Floor(inDto.RowNumber),
 | 
			
		||||
                                VisitTaskId = inDto.VisitTaskId,
 | 
			
		||||
                                QuestionId = inDto.QuestionId,
 | 
			
		||||
                            });
 | 
			
		||||
 | 
			
		||||
                         
 | 
			
		||||
                            if (lowPPDInfo.NadirPPD != 0)
 | 
			
		||||
                            {
 | 
			
		||||
                                //15mm < 当前靶病灶LDi≤20mm  &&
 | 
			
		||||
                                //&& 相比最低点PPD增加百分比 ≥50%  &&
 | 
			
		||||
                                //(相比PPD最低点LDi增加值 ≥5 mm
 | 
			
		||||
                                //or相比PPD最低点SDi增加值≥5 mm)
 | 
			
		||||
                                if (15 < majorAxis && majorAxis <= 20 &&
 | 
			
		||||
                                    (allPPd - lowPPDInfo.NadirPPD) * 100 / lowPPDInfo.NadirPPD >= 50 &&
 | 
			
		||||
                                    (majorAxis - lowPPDInfo.LowPPDLDi >= 5 ||
 | 
			
		||||
                                    shortAxis - lowPPDInfo.LowPPDSDi >= 5)
 | 
			
		||||
                                    )
 | 
			
		||||
                                {
 | 
			
		||||
                                    accord = true;
 | 
			
		||||
								}
 | 
			
		||||
 | 
			
		||||
								//当前靶病灶LDi>20 mm
 | 
			
		||||
								//相比最低点PPD增加百分比 ≥50%
 | 
			
		||||
								//	(相比PPD最低点LDi增加值 ≥10 mm
 | 
			
		||||
								//  或者相比PPD最低点SDi增加值Sdi ≥10 mm)
 | 
			
		||||
								if ( majorAxis > 20 &&
 | 
			
		||||
									(allPPd - lowPPDInfo.NadirPPD) * 100 / lowPPDInfo.NadirPPD >= 50 &&
 | 
			
		||||
									(majorAxis - lowPPDInfo.LowPPDLDi >= 10 ||
 | 
			
		||||
									shortAxis - lowPPDInfo.LowPPDSDi >= 10)
 | 
			
		||||
									)
 | 
			
		||||
								{
 | 
			
		||||
									accord = true;
 | 
			
		||||
								}
 | 
			
		||||
 | 
			
		||||
							}
 | 
			
		||||
 | 
			
		||||
                            // 符合疾病进展
 | 
			
		||||
                            if (accord)
 | 
			
		||||
                            {
 | 
			
		||||
                                await _readingTableQuestionAnswerRepository.UpdatePartialFromQueryAsync(x =>
 | 
			
		||||
                                x.VisitTaskId == inDto.VisitTaskId &&
 | 
			
		||||
                                x.RowIndex == (int)Math.Floor(inDto.RowNumber) &&
 | 
			
		||||
                                x.ReadingTableQuestionTrial.QuestionMark == QuestionMark.State &&
 | 
			
		||||
                                x.QuestionId == targetQuestion.Id, x => new ReadingTableQuestionAnswer()
 | 
			
		||||
                                {
 | 
			
		||||
                                    Answer = TargetState.DiseaseProgression.GetEnumInt()
 | 
			
		||||
                                }
 | 
			
		||||
                                );
 | 
			
		||||
                            }
 | 
			
		||||
                            else if (state == TargetState.DiseaseProgression.GetEnumInt())
 | 
			
		||||
                            {
 | 
			
		||||
								await _readingTableQuestionAnswerRepository.UpdatePartialFromQueryAsync(x =>
 | 
			
		||||
									x.VisitTaskId == inDto.VisitTaskId &&
 | 
			
		||||
									x.RowIndex == (int)Math.Floor(inDto.RowNumber) &&
 | 
			
		||||
									x.ReadingTableQuestionTrial.QuestionMark == QuestionMark.State &&
 | 
			
		||||
									x.QuestionId == targetQuestion.Id, x => new ReadingTableQuestionAnswer()
 | 
			
		||||
									{
 | 
			
		||||
										Answer = TargetState.Exist.GetEnumInt()
 | 
			
		||||
									}
 | 
			
		||||
									);
 | 
			
		||||
							}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
						}
 | 
			
		||||
| 
						 | 
				
			
			@ -910,6 +998,28 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
 | 
			
		|||
        }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 获取分裂病灶的PPd之和 不包括当前的主病灶
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <returns></returns>
 | 
			
		||||
        [HttpPost]
 | 
			
		||||
        public async Task<decimal> GetSplitPPdSum(GetSplitPPdInDto inDto)
 | 
			
		||||
        {
 | 
			
		||||
            var rowinfo = await _readingTableAnswerRowInfoRepository.Where(x => x.Id == inDto.RowId).FirstNotNullAsync();
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
			var ppdAnswerList = await _readingTableQuestionAnswerRepository.Where(x =>
 | 
			
		||||
							x.VisitTaskId == rowinfo.VisitTaskId &&
 | 
			
		||||
							x.ReadingTableQuestionTrial.QuestionMark == QuestionMark.PPD &&
 | 
			
		||||
							x.QuestionId == rowinfo.QuestionId &&
 | 
			
		||||
							x.RowIndex > (int)Math.Floor(rowinfo.RowIndex) && x.RowIndex < ((int)Math.Floor(rowinfo.RowIndex) + 1)
 | 
			
		||||
							).Select(x => x.Answer).ToListAsync();
 | 
			
		||||
 | 
			
		||||
			var allPPd = ppdAnswerList.Select(x => x.IsNullOrEmptyReturn0()).Sum();
 | 
			
		||||
 | 
			
		||||
            return allPPd;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		#region 将上一次的访视病灶添加到这一次
 | 
			
		||||
 | 
			
		||||
		/// <summary>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue