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.

699 lines
39 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
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
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
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
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 NPOI.POIFS.Properties;
  5. using NUglify.Helpers;
  6. using Shentun.Peis.Enums;
  7. using Shentun.Peis.LisRequests;
  8. using Shentun.Peis.Models;
  9. using Shentun.Peis.PatientRegisters;
  10. using Shentun.Peis.SumSuggestionContents;
  11. using Shentun.Peis.SumSuggestionHeaders;
  12. using Shentun.Peis.SumSummaryContents;
  13. using Shentun.Peis.SumSummaryHeaders;
  14. using Shentun.Peis.SumSummaryReports;
  15. using Shentun.Peis.SysParmValues;
  16. using System;
  17. using System.Collections.Generic;
  18. using System.Linq;
  19. using System.Text;
  20. using System.Threading.Tasks;
  21. using Volo.Abp;
  22. using Volo.Abp.Application.Services;
  23. using Volo.Abp.Domain.Repositories;
  24. using Volo.Abp.Identity;
  25. using Volo.Abp.Uow;
  26. namespace Shentun.Peis.PrintReports
  27. {
  28. /// <summary>
  29. /// 打印报告服务
  30. /// </summary>
  31. [ApiExplorerSettings(GroupName = "Work")]
  32. [Authorize]
  33. public class PrintReportAppService : ApplicationService
  34. {
  35. private readonly IRepository<CustomerOrg, Guid> _customerOrgRepository;
  36. private readonly IRepository<Patient, Guid> _patientRepository;
  37. private readonly IRepository<PatientRegister, Guid> _patientRegisterRepository;
  38. private readonly IRepository<RegisterCheckAsbitem, Guid> _registerCheckAsbitemRepository;
  39. private readonly IRepository<RegisterCheckItem> _registerCheckItemRepository;
  40. private readonly IRepository<RegisterCheckSummary> _registerCheckSummaryRepository;
  41. private readonly IRepository<RegisterCheckPicture, Guid> _registerCheckPictureRepository;
  42. private readonly IRepository<Asbitem, Guid> _asbitemRepository;
  43. private readonly IRepository<Item, Guid> _itemRepository;
  44. private readonly IRepository<MedicalReportType, char> _medicalReportTypeRepository;
  45. private readonly IRepository<ItemType, Guid> _itemTypeRepository;
  46. private readonly IRepository<LisRequest, Guid> _lisRequestRepository;
  47. private readonly IRepository<SampleGroup, Guid> _sampleGroupRepository;
  48. private readonly IRepository<SampleContainer, Guid> _sampleContainerRepository;
  49. private readonly IRepository<SampleType, Guid> _sampleTypeRepository;
  50. private readonly IRepository<Sex> _sexRegisterRepository;
  51. private readonly IRepository<ResultStatus> _resultStatusRepository;
  52. private readonly IRepository<SumSummaryHeader, Guid> _sumSummaryHeaderRepository;
  53. private readonly IRepository<IdentityUser, Guid> _identityUserRepository;
  54. private readonly IRepository<SumSuggestionHeader, Guid> _sumSuggestionHeaderRepository;
  55. private readonly IRepository<RegisterCheck, Guid> _registerCheckRepository;
  56. private readonly IOrganizationUnitRepository _organizationUnitRepository;
  57. private readonly IPatientRegisterGuideReportRepository _patientRegisterGuideReportRepository;
  58. private readonly ILisRequestReportRepository _lisRequestReportRepository;
  59. private readonly ICheckRequestNoReportRepository _checkRequestNoReportRepository;
  60. private readonly IChargeReportRepository _chargeReportRepository;
  61. private readonly SysParmValueManager _sysParmValueManager;
  62. private readonly CacheService _cacheService;
  63. private readonly LisRequestManager _lisRequestManager;
  64. private readonly IUnitOfWorkManager _unitOfWorkManager;
  65. public PrintReportAppService(
  66. IRepository<Patient, Guid> patientRepository,
  67. IRepository<CustomerOrg, Guid> customerOrgRepository,
  68. IRepository<PatientRegister, Guid> patientRegisterRepository,
  69. IRepository<RegisterCheckAsbitem, Guid> registerCheckAsbitemRepository,
  70. IRepository<RegisterCheckItem> registerCheckItemRepository,
  71. IRepository<RegisterCheckSummary> registerCheckSummaryRepository,
  72. IRepository<RegisterCheckPicture, Guid> registerCheckPictureRepository,
  73. IRepository<Asbitem, Guid> asbitemRepository,
  74. IRepository<Item, Guid> itemRepository,
  75. IRepository<MedicalReportType, char> medicalReportTypeRepository,
  76. IRepository<ItemType, Guid> itemTypeRepository,
  77. IRepository<LisRequest, Guid> lisRequestRepository,
  78. IRepository<SampleGroup, Guid> sampleGroupRepository,
  79. IRepository<SampleContainer, Guid> sampleContainerRepository,
  80. IRepository<SampleType, Guid> sampleTypeRepository,
  81. IRepository<Sex> sexRegisterRepository,
  82. IRepository<ResultStatus> resultStatusRepository,
  83. IRepository<SumSummaryHeader, Guid> sumSummaryHeaderRepository,
  84. IRepository<IdentityUser, Guid> identityUserRepository,
  85. IRepository<SumSuggestionHeader, Guid> sumSuggestionHeaderRepository,
  86. IRepository<RegisterCheck, Guid> registerCheckRepository,
  87. IOrganizationUnitRepository organizationUnitRepository,
  88. IPatientRegisterGuideReportRepository patientRegisterGuideReportRepository,
  89. ILisRequestReportRepository lisRequestReportRepository,
  90. ICheckRequestNoReportRepository checkRequestNoReportRepository,
  91. IChargeReportRepository chargeReportRepository,
  92. SysParmValueManager sysParmValueManager,
  93. CacheService cacheService,
  94. LisRequestManager lisRequestManager,
  95. IUnitOfWorkManager unitOfWorkManager
  96. )
  97. {
  98. this._customerOrgRepository = customerOrgRepository;
  99. this._patientRegisterRepository = patientRegisterRepository;
  100. this._sexRegisterRepository = sexRegisterRepository;
  101. this._resultStatusRepository = resultStatusRepository;
  102. this._sumSummaryHeaderRepository = sumSummaryHeaderRepository;
  103. this._identityUserRepository = identityUserRepository;
  104. this._sumSuggestionHeaderRepository = sumSuggestionHeaderRepository;
  105. this._registerCheckRepository = registerCheckRepository;
  106. this._organizationUnitRepository = organizationUnitRepository;
  107. this._patientRegisterGuideReportRepository = patientRegisterGuideReportRepository;
  108. this._lisRequestReportRepository = lisRequestReportRepository;
  109. this._checkRequestNoReportRepository = checkRequestNoReportRepository;
  110. this._chargeReportRepository = chargeReportRepository;
  111. this._sysParmValueManager = sysParmValueManager;
  112. _registerCheckAsbitemRepository = registerCheckAsbitemRepository;
  113. _registerCheckItemRepository = registerCheckItemRepository;
  114. _registerCheckSummaryRepository = registerCheckSummaryRepository;
  115. _registerCheckPictureRepository = registerCheckPictureRepository;
  116. _asbitemRepository = asbitemRepository;
  117. _itemRepository = itemRepository;
  118. _medicalReportTypeRepository = medicalReportTypeRepository;
  119. _itemTypeRepository = itemTypeRepository;
  120. _lisRequestRepository = lisRequestRepository;
  121. _sampleGroupRepository = sampleGroupRepository;
  122. _sampleContainerRepository = sampleContainerRepository;
  123. _sampleTypeRepository = sampleTypeRepository;
  124. _cacheService = cacheService;
  125. _lisRequestManager = lisRequestManager;
  126. _unitOfWorkManager = unitOfWorkManager;
  127. _patientRepository = patientRepository;
  128. }
  129. /// <summary>
  130. /// 获取体检人员指引单报告数据
  131. /// </summary>
  132. /// <param name="PatientRegisterId"></param>
  133. /// <returns></returns>
  134. [HttpPost("api/app/PrintReport/getpatientregisterguidereport")]
  135. public async Task<PatientRegisterGuideReportDto> GetPatientRegisterGuideReportAsync(Guid PatientRegisterId)
  136. {
  137. return await _patientRegisterGuideReportRepository.GetPatientRegisterGuideReportAsync(PatientRegisterId);
  138. }
  139. /// <summary>
  140. /// 批量获取体检人员指引单报告数据
  141. /// </summary>
  142. /// <param name="PatientRegisterIds"></param>
  143. /// <returns></returns>
  144. [HttpPost("api/app/printreport/getpatientregisterguidereportmany")]
  145. public async Task<List<PatientRegisterGuideReportDto>> GetPatientRegisterGuideReportManyAsync(List<Guid> PatientRegisterIds)
  146. {
  147. return await _patientRegisterGuideReportRepository.GetPatientRegisterGuideReportManyAsync(PatientRegisterIds);
  148. }
  149. /// <summary>
  150. /// 打印检验申请单
  151. /// </summary>
  152. /// <returns></returns>
  153. [HttpPost("api/app/PrintReport/GetLisRequestReportByPatientRegisterId")]
  154. public async Task<List<LisRequestReportDto>> GetLisRequestReportByPatientRegisterIdAsync(PatientRegisterIdInputDto input)
  155. {
  156. //生成LIS条码
  157. var lisRequests = await _lisRequestManager.SetLisRequestAsync(input.PatientRegisterId);
  158. await _unitOfWorkManager.Current.SaveChangesAsync();
  159. //检索条码数据
  160. var query = (from patient in await _patientRepository.GetQueryableAsync()
  161. join patientRegister in await _patientRegisterRepository.GetQueryableAsync()
  162. on patient.Id equals patientRegister.PatientId
  163. join sex in await _sexRegisterRepository.GetQueryableAsync() on patientRegister.SexId equals sex.Id
  164. join registerCheckAsbitem in await _registerCheckAsbitemRepository.GetQueryableAsync() on patientRegister.Id equals registerCheckAsbitem.PatientRegisterId into bb
  165. from registerCheckAsbitemHaveEmpty in bb.DefaultIfEmpty()
  166. join asbitem in await _asbitemRepository.GetQueryableAsync() on registerCheckAsbitemHaveEmpty.AsbitemId equals asbitem.Id into ff
  167. from asbitemHaveEmpty in ff.DefaultIfEmpty()
  168. join lisRequest in await _lisRequestRepository.GetQueryableAsync() on registerCheckAsbitemHaveEmpty.LisRequestId equals lisRequest.Id
  169. join sampleContainer in await _sampleContainerRepository.GetQueryableAsync() on lisRequest.SampleContainerId equals sampleContainer.Id into dd
  170. from sampleContainerHaveEmpty in dd.DefaultIfEmpty()
  171. join sampleType in await _sampleTypeRepository.GetQueryableAsync() on lisRequest.SampleTypeId equals sampleType.Id into ee
  172. from sampleTypeHaveEmpty in ee.DefaultIfEmpty()
  173. where (patientRegister.Id == input.PatientRegisterId && registerCheckAsbitemHaveEmpty.LisRequestId != null)
  174. select new
  175. {
  176. patient,
  177. patientRegister,
  178. sex,
  179. registerCheckAsbitemHaveEmpty,
  180. asbitemHaveEmpty,
  181. lisRequest,
  182. sampleContainerHaveEmpty,
  183. sampleTypeHaveEmpty
  184. }
  185. ).ToList();
  186. lisRequests = query.Select(o=>o.lisRequest).Distinct().ToList();
  187. //发送第三方LIS申请
  188. if (lisRequests != null)
  189. {
  190. foreach (var lisRequest in lisRequests)
  191. {
  192. await _lisRequestManager.SendThirdLisRequestAsync(lisRequest.Id);
  193. }
  194. }
  195. var lisRequestReportDtoList = query.Select(o => new LisRequestReportDto
  196. {
  197. LisRequestId = o.lisRequest.Id,
  198. PatientNo = o.patient.PatientNo,
  199. Age = o.patientRegister.Age,
  200. AsbitemNames = string.IsNullOrEmpty(o.asbitemHaveEmpty.ShortName) ? o.asbitemHaveEmpty.DisplayName : o.asbitemHaveEmpty.ShortName,
  201. LisRequestNo = o.lisRequest.LisRequestNo,
  202. PatientName = o.patientRegister.PatientName,
  203. PatientRegisterNo = o.patientRegister.PatientRegisterNo,
  204. SampleContainerName = (o.sampleContainerHaveEmpty==null)?"": o.sampleContainerHaveEmpty.DisplayName,
  205. ContainerColor = (o.sampleContainerHaveEmpty == null)? 16777215:o.sampleContainerHaveEmpty.ContainerColor,
  206. SampleContainerRemark = (o.sampleContainerHaveEmpty == null) ? "":o.sampleContainerHaveEmpty.ContainerRemark,
  207. SampleTypeName = (o.sampleTypeHaveEmpty == null)?"":o.sampleTypeHaveEmpty.DisplayName,
  208. SexName = o.sex.DisplayName,
  209. CustomerOrgName = _cacheService.GetTopCustomerOrgAsync(o.patientRegister.CustomerOrgId).Result.DisplayName,
  210. DepartmentName = _cacheService.GetCustomerOrgNameAsync(o.patientRegister.CustomerOrgId).Result,
  211. IsPrint = o.lisRequest.IsPrint,
  212. IsSignIn = o.lisRequest.IsSignIn,
  213. SamplingTime = o.lisRequest.SamplingTime,
  214. SignInOrder = o.lisRequest.SignInOrder,
  215. SignInPerson = o.lisRequest.SignInPerson,
  216. SignInTime = o.lisRequest.SignInTime,
  217. }).ToList();
  218. var entlist = lisRequestReportDtoList.GroupBy(g => new
  219. {
  220. g.PatientNo,
  221. g.LisRequestId,
  222. g.LisRequestNo,
  223. g.Age,
  224. g.PatientName,
  225. g.PatientRegisterNo,
  226. g.SampleContainerName,
  227. g.ContainerColor,
  228. g.SampleContainerRemark,
  229. g.SampleTypeName,
  230. g.SexName,
  231. g.CustomerOrgName,
  232. g.DepartmentName,
  233. g.IsPrint,
  234. g.IsSignIn,
  235. g.SamplingTime,
  236. g.SignInOrder,
  237. g.SignInPerson,
  238. g.SignInTime
  239. })
  240. .Select(s => new LisRequestReportDto
  241. {
  242. PatientNo = s.Key.PatientNo,
  243. LisRequestId = s.Key.LisRequestId,
  244. SexName = s.Key.SexName,
  245. SampleTypeName = s.Key.SampleTypeName,
  246. SampleContainerRemark = s.Key.SampleContainerRemark,
  247. SampleContainerName = s.Key.SampleContainerName,
  248. ContainerColor = s.Key.ContainerColor,
  249. PatientRegisterNo = s.Key.PatientRegisterNo,
  250. PatientName = s.Key.PatientName,
  251. Age = s.Key.Age,
  252. LisRequestNo = s.Key.LisRequestNo,
  253. CustomerOrgName = s.Key.CustomerOrgName,
  254. DepartmentName = s.Key.DepartmentName,
  255. AsbitemNames = string.Join(",", s.Select(d => d.AsbitemNames)),
  256. IsPrint = s.Key.IsPrint,
  257. IsSignIn = s.Key.IsSignIn,
  258. SamplingTime = s.Key.SamplingTime,
  259. SignInOrder = s.Key.SignInOrder,
  260. SignInPerson = s.Key.SignInPerson,
  261. SignInTime = s.Key.SignInTime,
  262. }).ToList();
  263. return entlist;
  264. }
  265. [HttpPost("api/app/PrintReport/GetLisRequestReportByLisRequestId")]
  266. public async Task<LisRequestReportDto> GetLisRequestReportByLisRequestIdAsync(LisRequestIdInputDto input)
  267. {
  268. var list = (from patient in await _patientRepository.GetQueryableAsync()
  269. join patientRegister in await _patientRegisterRepository.GetQueryableAsync()
  270. on patient.Id equals patientRegister.PatientId
  271. join registerCheck in await _registerCheckRepository.GetQueryableAsync()
  272. on patientRegister.Id equals registerCheck.PatientRegisterId
  273. join registerCheckAsbitem in await _registerCheckAsbitemRepository.GetQueryableAsync()
  274. on registerCheck.Id equals registerCheckAsbitem.RegisterCheckId
  275. join asbitem in await _asbitemRepository.GetQueryableAsync()
  276. on registerCheckAsbitem.AsbitemId equals asbitem.Id
  277. join lisRequest in await _lisRequestReportRepository.GetQueryableAsync()
  278. on registerCheckAsbitem.LisRequestId equals lisRequest.Id
  279. join sampleContainer in await _sampleContainerRepository.GetQueryableAsync()
  280. on lisRequest.SampleContainerId equals sampleContainer.Id
  281. join sampleType in await _sampleTypeRepository.GetQueryableAsync()
  282. on lisRequest.SampleTypeId equals sampleType.Id
  283. where lisRequest.Id == input.LisRequestId
  284. select new
  285. {
  286. patient,
  287. patientRegister,
  288. asbitem,
  289. lisRequest,
  290. sampleContainer,
  291. sampleType
  292. }).Distinct().ToList();
  293. if (!list.Any())
  294. {
  295. return null;
  296. }
  297. var lisRequestDtoList = new List<LisRequestReportDto>();
  298. var lisRequestInfo = list.First();
  299. var lisRequestDto = new LisRequestReportDto()
  300. {
  301. LisRequestId = input.LisRequestId,
  302. LisRequestNo = lisRequestInfo.lisRequest.LisRequestNo,
  303. PatientNo = lisRequestInfo.patient.PatientNo,
  304. PatientRegisterNo = lisRequestInfo.patientRegister.PatientRegisterNo,
  305. PatientName = lisRequestInfo.patientRegister.PatientName,
  306. SexName = _cacheService.GetSexNameAsync(lisRequestInfo.patientRegister.SexId).Result,
  307. Age = lisRequestInfo.patientRegister.Age,
  308. IsPrint = lisRequestInfo.lisRequest.IsPrint,
  309. IsSignIn = lisRequestInfo.lisRequest.IsSignIn,
  310. SamplingTime = lisRequestInfo.lisRequest.SamplingTime,
  311. SignInOrder = lisRequestInfo.lisRequest.SignInOrder,
  312. SignInPerson = lisRequestInfo.lisRequest.SignInPerson,
  313. SignInTime = lisRequestInfo.lisRequest.SignInTime,
  314. SampleTypeName = lisRequestInfo.sampleType.DisplayName,
  315. SampleContainerName = lisRequestInfo.sampleContainer.DisplayName,
  316. ContainerColor = lisRequestInfo.sampleContainer.ContainerColor,
  317. SampleContainerRemark = lisRequestInfo.sampleContainer.ContainerRemark,
  318. AsbitemNames = string.Join(",", list.OrderBy(o => o.asbitem.DisplayOrder).Select(o => o.asbitem.DisplayName).Distinct()),
  319. CustomerOrgName = _cacheService.GetTopCustomerOrgAsync(lisRequestInfo.patientRegister.CustomerOrgId).Result.DisplayName,
  320. DepartmentName = _cacheService.GetCustomerOrgNameAsync(lisRequestInfo.patientRegister.CustomerOrgId).Result
  321. };
  322. return lisRequestDto;
  323. }
  324. /// <summary>
  325. /// 打印体检报告
  326. /// </summary>
  327. /// <returns></returns>
  328. [HttpPost("api/app/PrintReport/GetMedicalReport")]
  329. public async Task<MedicalReportDto> GetMedicalReportAsync(PatientRegisterIdInputDto input)
  330. {
  331. var patientRegister = (await _patientRegisterRepository.GetDbSetAsync())
  332. .Include(x => x.Patient)
  333. .Where(m => m.Id == input.PatientRegisterId).FirstOrDefault();
  334. if (patientRegister == null)
  335. {
  336. throw new UserFriendlyException("人员登记信息不存在");
  337. }
  338. var medicalReportDto = await GetMedicalReportDto(patientRegister);
  339. //获取综述
  340. medicalReportDto.SumSummarys = await GetMedicalReportSummaryDtos(patientRegister);
  341. //获取建议
  342. medicalReportDto.SumSuggestions = await GetMedicalReportSuggestinoDtos(patientRegister);
  343. //设置明细结果
  344. await SetMedicalReportRegisterChecks(patientRegister, medicalReportDto);
  345. return medicalReportDto;
  346. }
  347. /// <summary>
  348. /// 打印Pacs条码数据
  349. /// </summary>
  350. /// <param name="PatientRegisterId"></param>
  351. /// <returns></returns>
  352. [HttpPost("api/app/PrintReport/getpacsnoreport")]
  353. public async Task<List<PacsNoReportDto>> GetPacsNoReportAsync(Guid PatientRegisterId)
  354. {
  355. return await _checkRequestNoReportRepository.GetPacsNoReportAsync(PatientRegisterId);
  356. }
  357. /// <summary>
  358. /// 打印收费单
  359. /// </summary>
  360. /// <param name="ChargeId">收费主表ID</param>
  361. /// <returns></returns>
  362. [HttpPost("api/app/PrintReport/getchargereport")]
  363. public async Task<ChargeReportDto> GetChargeReportAsync(Guid ChargeId)
  364. {
  365. return await _chargeReportRepository.GetChargeReportAsync(ChargeId);
  366. }
  367. /// <summary>
  368. /// 获取体检报告人员信息
  369. /// </summary>
  370. /// <param name="patientRegister"></param>
  371. /// <returns></returns>
  372. private async Task<MedicalReportDto> GetMedicalReportDto(PatientRegister patientRegister)
  373. {
  374. #region 系统参数配置
  375. var medicalCenterAddress = await _sysParmValueManager.GetSysParmValueAsync(patientRegister.MedicalCenterId, "medical_center_address");
  376. var medicalCenterFax = await _sysParmValueManager.GetSysParmValueAsync(patientRegister.MedicalCenterId, "medical_center_fax");
  377. var medicalCenterTelphone = await _sysParmValueManager.GetSysParmValueAsync(patientRegister.MedicalCenterId, "medical_center_telphone");
  378. #endregion
  379. #region 人员信息
  380. var medicalReportDto = new MedicalReportDto
  381. {
  382. //个人信息
  383. PatientRegisterId = patientRegister.Id,
  384. IsPersonal = 'N',
  385. CustomerOrgName = _cacheService.GetTopCustomerOrgAsync(patientRegister.CustomerOrgId).Result.DisplayName,
  386. DepartmentName = _cacheService.GetCustomerOrgAsync(patientRegister.CustomerOrgId).Result.DisplayName,
  387. PatientRegisterNo = patientRegister.PatientRegisterNo,
  388. PatientNo = patientRegister.Patient.PatientNo,
  389. PatientName = patientRegister.PatientName,
  390. IdNo = patientRegister.Patient.IdNo,
  391. MedicalTimes = patientRegister.MedicalTimes,
  392. SexName = _cacheService.GetSexNameAsync(patientRegister.SexId).Result,
  393. BirthDate = patientRegister.BirthDate,
  394. Age = patientRegister.Age,
  395. MaritalStatusName = _cacheService.GetMaritalStatusNameAsync(patientRegister.MaritalStatusId).Result,
  396. NationName = _cacheService.GetNationNameAsync(patientRegister.Patient.NationId).Result,
  397. MobileTelephone = patientRegister.Patient.MobileTelephone,
  398. IsVip = patientRegister.IsVip,
  399. MedicalTypeName = _cacheService.GetMedicalTypeNameAsync(patientRegister.MedicalTypeId).Result,
  400. PersonnelTypeName = _cacheService.GetPersonnelTypeNameAsync(patientRegister.PersonnelTypeId).Result,
  401. MedicalStartDate = patientRegister.MedicalStartDate,
  402. SummaryDoctorName = _cacheService.GetSurnameAsync(patientRegister.SummaryDoctorId).Result,
  403. SummaryDate = patientRegister.SummaryDate,
  404. AuditDoctorName = _cacheService.GetSurnameAsync(patientRegister.AuditDoctorId).Result,
  405. AuditDate = patientRegister.AuditDate,
  406. //体检中心信息
  407. MedicalCenterTelphone = medicalCenterTelphone,
  408. MedicalCenterAddress = medicalCenterAddress,
  409. MedicalCenterId = patientRegister.MedicalCenterId,
  410. MedicalCenterName = (await _organizationUnitRepository.GetAsync(patientRegister.MedicalCenterId)).DisplayName,
  411. };
  412. if (patientRegister.CustomerOrgId == GuidFlag.PersonCustomerOrgId)
  413. {
  414. medicalReportDto.IsPersonal = 'Y';
  415. }
  416. #endregion
  417. return medicalReportDto;
  418. }
  419. /// <summary>
  420. /// 获取体检报告综述
  421. /// </summary>
  422. /// <param name="patientRegister"></param>
  423. /// <returns></returns>
  424. private async Task<List<MedicalReportSumSummaryDto>> GetMedicalReportSummaryDtos(PatientRegister patientRegister)
  425. {
  426. var sumSummarylist = (await _sumSummaryHeaderRepository.GetDbSetAsync())
  427. .Include(x => x.SumSummaryContents)
  428. .Where(m => m.PatientRegisterId == patientRegister.Id).OrderBy(o => o.DisplayOrder).ToList();
  429. var medicalReportSumSummaryDtos = new List<MedicalReportSumSummaryDto>();
  430. if (sumSummarylist.Any())
  431. {
  432. medicalReportSumSummaryDtos = sumSummarylist.Select(s => new MedicalReportSumSummaryDto
  433. {
  434. SummaryTitle = s.SummaryTitle,
  435. SummaryFlag = s.SummaryFlag,
  436. DisplayOrder = s.DisplayOrder,
  437. SummaryContents = s.SumSummaryContents.OrderBy(o => o.DisplayOrder).Select(sa => new MedicalReportSumSummaryContentDto
  438. {
  439. SummaryContent = sa.SummaryContent,
  440. DisplayOrder = sa.DisplayOrder,
  441. }).OrderBy(o => o.DisplayOrder).ToList()
  442. }).OrderBy(o => o.DisplayOrder).ToList();
  443. }
  444. return medicalReportSumSummaryDtos;
  445. }
  446. /// <summary>
  447. /// 获取体检报告建议
  448. /// </summary>
  449. /// <param name="patientRegister"></param>
  450. /// <returns></returns>
  451. private async Task<List<MedicalReportSumSuggestionDto>> GetMedicalReportSuggestinoDtos(PatientRegister patientRegister)
  452. {
  453. var sumSuggestionlist = (await _sumSuggestionHeaderRepository.GetDbSetAsync())
  454. .Include(x => x.SumSuggestionContents)
  455. .Where(m => m.PatientRegisterId == patientRegister.Id).OrderBy(o => o.DisplayOrder).ToList();
  456. var medicalReportSumSuggestionDtos = new List<MedicalReportSumSuggestionDto>();
  457. if (sumSuggestionlist.Any())
  458. {
  459. medicalReportSumSuggestionDtos = sumSuggestionlist.Select(s => new MedicalReportSumSuggestionDto
  460. {
  461. SuggestionTitle = s.SuggestionTitle,
  462. SuggestionFlag = s.SuggestionFlag,
  463. DisplayOrder = s.DisplayOrder,
  464. MedicalInterpretations = s.SumSuggestionContents.
  465. Where(o => o.SuggestionType == SuggestionTypeFlag.MedicalInterpretation)
  466. .OrderBy(o => o.DisplayOrder)
  467. .Select(sa => new MedicalReportSumSuggestionContentDto
  468. {
  469. SuggestionContent = sa.SuggestionContent,
  470. DisplayOrder = sa.DisplayOrder,
  471. }).OrderBy(o => o.DisplayOrder).ToList(),
  472. CommonReasons = s.SumSuggestionContents.
  473. Where(o => o.SuggestionType == SuggestionTypeFlag.MedicalInterpretation)
  474. .OrderBy(o => o.DisplayOrder)
  475. .Select(sa => new MedicalReportSumSuggestionContentDto
  476. {
  477. SuggestionContent = sa.SuggestionContent,
  478. DisplayOrder = sa.DisplayOrder,
  479. }).OrderBy(o => o.DisplayOrder).ToList(),
  480. HealthGuidances = s.SumSuggestionContents.
  481. Where(o => o.SuggestionType == SuggestionTypeFlag.MedicalInterpretation)
  482. .OrderBy(o => o.DisplayOrder)
  483. .Select(sa => new MedicalReportSumSuggestionContentDto
  484. {
  485. SuggestionContent = sa.SuggestionContent,
  486. DisplayOrder = sa.DisplayOrder,
  487. }).OrderBy(o => o.DisplayOrder).ToList()
  488. })
  489. .OrderBy(o => o.DisplayOrder).ToList();
  490. }
  491. return medicalReportSumSuggestionDtos;
  492. }
  493. /// <summary>
  494. /// 获取体检报告明细结果
  495. /// </summary>
  496. /// <param name="patientRegister"></param>
  497. /// <param name="medicalReportDto"></param>
  498. /// <returns></returns>
  499. private async Task SetMedicalReportRegisterChecks(PatientRegister patientRegister, MedicalReportDto medicalReportDto)
  500. {
  501. var resultStatusList = (await _resultStatusRepository.GetListAsync());
  502. //获取体检报告类别
  503. medicalReportDto.MedicalReportTypes = await GetMedicalReportTypeList();
  504. //获取项目类别
  505. medicalReportDto.ItemTypes = await GetItemTypeList();
  506. var registerChecklist = (from registerCheck in await _registerCheckRepository.GetQueryableAsync()
  507. join registerAsbitem in await _registerCheckAsbitemRepository.GetQueryableAsync()
  508. on registerCheck.Id equals registerAsbitem.RegisterCheckId
  509. join registerCheckItem in await _registerCheckItemRepository.GetQueryableAsync()
  510. on registerCheck.Id equals registerCheckItem.RegisterCheckId
  511. join registerCheckPicture in await _registerCheckPictureRepository.GetQueryableAsync()
  512. on registerCheck.Id equals registerCheckPicture.RegisterCheckId into registerCheckPictureExist
  513. from registerCheckPictureHaveEmpty in registerCheckPictureExist.DefaultIfEmpty()
  514. join registerCheckSummary in await _registerCheckSummaryRepository.GetQueryableAsync()
  515. on registerCheck.Id equals registerCheckSummary.RegisterCheckId into registerCheckSummaryExist
  516. from registerCheckSummaryHaveEmpty in registerCheckSummaryExist.DefaultIfEmpty()
  517. join asbitem in await _asbitemRepository.GetQueryableAsync()
  518. on registerAsbitem.AsbitemId equals asbitem.Id
  519. join item in await _itemRepository.GetQueryableAsync()
  520. on registerCheckItem.ItemId equals item.Id
  521. join itemType in await _itemTypeRepository.GetQueryableAsync()
  522. on asbitem.ItemTypeId equals itemType.Id
  523. join medicalReportType in await _medicalReportTypeRepository.GetQueryableAsync()
  524. on itemType.MedicalReportTypeId equals medicalReportType.Id
  525. where (registerCheck.PatientRegisterId == patientRegister.Id
  526. && registerCheck.CompleteFlag == RegisterCheckCompleteFlag.Checked)
  527. select new
  528. {
  529. registerCheck,
  530. registerAsbitem,
  531. registerCheckItem,
  532. registerCheckPictureHaveEmpty,
  533. registerCheckSummaryHaveEmpty,
  534. asbitem,
  535. item,
  536. itemType,
  537. medicalReportType
  538. })
  539. .OrderBy(o => o.registerCheck.Id)
  540. .ToList();
  541. var registerCheckIds = registerChecklist.Select(o => o.registerCheck.Id).Distinct().ToList();
  542. foreach (var registerCheckId in registerCheckIds)
  543. {
  544. var registerCheckRows = registerChecklist.Where(o => o.registerCheck.Id == registerCheckId).ToList();
  545. var registerCheckRow = registerCheckRows.First();
  546. var medicalReportRegisterCheckDto = new MedicalReportRegisterCheckDto()
  547. {
  548. ItemTypeId = registerCheckRow.itemType.Id,
  549. AsbitemNames = string.Join(",", registerCheckRows.
  550. GroupBy(o => o.asbitem.Id).
  551. Select(d => d.First().asbitem.DisplayName
  552. )
  553. .ToList()
  554. ),
  555. CheckDate = (DateTime)registerCheckRow.registerCheck.CheckDate,
  556. };
  557. //检查医生
  558. var checkDoctorId = registerCheckRow.registerCheck.CheckDoctorId;
  559. if (!string.IsNullOrWhiteSpace(checkDoctorId))
  560. {
  561. if (Guid.TryParse(checkDoctorId, out var checkDoctorIdGuid))
  562. {
  563. medicalReportRegisterCheckDto.CheckDoctorName = _cacheService.GetSurnameAsync(checkDoctorIdGuid).Result;
  564. }
  565. else
  566. {
  567. medicalReportRegisterCheckDto.CheckDoctorName = checkDoctorId;
  568. }
  569. }
  570. //显示顺序
  571. medicalReportRegisterCheckDto.DisplayOrder = registerCheckRow.asbitem.DisplayOrder;
  572. //明细结果
  573. foreach (var registerCheckItemRow in registerCheckRows)
  574. {
  575. if (medicalReportRegisterCheckDto.Items.
  576. Where(o => o.ItemId == registerCheckItemRow.registerCheckItem.ItemId).Count() > 0)
  577. {
  578. continue;
  579. }
  580. var resultStatus = resultStatusList.Where(o => o.Id == registerCheckItemRow.registerCheckItem.ResultStatusId).FirstOrDefault();
  581. var medicalReportCheckItemDto = new MedicalReportCheckItemDto()
  582. {
  583. ItemId = registerCheckItemRow.registerCheckItem.ItemId,
  584. ItemName = registerCheckItemRow.item.DisplayName,
  585. Result = registerCheckItemRow.registerCheckItem.Result,
  586. ReferenceRangeValue = registerCheckItemRow.registerCheckItem.ReferenceRangeValue,
  587. CriticalRangeValue = registerCheckItemRow.registerCheckItem.CriticalRangeValue,
  588. Unit = registerCheckItemRow.registerCheckItem.Unit,
  589. ReportFontColor = (resultStatus == null) ? 0: resultStatus.ReportFontColor,
  590. ReportBackgroundColor = (resultStatus == null) ? 16579836 : resultStatus.ReportBackgroundColor,
  591. ReportPrompt = (resultStatus == null) ? null: resultStatus.ReportPrompt,
  592. DisplayOrder = registerCheckItemRow.item.DisplayOrder,
  593. };
  594. medicalReportRegisterCheckDto.Items.Add(medicalReportCheckItemDto);
  595. }
  596. //小结
  597. //medicalReportRegisterCheckDto.Summarys = registerCheckRows.Select(o => new MedicalReportCheckAsbitemSummaryDto()
  598. //{
  599. // Summary = o.registerCheckSummaryHaveEmpty.Summary,
  600. // DisplayOrder = o.registerCheckSummaryHaveEmpty.DisplayOrder
  601. //}).OrderBy(o => o.DisplayOrder).Distinct().ToList();
  602. medicalReportRegisterCheckDto.Summarys = registerCheckRows.GroupBy(g=>g.registerCheckSummaryHaveEmpty.Id).Select(o => new MedicalReportCheckAsbitemSummaryDto()
  603. {
  604. Summary = o.FirstOrDefault().registerCheckSummaryHaveEmpty.Summary,
  605. DisplayOrder = o.FirstOrDefault().registerCheckSummaryHaveEmpty.DisplayOrder
  606. }).OrderBy(o => o.DisplayOrder).Distinct().ToList();
  607. //图片
  608. var registerCheckPictures = registerCheckRows.Where(o => o.registerCheckPictureHaveEmpty != null &&
  609. o.registerCheckPictureHaveEmpty.IsPrint == 'Y')
  610. .Select(o => new
  611. {
  612. PictureFilename = o.registerCheckPictureHaveEmpty.PictureFilename,
  613. DisplayOrder = o.registerCheckPictureHaveEmpty.DisplayOrder
  614. }).OrderBy(o => o.DisplayOrder).Distinct().ToList();
  615. foreach (var registerCheckPicture in registerCheckPictures)
  616. {
  617. var medicalReportCheckPictureDto = new MedicalReportCheckPictureDto();
  618. medicalReportCheckPictureDto.PictureFileName = registerCheckPicture.PictureFilename;
  619. //medicalReportCheckPictureDto.PictureBase64 =
  620. // Shentun.Utilities.FileHelper.ToBase64(registerCheckPicture.PictureFilename);
  621. medicalReportCheckPictureDto.DisplayOrder = registerCheckPicture.DisplayOrder;
  622. medicalReportRegisterCheckDto.Pictures.Add(medicalReportCheckPictureDto);
  623. }
  624. medicalReportDto.RegisterChecks.Add(medicalReportRegisterCheckDto);
  625. }
  626. }
  627. /// <summary>
  628. /// 获取项目类别
  629. /// </summary>
  630. /// <returns></returns>
  631. private async Task<List<MedicalReportItemTypeDto>> GetItemTypeList()
  632. {
  633. var itemTypes = await _itemTypeRepository.GetListAsync();
  634. var medicalReportItemTypeDtos = new List<MedicalReportItemTypeDto>();
  635. foreach (var itemType in itemTypes)
  636. {
  637. var medicalReportItemTypeDto = new MedicalReportItemTypeDto()
  638. {
  639. MedicalReportTypeId = itemType.MedicalReportTypeId,
  640. ItemTypeId = itemType.Id,
  641. ItemTypeName = itemType.DisplayName,
  642. ItemTypePathCode = itemType.PathCode,
  643. DisplayOrder = itemType.DisplayOrder,
  644. };
  645. medicalReportItemTypeDtos.Add(medicalReportItemTypeDto);
  646. }
  647. return medicalReportItemTypeDtos;
  648. }
  649. /// <summary>
  650. /// 获取体检报告类别
  651. /// </summary>
  652. /// <returns></returns>
  653. private async Task<List<MedicalReportMedicalReportTypeDto>> GetMedicalReportTypeList()
  654. {
  655. var medicalReportTypes = (await _medicalReportTypeRepository.GetListAsync()).OrderBy(o => o.DisplayOrder);
  656. var MedicalReportMedicalReportTypeDtos = new List<MedicalReportMedicalReportTypeDto>();
  657. foreach (var medicalReportType in medicalReportTypes)
  658. {
  659. MedicalReportMedicalReportTypeDtos.Add(new MedicalReportMedicalReportTypeDto()
  660. {
  661. MedicalReportTypeId = medicalReportType.Id,
  662. MedicalReportTypeName = medicalReportType.DisplayName,
  663. DisplayOrder = medicalReportType.DisplayOrder,
  664. });
  665. }
  666. return MedicalReportMedicalReportTypeDtos;
  667. }
  668. }
  669. }