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.

230 lines
11 KiB

2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
  1. using Microsoft.AspNetCore.Authorization;
  2. using Microsoft.AspNetCore.Mvc;
  3. using Microsoft.VisualBasic;
  4. using NPOI.SS.Formula.Functions;
  5. using Shentun.Peis.Models;
  6. using Shentun.Peis.PatientRegisters;
  7. using Shentun.Peis.Permissions;
  8. using System;
  9. using System.Collections.Generic;
  10. using System.Linq;
  11. using System.Text;
  12. using System.Threading.Tasks;
  13. using Volo.Abp;
  14. using Volo.Abp.Application.Services;
  15. using Volo.Abp.Domain.Repositories;
  16. namespace Shentun.Peis.ThirdPartyPublicInterfaces
  17. {
  18. /// <summary>
  19. /// 第三方公开接口
  20. /// </summary>
  21. public class ThirdPartyPublicInterfaceAppService : ApplicationService
  22. {
  23. private readonly IRepository<PatientRegister, Guid> _patientRegisterRepository;
  24. private readonly IRepository<RegisterCheck, Guid> _registerCheckRepository;
  25. private readonly IRepository<RegisterCheckAsbitem, Guid> _registerCheckAsbitemRepository;
  26. private readonly IRepository<RegisterCheckItem> _registerCheckItemRepository;
  27. private readonly IRepository<Item, Guid> _itemRepository;
  28. private readonly IRepository<ItemType, Guid> _itemTypeRepository;
  29. private readonly IRepository<Asbitem, Guid> _asbitemRepository;
  30. private readonly IRepository<Patient, Guid> _patientRepository;
  31. private readonly CacheService _cacheService;
  32. public ThirdPartyPublicInterfaceAppService(
  33. IRepository<PatientRegister, Guid> patientRegisterRepository,
  34. CacheService cacheService,
  35. IRepository<RegisterCheck, Guid> registerCheckRepository,
  36. IRepository<RegisterCheckAsbitem, Guid> registerCheckAsbitemRepository,
  37. IRepository<RegisterCheckItem> registerCheckItemRepository,
  38. IRepository<Item, Guid> itemRepository,
  39. IRepository<ItemType, Guid> itemTypeRepository,
  40. IRepository<Asbitem, Guid> asbitemRepository,
  41. IRepository<Patient, Guid> patientRepository)
  42. {
  43. _patientRegisterRepository = patientRegisterRepository;
  44. _cacheService = cacheService;
  45. _registerCheckRepository = registerCheckRepository;
  46. _registerCheckAsbitemRepository = registerCheckAsbitemRepository;
  47. _registerCheckItemRepository = registerCheckItemRepository;
  48. _itemRepository = itemRepository;
  49. _itemTypeRepository = itemTypeRepository;
  50. _asbitemRepository = asbitemRepository;
  51. _patientRepository = patientRepository;
  52. }
  53. /// <summary>
  54. /// 查询体检人员基本信息
  55. /// </summary>
  56. /// <param name="input"></param>
  57. /// <returns></returns>
  58. [Authorize(PeisPermissions.Third.Default)]
  59. [HttpPost("api/Third/ThirdPartyPublicInterface/GetBasicInformationOfMedicalExaminationPersonnel")]
  60. public async Task<BasicInformationOfMedicalExaminationPersonnelDto> GetBasicInformationOfMedicalExaminationPersonnelAsync(PublicPatientRegisterNoInputDto input)
  61. {
  62. if (input == null)
  63. {
  64. throw new UserFriendlyException($"请求参数错误");
  65. }
  66. var result = new BasicInformationOfMedicalExaminationPersonnelDto();
  67. var patientRegisterEnt = await _patientRegisterRepository.FirstOrDefaultAsync(m => m.PatientRegisterNo == input.PatientRegisterNo);
  68. if (patientRegisterEnt != null)
  69. {
  70. result = new BasicInformationOfMedicalExaminationPersonnelDto
  71. {
  72. BirthDate = patientRegisterEnt.BirthDate != null ? patientRegisterEnt.BirthDate.Value.ToString("yyyy-MM-dd") : "",
  73. PatientRegisterNo = patientRegisterEnt.PatientRegisterNo,
  74. CompleteFlag = patientRegisterEnt.CompleteFlag,
  75. IsMedicalStart = patientRegisterEnt.IsMedicalStart,
  76. MedicalStartDate = patientRegisterEnt.MedicalStartDate != null ? patientRegisterEnt.MedicalStartDate.Value.ToString("yyyy-MM-dd HH:mm:ss") : "",
  77. PatientName = patientRegisterEnt.PatientName,
  78. SexName = _cacheService.GetSexNameAsync(patientRegisterEnt.SexId).Result,
  79. SummaryDoctorName = _cacheService.GetSurnameAsync(patientRegisterEnt.SummaryDoctorId).Result,
  80. SummaryDate = patientRegisterEnt.SummaryDate != null ? patientRegisterEnt.SummaryDate.Value.ToString("yyyy-MM-dd HH:mm:ss") : "",
  81. };
  82. }
  83. else
  84. {
  85. throw new UserFriendlyException($"条码号不正确");
  86. }
  87. return result;
  88. }
  89. /// <summary>
  90. /// 查询体检明细项目信息
  91. /// </summary>
  92. /// <param name="input"></param>
  93. /// <returns></returns>
  94. [Authorize(PeisPermissions.Third.Default)]
  95. [HttpPost("api/Third/ThirdPartyPublicInterface/GetPhysicalExaminationDetailsItemInformation")]
  96. public async Task<List<PhysicalExaminationDetailsItemInformationDto>> GetPhysicalExaminationDetailsItemInformationAsync(PublicPatientRegisterNoInputDto input)
  97. {
  98. if (input == null)
  99. {
  100. throw new UserFriendlyException($"请求参数错误");
  101. }
  102. var query = from patientRegister in await _patientRegisterRepository.GetQueryableAsync()
  103. join registerCheck in await _registerCheckRepository.GetQueryableAsync() on patientRegister.Id equals registerCheck.PatientRegisterId
  104. join registerCheckItem in await _registerCheckItemRepository.GetQueryableAsync() on registerCheck.Id equals registerCheckItem.RegisterCheckId
  105. join item in await _itemRepository.GetQueryableAsync() on registerCheckItem.ItemId equals item.Id
  106. join itemType in await _itemTypeRepository.GetQueryableAsync() on item.ItemTypeId equals itemType.Id into itemTypeTemp
  107. from itemTypeHaveEmpty in itemTypeTemp.DefaultIfEmpty()
  108. where patientRegister.PatientRegisterNo == input.PatientRegisterNo
  109. select new
  110. {
  111. PatientRegisterNo = patientRegister.PatientRegisterNo,
  112. registerCheckItem,
  113. ItemName = item.DisplayName,
  114. ItemTypeName = itemTypeHaveEmpty != null ? itemTypeHaveEmpty.DisplayName : ""
  115. };
  116. if (query.Count() == 0)
  117. {
  118. throw new UserFriendlyException($"条码号不正确");
  119. }
  120. var entList = query.Select(s => new PhysicalExaminationDetailsItemInformationDto
  121. {
  122. ItemName = s.ItemName,
  123. ItemResult = s.registerCheckItem.Result,
  124. ItemTypeName = s.ItemTypeName,
  125. PatientRegisterNo = s.PatientRegisterNo,
  126. ReferenceRangeValue = s.registerCheckItem.ReferenceRangeValue,
  127. Unit = s.registerCheckItem.Unit
  128. }).ToList();
  129. return entList;
  130. }
  131. /// <summary>
  132. /// 查询pacs条码信息
  133. /// </summary>
  134. /// <param name="input"></param>
  135. /// <returns></returns>
  136. [HttpPost("api/Third/ThirdPartyPublicInterface/getPatientItems")]
  137. public async Task<PatientPacsInfoDto> GetPatientPacsInfoAsync(PatientPacsInfoInputDto input)
  138. {
  139. if (input == null)
  140. {
  141. throw new UserFriendlyException($"请求参数错误");
  142. }
  143. if (string.IsNullOrEmpty(input.tjbh))
  144. throw new UserFriendlyException($"体检编号不能为空");
  145. var query = (from patientRegister in await _patientRegisterRepository.GetQueryableAsync()
  146. join patient in await _patientRepository.GetQueryableAsync() on patientRegister.PatientId equals patient.Id into patientTemp
  147. from patientHaveEmpty in patientTemp.DefaultIfEmpty()
  148. join registerCheck in await _registerCheckRepository.GetQueryableAsync() on patientRegister.Id equals registerCheck.PatientRegisterId
  149. join registerCheckAsbitem in await _registerCheckAsbitemRepository.GetQueryableAsync() on registerCheck.Id equals registerCheckAsbitem.RegisterCheckId
  150. join asbitem in await _asbitemRepository.GetQueryableAsync() on registerCheckAsbitem.AsbitemId equals asbitem.Id
  151. join itemType in await _itemTypeRepository.GetQueryableAsync() on asbitem.ItemTypeId equals itemType.Id into itemTypeTemp
  152. from itemTypeHaveEmpty in itemTypeTemp.DefaultIfEmpty()
  153. where registerCheck.CheckRequestNo == input.tjbh
  154. orderby asbitem.DisplayOrder ascending
  155. select new
  156. {
  157. patientRegister,
  158. IdNo = patientHaveEmpty != null ? patientHaveEmpty.IdNo : "",
  159. MobileTelephone = patientHaveEmpty != null ? patientHaveEmpty.MobileTelephone : "",
  160. CheckRequestNo = registerCheck.CheckRequestNo,
  161. asbitem,
  162. ItemTypeName = itemTypeHaveEmpty != null ? itemTypeHaveEmpty.DisplayName : "",
  163. ItemTypeId = itemTypeHaveEmpty != null ? itemTypeHaveEmpty.Id.ToString() : ""
  164. }).ToList();
  165. if (!string.IsNullOrEmpty(input.xmlx))
  166. {
  167. //检查类型检索
  168. }
  169. if (query.Count == 0)
  170. throw new UserFriendlyException($"体检编号不存在");
  171. var patientInfo = new PatientPacsInfo_PatientInfoDto
  172. {
  173. addr = "",
  174. tjbh = query.FirstOrDefault().CheckRequestNo,
  175. csrq = query.FirstOrDefault().patientRegister.BirthDate != null ? query.FirstOrDefault().patientRegister.BirthDate.Value.ToString("yyyy-MM-dd HH:mm:ss") : "",
  176. djr = _cacheService.GetSurnameAsync(query.FirstOrDefault().patientRegister.CreatorId).Result,
  177. djrq = query.FirstOrDefault().patientRegister.CreationTime.ToString("yyyy-MM-dd HH:mm:ss"),
  178. lxdh = query.FirstOrDefault().MobileTelephone,
  179. nl = query.FirstOrDefault().patientRegister.Age.ToString(),
  180. sfzh = query.FirstOrDefault().IdNo,
  181. tjrq = query.FirstOrDefault().patientRegister.MedicalStartDate != null ? query.FirstOrDefault().patientRegister.MedicalStartDate.Value.ToString("yyyy-MM-dd HH:mm:ss") : "",
  182. xb = query.FirstOrDefault().patientRegister.SexId == 'M' ? "1" : (query.FirstOrDefault().patientRegister.SexId == 'F' ? "2" : "9"),
  183. xm = query.FirstOrDefault().patientRegister.PatientName
  184. };
  185. var items = query.Select(s => new PatientPacsInfo_ItemsDto
  186. {
  187. ksbm = s.ItemTypeId,
  188. ksmc = s.ItemTypeName,
  189. sqdh = s.CheckRequestNo + "-" + (query.IndexOf(s) + 1),
  190. xmbh = s.asbitem.Id.ToString(),
  191. xmlx = "1",
  192. xmmc = s.asbitem.DisplayName,
  193. }).ToList();
  194. return new PatientPacsInfoDto
  195. {
  196. PatientInfo = patientInfo,
  197. Items = items
  198. };
  199. }
  200. }
  201. }