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.

1385 lines
81 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
1 year ago
2 years ago
2 years ago
1 year ago
2 years ago
2 years ago
2 years ago
2 years ago
1 year ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
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 year ago
2 years ago
2 years ago
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 year ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
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 year ago
1 year ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
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 year ago
1 year ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
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 year ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
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 year ago
1 year ago
2 years ago
1 year ago
2 years ago
1 year ago
1 year ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
1 year ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
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 year ago
2 years ago
2 years ago
2 years ago
1 year ago
2 years ago
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 year ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
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 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 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
2 years ago
1 year ago
2 years ago
2 years ago
1 year ago
2 years ago
2 years ago
2 years ago
1 year ago
2 years ago
1 year ago
2 years ago
2 years ago
1 year ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
1 year ago
2 years ago
1 year ago
2 years ago
1 year ago
2 years ago
1 year ago
2 years ago
2 years ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
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 year ago
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 year ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
1 year ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
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 year ago
2 years ago
2 years ago
2 years ago
1 year ago
2 years ago
2 years ago
2 years ago
1 year ago
2 years ago
1 year ago
2 years ago
1 year ago
2 years ago
  1. using Microsoft.AspNetCore.Authorization;
  2. using Microsoft.AspNetCore.Mvc;
  3. using Microsoft.EntityFrameworkCore;
  4. using Microsoft.Extensions.Configuration;
  5. using NPOI.POIFS.Properties;
  6. using NUglify.Helpers;
  7. using Shentun.Peis.AsbitemGuides;
  8. using Shentun.Peis.Enums;
  9. using Shentun.Peis.LisRequests;
  10. using Shentun.Peis.Models;
  11. using Shentun.Peis.OcCheckTypes;
  12. using Shentun.Peis.OccupationalDiseases;
  13. using Shentun.Peis.PatientRegisters;
  14. using Shentun.Peis.SumSuggestionContents;
  15. using Shentun.Peis.SumSuggestionHeaders;
  16. using Shentun.Peis.SumSummaryContents;
  17. using Shentun.Peis.SumSummaryHeaders;
  18. using Shentun.Peis.SumSummaryReports;
  19. using Shentun.Peis.SysParmValues;
  20. using SqlSugar.Extensions;
  21. using System;
  22. using System.Collections.Generic;
  23. using System.Linq;
  24. using System.Text;
  25. using System.Threading.Tasks;
  26. using Volo.Abp;
  27. using Volo.Abp.Application.Services;
  28. using Volo.Abp.Domain.Repositories;
  29. using Volo.Abp.Identity;
  30. using Volo.Abp.ObjectMapping;
  31. using Volo.Abp.Uow;
  32. using static Microsoft.EntityFrameworkCore.DbLoggerCategory;
  33. namespace Shentun.Peis.PrintReports
  34. {
  35. /// <summary>
  36. /// 打印报告服务
  37. /// </summary>
  38. [ApiExplorerSettings(GroupName = "Work")]
  39. [Authorize]
  40. public class PrintReportAppService : ApplicationService
  41. {
  42. private readonly IRepository<CustomerOrg, Guid> _customerOrgRepository;
  43. private readonly IRepository<CustomerOrgGroup, Guid> _customerOrgGroupRepository;
  44. private readonly IRepository<Patient, Guid> _patientRepository;
  45. private readonly IRepository<PatientRegister, Guid> _patientRegisterRepository;
  46. private readonly IRepository<RegisterCheckAsbitem, Guid> _registerCheckAsbitemRepository;
  47. private static IRepository<RegisterCheckAsbitem, Guid> _registerCheckAsbitemStaticRepository;
  48. private readonly IRepository<RegisterCheckItem> _registerCheckItemRepository;
  49. private readonly IRepository<RegisterCheckSummary> _registerCheckSummaryRepository;
  50. private readonly IRepository<RegisterCheckPicture, Guid> _registerCheckPictureRepository;
  51. private readonly IRepository<Asbitem, Guid> _asbitemRepository;
  52. private readonly IRepository<Item, Guid> _itemRepository;
  53. private readonly IRepository<MedicalPackage, Guid> _medicalPackageRepository;
  54. private readonly IRepository<MedicalReportType, char> _medicalReportTypeRepository;
  55. private readonly IRepository<ItemType, Guid> _itemTypeRepository;
  56. private readonly IRepository<LisRequest, Guid> _lisRequestRepository;
  57. private readonly IRepository<SampleGroup, Guid> _sampleGroupRepository;
  58. private readonly IRepository<SampleGroupDetail> _sampleGroupDetailRepository;
  59. private readonly IRepository<SampleContainer, Guid> _sampleContainerRepository;
  60. private readonly IRepository<SampleType, Guid> _sampleTypeRepository;
  61. private readonly IRepository<Sex> _sexRegisterRepository;
  62. private readonly IRepository<ResultStatus> _resultStatusRepository;
  63. private readonly IRepository<SumSummaryHeader, Guid> _sumSummaryHeaderRepository;
  64. private readonly IRepository<IdentityUser, Guid> _identityUserRepository;
  65. private readonly IRepository<SumSuggestionHeader, Guid> _sumSuggestionHeaderRepository;
  66. private readonly IRepository<RegisterCheck, Guid> _registerCheckRepository;
  67. private readonly IRepository<PersonnelType, Guid> _personnelTypeRepository;
  68. //private readonly IOrganizationUnitRepository _organizationUnitRepository;
  69. private readonly IRepository<OrganizationUnit, Guid> _organizationUnitRepository;
  70. private readonly IPatientRegisterGuideReportRepository _patientRegisterGuideReportRepository;
  71. private readonly ILisRequestReportRepository _lisRequestReportRepository;
  72. //private readonly ICheckRequestNoReportRepository _checkRequestNoReportRepository;
  73. private readonly IChargeReportRepository _chargeReportRepository;
  74. private readonly SysParmValueManager _sysParmValueManager;
  75. private readonly CacheService _cacheService;
  76. private readonly LisRequestManager _lisRequestManager;
  77. private readonly IUnitOfWorkManager _unitOfWorkManager;
  78. private static AsbitemGuideManager _asbitemGuideManager;
  79. private readonly IConfiguration _configuration;
  80. private readonly IRepository<PatientOccupationalDisease, Guid> _patientOccupationalDiseaseRepository;
  81. private readonly IRepository<PatientOccupationalHistory, Guid> _patientOccupationalHistoryRepository;
  82. private readonly IRepository<PatientPoison> _patientPoisonRepository;
  83. private readonly IRepository<PatientSymptom> _patientSymptomRepository;
  84. private readonly IRepository<PatientOccupationalMedicalHistory, Guid> _patientOccupationalMedicalHistoryRepository;
  85. private readonly IRepository<PatientPastMedicalHistory, Guid> _patientPastMedicalHistoryRepository;
  86. private readonly IRepository<OcCheckType, Guid> _ocCheckTypeRepository;
  87. private readonly IRepository<Poison, Guid> _poisonRepository;
  88. private readonly IRepository<OccupationalAbnormal, Guid> _occupationalAbnormalRepository;
  89. private readonly IRepository<Symptom, Guid> _symptomRepository;
  90. public PrintReportAppService(
  91. IRepository<Patient, Guid> patientRepository,
  92. IRepository<CustomerOrg, Guid> customerOrgRepository,
  93. IRepository<CustomerOrgGroup, Guid> customerOrgGroupRepository,
  94. IRepository<PatientRegister, Guid> patientRegisterRepository,
  95. IRepository<RegisterCheckAsbitem, Guid> registerCheckAsbitemRepository,
  96. IRepository<RegisterCheckItem> registerCheckItemRepository,
  97. IRepository<RegisterCheckSummary> registerCheckSummaryRepository,
  98. IRepository<RegisterCheckPicture, Guid> registerCheckPictureRepository,
  99. IRepository<Asbitem, Guid> asbitemRepository,
  100. IRepository<Item, Guid> itemRepository,
  101. IRepository<MedicalPackage, Guid> medicalPackageRepository,
  102. IRepository<MedicalReportType, char> medicalReportTypeRepository,
  103. IRepository<ItemType, Guid> itemTypeRepository,
  104. IRepository<LisRequest, Guid> lisRequestRepository,
  105. IRepository<SampleGroup, Guid> sampleGroupRepository,
  106. IRepository<SampleContainer, Guid> sampleContainerRepository,
  107. IRepository<SampleType, Guid> sampleTypeRepository,
  108. IRepository<Sex> sexRegisterRepository,
  109. IRepository<PersonnelType, Guid> personnelTypeRepository,
  110. IRepository<ResultStatus> resultStatusRepository,
  111. IRepository<SumSummaryHeader, Guid> sumSummaryHeaderRepository,
  112. IRepository<IdentityUser, Guid> identityUserRepository,
  113. IRepository<SumSuggestionHeader, Guid> sumSuggestionHeaderRepository,
  114. IRepository<RegisterCheck, Guid> registerCheckRepository,
  115. //IOrganizationUnitRepository organizationUnitRepository,
  116. IRepository<OrganizationUnit, Guid> organizationUnitRepository,
  117. IPatientRegisterGuideReportRepository patientRegisterGuideReportRepository,
  118. ILisRequestReportRepository lisRequestReportRepository,
  119. //ICheckRequestNoReportRepository checkRequestNoReportRepository,
  120. IChargeReportRepository chargeReportRepository,
  121. SysParmValueManager sysParmValueManager,
  122. CacheService cacheService,
  123. LisRequestManager lisRequestManager,
  124. IUnitOfWorkManager unitOfWorkManager,
  125. AsbitemGuideManager asbitemGuideManager,
  126. IConfiguration configuration,
  127. IRepository<PatientOccupationalDisease, Guid> patientOccupationalDiseaseRepository,
  128. IRepository<PatientOccupationalHistory, Guid> patientOccupationalHistoryRepository,
  129. IRepository<PatientPoison> patientPoisonRepository,
  130. IRepository<PatientSymptom> patientSymptomRepository,
  131. IRepository<PatientOccupationalMedicalHistory, Guid> patientOccupationalMedicalHistoryRepository,
  132. IRepository<PatientPastMedicalHistory, Guid> patientPastMedicalHistoryRepository
  133. ,
  134. IRepository<OcCheckType, Guid> ocCheckTypeRepository,
  135. IRepository<Poison, Guid> poisonRepository,
  136. IRepository<OccupationalAbnormal, Guid> occupationalAbnormalRepository,
  137. IRepository<Symptom, Guid> symptomRepository,
  138. IRepository<SampleGroupDetail> sampleGroupDetailRepository)
  139. {
  140. this._customerOrgRepository = customerOrgRepository;
  141. this._patientRegisterRepository = patientRegisterRepository;
  142. this._sexRegisterRepository = sexRegisterRepository;
  143. this._resultStatusRepository = resultStatusRepository;
  144. this._sumSummaryHeaderRepository = sumSummaryHeaderRepository;
  145. this._identityUserRepository = identityUserRepository;
  146. this._sumSuggestionHeaderRepository = sumSuggestionHeaderRepository;
  147. this._registerCheckRepository = registerCheckRepository;
  148. this._organizationUnitRepository = organizationUnitRepository;
  149. this._patientRegisterGuideReportRepository = patientRegisterGuideReportRepository;
  150. this._lisRequestReportRepository = lisRequestReportRepository;
  151. //this._checkRequestNoReportRepository = checkRequestNoReportRepository;
  152. this._chargeReportRepository = chargeReportRepository;
  153. this._sysParmValueManager = sysParmValueManager;
  154. _registerCheckAsbitemRepository = registerCheckAsbitemRepository;
  155. _registerCheckAsbitemStaticRepository = registerCheckAsbitemRepository;
  156. _registerCheckItemRepository = registerCheckItemRepository;
  157. _registerCheckSummaryRepository = registerCheckSummaryRepository;
  158. _registerCheckPictureRepository = registerCheckPictureRepository;
  159. _asbitemRepository = asbitemRepository;
  160. _itemRepository = itemRepository;
  161. _medicalReportTypeRepository = medicalReportTypeRepository;
  162. _itemTypeRepository = itemTypeRepository;
  163. _lisRequestRepository = lisRequestRepository;
  164. _sampleGroupRepository = sampleGroupRepository;
  165. _sampleContainerRepository = sampleContainerRepository;
  166. _sampleTypeRepository = sampleTypeRepository;
  167. _cacheService = cacheService;
  168. _lisRequestManager = lisRequestManager;
  169. _unitOfWorkManager = unitOfWorkManager;
  170. _patientRepository = patientRepository;
  171. _asbitemGuideManager = asbitemGuideManager;
  172. _customerOrgGroupRepository = customerOrgGroupRepository;
  173. _medicalPackageRepository = medicalPackageRepository;
  174. _personnelTypeRepository = personnelTypeRepository;
  175. _configuration = configuration;
  176. _organizationUnitRepository = organizationUnitRepository;
  177. _patientOccupationalDiseaseRepository = patientOccupationalDiseaseRepository;
  178. _patientOccupationalHistoryRepository = patientOccupationalHistoryRepository;
  179. _patientPoisonRepository = patientPoisonRepository;
  180. _patientSymptomRepository = patientSymptomRepository;
  181. _patientOccupationalMedicalHistoryRepository = patientOccupationalMedicalHistoryRepository;
  182. _patientPastMedicalHistoryRepository = patientPastMedicalHistoryRepository;
  183. _ocCheckTypeRepository = ocCheckTypeRepository;
  184. _poisonRepository = poisonRepository;
  185. _occupationalAbnormalRepository = occupationalAbnormalRepository;
  186. _symptomRepository = symptomRepository;
  187. _sampleGroupDetailRepository = sampleGroupDetailRepository;
  188. }
  189. /// <summary>
  190. /// 获取体检人员指引单报告数据
  191. /// </summary>
  192. /// <param name="PatientRegisterId"></param>
  193. /// <returns></returns>
  194. [HttpPost("api/app/PrintReport/getpatientregisterguidereport")]
  195. public async Task<PatientRegisterGuideReportDto> GetPatientRegisterGuideReportAsync(Guid PatientRegisterId)
  196. {
  197. //return await _patientRegisterGuideReportRepository.GetPatientRegisterGuideReportAsync(PatientRegisterId);
  198. //_cacheService.GetMedicalTypeNameAsync
  199. var apiUrl = _configuration.GetValue<string>("HostUrl:ApiUrl") + "/";
  200. var patientRegister = await _patientRegisterRepository.GetAsync(o => o.Id == PatientRegisterId);
  201. Guid medicalCenterId = patientRegister.MedicalCenterId;
  202. #region 系统参数配置
  203. var MedicalCenterAddress = await _sysParmValueManager.GetSysParmValueAsync(medicalCenterId, "medical_center_address");
  204. var MedicalCenterFax = await _sysParmValueManager.GetSysParmValueAsync(medicalCenterId, "medical_center_fax");
  205. var MedicalCenterTelphone = await _sysParmValueManager.GetSysParmValueAsync(medicalCenterId, "medical_center_telphone");
  206. #endregion
  207. //var customerOrgList = await _customerOrgRepository.GetListAsync();
  208. var query = from a in await _patientRegisterRepository.GetQueryableAsync()
  209. join b in await _sexRegisterRepository.GetQueryableAsync()
  210. on a.SexId equals b.Id
  211. join c in await _customerOrgGroupRepository.GetQueryableAsync()
  212. on a.CustomerOrgGroupId equals c.Id into cc
  213. from ac in cc.DefaultIfEmpty()
  214. join d in await _medicalPackageRepository.GetQueryableAsync()
  215. on a.MedicalPackageId equals d.Id into dd
  216. from ad in dd.DefaultIfEmpty()
  217. join e in await _patientRepository.GetQueryableAsync()
  218. on a.PatientId equals e.Id
  219. join f in await _personnelTypeRepository.GetQueryableAsync()
  220. on a.PersonnelTypeId equals f.Id into ff
  221. from af in ff.DefaultIfEmpty()
  222. join g in await _organizationUnitRepository.GetQueryableAsync()
  223. on a.MedicalCenterId equals g.Id into gg
  224. from ag in gg.DefaultIfEmpty()
  225. where (a.Id == PatientRegisterId)
  226. select new PatientRegisterGuideReportDto
  227. {
  228. Age = a.Age,
  229. PatientRegisterId = a.Id,
  230. CustomerOrgGroupName = ac.DisplayName,
  231. CustomerOrgName = _cacheService.GetTopCustomerOrgNameAsync(a.CustomerOrgId).GetAwaiter().GetResult(),
  232. CustomerOrgShortName = _cacheService.GetTopCustomerOrgAsync(a.CustomerOrgId).GetAwaiter().GetResult().ShortName,
  233. DepartmentName = _cacheService.GetAllDepartmentNameAsync(a.CustomerOrgId).GetAwaiter().GetResult(),
  234. IdNo = e.IdNo,
  235. JobCardNo = a.JobCardNo,
  236. MedicalCardNo = a.MedicalCardNo,
  237. MedicalCenterAddress = MedicalCenterAddress,
  238. MedicalCenterFax = MedicalCenterFax,
  239. MedicalCenterTelphone = MedicalCenterTelphone,
  240. MedicalPackageName = ad.DisplayName,
  241. MedicalTimes = a.MedicalTimes,
  242. MobileTelephone = e.MobileTelephone,
  243. PatientName = a.PatientName,
  244. PatientNo = e.PatientNo,
  245. PatientRegisterNo = a.PatientRegisterNo,
  246. PersonnelTypeName = af.DisplayName,
  247. SexName = b.DisplayName,
  248. // Photo = string.IsNullOrEmpty(a.Photo) ? "" : ImageHelper.GetImageBase64StringAsync( a.Photo),
  249. Photo = string.IsNullOrEmpty(a.Photo) ? "" : apiUrl + a.Photo,
  250. MedicalStartDate = Convert.ToDateTime(a.MedicalStartDate.ToString()).ToString("yyyy-MM-dd"),
  251. OrganizationUnitId = a.MedicalCenterId,
  252. OrganizationUnitName = ag.DisplayName,
  253. Detail = PatientRegisterGuideAsbitem(a.Id, a.PatientRegisterNo, medicalCenterId, a.SexId),
  254. HisPatientId = a.HisPatientId,
  255. MedicalTypeName = _cacheService.GetMedicalTypeNameAsync(a.MedicalTypeId).Result,
  256. };
  257. return query.FirstOrDefault();
  258. }
  259. /// <summary>
  260. /// 批量获取体检人员指引单报告数据
  261. /// </summary>
  262. /// <param name="PatientRegisterIds"></param>
  263. /// <returns></returns>
  264. [HttpPost("api/app/printreport/getpatientregisterguidereportmany")]
  265. public async Task<List<PatientRegisterGuideReportDto>> GetPatientRegisterGuideReportManyAsync(List<Guid> PatientRegisterIds)
  266. {
  267. return await _patientRegisterGuideReportRepository.GetPatientRegisterGuideReportManyAsync(PatientRegisterIds);
  268. }
  269. /// <summary>
  270. /// 打印检验申请单
  271. /// </summary>
  272. /// <returns></returns>
  273. [HttpPost("api/app/PrintReport/GetLisRequestReportByPatientRegisterId")]
  274. public async Task<List<LisRequestReportDto>> GetLisRequestReportByPatientRegisterIdAsync(PatientRegisterIdInputDto input)
  275. {
  276. //生成LIS条码
  277. var lisRequests = await _lisRequestManager.SetLisRequestAsync(input.PatientRegisterId);
  278. await _unitOfWorkManager.Current.SaveChangesAsync();
  279. await _unitOfWorkManager.Current.CompleteAsync();
  280. //检索条码数据
  281. using (var uow = _unitOfWorkManager.Begin(
  282. requiresNew: false, isTransactional: false
  283. ))
  284. {
  285. var query = (from patient in await _patientRepository.GetQueryableAsync()
  286. join patientRegister in await _patientRegisterRepository.GetQueryableAsync()
  287. on patient.Id equals patientRegister.PatientId
  288. join sex in await _sexRegisterRepository.GetQueryableAsync() on patientRegister.SexId equals sex.Id
  289. join registerCheckAsbitem in await _registerCheckAsbitemRepository.GetQueryableAsync() on patientRegister.Id equals registerCheckAsbitem.PatientRegisterId
  290. join asbitem in await _asbitemRepository.GetQueryableAsync() on registerCheckAsbitem.AsbitemId equals asbitem.Id
  291. join lisRequest in await _lisRequestRepository.GetQueryableAsync() on registerCheckAsbitem.LisRequestId equals lisRequest.Id
  292. join sampleContainer in await _sampleContainerRepository.GetQueryableAsync() on lisRequest.SampleContainerId equals sampleContainer.Id into dd
  293. from sampleContainerHaveEmpty in dd.DefaultIfEmpty()
  294. join sampleType in await _sampleTypeRepository.GetQueryableAsync() on lisRequest.SampleTypeId equals sampleType.Id into ee
  295. from sampleTypeHaveEmpty in ee.DefaultIfEmpty()
  296. join sampleGroupDetail in await _sampleGroupDetailRepository.GetQueryableAsync() on asbitem.Id equals sampleGroupDetail.AsbitemId into sampleGroupDetailTemp
  297. from sampleTypeHaveEmptyHaveEmpty in sampleGroupDetailTemp.DefaultIfEmpty()
  298. join sampleGroup in await _sampleGroupRepository.GetQueryableAsync()
  299. on sampleTypeHaveEmptyHaveEmpty.SampleGroupId equals sampleGroup.Id into sampleGroupTemp
  300. from sampleGroupHaveEmpty in sampleGroupTemp.DefaultIfEmpty()
  301. where (patientRegister.Id == input.PatientRegisterId && registerCheckAsbitem.LisRequestId != null)
  302. select new
  303. {
  304. patient,
  305. patientRegister,
  306. sex,
  307. registerCheckAsbitem,
  308. asbitem,
  309. lisRequest,
  310. sampleContainerHaveEmpty,
  311. sampleTypeHaveEmpty,
  312. sampleGroupName = sampleGroupHaveEmpty != null ? sampleGroupHaveEmpty.DisplayName : "",
  313. samplePrintCount = sampleGroupHaveEmpty != null ? sampleGroupHaveEmpty.SamplePrintCount : 0
  314. }
  315. ).ToList();
  316. if (query.Count == 0)
  317. {
  318. return new List<LisRequestReportDto>();
  319. }
  320. lisRequests = query.Select(o => o.lisRequest).Distinct().ToList();
  321. //发送第三方LIS申请
  322. if (lisRequests != null)
  323. {
  324. foreach (var lisRequest in lisRequests)
  325. {
  326. await _lisRequestManager.SendThirdLisRequestAsync(lisRequest.Id);
  327. }
  328. }
  329. var lisRequestReportDtoList = query.Select(o => new LisRequestReportDto
  330. {
  331. LisRequestId = o.lisRequest.Id,
  332. PatientNo = o.patient.PatientNo,
  333. Age = o.patientRegister.Age,
  334. AsbitemNames = string.IsNullOrEmpty(o.asbitem.ShortName) ? o.asbitem.DisplayName : o.asbitem.ShortName,
  335. LisRequestNo = o.lisRequest.LisRequestNo,
  336. PatientName = o.patientRegister.PatientName,
  337. PatientRegisterNo = o.patientRegister.PatientRegisterNo,
  338. SampleContainerName = (o.sampleContainerHaveEmpty == null) ? "" : o.sampleContainerHaveEmpty.DisplayName,
  339. ContainerColor = (o.sampleContainerHaveEmpty == null) ? 16777215 : o.sampleContainerHaveEmpty.ContainerColor,
  340. SampleContainerRemark = (o.sampleContainerHaveEmpty == null) ? "" : o.sampleContainerHaveEmpty.ContainerRemark,
  341. SampleTypeName = (o.sampleTypeHaveEmpty == null) ? "" : o.sampleTypeHaveEmpty.DisplayName,
  342. SexName = o.sex.DisplayName,
  343. CustomerOrgName = _cacheService.GetTopCustomerOrgShortNameAsync(o.patientRegister.CustomerOrgId).Result,
  344. DepartmentName = _cacheService.GetAllDepartmentNameAsync(o.patientRegister.CustomerOrgId).Result,
  345. IsPrint = o.lisRequest.IsPrint,
  346. IsSignIn = o.lisRequest.IsSignIn,
  347. SamplingTime = o.lisRequest.SamplingTime,
  348. SignInOrder = o.lisRequest.SignInOrder,
  349. SignInPerson = o.lisRequest.SignInPerson,
  350. SignInTime = o.lisRequest.SignInTime,
  351. SampleGroupName = o.sampleGroupName,
  352. MobileTelephone = o.patient.MobileTelephone,
  353. SamplePrintCount = o.samplePrintCount
  354. }).ToList();
  355. var lisRequestNoPrintMode = await _sysParmValueManager.GetSysParmValueAsync(query.FirstOrDefault().patientRegister.MedicalCenterId, "lis_request_no_print_mode");
  356. if (string.IsNullOrWhiteSpace(lisRequestNoPrintMode))
  357. lisRequestNoPrintMode = "0";
  358. //var entlist = lisRequestReportDtoList.GroupBy(g => new
  359. //{
  360. // g.LisRequestNo,
  361. // g.SampleGroupName
  362. //})
  363. // .Select(s => new LisRequestReportDto
  364. // {
  365. // PatientNo = s.FirstOrDefault().PatientNo,
  366. // LisRequestId = s.FirstOrDefault().LisRequestId,
  367. // SexName = s.FirstOrDefault().SexName,
  368. // SampleTypeName = s.FirstOrDefault().SampleTypeName,
  369. // SampleContainerRemark = s.FirstOrDefault().SampleContainerRemark,
  370. // SampleContainerName = s.FirstOrDefault().SampleContainerName,
  371. // ContainerColor = s.FirstOrDefault().ContainerColor,
  372. // PatientRegisterNo = s.FirstOrDefault().PatientRegisterNo,
  373. // PatientName = s.FirstOrDefault().PatientName,
  374. // Age = s.FirstOrDefault().Age,
  375. // LisRequestNo = lisRequestNoPrintMode == "0" ? s.Key.LisRequestNo : s.FirstOrDefault().PatientRegisterNo,
  376. // CustomerOrgName = s.FirstOrDefault().CustomerOrgName,
  377. // DepartmentName = s.FirstOrDefault().DepartmentName,
  378. // AsbitemNames = string.Join(",", s.Select(d => d.AsbitemNames)),
  379. // IsPrint = s.FirstOrDefault().IsPrint,
  380. // IsSignIn = s.FirstOrDefault().IsSignIn,
  381. // SamplingTime = s.FirstOrDefault().SamplingTime,
  382. // SignInOrder = s.FirstOrDefault().SignInOrder,
  383. // SignInPerson = s.FirstOrDefault().SignInPerson,
  384. // SignInTime = s.FirstOrDefault().SignInTime,
  385. // SampleGroupName = s.Key.SampleGroupName,
  386. // MobileTelephone = s.FirstOrDefault().MobileTelephone,
  387. // SamplePrintCount = s.FirstOrDefault().SamplePrintCount
  388. // }).ToList();
  389. var entlist = lisRequestReportDtoList.GroupBy(g => new
  390. {
  391. g.PatientNo,
  392. g.LisRequestId,
  393. g.LisRequestNo,
  394. g.Age,
  395. g.PatientName,
  396. g.PatientRegisterNo,
  397. g.SampleContainerName,
  398. g.ContainerColor,
  399. g.SampleContainerRemark,
  400. g.SampleTypeName,
  401. g.SexName,
  402. g.CustomerOrgName,
  403. g.DepartmentName,
  404. g.IsPrint,
  405. g.IsSignIn,
  406. g.SamplingTime,
  407. g.SignInOrder,
  408. g.SignInPerson,
  409. g.SignInTime,
  410. g.MobileTelephone,
  411. g.SampleGroupName
  412. })
  413. .Select(s => new LisRequestReportDto
  414. {
  415. PatientNo = s.Key.PatientNo,
  416. LisRequestId = s.Key.LisRequestId,
  417. SexName = s.Key.SexName,
  418. SampleTypeName = s.Key.SampleTypeName,
  419. SampleContainerRemark = s.Key.SampleContainerRemark,
  420. SampleContainerName = s.Key.SampleContainerName,
  421. ContainerColor = s.Key.ContainerColor,
  422. PatientRegisterNo = s.Key.PatientRegisterNo,
  423. PatientName = s.Key.PatientName,
  424. Age = s.Key.Age,
  425. LisRequestNo = lisRequestNoPrintMode == "0" ? s.Key.LisRequestNo : s.Key.PatientRegisterNo,
  426. CustomerOrgName = s.Key.CustomerOrgName,
  427. DepartmentName = s.Key.DepartmentName,
  428. AsbitemNames = string.Join(",", s.Select(d => d.AsbitemNames)),
  429. IsPrint = s.Key.IsPrint,
  430. IsSignIn = s.Key.IsSignIn,
  431. SamplingTime = s.Key.SamplingTime,
  432. SignInOrder = s.Key.SignInOrder,
  433. SignInPerson = s.Key.SignInPerson,
  434. SignInTime = s.Key.SignInTime,
  435. SampleGroupName = s.Key.SampleGroupName,
  436. MobileTelephone = s.Key.MobileTelephone,
  437. SamplePrintCount = s.FirstOrDefault().SamplePrintCount
  438. }).ToList();
  439. await uow.CompleteAsync();
  440. return entlist;
  441. }
  442. }
  443. /// <summary>
  444. /// 单个打印检验条码
  445. /// </summary>
  446. /// <param name="input"></param>
  447. /// <returns></returns>
  448. [HttpPost("api/app/PrintReport/GetLisRequestReportByLisRequestId")]
  449. public async Task<LisRequestReportDto> GetLisRequestReportByLisRequestIdAsync(LisRequestIdInputDto input)
  450. {
  451. var lisRequestNoPrintMode = await _sysParmValueManager.GetSysParmValueAsync(Guid.Empty, "lis_request_no_print_mode");
  452. if (string.IsNullOrWhiteSpace(lisRequestNoPrintMode))
  453. lisRequestNoPrintMode = "0";
  454. var list = (from patient in await _patientRepository.GetQueryableAsync()
  455. join patientRegister in await _patientRegisterRepository.GetQueryableAsync()
  456. on patient.Id equals patientRegister.PatientId
  457. join registerCheck in await _registerCheckRepository.GetQueryableAsync()
  458. on patientRegister.Id equals registerCheck.PatientRegisterId
  459. join registerCheckAsbitem in await _registerCheckAsbitemRepository.GetQueryableAsync()
  460. on registerCheck.Id equals registerCheckAsbitem.RegisterCheckId
  461. join asbitem in await _asbitemRepository.GetQueryableAsync()
  462. on registerCheckAsbitem.AsbitemId equals asbitem.Id
  463. join lisRequest in await _lisRequestReportRepository.GetQueryableAsync()
  464. on registerCheckAsbitem.LisRequestId equals lisRequest.Id
  465. join sampleContainer in await _sampleContainerRepository.GetQueryableAsync()
  466. on lisRequest.SampleContainerId equals sampleContainer.Id
  467. join sampleType in await _sampleTypeRepository.GetQueryableAsync()
  468. on lisRequest.SampleTypeId equals sampleType.Id
  469. join sampleGroupDetail in await _sampleGroupDetailRepository.GetQueryableAsync() on asbitem.Id equals sampleGroupDetail.AsbitemId into sampleGroupDetailTemp
  470. from sampleTypeHaveEmptyHaveEmpty in sampleGroupDetailTemp.DefaultIfEmpty()
  471. join sampleGroup in await _sampleGroupRepository.GetQueryableAsync() on sampleTypeHaveEmptyHaveEmpty.SampleGroupId equals sampleGroup.Id into sampleGroupTemp
  472. from sampleGroupHaveEmpty in sampleGroupTemp.DefaultIfEmpty()
  473. where lisRequest.Id == input.LisRequestId
  474. select new
  475. {
  476. patient,
  477. patientRegister,
  478. asbitem,
  479. lisRequest,
  480. sampleContainer,
  481. sampleType,
  482. sampleGroupName = sampleGroupHaveEmpty != null ? sampleGroupHaveEmpty.DisplayName : "",
  483. samplePrintCount = sampleGroupHaveEmpty != null ? sampleGroupHaveEmpty.SamplePrintCount : 1
  484. }).Distinct().ToList();
  485. if (!list.Any())
  486. {
  487. return null;
  488. }
  489. var lisRequestDtoList = new List<LisRequestReportDto>();
  490. var lisRequestInfo = list.First();
  491. var lisRequestDto = new LisRequestReportDto()
  492. {
  493. LisRequestId = input.LisRequestId,
  494. LisRequestNo = lisRequestNoPrintMode == "0" ? lisRequestInfo.lisRequest.LisRequestNo : lisRequestInfo.patientRegister.PatientRegisterNo,
  495. PatientNo = lisRequestInfo.patient.PatientNo,
  496. PatientRegisterNo = lisRequestInfo.patientRegister.PatientRegisterNo,
  497. PatientName = lisRequestInfo.patientRegister.PatientName,
  498. SexName = _cacheService.GetSexNameAsync(lisRequestInfo.patientRegister.SexId).Result,
  499. Age = lisRequestInfo.patientRegister.Age,
  500. IsPrint = lisRequestInfo.lisRequest.IsPrint,
  501. IsSignIn = lisRequestInfo.lisRequest.IsSignIn,
  502. SamplingTime = lisRequestInfo.lisRequest.SamplingTime,
  503. SignInOrder = lisRequestInfo.lisRequest.SignInOrder,
  504. SignInPerson = lisRequestInfo.lisRequest.SignInPerson,
  505. SignInTime = lisRequestInfo.lisRequest.SignInTime,
  506. SampleTypeName = lisRequestInfo.sampleType.DisplayName,
  507. SampleContainerName = lisRequestInfo.sampleContainer.DisplayName,
  508. ContainerColor = lisRequestInfo.sampleContainer.ContainerColor,
  509. SampleContainerRemark = lisRequestInfo.sampleContainer.ContainerRemark,
  510. AsbitemNames = string.Join(",", list.OrderBy(o => o.asbitem.DisplayOrder).Select(o => o.asbitem.DisplayName).Distinct()),
  511. CustomerOrgName = _cacheService.GetTopCustomerOrgShortNameAsync(lisRequestInfo.patientRegister.CustomerOrgId).Result,
  512. DepartmentName = _cacheService.GetAllDepartmentNameAsync(lisRequestInfo.patientRegister.CustomerOrgId).Result,
  513. SampleGroupName = lisRequestInfo.sampleGroupName,
  514. MobileTelephone = lisRequestInfo.patient.MobileTelephone,
  515. SamplePrintCount = lisRequestInfo.samplePrintCount
  516. };
  517. return lisRequestDto;
  518. }
  519. /// <summary>
  520. /// 打印体检报告
  521. /// </summary>
  522. /// <returns></returns>
  523. [HttpPost("api/app/PrintReport/GetMedicalReport")]
  524. public async Task<MedicalReportDto> GetMedicalReportAsync(PatientRegisterIdInputDto input)
  525. {
  526. var patientRegister = (await _patientRegisterRepository.GetQueryableAsync())
  527. .Include(x => x.Patient)
  528. .Where(m => m.Id == input.PatientRegisterId).FirstOrDefault();
  529. if (patientRegister == null)
  530. {
  531. throw new UserFriendlyException("人员登记信息不存在");
  532. }
  533. var medicalReportDto = await GetMedicalReportDto(patientRegister);
  534. //获取综述
  535. medicalReportDto.SumSummarys = await GetMedicalReportSummaryDtos(patientRegister);
  536. //获取建议
  537. medicalReportDto.SumSuggestions = await GetMedicalReportSuggestinoDtos(patientRegister);
  538. //设置明细结果
  539. await SetMedicalReportRegisterChecks(patientRegister, medicalReportDto);
  540. return medicalReportDto;
  541. }
  542. /// <summary>
  543. /// 获取职业病体检报告
  544. /// </summary>
  545. /// <param name="input"></param>
  546. /// <returns></returns>
  547. [HttpPost("api/app/PrintReport/GetOccupationalDiseaseMedicalReport")]
  548. public async Task<OccupationalDiseaseMedicalReportDto> GetOccupationalDiseaseMedicalReportAsync(PatientRegisterIdInputDto input)
  549. {
  550. var result = new OccupationalDiseaseMedicalReportDto();
  551. var patientOccupationalDiseaseEnt = (from patientOccupationalDisease in await _patientOccupationalDiseaseRepository.GetQueryableAsync()
  552. join ocCheckType in await _ocCheckTypeRepository.GetQueryableAsync() on patientOccupationalDisease.OcCheckTypeId equals ocCheckType.Id
  553. where patientOccupationalDisease.PatientRegisterId == input.PatientRegisterId
  554. select new
  555. {
  556. ocCheckTypeName = ocCheckType.DisplayName,
  557. patientOccupationalDisease
  558. }).FirstOrDefault();
  559. if (patientOccupationalDiseaseEnt == null)
  560. {
  561. throw new UserFriendlyException("当前人员无职业病信息");
  562. }
  563. //基础报告信息
  564. var medicalReportDto = await GetMedicalReportAsync(input);
  565. result = ObjectMapper.Map<MedicalReportDto, OccupationalDiseaseMedicalReportDto>(medicalReportDto);
  566. #region 检查类别
  567. var ocCheckTypeList = (await _ocCheckTypeRepository.GetQueryableAsync()).OrderBy(o => o.DisplayOrder);
  568. if (ocCheckTypeList.Any())
  569. {
  570. result.OcCheckTypeDtos = ocCheckTypeList.Select(s => new OccupationalDiseaseMedicalReport_OcCheckTypeDto
  571. {
  572. DisplayName = s.DisplayName,
  573. DisplayOrder = s.DisplayOrder,
  574. OcCheckTypeId = s.Id,
  575. SimpleCode = s.SimpleCode
  576. }).ToList();
  577. }
  578. #endregion
  579. #region 职业病基本信息
  580. result.PatientOccupationalDisease = new OccupationalDiseaseMedicalReport_PatientOccupationalDiseaseDto
  581. {
  582. OcCheckTypeName = patientOccupationalDiseaseEnt.ocCheckTypeName,
  583. AbnormalTimes = patientOccupationalDiseaseEnt.patientOccupationalDisease.AbnormalTimes,
  584. AbortionTimes = patientOccupationalDiseaseEnt.patientOccupationalDisease.AbortionTimes,
  585. ChildrenNum = patientOccupationalDiseaseEnt.patientOccupationalDisease.ChildrenNum,
  586. DrinkFlag = patientOccupationalDiseaseEnt.patientOccupationalDisease.DrinkFlag,
  587. DrinkNum = patientOccupationalDiseaseEnt.patientOccupationalDisease.DrinkNum,
  588. DrinkNumMax = patientOccupationalDiseaseEnt.patientOccupationalDisease.DrinkNum != null ? patientOccupationalDiseaseEnt.patientOccupationalDisease.DrinkNum.Value + 50 : null,
  589. DrinkYears = patientOccupationalDiseaseEnt.patientOccupationalDisease.DrinkYears,
  590. FirstMenstruation = patientOccupationalDiseaseEnt.patientOccupationalDisease.FirstMenstruation,
  591. HandleSuggestion = patientOccupationalDiseaseEnt.patientOccupationalDisease.HandleSuggestion,
  592. JobType = patientOccupationalDiseaseEnt.patientOccupationalDisease.JobType,
  593. LastMenstrualPeriodDate = DataHelper.ConversionDateShortToString(patientOccupationalDiseaseEnt.patientOccupationalDisease.LastMenstrualPeriodDate),
  594. MenstruationCycle = patientOccupationalDiseaseEnt.patientOccupationalDisease.MenstruationCycle,
  595. MenstruationEndAge = patientOccupationalDiseaseEnt.patientOccupationalDisease.MenstruationEndAge,
  596. MenstruationFlag = patientOccupationalDiseaseEnt.patientOccupationalDisease.MenstruationFlag,
  597. MenstruationTimeLength = patientOccupationalDiseaseEnt.patientOccupationalDisease.MenstruationTimeLength,
  598. NoOccupAbSuggestion = patientOccupationalDiseaseEnt.patientOccupationalDisease.NoOccupAbSuggestion,
  599. NoOccupationalAbnormal = patientOccupationalDiseaseEnt.patientOccupationalDisease.NoOccupationalAbnormal,
  600. OcCheckTypeId = patientOccupationalDiseaseEnt.patientOccupationalDisease.OcCheckTypeId,
  601. OccupationalAbnormal = patientOccupationalDiseaseEnt.patientOccupationalDisease.OccupationalAbnormal,
  602. OccupationalAbSuggestion = patientOccupationalDiseaseEnt.patientOccupationalDisease.OccupationalAbSuggestion,
  603. Other = patientOccupationalDiseaseEnt.patientOccupationalDisease.Other,
  604. PoisonWorkTime = patientOccupationalDiseaseEnt.patientOccupationalDisease.PoisonWorkTime,
  605. PrematureBirthTimes = patientOccupationalDiseaseEnt.patientOccupationalDisease.PrematureBirthTimes,
  606. FamilyGeneticHistory = patientOccupationalDiseaseEnt.patientOccupationalDisease.FamilyGeneticHistory,
  607. RiskFactors = patientOccupationalDiseaseEnt.patientOccupationalDisease.RiskFactors,
  608. SmokeFlag = patientOccupationalDiseaseEnt.patientOccupationalDisease.SmokeFlag,
  609. SmokeNum = patientOccupationalDiseaseEnt.patientOccupationalDisease.SmokeNum,
  610. SmokeNumMax = patientOccupationalDiseaseEnt.patientOccupationalDisease.SmokeNum != null ? patientOccupationalDiseaseEnt.patientOccupationalDisease.SmokeNum + 5 : null,
  611. SmokeYears = patientOccupationalDiseaseEnt.patientOccupationalDisease.SmokeYears,
  612. StillbirthTimes = patientOccupationalDiseaseEnt.patientOccupationalDisease.StillbirthTimes,
  613. TotalWorkTime = patientOccupationalDiseaseEnt.patientOccupationalDisease.TotalWorkTime
  614. };
  615. #endregion
  616. #region 职业史
  617. var patientOccupationalHistoryList = (await _patientOccupationalHistoryRepository.GetQueryableAsync()).Where(m => m.PatientRegisterId == input.PatientRegisterId)
  618. .OrderBy(o => o.CreationTime).ToList();
  619. result.PatientOccupationalHistoryDtos = patientOccupationalHistoryList.Select(s => new OccupationalDiseaseMedicalReport_PatientOccupationalHistoryDto
  620. {
  621. BeginDate = DataHelper.ConversionDateShortToString(s.BeginDate),
  622. EndDate = DataHelper.ConversionDateShortToString(s.EndDate),
  623. Org = s.Org,
  624. Poison = s.Poison,
  625. ProtectiveMeasures = s.ProtectiveMeasures,
  626. WorkShop = s.WorkShop,
  627. WorkType = s.WorkType,
  628. DisplayOrder = patientOccupationalHistoryList.IndexOf(s) + 1
  629. }).ToList();
  630. #endregion
  631. #region 毒害因素
  632. var patientPoisonDtoList = (from patientPoison in await _patientPoisonRepository.GetQueryableAsync()
  633. join poison in await _poisonRepository.GetQueryableAsync() on patientPoison.PoisonId equals poison.Id into poisonTemp
  634. from poisonHaveEmpty in poisonTemp.DefaultIfEmpty()
  635. join occupationalAbnormal in await _occupationalAbnormalRepository.GetQueryableAsync() on patientPoison.OccupationalAbnormalId equals occupationalAbnormal.Id into occupationalAbnormalTemp
  636. from occupationalAbnormalHaveEmpty in occupationalAbnormalTemp.DefaultIfEmpty()
  637. where patientPoison.PatientRegisterId == input.PatientRegisterId
  638. orderby patientPoison.CreationTime ascending
  639. select new
  640. {
  641. OccupationalAbnormalName = occupationalAbnormalHaveEmpty != null ? occupationalAbnormalHaveEmpty.DisplayName : "",
  642. PoisonName = poisonHaveEmpty != null ? poisonHaveEmpty.DisplayName : ""
  643. }).ToList();
  644. result.PatientPoisonDtos = patientPoisonDtoList.Select(s => new OccupationalDiseaseMedicalReport_PatientPoisonDto
  645. {
  646. OccupationalAbnormalName = s.OccupationalAbnormalName,
  647. PoisonName = s.PoisonName,
  648. DisplayOrder = patientPoisonDtoList.IndexOf(s) + 1
  649. }).ToList();
  650. #endregion
  651. #region 职业病症状
  652. var patientSymptomList = (from patientSymptom in await _patientSymptomRepository.GetQueryableAsync()
  653. join symptom in await _symptomRepository.GetQueryableAsync() on patientSymptom.SymptomId equals symptom.Id into symptomTemp
  654. from symptomHaveEmpty in symptomTemp.DefaultIfEmpty()
  655. where patientSymptom.PatientRegisterId == input.PatientRegisterId
  656. orderby patientSymptom.CreationTime ascending
  657. select new
  658. {
  659. patientSymptom,
  660. SymptomName = symptomHaveEmpty != null ? symptomHaveEmpty.DisplayName : ""
  661. }).ToList();
  662. result.PatientSymptomDtos = patientSymptomList.Select(s => new OccupationalDiseaseMedicalReport_PatientSymptomDto
  663. {
  664. Degree = s.patientSymptom.Degree,
  665. SymptomName = s.SymptomName,
  666. TimeLength = s.patientSymptom.TimeLength,
  667. DisplayOrder = patientSymptomList.IndexOf(s) + 1
  668. }).ToList();
  669. #endregion
  670. #region 职业病史
  671. var patientOccupationalMedicalHistoryList = (await _patientOccupationalMedicalHistoryRepository.GetQueryableAsync())
  672. .Where(m => m.PatientRegisterId == input.PatientRegisterId).OrderBy(o => o.CreationTime).ToList();
  673. result.PatientOccupationalMedicalHistoryDtos = patientOccupationalMedicalHistoryList.Select(s => new OccupationalDiseaseMedicalReport_PatientOccupationalMedicalHistoryDto
  674. {
  675. DiagnosisDate = DataHelper.ConversionDateShortToString(s.DiagnosisDate),
  676. DiagnosisHospital = s.DiagnosisHospital,
  677. IsRecovery = s.IsRecovery == 'Y' ? "治愈" : "未愈",
  678. OccupationalDisease = s.OccupationalDisease,
  679. TreatmentMethods = s.TreatmentMethods,
  680. DisplayOrder = patientOccupationalMedicalHistoryList.IndexOf(s) + 1
  681. }).ToList();
  682. #endregion
  683. #region 既往病史
  684. var patientPastMedicalHistoryList = (await _patientPastMedicalHistoryRepository.GetQueryableAsync())
  685. .Where(m => m.PatientRegisterId == input.PatientRegisterId).OrderBy(o => o.CreationTime).ToList();
  686. result.PatientPastMedicalHistoryDtos = patientPastMedicalHistoryList.Select(s => new OccupationalDiseaseMedicalReport_PatientOccupationalMedicalHistoryDto
  687. {
  688. DiagnosisDate = DataHelper.ConversionDateShortToString(s.DiagnosisDate),
  689. DiagnosisHospital = s.DiagnosisHospital,
  690. IsRecovery = s.IsRecovery == 'Y' ? "治愈" : "未愈",
  691. OccupationalDisease = s.OccupationalDisease,
  692. TreatmentMethods = s.TreatmentMethods,
  693. DisplayOrder = patientPastMedicalHistoryList.IndexOf(s) + 1
  694. }).ToList();
  695. #endregion
  696. return result;
  697. }
  698. /// <summary>
  699. /// 打印Pacs条码数据
  700. /// </summary>
  701. /// <param name="input"></param>
  702. /// <returns></returns>
  703. [HttpPost("api/app/PrintReport/getpacsnoreport")]
  704. public async Task<List<PacsNoReportDto>> GetPacsNoReportAsync(PatientRegisterIdInputDto input)
  705. {
  706. var query = (from patientRegister in await _patientRegisterRepository.GetQueryableAsync()
  707. join patient in await _patientRepository.GetQueryableAsync() on patientRegister.PatientId equals patient.Id
  708. join registerCheck in await _registerCheckRepository.GetQueryableAsync() on patientRegister.Id equals registerCheck.PatientRegisterId
  709. join registerCheckAsbitem in await _registerCheckAsbitemRepository.GetQueryableAsync() on registerCheck.Id equals registerCheckAsbitem.RegisterCheckId
  710. join asbitem in await _asbitemRepository.GetQueryableAsync() on registerCheckAsbitem.AsbitemId equals asbitem.Id into asbitemTemp
  711. from asbitemHaveEmpty in asbitemTemp.DefaultIfEmpty()
  712. join itemType in await _itemTypeRepository.GetQueryableAsync() on asbitemHaveEmpty.ItemTypeId equals itemType.Id into itemTypeTemp
  713. from itemTypeHaveEmpty in itemTypeTemp.DefaultIfEmpty()
  714. where (patientRegister.Id == input.PatientRegisterId
  715. && !string.IsNullOrEmpty(registerCheck.CheckRequestNo)
  716. && asbitemHaveEmpty.BarcodeMode != BarcodeModeFlag.NoPrint
  717. )
  718. select new
  719. {
  720. Age = patientRegister.Age,
  721. AsbitemName = asbitemHaveEmpty.DisplayName,
  722. CheckRequestNo = registerCheck.CheckRequestNo,
  723. RegisterCheckId = registerCheck.Id,
  724. PatientName = patientRegister.PatientName,
  725. PatientRegisterNo = patientRegister.PatientRegisterNo,
  726. SexName = _cacheService.GetSexNameAsync(patientRegister.SexId).Result,
  727. IsCheckRequest = itemTypeHaveEmpty != null ? itemTypeHaveEmpty.IsCheckRequest : 'N',
  728. BarcodeMode = asbitemHaveEmpty != null ? asbitemHaveEmpty.BarcodeMode : '0',
  729. CustomerOrgId = patientRegister.CustomerOrgId,
  730. MobileTelephone = patient.MobileTelephone
  731. }).ToList();
  732. var queryGroup = query.GroupBy(g => g.CheckRequestNo);
  733. List<PacsNoReportDto> pacsNoReportDtos = new List<PacsNoReportDto>();
  734. foreach (var s in queryGroup)
  735. {
  736. if (s.Where(m => m.BarcodeMode == '0' && m.IsCheckRequest == 'Y').Count() > 0)
  737. {
  738. pacsNoReportDtos.Add(new PacsNoReportDto
  739. {
  740. Age = s.FirstOrDefault().Age,
  741. AsbitemName = string.Join(',', s.Select(s => s.AsbitemName)),
  742. CheckRequestNo = s.FirstOrDefault().CheckRequestNo,
  743. RegisterCheckId = s.FirstOrDefault().RegisterCheckId,
  744. PatientName = s.FirstOrDefault().PatientName,
  745. PatientRegisterNo = s.FirstOrDefault().PatientRegisterNo,
  746. SexName = s.FirstOrDefault().SexName,
  747. CustomerOrgName = _cacheService.GetTopCustomerOrgShortNameAsync(s.FirstOrDefault().CustomerOrgId).Result,
  748. DepartmentName = _cacheService.GetAllDepartmentNameAsync(s.FirstOrDefault().CustomerOrgId).Result,
  749. MobileTelephone = s.FirstOrDefault().MobileTelephone
  750. });
  751. }
  752. else if (s.Where(m => m.BarcodeMode == '1').Count() > 0)
  753. {
  754. pacsNoReportDtos.Add(new PacsNoReportDto
  755. {
  756. Age = s.FirstOrDefault().Age,
  757. AsbitemName = string.Join(',', s.Select(s => s.AsbitemName)),
  758. CheckRequestNo = s.FirstOrDefault().PatientRegisterNo,
  759. RegisterCheckId = s.FirstOrDefault().RegisterCheckId,
  760. PatientName = s.FirstOrDefault().PatientName,
  761. PatientRegisterNo = s.FirstOrDefault().PatientRegisterNo,
  762. SexName = s.FirstOrDefault().SexName,
  763. CustomerOrgName = _cacheService.GetTopCustomerOrgShortNameAsync(s.FirstOrDefault().CustomerOrgId).Result,
  764. DepartmentName = _cacheService.GetAllDepartmentNameAsync(s.FirstOrDefault().CustomerOrgId).Result,
  765. MobileTelephone = s.FirstOrDefault().MobileTelephone
  766. });
  767. }
  768. }
  769. return pacsNoReportDtos;
  770. }
  771. /// <summary>
  772. /// 打印Pacs条码数据 单个条码打印
  773. /// </summary>
  774. /// <param name="input"></param>
  775. /// <returns></returns>
  776. [HttpPost("api/app/PrintReport/GetPacsNoReportByCheckRequestNo")]
  777. public async Task<PacsNoReportDto> GetPacsNoReportByCheckRequestNoAsync(RegisterCheckIdInputDto input)
  778. {
  779. PacsNoReportDto pacsNoReportDto = new PacsNoReportDto();
  780. if (input.RegisterCheckId != Guid.Empty)
  781. {
  782. var query = (from patientRegister in await _patientRegisterRepository.GetQueryableAsync()
  783. join registerCheck in await _registerCheckRepository.GetQueryableAsync() on patientRegister.Id equals registerCheck.PatientRegisterId
  784. join registerCheckAsbitem in await _registerCheckAsbitemRepository.GetQueryableAsync() on registerCheck.Id equals registerCheckAsbitem.RegisterCheckId
  785. join asbitem in await _asbitemRepository.GetQueryableAsync() on registerCheckAsbitem.AsbitemId equals asbitem.Id into asbitemTemp
  786. from asbitemHaveEmpty in asbitemTemp.DefaultIfEmpty()
  787. join itemType in await _itemTypeRepository.GetQueryableAsync() on asbitemHaveEmpty.ItemTypeId equals itemType.Id into itemTypeTemp
  788. from itemTypeHaveEmpty in itemTypeTemp.DefaultIfEmpty()
  789. where registerCheck.Id == input.RegisterCheckId
  790. && !string.IsNullOrEmpty(registerCheck.CheckRequestNo)
  791. && asbitemHaveEmpty.BarcodeMode != '2'
  792. select new
  793. {
  794. Age = patientRegister.Age,
  795. AsbitemName = asbitemHaveEmpty.DisplayName,
  796. CheckRequestNo = registerCheck.CheckRequestNo,
  797. PatientName = patientRegister.PatientName,
  798. PatientRegisterNo = patientRegister.PatientRegisterNo,
  799. SexName = _cacheService.GetSexNameAsync(patientRegister.SexId).Result,
  800. IsCheckRequest = itemTypeHaveEmpty != null ? itemTypeHaveEmpty.IsCheckRequest : 'N',
  801. BarcodeMode = asbitemHaveEmpty != null ? asbitemHaveEmpty.BarcodeMode : '0',
  802. CustomerOrgId = patientRegister.CustomerOrgId,
  803. }).ToList();
  804. if (query.Count > 0)
  805. {
  806. var queryGroup = query.GroupBy(g => g.CheckRequestNo).FirstOrDefault();
  807. if (queryGroup.Where(m => m.BarcodeMode == '0' && m.IsCheckRequest == 'Y').Count() > 0)
  808. {
  809. pacsNoReportDto = new PacsNoReportDto
  810. {
  811. Age = queryGroup.FirstOrDefault().Age,
  812. AsbitemName = string.Join(',', queryGroup.Select(s => s.AsbitemName)),
  813. CheckRequestNo = queryGroup.FirstOrDefault().CheckRequestNo,
  814. PatientName = queryGroup.FirstOrDefault().PatientName,
  815. PatientRegisterNo = queryGroup.FirstOrDefault().PatientRegisterNo,
  816. SexName = queryGroup.FirstOrDefault().SexName,
  817. CustomerOrgName = _cacheService.GetTopCustomerOrgShortNameAsync(queryGroup.FirstOrDefault().CustomerOrgId).Result,
  818. DepartmentName = _cacheService.GetAllDepartmentNameAsync(queryGroup.FirstOrDefault().CustomerOrgId).Result
  819. };
  820. }
  821. else if (queryGroup.Where(m => m.BarcodeMode == '1').Count() > 0)
  822. {
  823. pacsNoReportDto = new PacsNoReportDto
  824. {
  825. Age = queryGroup.FirstOrDefault().Age,
  826. AsbitemName = string.Join(',', queryGroup.Select(s => s.AsbitemName)),
  827. CheckRequestNo = queryGroup.FirstOrDefault().PatientRegisterNo,
  828. PatientName = queryGroup.FirstOrDefault().PatientName,
  829. PatientRegisterNo = queryGroup.FirstOrDefault().PatientRegisterNo,
  830. SexName = queryGroup.FirstOrDefault().SexName,
  831. CustomerOrgName = _cacheService.GetTopCustomerOrgShortNameAsync(queryGroup.FirstOrDefault().CustomerOrgId).Result,
  832. DepartmentName = _cacheService.GetAllDepartmentNameAsync(queryGroup.FirstOrDefault().CustomerOrgId).Result
  833. };
  834. }
  835. }
  836. }
  837. return pacsNoReportDto;
  838. }
  839. ///// <summary>
  840. ///// 打印Pacs条码数据
  841. ///// </summary>
  842. ///// <param name="PatientRegisterId"></param>
  843. ///// <returns></returns>
  844. //[HttpPost("api/app/PrintReport/getpacsnoreport")]
  845. //public async Task<List<PacsNoReportDto>> GetPacsNoReportAsync(Guid PatientRegisterId)
  846. //{
  847. // var query = (from patientRegister in await _patientRegisterRepository.GetQueryableAsync()
  848. // join registerCheck in await _registerCheckRepository.GetQueryableAsync() on patientRegister.Id equals registerCheck.PatientRegisterId
  849. // join registerCheckAsbitem in await _registerCheckAsbitemRepository.GetQueryableAsync() on registerCheck.Id equals registerCheckAsbitem.RegisterCheckId
  850. // join asbitem in await _asbitemRepository.GetQueryableAsync() on registerCheckAsbitem.AsbitemId equals asbitem.Id into asbitemTemp
  851. // from asbitemHaveEmpty in asbitemTemp.DefaultIfEmpty()
  852. // join itemType in await _itemTypeRepository.GetQueryableAsync() on asbitemHaveEmpty.ItemTypeId equals itemType.Id into itemTypeTemp
  853. // from itemTypeHaveEmpty in itemTypeTemp.DefaultIfEmpty()
  854. // where (patientRegister.Id == PatientRegisterId && itemTypeHaveEmpty.IsCheckRequest == 'Y')
  855. // select new PacsNoReportDto
  856. // {
  857. // Age = patientRegister.Age,
  858. // AsbitemName = asbitemHaveEmpty.DisplayName,
  859. // CheckRequestNo = registerCheck.CheckRequestNo,
  860. // PatientName = patientRegister.PatientName,
  861. // PatientRegisterNo = patientRegister.PatientRegisterNo,
  862. // SexName = _cacheService.GetSexNameAsync(patientRegister.SexId).Result,
  863. // CustomerOrgName = _cacheService.GetTopCustomerOrgNameAsync(patientRegister.CustomerOrgId).Result,
  864. // DepartmentName = _cacheService.GetCustomerOrgNameAsync(patientRegister.CustomerOrgId).Result
  865. // }).ToList();
  866. // var entList = query.GroupBy(g => g.CheckRequestNo).Select(s => new PacsNoReportDto
  867. // {
  868. // Age = s.FirstOrDefault().Age,
  869. // AsbitemName = string.Join(',', s.Select(s => s.AsbitemName)),
  870. // CheckRequestNo = s.FirstOrDefault().CheckRequestNo,
  871. // PatientName = s.FirstOrDefault().PatientName,
  872. // PatientRegisterNo = s.FirstOrDefault().PatientRegisterNo,
  873. // SexName = s.FirstOrDefault().SexName,
  874. // CustomerOrgName = s.FirstOrDefault().CustomerOrgName,
  875. // DepartmentName = s.FirstOrDefault().DepartmentName
  876. // }).ToList();
  877. // return entList;
  878. //}
  879. /// <summary>
  880. /// 打印收费单
  881. /// </summary>
  882. /// <param name="ChargeId">收费主表ID</param>
  883. /// <returns></returns>
  884. [HttpPost("api/app/PrintReport/getchargereport")]
  885. public async Task<ChargeReportDto> GetChargeReportAsync(Guid ChargeId)
  886. {
  887. return await _chargeReportRepository.GetChargeReportAsync(ChargeId);
  888. }
  889. /// <summary>
  890. /// 获取体检报告人员信息
  891. /// </summary>
  892. /// <param name="patientRegister"></param>
  893. /// <returns></returns>
  894. private async Task<MedicalReportDto> GetMedicalReportDto(PatientRegister patientRegister)
  895. {
  896. #region 系统参数配置
  897. var medicalCenterAddress = await _sysParmValueManager.GetSysParmValueAsync(patientRegister.MedicalCenterId, "medical_center_address");
  898. var medicalCenterFax = await _sysParmValueManager.GetSysParmValueAsync(patientRegister.MedicalCenterId, "medical_center_fax");
  899. var medicalCenterTelphone = await _sysParmValueManager.GetSysParmValueAsync(patientRegister.MedicalCenterId, "medical_center_telphone");
  900. #endregion
  901. #region 人员信息
  902. var medicalReportDto = new MedicalReportDto
  903. {
  904. //个人信息
  905. PatientRegisterId = patientRegister.Id,
  906. IsPersonal = 'N',
  907. CustomerOrgName = _cacheService.GetTopCustomerOrgAsync(patientRegister.CustomerOrgId).Result.DisplayName,
  908. DepartmentName = _cacheService.GetCustomerOrgAsync(patientRegister.CustomerOrgId).Result.DisplayName,
  909. PatientRegisterNo = patientRegister.PatientRegisterNo,
  910. PatientNo = patientRegister.Patient.PatientNo,
  911. PatientName = patientRegister.PatientName,
  912. IdNo = patientRegister.Patient.IdNo,
  913. MedicalTimes = patientRegister.MedicalTimes,
  914. SexName = _cacheService.GetSexNameAsync(patientRegister.SexId).Result,
  915. BirthDate = patientRegister.BirthDate,
  916. Age = patientRegister.Age,
  917. MaritalStatusName = _cacheService.GetMaritalStatusNameAsync(patientRegister.MaritalStatusId).Result,
  918. NationName = _cacheService.GetNationNameAsync(patientRegister.Patient.NationId).Result,
  919. MobileTelephone = patientRegister.Patient.MobileTelephone,
  920. IsVip = patientRegister.IsVip,
  921. MedicalTypeName = _cacheService.GetMedicalTypeNameAsync(patientRegister.MedicalTypeId).Result,
  922. PersonnelTypeName = _cacheService.GetPersonnelTypeNameAsync(patientRegister.PersonnelTypeId).Result,
  923. MedicalStartDate = patientRegister.MedicalStartDate,
  924. SummaryDoctorName = _cacheService.GetSurnameAsync(patientRegister.SummaryDoctorId).Result,
  925. SummaryDate = patientRegister.SummaryDate,
  926. AuditDoctorName = _cacheService.GetSurnameAsync(patientRegister.AuditDoctorId).Result,
  927. AuditDate = patientRegister.AuditDate,
  928. //体检中心信息
  929. MedicalCenterTelphone = medicalCenterTelphone,
  930. MedicalCenterAddress = medicalCenterAddress,
  931. MedicalCenterId = patientRegister.MedicalCenterId,
  932. MedicalCenterName = (await _organizationUnitRepository.GetAsync(patientRegister.MedicalCenterId)).DisplayName,
  933. };
  934. if (patientRegister.CustomerOrgId == GuidFlag.PersonCustomerOrgId)
  935. {
  936. medicalReportDto.IsPersonal = 'Y';
  937. }
  938. if (patientRegister.MedicalPackageId != null)
  939. {
  940. var medicalPackageEnt = await _medicalPackageRepository.FirstOrDefaultAsync(f => f.Id == patientRegister.MedicalPackageId);
  941. if (medicalPackageEnt != null)
  942. {
  943. medicalReportDto.MedicalPackageOrCustomerOrgGroupName = medicalPackageEnt.DisplayName;
  944. }
  945. }
  946. else
  947. {
  948. var customerOrgGroupEnt = await _customerOrgGroupRepository.FirstOrDefaultAsync(f => f.Id == patientRegister.CustomerOrgGroupId);
  949. if (customerOrgGroupEnt != null)
  950. {
  951. medicalReportDto.MedicalPackageOrCustomerOrgGroupName = customerOrgGroupEnt.DisplayName;
  952. }
  953. }
  954. #endregion
  955. return medicalReportDto;
  956. }
  957. /// <summary>
  958. /// 获取体检报告综述
  959. /// </summary>
  960. /// <param name="patientRegister"></param>
  961. /// <returns></returns>
  962. private async Task<List<MedicalReportSumSummaryDto>> GetMedicalReportSummaryDtos(PatientRegister patientRegister)
  963. {
  964. var sumSummarylist = (await _sumSummaryHeaderRepository.GetQueryableAsync())
  965. .Include(x => x.SumSummaryContents)
  966. .Where(m => m.PatientRegisterId == patientRegister.Id).OrderBy(o => o.DisplayOrder).ToList();
  967. var medicalReportSumSummaryDtos = new List<MedicalReportSumSummaryDto>();
  968. if (sumSummarylist.Any())
  969. {
  970. medicalReportSumSummaryDtos = sumSummarylist.Select(s => new MedicalReportSumSummaryDto
  971. {
  972. SummaryTitle = s.SummaryTitle,
  973. SummaryFlag = s.SummaryFlag,
  974. DisplayOrder = s.DisplayOrder,
  975. SummaryContents = s.SumSummaryContents.OrderBy(o => o.DisplayOrder).Select(sa => new MedicalReportSumSummaryContentDto
  976. {
  977. SummaryContent = sa.SummaryContent,
  978. DisplayOrder = sa.DisplayOrder,
  979. }).OrderBy(o => o.DisplayOrder).ToList()
  980. }).OrderBy(o => o.DisplayOrder).ToList();
  981. }
  982. return medicalReportSumSummaryDtos;
  983. }
  984. /// <summary>
  985. /// 获取体检报告建议
  986. /// </summary>
  987. /// <param name="patientRegister"></param>
  988. /// <returns></returns>
  989. private async Task<List<MedicalReportSumSuggestionDto>> GetMedicalReportSuggestinoDtos(PatientRegister patientRegister)
  990. {
  991. var sumSuggestionlist = (await _sumSuggestionHeaderRepository.GetQueryableAsync())
  992. .Include(x => x.SumSuggestionContents)
  993. .Where(m => m.PatientRegisterId == patientRegister.Id).OrderBy(o => o.DisplayOrder).ToList();
  994. var medicalReportSumSuggestionDtos = new List<MedicalReportSumSuggestionDto>();
  995. if (sumSuggestionlist.Any())
  996. {
  997. medicalReportSumSuggestionDtos = sumSuggestionlist.Select(s => new MedicalReportSumSuggestionDto
  998. {
  999. SuggestionTitle = s.SuggestionTitle,
  1000. SuggestionFlag = s.SuggestionFlag,
  1001. DisplayOrder = s.DisplayOrder,
  1002. MedicalInterpretations = s.SumSuggestionContents.
  1003. Where(o => o.SuggestionType == SuggestionTypeFlag.MedicalInterpretation && !string.IsNullOrWhiteSpace(o.SuggestionContent))
  1004. .OrderBy(o => o.DisplayOrder)
  1005. .Select(sa => new MedicalReportSumSuggestionContentDto
  1006. {
  1007. SuggestionContent = sa.SuggestionContent,
  1008. DisplayOrder = sa.DisplayOrder,
  1009. }).OrderBy(o => o.DisplayOrder).ToList(),
  1010. CommonReasons = s.SumSuggestionContents.
  1011. Where(o => o.SuggestionType == SuggestionTypeFlag.CommonReasons && !string.IsNullOrWhiteSpace(o.SuggestionContent))
  1012. .OrderBy(o => o.DisplayOrder)
  1013. .Select(sa => new MedicalReportSumSuggestionContentDto
  1014. {
  1015. SuggestionContent = sa.SuggestionContent,
  1016. DisplayOrder = sa.DisplayOrder,
  1017. }).OrderBy(o => o.DisplayOrder).ToList(),
  1018. HealthGuidances = s.SumSuggestionContents.
  1019. Where(o => o.SuggestionType == SuggestionTypeFlag.HealthGuidance && !string.IsNullOrWhiteSpace(o.SuggestionContent))
  1020. .OrderBy(o => o.DisplayOrder)
  1021. .Select(sa => new MedicalReportSumSuggestionContentDto
  1022. {
  1023. SuggestionContent = sa.SuggestionContent,
  1024. DisplayOrder = sa.DisplayOrder,
  1025. }).OrderBy(o => o.DisplayOrder).ToList()
  1026. })
  1027. .OrderBy(o => o.DisplayOrder).ToList();
  1028. }
  1029. return medicalReportSumSuggestionDtos;
  1030. }
  1031. /// <summary>
  1032. /// 获取体检报告明细结果
  1033. /// </summary>
  1034. /// <param name="patientRegister"></param>
  1035. /// <param name="medicalReportDto"></param>
  1036. /// <returns></returns>
  1037. private async Task SetMedicalReportRegisterChecks(PatientRegister patientRegister, MedicalReportDto medicalReportDto)
  1038. {
  1039. var resultStatusList = (await _resultStatusRepository.GetListAsync());
  1040. //获取体检报告类别
  1041. medicalReportDto.MedicalReportTypes = await GetMedicalReportTypeList();
  1042. //获取项目类别
  1043. medicalReportDto.ItemTypes = await GetItemTypeList();
  1044. var registerChecklist = (from registerCheck in await _registerCheckRepository.GetQueryableAsync()
  1045. join registerAsbitem in await _registerCheckAsbitemRepository.GetQueryableAsync()
  1046. on registerCheck.Id equals registerAsbitem.RegisterCheckId
  1047. join registerCheckItem in await _registerCheckItemRepository.GetQueryableAsync()
  1048. on registerCheck.Id equals registerCheckItem.RegisterCheckId
  1049. join registerCheckPicture in await _registerCheckPictureRepository.GetQueryableAsync()
  1050. on registerCheck.Id equals registerCheckPicture.RegisterCheckId into registerCheckPictureExist
  1051. from registerCheckPictureHaveEmpty in registerCheckPictureExist.DefaultIfEmpty()
  1052. join registerCheckSummary in await _registerCheckSummaryRepository.GetQueryableAsync()
  1053. on registerCheck.Id equals registerCheckSummary.RegisterCheckId into registerCheckSummaryExist
  1054. from registerCheckSummaryHaveEmpty in registerCheckSummaryExist.DefaultIfEmpty()
  1055. join asbitem in await _asbitemRepository.GetQueryableAsync()
  1056. on registerAsbitem.AsbitemId equals asbitem.Id
  1057. join item in await _itemRepository.GetQueryableAsync()
  1058. on registerCheckItem.ItemId equals item.Id
  1059. join itemType in await _itemTypeRepository.GetQueryableAsync()
  1060. on asbitem.ItemTypeId equals itemType.Id
  1061. join medicalReportType in await _medicalReportTypeRepository.GetQueryableAsync()
  1062. on itemType.MedicalReportTypeId equals medicalReportType.Id
  1063. where (registerCheck.PatientRegisterId == patientRegister.Id
  1064. && registerCheck.CompleteFlag == RegisterCheckCompleteFlag.Checked)
  1065. select new
  1066. {
  1067. registerCheck,
  1068. registerAsbitem,
  1069. registerCheckItem,
  1070. registerCheckPictureHaveEmpty,
  1071. registerCheckSummaryHaveEmpty,
  1072. asbitem,
  1073. item,
  1074. itemType,
  1075. medicalReportType
  1076. })
  1077. .OrderBy(o => o.registerCheck.Id)
  1078. .ToList();
  1079. var registerCheckIds = registerChecklist.Select(o => o.registerCheck.Id).Distinct().ToList();
  1080. foreach (var registerCheckId in registerCheckIds)
  1081. {
  1082. var registerCheckRows = registerChecklist.Where(o => o.registerCheck.Id == registerCheckId).ToList();
  1083. //隐藏隐私项目
  1084. if (registerCheckRows.Where(m => m.asbitem.IsPrivacy == 'Y').Count() > 0)
  1085. {
  1086. continue;
  1087. }
  1088. var registerCheckRow = registerCheckRows.First();
  1089. var medicalReportRegisterCheckDto = new MedicalReportRegisterCheckDto()
  1090. {
  1091. ItemTypeId = registerCheckRow.itemType.Id,
  1092. AsbitemNames = string.Join(",", registerCheckRows.
  1093. GroupBy(o => o.asbitem.Id).
  1094. Select(d => d.First().asbitem.DisplayName
  1095. )
  1096. .ToList()
  1097. ),
  1098. CheckDate = (DateTime)registerCheckRow.registerCheck.CheckDate,
  1099. };
  1100. //检查医生
  1101. var checkDoctorId = registerCheckRow.registerCheck.CheckDoctorId;
  1102. if (!string.IsNullOrWhiteSpace(checkDoctorId))
  1103. {
  1104. if (Guid.TryParse(checkDoctorId, out var checkDoctorIdGuid))
  1105. {
  1106. medicalReportRegisterCheckDto.CheckDoctorName = _cacheService.GetSurnameAsync(checkDoctorIdGuid).Result;
  1107. }
  1108. else
  1109. {
  1110. medicalReportRegisterCheckDto.CheckDoctorName = checkDoctorId;
  1111. }
  1112. }
  1113. //lis审核医生+标本号
  1114. medicalReportRegisterCheckDto.LisSampleNo = registerCheckRow.registerCheck.LisSampleNo;
  1115. medicalReportRegisterCheckDto.LisAuditorDoctorName = registerCheckRow.registerCheck.LisAuditorDoctorName;
  1116. //显示顺序
  1117. medicalReportRegisterCheckDto.DisplayOrder = registerCheckRow.asbitem.DisplayOrder;
  1118. //明细结果
  1119. foreach (var registerCheckItemRow in registerCheckRows)
  1120. {
  1121. if (medicalReportRegisterCheckDto.Items.
  1122. Where(o => o.ItemId == registerCheckItemRow.registerCheckItem.ItemId).Count() > 0)
  1123. {
  1124. continue;
  1125. }
  1126. var resultStatus = resultStatusList.Where(o => o.Id == registerCheckItemRow.registerCheckItem.ResultStatusId).FirstOrDefault();
  1127. var medicalReportCheckItemDto = new MedicalReportCheckItemDto()
  1128. {
  1129. ItemId = registerCheckItemRow.registerCheckItem.ItemId,
  1130. ItemName = registerCheckItemRow.item.DisplayName,
  1131. Result = registerCheckItemRow.registerCheckItem.Result,
  1132. ReferenceRangeValue = registerCheckItemRow.registerCheckItem.ReferenceRangeValue,
  1133. CriticalRangeValue = registerCheckItemRow.registerCheckItem.CriticalRangeValue,
  1134. Unit = registerCheckItemRow.registerCheckItem.Unit,
  1135. ReportFontColor = (resultStatus == null) ? 0 : resultStatus.ReportFontColor,
  1136. ReportBackgroundColor = (resultStatus == null) ? 16579836 : resultStatus.ReportBackgroundColor,
  1137. ReportPrompt = (resultStatus == null) ? null : resultStatus.ReportPrompt,
  1138. DisplayOrder = registerCheckItemRow.item.DisplayOrder,
  1139. };
  1140. medicalReportRegisterCheckDto.Items.Add(medicalReportCheckItemDto);
  1141. }
  1142. //小结
  1143. //medicalReportRegisterCheckDto.Summarys = registerCheckRows.Select(o => new MedicalReportCheckAsbitemSummaryDto()
  1144. //{
  1145. // Summary = o.registerCheckSummaryHaveEmpty.Summary,
  1146. // DisplayOrder = o.registerCheckSummaryHaveEmpty.DisplayOrder
  1147. //}).OrderBy(o => o.DisplayOrder).Distinct().ToList();
  1148. medicalReportRegisterCheckDto.Summarys = registerCheckRows.Where(o => o.registerCheckSummaryHaveEmpty != null)
  1149. .GroupBy(g => g.registerCheckSummaryHaveEmpty.Id)
  1150. .Select(o => new MedicalReportCheckAsbitemSummaryDto()
  1151. {
  1152. Summary = o.FirstOrDefault().registerCheckSummaryHaveEmpty.Summary,
  1153. DisplayOrder = o.FirstOrDefault().registerCheckSummaryHaveEmpty.DisplayOrder
  1154. }).OrderBy(o => o.DisplayOrder).Distinct().ToList();
  1155. //图片
  1156. var registerCheckPictures = registerCheckRows.Where(o => o.registerCheckPictureHaveEmpty != null &&
  1157. o.registerCheckPictureHaveEmpty.IsPrint == 'Y')
  1158. .Select(o => new
  1159. {
  1160. PictureFilename = o.registerCheckPictureHaveEmpty.PictureFilename,
  1161. DisplayOrder = o.registerCheckPictureHaveEmpty.DisplayOrder,
  1162. PictureFileType = o.registerCheckPictureHaveEmpty.PictureFileType
  1163. }).OrderBy(o => o.DisplayOrder).Distinct().ToList();
  1164. foreach (var registerCheckPicture in registerCheckPictures)
  1165. {
  1166. var medicalReportCheckPictureDto = new MedicalReportCheckPictureDto();
  1167. medicalReportCheckPictureDto.PictureFileName = registerCheckPicture.PictureFilename;
  1168. //medicalReportCheckPictureDto.PictureBase64 =
  1169. // Shentun.Utilities.FileHelper.ToBase64(registerCheckPicture.PictureFilename);
  1170. medicalReportCheckPictureDto.DisplayOrder = registerCheckPicture.DisplayOrder;
  1171. medicalReportCheckPictureDto.PictureFileType = registerCheckPicture.PictureFileType;
  1172. medicalReportRegisterCheckDto.Pictures.Add(medicalReportCheckPictureDto);
  1173. }
  1174. medicalReportDto.RegisterChecks.Add(medicalReportRegisterCheckDto);
  1175. }
  1176. }
  1177. /// <summary>
  1178. /// 获取项目类别
  1179. /// </summary>
  1180. /// <returns></returns>
  1181. private async Task<List<MedicalReportItemTypeDto>> GetItemTypeList()
  1182. {
  1183. var itemTypes = await _itemTypeRepository.GetListAsync();
  1184. var medicalReportItemTypeDtos = new List<MedicalReportItemTypeDto>();
  1185. foreach (var itemType in itemTypes)
  1186. {
  1187. var medicalReportItemTypeDto = new MedicalReportItemTypeDto()
  1188. {
  1189. MedicalReportTypeId = itemType.MedicalReportTypeId,
  1190. ItemTypeId = itemType.Id,
  1191. ItemTypeName = itemType.DisplayName,
  1192. ItemTypePathCode = itemType.PathCode,
  1193. DisplayOrder = itemType.DisplayOrder,
  1194. };
  1195. medicalReportItemTypeDtos.Add(medicalReportItemTypeDto);
  1196. }
  1197. return medicalReportItemTypeDtos;
  1198. }
  1199. /// <summary>
  1200. /// 获取体检报告类别
  1201. /// </summary>
  1202. /// <returns></returns>
  1203. private async Task<List<MedicalReportMedicalReportTypeDto>> GetMedicalReportTypeList()
  1204. {
  1205. var medicalReportTypes = (await _medicalReportTypeRepository.GetListAsync()).OrderBy(o => o.DisplayOrder);
  1206. var MedicalReportMedicalReportTypeDtos = new List<MedicalReportMedicalReportTypeDto>();
  1207. foreach (var medicalReportType in medicalReportTypes)
  1208. {
  1209. MedicalReportMedicalReportTypeDtos.Add(new MedicalReportMedicalReportTypeDto()
  1210. {
  1211. MedicalReportTypeId = medicalReportType.Id,
  1212. MedicalReportTypeName = medicalReportType.DisplayName,
  1213. DisplayOrder = medicalReportType.DisplayOrder,
  1214. });
  1215. }
  1216. return MedicalReportMedicalReportTypeDtos;
  1217. }
  1218. private static List<PatientRegisterGuideReport_Detail> PatientRegisterGuideAsbitem(Guid PatientRegisterId, string PatientRegisterNo, Guid medicalCenterId, char SexId)
  1219. {
  1220. var entlist = _registerCheckAsbitemStaticRepository.GetQueryableAsync().Result
  1221. .Include(x => x.Asbitem.ItemType)
  1222. .Include(x => x.Asbitem.ItemType.GuidType)
  1223. .Include(x => x.RegisterCheck)
  1224. .Where(m => m.PatientRegisterId == PatientRegisterId && m.Asbitem.IsCheck == 'Y')
  1225. .Select(s => new PatientRegisterGuideReport_Asbitem_Temp
  1226. {
  1227. AsbitemName = s.Asbitem.DisplayName,
  1228. AsbitemGuide = _asbitemGuideManager.GetAsbitemGuideConvertSexId(medicalCenterId, s.AsbitemId, SexId),
  1229. AsbitemDisplayOrder = s.Asbitem.DisplayOrder,
  1230. ItemTypeDisplayOrder = s.Asbitem.ItemType.DisplayOrder,
  1231. GuideDisplayOrder = s.Asbitem.ItemType.GuidType.DisplayOrder,
  1232. GuideName = s.Asbitem.ItemType.GuidType.DisplayName,
  1233. CheckRequestNo = GetCheckRequestNobyAsbitem(s.Asbitem, PatientRegisterNo, s.RegisterCheck.CheckRequestNo, s.Asbitem.ItemType.IsCheckRequest)
  1234. })
  1235. .OrderBy(o => o.GuideDisplayOrder)
  1236. .GroupBy(g => new { g.GuideName, g.GuideDisplayOrder })
  1237. .Select(s => new PatientRegisterGuideReport_Detail
  1238. {
  1239. GuideName = s.Key.GuideName,
  1240. AsbitemCount = s.Count(),
  1241. DisplayOrder = s.Key.GuideDisplayOrder,
  1242. Detail_Name = s.ToList().Select(ss => new PatientRegisterGuideReport_Detail_Asbitem
  1243. {
  1244. AsbitemName = ss.AsbitemName,
  1245. AsbitemGuide = ss.AsbitemGuide,
  1246. DisplayOrder = (ss.ItemTypeDisplayOrder * 3000) + ss.AsbitemDisplayOrder,
  1247. CheckRequestNo = ss.CheckRequestNo
  1248. }).OrderBy(o => o.DisplayOrder).ToList()
  1249. }).OrderBy(o => o.DisplayOrder).ToList();
  1250. return entlist;
  1251. }
  1252. /// <summary>
  1253. /// 获取检查单号
  1254. /// </summary>
  1255. /// <returns></returns>
  1256. private static string GetCheckRequestNobyAsbitem(Asbitem asbitem, string PatientRegisterNo, string CheckRequestNo, char IsCheckRequest)
  1257. {
  1258. string result = "";
  1259. if (asbitem.BarcodeMode == BarcodeModeFlag.UsingItemType && IsCheckRequest == 'Y')
  1260. {
  1261. result = CheckRequestNo;
  1262. }
  1263. else if (asbitem.BarcodeMode == BarcodeModeFlag.PrintPatientRegisterNumber)
  1264. {
  1265. result = PatientRegisterNo;
  1266. }
  1267. return result;
  1268. }
  1269. }
  1270. }