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.

328 lines
16 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
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
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
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.EntityFrameworkCore;
  4. using Shentun.Peis.Models;
  5. using Shentun.Peis.PatientRegisters;
  6. using Shentun.Peis.SumSuggestionContents;
  7. using Shentun.Peis.SumSuggestionHeaders;
  8. using Shentun.Peis.SumSummaryContents;
  9. using Shentun.Peis.SumSummaryHeaders;
  10. using Shentun.Peis.SumSummaryReports;
  11. using Shentun.Peis.SysParmValues;
  12. using System;
  13. using System.Collections.Generic;
  14. using System.Linq;
  15. using System.Text;
  16. using System.Threading.Tasks;
  17. using TencentCloud.Wedata.V20210820.Models;
  18. using Volo.Abp;
  19. using Volo.Abp.Application.Services;
  20. using Volo.Abp.Domain.Repositories;
  21. using Volo.Abp.Identity;
  22. namespace Shentun.Peis.PrintReports
  23. {
  24. /// <summary>
  25. /// 打印报告服务
  26. /// </summary>
  27. [ApiExplorerSettings(GroupName = "Work")]
  28. [Authorize]
  29. public class PrintReportAppService : ApplicationService
  30. {
  31. private readonly IRepository<CustomerOrg, Guid> _customerOrgRepository;
  32. private readonly IRepository<PatientRegister, Guid> _patientRegisterRepository;
  33. private readonly IRepository<Sex> _sexRegisterRepository;
  34. private readonly IRepository<ResultStatus> _resultStatusRepository;
  35. private readonly IRepository<SumSummaryHeader, Guid> _sumSummaryHeaderRepository;
  36. private readonly IRepository<IdentityUser, Guid> _identityUserRepository;
  37. private readonly IRepository<SumSuggestionHeader, Guid> _sumSuggestionHeaderRepository;
  38. private readonly IRepository<RegisterCheck, Guid> _registerCheckRepository;
  39. private readonly IOrganizationUnitRepository _organizationUnitRepository;
  40. private readonly IPatientRegisterGuideReportRepository _patientRegisterGuideReportRepository;
  41. private readonly ILisRequestReportRepository _lisRequestReportRepository;
  42. private readonly ICheckRequestNoReportRepository _checkRequestNoReportRepository;
  43. private readonly IChargeReportRepository _chargeReportRepository;
  44. private readonly SysParmValueManager _sysParmValueManager;
  45. public PrintReportAppService(
  46. IRepository<CustomerOrg, Guid> customerOrgRepository,
  47. IRepository<PatientRegister, Guid> patientRegisterRepository,
  48. IRepository<Sex> sexRegisterRepository,
  49. IRepository<ResultStatus> resultStatusRepository,
  50. IRepository<SumSummaryHeader, Guid> sumSummaryHeaderRepository,
  51. IRepository<IdentityUser, Guid> identityUserRepository,
  52. IRepository<SumSuggestionHeader, Guid> sumSuggestionHeaderRepository,
  53. IRepository<RegisterCheck, Guid> registerCheckRepository,
  54. IOrganizationUnitRepository organizationUnitRepository,
  55. IPatientRegisterGuideReportRepository patientRegisterGuideReportRepository,
  56. ILisRequestReportRepository lisRequestReportRepository,
  57. ICheckRequestNoReportRepository checkRequestNoReportRepository,
  58. IChargeReportRepository chargeReportRepository,
  59. SysParmValueManager sysParmValueManager
  60. )
  61. {
  62. this._customerOrgRepository = customerOrgRepository;
  63. this._patientRegisterRepository = patientRegisterRepository;
  64. this._sexRegisterRepository = sexRegisterRepository;
  65. this._resultStatusRepository = resultStatusRepository;
  66. this._sumSummaryHeaderRepository = sumSummaryHeaderRepository;
  67. this._identityUserRepository = identityUserRepository;
  68. this._sumSuggestionHeaderRepository = sumSuggestionHeaderRepository;
  69. this._registerCheckRepository = registerCheckRepository;
  70. this._organizationUnitRepository = organizationUnitRepository;
  71. this._patientRegisterGuideReportRepository = patientRegisterGuideReportRepository;
  72. this._lisRequestReportRepository = lisRequestReportRepository;
  73. this._checkRequestNoReportRepository = checkRequestNoReportRepository;
  74. this._chargeReportRepository = chargeReportRepository;
  75. this._sysParmValueManager = sysParmValueManager;
  76. }
  77. /// <summary>
  78. /// 获取体检人员指引单报告数据
  79. /// </summary>
  80. /// <param name="PatientRegisterId"></param>
  81. /// <returns></returns>
  82. [HttpPost("api/app/printreport/getpatientregisterguidereport")]
  83. public async Task<PatientRegisterGuideReportDto> GetPatientRegisterGuideReportAsync(Guid PatientRegisterId)
  84. {
  85. return await _patientRegisterGuideReportRepository.GetPatientRegisterGuideReportAsync(PatientRegisterId);
  86. }
  87. /// <summary>
  88. /// 批量获取体检人员指引单报告数据
  89. /// </summary>
  90. /// <param name="PatientRegisterIds"></param>
  91. /// <returns></returns>
  92. [HttpPost("api/app/printreport/getpatientregisterguidereportmany")]
  93. public async Task<List<PatientRegisterGuideReportDto>> GetPatientRegisterGuideReportManyAsync(List<Guid> PatientRegisterIds)
  94. {
  95. return await _patientRegisterGuideReportRepository.GetPatientRegisterGuideReportManyAsync(PatientRegisterIds);
  96. }
  97. /// <summary>
  98. /// 打印检验申请单
  99. /// </summary>
  100. /// <param name="PatientRegisterId"></param>
  101. /// <returns></returns>
  102. [HttpPost("api/app/printreport/getlisrequestreport")]
  103. public async Task<List<LisRequestReportDto>> GetLisRequestReportAsync(Guid PatientRegisterId)
  104. {
  105. return await _lisRequestReportRepository.GetLisRequestReportAsync(PatientRegisterId);
  106. }
  107. /// <summary>
  108. /// 打印体检报告
  109. /// </summary>
  110. /// <param name="PatientRegisterId"></param>
  111. /// <returns></returns>
  112. [HttpPost("api/app/printreport/getpeisreport")]
  113. public async Task<PeisReportDto> GetPeisReportAsync(Guid PatientRegisterId)
  114. {
  115. PeisReportDto msg = new PeisReportDto();
  116. var userlist = await _identityUserRepository.GetListAsync();
  117. var customerOrgList = await _customerOrgRepository.GetListAsync();
  118. var organizationUnitList = await _organizationUnitRepository.GetListAsync();
  119. var sexList = await _sexRegisterRepository.GetListAsync();
  120. var patientRegisterEnt = (await _patientRegisterRepository.GetDbSetAsync())
  121. .Include(x => x.Patient)
  122. .Where(m => m.Id == PatientRegisterId).FirstOrDefault();
  123. if (patientRegisterEnt != null)
  124. {
  125. #region 系统参数配置
  126. var MedicalCenterAddress = await _sysParmValueManager.GetSysParmValueInMedicalCenterId(patientRegisterEnt.MedicalCenterId, "medical_center_address");
  127. var MedicalCenterFax = await _sysParmValueManager.GetSysParmValueInMedicalCenterId(patientRegisterEnt.MedicalCenterId, "medical_center_fax");
  128. var MedicalCenterTelphone = await _sysParmValueManager.GetSysParmValueInMedicalCenterId(patientRegisterEnt.MedicalCenterId, "medical_center_telphone");
  129. #endregion
  130. msg = new PeisReportDto
  131. {
  132. Age = patientRegisterEnt.Age,
  133. CustomerOrgName = EntityHelper.GetCustomerOrgParentNameNoSql(customerOrgList, patientRegisterEnt.CustomerOrgId),
  134. DepartmentName = EntityHelper.GetCustomerOrgNameNoSql(customerOrgList, patientRegisterEnt.CustomerOrgId),
  135. MedicalCenterTelphone = MedicalCenterTelphone,
  136. detailedResultsListDtos = new List<DetailedResultsListDto>(),
  137. MedicalCenterAddress = MedicalCenterAddress,
  138. MedicalStartDate = patientRegisterEnt.MedicalStartDate.ToString(),
  139. OrganizationUnitId = patientRegisterEnt.MedicalCenterId,
  140. OrganizationUnitName = organizationUnitList.Where(m => m.Id == patientRegisterEnt.MedicalCenterId).Select(s => s.DisplayName).FirstOrDefault(),
  141. PatientName = patientRegisterEnt.PatientName,
  142. PatientNo = patientRegisterEnt.Patient.PatientNo,
  143. PatientRegisterNo = patientRegisterEnt.PatientRegisterNo,
  144. resultStatusDtos = new List<ResultStatuses.ResultStatusDto>(),
  145. sumSuggestionHeaderOrContentDtos = new List<SumSuggestionHeaderOrContentDto>(),
  146. SexName = sexList.Where(m => m.Id == patientRegisterEnt.SexId).Select(s => s.DisplayName).FirstOrDefault(),
  147. SummaryDate = patientRegisterEnt.SummaryDate.ToString(),
  148. sumSummaryHeaderOrContentDtos = new List<SumSummaryHeaderOrContentDto>()
  149. };
  150. #region 结果状态
  151. var resultStatusList = (await _resultStatusRepository.GetListAsync());
  152. if (resultStatusList.Any())
  153. {
  154. msg.resultStatusDtos = resultStatusList.Select(s => new ResultStatuses.ResultStatusDto
  155. {
  156. DataInputBackgroundColor = s.DataInputBackgroundColor,
  157. DataInputFontColor = s.DataInputFontColor,
  158. DataInputPrompt = s.DataInputPrompt,
  159. DisplayName = s.DisplayName,
  160. DisplayOrder = s.DisplayOrder,
  161. Id = s.Id,
  162. ReportBackgroundColor = s.ReportBackgroundColor,
  163. ReportFontColor = s.ReportFontColor,
  164. ReportPrompt = s.ReportPrompt
  165. }).OrderBy(o => o.DisplayOrder).ToList();
  166. }
  167. #endregion
  168. #region 小结
  169. var sumSummarylist = (await _sumSummaryHeaderRepository.GetDbSetAsync())
  170. .Include(x => x.SumSummaryContents)
  171. .Where(m => m.PatientRegisterId == PatientRegisterId).OrderBy(o => o.DisplayOrder).ToList();
  172. if (sumSummarylist.Any())
  173. {
  174. msg.sumSummaryHeaderOrContentDtos = sumSummarylist.Select(s => new SumSummaryHeaderOrContentDto
  175. {
  176. SummaryTitle = s.SummaryTitle,
  177. SummaryFlag = s.SummaryFlag,
  178. PatientRegisterId = s.PatientRegisterId,
  179. DisplayOrder = s.DisplayOrder,
  180. Id = s.Id,
  181. Details = s.SumSummaryContents.OrderBy(o => o.DisplayOrder).Select(sa => new SumSummaryContentDto
  182. {
  183. DisplayOrder = sa.DisplayOrder,
  184. SummaryContent = sa.SummaryContent,
  185. SumSummaryHeaderId = sa.SumSummaryHeaderId,
  186. }).OrderBy(o => o.DisplayOrder).ToList()
  187. }).OrderBy(o => o.DisplayOrder).ToList();
  188. }
  189. #endregion
  190. #region 建议
  191. var sumSuggestionlist = (await _sumSuggestionHeaderRepository.GetDbSetAsync())
  192. .Include(x => x.SumSuggestionContents)
  193. .Where(m => m.PatientRegisterId == PatientRegisterId).OrderBy(o => o.DisplayOrder).ToList();
  194. if (sumSuggestionlist.Any())
  195. {
  196. msg.sumSuggestionHeaderOrContentDtos = sumSuggestionlist.Select(s => new SumSuggestionHeaderOrContentDto
  197. {
  198. SuggestionTitle = s.SuggestionTitle,
  199. SuggestionFlag = s.SuggestionFlag,
  200. PatientRegisterId = s.PatientRegisterId,
  201. DisplayOrder = s.DisplayOrder,
  202. Id = s.Id,
  203. Details = s.SumSuggestionContents.OrderBy(o => o.DisplayOrder).Select(sa => new SumSuggestionContentDto
  204. {
  205. DisplayOrder = sa.DisplayOrder,
  206. SuggestionContent = sa.SuggestionContent,
  207. SumSuggestionHeaderId = sa.SumSuggestionHeaderId
  208. }).OrderBy(o => o.DisplayOrder).ToList()
  209. }).OrderBy(o => o.DisplayOrder).ToList();
  210. }
  211. #endregion
  212. #region 明细结果
  213. var detailedResultsList = new List<DetailedResultsListDto>();
  214. var registerChecklist = (await _registerCheckRepository.GetDbSetAsync())
  215. .Include(x => x.RegisterCheckAsbitems)
  216. .ThenInclude(x => x.Asbitem)
  217. .ThenInclude(x => x.ItemType)
  218. .Include(x => x.RegisterCheckSummaries)
  219. .Include(x => x.RegisterCheckItems)
  220. .ThenInclude(x => x.Item)
  221. .Where(m => m.RegisterCheckAsbitems.Select(s => s.PatientRegisterId).Contains(PatientRegisterId))
  222. .ToList();
  223. var asbitemList = registerChecklist.Select(s => new DetailedResultsList_Asbitem
  224. {
  225. AsbitemName = string.Join(",", s.RegisterCheckAsbitems.Select(rs => rs.Asbitem.DisplayName).ToList()),
  226. ItemTypeName = string.Join(",", s.RegisterCheckAsbitems.Select(rs => rs.Asbitem.ItemType.DisplayName).ToList()),
  227. CheckDate = s.CheckDate.ToString(),
  228. CheckDoctorName = EntityHelper.GetCheckDoctorName(s.CheckDoctorId, userlist),
  229. Items = s.RegisterCheckItems.Select(sa => new DetailedResultsList_Asbitem_Item
  230. {
  231. CriticalRangeValue = sa.CriticalRangeValue,
  232. ItemName = sa.Item.DisplayName,
  233. ItemResult = sa.Result,
  234. ReferenceRangeValue = sa.ReferenceRangeValue,
  235. ResultStatusName = sa.ResultStatusId,
  236. Unit = sa.Unit
  237. }).ToList(),
  238. Summarys = s.RegisterCheckSummaries.Count > 0 ? s.RegisterCheckSummaries.Select(sb => new DetailedResultsList_Asbitem_Summary
  239. {
  240. Summary = sb.Summary,
  241. }).ToList() : new List<DetailedResultsList_Asbitem_Summary>()
  242. }).ToList();
  243. var grouplist = asbitemList.GroupBy(g => g.ItemTypeName);
  244. foreach (var g in grouplist)
  245. {
  246. var glist = g.ToList();
  247. var resultlist = new DetailedResultsListDto
  248. {
  249. ItemTypeName = glist.FirstOrDefault().ItemTypeName,
  250. Asbitems = glist
  251. };
  252. detailedResultsList.Add(resultlist);
  253. }
  254. if (detailedResultsList.Any())
  255. {
  256. msg.detailedResultsListDtos = detailedResultsList;
  257. }
  258. #endregion
  259. }
  260. return msg;
  261. }
  262. /// <summary>
  263. /// 打印Pacs条码数据
  264. /// </summary>
  265. /// <param name="PatientRegisterId"></param>
  266. /// <returns></returns>
  267. [HttpPost("api/app/printreport/getpacsnoreport")]
  268. public async Task<List<PacsNoReportDto>> GetPacsNoReportAsync(Guid PatientRegisterId)
  269. {
  270. return await _checkRequestNoReportRepository.GetPacsNoReportAsync(PatientRegisterId);
  271. }
  272. /// <summary>
  273. /// 打印收费单
  274. /// </summary>
  275. /// <param name="ChargeId">收费主表ID</param>
  276. /// <returns></returns>
  277. [HttpPost("api/app/printreport/getchargereport")]
  278. public async Task<ChargeReportDto> GetChargeReportAsync(Guid ChargeId)
  279. {
  280. return await _chargeReportRepository.GetChargeReportAsync(ChargeId);
  281. }
  282. }
  283. }