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