diff --git a/IRaCIS.Core.API/Controllers/UploadDownLoadController.cs b/IRaCIS.Core.API/Controllers/UploadDownLoadController.cs index 2d859246e..ccbc54529 100644 --- a/IRaCIS.Core.API/Controllers/UploadDownLoadController.cs +++ b/IRaCIS.Core.API/Controllers/UploadDownLoadController.cs @@ -381,30 +381,19 @@ namespace IRaCIS.Core.API.Controllers { await QCCommon.VerifyIsCRCSubmmitAsync(_repository, _userInfo, subjectVisitId); var sv = _repository.Where(t => t.Id == subjectVisitId).Select(t => new { t.TrialId, t.SiteId, t.SubjectId }).FirstOrDefault().IfNullThrowException(); - - - ClinicalData? clinical = await _clinicalDataRepository.Where(x => x.VisitOrReadId == subjectVisitId && x.ClinicalLevel == ClinicalLevel.Subject).FirstOrDefaultAsync(); - if (clinical == null) - { - clinical = new ClinicalData() - { - ClinicalLevel = ClinicalLevel.Subject, - SubjectId = sv.SubjectId, - DataType = ClinicalDataType.MedicalHistory, - TrialId = sv.TrialId, - UploadType = ClinicalUploadType.PDF, - VisitOrReadId = subjectVisitId, - Id= NewId.NextGuid(), - }; - - await _clinicalDataRepository.AddAsync(clinical); - - } + await FileUploadAsync(async (fileName) => { var (serverFilePath, relativePath, fileRealName) = FileStoreHelper.GetClinicalDataPath(_hostEnvironment, fileName, sv.TrialId, sv.SiteId, sv.SubjectId, subjectVisitId); //插入临床pdf 路径 - await _repository.AddAsync(new PreviousPDF() { ClinicalDataId= clinical.Id, SubjectVisitId = subjectVisitId, Path = relativePath, FileName = fileRealName }); + await _repository.AddAsync(new PreviousPDF() { SubjectVisitId = subjectVisitId, + + IsVisist=true, + DataType= ClinicalDataType.MedicalHistory, + UploadType=ClinicalUploadType.PDF, + SubjectId= sv.SubjectId, + TrialId=sv.TrialId, + ClinicalLevel = ClinicalLevel.Subject, Path = relativePath, FileName = fileRealName }); return serverFilePath; }); await _repository.SaveChangesAsync(); @@ -417,25 +406,24 @@ namespace IRaCIS.Core.API.Controllers /// /// /// - [HttpPost("ClinicalData/UploadClinicalData/{clinicalDataId:guid}")] + [HttpPost("ClinicalData/UploadClinicalData/{trialId:guid}/{subjectId:guid}")] [DisableRequestSizeLimit] - public async Task UploadClinicalData(Guid clinicalDataId) + public async Task UploadClinicalData(Guid trialId,Guid subjectId) { - var sv = _repository.Where(t => t.Id == clinicalDataId).Select(t => new { t.TrialId, t.SubjectId }).FirstOrDefault().IfNullThrowException(); - await FileUploadAsync(async (fileName) => + + var filerelativePath = string.Empty; + await FileUploadAsync(async (fileName) => { - var (serverFilePath, relativePath, fileRealName) = FileStoreHelper.GetClinicalDataPath(_hostEnvironment, fileName, sv.TrialId.Value, sv.SubjectId.Value, clinicalDataId); + var (serverFilePath, relativePath, fileRealName) = FileStoreHelper.GetClinicalDataPath(_hostEnvironment, fileName, trialId, subjectId); + filerelativePath = relativePath; - //插入临床pdf 路径 - await _repository.AddAsync(new PreviousPDF() { SubjectVisitId = clinicalDataId, ClinicalDataId= clinicalDataId, Path = relativePath, FileName = fileRealName }); - - return serverFilePath; + return relativePath; }); await _repository.SaveChangesAsync(); - return ResponseOutput.Ok(); + return ResponseOutput.Ok(filerelativePath); } /// /// 上传非Dicom 文件 支持压缩包 多文件上传 diff --git a/IRaCIS.Core.API/IRaCIS.Core.API.xml b/IRaCIS.Core.API/IRaCIS.Core.API.xml index 65e3b47c0..6bdc70cca 100644 --- a/IRaCIS.Core.API/IRaCIS.Core.API.xml +++ b/IRaCIS.Core.API/IRaCIS.Core.API.xml @@ -171,7 +171,7 @@ - + 上传临床数据 diff --git a/IRaCIS.Core.Application/Helper/FileStoreHelper.cs b/IRaCIS.Core.Application/Helper/FileStoreHelper.cs index e1467fb5a..20633655a 100644 --- a/IRaCIS.Core.Application/Helper/FileStoreHelper.cs +++ b/IRaCIS.Core.Application/Helper/FileStoreHelper.cs @@ -231,18 +231,18 @@ public static class FileStoreHelper } - public static (string PhysicalPath, string RelativePath, string FileRealName) GetClinicalDataPath(IWebHostEnvironment _hostEnvironment, string fileName, Guid trialId , Guid subjectId, Guid clinicalDataId) + public static (string PhysicalPath, string RelativePath, string FileRealName) GetClinicalDataPath(IWebHostEnvironment _hostEnvironment, string fileName, Guid trialId , Guid subjectId) { var rootPath = FileStoreHelper.GetIRaCISRootDataFolder(_hostEnvironment); - string uploadFolderPath = Path.Combine(rootPath, StaticData.Folder.TrialDataFolder, trialId.ToString(), subjectId.ToString(), clinicalDataId.ToString(), StaticData.Folder.TreatmenthistoryFolder); + string uploadFolderPath = Path.Combine(rootPath, StaticData.Folder.TrialDataFolder, trialId.ToString(), subjectId.ToString(), StaticData.Folder.TreatmenthistoryFolder); if (!Directory.Exists(uploadFolderPath)) Directory.CreateDirectory(uploadFolderPath); var (trustedFileNameForFileStorage, fileRealName) = FileStoreHelper.GetStoreFileName(fileName); - var relativePath = $"/{StaticData.Folder.IRaCISDataFolder}/{StaticData.Folder.TrialDataFolder}/{trialId}/{subjectId}/{clinicalDataId}/{StaticData.Folder.TreatmenthistoryFolder}/{trustedFileNameForFileStorage}"; + var relativePath = $"/{StaticData.Folder.IRaCISDataFolder}/{StaticData.Folder.TrialDataFolder}/{trialId}/{subjectId}/{StaticData.Folder.TreatmenthistoryFolder}/{trustedFileNameForFileStorage}"; var serverFilePath = Path.Combine(uploadFolderPath, trustedFileNameForFileStorage); diff --git a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml index 327cfeb50..9756f57b0 100644 --- a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml +++ b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml @@ -512,6 +512,46 @@ 数据 + + + 项目Id + + + + + 受试者ID + + + + + 访视或者阅片ID + + + + + 项目ID + + + + + 页码 + + + + + 每页大小 + + + + + 排序字段 + + + + + 排序字段 + + 项目ID @@ -927,9 +967,69 @@ PreviousSurgeryQuery 列表查询参数模型 + + + 是否是访视 + + + + + 临床级别 + + + + + 数据类型 + + + + + 上传方式 + + + + + 项目Id + + + + + 受试者ID + + PreviousPDFAddOrEdit 列表查询参数模型 + + + 是否是访视 + + + + + 临床级别 + + + + + 数据类型 + + + + + 上传方式 + + + + + 项目Id + + + + + 受试者ID + + 文件名称 @@ -2577,37 +2677,30 @@ - + - 临床数据 + 临床数据 原表 - + 新增或者修改 - + - - - 分页获取 - - - - - + 获取 - + 删除 - + diff --git a/IRaCIS.Core.Application/Service/QC/DTO/PreviousSurgeryViewModel.cs b/IRaCIS.Core.Application/Service/QC/DTO/PreviousSurgeryViewModel.cs index 11e5e60d3..6d77fd230 100644 --- a/IRaCIS.Core.Application/Service/QC/DTO/PreviousSurgeryViewModel.cs +++ b/IRaCIS.Core.Application/Service/QC/DTO/PreviousSurgeryViewModel.cs @@ -3,6 +3,8 @@ // 生成时间 2021-11-22 11:27:53 // 对此文件的更改可能会导致不正确的行为,并且如果重新生成代码,这些更改将会丢失。 //-------------------------------------------------------------------- +using IRaCIS.Core.Domain.Share.Reading; + namespace IRaCIS.Core.Application.Contracts { /// PreviousSurgeryView 列表视图模型 @@ -54,6 +56,37 @@ namespace IRaCIS.Core.Application.Contracts public Guid CreateUserId { get; set; } public string FullFilePath { get; set; } = string.Empty; + + + /// + /// 是否是访视 + /// + public bool? IsVisist { get; set; } + + /// + /// 临床级别 + /// + public ClinicalLevel? ClinicalLevel { get; set; } + + /// + /// 数据类型 + /// + public ClinicalDataType? DataType { get; set; } + + /// + /// 上传方式 + /// + public ClinicalUploadType? UploadType { get; set; } + + /// + /// 项目Id + /// + public Guid? TrialId { get; set; } + + /// + /// 受试者ID + /// + public Guid? SubjectId { get; set; } } @@ -65,6 +98,36 @@ namespace IRaCIS.Core.Application.Contracts public Guid SubjectVisitId { get; set; } public string Path { get; set; } = string.Empty; public string FileName { get; set; } = string.Empty; + + /// + /// 是否是访视 + /// + public bool? IsVisist { get; set; } + + /// + /// 临床级别 + /// + public ClinicalLevel? ClinicalLevel { get; set; } + + /// + /// 数据类型 + /// + public ClinicalDataType? DataType { get; set; } + + /// + /// 上传方式 + /// + public ClinicalUploadType? UploadType { get; set; } + + /// + /// 项目Id + /// + public Guid? TrialId { get; set; } + + /// + /// 受试者ID + /// + public Guid? SubjectId { get; set; } } diff --git a/IRaCIS.Core.Application/Service/Reading/ClinicalDataService.cs b/IRaCIS.Core.Application/Service/Reading/ClinicalDataService.cs index fc2d529e8..00aea4d2f 100644 --- a/IRaCIS.Core.Application/Service/Reading/ClinicalDataService.cs +++ b/IRaCIS.Core.Application/Service/Reading/ClinicalDataService.cs @@ -1,94 +1,107 @@ -using IRaCIS.Application.Interfaces; -using IRaCIS.Core.Infra.EFCore; -using IRaCIS.Core.Domain.Share; -using IRaCIS.Core.Application.Filter; -using Microsoft.AspNetCore.Mvc; -using IRaCIS.Core.Application.Service.WorkLoad.DTO; -using Microsoft.AspNetCore.Authorization; -using IRaCIS.Core.Application.Auth; -using IRaCIS.Core.Application.Service.Reading.Dto; -using IRaCIS.Core.Domain.Share.Reading; +//using IRaCIS.Application.Interfaces; +//using IRaCIS.Core.Infra.EFCore; +//using IRaCIS.Core.Domain.Share; +//using IRaCIS.Core.Application.Filter; +//using Microsoft.AspNetCore.Mvc; +//using IRaCIS.Core.Application.Service.WorkLoad.DTO; +//using Microsoft.AspNetCore.Authorization; +//using IRaCIS.Core.Application.Auth; +//using IRaCIS.Core.Application.Service.Reading.Dto; +//using IRaCIS.Core.Domain.Share.Reading; -namespace IRaCIS.Application.Services -{ - /// - /// 临床数据 - /// - [ApiExplorerSettings(GroupName = "Reading")] - public class ClinicalDataService : BaseService - { +//namespace IRaCIS.Application.Services +//{ +// /// +// /// 临床数据 +// /// +// [ApiExplorerSettings(GroupName = "Reading")] +// public class ClinicalDataService : BaseService +// { - public IRepository _subjectVisitRepository; - private readonly IRepository _clinicalDataRepository; - public ClinicalDataService(IRepository subjectVisitRepository, - IRepository clinicalDataRepository - ) - { - _subjectVisitRepository = subjectVisitRepository; - _clinicalDataRepository = clinicalDataRepository; - } +// public IRepository _subjectVisitRepository; +// private readonly IRepository _clinicalDataRepository; +// private readonly IRepository _previousPDFRepository; + +// public ClinicalDataService(IRepository subjectVisitRepository, +// IRepository clinicalDataRepository, +// IRepository previousPDFRepository +// ) +// { +// _subjectVisitRepository = subjectVisitRepository; +// _clinicalDataRepository = clinicalDataRepository; +// this._previousPDFRepository = previousPDFRepository; +// } - /// - /// 新增或者修改 - /// - /// - /// - [HttpPost] - public async Task AddOrUpdateClinicalDataService(ClinicalDataAddOrEdit addOrEditClinicalData) - { - var entity = await _repository.InsertOrUpdateAsync(addOrEditClinicalData, true); - return ResponseOutput.Ok(entity.Id.ToString()); - } +// /// +// /// 新增或者修改 +// /// +// /// +// /// +// [HttpPost] +// public async Task AddOrUpdateClinicalDataService(ClinicalDataAddOrEdit addOrEditClinicalData) +// { +// var entity = await _repository.InsertOrUpdateAsync(addOrEditClinicalData, true); +// return ResponseOutput.Ok(entity.Id.ToString()); +// } - /// - /// 分页获取 - /// - /// - /// - [HttpPost] - public async Task> GetClinicalDataList(ClinicalDataQuery query) - { +// /// +// /// 分页获取 +// /// +// /// +// /// +// [HttpPost] +// public async Task> GetClinicalDataList(ClinicalDataQuery query) +// { - var readquery = _clinicalDataRepository.AsQueryable() - .WhereIf(query.TrialId!=null,x=>x.TrialId==query.TrialId) - - .ProjectTo(_mapper.ConfigurationProvider); - var pageList= await readquery.ToPagedListAsync(query.PageIndex, query.PageSize, query.SortField == null ? "CreateTime" : query.SortField, - query.SortAsc); +// var readquery = _clinicalDataRepository.AsQueryable() +// .WhereIf(query.TrialId!=null,x=>x.TrialId==query.TrialId) +// .ProjectTo(_mapper.ConfigurationProvider); +// var pageList= await readquery.ToPagedListAsync(query.PageIndex, query.PageSize, query.SortField == null ? "CreateTime" : query.SortField, +// query.SortAsc); - return pageList; - } +// return pageList; +// } - /// - /// 获取 - /// - /// - /// - [HttpPost] - public async Task> ClinicalDataView(ClinicalDataInDto inDto) - { - var list= await _clinicalDataRepository.AsQueryable().Where(x => x.TrialId == inDto.TrialId) - .Where(x => (x.ClinicalLevel == ClinicalLevel.Subject && x.SubjectId == inDto.SubjectId) || x.VisitOrReadId == inDto.VisitOrReadId) - .ProjectTo(_mapper.ConfigurationProvider) - .ToListAsync(); - return list; - } + + +// /// +// /// 获取 +// /// +// /// +// /// +// [HttpPost] +// public async Task ClinicalDataView(ClinicalDataInDto inDto) +// { +// var list= await _previousPDFRepository.AsQueryable().Where(x => x.TrialId == inDto.TrialId) +// .Where(x => (x.ClinicalLevel == ClinicalLevel.Subject && x.SubjectId == inDto.SubjectId) || x.SubjectVisitId == inDto.VisitOrReadId) +// .Select(x=>new { +// x.Path, +// x.DataType, +// x.CreateTime, +// x.ClinicalLevel, +// x.FileName, +// x.UploadType, +// x.Id, +// }) +// .ToListAsync(); +// return list; +// } - /// - /// 删除 - /// - /// - /// - [HttpDelete("{ClinicalDataId:guid}")] - public async Task DeleteClinicalData(Guid clinicalDataId) - { - var success = await _repository.BatchDeleteAsync(t => t.Id == clinicalDataId); - return ResponseOutput.Result(success); - } - } -} +// /// +// /// 删除 +// /// +// /// +// /// +// [HttpDelete("{ClinicalDataId:guid}")] +// public async Task DeleteClinicalData(Guid clinicalDataId) +// { +// var success = await _repository.BatchDeleteAsync(t => t.Id == clinicalDataId); +// return ResponseOutput.Result(success); +// } +// } +//} diff --git a/IRaCIS.Core.Application/Service/Reading/Dto/PreviousPDFViewModel.cs b/IRaCIS.Core.Application/Service/Reading/Dto/PreviousPDFViewModel.cs new file mode 100644 index 000000000..99f29a558 --- /dev/null +++ b/IRaCIS.Core.Application/Service/Reading/Dto/PreviousPDFViewModel.cs @@ -0,0 +1,58 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace IRaCIS.Core.Application.Service.Reading.Dto +{ + + + public class PreviousPDFInDto + { + /// + /// 项目Id + /// + public Guid TrialId { get; set; } + + /// + /// 受试者ID + /// + public Guid SubjectId { get; set; } + + /// + /// 访视或者阅片ID + /// + public Guid VisitOrReadId { get; set; } + } + public class PreviousPDFQuery + { + /// + /// 项目ID + /// + public Guid? TrialId { get; set; } + + + + /// + /// 页码 + /// + public int PageIndex { get; set; } = 1; + + /// + /// 每页大小 + /// + public int PageSize { get; set; } = 10; + + + /// + /// 排序字段 + /// + public string? SortField { get; set; } + + /// + /// 排序字段 + /// + public bool SortAsc { get; set; } = true; + } +} diff --git a/IRaCIS.Core.Application/Service/Reading/PreviousPDFService.cs b/IRaCIS.Core.Application/Service/Reading/PreviousPDFService.cs new file mode 100644 index 000000000..c718ade20 --- /dev/null +++ b/IRaCIS.Core.Application/Service/Reading/PreviousPDFService.cs @@ -0,0 +1,89 @@ +using IRaCIS.Application.Interfaces; +using IRaCIS.Core.Infra.EFCore; +using IRaCIS.Core.Domain.Share; +using IRaCIS.Core.Application.Filter; +using Microsoft.AspNetCore.Mvc; +using IRaCIS.Core.Application.Service.WorkLoad.DTO; +using Microsoft.AspNetCore.Authorization; +using IRaCIS.Core.Application.Auth; +using IRaCIS.Core.Application.Service.Reading.Dto; +using IRaCIS.Core.Domain.Share.Reading; +using IRaCIS.Core.Application.Contracts; + +namespace IRaCIS.Application.Services +{ + /// + /// 临床数据 原表 + /// + [ApiExplorerSettings(GroupName = "Reading")] + public class PreviousPDFService : BaseService + { + + public IRepository _subjectVisitRepository; + private readonly IRepository _previousPDFRepository; + + public PreviousPDFService(IRepository subjectVisitRepository, + IRepository PreviousPDFRepository + ) + { + _subjectVisitRepository = subjectVisitRepository; + _previousPDFRepository = PreviousPDFRepository; + + } + + + /// + /// 新增或者修改 + /// + /// + /// + [HttpPost] + public async Task AddOrUpdatePreviousPDFService(PreviousPDFAddOrEdit addOrEditPreviousPDF) + { + var entity = await _repository.InsertOrUpdateAsync(addOrEditPreviousPDF, true); + return ResponseOutput.Ok(entity.Id.ToString()); + } + + + + + /// + /// 获取 + /// + /// + /// + [HttpPost] + public async Task PreviousPDFView(PreviousPDFInDto inDto) + { + var list= await _previousPDFRepository.AsQueryable().Where(x => x.TrialId == inDto.TrialId) + .Where(x => (x.ClinicalLevel == ClinicalLevel.Subject && x.SubjectId == inDto.SubjectId) || x.SubjectVisitId == inDto.VisitOrReadId) + .Select(x=>new { + x.Path, + x.DataType, + x.CreateTime, + x.ClinicalLevel, + x.FileName, + x.UploadType, + x.Id, + }) + .ToListAsync(); + return list; + } + + + + + + /// + /// 删除 + /// + /// + /// + [HttpDelete("{previousPDFId:guid}")] + public async Task DeletePreviousPDF(Guid previousPDFId) + { + var success = await _repository.BatchDeleteAsync(t => t.Id == previousPDFId); + return ResponseOutput.Result(success); + } + } +} diff --git a/IRaCIS.Core.Application/Service/Reading/_MapConfig.cs b/IRaCIS.Core.Application/Service/Reading/_MapConfig.cs index 166742a9c..57657049f 100644 --- a/IRaCIS.Core.Application/Service/Reading/_MapConfig.cs +++ b/IRaCIS.Core.Application/Service/Reading/_MapConfig.cs @@ -1,10 +1,10 @@ using AutoMapper; -using IRaCIS.Application.Contracts; using IRaCIS.Core.Application.Contracts; using IRaCIS.Core.Application.Service.Reading.Dto; using IRaCIS.Core.Application.ViewModel; using IRaCIS.Core.Domain.Models; + namespace IRaCIS.Core.Application.Service { public class ReadingConfig : Profile @@ -19,6 +19,13 @@ namespace IRaCIS.Core.Application.Service CreateMap(); + + + + CreateMap().ReverseMap(); + + CreateMap(); + } } diff --git a/IRaCIS.Core.Domain.Share/Reading/ReadEnum.cs b/IRaCIS.Core.Domain.Share/Reading/ReadEnum.cs index facea7ae3..b3c8e35a3 100644 --- a/IRaCIS.Core.Domain.Share/Reading/ReadEnum.cs +++ b/IRaCIS.Core.Domain.Share/Reading/ReadEnum.cs @@ -60,11 +60,6 @@ namespace IRaCIS.Core.Domain.Share.Reading /// public enum ReadingPeriodStatus { - /// - /// 无 - /// - None = 0, - /// /// 已生效 /// diff --git a/IRaCIS.Core.Domain/QC/ClinicalData/PreviousPDF.cs b/IRaCIS.Core.Domain/QC/ClinicalData/PreviousPDF.cs index 8ae223d9d..a6429bc7c 100644 --- a/IRaCIS.Core.Domain/QC/ClinicalData/PreviousPDF.cs +++ b/IRaCIS.Core.Domain/QC/ClinicalData/PreviousPDF.cs @@ -3,6 +3,7 @@ // 此代码由T4模板自动生成 byzhouhang 20210918 // 生成时间 2021-12-09 11:35:31 // 对此文件的更改可能会导致不正确的行为,并且如果重新生成代码,这些更改将会丢失。 +using IRaCIS.Core.Domain.Share.Reading; using System; using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; @@ -47,11 +48,37 @@ namespace IRaCIS.Core.Domain.Models [Required] public Guid CreateUserId { get; set; } + /// - /// 临床数据ID + /// 是否是访视 /// - public Guid? ClinicalDataId { get; set; } - + public bool? IsVisist { get; set; } + + /// + /// 临床级别 + /// + public ClinicalLevel? ClinicalLevel { get; set; } + + /// + /// 数据类型 + /// + public ClinicalDataType? DataType { get; set; } + + /// + /// 上传方式 + /// + public ClinicalUploadType? UploadType { get; set; } + + /// + /// 项目Id + /// + public Guid? TrialId { get; set; } + + /// + /// 受试者ID + /// + public Guid? SubjectId { get; set; } + }