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.

659 lines
35 KiB

2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
  1. using Azure;
  2. using Microsoft.AspNetCore.Authorization;
  3. using Microsoft.AspNetCore.Mvc;
  4. using Microsoft.EntityFrameworkCore;
  5. using Shentun.Peis.CustomerOrgs;
  6. using Shentun.Peis.Enums;
  7. using Shentun.Peis.Models;
  8. using Shentun.Peis.PatientRegisters;
  9. using Shentun.Peis.PrintReports;
  10. using System;
  11. using System.Collections.Generic;
  12. using System.Linq;
  13. using System.Text;
  14. using System.Threading.Tasks;
  15. using System.Xml.Linq;
  16. using Volo.Abp;
  17. using Volo.Abp.Application.Dtos;
  18. using Volo.Abp.Application.Services;
  19. using Volo.Abp.Domain.Repositories;
  20. using Volo.Abp.Identity;
  21. using Volo.Abp.Users;
  22. namespace Shentun.Peis.LisRequests
  23. {
  24. /// <summary>
  25. /// 检验申请单
  26. /// </summary>
  27. [ApiExplorerSettings(GroupName = "Work")]
  28. [Authorize]
  29. public class LisRequestAppService : ApplicationService
  30. {
  31. private readonly IRepository<IdentityUser, Guid> _userRepository;
  32. private readonly IRepository<Patient, Guid> _patientRepository;
  33. private readonly IRepository<PatientRegister, Guid> _patientRegisterRepository;
  34. private readonly IRepository<RegisterCheck, Guid> _registerCheckRepository;
  35. private readonly IRepository<RegisterCheckAsbitem, Guid> _registerCheckAsbitemRepository;
  36. private readonly IRepository<Asbitem, Guid> _asbitemRepository;
  37. private readonly IRepository<ItemType, Guid> _itemTypeRepository;
  38. private readonly ILisRequestReportRepository _lisRequestReportRepository;
  39. private readonly LisRequestManager _lisRequestManager;
  40. private readonly IRepository<SampleGroup, Guid> _sampleGroupRepository;
  41. private readonly IRepository<SampleGroupDetail> _sampleGroupDetailRepository;
  42. private readonly CacheService _cacheService;
  43. private readonly IRepository<CustomerOrg, Guid> _customerOrgRepository;
  44. private readonly CustomerOrgManager _customerOrgManager;
  45. private readonly IRepository<SampleContainer, Guid> _sampleContainerRepository;
  46. private readonly IRepository<SampleType, Guid> _sampleTypeRepository;
  47. private readonly IRepository<LisRequest, Guid> _lisRequestRepository;
  48. public LisRequestAppService(
  49. IRepository<IdentityUser, Guid> userRepository,
  50. IRepository<PatientRegister, Guid> patientRegisterRepository,
  51. IRepository<RegisterCheckAsbitem, Guid> registerCheckAsbitemRepository,
  52. ILisRequestReportRepository lisRequestReportRepository,
  53. IRepository<CustomerOrg, Guid> customerOrgRepository,
  54. LisRequestManager lisRequestManager,
  55. CacheService cacheService,
  56. CustomerOrgManager customerOrgManager,
  57. IRepository<Patient, Guid> patientRepository,
  58. IRepository<RegisterCheck, Guid> registerCheckRepository,
  59. IRepository<Asbitem, Guid> asbitemRepository,
  60. IRepository<SampleContainer, Guid> sampleContainerRepository,
  61. IRepository<SampleType, Guid> sampleTypeRepository,
  62. IRepository<SampleGroup, Guid> sampleGroupRepository,
  63. IRepository<SampleGroupDetail> sampleGroupDetailRepository,
  64. IRepository<ItemType, Guid> itemTypeRepository
  65. ,
  66. IRepository<LisRequest, Guid> lisRequestRepository)
  67. {
  68. this._userRepository = userRepository;
  69. this._patientRegisterRepository = patientRegisterRepository;
  70. this._registerCheckAsbitemRepository = registerCheckAsbitemRepository;
  71. this._lisRequestReportRepository = lisRequestReportRepository;
  72. this._lisRequestManager = lisRequestManager;
  73. _cacheService = cacheService;
  74. _customerOrgRepository = customerOrgRepository;
  75. _customerOrgManager = customerOrgManager;
  76. _patientRepository = patientRepository;
  77. _registerCheckRepository = registerCheckRepository;
  78. _asbitemRepository = asbitemRepository;
  79. _sampleContainerRepository = sampleContainerRepository;
  80. _sampleTypeRepository = sampleTypeRepository;
  81. _sampleGroupRepository = sampleGroupRepository;
  82. _sampleGroupDetailRepository = sampleGroupDetailRepository;
  83. _itemTypeRepository = itemTypeRepository;
  84. _lisRequestRepository = lisRequestRepository;
  85. }
  86. [HttpPost("api/app/LisRequest/GetListInFilter")]
  87. public async Task<PagedResultDto<LisRequestDto>> GetListInFilterAsync(GetLisRequestListDto input)
  88. {
  89. //var customerOrgList = await _customerOrgRepository.GetListAsync();
  90. //Stopwatch stopwatch = Stopwatch.StartNew();
  91. //stopwatch.Start();
  92. throw new UserFriendlyException("接口已禁止");
  93. #region MyRegion
  94. var patientRegisterQuery = (await _patientRegisterRepository.GetQueryableAsync()).Include(x => x.Patient).AsQueryable();
  95. if (!string.IsNullOrEmpty(input.PatientNo))
  96. patientRegisterQuery = patientRegisterQuery.Where(m => m.Patient.PatientNo == input.PatientNo);
  97. if (!string.IsNullOrEmpty(input.IdNo))
  98. patientRegisterQuery = patientRegisterQuery.Where(m => m.Patient.IdNo == input.IdNo);
  99. if (!string.IsNullOrEmpty(input.PatientName))
  100. patientRegisterQuery = patientRegisterQuery.Where(m => !string.IsNullOrEmpty(m.PatientName) && m.PatientName.Contains(input.PatientName));
  101. if (!string.IsNullOrEmpty(input.PatientRegisterNo))
  102. patientRegisterQuery = patientRegisterQuery.Where(m => m.PatientRegisterNo == input.PatientRegisterNo);
  103. if (!string.IsNullOrEmpty(input.Phone))
  104. patientRegisterQuery = patientRegisterQuery.Where(m => m.Patient.MobileTelephone == input.Phone || m.Patient.Telephone == input.Phone);
  105. if (input.SexId != null && input.SexId != ForSexFlag.All)
  106. patientRegisterQuery = patientRegisterQuery.Where(m => m.SexId == input.SexId);
  107. if (input.EndDate == null)
  108. input.EndDate = DateTime.Now;
  109. if (input.StartDate != null && input.EndDate != null)
  110. patientRegisterQuery = patientRegisterQuery.Where(m => m.CreationTime >= input.StartDate &&
  111. m.CreationTime < ((DateTime)input.EndDate).AddDays(1));
  112. if (input.CustomerOrgId != null)
  113. {
  114. var CustomerOrgIds = await _customerOrgManager.GetCustomerOrgChildrenId(input.CustomerOrgId.Value);
  115. patientRegisterQuery = patientRegisterQuery.Where(m => CustomerOrgIds.Contains(m.CustomerOrgId));
  116. }
  117. if (input.CustomerOrgRegisterId != null && input.CustomerOrgRegisterId != Guid.Empty)
  118. {
  119. patientRegisterQuery = patientRegisterQuery.Where(m => m.CustomerOrgRegisterId == input.CustomerOrgRegisterId);
  120. }
  121. patientRegisterQuery.Where(o => o.CompleteFlag != PatientRegisterCompleteFlag.PreRegistration);
  122. #endregion
  123. int totalCount = patientRegisterQuery.Count();
  124. patientRegisterQuery = patientRegisterQuery.Skip(input.SkipCount * input.MaxResultCount).Take(input.MaxResultCount);
  125. var patientRegisterList = patientRegisterQuery.ToList();
  126. if (patientRegisterList.Count > 10000)
  127. {
  128. throw new UserFriendlyException("选择的人员数不能超过1万条");
  129. }
  130. //生成LIS申请数据
  131. foreach (var patientRegister in patientRegisterList)
  132. {
  133. var lisRequests = await _lisRequestManager.SetLisRequestAsync(patientRegister.Id);
  134. }
  135. //返回检索到的数据
  136. var list = (from patient in await _patientRepository.GetQueryableAsync()
  137. join patientRegister in patientRegisterQuery
  138. on patient.Id equals patientRegister.PatientId
  139. join registerCheck in await _registerCheckRepository.GetQueryableAsync()
  140. on patientRegister.Id equals registerCheck.PatientRegisterId
  141. join registerCheckAsbitem in await _registerCheckAsbitemRepository.GetQueryableAsync()
  142. on registerCheck.Id equals registerCheckAsbitem.RegisterCheckId
  143. join asbitem in await _asbitemRepository.GetQueryableAsync()
  144. on registerCheckAsbitem.AsbitemId equals asbitem.Id
  145. join lisRequest in await _lisRequestReportRepository.GetQueryableAsync()
  146. on registerCheckAsbitem.LisRequestId equals lisRequest.Id
  147. join sampleContainer in await _sampleContainerRepository.GetQueryableAsync()
  148. on lisRequest.SampleContainerId equals sampleContainer.Id
  149. join sampleType in await _sampleTypeRepository.GetQueryableAsync()
  150. on lisRequest.SampleTypeId equals sampleType.Id
  151. select new
  152. {
  153. patient,
  154. patientRegister,
  155. asbitem,
  156. lisRequest,
  157. sampleContainer,
  158. sampleType
  159. }).ToList();
  160. var lisRequestIds = list.Select(o => new { Id = o.lisRequest.Id }).Distinct().ToList();
  161. var lisRequestDtoList = new List<LisRequestDto>();
  162. foreach (var lisRequestId in lisRequestIds)
  163. {
  164. var patientList = list.Where(o => o.lisRequest.Id == lisRequestId.Id).Distinct().ToList();
  165. var patient = patientList.First();
  166. var lisRequestDto = new LisRequestDto()
  167. {
  168. Id = lisRequestId.Id,
  169. LisRequestNo = patient.lisRequest.LisRequestNo,
  170. PatientNo = patient.patient.PatientNo,
  171. PatientRegisterNo = patient.patientRegister.PatientRegisterNo,
  172. PatientName = patient.patientRegister.PatientName,
  173. SexName = _cacheService.GetSexNameAsync(patient.patientRegister.SexId).Result,
  174. Age = patient.patientRegister.Age,
  175. SampleTypeName = patient.sampleType.DisplayName,
  176. SampleContainerName = patient.sampleContainer.DisplayName,
  177. ContainerColor = patient.sampleContainer.ContainerColor,
  178. SampleContainerRemark = patient.sampleContainer.ContainerRemark,
  179. AsbitemNames = string.Join(",", patientList.OrderBy(o => o.asbitem.DisplayOrder).Select(o => o.asbitem.DisplayName).Distinct()),
  180. CustomerOrgName = _cacheService.GetTopCustomerOrgAsync(patient.patientRegister.CustomerOrgId).Result.DisplayName,
  181. DepartmentName = _cacheService.GetCustomerOrgNameAsync(patient.patientRegister.CustomerOrgId).Result
  182. };
  183. lisRequestDtoList.Add(lisRequestDto);
  184. }
  185. lisRequestDtoList = lisRequestDtoList.OrderBy(o => o.PatientNo).ToList();
  186. var result = new PagedResultDto<LisRequestDto>(patientRegisterList.Count, lisRequestDtoList);
  187. return result;
  188. }
  189. [HttpPost("api/app/LisRequest/GetListByFilter")]
  190. public async Task<PagedResultDto<LisRequestDto>> GetListByFilterAsync(GetLisRequestListDto input)
  191. {
  192. throw new UserFriendlyException("禁止启用");
  193. //var customerOrgList = await _customerOrgRepository.GetListAsync();
  194. //Stopwatch stopwatch = Stopwatch.StartNew();
  195. //stopwatch.Start();
  196. #region MyRegion
  197. var patientRegisterQuery = (await _patientRegisterRepository.GetQueryableAsync()).Include(x => x.Patient).AsQueryable();
  198. if (!string.IsNullOrEmpty(input.PatientNo))
  199. patientRegisterQuery = patientRegisterQuery.Where(m => m.Patient.PatientNo == input.PatientNo);
  200. if (!string.IsNullOrEmpty(input.IdNo))
  201. patientRegisterQuery = patientRegisterQuery.Where(m => m.Patient.IdNo == input.IdNo);
  202. if (!string.IsNullOrEmpty(input.PatientName))
  203. patientRegisterQuery = patientRegisterQuery.Where(m => !string.IsNullOrEmpty(m.PatientName) && m.PatientName.Contains(input.PatientName));
  204. if (!string.IsNullOrEmpty(input.PatientRegisterNo))
  205. patientRegisterQuery = patientRegisterQuery.Where(m => m.PatientRegisterNo == input.PatientRegisterNo);
  206. if (!string.IsNullOrEmpty(input.Phone))
  207. patientRegisterQuery = patientRegisterQuery.Where(m => m.Patient.MobileTelephone == input.Phone || m.Patient.Telephone == input.Phone);
  208. if (input.SexId != null && input.SexId != ForSexFlag.All)
  209. patientRegisterQuery = patientRegisterQuery.Where(m => m.SexId == input.SexId);
  210. if (input.EndDate == null)
  211. input.EndDate = DateTime.Now;
  212. if (input.StartDate != null && input.EndDate != null)
  213. patientRegisterQuery = patientRegisterQuery.Where(m => m.CreationTime >= input.StartDate &&
  214. m.CreationTime < ((DateTime)input.EndDate).AddDays(1));
  215. if (input.CustomerOrgId != null)
  216. {
  217. var CustomerOrgIds = await _customerOrgManager.GetCustomerOrgChildrenId(input.CustomerOrgId.Value);
  218. patientRegisterQuery = patientRegisterQuery.Where(m => CustomerOrgIds.Contains(m.CustomerOrgId));
  219. }
  220. if (input.CustomerOrgRegisterId != null && input.CustomerOrgRegisterId != Guid.Empty)
  221. {
  222. patientRegisterQuery = patientRegisterQuery.Where(m => m.CustomerOrgRegisterId == input.CustomerOrgRegisterId);
  223. }
  224. patientRegisterQuery.Where(o => o.CompleteFlag != PatientRegisterCompleteFlag.PreRegistration &&
  225. o.CompleteFlag != PatientRegisterCompleteFlag.SumCheck);
  226. #endregion
  227. int totalCount = patientRegisterQuery.Count();
  228. patientRegisterQuery = patientRegisterQuery.Skip(input.SkipCount * input.MaxResultCount).Take(input.MaxResultCount);
  229. var patientRegisterList = patientRegisterQuery.ToList();
  230. if (patientRegisterList.Count > 10000)
  231. {
  232. throw new UserFriendlyException("选择的人员数不能超过1万条");
  233. }
  234. var sampleGroups = await _sampleGroupRepository.GetListAsync();
  235. var _sampleGroupDetail = await _sampleGroupDetailRepository.GetListAsync();
  236. var patientRegisterRequests = (
  237. from patientRegister in patientRegisterQuery
  238. join registerCheck in await _registerCheckRepository.GetQueryableAsync()
  239. on patientRegister.Id equals registerCheck.PatientRegisterId
  240. join registerCheckAsbitem in await _registerCheckAsbitemRepository.GetQueryableAsync()
  241. on registerCheck.Id equals registerCheckAsbitem.RegisterCheckId
  242. join asbitem in await _asbitemRepository.GetQueryableAsync()
  243. on registerCheckAsbitem.AsbitemId equals asbitem.Id
  244. join itemType in await _itemTypeRepository.GetQueryableAsync()
  245. on asbitem.ItemTypeId equals itemType.Id
  246. where itemType.CheckTypeFlag == CheckTypeFlag.Laboratory &&
  247. registerCheck.CompleteFlag == RegisterCheckCompleteFlag.UnChecked
  248. select new
  249. {
  250. patientRegister,
  251. registerCheckAsbitem
  252. }).ToList();
  253. //生成LIS申请数据
  254. var patientRegisters = patientRegisterRequests.Select(o => o.patientRegister).Distinct().ToList();
  255. var createLisRequestList = new List<LisRequest>();
  256. var updateRegisterCheckAsbitemList = new List<RegisterCheckAsbitem>();
  257. foreach (var patientRegister in patientRegisters)
  258. {
  259. var registerCheckAsbitems = patientRegisterRequests.Select(o => o.registerCheckAsbitem)
  260. .Where(o => o.PatientRegisterId == patientRegister.Id).Distinct().ToList();
  261. _lisRequestManager.SetLisRequest(patientRegister, registerCheckAsbitems, sampleGroups, _sampleGroupDetail
  262. , out var updateRegisterCheckAsbitems, out var createLisRequests);
  263. createLisRequestList.AddRange(createLisRequests);
  264. updateRegisterCheckAsbitemList.AddRange(updateRegisterCheckAsbitems);
  265. }
  266. await _lisRequestReportRepository.InsertManyAsync(createLisRequestList, true);
  267. await _registerCheckAsbitemRepository.UpdateManyAsync(updateRegisterCheckAsbitemList, true);
  268. //返回检索到的数据
  269. var list = (
  270. from patientRegister in patientRegisterQuery
  271. join registerCheck in await _registerCheckRepository.GetQueryableAsync()
  272. on patientRegister.Id equals registerCheck.PatientRegisterId
  273. join registerCheckAsbitem in await _registerCheckAsbitemRepository.GetQueryableAsync()
  274. on registerCheck.Id equals registerCheckAsbitem.RegisterCheckId
  275. join asbitem in await _asbitemRepository.GetQueryableAsync()
  276. on registerCheckAsbitem.AsbitemId equals asbitem.Id
  277. join lisRequest in await _lisRequestReportRepository.GetQueryableAsync()
  278. on registerCheckAsbitem.LisRequestId equals lisRequest.Id
  279. join sampleContainer in await _sampleContainerRepository.GetQueryableAsync()
  280. on lisRequest.SampleContainerId equals sampleContainer.Id
  281. join sampleType in await _sampleTypeRepository.GetQueryableAsync()
  282. on lisRequest.SampleTypeId equals sampleType.Id
  283. select new
  284. {
  285. patientRegister,
  286. asbitem,
  287. lisRequest,
  288. sampleContainer,
  289. sampleType
  290. }).ToList();
  291. var lisRequestIds = list.Select(o => new { Id = o.lisRequest.Id }).Distinct().ToList();
  292. var lisRequestDtoList = new List<LisRequestDto>();
  293. foreach (var lisRequestId in lisRequestIds)
  294. {
  295. var patientList = list.Where(o => o.lisRequest.Id == lisRequestId.Id).Distinct().ToList();
  296. var patient = patientList.First();
  297. var lisRequestDto = new LisRequestDto()
  298. {
  299. Id = lisRequestId.Id,
  300. LisRequestNo = patient.lisRequest.LisRequestNo,
  301. PatientNo = patient.patientRegister.Patient.PatientNo,
  302. PatientRegisterNo = patient.patientRegister.PatientRegisterNo,
  303. PatientName = patient.patientRegister.PatientName,
  304. SexName = _cacheService.GetSexNameAsync(patient.patientRegister.SexId).Result,
  305. Age = patient.patientRegister.Age,
  306. SampleTypeName = patient.sampleType.DisplayName,
  307. SampleContainerName = patient.sampleContainer.DisplayName,
  308. ContainerColor = patient.sampleContainer.ContainerColor,
  309. SampleContainerRemark = patient.sampleContainer.ContainerRemark,
  310. AsbitemNames = string.Join(",", patientList.OrderBy(o => o.asbitem.DisplayOrder).Select(o => o.asbitem.DisplayName).Distinct()),
  311. CustomerOrgName = _cacheService.GetTopCustomerOrgAsync(patient.patientRegister.CustomerOrgId).Result.DisplayName,
  312. DepartmentName = _cacheService.GetCustomerOrgNameAsync(patient.patientRegister.CustomerOrgId).Result
  313. };
  314. lisRequestDtoList.Add(lisRequestDto);
  315. }
  316. lisRequestDtoList = lisRequestDtoList.OrderBy(o => o.PatientNo).ToList();
  317. var result = new PagedResultDto<LisRequestDto>(patientRegisterList.Count, lisRequestDtoList);
  318. return result;
  319. }
  320. /// <summary>
  321. /// 生成检验申请单 首次自动生成
  322. /// </summary>
  323. /// <param name="patientRegisterId">人员登记ID</param>
  324. /// <returns></returns>
  325. [HttpPost("api/app/LisRequest/SetLisRequest")]
  326. [RemoteService(false)]
  327. public async Task<List<LisRequestDto>> SetLisRequestAsync(PatientRegisterIdInputDto input)
  328. {
  329. var entlist = await _lisRequestManager.SetLisRequestAsync(input.PatientRegisterId);
  330. var list = (
  331. from patientRegister in await _patientRegisterRepository.GetQueryableAsync()
  332. join registerCheck in await _registerCheckRepository.GetQueryableAsync()
  333. on patientRegister.Id equals registerCheck.PatientRegisterId
  334. join registerCheckAsbitem in await _registerCheckAsbitemRepository.GetQueryableAsync()
  335. on registerCheck.Id equals registerCheckAsbitem.RegisterCheckId
  336. join asbitem in await _asbitemRepository.GetQueryableAsync()
  337. on registerCheckAsbitem.AsbitemId equals asbitem.Id
  338. join lisRequest in await _lisRequestReportRepository.GetQueryableAsync()
  339. on registerCheckAsbitem.LisRequestId equals lisRequest.Id
  340. join sampleContainer in await _sampleContainerRepository.GetQueryableAsync()
  341. on lisRequest.SampleContainerId equals sampleContainer.Id
  342. join sampleType in await _sampleTypeRepository.GetQueryableAsync()
  343. on lisRequest.SampleTypeId equals sampleType.Id
  344. where patientRegister.Id == input.PatientRegisterId
  345. select new
  346. {
  347. patientRegister,
  348. asbitem,
  349. lisRequest,
  350. sampleContainer,
  351. sampleType
  352. }).ToList();
  353. var lisRequestIds = list.Select(o => new { Id = o.lisRequest.Id }).Distinct().ToList();
  354. var lisRequestDtoList = new List<LisRequestDto>();
  355. foreach (var lisRequestId in lisRequestIds)
  356. {
  357. var patientList = list.Where(o => o.lisRequest.Id == lisRequestId.Id).Distinct().ToList();
  358. var patient = patientList.First();
  359. var lisRequestDto = new LisRequestDto()
  360. {
  361. Id = lisRequestId.Id,
  362. LisRequestNo = patient.lisRequest.LisRequestNo,
  363. PatientNo = patient.patientRegister.Patient.PatientNo,
  364. PatientRegisterNo = patient.patientRegister.PatientRegisterNo,
  365. PatientName = patient.patientRegister.PatientName,
  366. SexName = _cacheService.GetSexNameAsync(patient.patientRegister.SexId).Result,
  367. Age = patient.patientRegister.Age,
  368. IsPrint = patient.lisRequest.IsPrint,
  369. IsSignIn = patient.lisRequest.IsSignIn,
  370. SamplingTime = patient.lisRequest.SamplingTime,
  371. SignInOrder = patient.lisRequest.SignInOrder,
  372. SignInPerson = patient.lisRequest.SignInPerson,
  373. SignInTime = patient.lisRequest.SignInTime,
  374. SampleTypeName = patient.sampleType.DisplayName,
  375. SampleContainerName = patient.sampleContainer.DisplayName,
  376. ContainerColor = patient.sampleContainer.ContainerColor,
  377. SampleContainerRemark = patient.sampleContainer.ContainerRemark,
  378. AsbitemNames = string.Join(",", patientList.OrderBy(o => o.asbitem.DisplayOrder).Select(o => o.asbitem.DisplayName).Distinct()),
  379. CustomerOrgName = _cacheService.GetTopCustomerOrgAsync(patient.patientRegister.CustomerOrgId).Result.DisplayName,
  380. DepartmentName = _cacheService.GetCustomerOrgNameAsync(patient.patientRegister.CustomerOrgId).Result
  381. };
  382. lisRequestDtoList.Add(lisRequestDto);
  383. }
  384. lisRequestDtoList = lisRequestDtoList.OrderBy(o => o.PatientNo).ToList();
  385. return lisRequestDtoList;
  386. }
  387. [HttpPost("api/app/LisRequest/GetLisRequestByPatientRegisterId")]
  388. public async Task<LisRequestDto> GetLisRequestByPatientRegisterIdAsync(LisRequestIdInputDto input)
  389. {
  390. var list = (
  391. from patientRegister in await _patientRegisterRepository.GetQueryableAsync()
  392. join registerCheck in await _registerCheckRepository.GetQueryableAsync()
  393. on patientRegister.Id equals registerCheck.PatientRegisterId
  394. join registerCheckAsbitem in await _registerCheckAsbitemRepository.GetQueryableAsync()
  395. on registerCheck.Id equals registerCheckAsbitem.RegisterCheckId
  396. join asbitem in await _asbitemRepository.GetQueryableAsync()
  397. on registerCheckAsbitem.AsbitemId equals asbitem.Id
  398. join lisRequest in await _lisRequestReportRepository.GetQueryableAsync()
  399. on registerCheckAsbitem.LisRequestId equals lisRequest.Id
  400. join sampleContainer in await _sampleContainerRepository.GetQueryableAsync()
  401. on lisRequest.SampleContainerId equals sampleContainer.Id
  402. join sampleType in await _sampleTypeRepository.GetQueryableAsync()
  403. on lisRequest.SampleTypeId equals sampleType.Id
  404. where lisRequest.Id == input.LisRequestId
  405. select new
  406. {
  407. patientRegister,
  408. asbitem,
  409. lisRequest,
  410. sampleContainer,
  411. sampleType
  412. }).Distinct().ToList();
  413. if (!list.Any())
  414. {
  415. return null;
  416. }
  417. var lisRequestDtoList = new List<LisRequestDto>();
  418. var patient = list.First();
  419. var lisRequestDto = new LisRequestDto()
  420. {
  421. Id = input.LisRequestId,
  422. LisRequestNo = patient.lisRequest.LisRequestNo,
  423. PatientNo = patient.patientRegister.Patient.PatientNo,
  424. PatientRegisterNo = patient.patientRegister.PatientRegisterNo,
  425. PatientName = patient.patientRegister.PatientName,
  426. SexName = _cacheService.GetSexNameAsync(patient.patientRegister.SexId).Result,
  427. Age = patient.patientRegister.Age,
  428. IsPrint = patient.lisRequest.IsPrint,
  429. IsSignIn = patient.lisRequest.IsSignIn,
  430. SamplingTime = patient.lisRequest.SamplingTime,
  431. SignInOrder = patient.lisRequest.SignInOrder,
  432. SignInPerson = patient.lisRequest.SignInPerson,
  433. SignInTime = patient.lisRequest.SignInTime,
  434. SampleTypeName = patient.sampleType.DisplayName,
  435. SampleContainerName = patient.sampleContainer.DisplayName,
  436. ContainerColor = patient.sampleContainer.ContainerColor,
  437. SampleContainerRemark = patient.sampleContainer.ContainerRemark,
  438. AsbitemNames = string.Join(",", list.OrderBy(o => o.asbitem.DisplayOrder).Select(o => o.asbitem.DisplayName).Distinct()),
  439. CustomerOrgName = _cacheService.GetTopCustomerOrgAsync(patient.patientRegister.CustomerOrgId).Result.DisplayName,
  440. DepartmentName = _cacheService.GetCustomerOrgNameAsync(patient.patientRegister.CustomerOrgId).Result
  441. };
  442. return lisRequestDto;
  443. }
  444. /// <summary>
  445. /// 追加项目到检验单 如lisrequest内有项目完成体检或者弃检 不允许追加
  446. /// </summary>
  447. /// <param name="input"></param>
  448. /// <returns></returns>
  449. /// <exception cref="UserFriendlyException"></exception>
  450. [HttpPost("api/app/LisRequest/AppendLisRequestMany")]
  451. public async Task AppendLisRequestManyAsync(List<AppendLisRequestDto> input)
  452. {
  453. if (input.Any())
  454. {
  455. foreach (var item in input)
  456. {
  457. await _lisRequestManager.AppendLisRequestAsync(item.LisRequestId, item.RegisterCheckAsbitemIds);
  458. }
  459. }
  460. else
  461. {
  462. throw new UserFriendlyException("请选择登记的组合项目");
  463. }
  464. }
  465. /// <summary>
  466. /// 追加项目到检验单 生成新的条码号
  467. /// </summary>
  468. /// <param name="RegisterAsbitemIds">RegisterAsbitem表Id/param>
  469. /// <returns></returns>
  470. [HttpPost("api/app/LisRequest/AddLisRequest")]
  471. public async Task AddLisRequestAsync(List<Guid> RegisterAsbitemIds)
  472. {
  473. if (RegisterAsbitemIds.Any())
  474. {
  475. var lisRequests = await _lisRequestManager.AddLisRequestAsync(RegisterAsbitemIds);
  476. }
  477. else
  478. {
  479. throw new UserFriendlyException("请选择登记的组合项目");
  480. }
  481. }
  482. /// <summary>
  483. /// 获取人员登记下的组合项目申请的检验申请号记录
  484. /// </summary>
  485. /// <param name="PatientRegisterId"></param>
  486. /// <returns></returns>
  487. [HttpPost("api/app/LisRequest/GetRegisterAsbitemLisRequest")]
  488. public async Task<List<RegisterAsbitemLisRequestDto>> GetRegisterAsbitemLisRequestAsync(Guid PatientRegisterId)
  489. {
  490. return await _lisRequestReportRepository.GetRegisterAsbitemLisRequestAsync(PatientRegisterId);
  491. }
  492. /// <summary>
  493. /// 修改LisRequest表打印状态
  494. /// </summary>
  495. /// <param name="input"></param>
  496. /// <returns></returns>
  497. [HttpPost("api/app/LisRequest/UpdateLisRequestIsPrint")]
  498. public async Task UpdateLisRequestIsPrintAsync(UpdateLisRequestIsPrintDto input)
  499. {
  500. if (input.OperateType == 1)
  501. {
  502. var _patientRegister = await _patientRegisterRepository.GetAsync((Guid)input.PatientRegisterId);
  503. if (_patientRegister.CompleteFlag == PatientRegisterCompleteFlag.PreRegistration)
  504. {
  505. throw new UserFriendlyException("未正式登记,不能打印");
  506. }
  507. //按人员登记批量修改
  508. var LisRequestIds = (await _registerCheckAsbitemRepository.GetListAsync(m => m.PatientRegisterId == input.PatientRegisterId && m.LisRequestId != null)).Select(s => s.LisRequestId);
  509. if (LisRequestIds.Count() > 0)
  510. {
  511. var oldlist = await _lisRequestReportRepository.GetListAsync(m => LisRequestIds.Contains(m.Id));
  512. if (oldlist.Count > 0)
  513. {
  514. oldlist.ForEach(f => f.IsPrint = 'Y');
  515. await _lisRequestReportRepository.UpdateManyAsync(oldlist);
  516. }
  517. }
  518. }
  519. else
  520. {
  521. //按lisrequestid修改
  522. var oldent = await _lisRequestReportRepository.FirstOrDefaultAsync(m => m.Id == input.LisRequestId);
  523. if (oldent != null)
  524. {
  525. var registerAsbitem = (await _registerCheckAsbitemRepository.GetListAsync(o => o.LisRequestId == input.LisRequestId)).FirstOrDefault();
  526. var _patientRegister = await _patientRegisterRepository.GetAsync(registerAsbitem.PatientRegisterId);
  527. if (_patientRegister.CompleteFlag == PatientRegisterCompleteFlag.PreRegistration)
  528. {
  529. throw new UserFriendlyException("未正式登记,不能打印");
  530. }
  531. oldent.IsPrint = 'Y';
  532. await _lisRequestReportRepository.UpdateAsync(oldent);
  533. }
  534. }
  535. }
  536. /// <summary>
  537. /// 根据检验单号返回信息给Lis系统
  538. /// </summary>
  539. /// <param name="input"></param>
  540. /// <returns></returns>
  541. [HttpPost("api/app/LisRequest/GetPatientRegisterByLisRequestNo")]
  542. public async Task<LisPatientRegisterDto> GetLisPatientRegisterByLisRequestNoAsync(LisRequestNoInputDto input)
  543. {
  544. if (input == null)
  545. throw new UserFriendlyException("请求参数无效");
  546. var query = (from lisRequest in await _lisRequestRepository.GetQueryableAsync()
  547. join registerCheckAsbitem in await _registerCheckAsbitemRepository.GetQueryableAsync() on lisRequest.Id equals registerCheckAsbitem.LisRequestId
  548. join asbitem in await _asbitemRepository.GetQueryableAsync() on registerCheckAsbitem.AsbitemId equals asbitem.Id
  549. join registerCheck in await _registerCheckRepository.GetQueryableAsync() on registerCheckAsbitem.RegisterCheckId equals registerCheck.Id
  550. join patientRegister in await _patientRegisterRepository.GetQueryableAsync() on registerCheck.PatientRegisterId equals patientRegister.Id
  551. join patient in await _patientRepository.GetQueryableAsync() on patientRegister.PatientId equals patient.Id
  552. where lisRequest.LisRequestNo == input.LisRequestNo
  553. select new
  554. {
  555. lisRequest,
  556. registerCheckAsbitem,
  557. asbitem,
  558. registerCheck,
  559. patientRegister,
  560. patient
  561. }).ToList();
  562. if (query.Count == 0)
  563. {
  564. throw new UserFriendlyException("检验单号不存在");
  565. }
  566. var patientRegisterGroup = query.GroupBy(g => g.patientRegister);
  567. var resultDto = new LisPatientRegisterDto
  568. {
  569. Age = patientRegisterGroup.FirstOrDefault().Key.Age,
  570. LisRequestNo = input.LisRequestNo,
  571. PatientName = patientRegisterGroup.FirstOrDefault().Key.PatientName,
  572. SexName = _cacheService.GetSexNameAsync(patientRegisterGroup.FirstOrDefault().Key.SexId).Result,
  573. SampleTypeName = _cacheService.GetSampleTypeNameAsync(patientRegisterGroup.FirstOrDefault().FirstOrDefault().lisRequest.SampleTypeId).Result,
  574. AsbitemDetail = patientRegisterGroup.FirstOrDefault().Select(ss => new LisPatientRegisterDetailDto
  575. {
  576. AsbitemId = ss.registerCheckAsbitem.AsbitemId,
  577. AsbitemName = ss.asbitem.DisplayName,
  578. AsbitemPrice = ss.registerCheckAsbitem.ChargePrice * ss.registerCheckAsbitem.Amount
  579. }).ToList()
  580. };
  581. return resultDto;
  582. }
  583. }
  584. }