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.

980 lines
50 KiB

2 years ago
4 months ago
2 years ago
2 years ago
2 years ago
2 years ago
5 months ago
2 years ago
5 months ago
2 years ago
2 years ago
4 months ago
2 years ago
2 years ago
2 years ago
4 months ago
2 years ago
2 years ago
2 years ago
5 months ago
4 months ago
5 months ago
2 years ago
2 years ago
2 years ago
5 months ago
4 months ago
2 years ago
2 years ago
2 years ago
5 months ago
4 months 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
1 year ago
2 years ago
2 years ago
1 year ago
2 years ago
2 years ago
2 years ago
2 years ago
4 months ago
5 months ago
4 months ago
3 weeks ago
4 months ago
3 weeks ago
4 months ago
5 months ago
2 years ago
4 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
2 years ago
2 years ago
4 months ago
2 years ago
1 year ago
2 years ago
4 months ago
1 year ago
2 years ago
4 months ago
2 years ago
1 year ago
2 years ago
4 months ago
2 years ago
4 months ago
2 years ago
1 year ago
2 years ago
1 year ago
2 years ago
2 years ago
2 years ago
4 months ago
2 years ago
4 months ago
4 months ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
1 year ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
1 year ago
2 years ago
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
1 year ago
2 years 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
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
1 year 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
5 months ago
4 months ago
5 months ago
4 months ago
2 years ago
  1. using Microsoft.AspNetCore.Authorization;
  2. using Microsoft.AspNetCore.Http;
  3. using Microsoft.AspNetCore.Mvc;
  4. using Microsoft.EntityFrameworkCore;
  5. using Microsoft.Extensions.Logging;
  6. using NPOI.SS.Formula.Functions;
  7. using Shentun.Peis.Asbitems;
  8. using Shentun.Peis.Enums;
  9. using Shentun.Peis.Models;
  10. using Shentun.Peis.PatientRegisters;
  11. using Shentun.Peis.Patients;
  12. using Shentun.Peis.RegisterChecks;
  13. using Shentun.Peis.Rooms;
  14. using Shentun.Peis.SysParmValues;
  15. using System;
  16. using System.Collections.Generic;
  17. using System.Diagnostics;
  18. using System.Linq;
  19. using System.Text;
  20. using System.Threading.Tasks;
  21. using Volo.Abp;
  22. using Volo.Abp.Application.Services;
  23. using Volo.Abp.Auditing;
  24. using Volo.Abp.Domain.Repositories;
  25. using static NPOI.HSSF.Util.HSSFColor;
  26. namespace Shentun.Peis.QueueRegisters
  27. {
  28. /// <summary>
  29. /// 叫号排队
  30. /// </summary>
  31. [Authorize]
  32. [ApiExplorerSettings(GroupName = "Work")]
  33. [DisableAuditing]
  34. public class QueueRegisterAppService : ApplicationService
  35. {
  36. private readonly IRepository<QueueRegister, Guid> _queueRegisterRepository;
  37. private readonly IRepository<Room, Guid> _roomRepository;
  38. private readonly IRepository<ItemType, Guid> _itemTypeRepository;
  39. private readonly IRepository<PatientRegister, Guid> _patientRegisterRepository;
  40. private readonly IRepository<RegisterCheck, Guid> _registerCheckRepository;
  41. private readonly IRepository<RegisterCheckAsbitem, Guid> _registerCheckAsbitemRepository;
  42. private readonly IRepository<Asbitem, Guid> _asbitemRepository;
  43. private readonly IRepository<RoomDetail> _roomDetailRepository;
  44. private readonly CacheService _cacheService;
  45. private readonly QueueRegisterManager _queueRegisterManager;
  46. private readonly ILogger<QueueRegisterAppService> _logger;
  47. private readonly SysParmValueManager _sysParmValueManager;
  48. private readonly IRepository<DoctorSignIn, Guid> _doctorSignInRepository;
  49. private readonly RegisterCheckAppService _registerCheckAppService;
  50. private readonly IRepository<Patient, Guid> _patientRepository;
  51. public QueueRegisterAppService(
  52. IRepository<QueueRegister, Guid> queueRegisterRepository,
  53. IRepository<ItemType, Guid> itemTypeRepository,
  54. IRepository<Room, Guid> roomRepository,
  55. IRepository<PatientRegister, Guid> patientRegisterRepository,
  56. IRepository<RegisterCheck, Guid> registerCheckRepository,
  57. IRepository<RegisterCheckAsbitem, Guid> registerCheckAsbitemRepository,
  58. IRepository<Asbitem, Guid> asbitemRepository,
  59. IRepository<RoomDetail> roomDetailRepository,
  60. CacheService cacheService,
  61. QueueRegisterManager queueRegisterManager,
  62. ILogger<QueueRegisterAppService> logger,
  63. SysParmValueManager sysParmValueManager,
  64. IRepository<DoctorSignIn, Guid> doctorSignInRepository,
  65. RegisterCheckAppService registerCheckAppService,
  66. IRepository<Patient, Guid> patientRepository)
  67. {
  68. _queueRegisterRepository = queueRegisterRepository;
  69. _itemTypeRepository = itemTypeRepository;
  70. _roomRepository = roomRepository;
  71. _patientRegisterRepository = patientRegisterRepository;
  72. _registerCheckRepository = registerCheckRepository;
  73. _registerCheckAsbitemRepository = registerCheckAsbitemRepository;
  74. _asbitemRepository = asbitemRepository;
  75. _roomDetailRepository = roomDetailRepository;
  76. _cacheService = cacheService;
  77. _queueRegisterManager = queueRegisterManager;
  78. _logger = logger;
  79. _sysParmValueManager = sysParmValueManager;
  80. _doctorSignInRepository = doctorSignInRepository;
  81. _registerCheckAppService = registerCheckAppService;
  82. _patientRepository = patientRepository;
  83. }
  84. /// <summary>
  85. /// 获取当前排队信息
  86. /// </summary>
  87. /// <param name="input"></param>
  88. /// <returns></returns>
  89. [HttpPost("api/app/QueueRegister/GetQueueRegisterByPatientRegisterId")]
  90. public async Task<QueueRegisterByPatientRegisterIdDto> GetQueueRegisterByPatientRegisterIdAsync(PatientRegisterIdInputDto input)
  91. {
  92. var queueRegisterEnt = (from queueRegister in await _queueRegisterRepository.GetQueryableAsync()
  93. join room in await _roomRepository.GetQueryableAsync() on queueRegister.RoomId equals room.Id
  94. join patientRegister in await _patientRegisterRepository.GetQueryableAsync() on queueRegister.PatientRegisterId equals patientRegister.Id
  95. where queueRegister.PatientRegisterId == input.PatientRegisterId
  96. && queueRegister.CreationTime >= DateTime.Now.Date
  97. orderby queueRegister.CreationTime descending
  98. select new
  99. {
  100. queueRegister,
  101. room,
  102. patientName = patientRegister.PatientName,
  103. isVip = patientRegister.IsVip,
  104. }).FirstOrDefault();
  105. if (queueRegisterEnt != null)
  106. {
  107. var queueCount = await (from queueRegister in await _queueRegisterRepository.GetQueryableAsync()
  108. join patientRegister in await _patientRegisterRepository.GetQueryableAsync() on queueRegister.PatientRegisterId equals patientRegister.Id
  109. where queueRegister.RoomId == queueRegisterEnt.queueRegister.RoomId
  110. && queueRegister.CompleteFlag == QueueRegisterCompleteFlag.Wait
  111. && queueRegister.CreationTime >= DateTime.Now.Date
  112. && queueRegister.DisplayOrder < queueRegisterEnt.queueRegister.DisplayOrder
  113. && patientRegister.IsVip == queueRegisterEnt.isVip
  114. && queueRegister.NoCompleteReason == '0'
  115. select queueRegister).CountAsync();
  116. var entDto = new QueueRegisterByPatientRegisterIdDto
  117. {
  118. CompleteFlag = queueRegisterEnt.queueRegister.CompleteFlag,
  119. RoomName = queueRegisterEnt.room.DisplayName,
  120. QueueCount = queueCount,
  121. PatientName = queueRegisterEnt.patientName,
  122. RoomId = queueRegisterEnt.room.Id
  123. };
  124. return entDto;
  125. }
  126. else
  127. {
  128. return null;
  129. }
  130. }
  131. /// <summary>
  132. /// 获取房间排队信息
  133. /// </summary>
  134. /// <returns></returns>
  135. [HttpPost("api/app/QueueRegister/GetRoomQueueList")]
  136. public async Task<List<RoomQueueListDto>> GetRoomQueueListAsync(MedicalCenterIdInputDto input)
  137. {
  138. if (input.MedicalCenterId == Guid.Empty)
  139. throw new UserFriendlyException("体检中心不能为空");
  140. //var doctorAutoSignIn = await _sysParmValueManager.GetSysParmValueAsync(Guid.Empty, "call_number_is_sign");
  141. //if (doctorAutoSignIn == "Y")
  142. //{
  143. // //自动签到
  144. // var isSignInCount = await _doctorSignInRepository.CountAsync(m => m.CreationTime.Date == DateTime.Now.Date && m.SignInFlag == SignInFlag.SignIn);
  145. // if (isSignInCount == 0)
  146. // {
  147. // await _registerCheckAppService.CreateDoctorBatchSignInAsync(new CreateDoctorBatchSignInInputDto { });
  148. // }
  149. //}
  150. var doctorAutoSignIn = await _sysParmValueManager.GetSysParmValueAsync(Guid.Empty, "call_number_is_sign");
  151. if (string.IsNullOrWhiteSpace(doctorAutoSignIn))
  152. doctorAutoSignIn = "Y";
  153. if (doctorAutoSignIn == "Y")
  154. {
  155. //已签到的房间
  156. var roomIds = await _queueRegisterManager.GetSignInRoomAsync();
  157. var entListDto = (from room in await _roomRepository.GetQueryableAsync()
  158. join queueRegister in (await _queueRegisterRepository.GetQueryableAsync())
  159. .Where(m => m.CompleteFlag == QueueRegisterCompleteFlag.Wait
  160. && m.CreationTime >= DateTime.Now.Date).AsQueryable()
  161. on room.Id equals queueRegister.RoomId into queueRegisterTemp
  162. from queueRegisterEmpty in queueRegisterTemp.DefaultIfEmpty()
  163. join itemType in await _itemTypeRepository.GetQueryableAsync()
  164. on room.ItemTypeId equals itemType.Id into itemTypeTemp
  165. from itemTypeEmpty in itemTypeTemp.DefaultIfEmpty()
  166. where room.IsActive == 'Y' && roomIds.Contains(room.Id)
  167. group new { room, itemTypeEmpty, queueRegisterEmpty } by room.Id into roomGroup
  168. select new RoomQueueListDto
  169. {
  170. ItemTypeName = roomGroup.FirstOrDefault().itemTypeEmpty != null ? roomGroup.FirstOrDefault().itemTypeEmpty.DisplayName : "",
  171. RoomName = roomGroup.FirstOrDefault().room.DisplayName,
  172. WaitCount = roomGroup.Count(c => c.queueRegisterEmpty != null),
  173. ItemTypeDisplayOrder = roomGroup.FirstOrDefault().itemTypeEmpty != null ? roomGroup.FirstOrDefault().itemTypeEmpty.DisplayOrder : 0,
  174. RoomDisplayOrder = roomGroup.FirstOrDefault().room.DisplayOrder
  175. }).ToList().OrderBy(o => o.RoomDisplayOrder).ToList();
  176. return entListDto;
  177. }
  178. else
  179. {
  180. var entListDto = (from room in await _roomRepository.GetQueryableAsync()
  181. join queueRegister in (await _queueRegisterRepository.GetQueryableAsync())
  182. .Where(m => m.CompleteFlag == QueueRegisterCompleteFlag.Wait
  183. && m.CreationTime >= DateTime.Now.Date).AsQueryable()
  184. on room.Id equals queueRegister.RoomId into queueRegisterTemp
  185. from queueRegisterEmpty in queueRegisterTemp.DefaultIfEmpty()
  186. join itemType in await _itemTypeRepository.GetQueryableAsync()
  187. on room.ItemTypeId equals itemType.Id into itemTypeTemp
  188. from itemTypeEmpty in itemTypeTemp.DefaultIfEmpty()
  189. where room.IsActive == 'Y'
  190. group new { room, itemTypeEmpty, queueRegisterEmpty } by room.Id into roomGroup
  191. select new RoomQueueListDto
  192. {
  193. ItemTypeName = roomGroup.FirstOrDefault().itemTypeEmpty != null ? roomGroup.FirstOrDefault().itemTypeEmpty.DisplayName : "",
  194. RoomName = roomGroup.FirstOrDefault().room.DisplayName,
  195. WaitCount = roomGroup.Count(c => c.queueRegisterEmpty != null),
  196. ItemTypeDisplayOrder = roomGroup.FirstOrDefault().itemTypeEmpty != null ? roomGroup.FirstOrDefault().itemTypeEmpty.DisplayOrder : 0,
  197. RoomDisplayOrder = roomGroup.FirstOrDefault().room.DisplayOrder
  198. }).ToList().OrderBy(o => o.RoomDisplayOrder).ToList();
  199. return entListDto;
  200. }
  201. }
  202. /// <summary>
  203. /// 获取未分诊的组合项目 根据人员登记ID (弃检、已检的剔除)
  204. /// </summary>
  205. /// <param name="input"></param>
  206. /// <returns></returns>
  207. [HttpPost("api/app/QueueRegister/GetNotTriageAsbitemList")]
  208. public async Task<List<NotTriageAsbitemListDto>> GetNotTriageAsbitemListAsync(PatientRegisterIdInputDto input)
  209. {
  210. //分诊过的组合项目id
  211. var triageAsbitemIds = (from queueRegister in await _queueRegisterRepository.GetQueryableAsync()
  212. join room in await _roomRepository.GetQueryableAsync() on queueRegister.RoomId equals room.Id
  213. join roomDetail in await _roomDetailRepository.GetQueryableAsync() on room.Id equals roomDetail.RoomId
  214. where queueRegister.PatientRegisterId == input.PatientRegisterId
  215. select roomDetail.AsbitemId
  216. ).ToList();
  217. var entListDto = (from patientRegister in await _patientRegisterRepository.GetQueryableAsync()
  218. join registerCheck in await _registerCheckRepository.GetQueryableAsync() on patientRegister.Id equals registerCheck.PatientRegisterId
  219. join registerCheckAsbitem in await _registerCheckAsbitemRepository.GetQueryableAsync() on registerCheck.Id equals registerCheckAsbitem.RegisterCheckId
  220. join asbitem in await _asbitemRepository.GetQueryableAsync() on registerCheckAsbitem.AsbitemId equals asbitem.Id
  221. join itemType in await _itemTypeRepository.GetQueryableAsync() on asbitem.ItemTypeId equals itemType.Id into itemTypeTemp
  222. from itemTypeHaveEmpty in itemTypeTemp.DefaultIfEmpty()
  223. where patientRegister.Id == input.PatientRegisterId
  224. && asbitem.IsCheck == 'Y'
  225. && registerCheck.CompleteFlag == RegisterCheckCompleteFlag.UnChecked
  226. orderby itemTypeHaveEmpty.DisplayOrder, asbitem.DisplayOrder ascending
  227. select new NotTriageAsbitemListDto
  228. {
  229. ItemTypeName = itemTypeHaveEmpty != null ? itemTypeHaveEmpty.DisplayName : "",
  230. AsbitemId = asbitem.Id,
  231. AsbitemName = asbitem.DisplayName
  232. }).ToList();
  233. if (triageAsbitemIds.Any())
  234. {
  235. entListDto = entListDto.Where(m => !triageAsbitemIds.Contains(m.AsbitemId)).ToList();
  236. }
  237. return entListDto;
  238. }
  239. /// <summary>
  240. /// 获取已分诊的组合项目 根据人员登记ID
  241. /// </summary>
  242. /// <param name="input"></param>
  243. /// <returns></returns>
  244. [HttpPost("api/app/QueueRegister/GetYesTriageAsbitemList")]
  245. public async Task<List<YesTriageAsbitemListDto>> GetYesTriageAsbitemListAsync(PatientRegisterIdInputDto input)
  246. {
  247. var asbitemIds = (from patientRegister in await _patientRegisterRepository.GetQueryableAsync()
  248. join registerCheck in await _registerCheckRepository.GetQueryableAsync() on patientRegister.Id equals registerCheck.PatientRegisterId
  249. join registerCheckAsbitem in await _registerCheckAsbitemRepository.GetQueryableAsync() on registerCheck.Id equals registerCheckAsbitem.RegisterCheckId
  250. where patientRegister.Id == input.PatientRegisterId
  251. select registerCheckAsbitem.AsbitemId).ToList();
  252. if (!asbitemIds.Any())
  253. throw new UserFriendlyException("该人员未登记项目");
  254. var entListDto = (from queueRegister in await _queueRegisterRepository.GetQueryableAsync()
  255. join room in await _roomRepository.GetQueryableAsync() on queueRegister.RoomId equals room.Id
  256. join roomDetail in await _roomDetailRepository.GetQueryableAsync() on room.Id equals roomDetail.RoomId
  257. join asbitem in await _asbitemRepository.GetQueryableAsync() on roomDetail.AsbitemId equals asbitem.Id
  258. join itemType in await _itemTypeRepository.GetQueryableAsync() on asbitem.ItemTypeId equals itemType.Id into itemTypeTemp
  259. from itemTypeHaveEmpty in itemTypeTemp.DefaultIfEmpty()
  260. where queueRegister.PatientRegisterId == input.PatientRegisterId
  261. && asbitemIds.Contains(roomDetail.AsbitemId)
  262. && asbitem.IsCheck == 'Y'
  263. orderby queueRegister.CreationTime descending
  264. select new YesTriageAsbitemListDto
  265. {
  266. ItemTypeName = itemTypeHaveEmpty != null ? itemTypeHaveEmpty.DisplayName : "",
  267. AsbitemId = asbitem.Id,
  268. AsbitemName = asbitem.DisplayName,
  269. CompleteFlag = queueRegister.CompleteFlag,
  270. RoomName = room.DisplayName,
  271. TriageName = _cacheService.GetSurnameAsync(queueRegister.CreatorId).GetAwaiter().GetResult(),
  272. TriageTime = queueRegister.CreationTime.ToString("HH:mm:ss")
  273. }).ToList();
  274. entListDto = entListDto.GroupBy(g => g.RoomName).Select(s => new YesTriageAsbitemListDto
  275. {
  276. RoomName = s.Key,
  277. AsbitemId = Guid.Empty,
  278. AsbitemName = string.Join(",", s.Select(s => s.AsbitemName)),
  279. CompleteFlag = s.FirstOrDefault().CompleteFlag,
  280. ItemTypeName = s.FirstOrDefault().ItemTypeName,
  281. TriageName = s.FirstOrDefault().TriageName,
  282. TriageTime = s.FirstOrDefault().TriageTime
  283. }).ToList();
  284. return entListDto;
  285. }
  286. /// <summary>
  287. /// 获取房间信息 根据项目ID
  288. /// </summary>
  289. /// <param name="input"></param>
  290. /// <returns></returns>
  291. [HttpPost("api/app/QueueRegister/GetRoomListByAsbitemId")]
  292. public async Task<List<BaseRoomDto>> GetRoomListByAsbitemIdAsync(GetRoomListByAsbitemIdInputDto input)
  293. {
  294. var doctorAutoSignIn = await _sysParmValueManager.GetSysParmValueAsync(Guid.Empty, "call_number_is_sign");
  295. if (string.IsNullOrWhiteSpace(doctorAutoSignIn))
  296. doctorAutoSignIn = "Y";
  297. var patientRegisterEnt = await _patientRegisterRepository.FirstOrDefaultAsync(f => f.Id == input.PatientRegisterId);
  298. if (patientRegisterEnt == null)
  299. {
  300. throw new UserFriendlyException("人员不存在");
  301. }
  302. var query = (from room in await _roomRepository.GetQueryableAsync()
  303. join roomDetail in await _roomDetailRepository.GetQueryableAsync() on room.Id equals roomDetail.RoomId
  304. join queueRegister in await _queueRegisterRepository.GetQueryableAsync() on room.Id equals queueRegister.RoomId into queueRegisterTemp
  305. from queueRegisterHaveEmpty in queueRegisterTemp.DefaultIfEmpty()
  306. where roomDetail.AsbitemId == input.AsbitemId
  307. && room.IsActive == 'Y'
  308. // && roomIds.Contains(room.Id)
  309. orderby room.DisplayOrder ascending
  310. select new
  311. {
  312. roomId = room.Id,
  313. roomName = room.DisplayName,
  314. queueTime = room.QueueTime,
  315. forSexId = room.ForSexId,
  316. queueRegisterHaveEmpty
  317. });
  318. if (doctorAutoSignIn == "Y")
  319. {
  320. //已签到的房间
  321. var roomIds = await _queueRegisterManager.GetSignInRoomAsync();
  322. query = query.Where(m => roomIds.Contains(m.roomId));
  323. }
  324. var queryList = query.ToList();
  325. var roomGroup = queryList.GroupBy(g => g.roomId).Select(s => new BaseRoomDto
  326. {
  327. RoomId = s.Key,
  328. RoomName = s.FirstOrDefault().roomName,
  329. QueueTime = s.Count(m => m.queueRegisterHaveEmpty != null && m.queueRegisterHaveEmpty.NoCompleteReason == '0') * s.FirstOrDefault().queueTime,
  330. ForSexId = s.FirstOrDefault().forSexId
  331. }).ToList();
  332. if (patientRegisterEnt.SexId == SexFlag.UnKnown)
  333. {
  334. roomGroup = roomGroup.Where(m => m.ForSexId == ForSexFlag.All).ToList();
  335. }
  336. else
  337. {
  338. roomGroup = roomGroup.Where(m => m.ForSexId == ForSexFlag.All || m.ForSexId == patientRegisterEnt.SexId).ToList();
  339. }
  340. return roomGroup;
  341. }
  342. /// <summary>
  343. /// 取消分诊 删除
  344. /// </summary>
  345. /// <param name="input"></param>
  346. /// <returns></returns>
  347. [HttpPost("api/app/QueueRegister/Delete")]
  348. public async Task DeleteAsync(QueueRegisterIdInputDto input)
  349. {
  350. await _queueRegisterRepository.DeleteAsync(d => d.Id == input.QueueRegisterId);
  351. }
  352. [HttpPost("api/app/QueueRegister/DeleteByPatientRegisterId")]
  353. public async Task DeleteByPatientRegisterIdAsync(PatientRegisterIdInputDto input)
  354. {
  355. await _queueRegisterRepository.DeleteAsync(d => d.PatientRegisterId == input.PatientRegisterId && d.CompleteFlag == QueueRegisterCompleteFlag.Wait);
  356. }
  357. /// <summary>
  358. /// 人工排队房间
  359. /// </summary>
  360. /// <param name="input"></param>
  361. /// <returns></returns>
  362. [HttpPost("api/app/QueueRegister/ManualQueuingRoom")]
  363. public async Task<QueueRegisterByPatientRegisterIdDto> ManualQueuingRoomAsync(ManualQueuingRoomInputDto input)
  364. {
  365. var doctorAutoSignIn = await _sysParmValueManager.GetSysParmValueAsync(Guid.Empty, "call_number_is_sign");
  366. if (string.IsNullOrWhiteSpace(doctorAutoSignIn))
  367. doctorAutoSignIn = "Y";
  368. if (doctorAutoSignIn == "Y")
  369. {
  370. //已签到的房间
  371. var roomIds = await _queueRegisterManager.GetSignInRoomAsync();
  372. if (!roomIds.Contains(input.RoomId))
  373. {
  374. throw new UserFriendlyException("房间未签到,不能分配");
  375. }
  376. }
  377. //删除排队操作
  378. await _queueRegisterRepository.DeleteAsync(d => d.PatientRegisterId == input.PatientRegisterId
  379. && d.CompleteFlag != QueueRegisterCompleteFlag.AlreadyCalled, true);
  380. var entity = await _queueRegisterManager.ManualQueuingRoomAsync(input.PatientRegisterId, input.RoomId);
  381. await _queueRegisterRepository.InsertAsync(entity, true);
  382. return await GetQueueRegisterByPatientRegisterIdAsync(new PatientRegisterIdInputDto
  383. {
  384. PatientRegisterId = input.PatientRegisterId
  385. });
  386. }
  387. /// <summary>
  388. /// 自动排队房间
  389. /// </summary>
  390. /// <param name="input"></param>
  391. /// <returns></returns>
  392. [HttpPost("api/app/QueueRegister/AutomaticQueuingRoom")]
  393. public async Task<QueueRegisterByPatientRegisterIdDto> AutomaticQueuingRoomAsync(AutomaticQueuingRoomInputDto input)
  394. {
  395. //删除排队操作
  396. await _queueRegisterRepository.DeleteAsync(d => d.PatientRegisterId == input.PatientRegisterId
  397. && d.CompleteFlag != QueueRegisterCompleteFlag.AlreadyCalled, true);
  398. var entity = await _queueRegisterManager.AutomaticQueuingRoomAsync(input.PatientRegisterId, new List<Guid>());
  399. await _queueRegisterRepository.InsertAsync(entity, true);
  400. return await GetQueueRegisterByPatientRegisterIdAsync(new PatientRegisterIdInputDto
  401. {
  402. PatientRegisterId = input.PatientRegisterId
  403. });
  404. }
  405. /// <summary>
  406. /// 修改排队人员状态
  407. /// </summary>
  408. /// <param name="input"></param>
  409. /// <returns></returns>
  410. [HttpPost("api/app/QueueRegister/UpdateQueueRegisterStatus")]
  411. public async Task UpdateQueueRegisterStatusAsync(UpdateQueueRegisterStatusInputDto input)
  412. {
  413. var entity = await _queueRegisterManager.UpdateQueueRegisterStatusAsync(input.QueueRegisterId, input.CompleteFlag);
  414. await _queueRegisterRepository.UpdateAsync(entity);
  415. }
  416. /// <summary>
  417. /// 获取医生诊台叫号人员列表 根据房间ID
  418. /// </summary>
  419. /// <param name="input"></param>
  420. /// <returns></returns>
  421. [HttpPost("api/app/QueueRegister/GetQueueRegisterListByRoomId")]
  422. public async Task<GetQueueRegisterListByRoomIdDto> GetQueueRegisterListByRoomIdAsync(QueueRegisterListByRoomIdInputDto input)
  423. {
  424. var entDto = new GetQueueRegisterListByRoomIdDto();
  425. var query = from queueRegister in await _queueRegisterRepository.GetQueryableAsync()
  426. join patientRegister in await _patientRegisterRepository.GetQueryableAsync()
  427. on queueRegister.PatientRegisterId equals patientRegister.Id
  428. join roomDetail in await _roomDetailRepository.GetQueryableAsync()
  429. on queueRegister.RoomId equals roomDetail.RoomId
  430. where queueRegister.CreationTime >= DateTime.Now.Date
  431. && queueRegister.RoomId == input.RoomId
  432. select new
  433. {
  434. completeFlag = queueRegister.CompleteFlag,
  435. patientName = patientRegister.PatientName,
  436. isVip = patientRegister.IsVip,
  437. queueRegisterId = queueRegister.Id,
  438. queueRegisterNumber = queueRegister.DisplayOrder,
  439. patientRegisterId = queueRegister.PatientRegisterId,
  440. patientRegisterNo = patientRegister.PatientRegisterNo,
  441. roomId = queueRegister.RoomId,
  442. asbitemId = roomDetail.AsbitemId,
  443. //lastModificationTime = queueRegister.LastModificationTime,
  444. callTime = queueRegister.CallTime
  445. };
  446. if (input.ItemTypeIds.Any())
  447. {
  448. var patientRegisterIds = query.Select(s => s.patientRegisterId).ToList();
  449. //筛选项目类别
  450. //项目类别下登记的所有组合项目
  451. var asbitemIds = (from patientRegister in await _patientRegisterRepository.GetQueryableAsync()
  452. join registerCheck in await _registerCheckRepository.GetQueryableAsync()
  453. on patientRegister.Id equals registerCheck.PatientRegisterId
  454. join registerCheckAsbitem in await _registerCheckAsbitemRepository.GetQueryableAsync()
  455. on registerCheck.Id equals registerCheckAsbitem.RegisterCheckId
  456. join asbitem in await _asbitemRepository.GetQueryableAsync()
  457. on registerCheckAsbitem.AsbitemId equals asbitem.Id
  458. where patientRegisterIds.Contains(patientRegister.Id) && input.ItemTypeIds.Contains(asbitem.ItemTypeId)
  459. group registerCheckAsbitem by registerCheckAsbitem.AsbitemId into cc
  460. select cc.Key).ToList();
  461. query = query.Where(m => asbitemIds.Contains(m.asbitemId));
  462. }
  463. var roomGroup = query.ToList().GroupBy(g => g.queueRegisterId).Select(s => new
  464. {
  465. completeFlag = s.FirstOrDefault().completeFlag,
  466. patientName = s.FirstOrDefault().patientName,
  467. isVip = s.FirstOrDefault().isVip,
  468. queueRegisterId = s.Key,
  469. queueRegisterNumber = s.FirstOrDefault().queueRegisterNumber,
  470. //lastModificationTime = s.FirstOrDefault().lastModificationTime,
  471. patientRegisterId = s.FirstOrDefault().patientRegisterId,
  472. patientRegisterNo = s.FirstOrDefault().patientRegisterNo,
  473. callTime = s.FirstOrDefault().callTime
  474. }).ToList();
  475. var queueRegisterList = roomGroup.Where(m => m.isVip == 'Y').OrderBy(o => o.queueRegisterNumber).ToList();
  476. queueRegisterList.AddRange(roomGroup.Where(m => m.isVip == 'N').OrderBy(o => o.queueRegisterNumber).ToList());
  477. entDto.WaitDetail = queueRegisterList.Where(m => m.completeFlag == QueueRegisterCompleteFlag.Wait)
  478. .Select(s => new GetQueueRegisterListByRoomIdDetailDto
  479. {
  480. IsVip = s.isVip,
  481. PatientName = s.patientName,
  482. QueueRegisterId = s.queueRegisterId,
  483. QueueRegisterNumber = (s.isVip == 'Y' ? "V" : "") + s.queueRegisterNumber.ToString(),
  484. PatientRegisterId = s.patientRegisterId,
  485. PatientRegisterNo = s.patientRegisterNo
  486. }).ToList();
  487. entDto.AlreadyCalledDetail = queueRegisterList.Where(m => m.completeFlag == QueueRegisterCompleteFlag.AlreadyCalled).OrderByDescending(o => o.callTime)
  488. .Select(s => new GetQueueRegisterListByRoomIdDetailDto
  489. {
  490. IsVip = s.isVip,
  491. PatientName = s.patientName,
  492. QueueRegisterId = s.queueRegisterId,
  493. QueueRegisterNumber = (s.isVip == 'Y' ? "V" : "") + s.queueRegisterNumber.ToString(),
  494. PatientRegisterId = s.patientRegisterId,
  495. PatientRegisterNo = s.patientRegisterNo
  496. }).ToList();
  497. entDto.OverNumberDetail = roomGroup.Where(m => m.completeFlag == QueueRegisterCompleteFlag.OverNumber).OrderByDescending(o => o.callTime)
  498. .Select(s => new GetQueueRegisterListByRoomIdDetailDto
  499. {
  500. IsVip = s.isVip,
  501. PatientName = s.patientName,
  502. QueueRegisterId = s.queueRegisterId,
  503. QueueRegisterNumber = (s.isVip == 'Y' ? "V" : "") + s.queueRegisterNumber.ToString(),
  504. PatientRegisterId = s.patientRegisterId,
  505. PatientRegisterNo = s.patientRegisterNo
  506. }).ToList();
  507. return entDto;
  508. }
  509. /// <summary>
  510. /// 获取叫号屏人员数据
  511. /// </summary>
  512. /// <param name="input"></param>
  513. /// <returns></returns>
  514. [HttpPost("api/app/QueueRegister/GetScreenQueueRegisterListByRoomNo")]
  515. public async Task<GetScreenQueueRegisterListByRoomIdDto> GetScreenQueueRegisterListByRoomIdAsync(RoomNoInputDto input)
  516. {
  517. var entDto = new GetScreenQueueRegisterListByRoomIdDto();
  518. var query = (from queueRegister in await _queueRegisterRepository.GetQueryableAsync()
  519. join patientRegister in await _patientRegisterRepository.GetQueryableAsync()
  520. on queueRegister.PatientRegisterId equals patientRegister.Id
  521. join room in await _roomRepository.GetQueryableAsync() on queueRegister.RoomId equals room.Id
  522. where queueRegister.CreationTime >= DateTime.Now.Date
  523. && room.RoomNo == input.RoomNo
  524. select new
  525. {
  526. completeFlag = queueRegister.CompleteFlag,
  527. patientName = patientRegister.PatientName,
  528. isVip = patientRegister.IsVip,
  529. queueRegisterId = queueRegister.Id,
  530. queueRegisterNumber = queueRegister.DisplayOrder,
  531. callTime = queueRegister.CallTime
  532. }).ToList();
  533. var queueRegisterList = query.Where(m => m.isVip == 'Y').OrderBy(o => o.queueRegisterNumber).ToList();
  534. queueRegisterList.AddRange(query.Where(m => m.isVip == 'N').OrderBy(o => o.queueRegisterNumber).ToList());
  535. var visitEnt = queueRegisterList.Where(m => m.completeFlag == QueueRegisterCompleteFlag.AlreadyCalled).OrderByDescending(o => o.callTime).FirstOrDefault();
  536. if (visitEnt != null)
  537. {
  538. entDto.VisitNumber = visitEnt.queueRegisterNumber;
  539. entDto.VisitName = visitEnt.patientName;
  540. }
  541. entDto.WaitDetail = queueRegisterList.Where(m => m.completeFlag == QueueRegisterCompleteFlag.Wait)
  542. .Select(s => new GetScreenQueueRegisterListByRoomIdDetailDto
  543. {
  544. PatientName = s.patientName,
  545. QueueRegisterNumber = (s.isVip == 'Y' ? "V" : "") + s.queueRegisterNumber.ToString()
  546. }).ToList();
  547. entDto.OverNumberDetail = queueRegisterList.Where(m => m.completeFlag == QueueRegisterCompleteFlag.OverNumber).OrderByDescending(o => o.callTime)
  548. .Select(s => new GetScreenQueueRegisterListByRoomIdDetailDto
  549. {
  550. PatientName = s.patientName,
  551. QueueRegisterNumber = (s.isVip == 'Y' ? "V" : "") + s.queueRegisterNumber.ToString()
  552. }).ToList();
  553. return entDto;
  554. }
  555. /// <summary>
  556. /// 获取房间名称 根据房间号
  557. /// </summary>
  558. /// <param name="input"></param>
  559. /// <returns></returns>
  560. [HttpPost("api/app/QueueRegister/GetRoomNameByRoomNo")]
  561. public async Task<GetRoomNameByRoomNoDto> GetRoomNameByRoomNoAsync(RoomNoInputDto input)
  562. {
  563. var roomEnt = await _roomRepository.FirstOrDefaultAsync(f => f.RoomNo == input.RoomNo);
  564. if (roomEnt == null)
  565. throw new UserFriendlyException("房间号不存在");
  566. var entDto = new GetRoomNameByRoomNoDto
  567. {
  568. RoomName = roomEnt.DisplayName
  569. };
  570. return entDto;
  571. }
  572. #region 提供给小程序
  573. /// <summary>
  574. /// 小程序获取当前排队信息
  575. /// </summary>
  576. /// <param name="input"></param>
  577. /// <returns></returns>
  578. [HttpPost("api/app/QueueRegister/GetAppQueueRegisterByIdNo")]
  579. public async Task<GetAppQueueRegisterByIdNoDto> GetAppQueueRegisterByIdNoAsync(IdNoInputDto input)
  580. {
  581. var msg = new GetAppQueueRegisterByIdNoDto();
  582. var patientRegisterEnt = (await _patientRegisterRepository.GetQueryableAsync()).Include(x => x.Patient)
  583. .Where(m => m.CompleteFlag != PatientRegisterCompleteFlag.PreRegistration
  584. && m.CompleteFlag != PatientRegisterCompleteFlag.SumCheck
  585. && m.Patient.IdNo == input.IdNo).OrderByDescending(o => o.MedicalStartDate).FirstOrDefault();
  586. if (patientRegisterEnt == null)
  587. throw new UserFriendlyException("无人员登记记录或已总检");
  588. //if (patientRegisterEnt.CompleteFlag == PatientRegisterCompleteFlag.PreRegistration)
  589. // throw new UserFriendlyException("当前人员未正式登记");
  590. //if (patientRegisterEnt.CompleteFlag == PatientRegisterCompleteFlag.PreRegistration)
  591. // throw new UserFriendlyException("当前人员已总检");
  592. msg.PatientRegisterNo = patientRegisterEnt.PatientRegisterNo;
  593. msg.MobileTelephone = patientRegisterEnt.Patient.MobileTelephone;
  594. msg.IdNo = patientRegisterEnt.Patient.IdNo;
  595. msg.MaritalStatusName = await _cacheService.GetMaritalStatusNameAsync(patientRegisterEnt.MaritalStatusId);
  596. msg.PatientName = patientRegisterEnt.PatientName;
  597. msg.Photo = patientRegisterEnt.Photo;
  598. msg.SexName = await _cacheService.GetSexNameAsync(patientRegisterEnt.SexId);
  599. msg.PatientRegisterId = patientRegisterEnt.Id;
  600. var queueRegisterInfo = await GetQueueRegisterByPatientRegisterIdAsync(new PatientRegisterIdInputDto { PatientRegisterId = patientRegisterEnt.Id });
  601. if (queueRegisterInfo != null)
  602. {
  603. msg.QueueCount = queueRegisterInfo.QueueCount;
  604. msg.RoomName = queueRegisterInfo.RoomName;
  605. msg.RoomId = queueRegisterInfo.RoomId;
  606. msg.CompleteFlag = queueRegisterInfo.CompleteFlag;
  607. }
  608. #region 分诊项目
  609. //登记的所有项目
  610. var registerCheckAsbitemList = (from patientRegister in await _patientRegisterRepository.GetQueryableAsync()
  611. join registerCheck in await _registerCheckRepository.GetQueryableAsync() on patientRegister.Id equals registerCheck.PatientRegisterId
  612. join registerCheckAsbitem in await _registerCheckAsbitemRepository.GetQueryableAsync() on registerCheck.Id equals registerCheckAsbitem.RegisterCheckId
  613. join asbitem in await _asbitemRepository.GetQueryableAsync() on registerCheckAsbitem.AsbitemId equals asbitem.Id
  614. join itemType in await _itemTypeRepository.GetQueryableAsync() on asbitem.ItemTypeId equals itemType.Id into itemTypeTemp
  615. from itemTypeHaveEmpty in itemTypeTemp.DefaultIfEmpty()
  616. where patientRegister.Id == patientRegisterEnt.Id
  617. && asbitem.IsCheck == 'Y'
  618. orderby itemTypeHaveEmpty.DisplayOrder, asbitem.DisplayOrder ascending
  619. select new
  620. {
  621. asbitemId = asbitem.Id,
  622. registerCheckId = registerCheck.Id,
  623. isGiveUp = registerCheck.CompleteFlag == RegisterCheckCompleteFlag.GiveUpChecked ? 'Y' : 'N',
  624. asbitemName = asbitem.DisplayName
  625. }).ToList();
  626. //分诊过的项目
  627. var queueRegisterList = (from queueRegister in await _queueRegisterRepository.GetQueryableAsync()
  628. join room in await _roomRepository.GetQueryableAsync() on queueRegister.RoomId equals room.Id
  629. join roomDetail in await _roomDetailRepository.GetQueryableAsync() on room.Id equals roomDetail.RoomId
  630. where queueRegister.PatientRegisterId == patientRegisterEnt.Id
  631. select new
  632. {
  633. completeFlag = queueRegister.CompleteFlag,
  634. roomName = room.DisplayName,
  635. asbitemId = roomDetail.AsbitemId
  636. }).ToList();
  637. List<TriageAsbitemDetailDto> triageAsbitemDetailList = new List<TriageAsbitemDetailDto>();
  638. foreach (var item in registerCheckAsbitemList)
  639. {
  640. var triageAsbitemDetail = new TriageAsbitemDetailDto
  641. {
  642. AsbitemName = item.asbitemName,
  643. IsGiveUp = item.isGiveUp,
  644. RegisterCheckId = item.registerCheckId
  645. };
  646. var queueRegisterAsbitem = queueRegisterList.FirstOrDefault(f => f.asbitemId == item.asbitemId);
  647. if (queueRegisterAsbitem != null)
  648. {
  649. triageAsbitemDetail.CompleteFlag = queueRegisterAsbitem.completeFlag;
  650. triageAsbitemDetail.RoomName = queueRegisterAsbitem.roomName;
  651. }
  652. triageAsbitemDetailList.Add(triageAsbitemDetail);
  653. }
  654. msg.TriageAsbitemDetail = triageAsbitemDetailList;
  655. #endregion
  656. return msg;
  657. }
  658. /// <summary>
  659. /// 放弃项目
  660. /// </summary>
  661. /// <param name="input"></param>
  662. /// <returns></returns>
  663. [HttpPost("api/app/QueueRegister/CreateGiveUpAsbitem")]
  664. public async Task<SmallProgramResultDto> CreateGiveUpAsbitemAsync(CreateGiveUpAsbitemInputDto input)
  665. {
  666. var registerCheckEnt = await _registerCheckRepository.FirstOrDefaultAsync(f => f.Id == input.RegisterCheckId);
  667. if (registerCheckEnt == null)
  668. {
  669. throw new UserFriendlyException("检查项目不存在");
  670. }
  671. if (registerCheckEnt.CompleteFlag == RegisterCheckCompleteFlag.Checked)
  672. {
  673. throw new UserFriendlyException("项目已检查,无法操作");
  674. }
  675. if (input.IsGiveUp == 'Y')
  676. {
  677. registerCheckEnt.CompleteFlag = RegisterCheckCompleteFlag.GiveUpChecked;
  678. await _registerCheckRepository.UpdateAsync(registerCheckEnt);
  679. }
  680. else if (input.IsGiveUp == 'N')
  681. {
  682. registerCheckEnt.CompleteFlag = RegisterCheckCompleteFlag.UnChecked;
  683. await _registerCheckRepository.UpdateAsync(registerCheckEnt);
  684. }
  685. return new SmallProgramResultDto
  686. {
  687. IsSuccess = true
  688. };
  689. }
  690. /// <summary>
  691. /// 创建新的项目分诊
  692. /// </summary>
  693. /// <param name="input"></param>
  694. /// <returns></returns>
  695. [HttpPost("api/app/QueueRegister/CreateNewAsbitemTriage")]
  696. public async Task<SmallProgramResultDto> CreateNewAsbitemTriageAsync(CreateNewAsbitemTriageInputDto input)
  697. {
  698. //当前排队的组合项目id集合
  699. var asbitemIds = (from queueRegister in await _queueRegisterRepository.GetQueryableAsync()
  700. join roomDetail in await _roomDetailRepository.GetQueryableAsync() on queueRegister.RoomId equals roomDetail.RoomId
  701. where queueRegister.PatientRegisterId == input.PatientRegisterId
  702. && roomDetail.RoomId == input.RoomId
  703. select new
  704. {
  705. queueRegister,
  706. roomDetail.AsbitemId
  707. }).ToList();
  708. if (!asbitemIds.Any())
  709. {
  710. throw new UserFriendlyException("无排队信息");
  711. }
  712. //删除排队操作
  713. await _queueRegisterRepository.DeleteAsync(d => d.PatientRegisterId == input.PatientRegisterId
  714. && d.CompleteFlag != QueueRegisterCompleteFlag.AlreadyCalled, true);
  715. var entity = await _queueRegisterManager.AutomaticQueuingRoomAsync(input.PatientRegisterId, asbitemIds.Select(s => s.AsbitemId).ToList());
  716. await _queueRegisterRepository.InsertAsync(entity, true);
  717. return new SmallProgramResultDto
  718. {
  719. IsSuccess = true
  720. };
  721. }
  722. #endregion
  723. #region 分诊屏
  724. /// <summary>
  725. /// 获取人员信息根据条码号
  726. /// </summary>
  727. /// <returns></returns>
  728. [HttpPost("api/app/QueueRegister/GetTriageScreenPatientRegisterByPatientRegisterNo")]
  729. public async Task<GetTriageScreenPatientRegisterByPatientRegisterNoDto> GetTriageScreenPatientRegisterByPatientRegisterNoAsync(PatientRegisterNoInputDto input)
  730. {
  731. var patientRegisterQuery = from patientRegister in await _patientRegisterRepository.GetQueryableAsync()
  732. join patient in await _patientRepository.GetQueryableAsync() on patientRegister.PatientId equals patient.Id
  733. select new
  734. {
  735. patientRegister,
  736. patient
  737. };
  738. if (!string.IsNullOrWhiteSpace(input.PatientRegisterNo))
  739. {
  740. patientRegisterQuery = patientRegisterQuery.Where(m => m.patientRegister.PatientRegisterNo == input.PatientRegisterNo);
  741. }
  742. if (!string.IsNullOrWhiteSpace(input.PatientNo))
  743. {
  744. patientRegisterQuery = patientRegisterQuery.Where(m => m.patient.PatientNo == input.PatientNo);
  745. }
  746. if (!string.IsNullOrWhiteSpace(input.IdNo))
  747. {
  748. patientRegisterQuery = patientRegisterQuery.Where(m => m.patient.IdNo == input.IdNo);
  749. }
  750. var patientRegisterFirst = await patientRegisterQuery.FirstOrDefaultAsync();
  751. if (patientRegisterFirst == null)
  752. {
  753. throw new UserFriendlyException("人员不存在");
  754. }
  755. var entDto = new GetTriageScreenPatientRegisterByPatientRegisterNoDto
  756. {
  757. MedicalStartDate = DataHelper.ConversionDateShortToString(patientRegisterFirst.patientRegister.MedicalStartDate),
  758. MobileTelephone = patientRegisterFirst.patient.MobileTelephone,
  759. PatientName = patientRegisterFirst.patientRegister.PatientName,
  760. PatientRegisterId = patientRegisterFirst.patientRegister.Id
  761. };
  762. return entDto;
  763. }
  764. /// <summary>
  765. /// 获取当前人员排队信息
  766. /// </summary>
  767. /// <returns></returns>
  768. [HttpPost("api/app/QueueRegister/GetTriageScreenPatientRegisterQueueInfo")]
  769. public async Task<GetTriageScreenPatientRegisterQueueInfoDto> GetTriageScreenPatientRegisterQueueInfoAsync(PatientRegisterNoInputDto input)
  770. {
  771. var patientRegisterQuery = from patientRegister in await _patientRegisterRepository.GetQueryableAsync()
  772. join patient in await _patientRepository.GetQueryableAsync() on patientRegister.PatientId equals patient.Id
  773. select new
  774. {
  775. patientRegister,
  776. patient
  777. };
  778. if (!string.IsNullOrWhiteSpace(input.PatientRegisterNo))
  779. {
  780. patientRegisterQuery = patientRegisterQuery.Where(m => m.patientRegister.PatientRegisterNo == input.PatientRegisterNo);
  781. }
  782. if (!string.IsNullOrWhiteSpace(input.PatientNo))
  783. {
  784. patientRegisterQuery = patientRegisterQuery.Where(m => m.patient.PatientNo == input.PatientNo);
  785. }
  786. if (!string.IsNullOrWhiteSpace(input.IdNo))
  787. {
  788. patientRegisterQuery = patientRegisterQuery.Where(m => m.patient.IdNo == input.IdNo);
  789. }
  790. var patientRegisterFirst = await patientRegisterQuery.FirstOrDefaultAsync();
  791. if (patientRegisterFirst == null)
  792. {
  793. throw new UserFriendlyException("人员不存在");
  794. }
  795. var queueRegisterEnt = (from queueRegister in await _queueRegisterRepository.GetQueryableAsync()
  796. join room in await _roomRepository.GetQueryableAsync() on queueRegister.RoomId equals room.Id
  797. join patientRegister in await _patientRegisterRepository.GetQueryableAsync() on queueRegister.PatientRegisterId equals patientRegister.Id
  798. where queueRegister.PatientRegisterId == patientRegisterFirst.patientRegister.Id
  799. && queueRegister.CreationTime >= DateTime.Now.Date
  800. orderby queueRegister.CreationTime descending
  801. select new
  802. {
  803. queueRegister,
  804. room,
  805. patientName = patientRegister.PatientName,
  806. isVip = patientRegister.IsVip,
  807. }).FirstOrDefault();
  808. if (queueRegisterEnt != null)
  809. {
  810. var queueCount = await (from queueRegister in await _queueRegisterRepository.GetQueryableAsync()
  811. join patientRegister in await _patientRegisterRepository.GetQueryableAsync() on queueRegister.PatientRegisterId equals patientRegister.Id
  812. where queueRegister.RoomId == queueRegisterEnt.queueRegister.RoomId
  813. && queueRegister.CompleteFlag == QueueRegisterCompleteFlag.Wait
  814. && queueRegister.CreationTime >= DateTime.Now.Date
  815. && queueRegister.DisplayOrder < queueRegisterEnt.queueRegister.DisplayOrder
  816. && queueRegister.NoCompleteReason == '0'
  817. select queueRegister).CountAsync();
  818. var entDto = new GetTriageScreenPatientRegisterQueueInfoDto
  819. {
  820. RoomName = queueRegisterEnt.room.DisplayName,
  821. QueueCount = queueCount,
  822. PatientName = queueRegisterEnt.patientName,
  823. QueueNum = queueRegisterEnt.queueRegister.DisplayOrder.ToString()
  824. };
  825. return entDto;
  826. }
  827. else
  828. {
  829. throw new UserFriendlyException("当前无排队信息");
  830. }
  831. }
  832. #endregion
  833. }
  834. }