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.

826 lines
44 KiB

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