diff --git a/src/Shentun.Peis.Application/QueueRegisters/QueueRegisterAppService.cs b/src/Shentun.Peis.Application/QueueRegisters/QueueRegisterAppService.cs index 5f4e2e3..3edafcc 100644 --- a/src/Shentun.Peis.Application/QueueRegisters/QueueRegisterAppService.cs +++ b/src/Shentun.Peis.Application/QueueRegisters/QueueRegisterAppService.cs @@ -257,11 +257,11 @@ namespace Shentun.Peis.QueueRegisters public async Task ManualQueuingRoomAsync(ManualQueuingRoomInputDto input) { //删除排队操作 - await _queueRegisterRepository.DeleteAsync(d => d.PatientRegisterId == input.PatientRegisterId); + await _queueRegisterRepository.DeleteAsync(d => d.PatientRegisterId == input.PatientRegisterId, true); var entity = await _queueRegisterManager.ManualQueuingRoomAsync(input.PatientRegisterId, input.RoomId); - await _queueRegisterRepository.InsertAsync(entity); + await _queueRegisterRepository.InsertAsync(entity, true); return await GetQueueRegisterByPatientRegisterIdAsync(new PatientRegisterIdInputDto { @@ -279,11 +279,11 @@ namespace Shentun.Peis.QueueRegisters public async Task AutomaticQueuingRoomAsync(AutomaticQueuingRoomInputDto input) { //删除排队操作 - await _queueRegisterRepository.DeleteAsync(d => d.PatientRegisterId == input.PatientRegisterId); + await _queueRegisterRepository.DeleteAsync(d => d.PatientRegisterId == input.PatientRegisterId, true); var entity = await _queueRegisterManager.AutomaticQueuingRoomAsync(input.PatientRegisterId); - await _queueRegisterRepository.InsertAsync(entity); + await _queueRegisterRepository.InsertAsync(entity, true); return await GetQueueRegisterByPatientRegisterIdAsync(new PatientRegisterIdInputDto { diff --git a/src/Shentun.Peis.Domain/QueueRegisters/QueueRegisterManager.cs b/src/Shentun.Peis.Domain/QueueRegisters/QueueRegisterManager.cs index 1a4c36a..48f0563 100644 --- a/src/Shentun.Peis.Domain/QueueRegisters/QueueRegisterManager.cs +++ b/src/Shentun.Peis.Domain/QueueRegisters/QueueRegisterManager.cs @@ -46,9 +46,17 @@ namespace Shentun.Peis.QueueRegisters public async Task ManualQueuingRoomAsync(Guid PatientRegisterId, Guid RoomId) { - var maxDisplayOrder = await (await _queueRegisterRepository.GetQueryableAsync()) + var displayOrderList = (await _queueRegisterRepository.GetQueryableAsync()) .Where(m => m.RoomId == RoomId && m.CreationTime >= DateTime.Now.Date) - .MaxAsync(m => m.DisplayOrder); + .Select(s => s.DisplayOrder); + + int maxDisplayOrder = 0; + + if (displayOrderList.Any()) + { + maxDisplayOrder = await displayOrderList.MaxAsync(); + } + var queueRegisterEnt = new QueueRegister { @@ -81,27 +89,45 @@ namespace Shentun.Peis.QueueRegisters throw new UserFriendlyException("该人员未登记项目"); //获取项目所属房间需要等待的时间 - var query = from roomDetail in await _roomDetailRepository.GetQueryableAsync() - join room in await _roomRepository.GetQueryableAsync() on roomDetail.RoomId equals room.Id - join queueRegister in await _queueRegisterRepository.GetQueryableAsync() on room.Id equals queueRegister.RoomId into queueRegisterTemp - from queueRegisterHaveEmpty in queueRegisterTemp.DefaultIfEmpty() - where queueRegisterHaveEmpty.CreationTime >= DateTime.Now.Date && asbitemIds.Contains(roomDetail.AsbitemId) - select new - { - roomId = room.Id, - queueTime = room.QueueTime, - queueRegisterHaveEmpty - }; - - var roomGroup = query.ToList().GroupBy(g => g.roomId).Select(s => new + var query = (from roomDetail in await _roomDetailRepository.GetQueryableAsync() + join room in await _roomRepository.GetQueryableAsync() on roomDetail.RoomId equals room.Id + join queueRegister in await _queueRegisterRepository.GetQueryableAsync() on room.Id equals queueRegister.RoomId into queueRegisterTemp + from queueRegisterHaveEmpty in queueRegisterTemp.DefaultIfEmpty() + where queueRegisterHaveEmpty.CreationTime >= DateTime.Now.Date && asbitemIds.Contains(roomDetail.AsbitemId) + select new + { + roomId = room.Id, + queueTime = room.QueueTime, + queueRegisterHaveEmpty + }).ToList(); + + if (query.Any()) { - roomId = s.Key, - queueTime = s.FirstOrDefault().queueTime, - sumQueueTime = s.Count(m => m.queueRegisterHaveEmpty != null) * s.FirstOrDefault().queueTime - }).OrderBy(o => o.sumQueueTime).ThenBy(o => o.queueTime).First(); + var roomGroup = query.ToList().GroupBy(g => g.roomId).Select(s => new + { + roomId = s.Key, + queueTime = s.FirstOrDefault().queueTime, + sumQueueTime = s.Count(m => m.queueRegisterHaveEmpty != null) * s.FirstOrDefault().queueTime + }).OrderBy(o => o.sumQueueTime).ThenBy(o => o.queueTime).First(); - return await ManualQueuingRoomAsync(PatientRegisterId, roomGroup.roomId); + return await ManualQueuingRoomAsync(PatientRegisterId, roomGroup.roomId); + } + else + { + //无排队信息 + var roomId = (from roomDetail in await _roomDetailRepository.GetQueryableAsync() + join room in await _roomRepository.GetQueryableAsync() on roomDetail.RoomId equals room.Id + where asbitemIds.Contains(roomDetail.AsbitemId) + orderby room.QueueTime, room.DisplayOrder ascending + select room.Id).FirstOrDefault(); + if (roomId == Guid.Empty) + { + throw new UserFriendlyException("该人员登记的项目未在房间中维护"); + } + + return await ManualQueuingRoomAsync(PatientRegisterId, roomId); + } }