From d0303fa76bd44a39a63545d69fba27e278fb75a2 Mon Sep 17 00:00:00 2001
From: wxd <123@qq.com>
Date: Mon, 22 Jul 2024 11:49:42 +0800
Subject: [PATCH] =?UTF-8?q?=E5=8F=AB=E5=8F=B7?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../AutomaticQueuingRoomInputDto.cs | 11 ++
.../GetQueueRegisterListByRoomIdDto.cs | 51 ++++++
.../ManualQueuingRoomInputDto.cs | 20 +++
.../UpdateQueueRegisterStatusInputDto.cs | 21 +++
.../Rooms/BaseRoomDto.cs | 4 +-
.../QueueRegisters/QueueRegisterAppService.cs | 151 ++++++++++++++++--
.../QueueRegisters/QueueRegisterManager.cs | 127 +++++++++++++++
7 files changed, 370 insertions(+), 15 deletions(-)
create mode 100644 src/Shentun.Peis.Application.Contracts/QueueRegisters/AutomaticQueuingRoomInputDto.cs
create mode 100644 src/Shentun.Peis.Application.Contracts/QueueRegisters/GetQueueRegisterListByRoomIdDto.cs
create mode 100644 src/Shentun.Peis.Application.Contracts/QueueRegisters/ManualQueuingRoomInputDto.cs
create mode 100644 src/Shentun.Peis.Application.Contracts/QueueRegisters/UpdateQueueRegisterStatusInputDto.cs
create mode 100644 src/Shentun.Peis.Domain/QueueRegisters/QueueRegisterManager.cs
diff --git a/src/Shentun.Peis.Application.Contracts/QueueRegisters/AutomaticQueuingRoomInputDto.cs b/src/Shentun.Peis.Application.Contracts/QueueRegisters/AutomaticQueuingRoomInputDto.cs
new file mode 100644
index 0000000..db8b3a6
--- /dev/null
+++ b/src/Shentun.Peis.Application.Contracts/QueueRegisters/AutomaticQueuingRoomInputDto.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; }
+ }
+}
diff --git a/src/Shentun.Peis.Application.Contracts/QueueRegisters/GetQueueRegisterListByRoomIdDto.cs b/src/Shentun.Peis.Application.Contracts/QueueRegisters/GetQueueRegisterListByRoomIdDto.cs
new file mode 100644
index 0000000..2f776a1
--- /dev/null
+++ b/src/Shentun.Peis.Application.Contracts/QueueRegisters/GetQueueRegisterListByRoomIdDto.cs
@@ -0,0 +1,51 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Text;
+
+namespace Shentun.Peis.QueueRegisters
+{
+ public class GetQueueRegisterListByRoomIdDto
+ {
+ ///
+ /// 候诊列表
+ ///
+ public List WaitDetail { get; set; } = new List();
+
+ ///
+ /// 已呼列表
+ ///
+ public List AlreadyCalledDetail { get; set; } = new List();
+
+ ///
+ /// 过号列表
+ ///
+ public List OverNumberDetail { get; set; } = new List();
+
+ }
+
+
+
+ public class GetQueueRegisterListByRoomIdDetailDto
+ {
+ ///
+ /// 排队ID
+ ///
+ public Guid QueueRegisterId { get; set; }
+
+ ///
+ /// 姓名
+ ///
+ public string PatientName { get; set; }
+
+ ///
+ /// 是否VIP Y N
+ ///
+ public char IsVip { get; set; }
+
+ ///
+ /// 排队号码
+ ///
+ public int QueueRegisterNumber { get; set; }
+ }
+}
diff --git a/src/Shentun.Peis.Application.Contracts/QueueRegisters/ManualQueuingRoomInputDto.cs b/src/Shentun.Peis.Application.Contracts/QueueRegisters/ManualQueuingRoomInputDto.cs
new file mode 100644
index 0000000..d1b8607
--- /dev/null
+++ b/src/Shentun.Peis.Application.Contracts/QueueRegisters/ManualQueuingRoomInputDto.cs
@@ -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
+ {
+ ///
+ /// 病人登记ID
+ ///
+ public Guid PatientRegisterId { get; set; }
+
+ ///
+ /// 房间ID
+ ///
+ public Guid RoomId { get; set; }
+ }
+}
diff --git a/src/Shentun.Peis.Application.Contracts/QueueRegisters/UpdateQueueRegisterStatusInputDto.cs b/src/Shentun.Peis.Application.Contracts/QueueRegisters/UpdateQueueRegisterStatusInputDto.cs
new file mode 100644
index 0000000..ca326c0
--- /dev/null
+++ b/src/Shentun.Peis.Application.Contracts/QueueRegisters/UpdateQueueRegisterStatusInputDto.cs
@@ -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
+ {
+ ///
+ /// 排队ID
+ ///
+ public Guid QueueRegisterId { get; set; }
+
+ ///
+ /// 完成标志 (o=候诊 1=已呼 2=过号)
+ ///
+ public char CompleteFlag { get; set; }
+ }
+}
diff --git a/src/Shentun.Peis.Application.Contracts/Rooms/BaseRoomDto.cs b/src/Shentun.Peis.Application.Contracts/Rooms/BaseRoomDto.cs
index 504aa22..0c55a5c 100644
--- a/src/Shentun.Peis.Application.Contracts/Rooms/BaseRoomDto.cs
+++ b/src/Shentun.Peis.Application.Contracts/Rooms/BaseRoomDto.cs
@@ -6,10 +6,10 @@ namespace Shentun.Peis.Rooms
{
public class BaseRoomDto
{
- public Guid Id { get; set; }
+ public Guid RoomId { get; set; }
public string RoomName { get; set; }
- public int DisplayOrder { get; set; }
+ public decimal QueueTime { get; set; }
}
}
diff --git a/src/Shentun.Peis.Application/QueueRegisters/QueueRegisterAppService.cs b/src/Shentun.Peis.Application/QueueRegisters/QueueRegisterAppService.cs
index e31e68e..5f4e2e3 100644
--- a/src/Shentun.Peis.Application/QueueRegisters/QueueRegisterAppService.cs
+++ b/src/Shentun.Peis.Application/QueueRegisters/QueueRegisterAppService.cs
@@ -15,6 +15,7 @@ using System.Threading.Tasks;
using Volo.Abp;
using Volo.Abp.Application.Services;
using Volo.Abp.Domain.Repositories;
+using static NPOI.HSSF.Util.HSSFColor;
namespace Shentun.Peis.QueueRegisters
{
@@ -34,6 +35,7 @@ namespace Shentun.Peis.QueueRegisters
private readonly IRepository _asbitemRepository;
private readonly IRepository _roomDetailRepository;
private readonly CacheService _cacheService;
+ private readonly QueueRegisterManager _queueRegisterManager;
public QueueRegisterAppService(
IRepository queueRegisterRepository,
IRepository itemTypeRepository,
@@ -43,7 +45,8 @@ namespace Shentun.Peis.QueueRegisters
IRepository registerCheckAsbitemRepository,
IRepository asbitemRepository,
IRepository roomDetailRepository,
- CacheService cacheService)
+ CacheService cacheService,
+ QueueRegisterManager queueRegisterManager)
{
_queueRegisterRepository = queueRegisterRepository;
_itemTypeRepository = itemTypeRepository;
@@ -54,6 +57,7 @@ namespace Shentun.Peis.QueueRegisters
_asbitemRepository = asbitemRepository;
_roomDetailRepository = roomDetailRepository;
_cacheService = cacheService;
+ _queueRegisterManager = queueRegisterManager;
}
///
@@ -89,7 +93,7 @@ namespace Shentun.Peis.QueueRegisters
}
else
{
- throw new UserFriendlyException("当前无分诊信息");
+ return null;
}
}
@@ -206,18 +210,30 @@ namespace Shentun.Peis.QueueRegisters
[HttpPost("api/app/QueueRegister/GetRoomListByAsbitemId")]
public async Task> GetRoomListByAsbitemIdAsync(AsbitemIdInputDto input)
{
- var entListDto = (from room in await _roomRepository.GetQueryableAsync()
- join roomDetail in await _roomDetailRepository.GetQueryableAsync() on room.Id equals roomDetail.RoomId
- where roomDetail.AsbitemId == input.AsbitemId
- orderby room.DisplayOrder ascending
- select new BaseRoomDto
- {
- DisplayOrder = room.DisplayOrder,
- Id = room.Id,
- RoomName = room.DisplayName
- }).ToList();
+ var query = (from room in await _roomRepository.GetQueryableAsync()
+ join roomDetail in await _roomDetailRepository.GetQueryableAsync() on room.Id equals roomDetail.RoomId
+ join queueRegister in await _queueRegisterRepository.GetQueryableAsync() on room.Id equals queueRegister.RoomId into queueRegisterTemp
+ from queueRegisterHaveEmpty in queueRegisterTemp.DefaultIfEmpty()
+ where roomDetail.AsbitemId == input.AsbitemId
+ orderby room.DisplayOrder ascending
+ select new
+ {
+ roomId = room.Id,
+ roomName = room.DisplayName,
+ queueTime = room.QueueTime,
+ queueRegisterHaveEmpty
+ }).ToList();
- return entListDto;
+ var roomGroup = query.GroupBy(g => g.roomId).Select(s => new BaseRoomDto
+ {
+ RoomId = s.Key,
+ RoomName = s.FirstOrDefault().roomName,
+ QueueTime = s.Count(m => m.queueRegisterHaveEmpty != null) * s.FirstOrDefault().queueTime,
+ }).ToList();
+
+
+
+ return roomGroup;
}
@@ -231,5 +247,114 @@ namespace Shentun.Peis.QueueRegisters
{
await _queueRegisterRepository.DeleteAsync(d => d.Id == input.QueueRegisterId);
}
+
+ ///
+ /// 人工排队房间
+ ///
+ ///
+ ///
+ [HttpPost("api/app/QueueRegister/ManualQueuingRoom")]
+ public async Task ManualQueuingRoomAsync(ManualQueuingRoomInputDto input)
+ {
+ //删除排队操作
+ await _queueRegisterRepository.DeleteAsync(d => d.PatientRegisterId == input.PatientRegisterId);
+
+ var entity = await _queueRegisterManager.ManualQueuingRoomAsync(input.PatientRegisterId, input.RoomId);
+
+ await _queueRegisterRepository.InsertAsync(entity);
+
+ return await GetQueueRegisterByPatientRegisterIdAsync(new PatientRegisterIdInputDto
+ {
+ PatientRegisterId = input.PatientRegisterId
+ });
+ }
+
+
+ ///
+ /// 自动排队房间
+ ///
+ ///
+ ///
+ [HttpPost("api/app/QueueRegister/AutomaticQueuingRoom")]
+ public async Task AutomaticQueuingRoomAsync(AutomaticQueuingRoomInputDto input)
+ {
+ //删除排队操作
+ await _queueRegisterRepository.DeleteAsync(d => d.PatientRegisterId == input.PatientRegisterId);
+
+ var entity = await _queueRegisterManager.AutomaticQueuingRoomAsync(input.PatientRegisterId);
+
+ await _queueRegisterRepository.InsertAsync(entity);
+
+ return await GetQueueRegisterByPatientRegisterIdAsync(new PatientRegisterIdInputDto
+ {
+ PatientRegisterId = input.PatientRegisterId
+ });
+
+ }
+
+
+ ///
+ /// 修改排队人员状态
+ ///
+ ///
+ ///
+ [HttpPost("api/app/QueueRegister/UpdateQueueRegisterStatus")]
+ public async Task UpdateQueueRegisterStatusAsync(UpdateQueueRegisterStatusInputDto input)
+ {
+ var entity = await _queueRegisterManager.UpdateQueueRegisterStatusAsync(input.QueueRegisterId, input.CompleteFlag);
+ await _queueRegisterRepository.UpdateAsync(entity);
+ }
+
+ ///
+ /// 获取医生诊台叫号人员列表 根据房间ID
+ ///
+ ///
+ ///
+ [HttpPost("api/app/QueueRegister/GetQueueRegisterListByRoomId")]
+ public async Task GetQueueRegisterListByRoomIdAsync(RoomIdInputDto input)
+ {
+ var entDto = new GetQueueRegisterListByRoomIdDto();
+ var query = from queueRegister in await _queueRegisterRepository.GetQueryableAsync()
+ join patientRegister in await _patientRegisterRepository.GetQueryableAsync()
+ on queueRegister.PatientRegisterId equals patientRegister.Id
+ where queueRegister.CreationTime >= DateTime.Now.Date
+ select new
+ {
+ completeFlag = queueRegister.CompleteFlag,
+ patientName = patientRegister.PatientName,
+ isVip = patientRegister.IsVip,
+ queueRegisterId = queueRegister.Id,
+ queueRegisterNumber = queueRegister.DisplayOrder
+ };
+
+ entDto.WaitDetail = query.Where(m => m.completeFlag == QueueRegisterCompleteFlag.Wait)
+ .Select(s => new GetQueueRegisterListByRoomIdDetailDto
+ {
+ IsVip = s.isVip,
+ PatientName = s.patientName,
+ QueueRegisterId = s.queueRegisterId,
+ QueueRegisterNumber = s.queueRegisterNumber
+ }).ToList();
+
+ entDto.AlreadyCalledDetail = query.Where(m => m.completeFlag == QueueRegisterCompleteFlag.AlreadyCalled)
+ .Select(s => new GetQueueRegisterListByRoomIdDetailDto
+ {
+ IsVip = s.isVip,
+ PatientName = s.patientName,
+ QueueRegisterId = s.queueRegisterId,
+ QueueRegisterNumber = s.queueRegisterNumber
+ }).ToList();
+
+ entDto.OverNumberDetail = query.Where(m => m.completeFlag == QueueRegisterCompleteFlag.OverNumber)
+ .Select(s => new GetQueueRegisterListByRoomIdDetailDto
+ {
+ IsVip = s.isVip,
+ PatientName = s.patientName,
+ QueueRegisterId = s.queueRegisterId,
+ QueueRegisterNumber = s.queueRegisterNumber
+ }).ToList();
+
+ return entDto;
+ }
}
}
diff --git a/src/Shentun.Peis.Domain/QueueRegisters/QueueRegisterManager.cs b/src/Shentun.Peis.Domain/QueueRegisters/QueueRegisterManager.cs
new file mode 100644
index 0000000..1a4c36a
--- /dev/null
+++ b/src/Shentun.Peis.Domain/QueueRegisters/QueueRegisterManager.cs
@@ -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 _queueRegisterRepository;
+ private readonly IRepository _patientRegisterRepository;
+ private readonly IRepository _registerCheckRepository;
+ private readonly IRepository _registerCheckAsbitemRepository;
+ private readonly IRepository _roomDetailRepository;
+ private readonly IRepository _roomRepository;
+
+ public QueueRegisterManager(
+ IRepository queueRegisterRepository,
+ IRepository patientRegisterRepository,
+ IRepository registerCheckRepository,
+ IRepository registerCheckAsbitemRepository,
+ IRepository roomDetailRepository,
+ IRepository roomRepository)
+ {
+ _queueRegisterRepository = queueRegisterRepository;
+ _patientRegisterRepository = patientRegisterRepository;
+ _registerCheckRepository = registerCheckRepository;
+ _registerCheckAsbitemRepository = registerCheckAsbitemRepository;
+ _roomDetailRepository = roomDetailRepository;
+ _roomRepository = roomRepository;
+ }
+ ///
+ /// 人员排队
+ ///
+ ///
+ ///
+ ///
+ public async Task 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;
+ }
+
+ ///
+ /// 自动排队
+ ///
+ ///
+ ///
+ public async Task 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);
+
+ }
+
+ ///
+ /// 修改排队人员状态
+ ///
+ ///
+ ///
+ ///
+ public async Task 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;
+ }
+ }
+}