You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
281 lines
13 KiB
281 lines
13 KiB
using Microsoft.AspNetCore.Mvc;
|
|
using Microsoft.Extensions.Configuration;
|
|
using NPOI.POIFS.Storage;
|
|
using Shentun.Peis.Enums;
|
|
using Shentun.Peis.Models;
|
|
using Shentun.Peis.PatientRegisters;
|
|
using Shentun.Peis.PrintReports;
|
|
using Shentun.Peis.RegisterCheckItems;
|
|
using Shentun.Peis.RegisterCheckPictures;
|
|
using Shentun.Peis.RegisterChecks;
|
|
using Shentun.Peis.RegisterCheckSuggestions;
|
|
using Shentun.Peis.RegisterCheckSummarys;
|
|
using Shentun.Peis.SumSummaryReports;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
using Volo.Abp;
|
|
using Volo.Abp.Application.Services;
|
|
using Volo.Abp.Domain.Repositories;
|
|
|
|
namespace Shentun.Peis.PacsBusiness
|
|
{
|
|
/// <summary>
|
|
/// pacs相关接口 免登录
|
|
/// </summary>
|
|
[ApiExplorerSettings(GroupName = "Work")]
|
|
public class PacsBusinessAppService : ApplicationService
|
|
{
|
|
|
|
private readonly IConfiguration _configuration;
|
|
private readonly IRepository<RegisterCheck, Guid> _registerCheckRepository;
|
|
private readonly IRepository<PatientRegister, Guid> _patientRegisterRepository;
|
|
private readonly IRepository<RegisterCheckPicture, Guid> _registerCheckPictureRepository;
|
|
private readonly IRepository<RegisterCheckPacs, Guid> _registerCheckPacsRepository;
|
|
private readonly PatientRegisterAppService _patientRegisterAppService;
|
|
private readonly RegisterCheckAppService _registerCheckAppService;
|
|
private readonly RegisterCheckItemAppService _registerCheckItemAppService;
|
|
private readonly RegisterCheckSummaryAppService _registerCheckSummaryAppService;
|
|
private readonly RegisterCheckSuggestionAppService _registerCheckSuggestionAppService;
|
|
private readonly SumSummaryReportAppService _sumSummaryReportAppService;
|
|
private readonly RegisterCheckPictureAppService _registerCheckPictureAppService;
|
|
public PacsBusinessAppService(
|
|
IConfiguration configuration,
|
|
IRepository<RegisterCheck, Guid> registerCheckRepository,
|
|
IRepository<PatientRegister, Guid> patientRegisterRepository,
|
|
IRepository<RegisterCheckPicture, Guid> registerCheckPictureRepository,
|
|
IRepository<RegisterCheckPacs, Guid> registerCheckPacsRepository,
|
|
PatientRegisterAppService patientRegisterAppService,
|
|
RegisterCheckAppService registerCheckAppService,
|
|
RegisterCheckItemAppService registerCheckItemAppService,
|
|
RegisterCheckSummaryAppService registerCheckSummaryAppService,
|
|
RegisterCheckSuggestionAppService registerCheckSuggestionAppService,
|
|
SumSummaryReportAppService sumSummaryReportAppService,
|
|
RegisterCheckPictureAppService registerCheckPictureAppService)
|
|
{
|
|
_configuration = configuration;
|
|
_registerCheckRepository = registerCheckRepository;
|
|
_patientRegisterRepository = patientRegisterRepository;
|
|
_registerCheckPictureRepository = registerCheckPictureRepository;
|
|
_registerCheckPacsRepository = registerCheckPacsRepository;
|
|
_patientRegisterAppService = patientRegisterAppService;
|
|
_registerCheckAppService = registerCheckAppService;
|
|
_registerCheckItemAppService = registerCheckItemAppService;
|
|
_registerCheckSummaryAppService = registerCheckSummaryAppService;
|
|
_registerCheckSuggestionAppService = registerCheckSuggestionAppService;
|
|
_sumSummaryReportAppService = sumSummaryReportAppService;
|
|
_registerCheckPictureAppService = registerCheckPictureAppService;
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// 导入心电图图片 根据检查单号 免登录
|
|
/// </summary>
|
|
/// <param name="input"></param>
|
|
/// <returns></returns>
|
|
/// <exception cref="UserFriendlyException"></exception>
|
|
[HttpPost("api/app/PacsBusiness/ImportRegisterCheckPictureByCheckRequestNo")]
|
|
public async Task ImportRegisterCheckPictureByCheckRequestNoAsync(ImportRegisterCheckPictureByCheckRequestNoInputDto input)
|
|
{
|
|
Random rd = new Random();
|
|
|
|
string AbsolutePath = _configuration.GetValue<string>("PacsVirtualPath:RealPath");
|
|
string AbsoluteName = _configuration.GetValue<string>("PacsVirtualPath:Alias");
|
|
|
|
|
|
|
|
if (string.IsNullOrWhiteSpace(input.PictureBaseStr))
|
|
{
|
|
throw new UserFriendlyException("图片数据不存在");
|
|
}
|
|
|
|
|
|
|
|
var patientRegisterCompleteFlag = (from patientRegister in await _patientRegisterRepository.GetQueryableAsync()
|
|
join registerCheck in await _registerCheckRepository.GetQueryableAsync() on patientRegister.Id equals registerCheck.PatientRegisterId
|
|
where registerCheck.CheckRequestNo == input.CheckRequestNo
|
|
select new
|
|
{
|
|
registerCheckId = registerCheck.Id,
|
|
CompleteFlag = patientRegister.CompleteFlag,
|
|
PatientRegisterId = patientRegister.Id
|
|
}).ToList();
|
|
|
|
if (patientRegisterCompleteFlag.Count == 0)
|
|
throw new UserFriendlyException("体检人员不存在");
|
|
|
|
if (patientRegisterCompleteFlag.FirstOrDefault().CompleteFlag == PatientRegisterCompleteFlag.PreRegistration)
|
|
throw new UserFriendlyException("预登记人员不能导入图片");
|
|
if (patientRegisterCompleteFlag.FirstOrDefault().CompleteFlag == PatientRegisterCompleteFlag.SumCheck)
|
|
throw new UserFriendlyException("已总检人员不能导入图片");
|
|
|
|
|
|
string PatientRegisterId = patientRegisterCompleteFlag.FirstOrDefault().PatientRegisterId.ToString();
|
|
|
|
Guid registerCheckId = patientRegisterCompleteFlag.FirstOrDefault().registerCheckId;
|
|
|
|
|
|
|
|
string PictureUrl = ImageHelper.Base64StrToImageInAbsolutePath(AbsolutePath, input.FileName, input.PictureBaseStr,
|
|
PatientRegisterId,
|
|
registerCheckId.ToString(), AbsoluteName);
|
|
|
|
if (string.IsNullOrEmpty(PictureUrl))
|
|
{
|
|
throw new UserFriendlyException("图片数据有误");
|
|
}
|
|
|
|
var ent = await _registerCheckPictureRepository.FirstOrDefaultAsync(m => m.RegisterCheckId == registerCheckId
|
|
&& m.PictureFilename == PictureUrl);
|
|
|
|
if (ent != null)
|
|
{
|
|
ent.PictureFilename = PictureUrl;
|
|
|
|
await _registerCheckPictureRepository.UpdateAsync(ent);
|
|
}
|
|
else
|
|
{
|
|
var maxDisplayOrder = (await _registerCheckPictureRepository.GetQueryableAsync())
|
|
.Where(m => m.RegisterCheckId == registerCheckId)
|
|
.OrderByDescending(o => o.DisplayOrder)
|
|
.Select(s => s.DisplayOrder)
|
|
.FirstOrDefault();
|
|
|
|
ent = new RegisterCheckPicture
|
|
{
|
|
DisplayOrder = maxDisplayOrder + 1,
|
|
IsPrint = 'Y',
|
|
PictureFilename = PictureUrl,
|
|
RegisterCheckId = registerCheckId,
|
|
PictureFileType = '0',
|
|
LocalPathName = ""
|
|
};
|
|
|
|
await _registerCheckPictureRepository.InsertAsync(ent);
|
|
}
|
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// 导入pacs dicom数据
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
[HttpPost("api/app/PacsBusiness/ImportPacsDicomData")]
|
|
public async Task ImportPacsDicomDataAsync(ImportPacsDicomDataInputDto input)
|
|
{
|
|
var realPath = _configuration["DicomVirtualPath:RealPath"];
|
|
var requestPath = _configuration["DicomVirtualPath:RequestPath"];
|
|
if (string.IsNullOrWhiteSpace(input.CheckRequestNo))
|
|
throw new UserFriendlyException("条码号不能为空");
|
|
var registerCheckEnt = await _registerCheckRepository.FirstOrDefaultAsync(f => f.CheckRequestNo == input.CheckRequestNo);
|
|
if (registerCheckEnt == null)
|
|
throw new UserFriendlyException("条码号不正确");
|
|
|
|
if (input.Details.Any())
|
|
{
|
|
List<RegisterCheckPacs> registerCheckPacss = new List<RegisterCheckPacs>();
|
|
|
|
foreach (var item in input.Details)
|
|
{
|
|
if (!item.FilePathName.Contains(realPath))
|
|
throw new UserFriendlyException("资源路径跟体检配置不一致");
|
|
var dicomPathName = item.FilePathName.Replace(realPath, requestPath);
|
|
|
|
registerCheckPacss.Add(new RegisterCheckPacs
|
|
{
|
|
CheckDesc = "",
|
|
CheckResult = "",
|
|
DicomPathName = dicomPathName,
|
|
DisplayOrder = input.Details.IndexOf(item) + 1,
|
|
LocalPathName = item.FilePathName,
|
|
RegisterCheckId = registerCheckEnt.Id
|
|
});
|
|
}
|
|
|
|
await _registerCheckPacsRepository.InsertManyAsync(registerCheckPacss);
|
|
}
|
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// 根据检查条码获取dicom文件
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
[HttpPost("api/app/PacsBusiness/GetPacsDicomDataByCheckRequestNo")]
|
|
public async Task<List<RegisterCheckPacsDto>> GetPacsDicomDataByCheckRequestNoAsync(CheckRequestNoInputDto input)
|
|
{
|
|
if (string.IsNullOrWhiteSpace(input.CheckRequestNo))
|
|
throw new UserFriendlyException("检查条码不能为空");
|
|
|
|
var registerCheckEnt = await _registerCheckRepository.FirstOrDefaultAsync(f => f.CheckRequestNo == input.CheckRequestNo);
|
|
if (registerCheckEnt == null)
|
|
throw new UserFriendlyException("检查条码不存在");
|
|
|
|
var registerCheckPacsList = await _registerCheckPacsRepository.GetListAsync(m => m.RegisterCheckId == registerCheckEnt.Id);
|
|
|
|
var entListDto = registerCheckPacsList.Select(s => new RegisterCheckPacsDto
|
|
{
|
|
DicomPathName = s.DicomPathName,
|
|
DisplayOrder = s.DisplayOrder,
|
|
LocalPathName = s.LocalPathName
|
|
}).OrderBy(o => o.DisplayOrder).ToList();
|
|
|
|
return entListDto;
|
|
}
|
|
|
|
|
|
|
|
/// <summary>
|
|
/// 获取体检人员信息跟项目结果等信息
|
|
/// </summary>
|
|
/// <param name="input"></param>
|
|
/// <returns></returns>
|
|
[HttpPost("api/app/PacsBusiness/GetPatientRegisterWithCheckResultByCheckRequestNo")]
|
|
public async Task<GetPatientRegisterWithCheckResultByCheckRequestNo> GetPatientRegisterWithCheckResultByCheckRequestNoAsync(CheckRequestNoInputDto input)
|
|
{
|
|
var resultDto = new GetPatientRegisterWithCheckResultByCheckRequestNo();
|
|
|
|
var query = (from patientRegister in await _patientRegisterRepository.GetQueryableAsync()
|
|
join registerCheck in await _registerCheckRepository.GetQueryableAsync() on patientRegister.Id equals registerCheck.PatientRegisterId
|
|
where registerCheck.CheckRequestNo == input.CheckRequestNo
|
|
select new
|
|
{
|
|
patientRegisterNo = patientRegister.PatientRegisterNo,
|
|
patientRegisterId = patientRegister.Id,
|
|
registerCheckId = registerCheck.Id
|
|
}).FirstOrDefault();
|
|
|
|
if (query == null)
|
|
{
|
|
throw new UserFriendlyException("条码不存在");
|
|
}
|
|
|
|
resultDto.PatientRegisterDetail = await _patientRegisterAppService.GetAlreadyRegisterPatientRegisterByNoAsync(new PatientRegisterNoInputDto
|
|
{
|
|
PatientRegisterNo = query.patientRegisterNo
|
|
});
|
|
|
|
resultDto.RegisterCheckDetail = await _registerCheckAppService.GetRegisterCheckAsync(query.registerCheckId);
|
|
|
|
resultDto.RegisterCheckItemDetails = await _registerCheckItemAppService.GetListInRegisterCheckIdAsync(query.registerCheckId, query.patientRegisterId);
|
|
|
|
resultDto.RegisterCheckSummaryDetails = await _registerCheckSummaryAppService.GetRegisterCheckSummaryListAsync(query.registerCheckId);
|
|
|
|
resultDto.RegisterCheckSuggestionDetails = await _registerCheckSuggestionAppService.GetRegisterCheckSuggestionListAsync(query.registerCheckId);
|
|
|
|
resultDto.LastTimeAsbitemResultDetail = await _sumSummaryReportAppService.GetLastTimeAsbitemResultAsync(new RegisterCheckIdInputDto
|
|
{
|
|
RegisterCheckId = query.registerCheckId
|
|
});
|
|
|
|
resultDto.registerCheckPictureDetails = await _registerCheckPictureAppService.GetRegisterCheckPictureInRegisterCheckIdAsync(query.registerCheckId);
|
|
|
|
return resultDto;
|
|
}
|
|
}
|
|
}
|