diff --git a/IRaCIS.Core.Application/Service/ReadingCalculate/IRECIST1Point1CalculateService.cs b/IRaCIS.Core.Application/Service/ReadingCalculate/IRECIST1Point1CalculateService.cs index 3477311fe..ce7dffdbb 100644 --- a/IRaCIS.Core.Application/Service/ReadingCalculate/IRECIST1Point1CalculateService.cs +++ b/IRaCIS.Core.Application/Service/ReadingCalculate/IRECIST1Point1CalculateService.cs @@ -750,6 +750,20 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate tableRowAnswers.ForEach(x => { + switch (x.SplitOrMergeType) + { + case SplitOrMergeType.Merge: + case SplitOrMergeType.Merged: + x.SplitOrMergeType = SplitOrMergeType.Merged; + break; + case SplitOrMergeType.MergeMain: + case SplitOrMergeType.MergeMained: + x.SplitOrMergeType = SplitOrMergeType.MergeMained; + break; + default: + x.SplitOrMergeType = null; + break; + } x.VisitTaskId = visitTaskId; x.IsCurrentTaskAdd = false; x.Id = NewId.NextGuid(); @@ -781,18 +795,27 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate // QuestionMark.ShortAxis, //}; //} - - var tableAnswers = copyTableAnswers.Select(x => new ReadingTableQuestionAnswer - { - Id = NewId.NextGuid(), - Answer = notNeedCopyMarks.Contains(x.QuestionMark) ? string.Empty : x.Answer, - QuestionId = x.QuestionId, - RowIndex = x.RowIndex, - RowId = tableRowAnswers.Where(y => y.OriginalId == x.RowId).Select(x => x.Id).FirstOrDefault(), - TableQuestionId = x.TableQuestionId, - TrialId = x.TrialId, - VisitTaskId = visitTaskId, - }).ToList(); + var mergedRowIds = tableRowAnswers.Where(x => x.SplitOrMergeType == SplitOrMergeType.Merged).Select(x => x.Id).ToHashSet(); + var tableAnswers = copyTableAnswers + .Select(x => + { + var rowId = tableRowAnswers.Where(y => y.OriginalId == x.RowId).Select(y => y.Id).FirstOrDefault(); + var answer = notNeedCopyMarks.Contains(x.QuestionMark) ? string.Empty : x.Answer; + if (mergedRowIds.Contains(rowId) && x.QuestionMark == QuestionMark.State) + answer = TargetState.Loss.GetEnumInt().ToString(); + return new ReadingTableQuestionAnswer + { + Id = NewId.NextGuid(), + Answer = answer, + QuestionId = x.QuestionId, + RowIndex = x.RowIndex, + RowId = rowId, + TableQuestionId = x.TableQuestionId, + TrialId = x.TrialId, + VisitTaskId = visitTaskId, + }; + }) + .ToList(); diff --git a/IRaCIS.Core.Application/Service/ReadingCalculate/MRECISTHCCCalculateService.cs b/IRaCIS.Core.Application/Service/ReadingCalculate/MRECISTHCCCalculateService.cs index b253cecea..547408bac 100644 --- a/IRaCIS.Core.Application/Service/ReadingCalculate/MRECISTHCCCalculateService.cs +++ b/IRaCIS.Core.Application/Service/ReadingCalculate/MRECISTHCCCalculateService.cs @@ -559,6 +559,20 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate tableRowAnswers.ForEach(x => { + switch (x.SplitOrMergeType) + { + case SplitOrMergeType.Merge: + case SplitOrMergeType.Merged: + x.SplitOrMergeType = SplitOrMergeType.Merged; + break; + case SplitOrMergeType.MergeMain: + case SplitOrMergeType.MergeMained: + x.SplitOrMergeType = SplitOrMergeType.MergeMained; + break; + default: + x.SplitOrMergeType = null; + break; + } x.VisitTaskId = visitTaskId; x.IsCurrentTaskAdd = false; x.Id = NewId.NextGuid(); @@ -583,17 +597,27 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate }; - var tableAnswers = copyTableAnswers.Select(x => new ReadingTableQuestionAnswer - { - Id = NewId.NextGuid(), - Answer = notNeedCopyMarks.Contains(x.QuestionMark) ? string.Empty : x.Answer, - QuestionId = x.QuestionId, - RowIndex = x.RowIndex, - RowId = tableRowAnswers.Where(y => y.OriginalId == x.RowId).Select(x => x.Id).FirstOrDefault(), - TableQuestionId = x.TableQuestionId, - TrialId = x.TrialId, - VisitTaskId = visitTaskId, - }).ToList(); + var mergedRowIds = tableRowAnswers.Where(x => x.SplitOrMergeType == SplitOrMergeType.Merged).Select(x => x.Id).ToHashSet(); + var tableAnswers = copyTableAnswers + .Select(x => + { + var rowId = tableRowAnswers.Where(y => y.OriginalId == x.RowId).Select(y => y.Id).FirstOrDefault(); + var answer = notNeedCopyMarks.Contains(x.QuestionMark) ? string.Empty : x.Answer; + if (mergedRowIds.Contains(rowId) && x.QuestionMark == QuestionMark.State) + answer = TargetState.Loss.GetEnumInt().ToString(); + return new ReadingTableQuestionAnswer + { + Id = NewId.NextGuid(), + Answer = answer, + QuestionId = x.QuestionId, + RowIndex = x.RowIndex, + RowId = rowId, + TableQuestionId = x.TableQuestionId, + TrialId = x.TrialId, + VisitTaskId = visitTaskId, + }; + }) + .ToList(); diff --git a/IRaCIS.Core.Application/Service/ReadingCalculate/RECIST1Point1CalculateService.cs b/IRaCIS.Core.Application/Service/ReadingCalculate/RECIST1Point1CalculateService.cs index 68cba7d40..8fa9f6ebb 100644 --- a/IRaCIS.Core.Application/Service/ReadingCalculate/RECIST1Point1CalculateService.cs +++ b/IRaCIS.Core.Application/Service/ReadingCalculate/RECIST1Point1CalculateService.cs @@ -561,6 +561,20 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate tableRowAnswers.ForEach(x => { + switch (x.SplitOrMergeType) + { + case SplitOrMergeType.Merge: + case SplitOrMergeType.Merged: + x.SplitOrMergeType = SplitOrMergeType.Merged; + break; + case SplitOrMergeType.MergeMain: + case SplitOrMergeType.MergeMained: + x.SplitOrMergeType = SplitOrMergeType.MergeMained; + break; + default: + x.SplitOrMergeType = null; + break; + } x.VisitTaskId = visitTaskId; x.IsCurrentTaskAdd = false; x.Id = NewId.NextGuid(); @@ -585,24 +599,31 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate QuestionMark.State, }; - var tableAnswers = copyTableAnswers.Select(x => new ReadingTableQuestionAnswer - { - Id = NewId.NextGuid(), - Answer = notNeedCopyMarks.Contains(x.QuestionMark) ? string.Empty : x.Answer, - QuestionId = x.QuestionId, - RowIndex = x.RowIndex, - RowId = tableRowAnswers.Where(y => y.OriginalId == x.RowId).Select(x => x.Id).FirstOrDefault(), - TableQuestionId = x.TableQuestionId, - TrialId = x.TrialId, - VisitTaskId = visitTaskId, - }).ToList(); - + var mergedRowIds = tableRowAnswers.Where(x => x.SplitOrMergeType == SplitOrMergeType.Merged).Select(x => x.Id).ToHashSet(); + var tableAnswers = copyTableAnswers + .Select(x => + { + var rowId = tableRowAnswers .Where(y => y.OriginalId == x.RowId) .Select(y => y.Id).FirstOrDefault(); + var answer = notNeedCopyMarks.Contains(x.QuestionMark) ? string.Empty: x.Answer; + if (mergedRowIds.Contains(rowId) && x.QuestionMark == QuestionMark.State) + answer = TargetState.Loss.GetEnumInt().ToString(); + return new ReadingTableQuestionAnswer + { + Id = NewId.NextGuid(), + Answer = answer, + QuestionId = x.QuestionId, + RowIndex = x.RowIndex, + RowId = rowId, + TableQuestionId = x.TableQuestionId, + TrialId = x.TrialId, + VisitTaskId = visitTaskId, + }; + }) + .ToList(); var addList = _mapper.Map>(tableRowAnswers); - - await _generalCalculateService.CopyHistoryAnswer(taskinfo, addList, tableAnswers); await _readingTableAnswerRowInfoRepository.AddRangeAsync(addList); await _readingTableQuestionAnswerRepository.AddRangeAsync(tableAnswers); diff --git a/IRaCIS.Core.Application/Service/ReadingCalculate/RECIST1Point1_BMCalculateService.cs b/IRaCIS.Core.Application/Service/ReadingCalculate/RECIST1Point1_BMCalculateService.cs index f23c0eafa..a79ad3272 100644 --- a/IRaCIS.Core.Application/Service/ReadingCalculate/RECIST1Point1_BMCalculateService.cs +++ b/IRaCIS.Core.Application/Service/ReadingCalculate/RECIST1Point1_BMCalculateService.cs @@ -563,6 +563,20 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate tableRowAnswers.ForEach(x => { + switch (x.SplitOrMergeType) + { + case SplitOrMergeType.Merge: + case SplitOrMergeType.Merged: + x.SplitOrMergeType = SplitOrMergeType.Merged; + break; + case SplitOrMergeType.MergeMain: + case SplitOrMergeType.MergeMained: + x.SplitOrMergeType = SplitOrMergeType.MergeMained; + break; + default: + x.SplitOrMergeType = null; + break; + } x.VisitTaskId = visitTaskId; x.IsCurrentTaskAdd = false; x.Id = NewId.NextGuid(); @@ -586,18 +600,27 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate QuestionMark.State, }; - var tableAnswers = copyTableAnswers.Select(x => new ReadingTableQuestionAnswer - { - Id = NewId.NextGuid(), - Answer = notNeedCopyMarks.Contains(x.QuestionMark) ? string.Empty : x.Answer, - QuestionId = x.QuestionId, - RowIndex = x.RowIndex, - RowId = tableRowAnswers.Where(y => y.OriginalId == x.RowId).Select(x => x.Id).FirstOrDefault(), - TableQuestionId = x.TableQuestionId, - TrialId = x.TrialId, - VisitTaskId = visitTaskId, - }).ToList(); - + var mergedRowIds = tableRowAnswers.Where(x => x.SplitOrMergeType == SplitOrMergeType.Merged).Select(x => x.Id).ToHashSet(); + var tableAnswers = copyTableAnswers + .Select(x => + { + var rowId = tableRowAnswers.Where(y => y.OriginalId == x.RowId).Select(y => y.Id).FirstOrDefault(); + var answer = notNeedCopyMarks.Contains(x.QuestionMark) ? string.Empty : x.Answer; + if (mergedRowIds.Contains(rowId) && x.QuestionMark == QuestionMark.State) + answer = TargetState.Loss.GetEnumInt().ToString(); + return new ReadingTableQuestionAnswer + { + Id = NewId.NextGuid(), + Answer = answer, + QuestionId = x.QuestionId, + RowIndex = x.RowIndex, + RowId = rowId, + TableQuestionId = x.TableQuestionId, + TrialId = x.TrialId, + VisitTaskId = visitTaskId, + }; + }) + .ToList();