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.

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