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

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 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 NPOI.POIFS.Storage;
  4. using Shentun.Peis.Enums;
  5. using Shentun.Peis.Models;
  6. using Shentun.Peis.PatientRegisters;
  7. using Shentun.Peis.PrintReports;
  8. using Shentun.Peis.RegisterCheckItems;
  9. using Shentun.Peis.RegisterCheckPictures;
  10. using Shentun.Peis.RegisterChecks;
  11. using Shentun.Peis.RegisterCheckSuggestions;
  12. using Shentun.Peis.RegisterCheckSummarys;
  13. using Shentun.Peis.SumSummaryReports;
  14. using System;
  15. using System.Collections.Generic;
  16. using System.Linq;
  17. using System.Text;
  18. using System.Threading.Tasks;
  19. using Volo.Abp;
  20. using Volo.Abp.Application.Services;
  21. using Volo.Abp.Domain.Repositories;
  22. namespace Shentun.Peis.PacsBusiness
  23. {
  24. /// <summary>
  25. /// pacs相关接口 免登录
  26. /// </summary>
  27. [ApiExplorerSettings(GroupName = "Work")]
  28. public class PacsBusinessAppService : ApplicationService
  29. {
  30. private readonly IConfiguration _configuration;
  31. private readonly IRepository<RegisterCheck, Guid> _registerCheckRepository;
  32. private readonly IRepository<PatientRegister, Guid> _patientRegisterRepository;
  33. private readonly IRepository<RegisterCheckPicture, Guid> _registerCheckPictureRepository;
  34. private readonly IRepository<RegisterCheckPacs, Guid> _registerCheckPacsRepository;
  35. private readonly PatientRegisterAppService _patientRegisterAppService;
  36. private readonly RegisterCheckAppService _registerCheckAppService;
  37. private readonly RegisterCheckItemAppService _registerCheckItemAppService;
  38. private readonly RegisterCheckSummaryAppService _registerCheckSummaryAppService;
  39. private readonly RegisterCheckSuggestionAppService _registerCheckSuggestionAppService;
  40. private readonly SumSummaryReportAppService _sumSummaryReportAppService;
  41. private readonly RegisterCheckPictureAppService _registerCheckPictureAppService;
  42. public PacsBusinessAppService(
  43. IConfiguration configuration,
  44. IRepository<RegisterCheck, Guid> registerCheckRepository,
  45. IRepository<PatientRegister, Guid> patientRegisterRepository,
  46. IRepository<RegisterCheckPicture, Guid> registerCheckPictureRepository,
  47. IRepository<RegisterCheckPacs, Guid> registerCheckPacsRepository,
  48. PatientRegisterAppService patientRegisterAppService,
  49. RegisterCheckAppService registerCheckAppService,
  50. RegisterCheckItemAppService registerCheckItemAppService,
  51. RegisterCheckSummaryAppService registerCheckSummaryAppService,
  52. RegisterCheckSuggestionAppService registerCheckSuggestionAppService,
  53. SumSummaryReportAppService sumSummaryReportAppService,
  54. RegisterCheckPictureAppService registerCheckPictureAppService)
  55. {
  56. _configuration = configuration;
  57. _registerCheckRepository = registerCheckRepository;
  58. _patientRegisterRepository = patientRegisterRepository;
  59. _registerCheckPictureRepository = registerCheckPictureRepository;
  60. _registerCheckPacsRepository = registerCheckPacsRepository;
  61. _patientRegisterAppService = patientRegisterAppService;
  62. _registerCheckAppService = registerCheckAppService;
  63. _registerCheckItemAppService = registerCheckItemAppService;
  64. _registerCheckSummaryAppService = registerCheckSummaryAppService;
  65. _registerCheckSuggestionAppService = registerCheckSuggestionAppService;
  66. _sumSummaryReportAppService = sumSummaryReportAppService;
  67. _registerCheckPictureAppService = registerCheckPictureAppService;
  68. }
  69. /// <summary>
  70. /// 导入心电图图片 根据检查单号 免登录
  71. /// </summary>
  72. /// <param name="input"></param>
  73. /// <returns></returns>
  74. /// <exception cref="UserFriendlyException"></exception>
  75. [HttpPost("api/app/PacsBusiness/ImportRegisterCheckPictureByCheckRequestNo")]
  76. public async Task ImportRegisterCheckPictureByCheckRequestNoAsync(ImportRegisterCheckPictureByCheckRequestNoInputDto input)
  77. {
  78. Random rd = new Random();
  79. string AbsolutePath = _configuration.GetValue<string>("PacsVirtualPath:RealPath");
  80. string AbsoluteName = _configuration.GetValue<string>("PacsVirtualPath:Alias");
  81. if (string.IsNullOrWhiteSpace(input.PictureBaseStr))
  82. {
  83. throw new UserFriendlyException("图片数据不存在");
  84. }
  85. var patientRegisterCompleteFlag = (from patientRegister in await _patientRegisterRepository.GetQueryableAsync()
  86. join registerCheck in await _registerCheckRepository.GetQueryableAsync() on patientRegister.Id equals registerCheck.PatientRegisterId
  87. where registerCheck.CheckRequestNo == input.CheckRequestNo
  88. select new
  89. {
  90. registerCheckId = registerCheck.Id,
  91. CompleteFlag = patientRegister.CompleteFlag,
  92. PatientRegisterId = patientRegister.Id
  93. }).ToList();
  94. if (patientRegisterCompleteFlag.Count == 0)
  95. throw new UserFriendlyException("体检人员不存在");
  96. if (patientRegisterCompleteFlag.FirstOrDefault().CompleteFlag == PatientRegisterCompleteFlag.PreRegistration)
  97. throw new UserFriendlyException("预登记人员不能导入图片");
  98. if (patientRegisterCompleteFlag.FirstOrDefault().CompleteFlag == PatientRegisterCompleteFlag.SumCheck)
  99. throw new UserFriendlyException("已总检人员不能导入图片");
  100. string PatientRegisterId = patientRegisterCompleteFlag.FirstOrDefault().PatientRegisterId.ToString();
  101. Guid registerCheckId = patientRegisterCompleteFlag.FirstOrDefault().registerCheckId;
  102. string PictureUrl = ImageHelper.Base64StrToImageInAbsolutePath(AbsolutePath, input.FileName, input.PictureBaseStr,
  103. PatientRegisterId,
  104. registerCheckId.ToString(), AbsoluteName);
  105. if (string.IsNullOrEmpty(PictureUrl))
  106. {
  107. throw new UserFriendlyException("图片数据有误");
  108. }
  109. var ent = await _registerCheckPictureRepository.FirstOrDefaultAsync(m => m.RegisterCheckId == registerCheckId
  110. && m.PictureFilename == PictureUrl);
  111. if (ent != null)
  112. {
  113. ent.PictureFilename = PictureUrl;
  114. await _registerCheckPictureRepository.UpdateAsync(ent);
  115. }
  116. else
  117. {
  118. var maxDisplayOrder = (await _registerCheckPictureRepository.GetQueryableAsync())
  119. .Where(m => m.RegisterCheckId == registerCheckId)
  120. .OrderByDescending(o => o.DisplayOrder)
  121. .Select(s => s.DisplayOrder)
  122. .FirstOrDefault();
  123. ent = new RegisterCheckPicture
  124. {
  125. DisplayOrder = maxDisplayOrder + 1,
  126. IsPrint = 'Y',
  127. PictureFilename = PictureUrl,
  128. RegisterCheckId = registerCheckId,
  129. PictureFileType = '0',
  130. LocalPathName = ""
  131. };
  132. await _registerCheckPictureRepository.InsertAsync(ent);
  133. }
  134. }
  135. /// <summary>
  136. /// 导入pacs dicom数据
  137. /// </summary>
  138. /// <returns></returns>
  139. [HttpPost("api/app/PacsBusiness/ImportPacsDicomData")]
  140. public async Task ImportPacsDicomDataAsync(ImportPacsDicomDataInputDto input)
  141. {
  142. var realPath = _configuration["DicomVirtualPath:RealPath"];
  143. var requestPath = _configuration["DicomVirtualPath:RequestPath"];
  144. if (string.IsNullOrWhiteSpace(input.CheckRequestNo))
  145. throw new UserFriendlyException("条码号不能为空");
  146. var registerCheckEnt = await _registerCheckRepository.FirstOrDefaultAsync(f => f.CheckRequestNo == input.CheckRequestNo);
  147. if (registerCheckEnt == null)
  148. throw new UserFriendlyException("条码号不正确");
  149. if (input.Details.Any())
  150. {
  151. List<RegisterCheckPacs> registerCheckPacss = new List<RegisterCheckPacs>();
  152. foreach (var item in input.Details)
  153. {
  154. if (!item.FilePathName.Contains(realPath))
  155. throw new UserFriendlyException("资源路径跟体检配置不一致");
  156. var dicomPathName = item.FilePathName.Replace(realPath, requestPath);
  157. registerCheckPacss.Add(new RegisterCheckPacs
  158. {
  159. CheckDesc = "",
  160. CheckResult = "",
  161. DicomPathName = dicomPathName,
  162. DisplayOrder = input.Details.IndexOf(item) + 1,
  163. LocalPathName = item.FilePathName,
  164. RegisterCheckId = registerCheckEnt.Id
  165. });
  166. }
  167. await _registerCheckPacsRepository.InsertManyAsync(registerCheckPacss);
  168. }
  169. }
  170. /// <summary>
  171. /// 根据检查条码获取dicom文件
  172. /// </summary>
  173. /// <returns></returns>
  174. [HttpPost("api/app/PacsBusiness/GetPacsDicomDataByCheckRequestNo")]
  175. public async Task<List<RegisterCheckPacsDto>> GetPacsDicomDataByCheckRequestNoAsync(CheckRequestNoInputDto input)
  176. {
  177. if (string.IsNullOrWhiteSpace(input.CheckRequestNo))
  178. throw new UserFriendlyException("检查条码不能为空");
  179. var registerCheckEnt = await _registerCheckRepository.FirstOrDefaultAsync(f => f.CheckRequestNo == input.CheckRequestNo);
  180. if (registerCheckEnt == null)
  181. throw new UserFriendlyException("检查条码不存在");
  182. var registerCheckPacsList = await _registerCheckPacsRepository.GetListAsync(m => m.RegisterCheckId == registerCheckEnt.Id);
  183. var entListDto = registerCheckPacsList.Select(s => new RegisterCheckPacsDto
  184. {
  185. DicomPathName = s.DicomPathName,
  186. DisplayOrder = s.DisplayOrder,
  187. LocalPathName = s.LocalPathName
  188. }).OrderBy(o => o.DisplayOrder).ToList();
  189. return entListDto;
  190. }
  191. /// <summary>
  192. /// 获取体检人员信息跟项目结果等信息
  193. /// </summary>
  194. /// <param name="input"></param>
  195. /// <returns></returns>
  196. [HttpPost("api/app/PacsBusiness/GetPatientRegisterWithCheckResultByCheckRequestNo")]
  197. public async Task<GetPatientRegisterWithCheckResultByCheckRequestNo> GetPatientRegisterWithCheckResultByCheckRequestNoAsync(CheckRequestNoInputDto input)
  198. {
  199. var resultDto = new GetPatientRegisterWithCheckResultByCheckRequestNo();
  200. var query = (from patientRegister in await _patientRegisterRepository.GetQueryableAsync()
  201. join registerCheck in await _registerCheckRepository.GetQueryableAsync() on patientRegister.Id equals registerCheck.PatientRegisterId
  202. where registerCheck.CheckRequestNo == input.CheckRequestNo
  203. select new
  204. {
  205. patientRegisterNo = patientRegister.PatientRegisterNo,
  206. patientRegisterId = patientRegister.Id,
  207. registerCheckId = registerCheck.Id
  208. }).FirstOrDefault();
  209. if (query == null)
  210. {
  211. throw new UserFriendlyException("条码不存在");
  212. }
  213. resultDto.PatientRegisterDetail = await _patientRegisterAppService.GetAlreadyRegisterPatientRegisterByNoAsync(new PatientRegisterNoInputDto
  214. {
  215. PatientRegisterNo = query.patientRegisterNo
  216. });
  217. resultDto.RegisterCheckDetail = await _registerCheckAppService.GetRegisterCheckAsync(query.registerCheckId);
  218. resultDto.RegisterCheckItemDetails = await _registerCheckItemAppService.GetListInRegisterCheckIdAsync(query.registerCheckId, query.patientRegisterId);
  219. resultDto.RegisterCheckSummaryDetails = await _registerCheckSummaryAppService.GetRegisterCheckSummaryListAsync(query.registerCheckId);
  220. resultDto.RegisterCheckSuggestionDetails = await _registerCheckSuggestionAppService.GetRegisterCheckSuggestionListAsync(query.registerCheckId);
  221. resultDto.LastTimeAsbitemResultDetail = await _sumSummaryReportAppService.GetLastTimeAsbitemResultAsync(new RegisterCheckIdInputDto
  222. {
  223. RegisterCheckId = query.registerCheckId
  224. });
  225. resultDto.registerCheckPictureDetails = await _registerCheckPictureAppService.GetRegisterCheckPictureInRegisterCheckIdAsync(query.registerCheckId);
  226. return resultDto;
  227. }
  228. }
  229. }