修改非dicom
parent
943c44892a
commit
746d0ebc58
|
@ -61,7 +61,7 @@ namespace IRaCIS.Core.Application.Contracts
|
||||||
public DateTime ImageDate { get; set; }
|
public DateTime ImageDate { get; set; }
|
||||||
public string Description { get; set; } = string.Empty;
|
public string Description { get; set; } = string.Empty;
|
||||||
|
|
||||||
public int? Code { get; set; }
|
public int Code { get; set; }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -29,7 +29,7 @@ namespace IRaCIS.Core.Application.Contracts
|
||||||
private readonly IInspectionService _inspectionService;
|
private readonly IInspectionService _inspectionService;
|
||||||
private readonly IRepository<NoneDicomStudyFile> _noneDicomStudyFileRepository;
|
private readonly IRepository<NoneDicomStudyFile> _noneDicomStudyFileRepository;
|
||||||
|
|
||||||
|
|
||||||
private readonly AsyncLock _mutex = new AsyncLock();
|
private readonly AsyncLock _mutex = new AsyncLock();
|
||||||
|
|
||||||
|
|
||||||
|
@ -40,7 +40,7 @@ namespace IRaCIS.Core.Application.Contracts
|
||||||
IRepository<NoneDicomStudyFile> noneDicomStudyFileRepository)
|
IRepository<NoneDicomStudyFile> noneDicomStudyFileRepository)
|
||||||
{
|
{
|
||||||
_noneDicomStudyRepository = noneDicomStudyRepository;
|
_noneDicomStudyRepository = noneDicomStudyRepository;
|
||||||
|
|
||||||
this._httpContext = httpContext;
|
this._httpContext = httpContext;
|
||||||
this._hostEnvironment = hostEnvironment;
|
this._hostEnvironment = hostEnvironment;
|
||||||
this._inspectionService = inspectionService;
|
this._inspectionService = inspectionService;
|
||||||
|
@ -62,54 +62,57 @@ namespace IRaCIS.Core.Application.Contracts
|
||||||
[TypeFilter(typeof(TrialResourceFilter))]
|
[TypeFilter(typeof(TrialResourceFilter))]
|
||||||
public async Task<IResponseOutput<NoneDicomStudyAddReturnDto>> AddOrUpdateNoneDicomStudy(NoneDicomStudyAddOrEdit addOrEditNoneDicomStudy)
|
public async Task<IResponseOutput<NoneDicomStudyAddReturnDto>> AddOrUpdateNoneDicomStudy(NoneDicomStudyAddOrEdit addOrEditNoneDicomStudy)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
NoneDicomStudy optEntity = null;
|
||||||
using (await _mutex.LockAsync())
|
using (await _mutex.LockAsync())
|
||||||
{
|
{
|
||||||
if (addOrEditNoneDicomStudy.Id == Guid.Empty|| addOrEditNoneDicomStudy.Id==null)
|
if (addOrEditNoneDicomStudy.Id == Guid.Empty || addOrEditNoneDicomStudy.Id == null)
|
||||||
{
|
{
|
||||||
var code = _noneDicomStudyRepository.Where(t => t.TrialId == addOrEditNoneDicomStudy.TrialId).MaxOrDefault(x=>x.Code);
|
//默认会是0
|
||||||
|
var code = await _noneDicomStudyRepository.Where(t => t.TrialId == addOrEditNoneDicomStudy.TrialId).Select(x => x.Code).DefaultIfEmpty().MaxAsync();
|
||||||
|
|
||||||
addOrEditNoneDicomStudy.Code = code + 1;
|
addOrEditNoneDicomStudy.Code = code + 1;
|
||||||
|
|
||||||
|
optEntity = await _noneDicomStudyRepository.InsertFromDTOAsync(addOrEditNoneDicomStudy);
|
||||||
|
|
||||||
|
optEntity.StudyCode = "NST" + optEntity.Code.ToString("D5");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
optEntity = await _noneDicomStudyRepository.UpdateFromDTOAsync(addOrEditNoneDicomStudy);
|
||||||
}
|
}
|
||||||
|
|
||||||
addOrEditNoneDicomStudy.Code = addOrEditNoneDicomStudy.Code ?? 0;
|
await _noneDicomStudyRepository.SaveChangesAsync();
|
||||||
|
|
||||||
var entity = await _noneDicomStudyRepository.InsertOrUpdateAsync(addOrEditNoneDicomStudy, false);
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
entity.StudyCode = "NST" + entity.Code.ToString("D5");
|
|
||||||
await _repository.SaveChangesAsync();
|
|
||||||
|
|
||||||
var svTime = _repository.Where<SubjectVisit>(t => t.Id == addOrEditNoneDicomStudy.SubjectVisitId).Select(t => new
|
|
||||||
{
|
|
||||||
DicomStudyMinStudyTime = t.StudyList.Min(t => (DateTime?)t.StudyTime),
|
|
||||||
DicomStudyMaxStudyTime = t.StudyList.Max(t => (DateTime?)t.StudyTime),
|
|
||||||
NoneDicomStudyMinStudyTime = t.NoneDicomStudyList.Min(t => (DateTime?)t.ImageDate),
|
|
||||||
NoneDicomStudyMaxStudyTime = t.NoneDicomStudyList.Max(t => (DateTime?)t.ImageDate)
|
|
||||||
}).FirstOrDefault().IfNullThrowException();
|
|
||||||
|
|
||||||
var minArray = new DateTime?[] { svTime.DicomStudyMinStudyTime, svTime.NoneDicomStudyMinStudyTime, addOrEditNoneDicomStudy.ImageDate };
|
|
||||||
var maxArray = new DateTime?[] { svTime.DicomStudyMaxStudyTime, svTime.NoneDicomStudyMaxStudyTime, addOrEditNoneDicomStudy.ImageDate };
|
|
||||||
|
|
||||||
await _repository.BatchUpdateAsync<SubjectVisit>(t => t.Id == addOrEditNoneDicomStudy.SubjectVisitId, u => new SubjectVisit()
|
|
||||||
{
|
|
||||||
VisitExecuted = VisitExecutedEnum.Executed,
|
|
||||||
|
|
||||||
EarliestScanDate = minArray.Min(),
|
|
||||||
|
|
||||||
LatestScanDate = maxArray.Max()
|
|
||||||
});
|
|
||||||
|
|
||||||
await _repository.SaveChangesAsync();
|
|
||||||
|
|
||||||
NoneDicomStudyAddReturnDto noneDicom = new NoneDicomStudyAddReturnDto()
|
|
||||||
{
|
|
||||||
StudyCode = entity.StudyCode,
|
|
||||||
Id = entity.Id
|
|
||||||
};
|
|
||||||
return ResponseOutput.Ok(noneDicom);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var svTime = _repository.Where<SubjectVisit>(t => t.Id == addOrEditNoneDicomStudy.SubjectVisitId).Select(t => new
|
||||||
|
{
|
||||||
|
DicomStudyMinStudyTime = t.StudyList.Min(t => (DateTime?)t.StudyTime),
|
||||||
|
DicomStudyMaxStudyTime = t.StudyList.Max(t => (DateTime?)t.StudyTime),
|
||||||
|
NoneDicomStudyMinStudyTime = t.NoneDicomStudyList.Min(t => (DateTime?)t.ImageDate),
|
||||||
|
NoneDicomStudyMaxStudyTime = t.NoneDicomStudyList.Max(t => (DateTime?)t.ImageDate)
|
||||||
|
}).FirstOrDefault().IfNullThrowException();
|
||||||
|
|
||||||
|
var minArray = new DateTime?[] { svTime.DicomStudyMinStudyTime, svTime.NoneDicomStudyMinStudyTime, addOrEditNoneDicomStudy.ImageDate };
|
||||||
|
var maxArray = new DateTime?[] { svTime.DicomStudyMaxStudyTime, svTime.NoneDicomStudyMaxStudyTime, addOrEditNoneDicomStudy.ImageDate };
|
||||||
|
|
||||||
|
await _repository.BatchUpdateAsync<SubjectVisit>(t => t.Id == addOrEditNoneDicomStudy.SubjectVisitId, u => new SubjectVisit()
|
||||||
|
{
|
||||||
|
VisitExecuted = VisitExecutedEnum.Executed,
|
||||||
|
|
||||||
|
EarliestScanDate = minArray.Min(),
|
||||||
|
|
||||||
|
LatestScanDate = maxArray.Max()
|
||||||
|
});
|
||||||
|
|
||||||
|
await _repository.SaveChangesAsync();
|
||||||
|
|
||||||
|
NoneDicomStudyAddReturnDto noneDicom = new NoneDicomStudyAddReturnDto()
|
||||||
|
{
|
||||||
|
StudyCode = optEntity.StudyCode,
|
||||||
|
Id = optEntity.Id
|
||||||
|
};
|
||||||
|
return ResponseOutput.Ok(noneDicom);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -162,7 +165,7 @@ namespace IRaCIS.Core.Application.Contracts
|
||||||
[HttpDelete("{noneDicomStudyFileId:guid}")]
|
[HttpDelete("{noneDicomStudyFileId:guid}")]
|
||||||
public async Task<IResponseOutput> DeleteNoneDicomStudyFile(Guid noneDicomStudyFileId)
|
public async Task<IResponseOutput> DeleteNoneDicomStudyFile(Guid noneDicomStudyFileId)
|
||||||
{
|
{
|
||||||
var subjectVisitId = await _noneDicomStudyFileRepository.Where(t=>t.Id== noneDicomStudyFileId).Select(t => t.NoneDicomStudy.SubjectVisitId).FirstOrDefaultAsync();
|
var subjectVisitId = await _noneDicomStudyFileRepository.Where(t => t.Id == noneDicomStudyFileId).Select(t => t.NoneDicomStudy.SubjectVisitId).FirstOrDefaultAsync();
|
||||||
|
|
||||||
var success = await _noneDicomStudyFileRepository.BatchDeleteAsync(t => t.Id == noneDicomStudyFileId);
|
var success = await _noneDicomStudyFileRepository.BatchDeleteAsync(t => t.Id == noneDicomStudyFileId);
|
||||||
|
|
||||||
|
@ -217,17 +220,17 @@ namespace IRaCIS.Core.Application.Contracts
|
||||||
/// 上传非Dicom 文件 支持压缩包
|
/// 上传非Dicom 文件 支持压缩包
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[HttpPost]
|
[HttpPost]
|
||||||
public async Task<IResponseOutput> NewUploadNoneDicomFile([FromForm]UploadNoneDicomFileDto fileDto)
|
public async Task<IResponseOutput> NewUploadNoneDicomFile([FromForm] UploadNoneDicomFileDto fileDto)
|
||||||
{
|
{
|
||||||
var file = this._httpContext.HttpContext?.Request.Form;
|
var file = this._httpContext.HttpContext?.Request.Form;
|
||||||
var result= await UploadNoneDicomFile(file, fileDto.subjectVisitId, fileDto.noneDicomStudyId);
|
var result = await UploadNoneDicomFile(file, fileDto.subjectVisitId, fileDto.noneDicomStudyId);
|
||||||
if (result.IsSuccess)
|
if (result.IsSuccess)
|
||||||
{
|
{
|
||||||
var data = JsonConvert.DeserializeObject<DataInspectionAddDTO>(fileDto.AuditInfo);
|
var data = JsonConvert.DeserializeObject<DataInspectionAddDTO>(fileDto.AuditInfo);
|
||||||
data.GeneralId = fileDto.noneDicomStudyId;
|
data.GeneralId = fileDto.noneDicomStudyId;
|
||||||
await _inspectionService.AddInspectionRecordAsync(data);
|
await _inspectionService.AddInspectionRecordAsync(data);
|
||||||
|
|
||||||
var subvisit =await _repository.GetQueryable<SubjectVisit>().FirstOrDefaultAsync(x => x.Id == fileDto.subjectVisitId);
|
var subvisit = await _repository.GetQueryable<SubjectVisit>().FirstOrDefaultAsync(x => x.Id == fileDto.subjectVisitId);
|
||||||
|
|
||||||
List<DataInspection> datas = new List<DataInspection>();
|
List<DataInspection> datas = new List<DataInspection>();
|
||||||
datas.Add(new DataInspection()
|
datas.Add(new DataInspection()
|
||||||
|
@ -246,7 +249,7 @@ namespace IRaCIS.Core.Application.Contracts
|
||||||
|
|
||||||
await _inspectionService.AddListInspectionRecordAsync(datas);
|
await _inspectionService.AddListInspectionRecordAsync(datas);
|
||||||
}
|
}
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -259,9 +262,9 @@ namespace IRaCIS.Core.Application.Contracts
|
||||||
/// <param name="noneDicomStudyId"></param>
|
/// <param name="noneDicomStudyId"></param>
|
||||||
/// <param name="_hostEnvironment"></param>
|
/// <param name="_hostEnvironment"></param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
//[DisableRequestSizeLimit]
|
//[DisableRequestSizeLimit]
|
||||||
[RequestSizeLimit(1_073_741_824)]
|
[RequestSizeLimit(1_073_741_824)]
|
||||||
[HttpPost("{noneDicomStudyId:guid}/{subjectVisitId:guid}")]
|
[HttpPost("{noneDicomStudyId:guid}/{subjectVisitId:guid}")]
|
||||||
public async Task<IResponseOutput> UploadNoneDicomFile(IFormCollection formCollection, Guid subjectVisitId, Guid noneDicomStudyId)
|
public async Task<IResponseOutput> UploadNoneDicomFile(IFormCollection formCollection, Guid subjectVisitId, Guid noneDicomStudyId)
|
||||||
{
|
{
|
||||||
var rootPath = Directory.GetParent(_hostEnvironment.ContentRootPath.TrimEnd('\\')).IfNullThrowException().FullName;
|
var rootPath = Directory.GetParent(_hostEnvironment.ContentRootPath.TrimEnd('\\')).IfNullThrowException().FullName;
|
||||||
|
@ -269,7 +272,7 @@ namespace IRaCIS.Core.Application.Contracts
|
||||||
//上传根路径
|
//上传根路径
|
||||||
var _fileStorePath = Path.Combine(rootPath, StaticData.TrialDataFolder);
|
var _fileStorePath = Path.Combine(rootPath, StaticData.TrialDataFolder);
|
||||||
|
|
||||||
var sv = await _repository.Where<SubjectVisit>(t => t.Id == subjectVisitId).Select(t => new { t.TrialId, t.SiteId, t.SubjectId }).FirstOrDefaultAsync().IfNullThrowConvertException();
|
var sv = await _repository.Where<SubjectVisit>(t => t.Id == subjectVisitId).Select(t => new { t.TrialId, t.SiteId, t.SubjectId }).FirstOrDefaultAsync().IfNullThrowConvertException();
|
||||||
|
|
||||||
string uploadFolderPath = Path.Combine(_fileStorePath, sv.TrialId.ToString(), sv.SiteId.ToString(), sv.SubjectId.ToString(), subjectVisitId.ToString(), StaticData.NoneDicomFolder);
|
string uploadFolderPath = Path.Combine(_fileStorePath, sv.TrialId.ToString(), sv.SiteId.ToString(), sv.SubjectId.ToString(), subjectVisitId.ToString(), StaticData.NoneDicomFolder);
|
||||||
|
|
||||||
|
@ -317,12 +320,15 @@ namespace IRaCIS.Core.Application.Contracts
|
||||||
|
|
||||||
await _repository.AddAsync(new StudyMonitor()
|
await _repository.AddAsync(new StudyMonitor()
|
||||||
{
|
{
|
||||||
FileCount = formCollection.Files.Count,
|
FileCount = formCollection.Files.Count,
|
||||||
FileSize = formCollection.Files.Sum(t => t.Length), IsDicom = false,
|
FileSize = formCollection.Files.Sum(t => t.Length),
|
||||||
IsDicomReUpload = false,
|
IsDicom = false,
|
||||||
|
IsDicomReUpload = false,
|
||||||
StudyId = noneDicomStudyId,
|
StudyId = noneDicomStudyId,
|
||||||
|
|
||||||
UploadStartTime = startTime, UploadFinishedTime = DateTime.Now, IP = _userInfo.IP,
|
UploadStartTime = startTime,
|
||||||
|
UploadFinishedTime = DateTime.Now,
|
||||||
|
IP = _userInfo.IP,
|
||||||
//TotalMillisecondsInterval = (DateTime.Now - startTime).TotalMilliseconds,
|
//TotalMillisecondsInterval = (DateTime.Now - startTime).TotalMilliseconds,
|
||||||
TrialId = sv.TrialId,
|
TrialId = sv.TrialId,
|
||||||
SiteId = sv.SiteId,
|
SiteId = sv.SiteId,
|
||||||
|
@ -364,7 +370,7 @@ namespace IRaCIS.Core.Application.Contracts
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
await _repository.AddAsync(new NoneDicomStudyFile() { FileName = fileName, Path = relativePath, NoneDicomStudyId = noneDicomStudyId });
|
await _repository.AddAsync(new NoneDicomStudyFile() { FileName = fileName, Path = relativePath, NoneDicomStudyId = noneDicomStudyId });
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,10 +1,15 @@
|
||||||
using System;
|
using System;
|
||||||
using IRaCIS.Core.Domain.Models;
|
using IRaCIS.Core.Domain.Models;
|
||||||
|
using IRaCIS.Core.Domain.Share;
|
||||||
using Microsoft.EntityFrameworkCore.ChangeTracking;
|
using Microsoft.EntityFrameworkCore.ChangeTracking;
|
||||||
using Microsoft.EntityFrameworkCore.ValueGeneration;
|
using Microsoft.EntityFrameworkCore.ValueGeneration;
|
||||||
|
|
||||||
namespace IRaCIS.Core.Infra.EFCore.ValueGenerator
|
namespace IRaCIS.Core.Infra.EFCore.ValueGenerator
|
||||||
{
|
{
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 上传监控 时间间隔存储 需要按照这个字段进行排序
|
||||||
|
/// </summary>
|
||||||
public class UploadTotalMillisecondsInterval : ValueGenerator<int>
|
public class UploadTotalMillisecondsInterval : ValueGenerator<int>
|
||||||
{
|
{
|
||||||
|
|
||||||
|
@ -13,7 +18,6 @@ namespace IRaCIS.Core.Infra.EFCore.ValueGenerator
|
||||||
|
|
||||||
//modelBuilder.Entity<StudyMonitor>().Property(e => e.TestInterval).ValueGeneratedOnAddOrUpdate().HasDefaultValueSql("datediff(MS,UploadStartTime,UploadFinishedTime)");
|
//modelBuilder.Entity<StudyMonitor>().Property(e => e.TestInterval).ValueGeneratedOnAddOrUpdate().HasDefaultValueSql("datediff(MS,UploadStartTime,UploadFinishedTime)");
|
||||||
|
|
||||||
|
|
||||||
public override int Next(EntityEntry entry)
|
public override int Next(EntityEntry entry)
|
||||||
{
|
{
|
||||||
if (entry.Entity is StudyMonitor entity)
|
if (entry.Entity is StudyMonitor entity)
|
||||||
|
|
Loading…
Reference in New Issue