保存答案和非Dicom标记绑定关系
continuous-integration/drone/push Build is passing
Details
continuous-integration/drone/push Build is passing
Details
parent
473cee0e30
commit
487eb9dca8
|
|
@ -2488,9 +2488,21 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
|
||||||
public class AddNoneDicomMarkAndBinding
|
public class AddNoneDicomMarkAndBinding
|
||||||
{
|
{
|
||||||
public Guid VisitTaskId { get; set; }
|
public Guid VisitTaskId { get; set; }
|
||||||
public AddNoneDicomMarkInDto MarkInfo { get; set; }
|
public Guid? StudyId { get; set; }
|
||||||
|
|
||||||
public List<BindingInfo> BindingList { get; set; }
|
public Guid? MarkId { get; set; }
|
||||||
|
public Guid? NoneDicomFileId { get; set; }
|
||||||
|
|
||||||
|
public string Path { get; set; }
|
||||||
|
|
||||||
|
public string MeasureData { get; set; } = string.Empty;
|
||||||
|
|
||||||
|
public Guid QuestionId { get; set; }
|
||||||
|
public Guid? RowId { get; set; }
|
||||||
|
|
||||||
|
public Guid? TableQuestionId { get; set; }
|
||||||
|
|
||||||
|
public string Answer { get; set; }
|
||||||
}
|
}
|
||||||
|
|
||||||
public class BindingInfo
|
public class BindingInfo
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,5 @@
|
||||||
using IRaCIS.Core.Application.Contracts;
|
using Amazon.Runtime.Internal.Auth;
|
||||||
|
using IRaCIS.Core.Application.Contracts;
|
||||||
using IRaCIS.Core.Application.Filter;
|
using IRaCIS.Core.Application.Filter;
|
||||||
using IRaCIS.Core.Application.Service.Reading.Dto;
|
using IRaCIS.Core.Application.Service.Reading.Dto;
|
||||||
using IRaCIS.Core.Application.ViewModel;
|
using IRaCIS.Core.Application.ViewModel;
|
||||||
|
|
@ -33,41 +34,124 @@ namespace IRaCIS.Core.Application.Service
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 添加非Dicom标记并绑定
|
/// 保存答案和非Dicom标记绑定关系
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="inDto"></param>
|
/// <param name="inDto"></param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
[HttpPost]
|
[HttpPost]
|
||||||
public async Task<IResponseOutput> AddNoneDicomMarkAndBinding(AddNoneDicomMarkAndBinding inDto)
|
public async Task<IResponseOutput> SaveAnswerAndBindingNoneDicomMark(AddNoneDicomMarkAndBinding inDto)
|
||||||
|
{
|
||||||
|
var visitTask = await _visitTaskRepository.Where(x => x.Id == inDto.VisitTaskId).FirstNotNullAsync();
|
||||||
|
// 说明要移除标记数据
|
||||||
|
if (inDto.MeasureData == string.Empty)
|
||||||
|
{
|
||||||
|
// 先找到绑定关系
|
||||||
|
var binding = await _readingNoneDicomMarkBindingRepository.Where(x =>
|
||||||
|
x.VisitTaskId == inDto.VisitTaskId &&
|
||||||
|
x.QuestionId == inDto.QuestionId &&
|
||||||
|
x.RowId == inDto.RowId &&
|
||||||
|
x.TableQuestionId == inDto.TableQuestionId).FirstOrDefaultAsync();
|
||||||
|
if (binding != null)
|
||||||
|
{
|
||||||
|
if ((await _readingNoneDicomMarkBindingRepository.Where(x => x.NoneDicomMarkId == binding.NoneDicomMarkId).CountAsync()) == 1)
|
||||||
{
|
{
|
||||||
ReadingNoneDicomMark? mark = await _readingNoneDicomMarkRepository.Where(x => x.MarkId == inDto.MarkInfo.MarkId).FirstOrDefaultAsync();
|
|
||||||
|
|
||||||
if (mark == null)
|
await _readingNoneDicomMarkBindingRepository.DeleteFromQueryAsync(x => x.Id == binding.Id);
|
||||||
{
|
|
||||||
mark = await _readingNoneDicomMarkRepository.InsertOrUpdateAsync(new AddNoneDicomMarkInDto()
|
|
||||||
{
|
|
||||||
MarkId = inDto.MarkInfo.MarkId,
|
|
||||||
MeasureData = inDto.MarkInfo.MeasureData,
|
|
||||||
NoneDicomFileId = inDto.MarkInfo.NoneDicomFileId,
|
|
||||||
Path = inDto.MarkInfo.Path,
|
|
||||||
StudyId = inDto.MarkInfo.StudyId,
|
|
||||||
VisitTaskId = inDto.VisitTaskId
|
|
||||||
}, true);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
List<ReadingNoneDicomMarkBinding> markBindings = inDto.BindingList.Select(x => new ReadingNoneDicomMarkBinding()
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
{
|
{
|
||||||
MarkId = mark.MarkId,
|
// 找到标记信息
|
||||||
|
var mark = await _readingNoneDicomMarkRepository.Where(x => x.MarkId == inDto.MarkId).FirstOrDefaultAsync();
|
||||||
|
if (mark != null)
|
||||||
|
{
|
||||||
|
if (mark.MeasureData != inDto.MeasureData || mark.Path != inDto.Path)
|
||||||
|
{
|
||||||
|
await _readingNoneDicomMarkRepository.UpdatePartialFromQueryAsync(x => x.Id == mark.Id, u => new Domain.Models.ReadingNoneDicomMark()
|
||||||
|
{
|
||||||
|
MeasureData = inDto.MeasureData,
|
||||||
|
Path = inDto.Path
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// 添加标记信息
|
||||||
|
mark = new ReadingNoneDicomMark()
|
||||||
|
{
|
||||||
|
Id = NewId.NextGuid(),
|
||||||
VisitTaskId = inDto.VisitTaskId,
|
VisitTaskId = inDto.VisitTaskId,
|
||||||
QuestionId = x.QuestionId,
|
StudyId = inDto.StudyId,
|
||||||
RowId = x.RowId,
|
NoneDicomFileId = inDto.NoneDicomFileId,
|
||||||
TableQuestionId = x.TableQuestionId,
|
Path = inDto.Path,
|
||||||
NoneDicomMarkId = mark.Id
|
MeasureData = inDto.MeasureData,
|
||||||
}).ToList();
|
MarkId = inDto.MarkId
|
||||||
|
};
|
||||||
|
await _readingNoneDicomMarkRepository.AddAsync(mark);
|
||||||
|
}
|
||||||
|
|
||||||
await _readingNoneDicomMarkBindingRepository.AddRangeAsync(markBindings);
|
await _readingNoneDicomMarkBindingRepository.BatchDeleteNoTrackingAsync(x =>
|
||||||
await _readingNoneDicomMarkBindingRepository.SaveChangesAsync();
|
x.VisitTaskId == inDto.VisitTaskId &&
|
||||||
return ResponseOutput.Ok(mark.Id);
|
x.QuestionId == inDto.QuestionId &&
|
||||||
|
x.RowId == inDto.RowId &&
|
||||||
|
x.TableQuestionId == inDto.TableQuestionId);
|
||||||
|
|
||||||
|
await _readingNoneDicomMarkBindingRepository.AddAsync(new ReadingNoneDicomMarkBinding()
|
||||||
|
{
|
||||||
|
Id = NewId.NextGuid(),
|
||||||
|
VisitTaskId = inDto.VisitTaskId,
|
||||||
|
QuestionId = inDto.QuestionId,
|
||||||
|
RowId = inDto.RowId,
|
||||||
|
TableQuestionId = inDto.TableQuestionId,
|
||||||
|
NoneDicomMarkId = mark.Id,
|
||||||
|
MarkId = mark.MarkId
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// 处理答案
|
||||||
|
|
||||||
|
if (inDto.RowId == null)
|
||||||
|
{
|
||||||
|
await _readingTaskQuestionAnswerRepository.BatchDeleteNoTrackingAsync(x => x.VisitTaskId == inDto.VisitTaskId && x.ReadingQuestionTrialId == inDto.QuestionId);
|
||||||
|
await _readingTaskQuestionAnswerRepository.AddAsync(new ReadingTaskQuestionAnswer()
|
||||||
|
{
|
||||||
|
Id = NewId.NextGuid(),
|
||||||
|
SubjectId = visitTask.SubjectId,
|
||||||
|
Answer = inDto.Answer,
|
||||||
|
ReadingQuestionTrialId = inDto.QuestionId,
|
||||||
|
VisitTaskId = inDto.VisitTaskId,
|
||||||
|
TrialId = visitTask.TrialId
|
||||||
|
});
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
await _readingTableQuestionAnswerRepository.BatchDeleteNoTrackingAsync(x => x.VisitTaskId == inDto.VisitTaskId && x.RowId == inDto.RowId&&x.TableQuestionId==inDto.TableQuestionId);
|
||||||
|
|
||||||
|
var rowinfo=await _readingTableAnswerRowInfoRepository.Where(x => x.Id == inDto.RowId.Value).FirstNotNullAsync();
|
||||||
|
await _readingTableQuestionAnswerRepository.AddAsync(new ReadingTableQuestionAnswer()
|
||||||
|
{
|
||||||
|
Id = NewId.NextGuid(),
|
||||||
|
RowId = inDto.RowId.Value,
|
||||||
|
Answer = inDto.Answer,
|
||||||
|
QuestionId= inDto.QuestionId,
|
||||||
|
TableQuestionId= inDto.TableQuestionId.Value,
|
||||||
|
VisitTaskId = inDto.VisitTaskId,
|
||||||
|
TrialId = visitTask.TrialId,
|
||||||
|
RowIndex= rowinfo.RowIndex,
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
await _visitTaskRepository.SaveChangesAsync();
|
||||||
|
|
||||||
|
return ResponseOutput.Ok();
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue