7 changed files with 370 additions and 15 deletions
-
11src/Shentun.Peis.Application.Contracts/QueueRegisters/AutomaticQueuingRoomInputDto.cs
-
51src/Shentun.Peis.Application.Contracts/QueueRegisters/GetQueueRegisterListByRoomIdDto.cs
-
20src/Shentun.Peis.Application.Contracts/QueueRegisters/ManualQueuingRoomInputDto.cs
-
21src/Shentun.Peis.Application.Contracts/QueueRegisters/UpdateQueueRegisterStatusInputDto.cs
-
4src/Shentun.Peis.Application.Contracts/Rooms/BaseRoomDto.cs
-
141src/Shentun.Peis.Application/QueueRegisters/QueueRegisterAppService.cs
-
127src/Shentun.Peis.Domain/QueueRegisters/QueueRegisterManager.cs
@ -0,0 +1,11 @@ |
|||
using System; |
|||
using System.Collections.Generic; |
|||
using System.Text; |
|||
|
|||
namespace Shentun.Peis.QueueRegisters |
|||
{ |
|||
public class AutomaticQueuingRoomInputDto |
|||
{ |
|||
public Guid PatientRegisterId { get; set; } |
|||
} |
|||
} |
|||
@ -0,0 +1,51 @@ |
|||
using System; |
|||
using System.Collections.Generic; |
|||
using System.ComponentModel; |
|||
using System.Text; |
|||
|
|||
namespace Shentun.Peis.QueueRegisters |
|||
{ |
|||
public class GetQueueRegisterListByRoomIdDto |
|||
{ |
|||
/// <summary>
|
|||
/// 候诊列表
|
|||
/// </summary>
|
|||
public List<GetQueueRegisterListByRoomIdDetailDto> WaitDetail { get; set; } = new List<GetQueueRegisterListByRoomIdDetailDto>(); |
|||
|
|||
/// <summary>
|
|||
/// 已呼列表
|
|||
/// </summary>
|
|||
public List<GetQueueRegisterListByRoomIdDetailDto> AlreadyCalledDetail { get; set; } = new List<GetQueueRegisterListByRoomIdDetailDto>(); |
|||
|
|||
/// <summary>
|
|||
/// 过号列表
|
|||
/// </summary>
|
|||
public List<GetQueueRegisterListByRoomIdDetailDto> OverNumberDetail { get; set; } = new List<GetQueueRegisterListByRoomIdDetailDto>(); |
|||
|
|||
} |
|||
|
|||
|
|||
|
|||
public class GetQueueRegisterListByRoomIdDetailDto |
|||
{ |
|||
/// <summary>
|
|||
/// 排队ID
|
|||
/// </summary>
|
|||
public Guid QueueRegisterId { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 姓名
|
|||
/// </summary>
|
|||
public string PatientName { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 是否VIP Y N
|
|||
/// </summary>
|
|||
public char IsVip { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 排队号码
|
|||
/// </summary>
|
|||
public int QueueRegisterNumber { get; set; } |
|||
} |
|||
} |
|||
@ -0,0 +1,20 @@ |
|||
using System; |
|||
using System.Collections.Generic; |
|||
using System.ComponentModel.DataAnnotations.Schema; |
|||
using System.Text; |
|||
|
|||
namespace Shentun.Peis.QueueRegisters |
|||
{ |
|||
public class ManualQueuingRoomInputDto |
|||
{ |
|||
/// <summary>
|
|||
/// 病人登记ID
|
|||
/// </summary>
|
|||
public Guid PatientRegisterId { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 房间ID
|
|||
/// </summary>
|
|||
public Guid RoomId { get; set; } |
|||
} |
|||
} |
|||
@ -0,0 +1,21 @@ |
|||
using System; |
|||
using System.Collections.Generic; |
|||
using System.ComponentModel.DataAnnotations.Schema; |
|||
using System.ComponentModel.DataAnnotations; |
|||
using System.Text; |
|||
|
|||
namespace Shentun.Peis.QueueRegisters |
|||
{ |
|||
public class UpdateQueueRegisterStatusInputDto |
|||
{ |
|||
/// <summary>
|
|||
/// 排队ID
|
|||
/// </summary>
|
|||
public Guid QueueRegisterId { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 完成标志 (o=候诊 1=已呼 2=过号)
|
|||
/// </summary>
|
|||
public char CompleteFlag { get; set; } |
|||
} |
|||
} |
|||
@ -0,0 +1,127 @@ |
|||
using log4net.Util; |
|||
using Microsoft.EntityFrameworkCore; |
|||
using Shentun.Peis.Enums; |
|||
using Shentun.Peis.Models; |
|||
using System; |
|||
using System.Collections.Generic; |
|||
using System.Linq; |
|||
using System.Text; |
|||
using System.Threading.Tasks; |
|||
using Volo.Abp; |
|||
using Volo.Abp.Domain.Repositories; |
|||
using Volo.Abp.Domain.Services; |
|||
|
|||
namespace Shentun.Peis.QueueRegisters |
|||
{ |
|||
public class QueueRegisterManager : DomainService |
|||
{ |
|||
private readonly IRepository<QueueRegister, Guid> _queueRegisterRepository; |
|||
private readonly IRepository<PatientRegister, Guid> _patientRegisterRepository; |
|||
private readonly IRepository<RegisterCheck, Guid> _registerCheckRepository; |
|||
private readonly IRepository<RegisterCheckAsbitem, Guid> _registerCheckAsbitemRepository; |
|||
private readonly IRepository<RoomDetail> _roomDetailRepository; |
|||
private readonly IRepository<Room, Guid> _roomRepository; |
|||
|
|||
public QueueRegisterManager( |
|||
IRepository<QueueRegister, Guid> queueRegisterRepository, |
|||
IRepository<PatientRegister, Guid> patientRegisterRepository, |
|||
IRepository<RegisterCheck, Guid> registerCheckRepository, |
|||
IRepository<RegisterCheckAsbitem, Guid> registerCheckAsbitemRepository, |
|||
IRepository<RoomDetail> roomDetailRepository, |
|||
IRepository<Room, Guid> roomRepository) |
|||
{ |
|||
_queueRegisterRepository = queueRegisterRepository; |
|||
_patientRegisterRepository = patientRegisterRepository; |
|||
_registerCheckRepository = registerCheckRepository; |
|||
_registerCheckAsbitemRepository = registerCheckAsbitemRepository; |
|||
_roomDetailRepository = roomDetailRepository; |
|||
_roomRepository = roomRepository; |
|||
} |
|||
/// <summary>
|
|||
/// 人员排队
|
|||
/// </summary>
|
|||
/// <param name="PatientRegisterId"></param>
|
|||
/// <param name="RoomId"></param>
|
|||
/// <returns></returns>
|
|||
public async Task<QueueRegister> ManualQueuingRoomAsync(Guid PatientRegisterId, Guid RoomId) |
|||
{ |
|||
|
|||
var maxDisplayOrder = await (await _queueRegisterRepository.GetQueryableAsync()) |
|||
.Where(m => m.RoomId == RoomId && m.CreationTime >= DateTime.Now.Date) |
|||
.MaxAsync(m => m.DisplayOrder); |
|||
|
|||
var queueRegisterEnt = new QueueRegister |
|||
{ |
|||
CompleteFlag = QueueRegisterCompleteFlag.Wait, |
|||
DisplayOrder = maxDisplayOrder + 1, |
|||
PatientRegisterId = PatientRegisterId, |
|||
RoomId = RoomId |
|||
}; |
|||
|
|||
return queueRegisterEnt; |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 自动排队
|
|||
/// </summary>
|
|||
/// <param name="PatientRegisterId"></param>
|
|||
/// <returns></returns>
|
|||
public async Task<QueueRegister> AutomaticQueuingRoomAsync(Guid PatientRegisterId) |
|||
{ |
|||
//获取当前人员登记的所有项目
|
|||
var asbitemIds = (from patientRegister in await _patientRegisterRepository.GetQueryableAsync() |
|||
join registerCheck in await _registerCheckRepository.GetQueryableAsync() |
|||
on patientRegister.Id equals registerCheck.PatientRegisterId |
|||
join registerCheckAsbitem in await _registerCheckAsbitemRepository.GetQueryableAsync() |
|||
on registerCheck.Id equals registerCheckAsbitem.RegisterCheckId |
|||
where patientRegister.Id == PatientRegisterId |
|||
select registerCheckAsbitem.AsbitemId).ToList(); |
|||
|
|||
if (!asbitemIds.Any()) |
|||
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 |
|||
{ |
|||
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); |
|||
|
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 修改排队人员状态
|
|||
/// </summary>
|
|||
/// <param name="QueueRegisterId"></param>
|
|||
/// <param name="CompleteFlag"></param>
|
|||
/// <returns></returns>
|
|||
public async Task<QueueRegister> UpdateQueueRegisterStatusAsync(Guid QueueRegisterId, char CompleteFlag) |
|||
{ |
|||
var queueRegisterEnt = await _queueRegisterRepository.FirstOrDefaultAsync(f => f.Id == QueueRegisterId); |
|||
if (queueRegisterEnt == null) |
|||
{ |
|||
throw new UserFriendlyException("排队ID不存在"); |
|||
} |
|||
|
|||
queueRegisterEnt.CompleteFlag = CompleteFlag; |
|||
|
|||
return queueRegisterEnt; |
|||
} |
|||
} |
|||
} |
|||
Write
Preview
Loading…
Cancel
Save
Reference in new issue