diff --git a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml index 7c31fe338..1a320e129 100644 --- a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml +++ b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml @@ -2197,7 +2197,7 @@ - + 从上传文件中获取Datatable @@ -4840,7 +4840,7 @@ - + 从上传文件中获取Datatable diff --git a/IRaCIS.Core.Application/Service/Reading/Dto/ReadingCalculateViewModel.cs b/IRaCIS.Core.Application/Service/Reading/Dto/ReadingCalculateViewModel.cs index 599bb8379..2d2cc2469 100644 --- a/IRaCIS.Core.Application/Service/Reading/Dto/ReadingCalculateViewModel.cs +++ b/IRaCIS.Core.Application/Service/Reading/Dto/ReadingCalculateViewModel.cs @@ -234,6 +234,13 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto } } + public class TemplateData + { + public string TaskBlindName { get; set; } + + public string SubjectID { get; set; } + } + public class OCTFCTUploadData { /// diff --git a/IRaCIS.Core.Application/Service/ReadingCalculate/General/GeneralCalculateService.cs b/IRaCIS.Core.Application/Service/ReadingCalculate/General/GeneralCalculateService.cs index 175e7fbe2..32d63d863 100644 --- a/IRaCIS.Core.Application/Service/ReadingCalculate/General/GeneralCalculateService.cs +++ b/IRaCIS.Core.Application/Service/ReadingCalculate/General/GeneralCalculateService.cs @@ -1,4 +1,6 @@ -using IRaCIS.Core.Application.Service.Reading.Dto; +using IRaCIS.Core.Application.Helper; +using IRaCIS.Core.Application.Service.Reading.Dto; +using IRaCIS.Core.Domain.Models; using IRaCIS.Core.Domain.Share; using IRaCIS.Core.Infra.EFCore.Common; using MassTransit; @@ -6,56 +8,38 @@ using Microsoft.AspNetCore.Http; using Microsoft.Extensions.Logging; using MiniExcelLibs; using System.Data; +using System.IO; using System.Text; namespace IRaCIS.Core.Application.Service.ReadingCalculate { - public class GeneralCalculateService : BaseService, IGeneralCalculateService + public class GeneralCalculateService(IRepository _readingTableQuestionAnswerRepository, + IRepository _visitTaskRepository, + IRepository _readingQuestionCriterionTrialRepository, + ILogger _logger, + IRepository _readingTableQuestionTrialRepository, + IRepository _readingTableAnswerRowInfoRepository, + IRepository _readingQuestionTrialRepository, + IRepository _subjectVisitRepository, + IRepository _tumorAssessmentRepository, + IRepository _readingTaskQuestionAnswerRepository, + IRepository _inspectionFileRepository, + IOSSService oSSService + ) : BaseService, IGeneralCalculateService { - private readonly IRepository _readingTableQuestionAnswerRepository; - private readonly IRepository _visitTaskRepository; - private readonly IRepository _readingQuestionCriterionTrialRepository; - private readonly ILogger _logger; - private readonly IRepository _readingTableQuestionTrialRepository; - private readonly IRepository _readingTableAnswerRowInfoRepository; - private readonly IRepository _readingQuestionTrialRepository; - private readonly IRepository _subjectVisitRepository; - private readonly IRepository _tumorAssessmentRepository; - private readonly IRepository _readingTaskQuestionAnswerRepository; - - public GeneralCalculateService( - IRepository readingTableQuestionAnswerRepository, - IRepository visitTaskRepository, - IRepository readingQuestionCriterionTrialRepository, - ILogger logger, - IRepository readingTableQuestionTrialRepository, - IRepository readingTableAnswerRowInfoRepository, - IRepository readingQuestionTrialRepository, - IRepository subjectVisitRepository, - IRepository tumorAssessmentRepository, - IRepository readingTaskQuestionAnswerRepository - ) - { - this._readingTableQuestionAnswerRepository = readingTableQuestionAnswerRepository; - this._visitTaskRepository = visitTaskRepository; - this._readingQuestionCriterionTrialRepository = readingQuestionCriterionTrialRepository; - this._logger = logger; - this._readingTableQuestionTrialRepository = readingTableQuestionTrialRepository; - this._readingTableAnswerRowInfoRepository = readingTableAnswerRowInfoRepository; - this._readingQuestionTrialRepository = readingQuestionTrialRepository; - this._subjectVisitRepository = subjectVisitRepository; - this._tumorAssessmentRepository = tumorAssessmentRepository; - this._readingTaskQuestionAnswerRepository = readingTaskQuestionAnswerRepository; - } + /// /// 从上传文件中获取Datatable /// /// - public async Task GetDataTableFromUpload(IFormFile file) + public async Task GetDataTableFromUpload(IFormFile file,string pathCode,Guid trialId) { + + + DataTable result = new DataTable(); var fileFolder = "Upload\\"; if (!Directory.Exists(fileFolder)) @@ -66,11 +50,15 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate var fileName = DateTime.Now.ToString("yyyyMMddHHmmss") + Path.GetExtension(file.FileName); var filePath = Path.Combine(fileFolder, fileName); + + var fileStream = new MemoryStream(); try { using (var stream = new FileStream(filePath, FileMode.Create)) { file.CopyTo(stream); + await stream.CopyToAsync(fileStream); + stream.Position = 0; result = stream.QueryAsDataTable(useHeaderRow: false); } @@ -80,6 +68,21 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate File.Delete(filePath); } + + try + { + var ossRelativePath = await oSSService.UploadToOSSAsync(fileStream, pathCode, file.FileName); + await _inspectionFileRepository.AddAsync(new InspectionFile() { FileName = file.FileName, RelativePath = ossRelativePath, TrialId = trialId }); + } + catch (Exception) + { + + + } + + + + File.Delete(filePath); // 创建一个要删除的行集合 diff --git a/IRaCIS.Core.Application/Service/ReadingCalculate/IVUSCalculateService.cs b/IRaCIS.Core.Application/Service/ReadingCalculate/IVUSCalculateService.cs index 969e93c57..2ef2c6859 100644 --- a/IRaCIS.Core.Application/Service/ReadingCalculate/IVUSCalculateService.cs +++ b/IRaCIS.Core.Application/Service/ReadingCalculate/IVUSCalculateService.cs @@ -580,9 +580,9 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate var taskinfo = await _visitTaskRepository.Where(x => x.Id == inDto.VisitTaskId).Include(x=>x.Subject).FirstNotNullAsync(); - var values = new + var values = new TemplateData() { - SubjectID = taskinfo.BlindSubjectCode.IsNullOrEmpty()? taskinfo.Subject.Code: taskinfo.BlindSubjectCode, + SubjectID = "'" + (taskinfo.BlindSubjectCode.IsNullOrEmpty() ? taskinfo.Subject.Code : taskinfo.BlindSubjectCode), TaskBlindName = taskinfo.TaskBlindName, }; return await _visitTaskHelpeService.ExportTemplateAsync(new IRaCIS.Application.Contracts.ExportTemplateAsyncDto() @@ -603,11 +603,12 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate 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 dataTable =await _generalCalculateService.GetDataTableFromUpload(file, "IVUSTemplate", taskinfo.TrialId); - var taskinfo = await _visitTaskRepository.Where(x => x.Id == visitTaskId).Include(x => x.Subject).Include(x=>x.TrialReadingCriterion).FirstNotNullAsync(); + - var values = new + var values = new TemplateData() { SubjectID = taskinfo.BlindSubjectCode.IsNullOrEmpty() ? taskinfo.Subject.Code : taskinfo.BlindSubjectCode, TaskBlindName = taskinfo.TaskBlindName, diff --git a/IRaCIS.Core.Application/Service/ReadingCalculate/Interface/IGeneralCalculateService.cs b/IRaCIS.Core.Application/Service/ReadingCalculate/Interface/IGeneralCalculateService.cs index f097ccd95..4444c111a 100644 --- a/IRaCIS.Core.Application/Service/ReadingCalculate/Interface/IGeneralCalculateService.cs +++ b/IRaCIS.Core.Application/Service/ReadingCalculate/Interface/IGeneralCalculateService.cs @@ -44,6 +44,6 @@ namespace IRaCIS.Core.Application.Service /// /// /// - Task GetDataTableFromUpload(IFormFile file); + Task GetDataTableFromUpload(IFormFile file, string pathCode, Guid trialId); } } diff --git a/IRaCIS.Core.Application/Service/ReadingCalculate/OCTCalculateService.cs b/IRaCIS.Core.Application/Service/ReadingCalculate/OCTCalculateService.cs index f00f83cd3..f031c90df 100644 --- a/IRaCIS.Core.Application/Service/ReadingCalculate/OCTCalculateService.cs +++ b/IRaCIS.Core.Application/Service/ReadingCalculate/OCTCalculateService.cs @@ -447,9 +447,9 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate public async Task GetOCTFCTTemplate(GetExportTemplateInDto inDto) { var taskinfo = await _visitTaskRepository.Where(x => x.Id == inDto.VisitTaskId).Include(x => x.Subject).FirstNotNullAsync(); - var values = new + var values = new TemplateData() { - SubjectID = taskinfo.BlindSubjectCode.IsNullOrEmpty() ? taskinfo.Subject.Code : taskinfo.BlindSubjectCode, + SubjectID = "'" + (taskinfo.BlindSubjectCode.IsNullOrEmpty() ? taskinfo.Subject.Code : taskinfo.BlindSubjectCode), TaskBlindName = taskinfo.TaskBlindName, }; return await _visitTaskHelpeService.ExportTemplateAsync(new IRaCIS.Application.Contracts.ExportTemplateAsyncDto() @@ -470,11 +470,12 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate 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 dataTable = await _generalCalculateService.GetDataTableFromUpload(file, "OCTFCT", taskinfo.TrialId); - var values = new + + + var values = new TemplateData() { SubjectID = taskinfo.BlindSubjectCode.IsNullOrEmpty() ? taskinfo.Subject.Code : taskinfo.BlindSubjectCode, TaskBlindName = taskinfo.TaskBlindName, @@ -623,9 +624,9 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate public async Task GetOCTLipidAngleTemplate(GetExportTemplateInDto inDto) { var taskinfo = await _visitTaskRepository.Where(x => x.Id == inDto.VisitTaskId).Include(x => x.Subject).FirstNotNullAsync(); - var values = new + var values = new TemplateData() { - SubjectID = taskinfo.BlindSubjectCode.IsNullOrEmpty() ? taskinfo.Subject.Code : taskinfo.BlindSubjectCode, + SubjectID = "'" + (taskinfo.BlindSubjectCode.IsNullOrEmpty() ? taskinfo.Subject.Code : taskinfo.BlindSubjectCode), TaskBlindName = taskinfo.TaskBlindName, }; return await _visitTaskHelpeService.ExportTemplateAsync(new IRaCIS.Application.Contracts.ExportTemplateAsyncDto() @@ -646,11 +647,12 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate 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 dataTable = await _generalCalculateService.GetDataTableFromUpload(file, "OCTLipidAngle", taskinfo.TrialId); - var values = new + + + var values = new TemplateData() { SubjectID = taskinfo.BlindSubjectCode.IsNullOrEmpty() ? taskinfo.Subject.Code : taskinfo.BlindSubjectCode, TaskBlindName = taskinfo.TaskBlindName, @@ -994,7 +996,7 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate // 平均最小FCT tableAnswers.Add(new ReadingTableQuestionAnswer() { - Answer = oCTFCTInfos.Count() == 0 ? "0.00" : GetDigitPlacesData(oCTFCTInfos.Where(x => x.PlaqueNum == item).Average(x => x.Data).ToString()), + Answer = oCTFCTInfos.Where(x => x.PlaqueNum == item).Count() == 0 ? "0.00" : GetDigitPlacesData(oCTFCTInfos.Where(x => x.PlaqueNum == item).Average(x => x.Data).ToString()), Id = NewId.NextGuid(), QuestionId = patchDataStatisticsInfo.Id, TrialId = inDto.TrialId, diff --git a/IRaCIS.Core.Infra.EFCore/Common/AuditingData.cs b/IRaCIS.Core.Infra.EFCore/Common/AuditingData.cs index 81e650294..309b8fe8d 100644 --- a/IRaCIS.Core.Infra.EFCore/Common/AuditingData.cs +++ b/IRaCIS.Core.Infra.EFCore/Common/AuditingData.cs @@ -1967,6 +1967,32 @@ namespace IRaCIS.Core.Infra.EFCore.Common }); } + foreach (var item in entitys.Where(x => x.Entity.GetType() == typeof(NoneDicomStudyFile))) + { + + var type = GetEntityAuditOpt(item); + + var entity = item.Entity as NoneDicomStudyFile; + + var extraIdentification = string.Empty; + + if (entity.VisitTaskId!=null) + { + extraIdentification = "/VisitTask"; + } + + var trialid = await _dbContext.NoneDicomStudy.Where(x => x.Id == entity.NoneDicomStudyId).Select(x => x.TrialId).FirstOrDefaultAsync(); + + + await InsertInspection(item.Entity as NoneDicomStudyFile, type, x => new InspectionConvertDTO() + { + TrialId= trialid, + ObjectRelationParentId = x.VisitTaskId, + ExtraIndentification = extraIdentification + }); + } + + // 既往手术史 foreach (var item in entitys.Where(x => x.Entity.GetType() == typeof(PreviousSurgery))) { diff --git a/IRaCIS.Core.Infra.EFCore/Common/AuditingDto.cs b/IRaCIS.Core.Infra.EFCore/Common/AuditingDto.cs index f1a95da9b..8bc888aff 100644 --- a/IRaCIS.Core.Infra.EFCore/Common/AuditingDto.cs +++ b/IRaCIS.Core.Infra.EFCore/Common/AuditingDto.cs @@ -108,7 +108,9 @@ namespace IRaCIS.Core.Infra.EFCore.Common public bool IsSelfDefine = false; - // 额外标识 + /// + /// 额外标识 + /// public string ExtraIndentification = string.Empty;