修改一版

Uat_Study
he 2022-11-09 15:56:25 +08:00
parent 57d7e4c9c6
commit 4c123a6227
3 changed files with 99 additions and 44 deletions

View File

@ -534,7 +534,7 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
/// 表单类型
/// </summary>
public FormType FormType { get; set; }
public FormType FormType { get; set; } = FormType.SinglePage;
/// <summary>

View File

@ -11,6 +11,16 @@ namespace IRaCIS.Core.Application.ViewModel
public Guid VisitTaskId { get; set; }
}
public class VisitStudyTime
{
/// <summary>
/// 访视Id
/// </summary>
public Guid SubjectVisitId { get; set; }
public DateTime? StudyTime { get; set; }
}
public class SiteVisitForTumor
{
/// <summary>
@ -18,20 +28,19 @@ namespace IRaCIS.Core.Application.ViewModel
/// </summary>
public Guid VisitTaskId { get; set; }
public Guid? SubjectVisitId { get; set; }
/// <summary>
/// 任务Num
/// </summary>
public decimal VisitTaskNum { get; set; }
/// <summary>
/// 最早拍片日期
/// 检查日期
/// </summary>
public DateTime EarliestScanDate { get; set; }
public DateTime? StudyTime { get; set; }
/// <summary>
/// 最晚拍片日期
/// </summary>
public DateTime LatestScanDate { get; set; }
}
public class AddTaskLesionAnswerFromLastTaskOutDto

View File

@ -24,6 +24,8 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
private readonly IRepository<ReadingTableAnswerRowInfo> _readingTableAnswerRowInfoRepository;
private readonly IRepository<ReadingQuestionTrial> _readingQuestionTrialRepository;
private readonly IRepository<SubjectVisit> _subjectVisitRepository;
private readonly IRepository<DicomStudy> _dicomStudyRepository;
private readonly IRepository<NoneDicomStudy> _noneDicomStudyRepository;
private readonly IRepository<TumorAssessment> _tumorAssessmentRepository;
private readonly IGeneralCalculateService _generalCalculateService;
private readonly IRepository<ReadingTaskQuestionAnswer> _readingTaskQuestionAnswerRepository;
@ -36,6 +38,8 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
IRepository<ReadingTableAnswerRowInfo> readingTableAnswerRowInfoRepository,
IRepository<ReadingQuestionTrial> readingQuestionTrialRepository,
IRepository<SubjectVisit> subjectVisitRepository,
IRepository<DicomStudy> dicomStudyRepository,
IRepository<NoneDicomStudy> noneDicomStudyRepository,
IRepository<TumorAssessment> tumorAssessmentRepository,
IGeneralCalculateService generalCalculateService,
IRepository<ReadingTaskQuestionAnswer> readingTaskQuestionAnswerRepository
@ -48,6 +52,8 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
this._readingTableAnswerRowInfoRepository = readingTableAnswerRowInfoRepository;
this._readingQuestionTrialRepository = readingQuestionTrialRepository;
this._subjectVisitRepository = subjectVisitRepository;
this._dicomStudyRepository = dicomStudyRepository;
this._noneDicomStudyRepository = noneDicomStudyRepository;
this._tumorAssessmentRepository = tumorAssessmentRepository;
this._generalCalculateService = generalCalculateService;
this._readingTaskQuestionAnswerRepository = readingTaskQuestionAnswerRepository;
@ -697,12 +703,20 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
if (lastTask != null)
{
var thisTask = taskList.FirstOrDefault();
if (thisTask.StudyTime != null && lastTask.StudyTime != null)
{
return (int)Math.Floor((thisTask.StudyTime.Value - lastTask.StudyTime.Value).TotalDays);
}
else
{
return -1;
}
return (int)Math.Floor((thisTask.EarliestScanDate-lastTask.LatestScanDate).TotalDays);
}
else
{
return 0;
return -1;
}
}
@ -766,46 +780,52 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
var firstVisit = taskList.FirstOrDefault();
//基线后第二个访视应满足访视间隔6周以上否则顺延
var secondVisit = taskList.Where(x => x.VisitTaskNum >= 2 && x.EarliestScanDate >= baseLineTask.LatestScanDate.AddDays(42)).FirstOrDefault();
if (secondVisit != null)
if (baseLineTask.StudyTime != null)
{
var firstTaskNewLesionsCount = (await _readingTaskQuestionAnswerRepository.Where(x => x.VisitTaskId == firstVisit.VisitTaskId && x.ReadingQuestionTrialId == newLesionsCountQuestionId).Select(x => x.Answer).FirstOrDefaultAsync()).IsNullOrEmptyReturn0();
// 第二访视数量
var secondVisitLesionsCount = (await _readingTaskQuestionAnswerRepository.Where(x => x.VisitTaskId == lastTask.VisitTaskId && x.ReadingQuestionTrialId == newLesionsCountQuestionId).Select(x => x.Answer).FirstOrDefaultAsync()).IsNullOrEmptyReturn0();
// 判断是否是当前访视 当前访视还未入库
if (secondVisit.VisitTaskId == inDto.VisitTaskId)
//基线后第二个访视应满足访视间隔6周以上否则顺延
var secondVisit = taskList.Where(x => x.VisitTaskNum >= 2 && x.StudyTime >= baseLineTask.StudyTime.Value.AddDays(42)).FirstOrDefault();
if (secondVisit != null)
{
secondVisitLesionsCount = (inDto.QuestionInfo.Where(x => x.QuestionType == QuestionType.NewLesionsCount).Select(x => x.Answer).FirstOrDefault()).IsNullOrEmptyReturn0();
var firstTaskNewLesionsCount = (await _readingTaskQuestionAnswerRepository.Where(x => x.VisitTaskId == firstVisit.VisitTaskId && x.ReadingQuestionTrialId == newLesionsCountQuestionId).Select(x => x.Answer).FirstOrDefaultAsync()).IsNullOrEmptyReturn0();
// 第二访视数量
var secondVisitLesionsCount = (await _readingTaskQuestionAnswerRepository.Where(x => x.VisitTaskId == lastTask.VisitTaskId && x.ReadingQuestionTrialId == newLesionsCountQuestionId).Select(x => x.Answer).FirstOrDefaultAsync()).IsNullOrEmptyReturn0();
// 判断是否是当前访视 当前访视还未入库
if (secondVisit.VisitTaskId == inDto.VisitTaskId)
{
secondVisitLesionsCount = (inDto.QuestionInfo.Where(x => x.QuestionType == QuestionType.NewLesionsCount).Select(x => x.Answer).FirstOrDefault()).IsNullOrEmptyReturn0();
}
if (firstTaskNewLesionsCount >= 2 && secondVisitLesionsCount >= 2)
{
isPDResult = true;
}
}
if (firstTaskNewLesionsCount >= 2 && secondVisitLesionsCount >= 2)
#endregion
if (lastTask.VisitTaskNum >= 2m)
{
isPDResult = true;
}
}
#endregion
if (lastTask.VisitTaskNum >= 2m)
{
var lastTasknewLesionsCount = (await _readingTaskQuestionAnswerRepository.Where(x => x.VisitTaskId == lastTask.VisitTaskId && x.ReadingQuestionTrialId == newLesionsCountQuestionId).Select(x => x.Answer).FirstOrDefaultAsync()).IsNullOrEmptyReturn0();
var thisVisitTaskNewLesionsCount = (inDto.QuestionInfo.Where(x => x.QuestionType == QuestionType.NewLesionsCount).Select(x => x.Answer).FirstOrDefault()).IsNullOrEmptyReturn0();
var thisVisitTask = taskList.LastOrDefault();
if (lastTasknewLesionsCount >= 2 && thisVisitTaskNewLesionsCount >= 2 && lastTask.LatestScanDate.AddDays(42) <= thisVisitTask.EarliestScanDate)
{
isPDResult = true;
var lastTasknewLesionsCount = (await _readingTaskQuestionAnswerRepository.Where(x => x.VisitTaskId == lastTask.VisitTaskId && x.ReadingQuestionTrialId == newLesionsCountQuestionId).Select(x => x.Answer).FirstOrDefaultAsync()).IsNullOrEmptyReturn0();
var thisVisitTaskNewLesionsCount = (inDto.QuestionInfo.Where(x => x.QuestionType == QuestionType.NewLesionsCount).Select(x => x.Answer).FirstOrDefault()).IsNullOrEmptyReturn0();
var thisVisitTask = taskList.LastOrDefault();
if (thisVisitTask.StudyTime!=null&&lastTask.StudyTime!=null&&
lastTasknewLesionsCount >= 2 && thisVisitTaskNewLesionsCount >= 2 && lastTask.StudyTime.Value.AddDays(42) <= thisVisitTask.StudyTime)
{
isPDResult = true;
}
}
}
}
if (isPDResult)
{
@ -830,6 +850,8 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
/// <returns></returns>
public async Task<List<SiteVisitForTumor>> GetSiteVisitForTumorList(ReadingCalculateDto inDto)
{
if (siteVisitForTumorList == null)
{
var taskinfo = await _visitTaskRepository.Where(x => x.Id == inDto.VisitTaskId).FirstNotNullAsync();
@ -840,9 +862,33 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
{
VisitTaskId = x.Id,
VisitTaskNum = x.VisitTaskNum,
EarliestScanDate = x.SourceSubjectVisit.EarliestScanDate ?? DateTime.Now,
LatestScanDate = x.SourceSubjectVisit.LatestScanDate ?? DateTime.Now,
SubjectVisitId=x.SourceSubjectVisitId,
}).ToListAsync();
var visitIds = siteVisitForTumorList.Select(x => x.VisitTaskId).ToList();
// Dicom 用NM 非dicom 用骨扫描 (BoneScan)
List<VisitStudyTime> visitStudies = await _dicomStudyRepository.Where(x => visitIds.Contains(x.SubjectVisitId) && x.Modalities == "NM").Select(x => new VisitStudyTime()
{
SubjectVisitId = x.SubjectVisitId,
StudyTime = x.StudyTime
}).ToListAsync();
visitStudies.AddRange(
await _noneDicomStudyRepository.Where(x => visitIds.Contains(x.SubjectVisitId)&&x.Modality== "BoneScan").Select(x => new VisitStudyTime() {
SubjectVisitId = x.SubjectVisitId,
StudyTime = x.ImageDate
}).ToListAsync()
);
visitStudies = visitStudies.Where(x => x.StudyTime != null).ToList();
foreach (var item in siteVisitForTumorList)
{
item.StudyTime = visitStudies.Where(x => x.SubjectVisitId == item.SubjectVisitId).Max(x => x.StudyTime);
}
}
return siteVisitForTumorList;