diff --git a/IRaCIS.Core.Application/Service/ReadingCalculate/SelfDefineCalculateService.cs b/IRaCIS.Core.Application/Service/ReadingCalculate/SelfDefineCalculateService.cs
index 756e4c38a..22ccc6f7f 100644
--- a/IRaCIS.Core.Application/Service/ReadingCalculate/SelfDefineCalculateService.cs
+++ b/IRaCIS.Core.Application/Service/ReadingCalculate/SelfDefineCalculateService.cs
@@ -254,25 +254,108 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
#endregion
///
- /// 将上一次的病灶信息添加到这一次
+ /// 将上一次的访视病灶添加到这一次
///
///
///
public async Task AddTaskLesionAnswerFromLastTask(AddTaskLesionAnswerFromLastTaskInDto inDto)
{
-
var visitTaskId = inDto.VisitTaskId;
var taskinfo = await _visitTaskRepository.Where(x => x.Id == visitTaskId).FirstNotNullAsync();
var baseLineVisitId = await _subjectVisitRepository.Where(x => x.SubjectId == taskinfo.SubjectId && x.IsBaseLine).Select(x => x.Id).FirstOrDefaultAsync();
+ // 判断当前任务是否是基线
+ if (taskinfo.SourceSubjectVisitId != baseLineVisitId)
+ {
+ // 判断当前任务是是否有表格问题答案
+ if (!(await _readingTableQuestionAnswerRepository.AnyAsync(x => x.VisitTaskId == visitTaskId)))
+ {
+
+ var LastVisitTaskId = await _visitTaskRepository.Where(x => x.ReadingCategory == ReadingCategory.Visit &&
+ x.TrialReadingCriterionId == taskinfo.TrialReadingCriterionId &&
+ x.IsAnalysisCreate == taskinfo.IsAnalysisCreate &&
+ x.DoctorUserId == taskinfo.DoctorUserId &&
+ x.IsSelfAnalysis == taskinfo.IsSelfAnalysis &&
+ x.SubjectId == taskinfo.SubjectId && x.ReadingTaskState == ReadingTaskState.HaveSigned && x.VisitTaskNum < taskinfo.VisitTaskNum && x.TaskState == TaskState.Effect && x.ArmEnum == taskinfo.ArmEnum
+ ).OrderByDescending(x => x.VisitTaskNum).Select(x => x.Id).FirstOrDefaultAsync();
+
+
+
+ var copyTableAnswers = await _readingTableQuestionAnswerRepository.Where(x => x.VisitTaskId == LastVisitTaskId).Select(x => new CopyTableAnswerDto()
+ {
+ Answer = x.Answer,
+ QuestionId = x.QuestionId,
+ RowId = x.RowId,
+ QuestionMark = x.ReadingTableQuestionTrial.QuestionMark,
+ TableQuestionId = x.TableQuestionId,
+ RowIndex = x.RowIndex,
+ TrialId = x.TrialId
+ }).ToListAsync();
+
+ var tableRowAnswers = await _readingTableAnswerRowInfoRepository.Where(x => x.VisitTaskId == LastVisitTaskId).ProjectTo(_mapper.ConfigurationProvider).ToListAsync();
+
+
+ tableRowAnswers.ForEach(x =>
+ {
+ x.VisitTaskId = visitTaskId;
+ x.IsCurrentTaskAdd = false;
+ x.Id = NewId.NextGuid();
+ x.SeriesId = null;
+ x.InstanceId = null;
+ x.MeasureData = string.Empty;
+ x.PicturePath = string.Empty;
+ });
+
+ tableRowAnswers.ForEach(x =>
+ {
+ x.SplitRowId = tableRowAnswers.Where(y => y.OriginalId == x.SplitRowId).Select(y => y.Id).FirstOrDefault();
+ x.MergeRowId = tableRowAnswers.Where(y => y.OriginalId == x.MergeRowId).Select(y => y.Id).FirstOrDefault();
+
+ });
+
+ List notNeedCopyMarks = new List()
+ {
+ QuestionMark.MajorAxis,
+ QuestionMark.ShortAxis,
+ 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,
+ });
+
+
+ await _visitTaskRepository.UpdatePartialFromQueryAsync(visitTaskId, x => new VisitTask()
+ {
+ ReadingTaskState = ReadingTaskState.Reading,
+
+ });
+
+ var addList = _mapper.Map>(tableRowAnswers);
+
+ await _readingTableAnswerRowInfoRepository.AddRangeAsync(addList);
+ await _readingTableQuestionAnswerRepository.AddRangeAsync(tableAnswers);
+ await _readingTableQuestionAnswerRepository.SaveChangesAsync();
+
+ }
+ }
return new AddTaskLesionAnswerFromLastTaskOutDto()
{
IsBaseLine = taskinfo.SourceSubjectVisitId == baseLineVisitId,
};
+
}
///