using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Configuration;
using Shentun.Peis.Enums;
using Shentun.Peis.Models;
using Shentun.Peis.RegisterCheckPictures;
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
{
///
/// pacs相关接口 免登录
///
[ApiExplorerSettings(GroupName = "Work")]
public class PacsBusinessAppService : ApplicationService
{
private readonly IConfiguration _configuration;
private readonly IRepository _registerCheckRepository;
private readonly IRepository _patientRegisterRepository;
private readonly IRepository _registerCheckPictureRepository;
private readonly IRepository _registerCheckPacsRepository;
public PacsBusinessAppService(
IConfiguration configuration,
IRepository registerCheckRepository,
IRepository patientRegisterRepository,
IRepository registerCheckPictureRepository,
IRepository registerCheckPacsRepository)
{
_configuration = configuration;
_registerCheckRepository = registerCheckRepository;
_patientRegisterRepository = patientRegisterRepository;
_registerCheckPictureRepository = registerCheckPictureRepository;
_registerCheckPacsRepository = registerCheckPacsRepository;
}
///
/// 导入心电图图片 根据检查单号 免登录
///
///
///
///
[HttpPost("api/app/PacsBusiness/ImportRegisterCheckPictureByCheckRequestNo")]
public async Task ImportRegisterCheckPictureByCheckRequestNoAsync(ImportRegisterCheckPictureByCheckRequestNoInputDto input)
{
Random rd = new Random();
string AbsolutePath = _configuration.GetValue("PacsVirtualPath:RealPath");
string AbsoluteName = _configuration.GetValue("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);
}
}
///
/// 导入pacs dicom数据
///
///
[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.RegisterCheckNo))
throw new UserFriendlyException("条码号不能为空");
var registerCheckEnt = await _registerCheckRepository.FirstOrDefaultAsync(f => f.CheckRequestNo == input.RegisterCheckNo);
if (registerCheckEnt == null)
throw new UserFriendlyException("条码号不正确");
if (input.Details.Any())
{
List registerCheckPacss = new List();
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);
}
}
}
}