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 MassTransit;
using System.ComponentModel.DataAnnotations;
using System.Reflection;
using IRaCIS.Core.Infra.EFCore.Common;
using IRaCIS.Core.Application.Contracts;
namespace IRaCIS.Application.Services
{
///
/// 阅片临床数据配置
///
[ApiExplorerSettings(GroupName = "Reading")]
public class ReadingClinicalDataService : BaseService, IReadingClinicalDataService
{
private readonly IRepository _readingClinicalDataRepository;
private readonly IRepository _clinicalDataTrialSetRepository;
private readonly IRepository _readingClinicalDataPDFRepository;
public ReadingClinicalDataService(IRepository readingClinicalDataRepository,
IRepository clinicalDataTrialSetRepository,
IRepository readingClinicalDataPDFRepository
)
{
this._readingClinicalDataRepository = readingClinicalDataRepository;
this._clinicalDataTrialSetRepository = clinicalDataTrialSetRepository;
this._readingClinicalDataPDFRepository = readingClinicalDataPDFRepository;
}
///
/// 新增或者修改
///
///
///
[HttpPost]
public async Task AddOrUpdateReadingClinicalData(AddOrUpdateReadingClinicalDataDto indto)
{
var clinicalDataTrialSet = (await _clinicalDataTrialSetRepository.Where(x => x.Id == indto.ClinicalDataTrialSetId).FirstOrDefaultAsync()).IfNullThrowException();
if (indto.Id == null)
{
var entity = _mapper.Map(indto);
entity.ReadingClinicalDataPDFList = indto.AddFileList.Select(x => new ReadingClinicalDataPDF()
{
TrialId = entity.TrialId,
SubjectId= indto.SubjectId,
FileName=x.FileName,
Path=x.Path,
ClinicalDataTrialSetId=indto.ClinicalDataTrialSetId,
IsVisit= indto.IsVisit,
ClinicalDataLevel= clinicalDataTrialSet.ClinicalDataLevel,
ReadingId=indto.ReadingId
}).ToList();
await _readingClinicalDataRepository.AddAsync(entity, true);
return ResponseOutput.Ok(entity.Id);
}
else
{
var entity = (await _readingClinicalDataRepository.Where(t => t.Id == indto.Id, true).FirstOrDefaultAsync()).IfNullThrowException();
_mapper.Map(indto, entity);
await _readingClinicalDataPDFRepository.DeleteFromQueryAsync(x => indto.DeleteFileIds.Contains(x.Id));
var addFileList = indto.AddFileList.Select(x => new ReadingClinicalDataPDF()
{
TrialId = entity.TrialId,
SubjectId = indto.SubjectId,
FileName = x.FileName,
Path = x.Path,
IsVisit = indto.IsVisit,
ClinicalDataLevel = clinicalDataTrialSet.ClinicalDataLevel,
ReadingId = indto.ReadingId
}).ToList();
await _readingClinicalDataPDFRepository.AddRangeAsync(addFileList);
var success = await _readingClinicalDataRepository.SaveChangesAsync();
return ResponseOutput.Ok(entity.Id);
}
}
///
/// 删除
///
///
///
[HttpDelete("{id:guid}")]
public async Task DeleteReadingClinicalData(Guid id)
{
await _readingClinicalDataRepository.DeleteFromQueryAsync(x => x.Id == id, true);
return ResponseOutput.Result(true);
}
///
/// 获取下拉菜单
///
///
///
[HttpPost]
public async Task> GetTrialClinicalDataSelect(GetTrialClinicalDataSelectIndto inDto)
{
List clinicalList = await _clinicalDataTrialSetRepository.Where(x=>x.TrialId==inDto.TrialId&&x.IsConfirm)
//.WhereIf(inDto.ReadingClinicalDataId==null, x=> _readingClinicalDataPDFRepository.Where(y=>y.ObjectId==inDto.ObjectId&&))
.Select(x => new GetTrialClinicalDataSelectOutDto()
{
ClinicalDataLevel = x.ClinicalDataLevel,
ClinicalDataSetName = x.ClinicalDataSetName,
ClinicalUploadType = x.ClinicalUploadType,
ClinicalDataLevelName = x.ClinicalDataLevel.GetDisplayName(),
ClinicalUploadTypeName = x.ClinicalUploadType.GetDisplayName(),
Id = x.Id
}).ToListAsync() ;
return clinicalList;
}
///
/// 获取阅片临床数据列表
///
///
///
[HttpPost]
public async Task> GetReadingClinicalDataList(GetReadingClinicalDataListIndto inDto)
{
var result = await _readingClinicalDataRepository.Where(x=>x.Id==inDto.ReadingId).ProjectTo(_mapper.ConfigurationProvider).ToPagedListAsync(inDto.PageIndex, inDto.PageSize, inDto.SortField == null ? nameof(GetReadingClinicalDataListOutDto.ClinicalDataSetName) : inDto.SortField,
inDto.Asc);
foreach (var item in result.CurrentPageData)
{
item.ClinicalDataLevelName = item.ClinicalDataLevel.GetDisplayName();
item.ClinicalUploadTypeName = item.ClinicalUploadType.GetDisplayName();
item.FileList = item.ClinicalDataLevel != ClinicalLevel.Subject ? (await _readingClinicalDataPDFRepository.Where(y => y.ReadingClinicalDataId == item.Id).Select(y => new GetFileDto()
{
Id = y.Id,
FileName = y.FileName,
Path = y.Path
}).ToListAsync()) : (await _readingClinicalDataPDFRepository.Where(y => y.SubjectId == item.SubjectId).Select(y => new GetFileDto()
{
Id = y.Id,
FileName = y.FileName,
Path = y.Path
}).ToListAsync());
}
return result;
}
///
/// 获取单个阅片临床数据的所有文件
///
///
///
[HttpPost]
public async Task> GetReadingClinicalDataPDFList(GetReadingClinicalDataPDFListIndto inDto) {
var result = await _readingClinicalDataPDFRepository.Where(x => x.ReadingClinicalDataId == inDto.ReadingClinicalDataId).ProjectTo(_mapper.ConfigurationProvider)
.ToPagedListAsync(inDto.PageIndex, inDto.PageSize, inDto.SortField == null ? nameof(GetReadingClinicalDataPDFListOutDto.FileName) : inDto.SortField,
inDto.Asc);
return result;
}
/////
///// 新增或者修改PDF
/////
/////
/////
//[HttpPost]
//public async Task AddOrUpdateReadingClinicalDataPDF(AddOrUpdateReadingClinicalDataPDFDto indto)
//{
// var entity = await _readingClinicalDataPDFRepository.InsertOrUpdateAsync(indto, true);
// return ResponseOutput.Ok(entity.Id.ToString());
//}
///
/// 删除PDF单个文件
///
///
///
[HttpDelete("{id:guid}")]
public async Task DeleteReadingClinicalDataPDF(Guid id)
{
await _readingClinicalDataPDFRepository.DeleteFromQueryAsync(x => x.Id == id, true);
return ResponseOutput.Result(true);
}
}
}