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.

600 lines
32 KiB

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