Compare commits
No commits in common. "82f218582594a84c52d46b279265612f618506f4" and "cf9823c682dabe6c8f917c242a69f981cf886231" have entirely different histories.
82f2185825
...
cf9823c682
|
|
@ -234,34 +234,6 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public class OCTFCTUploadData
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// 斑块编号
|
|
||||||
/// </summary>
|
|
||||||
public int PlaqueNum { get; set; }
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 第一次
|
|
||||||
/// </summary>
|
|
||||||
public int FirstData { get; set; }
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 第二次
|
|
||||||
/// </summary>
|
|
||||||
public int SecondData { get; set; }
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 第三次
|
|
||||||
/// </summary>
|
|
||||||
public int ThirdData { get; set; }
|
|
||||||
|
|
||||||
public decimal Avg { get {
|
|
||||||
|
|
||||||
return ( FirstData*1m + SecondData * 1m + ThirdData * 1m) / 3;
|
|
||||||
} }
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public class OCTInfo
|
public class OCTInfo
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -2,9 +2,7 @@
|
||||||
using IRaCIS.Core.Application.ViewModel;
|
using IRaCIS.Core.Application.ViewModel;
|
||||||
using IRaCIS.Core.Domain.Share;
|
using IRaCIS.Core.Domain.Share;
|
||||||
using IRaCIS.Core.Infra.EFCore.Common;
|
using IRaCIS.Core.Infra.EFCore.Common;
|
||||||
using IRaCIS.Core.Infrastructure;
|
|
||||||
using MassTransit;
|
using MassTransit;
|
||||||
using Microsoft.AspNetCore.Http;
|
|
||||||
using Microsoft.AspNetCore.Mvc;
|
using Microsoft.AspNetCore.Mvc;
|
||||||
using Microsoft.Extensions.Logging;
|
using Microsoft.Extensions.Logging;
|
||||||
|
|
||||||
|
|
@ -20,7 +18,6 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
|
||||||
IRepository<ReadingTableAnswerRowInfo> _readingTableAnswerRowInfoRepository,
|
IRepository<ReadingTableAnswerRowInfo> _readingTableAnswerRowInfoRepository,
|
||||||
IRepository<ReadingQuestionTrial> _readingQuestionTrialRepository,
|
IRepository<ReadingQuestionTrial> _readingQuestionTrialRepository,
|
||||||
IRepository<OrganInfo> _organInfoRepository,
|
IRepository<OrganInfo> _organInfoRepository,
|
||||||
IHttpContextAccessor httpContext,
|
|
||||||
IRepository<ReadingGlobalTaskInfo> _readingGlobalTaskInfoRepository,
|
IRepository<ReadingGlobalTaskInfo> _readingGlobalTaskInfoRepository,
|
||||||
IRepository<SubjectVisit> _subjectVisitRepository,
|
IRepository<SubjectVisit> _subjectVisitRepository,
|
||||||
IRepository<TumorAssessment_IRECIST1Point1> _tumorAssessmentRepository,
|
IRepository<TumorAssessment_IRECIST1Point1> _tumorAssessmentRepository,
|
||||||
|
|
@ -459,159 +456,6 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 导入OCT-FCT数据
|
|
||||||
/// </summary>
|
|
||||||
/// <returns></returns>
|
|
||||||
[HttpPost]
|
|
||||||
public async Task UploadOCTFCTTemplate()
|
|
||||||
{
|
|
||||||
var request = httpContext.HttpContext!.Request;
|
|
||||||
var file = request.Form.Files[0];
|
|
||||||
Guid visitTaskId = Guid.Parse(request.Form["VisitTaskId"]);
|
|
||||||
var dataTable = await _generalCalculateService.GetDataTableFromUpload(file);
|
|
||||||
|
|
||||||
var taskinfo = await _visitTaskRepository.Where(x => x.Id == visitTaskId).Include(x => x.Subject).Include(x => x.TrialReadingCriterion).FirstNotNullAsync();
|
|
||||||
|
|
||||||
var values = new
|
|
||||||
{
|
|
||||||
SubjectID = taskinfo.BlindSubjectCode.IsNullOrEmpty() ? taskinfo.Subject.Code : taskinfo.BlindSubjectCode,
|
|
||||||
TaskBlindName = taskinfo.TaskBlindName,
|
|
||||||
};
|
|
||||||
|
|
||||||
if (values.SubjectID != dataTable.Rows[0]["B"].ToString() || values.TaskBlindName != dataTable.Rows[1]["B"].ToString())
|
|
||||||
{
|
|
||||||
throw new BusinessValidationFailedException(_localizer["IVUS_UploadVisitTaskError"]);
|
|
||||||
}
|
|
||||||
|
|
||||||
List<OCTFCTUploadData> measuredValueList = new List<OCTFCTUploadData>();
|
|
||||||
|
|
||||||
try
|
|
||||||
{
|
|
||||||
for (int i = 3; i < dataTable.Rows.Count; i++)
|
|
||||||
{
|
|
||||||
measuredValueList.Add(new OCTFCTUploadData()
|
|
||||||
{
|
|
||||||
PlaqueNum = int.Parse(dataTable.Rows[i]["A"].ToString()),
|
|
||||||
FirstData = int.Parse(dataTable.Rows[i]["B"].ToString()),
|
|
||||||
SecondData = int.Parse(dataTable.Rows[i]["C"].ToString()),
|
|
||||||
ThirdData = int.Parse(dataTable.Rows[i]["D"].ToString()),
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
catch (Exception)
|
|
||||||
{
|
|
||||||
throw new BusinessValidationFailedException(_localizer["IVUS_UplpadDataError"]);
|
|
||||||
}
|
|
||||||
|
|
||||||
var questionInfo = await _readingQuestionTrialRepository.Where(x => x.ReadingQuestionCriterionTrialId == taskinfo.TrialReadingCriterionId && x.LesionType == LesionType.FCT).FirstNotNullAsync();
|
|
||||||
var tableQuestionList = await _readingTableQuestionTrialRepository.Where(x => x.ReadingQuestionId == questionInfo.Id).ToListAsync();
|
|
||||||
List<ReadingTableAnswerRowInfo> tableAnsweRowInfos = new List<ReadingTableAnswerRowInfo>();
|
|
||||||
List<ReadingTableQuestionAnswer> tableAnswers = new List<ReadingTableQuestionAnswer>();
|
|
||||||
|
|
||||||
var maxnum = _readingTableAnswerRowInfoRepository.Where(x => x.QuestionId == questionInfo.Id && x.VisitTaskId == taskinfo.Id).MaxOrDefault(x => x.RowIndex);
|
|
||||||
|
|
||||||
|
|
||||||
foreach (var item in measuredValueList)
|
|
||||||
{
|
|
||||||
maxnum = maxnum + 1;
|
|
||||||
var newRowId = NewId.NextGuid();
|
|
||||||
// 斑块数据统计
|
|
||||||
tableAnsweRowInfos.Add(new ReadingTableAnswerRowInfo()
|
|
||||||
{
|
|
||||||
Id = newRowId,
|
|
||||||
QuestionId = questionInfo.Id,
|
|
||||||
VisitTaskId = taskinfo.Id,
|
|
||||||
TrialId = taskinfo.TrialId,
|
|
||||||
RowIndex = maxnum,
|
|
||||||
IsCurrentTaskAdd = true,
|
|
||||||
BlindName = taskinfo.TaskBlindName,
|
|
||||||
OrderMark = questionInfo.OrderMark,
|
|
||||||
FristAddTaskNum = taskinfo.VisitTaskNum,
|
|
||||||
FristAddTaskId = taskinfo.Id,
|
|
||||||
RowMark = questionInfo.OrderMark + decimal.Parse(maxnum.ToString()).GetLesionMark()
|
|
||||||
});
|
|
||||||
|
|
||||||
// 编号
|
|
||||||
tableAnswers.Add(new ReadingTableQuestionAnswer()
|
|
||||||
{
|
|
||||||
Answer = item.PlaqueNum.ToString(),
|
|
||||||
QuestionId = questionInfo.Id,
|
|
||||||
TrialId = taskinfo.TrialId,
|
|
||||||
VisitTaskId = taskinfo.Id,
|
|
||||||
RowId = newRowId,
|
|
||||||
RowIndex = maxnum,
|
|
||||||
TableQuestionId = tableQuestionList.Where(x => x.ReadingQuestionId == questionInfo.Id && x.QuestionMark == QuestionMark.PlaqueNumber).Select(x => x.Id).FirstOrDefault(),
|
|
||||||
});
|
|
||||||
|
|
||||||
var avg = item.Avg.ToString();
|
|
||||||
|
|
||||||
|
|
||||||
if (taskinfo.TrialReadingCriterion.DigitPlaces != -1)
|
|
||||||
{
|
|
||||||
var digitPlaces = taskinfo.TrialReadingCriterion.DigitPlaces ?? 0;
|
|
||||||
avg = decimal.Round(decimal.Parse(avg ?? "0"), digitPlaces).ToString("F" + digitPlaces.ToString());
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
// 第一次
|
|
||||||
tableAnswers.Add(new ReadingTableQuestionAnswer()
|
|
||||||
{
|
|
||||||
Answer = item.FirstData.ToString(),
|
|
||||||
QuestionId = questionInfo.Id,
|
|
||||||
TrialId = taskinfo.TrialId,
|
|
||||||
VisitTaskId = taskinfo.Id,
|
|
||||||
RowId = newRowId,
|
|
||||||
RowIndex = maxnum,
|
|
||||||
TableQuestionId = tableQuestionList.Where(x => x.ReadingQuestionId == questionInfo.Id && x.QuestionMark == QuestionMark.FirstFCT).Select(x => x.Id).FirstOrDefault(),
|
|
||||||
});
|
|
||||||
|
|
||||||
tableAnswers.Add(new ReadingTableQuestionAnswer()
|
|
||||||
{
|
|
||||||
Answer = item.SecondData.ToString(),
|
|
||||||
QuestionId = questionInfo.Id,
|
|
||||||
TrialId = taskinfo.TrialId,
|
|
||||||
VisitTaskId = taskinfo.Id,
|
|
||||||
RowId = newRowId,
|
|
||||||
RowIndex = maxnum,
|
|
||||||
TableQuestionId = tableQuestionList.Where(x => x.ReadingQuestionId == questionInfo.Id && x.QuestionMark == QuestionMark.SecondFCT).Select(x => x.Id).FirstOrDefault(),
|
|
||||||
});
|
|
||||||
|
|
||||||
tableAnswers.Add(new ReadingTableQuestionAnswer()
|
|
||||||
{
|
|
||||||
Answer = item.ThirdData.ToString(),
|
|
||||||
QuestionId = questionInfo.Id,
|
|
||||||
TrialId = taskinfo.TrialId,
|
|
||||||
VisitTaskId = taskinfo.Id,
|
|
||||||
RowId = newRowId,
|
|
||||||
RowIndex = maxnum,
|
|
||||||
TableQuestionId = tableQuestionList.Where(x => x.ReadingQuestionId == questionInfo.Id && x.QuestionMark == QuestionMark.ThirdFCT).Select(x => x.Id).FirstOrDefault(),
|
|
||||||
});
|
|
||||||
|
|
||||||
tableAnswers.Add(new ReadingTableQuestionAnswer()
|
|
||||||
{
|
|
||||||
Answer = avg,
|
|
||||||
QuestionId = questionInfo.Id,
|
|
||||||
TrialId = taskinfo.TrialId,
|
|
||||||
VisitTaskId = taskinfo.Id,
|
|
||||||
RowId = newRowId,
|
|
||||||
RowIndex = maxnum,
|
|
||||||
TableQuestionId = tableQuestionList.Where(x => x.ReadingQuestionId == questionInfo.Id && x.QuestionMark == QuestionMark.AvgFCT).Select(x => x.Id).FirstOrDefault(),
|
|
||||||
});
|
|
||||||
}
|
|
||||||
await _readingTableAnswerRowInfoRepository.BatchDeleteNoTrackingAsync(x => x.QuestionId == questionInfo.Id && x.VisitTaskId == taskinfo.Id);
|
|
||||||
await _readingTableQuestionAnswerRepository.BatchDeleteNoTrackingAsync(x => x.QuestionId == questionInfo.Id && x.VisitTaskId == taskinfo.Id);
|
|
||||||
await _readingTableAnswerRowInfoRepository.AddRangeAsync(tableAnsweRowInfos);
|
|
||||||
await _readingTableQuestionAnswerRepository.AddRangeAsync(tableAnswers);
|
|
||||||
await _readingTableQuestionAnswerRepository.SaveChangesAsync();
|
|
||||||
|
|
||||||
await this.CalculateTask(new CalculateTaskInDto()
|
|
||||||
{
|
|
||||||
|
|
||||||
VisitTaskId = taskinfo.Id,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 获取OCT-脂质角度模板
|
/// 获取OCT-脂质角度模板
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|
@ -634,125 +478,6 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 导入OCT-脂质角度数据
|
|
||||||
/// </summary>
|
|
||||||
/// <returns></returns>
|
|
||||||
[HttpPost]
|
|
||||||
public async Task UploadOCTLipidAngleTemplate()
|
|
||||||
{
|
|
||||||
var request = httpContext.HttpContext!.Request;
|
|
||||||
var file = request.Form.Files[0];
|
|
||||||
Guid visitTaskId = Guid.Parse(request.Form["VisitTaskId"]);
|
|
||||||
var dataTable = await _generalCalculateService.GetDataTableFromUpload(file);
|
|
||||||
|
|
||||||
var taskinfo = await _visitTaskRepository.Where(x => x.Id == visitTaskId).Include(x => x.Subject).Include(x => x.TrialReadingCriterion).FirstNotNullAsync();
|
|
||||||
|
|
||||||
var values = new
|
|
||||||
{
|
|
||||||
SubjectID = taskinfo.BlindSubjectCode.IsNullOrEmpty() ? taskinfo.Subject.Code : taskinfo.BlindSubjectCode,
|
|
||||||
TaskBlindName = taskinfo.TaskBlindName,
|
|
||||||
};
|
|
||||||
|
|
||||||
if (values.SubjectID != dataTable.Rows[0]["B"].ToString() || values.TaskBlindName != dataTable.Rows[1]["B"].ToString())
|
|
||||||
{
|
|
||||||
throw new BusinessValidationFailedException(_localizer["IVUS_UploadVisitTaskError"]);
|
|
||||||
}
|
|
||||||
|
|
||||||
List<OCTFCTUploadData> measuredValueList = new List<OCTFCTUploadData>();
|
|
||||||
|
|
||||||
try
|
|
||||||
{
|
|
||||||
for (int i = 3; i < dataTable.Rows.Count; i++)
|
|
||||||
{
|
|
||||||
measuredValueList.Add(new OCTFCTUploadData()
|
|
||||||
{
|
|
||||||
PlaqueNum = int.Parse(dataTable.Rows[i]["A"].ToString()),
|
|
||||||
FirstData = int.Parse(dataTable.Rows[i]["B"].ToString()),
|
|
||||||
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
catch (Exception)
|
|
||||||
{
|
|
||||||
throw new BusinessValidationFailedException(_localizer["IVUS_UplpadDataError"]);
|
|
||||||
}
|
|
||||||
|
|
||||||
var questionInfo = await _readingQuestionTrialRepository.Where(x => x.ReadingQuestionCriterionTrialId == taskinfo.TrialReadingCriterionId && x.LesionType == LesionType.LipidAngle).FirstNotNullAsync();
|
|
||||||
var tableQuestionList = await _readingTableQuestionTrialRepository.Where(x => x.ReadingQuestionId == questionInfo.Id).ToListAsync();
|
|
||||||
List<ReadingTableAnswerRowInfo> tableAnsweRowInfos = new List<ReadingTableAnswerRowInfo>();
|
|
||||||
List<ReadingTableQuestionAnswer> tableAnswers = new List<ReadingTableQuestionAnswer>();
|
|
||||||
|
|
||||||
var maxnum = _readingTableAnswerRowInfoRepository.Where(x => x.QuestionId == questionInfo.Id && x.VisitTaskId == taskinfo.Id).MaxOrDefault(x => x.RowIndex);
|
|
||||||
|
|
||||||
|
|
||||||
foreach (var item in measuredValueList)
|
|
||||||
{
|
|
||||||
maxnum = maxnum + 1;
|
|
||||||
var newRowId = NewId.NextGuid();
|
|
||||||
// 斑块数据统计
|
|
||||||
tableAnsweRowInfos.Add(new ReadingTableAnswerRowInfo()
|
|
||||||
{
|
|
||||||
Id = newRowId,
|
|
||||||
QuestionId = questionInfo.Id,
|
|
||||||
VisitTaskId = taskinfo.Id,
|
|
||||||
TrialId = taskinfo.TrialId,
|
|
||||||
RowIndex = maxnum,
|
|
||||||
IsCurrentTaskAdd = true,
|
|
||||||
BlindName = taskinfo.TaskBlindName,
|
|
||||||
OrderMark = questionInfo.OrderMark,
|
|
||||||
FristAddTaskNum = taskinfo.VisitTaskNum,
|
|
||||||
FristAddTaskId = taskinfo.Id,
|
|
||||||
RowMark = questionInfo.OrderMark + decimal.Parse(maxnum.ToString()).GetLesionMark()
|
|
||||||
});
|
|
||||||
|
|
||||||
// 编号
|
|
||||||
tableAnswers.Add(new ReadingTableQuestionAnswer()
|
|
||||||
{
|
|
||||||
Answer = item.PlaqueNum.ToString(),
|
|
||||||
QuestionId = questionInfo.Id,
|
|
||||||
TrialId = taskinfo.TrialId,
|
|
||||||
VisitTaskId = taskinfo.Id,
|
|
||||||
RowId = newRowId,
|
|
||||||
RowIndex = maxnum,
|
|
||||||
TableQuestionId = tableQuestionList.Where(x => x.ReadingQuestionId == questionInfo.Id && x.QuestionMark == QuestionMark.PlaqueNumber).Select(x => x.Id).FirstOrDefault(),
|
|
||||||
});
|
|
||||||
|
|
||||||
var avg = item.Avg.ToString();
|
|
||||||
|
|
||||||
|
|
||||||
if (taskinfo.TrialReadingCriterion.DigitPlaces != -1)
|
|
||||||
{
|
|
||||||
var digitPlaces = taskinfo.TrialReadingCriterion.DigitPlaces ?? 0;
|
|
||||||
avg = decimal.Round(decimal.Parse(avg ?? "0"), digitPlaces).ToString("F" + digitPlaces.ToString());
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
// 脂质角度
|
|
||||||
tableAnswers.Add(new ReadingTableQuestionAnswer()
|
|
||||||
{
|
|
||||||
Answer = item.FirstData.ToString(),
|
|
||||||
QuestionId = questionInfo.Id,
|
|
||||||
TrialId = taskinfo.TrialId,
|
|
||||||
VisitTaskId = taskinfo.Id,
|
|
||||||
RowId = newRowId,
|
|
||||||
RowIndex = maxnum,
|
|
||||||
TableQuestionId = tableQuestionList.Where(x => x.ReadingQuestionId == questionInfo.Id && x.QuestionMark == QuestionMark.LipidAngle).Select(x => x.Id).FirstOrDefault(),
|
|
||||||
});
|
|
||||||
}
|
|
||||||
await _readingTableAnswerRowInfoRepository.BatchDeleteNoTrackingAsync(x => x.QuestionId == questionInfo.Id && x.VisitTaskId == taskinfo.Id);
|
|
||||||
await _readingTableQuestionAnswerRepository.BatchDeleteNoTrackingAsync(x => x.QuestionId == questionInfo.Id && x.VisitTaskId == taskinfo.Id);
|
|
||||||
await _readingTableAnswerRowInfoRepository.AddRangeAsync(tableAnsweRowInfos);
|
|
||||||
await _readingTableQuestionAnswerRepository.AddRangeAsync(tableAnswers);
|
|
||||||
await _readingTableQuestionAnswerRepository.SaveChangesAsync();
|
|
||||||
|
|
||||||
await this.CalculateTask(new CalculateTaskInDto()
|
|
||||||
{
|
|
||||||
|
|
||||||
VisitTaskId = taskinfo.Id,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 自动计算
|
/// 自动计算
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue