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.

176 lines
7.5 KiB

1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
  1. using Microsoft.AspNetCore.Mvc;
  2. using Microsoft.Extensions.Configuration;
  3. using Shentun.Peis.Enums;
  4. using Shentun.Peis.Models;
  5. using Shentun.Peis.RegisterCheckPictures;
  6. using System;
  7. using System.Collections.Generic;
  8. using System.Linq;
  9. using System.Text;
  10. using System.Threading.Tasks;
  11. using Volo.Abp;
  12. using Volo.Abp.Application.Services;
  13. using Volo.Abp.Domain.Repositories;
  14. namespace Shentun.Peis.PacsBusiness
  15. {
  16. /// <summary>
  17. /// pacs相关接口 免登录
  18. /// </summary>
  19. [ApiExplorerSettings(GroupName = "Work")]
  20. public class PacsBusinessAppService : ApplicationService
  21. {
  22. private readonly IConfiguration _configuration;
  23. private readonly IRepository<RegisterCheck, Guid> _registerCheckRepository;
  24. private readonly IRepository<PatientRegister, Guid> _patientRegisterRepository;
  25. private readonly IRepository<RegisterCheckPicture, Guid> _registerCheckPictureRepository;
  26. private readonly IRepository<RegisterCheckPacs, Guid> _registerCheckPacsRepository;
  27. public PacsBusinessAppService(
  28. IConfiguration configuration,
  29. IRepository<RegisterCheck, Guid> registerCheckRepository,
  30. IRepository<PatientRegister, Guid> patientRegisterRepository,
  31. IRepository<RegisterCheckPicture, Guid> registerCheckPictureRepository,
  32. IRepository<RegisterCheckPacs, Guid> registerCheckPacsRepository)
  33. {
  34. _configuration = configuration;
  35. _registerCheckRepository = registerCheckRepository;
  36. _patientRegisterRepository = patientRegisterRepository;
  37. _registerCheckPictureRepository = registerCheckPictureRepository;
  38. _registerCheckPacsRepository = registerCheckPacsRepository;
  39. }
  40. /// <summary>
  41. /// 导入心电图图片 根据检查单号 免登录
  42. /// </summary>
  43. /// <param name="input"></param>
  44. /// <returns></returns>
  45. /// <exception cref="UserFriendlyException"></exception>
  46. [HttpPost("api/app/PacsBusiness/ImportRegisterCheckPictureByCheckRequestNo")]
  47. public async Task ImportRegisterCheckPictureByCheckRequestNoAsync(ImportRegisterCheckPictureByCheckRequestNoInputDto input)
  48. {
  49. Random rd = new Random();
  50. string AbsolutePath = _configuration.GetValue<string>("PacsVirtualPath:RealPath");
  51. string AbsoluteName = _configuration.GetValue<string>("PacsVirtualPath:Alias");
  52. if (string.IsNullOrWhiteSpace(input.PictureBaseStr))
  53. {
  54. throw new UserFriendlyException("图片数据不存在");
  55. }
  56. var patientRegisterCompleteFlag = (from patientRegister in await _patientRegisterRepository.GetQueryableAsync()
  57. join registerCheck in await _registerCheckRepository.GetQueryableAsync() on patientRegister.Id equals registerCheck.PatientRegisterId
  58. where registerCheck.CheckRequestNo == input.CheckRequestNo
  59. select new
  60. {
  61. registerCheckId = registerCheck.Id,
  62. CompleteFlag = patientRegister.CompleteFlag,
  63. PatientRegisterId = patientRegister.Id
  64. }).ToList();
  65. if (patientRegisterCompleteFlag.Count == 0)
  66. throw new UserFriendlyException("体检人员不存在");
  67. if (patientRegisterCompleteFlag.FirstOrDefault().CompleteFlag == PatientRegisterCompleteFlag.PreRegistration)
  68. throw new UserFriendlyException("预登记人员不能导入图片");
  69. if (patientRegisterCompleteFlag.FirstOrDefault().CompleteFlag == PatientRegisterCompleteFlag.SumCheck)
  70. throw new UserFriendlyException("已总检人员不能导入图片");
  71. string PatientRegisterId = patientRegisterCompleteFlag.FirstOrDefault().PatientRegisterId.ToString();
  72. Guid registerCheckId = patientRegisterCompleteFlag.FirstOrDefault().registerCheckId;
  73. string PictureUrl = ImageHelper.Base64StrToImageInAbsolutePath(AbsolutePath, input.FileName, input.PictureBaseStr,
  74. PatientRegisterId,
  75. registerCheckId.ToString(), AbsoluteName);
  76. if (string.IsNullOrEmpty(PictureUrl))
  77. {
  78. throw new UserFriendlyException("图片数据有误");
  79. }
  80. var ent = await _registerCheckPictureRepository.FirstOrDefaultAsync(m => m.RegisterCheckId == registerCheckId
  81. && m.PictureFilename == PictureUrl);
  82. if (ent != null)
  83. {
  84. ent.PictureFilename = PictureUrl;
  85. await _registerCheckPictureRepository.UpdateAsync(ent);
  86. }
  87. else
  88. {
  89. var maxDisplayOrder = (await _registerCheckPictureRepository.GetQueryableAsync())
  90. .Where(m => m.RegisterCheckId == registerCheckId)
  91. .OrderByDescending(o => o.DisplayOrder)
  92. .Select(s => s.DisplayOrder)
  93. .FirstOrDefault();
  94. ent = new RegisterCheckPicture
  95. {
  96. DisplayOrder = maxDisplayOrder + 1,
  97. IsPrint = 'Y',
  98. PictureFilename = PictureUrl,
  99. RegisterCheckId = registerCheckId,
  100. PictureFileType = '0',
  101. LocalPathName = ""
  102. };
  103. await _registerCheckPictureRepository.InsertAsync(ent);
  104. }
  105. }
  106. /// <summary>
  107. /// 导入pacs dicom数据
  108. /// </summary>
  109. /// <returns></returns>
  110. [HttpPost("api/app/PacsBusiness/ImportPacsDicomData")]
  111. public async Task ImportPacsDicomDataAsync(ImportPacsDicomDataInputDto input)
  112. {
  113. var realPath = _configuration["DicomVirtualPath:RealPath"];
  114. var requestPath = _configuration["DicomVirtualPath:RequestPath"];
  115. if (string.IsNullOrWhiteSpace(input.RegisterCheckNo))
  116. throw new UserFriendlyException("条码号不能为空");
  117. var registerCheckEnt = await _registerCheckRepository.FirstOrDefaultAsync(f => f.CheckRequestNo == input.RegisterCheckNo);
  118. if (registerCheckEnt == null)
  119. throw new UserFriendlyException("条码号不正确");
  120. if (input.Details.Any())
  121. {
  122. List<RegisterCheckPacs> registerCheckPacss = new List<RegisterCheckPacs>();
  123. foreach (var item in input.Details)
  124. {
  125. if (!item.FilePathName.Contains(realPath))
  126. throw new UserFriendlyException("资源路径跟体检配置不一致");
  127. var dicomPathName = item.FilePathName.Replace(realPath, requestPath);
  128. registerCheckPacss.Add(new RegisterCheckPacs
  129. {
  130. CheckDesc = "",
  131. CheckResult = "",
  132. DicomPathName = dicomPathName,
  133. DisplayOrder = input.Details.IndexOf(item) + 1,
  134. LocalPathName = item.FilePathName,
  135. RegisterCheckId = registerCheckEnt.Id
  136. });
  137. }
  138. await _registerCheckPacsRepository.InsertManyAsync(registerCheckPacss);
  139. }
  140. }
  141. }
  142. }