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.

1375 lines
80 KiB

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