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.

1442 lines
84 KiB

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